Это кажется чрезвычайно дорогим при хранении типа структуры.

В моем контракте есть тип структуры:

struct Claim{
 address healthcareProvider;
 uint amount;
 bool patientSig;
 bool paid;
 uint item;
}

И функция инициализации:

 function MakeClaim(uint _amount, uint _item, uint num) {
   Claim memory c;
   c.healthcareProvider = tx.origin;
   c.patientSig = false;
   c.paid = false;
   c.amount=_amount;
   c.item=_item;
}

Когда я вызываю эту функцию для создания нового типа претензии, я вижу, что цена составляет 2,687 ETH (не газ). Это намного больше, чем стоимость развертывания всего контракта! Я тестирую его в тестовой сети Morden. Где моя проблема?

Ответы (1)

Поскольку в блокчейне хранилище данных является дефицитным ресурсом, оно довольно дорогое. Хранение данных — самая затратная операция в любом смарт-контракте.

sstore  100     Paid for a normal SSTORE operation (doubled or waived sometimes).

Вы можете увидеть весь список: https://www.cryptocompare.com/coins/guides/what-is-the-gas-in-ethereum/

Так что, если вы используете сложные конструкции, стоимость умножается.

Итак, два логических значения, два целых числа без знака и адрес стоят более 30 долларов США каждый раз, когда вы хотите их сохранить или обновить? Я неправильно понимаю, как работает Ethereum?
30 долларов вроде бы много даже для этого. Проверьте цену газа и предполагаемое использование газа в онлайн-компиляторе Solidity ( ethereum.github.io/browser-solidity ). Вы запускаете этот смарт-контракт в живой сети или в частной тестовой сети?
Что вы подразумеваете под сложными структурами? У вас есть пример для простого структурного случая? @KanekiDev
Сложная структура может быть, например: если вы хотите построить древовидную структуру в своем смарт-контракте.