【Solidity 开发】合约函数返回 struct 或 struct 数组

前言

在 solidity 0.4 时代,是不支持返回 struct 的。但现在 solidity 已经进入了 0.8 的版本,这个版本是支持直接返回 struct 与 struct array 的,以下为具体做法。

代码示例

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract ContractFactory {
    
    struct User {
        uint256 id;
        uint256 age;
        string name;
    }
    
    mapping(uint256 => User) public users;
    
    mapping(uint256 => User[]) public userGroup;
    
    function init() public {
        User memory newUser1 = User({
            id: 1,
            age: 24,
            name: "lily"
        });
        User memory newUser2 = User({
            id: 2,
            age: 25,
            name: "brain"
        });
        userGroup[1].push(newUser1);  
        userGroup[1].push(newUser2);      
        
        User storage newUser = users[1];
        newUser.age = 16;
        newUser.name = "amber";
        userGroup[1].push(newUser);
    }
    
    function getStruct() public view returns (User memory) {
        User memory user = users[1];
        return user;
    }
    
    function getStructArray() public view returns (User[] memory) {       
        User[] memory group = userGroup[1];
        return group;
    }
    
    function getStructArrayLength() public view returns(uint256) {
        return userGroup[1].length;
    }
}

web3调用结果

getStruct() ::  [ '0', '16', 'amber', id: '0', age: '16', name: 'amber' ]
getStructArray() ::  [
  [ '1', '24', 'lily', id: '1', age: '24', name: 'lily' ],
  [ '2', '25', 'brain', id: '2', age: '25', name: 'brain' ],
  [ '0', '16', 'amber', id: '0', age: '16', name: 'amber' ]
]

我们看到,是以数字形式呈现的,其中 struct 值以 值+键值对 呈现。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值