Dan和Jim正在为10月的RChain年度大会紧锣密鼓地开发链上投票功能: RV2020,今天我们先睹为快,试着走一下整个流程。beta测试版从这里进入:
https://rv2020-beta.netlify.app/,目前链上对接的是测试网。
网站首页
你的浏览器必须先安装Metmask,并且导入了已经在Coop登记的投票专用私钥。点击投票页面右上角的Sign In, MetaMask与投票页面连接。
连接账户
登录后,测试选票的信息会展示出来。
显示选票
测试选票上有四个候选董事及一条提案。每个候选董事有三个选择:反对,支持和弃权。
选票说明
测试选票的相关说明见:
gist.github.com/dckc/ca240e5336d0ee3e4f5cf31c4f629a30
看,候选人都是名人。
对候选人进行选择后,会生成对应的智能合约代码:
match("1111kwFVksomdFsTXuExGm9CbwKRn2ZK2SQvwKM7SvZCPxX8fT9gb", 1, [
"1111TnFUN7eZBWXp3QQACQRRxpcS5uH5Bpf67vikWhA5e3F6ikAmU",
"1111JoeZHDYXqyAgo89VaidQnp7W7M9pvdkFUJTqEBU7SHKx6WF2z",
"1111krbAKSbyGA9vfa7w4K2pKAxZZn6qjaVEduDLWotDZ8HLt2aXR"
]) {
(revAddrFrom, amount, toAddrs) => {
new rl(`rho:registry:lookup`), RevVaultCh, ListOpsCh in {
rl!(`rho:rchain:revVault`, *RevVaultCh) |
rl!(`rho:lang:listOps`, *ListOpsCh) |
for (@(_, RevVault) <- RevVaultCh;
@(_, ListOps) <- ListOpsCh) {
new vaultCh, revVaultkeyCh, txfr1,
deployerId(`rho:rchain:deployerId`),
deployId(`rho:rchain:deployId`)
in {
@RevVault!("findOrCreate", revAddrFrom, *vaultCh) |
@RevVault!("deployerAuthKey", *deployerId, *revVaultkeyCh) |
for (@vault <- vaultCh; key <- revVaultkeyCh) {
match vault {
(true, vault) => {
@ListOps!("parMap", toAddrs, *txfr1, *deployId) |
contract txfr1(@revAddrTo, return) = {
new vaultTo in {
@RevVault!("findOrCreate", revAddrTo, *vaultTo) |
for (_ <- vaultTo) {
@vault!("transfer", revAddrTo, amount, *key, *return)
}
}
}
}
err => {
deployId!((false, "REV vault cannot be found or created."))
}
}
}
}
}
}
}
}
这段代码其实是分别对为候选人单独设立的智能合约打1个REV,用币投票。一币一票,但是多投无效。
点击 Sign and Submit按钮就会进入签名环节,自动跳转到Metamask,使用你的私钥进行签名。
签名
签名后的数据会上链,在页面的右下角会显示:
Checking result ...............
过一段时间,信息会变成:
✓ (true, true, true, true) // cost: 549849
表示投票成功。
选票统计
在前端页面并不能看到选票统计的功能,选票统计代码在这里:
github.com/rchain-community/rv2020/blob/master/src/cli/tally.js
选票的制作
RV2020 设置了通用的选票格式,采用json格式,所以可以用它很方便地设计自己的投票。github.com/rchain-community/rv2020/blob/master/src/web/ballotexample.json
{
"Member Swag": {
"shortDesc": "The Item of Business I want to propose is to provide all new members with stickers and t-shirts with the RChain logo on it as part of their membership onboarding package.",
"docLink": "https://docs.google.com/docs/SWAG.doc",
"yesAddr": "11112i8bYVDYcm4MSbY3d1As28uY151xoMS7AyiTvZ2YmNJ8Nw13v9",
"noAddr": "11112uGayGEi57D44Drq3V4iw5WWyfXbcVvsDangRTE7TaR3J4U4FD"
},
"Board: DaD": {
"shortDesc": "Daffy Duck for Board Member",
"yesAddr": "1111TnFUN7eZBWXp3QQACQRRxpcS5uH5Bpf67vikWhA5e3F6ikAmU",
"noAddr": "11112Cwtg2Bs4WUAYrXhL9xZXXSXr9Gn62Cty39RhUaBnqjrKkqwAZ"
},
"Board: DoD": {
"shortDesc": "Donald Duck for Board Member",
"yesAddr": "1111rbdV9Lsw6DyMSq8ySXDacX7pRUxmVGoYho9gGtfZcQYFdAN42",
"noAddr": "1111JoeZHDYXqyAgo89VaidQnp7W7M9pvdkFUJTqEBU7SHKx6WF2z"
},
"Board: WEC": {
"shortDesc": "Wile E. Coyote for Board Member",
"yesAddr": "11112gUFvJR6JBDYJURETaWUBpEDa1EyjgRHFncEfQ4hGECnciPnhw",
"noAddr": "11112aoa6NLYomYZro566XZVGEXyCDqeqDcp8Pzg81Ckuws6SexC99"
},
"Board: RR": {
"shortDesc": "Road Runner for Board Member",
"yesAddr": "1111krbAKSbyGA9vfa7w4K2pKAxZZn6qjaVEduDLWotDZ8HLt2aXR",
"noAddr": "1111swBFUPVRwR4ugkDBCvrLwPeR1621B1cHQf3cAkNxt3Zad2eac"
}
}
项目代码库:
github.com/rchain-community/rv2020
离RChain年度大会还有不到1个月的时间,投票功能还在不断的迭代中,预计会和RChat功能一起发布。
欢迎关注 “Rholang中文社区” 公众号
欢迎开发者加入 “RChain开发者” 微信群。加群请加lowbird微信,拉你入群。非开发者请勿加,会有一轮测试,通过者方可入群。