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'
let ethUtils = new EthUtils(rpcHost)
三、Daos 发布
手动发布即可 (Daos.sol)
现在已经发布了一个用于测试
ropsten: 0x7284C823ea3AD29bEDfd09Ede1107981E9519896
1. 验证某组织是否已注册
let daos = new Daos(ethUtils, daosAddress)
let addressRegistered = (await daos.addressIndex(address)) > 0
let nameRegistered = (await daos.nameIndex(name)) > 0
四、组织相关操作
文档只只列出了部分方法,api中有全量方法,可以参考类Organization.
1. 发布组织
let deployData = Organization.genDeployData(daosAddress, orgName)
var tx = {
value: '0',
data: deployData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('deploy organization hash:', txhash)
} else {
console.log(err)
}
})
2. 实例化组织对象
let org = new Organization(ethUtils, orgContractAddress)
3. 设置token地址 (只能操作一次)
只有组织创建者才有权限,合约内有权限验证.
通过comunion平台发布token时,token合约会自动调用此方法,不需要再单独调用
let setTokenData = await org.genSetTokenData(tokenAddress)
var tx = {
value: '0',
to: orgAddress,
data: setTokenData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('set token hash:', txhash)
} else {
console.log(err)
}
})
4. 添加并设置成员角色 (可批量)
如果成员已经存在即修改成员角色; 只有组织创建者才有权限,合约内有权限验证
let role1 = ethUtils.web3.utils.fromUtf8("R1")
let role2 = ethUtils.web3.utils.fromUtf8("R2")
let members = [addr1, addr2, addr3]
let roles = [role1, role1, role2]
let setMembersData = await org.genAddOrUpdateMembersData(members, roles)
var tx = {
value: '0',
to: orgAddress,
data: setMembersData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('set members hash:', txhash)
} else {
console.log(err)
}
})
5. 删除成员(可批量)
只有组织创建者才有权限,合约内有权限验证
let members = [addr1, addr2]
let removeMembersData = await org.genRemoveMembersData(members)
var tx = {
value: '0',
to: orgAddress,
data: removeMembersData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('remove members hash:', txhash)
} else {
console.log(err)
}
})
五、OrgToken 相关
文档只只列出了部分重要方法,api中有全量方法,可以参考类OrgToken.
1. 发布Token
let deployData = OrgToken.genDeployData(orgAddress, name, symbol, totalSupply)
var tx = {
value: '0',
data: deployData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('deploy token hash:', txhash)
} else {
console.log(err)
}
})
2. 实例化OrgToken对象
let token = new OrgToken(ethUtils, orgTokenAddress)
3. 批量额度授权 (授权及添加子账户)
let spenders = [addr1, addr2, addr3]
let values = ['10000000000000', '20000000000000', '30000000000000']
let approveData = await token.genApproveExtData(spenders, values)
var tx = {
value: '0',
to: orgTokenAddress,
data: approveData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('approveExt hash:', txhash)
} else {
console.log(err)
}
})
4. 批量转账
let accounts = [addr1, addr2, addr3]
let amounts = ['10000000000000', '20000000000000', '30000000000000']
let tansferData = await token.genTransferExtData(accounts, ammounts)
var tx = {
value: '0',
to: orgTokenAddress,
data: tansferData
}
web3.eth.sendTransaction(tx, (err, txhash) => {
if (!err) {
console.log('transferExt hash:', txhash)
} else {
console.log(err)
}
})
六、其他
let result = await ethUtils.getTransactionReceipt(txhash)
let count = await ethUtils.getConfirmCount(txhash)