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][]
您可以使用自定义 struct
和 mapping
的组合来构建此数据结构。
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;
}
我们能否拥有如下所示的 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][]
您可以使用自定义 struct
和 mapping
的组合来构建此数据结构。
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;
}