Если вопрос звучит так: «но когда речь идет о сложных типах, таких как структуры, имеет ли смысл хранить и обращаться к каждому полю отдельно?»
Тогда ответ таков: это не вопрос смысла, это единственный способ.Вечная память дает вам возможность хранить все возможные данные, которые вы используете сейчас, и которые вы будете использовать в будущем.Чтобы сделать это, вы получите 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"));
}