solidity 中的数据结构

Data structure in solidity

我们能否拥有如下所示的 solidity 数据结构

在哪里 地址,地址1和地址2是地址

lastused 是一个日期

limit 是 wei 的金额

评论是一个字符串

allowedTo 是一个地址数组

users[address][lastused]
users[address][limit]
users[address][comment]
users[address][allowedTo][]

users[address1][lastused]
users[address1][limit]
users[address1][comment]
users[address1][allowedTo][]

users[address2][lastused]
users[address2][limit]
users[address2][comment]
users[address2][allowedTo][]

您可以使用自定义 structmapping 的组合来构建此数据结构。

pragma solidity ^0.8;

contract MyContract {
    struct Info {
        uint64 lastused;
        uint256 limit;
        string comment;
        address[] allowedTo;
    }

    mapping (address => Info) public users;

    function setUser(address user, uint64 lastused, uint256 limit, string calldata comment, address[] calldata allowedTo) external {
        users[user] = Info(lastused, limit, comment, allowedTo);
    }
}

请注意,Remix IDE 无法在结构中显示返回的数组 - 即使它存储在模拟器或实时区块链中,并且可由其他函数和合约检索。作为解决方法,您可以实现另一个 returns 只是 allowedTo 数组的函数。

function getAllowedTo(address user) external view returns (address[] memory) {
    return users[user].allowedTo;
}