Теперь попробуем поговорить о технической стороне реализации смарт контрактов на примере блокчейн Ethereum. Как выглядит процесс написания, публикации и выполнения смарт контракта?
В этой сети для написания смарт контрактов используется язык Solidity, который несколько похож на JS и он является Тьюринг-полным (т.е. на нём можно реализовать любую
вычислимую функцию).
Сам код выполняется в так называемом Ethereum Virtual Machine (EVM). Надо обратить внимание, что код выполняется и проверяется всеми участниками системы, потому необходим некий механизм, который как-то ограничит потребление ресурсов каждым смарт контрактом (иначе можно бесконечный цикл написать). Потому в Ethereum введена сущность gas (топливо). Контракт в Ethereum может выполнять любые инструкции, вызывать другие контракты, писать и читать данные и так далее. Все эти операции потребляют топливо, топливо оплачивается криптовалютой (Ether). Цена на топливо криптовалюты Ethеr формируется динамически рынком. Тригером выполнения контракта является транзакция. Стоимость топлива, которое сжигается в определенной транзакции снимается с аккаунта, который транзакцию запустил. Кроме того есть лимит потребления топлива, сделан он для того, чтобы защитить аккаунт от ошибок в написании контракта, которые могут привести к бесконтрольному сгоранию всей криптовалюты на данном аккаунте.
Важно отметить, что среда смарт контрактов все же сильно отличается от привычной нам среды выполнения кода. Ошибка может стоить очень дорого, сами операции дорогие и медленные. Затруднен механизм обновления смарт контракта. Вы по сути пишете новый и должны убедить стороны использовать этот новый смарт контракт. Нельзя сказать, что никак не перейти на новую версию своего контракта, но это часто новый общественный договор. Если вдуматься разительное отличие, когда вы привыкли просто выкатывать апдейты вашей централизованной системы потребителям, не слишком интересуясь из мнением. Строя какую-то систему для работы в реальных жизненных сценариях на смарт контрактах стоит понимать эти ограничения.