当前位置:首页 >> 休闲

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

  • 休闲
  • 2026-07-20 19:33:00
  • 253

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言语区块链调用智能合约的材料请存眷完竣下载此外相干文章!

  • 关注微信

猜你喜欢

微信公众号