【发布时间】:2018-11-15 10:08:39
【问题描述】:
我正在使用this Ethereum Go Client 并尝试调用并获取智能合约函数的响应。
智能合约中的功能很简单(现在测试):
function getVotesForImgIds() external view returns(uint32){
return 12345;
}
我正在使用 truffle 来部署合约:
truffle compile
truffle migrate
我的 Go 服务器也很基础,这里是 main func 中的重要部分:
abi := getVotesContractJson()["abi"] //works fine
jsonAbi, err := json.Marshal(abi)
if err != nil {
log.Fatal(err)
}
var connection = web3.NewWeb3(providers.NewHTTPProvider("127.0.0.1:8545", 10, false))
contract, err := connection.Eth.NewContract(string(jsonAbi))
if err != nil {
log.Fatal(err)
}
//contract works
transaction := new(dto.TransactionParameters)
transaction.Gas = big.NewInt(4000000)
result, err := contract.Call(transaction, "getVotesForImgIds")
if result != nil && err == nil {
fmt.Println("result: ", result)
// -------------------->
//this will print: result: &{87 2.0 0x0 <nil> }
} else {
log.Fatal("call error:", err)
}
为什么这会导致 &{87 2.0 0x0 <nil> } ?如何获取智能合约返回的真实价值?我已经尝试了所有的 result.ToInt() 等......
【问题讨论】:
标签: go web3 truffle go-ethereum