首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带Golang Web3的松露

带Golang Web3的松露
EN

Stack Overflow用户
提问于 2018-06-06 04:15:07
回答 2查看 1.1K关注 0票数 0

我正在使用this Ethereum Go Client并尝试调用并获得智能合约函数的响应。

智能合约中的功能非常简单(现在进行测试):

代码语言:javascript
复制
  function getVotesForImgIds() external view returns(uint32){
    return 12345;
  }

我正在使用truffle部署合约:

代码语言:javascript
复制
truffle compile
truffle migrate

我的围棋服务器也是非常基础的,下面是主要功能中的重要部分:

代码语言:javascript
复制
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()等方法……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 13:47:39

票数 1
EN

Stack Overflow用户

发布于 2018-06-06 04:43:38

客户端库返回一个DTO struct,这就是为什么您可以在输出中看到一堆打印的字段。

看起来ToInt()接收器试图强制转换为int64,而您的协定返回unint32。尝试将结果显式转换为unint32

代码语言:javascript
复制
if result != nil && err == nil {
    res := result.ToString()
    votes, err := strconv.ParseUint(res, 10, 32)
    if err != nil {
        // do something with error
    }
    fmt.Printf("result: %d\n", votes)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档