智能合约的调用介绍

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述
故事是这样的,有5个小伙伴,他们为

黄豆芽, 黑豆芽,绿豆芽 中的哪种最好吃发生了分歧,所以它们预备主张一个投票。可是我们都期望投票的进程是完全去中心化的…毕竟他们抉择运用区块链智能合约来处理这个问题

预备工作

发动geth(为了更快的打包,主张dev形式),新建5个账户,并把defaultAccount(假定没有设置一般为eth.accounts[0]) 解锁,确保defaultAccount账户里边有必定的财物

把合约安置(合约代码戳这儿)上去,楼主这儿运用的是truffle安置合约,其它的方式也是能够的;其他,安置合约的时分,需求给结构器传一个数组参数,楼主这儿给的是 var proposalNames = [‘huangDY’, ‘lvDY’, ‘heiDY’]; 即3个候选选项

root@ubuntu:~/contract/ballot# truffle migrate

Running migration: 1_initial_migration.js

Deploying Ballot…

Ballot: 0x6b2ddc515fc610690e34dfbd4915698b75add647

Saving successful migration to network…

Saving artifacts…

上述 Ballot 后面那串即合约存储地址

初步调用

此处要展示的是一个投票的全进程

合建合约实例

var ballotInstance = eth.contract(abi).at(addr);

addr 和 abi是别离赋值为合约存储地址 和 合约abi的变量。此进程不是一个生意,所以无需持续挖矿

验证合约实例是否正确

[“0x6875616e67445900000000000000000000000000000000000000000000000000”, 0]

web3.toUtf8(‘0x6875616e67445900000000000000000000000000000000000000000000000000’)

“huangDY”

能够看到合约现已安置上去了,实例也已成功。假定把参数换为 1、2能够别离得到其他两个候选项

分配投票权

这儿先给

eth.account[1] 分配投票权

ballotInstance.giveRightToVote.sendTransaction(eth.accounts[1], “xiaoA”, {from:eth.accounts[0], gas:4700000});

I1226 21:08:07.308936 internal/ethapi/api.go:1047] Tx(0xe7fa31e646f6aefe804f3fc4bf3563a05993c58609270210590f62a5f5b03703) to: 0x6b2ddc515fc610690e34dfbd4915698b75add647

“0xe7fa31e646f6aefe804f3fc4bf3563a05993c58609270210590f62a5f5b03703”

留心,这儿假定是第一次调用运用合约办法必定要加gas参数 否则会调用失利。能够看到这是一个新的生意,持续挖矿,让矿工打包…验证一下,投票权是否现已分配成功

ballotInstance.voters(eth.accounts[1])

[“0x7869616f41000000000000000000000000000000000000000000000000000000”, false, 0, 1482757798, 0]

web3.toUtf8(‘0x7869616f41000000000000000000000000000000000000000000000000000000’);

“xiaoA”

如上,eth.accounts[1] 现已分配了投票权。持续,给其它4个账户也分配权限,分配完之后检查一下

ballotInstance.votersNum()

5

初步投票

此进程需求确保参加投票的账户都有财物,否则调用合约办法的时分会失利。这儿先用 eth.accounts[0] 给1号绿豆芽(序号是从0初步的)投票

ballotInstance.vote.sendTransaction(1, {from:eth.accounts[0], gas:4700000})

I1226 21:24:02.752948 internal/ethapi/api.go:1047] Tx(0xddb8efc2083b32fca5bdf99877408638fb1fa2ba95be221473653e234ca0b6a5) to: 0x6b2ddc515fc610690e34dfbd4915698b75add647

“0xddb8efc2083b32fca5bdf99877408638fb1fa2ba95be221473653e234ca0b6a5”

持续挖矿,待打包后检查下投票是否成功

ballotInstance.winningProposalIndex()

1

ballotInstance.winnerName()

“0x6c76445900000000000000000000000000000000000000000000000000000000”

web3.toUtf8(‘0x6c76445900000000000000000000000000000000000000000000000000000000’);

“lvDY”

能够看到,票数最多的是lvDY, 其它默许是0票。能够持续再用其它的账户进行投票,并检查毕竟的投票成果

猜你喜欢

转载自blog.csdn.net/weixin_44172023/article/details/95176042
今日推荐