在前面的案例中(区块链实验室(21) - Go语言采用SDK访问Fisco的案例),go程序调用FISCO SDK的参数固化在程序中,现将其改造如下。
go
package main
import (
"flag"
"fmt"
"log"
"github.com/FISCO-BCOS/go-sdk/client"
"github.com/FISCO-BCOS/go-sdk/conf"
"github.com/ethereum/go-ethereum/common"
)
func main() {
var nodeURL string
var address string
flag.StringVar(&nodeURL,"u","127.0.0.1:20200","node URL and port")
flag.StringVar(&address,"a","","contract address")
flag.Parse()
if len(address) <= 0{
log.Fatal("contract address is required.")
}
configs, err := conf.ParseConfigFile("conf/config.toml")
if err != nil {
log.Fatal(err)
}
config := &configs[0]
config.NodeURL = nodeURL
//fmt.Println("nodeurl:",config.NodeURL)
client, err := client.Dial(config)
if err != nil {
log.Fatal(err)
}
// load the contract
//contractAddress := common.HexToAddress("0xd70eac97a59b8317546f60618d1f9c2bb04d14ef") // 0x481D3A1dcD72cD618Ea768b3FbF69D78B46995b0
contractAddress := common.HexToAddress(address)
instance, err := NewHelloWorld(contractAddress, client)
if err != nil {
log.Fatal(err)
}
helloworldSession := &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"
_, receipt, err := helloworldSession.Set(value) // call set API
if err != nil {
log.Fatal(err)
}
//fmt.Printf("tx sent: %s\n", tx.Hash().Hex())
fmt.Print("nodeurl ",config.NodeURL, " transactionhash ", receipt.GetTransactionHash())
}