日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

智能合约调用示例

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能合约调用示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

故事是這樣的,有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.jsDeploying 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

總結

以上是生活随笔為你收集整理的智能合约调用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。