Solidity中多个映射和结构映射之间的区别

时间:2018-10-22 04:09:01

标签: solidity

与使用结构相比,我在合同编程中使用的常见模式可能效率低下。我想征询那些在内存和气体优化方面拥有更多经验的人的意见。例如,在我想在区块链上发送消息的情况下,我将按照以下步骤进行操作(因为它是一个示例,因此省略了很多修饰符和其他细节):

struct Message {
    address otherParty;
    bytes32 message;
}

struct User {
    uint256 nextSent;
    uint256 nextReceived;
    uint256 lastReadIndex;
}

mapping (address => User) users;
//maps address to sent messages.  (maps index to message struct)
mapping (address => mapping (uint256 => Message)) sent;
//maps address to received messages.
mapping (address => mapping (uint256 => Message)) received;

下面的代码会更好吗?我当前的思维过程是,连续两个映射将简单地将两个键散列在一起,这意味着内部映射不需要额外的内存。外部映射将已经为其哈希表reserve the required memory

但是再一次,将映射放在User结构中可以使所有内容更加清晰。而且,如果我对内部映射不需要保留的内存有误,那么在每个用户中存储两个映射,或者为每个地址每个存储两个映射(这两个地址都与一个用户)。

struct Message {
    address otherParty;
    bytes32 message;
}

struct User {
    uint256 nextSent;
    uint256 nextReceived;
    uint256 lastReadIndex;
    mapping (uint256 => Message) sent;
    mapping (uint256 => Message) received;
}

mapping (address => User) users;

期待这个问题的答案,如果两者都相同,这是社区所希望的(我会假设第二种方法)。

0 个答案:

没有答案