亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go語(yǔ)言區(qū)塊鏈學(xué)習(xí)調(diào)用智能合約

 更新時(shí)間:2021年10月29日 11:57:52   作者:小生凡一  
這篇文章主要為大家介紹了go語(yǔ)言區(qū)塊鏈學(xué)習(xí)中如何調(diào)用智能合約的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

1. 獲取abi文件

合約的接口

在remix工具中編譯合約后,會(huì)有一個(gè)abi,復(fù)制

在這里插入圖片描述

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

在這里插入圖片描述

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

也可以通過(guò)solc生成abi:

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

2. 安裝abigen工具

用來(lái)生成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 名稱(chēng)type 指定合約結(jié)構(gòu)體名稱(chēng)out 指定輸出go文件名稱(chēng)

在這里插入圖片描述

3. remix連接私有鏈

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

在這里插入圖片描述

選擇Web3 Provider方式,默認(rèn)連接私有鏈8545端口

在這里插入圖片描述

但是可以看到我們這里是沒(méi)有account的

在這里插入圖片描述

所以我們可以創(chuàng)建一個(gè)account

在這里插入圖片描述

創(chuàng)建了兩個(gè)之后

在這里插入圖片描述

就可以在這里看見(jiàn)了。

4. 合約部署

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ò)解鎖下賬戶(hù)即可
賬戶(hù)解鎖:personal.unlockAccount(“賬戶(hù)地址”)

在這里插入圖片描述

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),得賺取,通過(guò)挖礦

在這里插入圖片描述

沒(méi)錢(qián), 要挖礦賺錢(qián)。

在這里插入圖片描述

開(kāi)啟指定線程數(shù)挖礦:miner.start(1)

停止挖礦:miner.stop()

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

獲取賬戶(hù)地址數(shù)組:eth.accounts

獲取挖礦地址:eth.coinbase 默認(rèn)第一個(gè)創(chuàng)建的賬戶(hù)

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

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

在這里插入圖片描述

5. 初始化私有鏈節(jié)點(diǎn)創(chuàng)世塊

新建一個(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:挖礦賬戶(hù)地址,隨便填,后面可以設(shè)置,一般默認(rèn)第一個(gè)創(chuàng)建的用戶(hù)

difficulty: 設(shè)置當(dāng)前區(qū)塊的難度,如果難度過(guò)大,cpu挖礦就很難,這里設(shè)置較小難度

gasLimit: 該值設(shè)置對(duì)GAS的消耗總量限制,用來(lái)限制區(qū)塊能包含的交易信息總和,填最大即可。

nonce: nonce就是一個(gè)64位隨機(jī)數(shù),用于挖礦,注意他和mixhash的設(shè)置需要滿(mǎn)足以太坊的Yellow paper

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

parentHash: 上一個(gè)區(qū)塊的hash值,因?yàn)槭莿?chuàng)世塊,所以這個(gè)值是0extraData:

timestamp: 設(shè)置創(chuàng)世塊的時(shí)間戳

alloc: 用來(lái)預(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

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

6. 合約部署

部署時(shí)候需要支付手續(xù)費(fèi)

http://ethscan.hubwiz.com/

7. 調(diào)用

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")
    // 定義要操作合約的賬戶(hù)地址
    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訪問(wèn)函數(shù)
    fmt.Println(contract_obj.TestAddressTransactor) // Transactor 有函數(shù)
    fmt.Println(contract_obj.TestAddressFilterer)  // 沒(méi)什么作用
}

以上就是go語(yǔ)言區(qū)塊鏈學(xué)習(xí)調(diào)用智能合約的詳細(xì)內(nèi)容,更多關(guān)于go語(yǔ)言區(qū)塊鏈調(diào)用智能合約的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go每日一庫(kù)之dateparse處理時(shí)間

    Go每日一庫(kù)之dateparse處理時(shí)間

    不管什么時(shí)候,處理時(shí)間總是讓人頭疼的一件事情。今天要介紹的dateparse實(shí)現(xiàn)解析日期時(shí)間格式的字符串。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy方法

    一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy方法

    今天小編就為大家分享一篇一個(gè)簡(jiǎn)單的Golang實(shí)現(xiàn)的HTTP Proxy方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • GoLang函數(shù)棧的使用詳細(xì)講解

    GoLang函數(shù)棧的使用詳細(xì)講解

    這篇文章主要介紹了GoLang函數(shù)棧的使用,我們的代碼會(huì)被編譯成機(jī)器指令并寫(xiě)入到可執(zhí)行文件,當(dāng)程序執(zhí)行時(shí),可執(zhí)行文件被加載到內(nèi)存,這些機(jī)器指令會(huì)被存儲(chǔ)到虛擬地址空間中的代碼段,在代碼段內(nèi)部,指令是低地址向高地址堆積的
    2023-02-02
  • 詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較

    詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較

    本篇文章主要介紹了詳解Go開(kāi)發(fā)Struct轉(zhuǎn)換成map兩種方式比較,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Golang并發(fā)控制的三種實(shí)現(xiàn)方法

    Golang并發(fā)控制的三種實(shí)現(xiàn)方法

    在Golang中,有多種方式可以進(jìn)行并發(fā)控制,本文詳細(xì)的介紹了三種實(shí)現(xiàn)方法,Channel優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,清晰易懂,WaitGroup優(yōu)點(diǎn)是子協(xié)程個(gè)數(shù)動(dòng)態(tài)可調(diào)整,Context 優(yōu)點(diǎn)是對(duì)子協(xié)程派生出來(lái)的孫子協(xié)程的控制,缺點(diǎn)是相對(duì)而言的,要結(jié)合實(shí)例應(yīng)用場(chǎng)景進(jìn)行選擇
    2023-08-08
  • Go語(yǔ)言格式化動(dòng)詞使用詳解

    Go語(yǔ)言格式化動(dòng)詞使用詳解

    這篇文章主要介紹了Go語(yǔ)言格式化動(dòng)詞使用詳解的相關(guān)資料,需要的朋友可以參考下
    2023-08-08
  • 使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例

    使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例

    這篇文章主要為大家介紹了使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 解決Golang中g(shù)oroutine執(zhí)行速度的問(wèn)題

    解決Golang中g(shù)oroutine執(zhí)行速度的問(wèn)題

    這篇文章主要介紹了解決Golang中g(shù)oroutine執(zhí)行速度的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Golang設(shè)計(jì)模式工廠模式實(shí)戰(zhàn)寫(xiě)法示例詳解

    Golang設(shè)計(jì)模式工廠模式實(shí)戰(zhàn)寫(xiě)法示例詳解

    這篇文章主要為大家介紹了Golang 工廠模式實(shí)戰(zhàn)寫(xiě)法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • go語(yǔ)言程序cpu過(guò)高問(wèn)題排查的方法詳解

    go語(yǔ)言程序cpu過(guò)高問(wèn)題排查的方法詳解

    使用golang進(jìn)行復(fù)雜的組合運(yùn)算,導(dǎo)致CPU占用率非常高,下面這篇文章主要給大家介紹了關(guān)于go語(yǔ)言程序cpu過(guò)高問(wèn)題排查的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04

最新評(píng)論