您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“go語言區(qū)塊鏈怎么調(diào)用智能合約”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“go語言區(qū)塊鏈怎么調(diào)用智能合約”吧!
在remix工具中編譯合約后,會(huì)有一個(gè)abi
,復(fù)制
然后新建一個(gè)xx.abi文件,把賦值的粘貼到里面
注意:代碼變了,重新編譯后abi
也會(huì)變,所以一定要用最新的abi
也可以通過solc生成abi:
solc --bin test.sol -o test.abi
用來生成go文件,
下載文件:github地址
找到這個(gè)main.go文件,進(jìn)行g(shù)o build,生成abigen.exe文件。
然后放在bin目錄下的這里
然后就可以在這里驗(yàn)證了
使用abigen工具生成go文件
abigen --abi xx.abi --pkg packagename --type structname --out xx.go
abi 文件在 remix 部署時(shí)可以得到pkg 指定輸出文件的包名,也就是package 名稱type 指定合約結(jié)構(gòu)體名稱out 指定輸出go文件名稱
geth
啟動(dòng)私鏈,要指定rpccorsdomain *,不然在remix中是連接不上的。
選擇Web3 Provider
方式,默認(rèn)連接私有鏈8545端口
但是可以看到我們這里是沒有account的
所以我們可以創(chuàng)建一個(gè)account
創(chuàng)建了兩個(gè)之后
就可以在這里看見了。
1.連接私有鏈:選擇Web3 Provider
,默認(rèn)端口號(hào)時(shí)8545
,如果geth
啟動(dòng)的rpc
端口號(hào)不一致,改成一致
2.部署合約
可能會(huì)出現(xiàn)下面幾種錯(cuò)誤,依此列出解決辦法
1 .Error: authentication needed: password or unlock:這種報(bào)錯(cuò)解鎖下賬戶即可
賬戶解鎖:personal.unlockAccount(“賬戶地址”)
unlock一下就行了
2 .Returned error: exceeds block gas limit:出現(xiàn)這種錯(cuò)誤就看塊號(hào)的gaslimit,部署時(shí)改成一直
獲取塊號(hào):eth.blockNumber
根據(jù)塊號(hào)獲取詳細(xì)信息:eth.getBlock(0) 會(huì)看到gasLimit的值,在部署時(shí)的gaslimit不能大于這個(gè)
3 .Returned error: insufficient funds for gas * price + value:部署合約需要手續(xù)費(fèi),得賺取,通過挖礦
沒錢, 要挖礦賺錢。
開啟指定線程數(shù)挖礦:miner.start(1)
停止挖礦:miner.stop()
檢查是否在挖礦:eth.mining true:在挖礦,false:不在挖礦
獲取賬戶地址數(shù)組:eth.accounts
獲取挖礦地址:eth.coinbase 默認(rèn)第一個(gè)創(chuàng)建的賬戶
查看第一個(gè)賬戶余額:eth.getBalance(eth.accounts[0])
獲取指定賬戶的余額:eth.getBalance(“賬戶地址”)
新建一個(gè)genesis.json文件,內(nèi)容如下
{ "config":{ "chainId":15, "homesteadBlock":0, "eip155Block":0, "eip158Block":0 }, "coinbase":"0x0000000000000000000000000000000000000000", "difficulty":"0x40000", "extraData":"", "gasLimit":"0xffffffff", "nonce":"0x0000000000000042", "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp":"0x00", "alloc":{ } }
含義:
coinbase
:挖礦賬戶地址,隨便填,后面可以設(shè)置,一般默認(rèn)第一個(gè)創(chuàng)建的用戶
difficulty
: 設(shè)置當(dāng)前區(qū)塊的難度,如果難度過大,cpu挖礦就很難,這里設(shè)置較小難度
gasLimit
: 該值設(shè)置對(duì)GAS的消耗總量限制,用來限制區(qū)塊能包含的交易信息總和,填最大即可。
nonce
: nonce就是一個(gè)64位隨機(jī)數(shù),用于挖礦,注意他和mixhash的設(shè)置需要滿足以太坊的Yellow paper
mixhash
:與nonce配合用于挖礦,由上一個(gè)區(qū)塊的一部分生成的hash。
parentHash
: 上一個(gè)區(qū)塊的hash值,因?yàn)槭莿?chuàng)世塊,所以這個(gè)值是0extraData:
timestamp
: 設(shè)置創(chuàng)世塊的時(shí)間戳
alloc
: 用來預(yù)置賬號(hào)以及賬號(hào)的以太幣數(shù)量,因?yàn)樗接墟溚诘V比較容易,所以我們不需要預(yù)置有幣的賬號(hào),需要的時(shí)候自己創(chuàng)建即可以。
cmd進(jìn)入到存放json文件的路徑
geth -datadir "fanone" init genesis.json
部署時(shí)候需要支付手續(xù)費(fèi)
http://ethscan.hubwiz.com/
github.com/ethereum/go-ethereum v1.10.0
package main import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/common" "eth_block/utils/contract/abi" "fmt" "github.com/ethereum/go-ethereum/accounts/abi/bind" ) func main() { // 連接rpc client,err := ethclient.Dial("http://127.0.0.1:8545") // 定義要操作合約的賬戶地址 addr := "0x29794ab2ed6c47faff7ebdd6dcdd71a263e25460" // 將字符串地址轉(zhuǎn)為common.Address common_addr := common.HexToAddress(addr) if err != nil { panic("連接以太坊合約出錯(cuò)") } // 創(chuàng)建合約對(duì)象 contract_obj,err11 := contract.NewTestAddress(common_addr,client) if err11 !=nil { panic("創(chuàng)建合約對(duì)象出錯(cuò)") } fmt.Println(contract_obj.TestAddressCaller) // Caller訪問函數(shù) fmt.Println(contract_obj.TestAddressTransactor) // Transactor 有函數(shù) fmt.Println(contract_obj.TestAddressFilterer) // 沒什么作用 }
到此,相信大家對(duì)“go語言區(qū)塊鏈怎么調(diào)用智能合約”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。