Вечная модель хранения со структурами - PullRequest
0 голосов
/ 10 февраля 2019

Я работаю над модернизированным дизайном интеллектуальных контрактов и обнаружил, что вечный шаблон хранения будет очень полезен (разделение логики и данных в парах ключ-значение), однако, кажется, подходит, если значение является элементарным типом(uint, bytes, address, bool ..), но когда речь идет о сложных типах, таких как структуры, имеет ли смысл хранить и обращаться к каждому полю отдельно?

1 Ответ

0 голосов
/ 12 февраля 2019

Если вопрос звучит так: «но когда речь идет о сложных типах, таких как структуры, имеет ли смысл хранить и обращаться к каждому полю отдельно?»

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