区块链入门教程(9)--使用Go SDK调用智能合约

0. 准备工作

重启电脑后需要执行:

bash /opt/fisco/nodes/127.0.0.1/start_all.sh
source /etc/profile

1. 准备建立ssl连接需要的证书

使用build_chain.sh脚本搭建区块链时会在./nodes/127.0.0.1/sdk文件夹中生成sdk证书、私钥以及ca证书,需要将这三个文件拷贝至config.toml中配置的位置。

cp /opt/fisco/nodes/127.0.0.1/sdk/* /opt/fisco/goWorkSpace/go-sdk

2. 部署合约

在helloworld文件夹中创建cmd文件夹,在cmd文件夹中创建main.go文件,main.go的内容如下,在该文件中调用HelloWorld.go部署智能合约

package main
import (
    "fmt"
    "log"

    "github.com/FISCO-BCOS/go-sdk/client"
    "github.com/FISCO-BCOS/go-sdk/conf"
    "github.com/FISCO-BCOS/go-sdk/helloworld" // import helloworld
)
func main(){
    
    
    configs, err := conf.ParseConfigFile("config.toml")
    if err != nil {
    
    
        log.Fatal(err)
    }
    config := &configs[0]

    client, err := client.Dial(config)
    if err != nil {
    
    
        log.Fatal(err)
    }
    address, tx, instance, err := helloworld.DeployHelloWorld(client.GetTransactOpts(), client) // deploy contract
    if err != nil {
    
    
        log.Fatal(err)
    }
    fmt.Println("contract address: ", address.Hex())  // the address should be saved
    fmt.Println("transaction hash: ", tx.Hash().Hex())
    _ = instance
}

构建并运行

# 该指令在go-sdk目录中执行
go run helloworld/cmd/main.go

注意需要记住运行结果:

root@chen-pc:/opt/fisco/goWorkSpace/go-sdk# go run helloworld/cmd/main.go
contract address:  0xAAC410d4093Ad00dc6995f853864701b3b71845E
transaction hash:  0x8aa66ff62d474611396863c720a2da9da67ac32cdd8e31c4395add15e26d84b8

3. 调用合约

创建helloworld_get.go文件,调用合约get接口,获取智能合约中name变量存储的值

package main

import (
    "fmt"
    "log"

    "github.com/FISCO-BCOS/go-sdk/client"
    "github.com/FISCO-BCOS/go-sdk/conf"
    "github.com/FISCO-BCOS/go-sdk/helloworld"
    "github.com/ethereum/go-ethereum/common"
)

func main() {
    
    
    configs, err := conf.ParseConfigFile("config.toml")
    if err != nil {
    
    
        log.Fatal(err)
    }
    config := &configs[0]
    client, err := client.Dial(config)
    if err != nil {
    
    
        log.Fatal(err)
    }

    // load the contract
    contractAddress := common.HexToAddress("0xAAC410d4093Ad00dc6995f853864701b3b71845E") // 上面步骤得到的值
    instance, err := helloworld.NewHelloWorld(contractAddress, client)
    if err != nil {
    
    
        log.Fatal(err)
    }

    helloworldSession := &helloworld.HelloWorldSession{
    
    Contract: instance, CallOpts: *client.GetCallOpts(), TransactOpts: *client.GetTransactOpts()}

    value, err := helloworldSession.Get()    // call Get API
    if err != nil {
    
    
        log.Fatal(err)
    }
    fmt.Println("value :", value)

    value = "Hello, FISCO BCOS"
    tx, receipt, err := helloworldSession.Set(value)  // call set API
    if err != nil {
    
    
        log.Fatal(err)
    }

    fmt.Printf("tx sent: %s\n", tx.Hash().Hex())
    fmt.Printf("transaction hash of receipt: %s\n", receipt.GetTransactionHash())
}

运行

go run helloworld/cmd/helloworld_get.go

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/woshisangsang/article/details/127588703
今日推荐