go言语区块链进修调用智能合约

2026-07-21 06:57:20/焦点/75 阅读

1. 掉落踪掉落踪abi文件

合约的言语用智约接口

在remix对象中编译合约后,会有一个abi ,区块复制

在这里拔出图片描摹

然后新建一个xx.abi文件 ,链进把赋值的修调粘贴到里面

在这里拔出图片描摹

寄看:代码变了 ,从头编译后abi也会变,言语用智约所以必定要用最新的区块abi

也可以经由过程solc生成abi :

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

2. 拆卸abigen对象

用来生成go文件,

下载文件:github地址

在这里拔出图片描摹

在这里拔出图片描摹

找到这个main.go文件,链进举办go build,修调生成abigen.exe文件。言语用智约

在这里拔出图片描摹

然后放在bin目次下的区块这里

在这里拔出图片描摹

然后便可以在这里验证了

在这里拔出图片描摹

独霸abigen对象生成go文件

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

abi 文件在 remix 放置时可以掉落踪掉落踪pkg 指定输进文件的包名  ,也就是链进package 称号type 指定合约筹划体称号out 指定输进go文件称号

在这里拔出图片描摹

3. remix邻接公有链

geth启动私链,要指定rpccorsdomain *,修调不然在remix中是言语用智约邻接不上的  。

在这里拔出图片描摹

选择Web3 Provider编制 ,区块默许邻接公有链8545端口

在这里拔出图片描摹

可是链进可以看到我们这里是没有account的

在这里拔出图片描摹

所以我们可以成立一个account

在这里拔出图片描摹

成立了两个此后

在这里拔出图片描摹

便可以在这里看见了。

4. 合约放置

1.邻接公有链 :选择Web3 Provider,默许端标语时8545,假定geth启动的rpc端标语不合等,改成齐截

2.放置合约

大年夜大年夜约会展示上面几种偏向,依此列出措置编制
1 .Error: authentication needed: password or unlock:这类报错解锁下账户便可
账户解锁:personal.unlockAccount(“账户地址”)

在这里拔出图片描摹

unlock一下就好了

在这里拔出图片描摹

2 .Returned error: exceeds block gas limit :展示这类偏向就看块号的gaslimit ,放置时改成不时
掉落踪掉落踪块号  :eth.blockNumber
屈就块号掉落踪掉落踪具体信息 :eth.getBlock(0) 会看到gasLimit的值 ,在放置时的gaslimit不克不及除夜于这个

在这里拔出图片描摹

在这里拔出图片描摹

3 .Returned error: insufficient funds for gas * price + value:放置合约需求手续费  ,得赚取,经由过程挖矿

在这里拔出图片描摹

没钱, 要挖矿获利。

在这里拔出图片描摹

开启指定线程数挖矿:miner.start(1)

停止挖矿 :miner.stop()

搜检可否在挖矿 :eth.mining true :在挖矿 ,false :不在挖矿

掉落踪掉落踪账户地址数组:eth.accounts

掉落踪掉落踪挖矿地址 :eth.coinbase 默许第一个成立的账户

搜检第一个账户余额  :eth.getBalance(eth.accounts[0])

掉落踪掉落踪指定账户的余额 :eth.getBalance(“账户地址”)

在这里拔出图片描摹

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

***

mixhash:与nonce合营用于挖矿 ,由上一个区块的一部师长教师成的hash 。

parentHash: 上一个区块的hash值 ,因为是创世块 ,所以这个值是0extraData:

timestamp: 设置创世块的时分戳

alloc: 用来预置账号和账号的以太币数量,因为公有链挖矿斗劲随便 ,所以我们不须要预置有币的账号 ,需求的时辰本身成立便可以 。

cmd进进到存放json文件的路途

geth -datadir "fanone" init genesis.json

在这里拔出图片描摹

在这里拔出图片描摹

在这里拔出图片描摹

6. 合约放置

放置时辰需求收入手续费

http://ethscan.hubwiz.com/

7. 调用

github.com/ethereum/go-ethereum v1.10.0

package mainimport (    "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言措辞语区块链进修调用智能合约的具体内容 ,更多关于go言语区块链调用智能合约的材料请存眷完竣下载此外相干文章!

#免责声明#

本站提供的一切资源、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。