最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1. 獲取abi文件

合約的接口

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

在這里插入圖片描述

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

在這里插入圖片描述

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

也可以通過solc生成abi:

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

2. 安裝abigen工具

用來生成go文件,

下載文件:github地址

在這里插入圖片描述

在這里插入圖片描述

找到這個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 部署時可以得到pkg 指定輸出文件的包名,也就是package 名稱type 指定合約結(jié)構(gòu)體名稱out 指定輸出go文件名稱

在這里插入圖片描述

3. remix連接私有鏈

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

就可以在這里看見了。

4. 合約部署

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

2.部署合約

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

在這里插入圖片描述

unlock一下就行了

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

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)第一個創(chuàng)建的賬戶

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

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

在這里插入圖片描述

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

新建一個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)第一個創(chuàng)建的用戶

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

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

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

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

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

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

alloc: 用來預(yù)置賬號以及賬號的以太幣數(shù)量,因?yàn)樗接墟溚诘V比較容易,所以我們不需要預(yù)置有幣的賬號,需要的時候自己創(chuàng)建即可以。

cmd進(jìn)入到存放json文件的路徑

geth -datadir "fanone" init genesis.json

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

6. 合約部署

部署時候需要支付手續(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")
    // 定義要操作合約的賬戶地址
    addr := "0x29794ab2ed6c47faff7ebdd6dcdd71a263e25460"
    // 將字符串地址轉(zhuǎn)為common.Address
    common_addr := common.HexToAddress(addr)
    if err != nil {
        panic("連接以太坊合約出錯")
    }
    // 創(chuàng)建合約對象
    contract_obj,err11 := contract.NewTestAddress(common_addr,client)
    if err11 !=nil {
        panic("創(chuàng)建合約對象出錯")
    }
    fmt.Println(contract_obj.TestAddressCaller) // Caller訪問函數(shù)
    fmt.Println(contract_obj.TestAddressTransactor) // Transactor 有函數(shù)
    fmt.Println(contract_obj.TestAddressFilterer)  // 沒什么作用
}

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

相關(guān)文章

  • golang struct擴(kuò)展函數(shù)參數(shù)命名警告解決方法

    golang struct擴(kuò)展函數(shù)參數(shù)命名警告解決方法

    今天在使用VSCode編寫golang代碼時,定義一個struct,擴(kuò)展幾個方法,需要的朋友可以參考下
    2017-02-02
  • 如何使用大學(xué)教育郵箱下載golang等軟件(推薦)

    如何使用大學(xué)教育郵箱下載golang等軟件(推薦)

    這篇文章主要介紹了如何使用大學(xué)教育郵箱下載goland等軟件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Go gRPC環(huán)境安裝教程示例詳解

    Go gRPC環(huán)境安裝教程示例詳解

    這篇文章主要為大家介紹了Go gRPC環(huán)境安裝的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go 語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習(xí)教程

    Go 語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習(xí)教程

    這篇文章主要為大家介紹了Go 語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習(xí)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 詳解Golang中字符串的使用

    詳解Golang中字符串的使用

    這篇文章主要為大家詳細(xì)介紹了Golang中字符串的使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Golang有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10
  • golang中配置?sql.DB獲得更好的性能

    golang中配置?sql.DB獲得更好的性能

    這篇文章主要介紹了golang中如何配置?sql.DB獲得更好的性能,在這篇文章中,我想準(zhǔn)確解釋這些設(shè)置的作用,并展示它們可能產(chǎn)生的(積極和消極)影響,需要的朋友可以參考下
    2023-10-10
  • Go語言中Select語句用法實(shí)例

    Go語言中Select語句用法實(shí)例

    這篇文章主要介紹了Go語言中Select語句用法,實(shí)例分析了select語句的原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go語言異常處理error、panic、recover的使用

    Go語言異常處理error、panic、recover的使用

    GO語言中引入的異常的處理方式為error、panic、recover ,本文主要介紹了Go語言異常處理error、panic、recover的使用,感興趣的可以了解一下
    2024-08-08
  • golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法

    golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法

    本文主要介紹了golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • golang中一種不常見的switch語句寫法示例詳解

    golang中一種不常見的switch語句寫法示例詳解

    這篇文章主要介紹了golang中一種不常見的switch語句寫法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05

最新評論

璧山县| 越西县| 繁昌县| 师宗县| 庆城县| 怀远县| 黔西| 洪泽县| 涟源市| 沧源| 萨迦县| 错那县| 荔浦县| 柯坪县| 巴彦县| 剑河县| 鲁山县| 阿克| 郧西县| 松溪县| 桦川县| 北票市| 吉首市| 昆明市| 新龙县| 巴里| 哈尔滨市| 建阳市| 崇州市| 新安县| 尼玛县| 肃南| 连江县| 永善县| 包头市| 山阴县| 大丰市| 石屏县| 昌黎县| 兰州市| 陇川县|