首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Solidity函数返回的struct数组类型转换为Go类型?

如何将Solidity函数返回的struct数组类型转换为Go类型?
EN

Ethereum用户
提问于 2022-04-25 08:53:02
回答 1查看 345关注 0票数 0

坚固版0.6.10

代码语言:javascript
复制
struct LogisticsData {
        address cargo;
        address orgin;
        address destination;
        string memo;
        uint createdAt;
        uint queryCount;
}

function getLogisticsInfo(address cargo) public returns(LogisticsData[] memory _cargoLogisticsData) {
    _cargoLogisticsData = new LogisticsData[](3);
   // do something
}

由abigen生成的Go代码

代码语言:javascript
复制
type LogisticsLogisticsData struct {
    Cargo       common.Address
    Orgin       common.Address
    Destination common.Address
    Memo        string
    CreatedAt   *big.Int
    QueryCount  *big.Int
}

我尝试了以下代码,但它返回了一个错误。

代码语言:javascript
复制
_, receipt, _ := instance.GetLogisticsInfo(client.GetTransactOpts(), common.HexToAddress(address))
parsedAbi, _ := abi.JSON(strings.NewReader(logistics.LogisticsABI))
temp := make([]logistics.LogisticsLogisticsData, 10)
err = parsedAbi.Unpack(&temp, "getLogisticsInfo", []byte(receipt.Output))
fmt.Println(err) // abi: improperly formatted output: xxx

我希望将返回数据转换为LogisticsLogisticsData结构。该怎么做呢?

EN

回答 1

Ethereum用户

发布于 2022-04-27 08:31:18

需要将十六进制转换为二进制

代码语言:javascript
复制
bytesOutput, _ := hex.DecodeString(receipt.Output[2:])
err = parsedAbi.Unpack(&temp, "getLogisticsInfo", bytesOutput)
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/126838

复制
相关文章

相似问题

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