溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言區塊鏈怎么調用智能合約

發布時間:2021-10-29 15:05:01 來源:億速云 閱讀:250 作者:iii 欄目:開發技術

本篇內容主要講解“go語言區塊鏈怎么調用智能合約”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“go語言區塊鏈怎么調用智能合約”吧!

1. 獲取abi文件

合約的接口

在remix工具中編譯合約后,會有一個abi,復制

go語言區塊鏈怎么調用智能合約

然后新建一個xx.abi文件,把賦值的粘貼到里面

go語言區塊鏈怎么調用智能合約

注意:代碼變了,重新編譯后abi也會變,所以一定要用最新的abi

也可以通過solc生成abi:

solc --bin test.sol -o test.abi

2. 安裝abigen工具

用來生成go文件,

下載文件:github地址

go語言區塊鏈怎么調用智能合約

go語言區塊鏈怎么調用智能合約

找到這個main.go文件,進行go build,生成abigen.exe文件。

go語言區塊鏈怎么調用智能合約

然后放在bin目錄下的這里

go語言區塊鏈怎么調用智能合約

然后就可以在這里驗證了

go語言區塊鏈怎么調用智能合約

使用abigen工具生成go文件

abigen --abi xx.abi --pkg packagename --type structname --out xx.go

abi 文件在 remix 部署時可以得到pkg 指定輸出文件的包名,也就是package 名稱type 指定合約結構體名稱out 指定輸出go文件名稱

go語言區塊鏈怎么調用智能合約

3. remix連接私有鏈

geth啟動私鏈,要指定rpccorsdomain *,不然在remix中是連接不上的。

go語言區塊鏈怎么調用智能合約

選擇Web3 Provider方式,默認連接私有鏈8545端口

go語言區塊鏈怎么調用智能合約

但是可以看到我們這里是沒有account的

go語言區塊鏈怎么調用智能合約

所以我們可以創建一個account

go語言區塊鏈怎么調用智能合約

創建了兩個之后

go語言區塊鏈怎么調用智能合約

就可以在這里看見了。

4. 合約部署

1.連接私有鏈:選擇Web3 Provider,默認端口號時8545,如果geth啟動的rpc端口號不一致,改成一致

2.部署合約

可能會出現下面幾種錯誤,依此列出解決辦法
1 .Error: authentication needed: password or unlock:這種報錯解鎖下賬戶即可
賬戶解鎖:personal.unlockAccount(“賬戶地址”)

go語言區塊鏈怎么調用智能合約

unlock一下就行了

go語言區塊鏈怎么調用智能合約

2 .Returned error: exceeds block gas limit:出現這種錯誤就看塊號的gaslimit,部署時改成一直
獲取塊號:eth.blockNumber
根據塊號獲取詳細信息:eth.getBlock(0) 會看到gasLimit的值,在部署時的gaslimit不能大于這個

go語言區塊鏈怎么調用智能合約

go語言區塊鏈怎么調用智能合約

3 .Returned error: insufficient funds for gas * price + value:部署合約需要手續費,得賺取,通過挖礦

go語言區塊鏈怎么調用智能合約

沒錢, 要挖礦賺錢。

go語言區塊鏈怎么調用智能合約

開啟指定線程數挖礦:miner.start(1)

停止挖礦:miner.stop()

檢查是否在挖礦:eth.mining true:在挖礦,false:不在挖礦

獲取賬戶地址數組:eth.accounts

獲取挖礦地址:eth.coinbase 默認第一個創建的賬戶

查看第一個賬戶余額:eth.getBalance(eth.accounts[0])

獲取指定賬戶的余額:eth.getBalance(“賬戶地址”)

go語言區塊鏈怎么調用智能合約

5. 初始化私有鏈節點創世塊

新建一個genesis.json文件,內容如下

{
    "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:挖礦賬戶地址,隨便填,后面可以設置,一般默認第一個創建的用戶

difficulty: 設置當前區塊的難度,如果難度過大,cpu挖礦就很難,這里設置較小難度

gasLimit: 該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總和,填最大即可。

nonce: nonce就是一個64位隨機數,用于挖礦,注意他和mixhash的設置需要滿足以太坊的Yellow paper

mixhash:與nonce配合用于挖礦,由上一個區塊的一部分生成的hash。

parentHash: 上一個區塊的hash值,因為是創世塊,所以這個值是0extraData:

timestamp: 設置創世塊的時間戳

alloc: 用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣的賬號,需要的時候自己創建即可以。

cmd進入到存放json文件的路徑

geth -datadir "fanone" init genesis.json

go語言區塊鏈怎么調用智能合約

go語言區塊鏈怎么調用智能合約

go語言區塊鏈怎么調用智能合約

6. 合約部署

部署時候需要支付手續費

http://ethscan.hubwiz.com/

7. 調用

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"
    // 將字符串地址轉為common.Address
    common_addr := common.HexToAddress(addr)
    if err != nil {
        panic("連接以太坊合約出錯")
    }
    // 創建合約對象
    contract_obj,err11 := contract.NewTestAddress(common_addr,client)
    if err11 !=nil {
        panic("創建合約對象出錯")
    }
    fmt.Println(contract_obj.TestAddressCaller) // Caller訪問函數
    fmt.Println(contract_obj.TestAddressTransactor) // Transactor 有函數
    fmt.Println(contract_obj.TestAddressFilterer)  // 沒什么作用
}

到此,相信大家對“go語言區塊鏈怎么調用智能合約”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女