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