我正在研究一个可升级的智能合约设计,我发现永恒存储模式将非常有用(键值对中的逻辑和数据分开(,但是,如果值是基本类型(uint,字节,地址,布尔值..(,它似乎很合适,但是当涉及到结构等复杂类型时,单独存储和访问每个字段是否有意义?
如果问题是:"但是当涉及到结构等复杂类型时,分别存储和访问每个字段是否有意义?
那么答案是,这不是一个意义问题,是唯一的方法。永久存储为您提供了一种存储您现在正在使用的每个可能数据以及您将来将使用的每个可能数据的方法。为此,它为您提供了每种数据类型的256位映射。
如果问题是您将如何在永恒存储中模拟结构,我将给您我的 2 美分:
假设您要翻译以下代码:
struct thing{
uint a;
}
mapping(byte32 => thing) things;
insertThing(byte32 index, uint v) ... {
things[index].a = v;
}
getThingValue(byte32 thingIndex){
return things[thingIndex].a;
}
转换为使用永恒存储的代码。我的2美分如下:
[...]
EternalStorage s;
insertThing(byte32 index, uint v){
s.setUint(keccak256("things", index, "a"), v);
}
getThingValue(byte32 index) returns (uint){
return s.getUint(keccak256("things", index, "a"));
}