Смарт-контракты без транзакций ETH

Возможно, я ошибаюсь, но я понимаю, что транзакции смарт-контрактов всегда должны содержать поле «ЗНАЧЕНИЕ», то есть количество эфира, которое Алиса переведет Бобу в случае выполнения определенного условия.

Принимая это во внимание, означает ли это, что смарт-контракты Ethereum нельзя использовать для установления условий, не связанных с эфиром? Например:

а) ЕСЛИ Алиса передает Бобу право собственности на дом, ТО Боб взамен передает ей другое право собственности;

Или, например: б) ЕСЛИ значение температуры для января ниже X, ТО страховка уменьшает страховой взнос на следующий месяц;

в) ЕСЛИ потребитель А покупает что-то сломанное, ТО получает (неденежную) компенсацию от продавца.

В случае, если это возможно, узлы получат компенсацию в соответствии с использованным Газом, даже если между сторонами нет транзакции Эфира. Не так ли?

Заранее спасибо.

Ответы (1)

Ты не понимаешь.

Транзакции содержатся dataи valueна уровне протокола. dataдля возможной интерпретации смарт-контрактом. valueможет содержать ненулевое значение, а сам протокол применяет такие правила, как не тратить ETH, которого нет у отправителя.

Транзакция может быть строго о dataи возможном изменении состояния в хранилище контракта. Во всех случаях стоимость выполнения (вычислительный вес) выражается в единицах gasи gasоплачивается в ETH.

Вот простой контракт, не связанный с передачей стоимости. Плата за газ для вызова будет стоить небольшую сумму ETH set().

pragma solidity 0.4.25; 

contract Simple {

    uint public number;

    function set(uint _number) public {
        number = _number;
    }
}

Надеюсь, поможет.

Чтобы уточнить, когда вы отправляете транзакцию для вызова смарт-контракта, да, транзакция будет иметь valueполе, но значение может быть просто 0.
Спасибо за ваши ответы. Осталось одно сомнение: при переводе ETH майнеры проверяют транзакцию, чтобы проверить отсутствие мошенничества (наличие средств и не двойное расходование). Но в таких случаях, когда нет перевода денег («стоимости»), а есть только «данные», проверяют ли они что-то, чтобы одобрить транзакцию?
Это немного неправильно. Все проверяют. Майнеры соревнуются только в устранении неоднозначности порядка транзакций. Путаница частично связана с использованием терминов, потому что средний пользователь будет ждать, пока транзакция «подтвердится», но на самом деле они означают «появиться в блоке». Как только он появится в блоке, все увидят, что он делает. В случае, если это не ясно, считайте недействительной транзакцию. Он по-прежнему будет включен в блок, поэтому каждый может согласиться с тем, что он добывается в определенной строке в определенном блоке, и ему не разрешено обновлять состояние.