Можем ли мы иметь структуру данных в твердости, которая подобна приведенной ниже?
куда адрес, адрес1 и адрес2 являются адресом
lastused - это дата
лимит это сумма в вэй
комментарий представляет собой строку
allowTo — это массив адресов
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 не может отображать возвращенный массив внутри структуры, даже если он хранится в эмуляторе или в реальном блокчейне и может быть извлечен другими функциями и контрактами. В качестве обходного пути вы можете реализовать другую функцию, которая возвращает только массив allowedTo
.
function getAllowedTo(address user) external view returns (address[] memory) {
return users[user].allowedTo;
}
Спасибо за помощь, получилось так, как я хотел.