智能合约调用示例
2018-02-01 00:59
253 查看
故事是这样的,有5个小伙伴,他们为
启动
解锁,保证
把合约部署(合约代码戳这里)上去,楼主这里使用的是 truffle部署合约,其它的方式也是可以的;另外,部署合约的时候,需要给构造器传一个数组参数,楼主这里给的是
上述 Ballot 后面那串即合约存储地址
此处要展示的是一个投票的全过程
合建合约实例
addr 和 abi是分别赋值为合约存储地址 和 合约abi的变量。此过程不是一个交易,所以无需继续挖矿
验证合约实例是否正确
可以看到合约已经部署上去了,实例也已成功。如果把参数换为 1、2可以分别得到另外两个候选项
分配投票权
这里先给
注意,这里如果是第一次调用使用合约方法一定要加gas参数 否则会调用失败。可以看到这是一个新的交易,继续挖矿,让矿工打包…验证一下,投票权是否已经分配成功
如上,
开始投票
此步骤需要保证参与投票的账户都有资产,否则调用合约方法的时候会失败。这里先用 eth.accounts[0] 给1号绿豆芽(序号是从0开始的)投票
继续挖矿,待打包后查看下投票是否成功
可以看到,票数最多的是
原文地址: https://bitshuo.com/topic/58611e404dea36e72c1b3786
黄豆芽,
黑豆芽,
绿豆芽中的哪种最好吃发生了分歧,于是它们准备发起一个投票。但是大家都希望投票的过程是完全去中心化的…最后他们决定使用区块链智能合约来解决这个问题
准备工作
启动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票。可以继续再用其它的账户进行投票,并查看最终的投票结果
原文地址: https://bitshuo.com/topic/58611e404dea36e72c1b3786
相关文章推荐
- 【智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例
- 如何用web3j调用智能合约
- 基于mcat开发智能合约应用(二)调用合约
- 智能合约调用另一合约中的payable方法
- 如何部署并调用ethereum智能合约
- 以太坊智能合约Hello World示例程序
- 以太坊智能合约Hello World示例程序
- 以太坊智能合约代币应用开发(5)-web3调用智能代币合约
- 手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法
- 【智能合约】以太坊中智能合约调用中用的gas相关概念详解
- 智能合约部署及调用
- 浅入浅出智能合约 - 调用(三)
- 在geth客户端调用已部署的智能合约
- 如何开发编译部署调用智能合约
- 区块链 之 部署和调用以太坊智能合约
- 在geth客户端调用已部署的智能合约
- 以太坊智能合约投票示例Java模拟实现
- 以太坊智能合约开发DApp应用示例
- Solidity智能合约调用智能合约
- remix调用合约方法错误:Failed to decode output