comunion-dao
v0.0.13
Published
comunion dao
Downloads
21
Maintainers
Readme
comunion-dao
Comunion 合约 及 node.js SDK
一、合约介绍:
1. Daos
存储所有创建的组织,并可验证某名称或者地址是否已经注册到Daos, comunion的其他合约都依赖此合约需要最先发布
Organization
组织合约,每创建一个组织就有一个对应的 Organization 合约; 提供添加删除核心成员,设置成员角色等功能。
2. OrgToken
组织 Token
二、SDK安装、 初始化
npm install comunion-dao
import { EthUtils, Daos, Organization, OrgToken } from 'comunion-dao'
// rpcHost: 以太坊rpc请求地址
let ethUtils = new EthUtils(rpcHost)
三、Daos 发布
手动发布即可 (Daos.sol)
现在已经发布了一个用于测试
ropsten: 0x7284C823ea3AD29bEDfd09Ede1107981E9519896
1. 验证某组织是否已注册
// daosAddress: Daos合约地址
let daos = new Daos(ethUtils, daosAddress)
// 验证某地址 address 是否已经注册
let addressRegistered = (await daos.addressIndex(address)) > 0
// 验证某名字 name 是否已经注册
let nameRegistered = (await daos.nameIndex(name)) > 0
四、组织相关操作
文档只只列出了部分方法,api中有全量方法,可以参考类Organization.
1. 发布组织
// daosAddress: Daos 合约地址, orgName: 组织名称
let deployData = Organization.genDeployData(daosAddress, orgName)
// 调起metamask
var tx = {
value: '0',
data: deployData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('deploy organization hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
2. 实例化组织对象
let org = new Organization(ethUtils, orgContractAddress)
3. 设置token地址 (只能操作一次)
只有组织创建者才有权限,合约内有权限验证.
通过comunion平台发布token时,token合约会自动调用此方法,不需要再单独调用
let setTokenData = await org.genSetTokenData(tokenAddress)
// 调起metamask
var tx = {
value: '0',
to: orgAddress, // 组织合约地址
data: setTokenData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('set token hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
4. 添加并设置成员角色 (可批量)
如果成员已经存在即修改成员角色; 只有组织创建者才有权限,合约内有权限验证
// role 字符串长度不能超过32字节
let role1 = ethUtils.web3.utils.fromUtf8("R1")
let role2 = ethUtils.web3.utils.fromUtf8("R2")
// members 与 roles 按顺序一一对应
let members = [addr1, addr2, addr3]
let roles = [role1, role1, role2]
let setMembersData = await org.genAddOrUpdateMembersData(members, roles)
// 调起metamask
var tx = {
value: '0',
to: orgAddress, // 组织合约地址
data: setMembersData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('set members hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
5. 删除成员(可批量)
只有组织创建者才有权限,合约内有权限验证
let members = [addr1, addr2]
let removeMembersData = await org.genRemoveMembersData(members)
// 调起metamask
var tx = {
value: '0',
to: orgAddress, // 组织合约地址
data: removeMembersData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('remove members hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
五、OrgToken 相关
文档只只列出了部分重要方法,api中有全量方法,可以参考类OrgToken.
1. 发布Token
// orgAddress: 组织合约地址, name: 名称, symbol: 简称, totalSupply: 初始发行量(单位wei, 数值应该为 发行个数 * 10^decimals, 从平台发布的token decimals默认为18)
let deployData = OrgToken.genDeployData(orgAddress, name, symbol, totalSupply)
// 调起metamask
var tx = {
value: '0',
data: deployData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('deploy token hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
2. 实例化OrgToken对象
let token = new OrgToken(ethUtils, orgTokenAddress)
3. 批量额度授权 (授权及添加子账户)
// 需要授权的账号列表
let spenders = [addr1, addr2, addr3]
// 授权金额 (单位为wei, 取值应该是 数量 * 10^decimals, 从平台发布的token decimals默认为18)
let values = ['10000000000000', '20000000000000', '30000000000000']
// spenders 与 values 需要按顺序一一对应
let approveData = await token.genApproveExtData(spenders, values)
// 调起metamask
var tx = {
value: '0',
to: orgTokenAddress, // OrgToken合约地址
data: approveData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('approveExt hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
4. 批量转账
// 需要转账的账号列表
let accounts = [addr1, addr2, addr3]
// 需要转账的金额 (单位为wei, 取值应该是 数量 * 10^decimals, 从平台发布的token decimals默认为18)
let amounts = ['10000000000000', '20000000000000', '30000000000000']
// accounts 与 amounts 需要按顺序一一对应
let tansferData = await token.genTransferExtData(accounts, ammounts)
// 调起metamask
var tx = {
value: '0',
to: orgTokenAddress, // OrgToken合约地址
data: tansferData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('transferExt hash:', txhash)
// TODO 将 txhash 上传到服务端 用于验证
} else {
console.log(err)
}
})
六、其他
- 查询交易状态
// 查询交易结果 result.status 为 true 表示交易成功, result.contractAddress 为 发布的合约地址
let result = await ethUtils.getTransactionReceipt(txhash)
// 查询交易区块确认数
let count = await ethUtils.getConfirmCount(txhash)