Разобраться в понятии Ethereum «с налёта» очень сложно, ведь многие вещи в нём циклически зависят друг от друга, в отличии от другой крипты, например Биткоина. Так и у смарт-контрактов есть куча ограничений, которые связаны с особенностями Ethereum-блокчейна, который, в свою очередь, гарантирует исполнение этих смарт-контрактов.
*Звучит сложно, но не спешите пугаться*. Сейчас все разберём по порядку.
Для начала давайте разберемся в смарт-контрактах, а про измененный блокчейн Ethereum и другие непонятные пока вещи мы поговорим позже. 🤙🏼
Технически, смарт-контракты лучше воспринимать не как подписание договора, а как исполнение кусков кода. По сути контракт — это и есть тупо код, результат исполнения которого навсегда фиксируется в блокчейне.
Контракт можно вызвать как функцию, совершив любую транзакцию в сети на его адрес — он вернет вам результат или ошибку.
Но, смарт-контракт нельзя написать на вашем любимом языке программирования.
Есть 2 причины, почему это так:
- У каждой операции в контракте должна быть возможность в любой момент забыть/откатить все изменения, как будто их не существует.
Когда кто-то вызывает функцию смарт-контракта, все майнеры в сети одновременно пытаются исполнить код этой функции, чтобы включить её результат в свой новый блок. Но блок сможет добавить только один, а остальным придется забыть все изменения.
Так вот если вы сложите два числа на компьютере — вы с легкостью сможете удалить и забыть результат. Но если у вас будет возможность сделать HTTP-запрос, то эта операция уже необратима. Получается каждый майнер сделает этот HTTP-запрос на своём компьютере и для сервера с сайтом это будет DDoS.
2. За выполнение операций в контракте, будь то условие, сравнение или вызов функции, нужно платить. Платит всегда тот, кто вызывает контракт.
Так сделано, чтобы избежать бесконечных циклов и чрезмерно сложных вычислений. Ведь код исполняется на компьютерах майнеров, те просто зависнут и не смогут майнить дальше.
Для этого в Ethereum используют так называемый Газ (Gas) — это маленький кусочек Эфира (ETH) — внутренней валюты. Газом оплачивается CPU майнеров, но реальные копеечки достаются только нашедшему блок — он включает их как свою комиссию.
Каждая операция внутри виртуальной машины имеет свою «цену». Можно условно представить себе это так: исполнение 1 строчки стоит 1 рубль, поэтому чтобы исполнить 15 строчек надо положить в транзакцию-вызов 15 рублей. Запоминать цены не нужно, при создании смарт-контракта редактор всё считает автоматически.
Получается код смарт-контрактов имеет доступ только к данным и вызовам внутри блокчейна Ethereum. Вы можете вызвать функцию из другого смарт-контракта, но не можете прочитать файл с диска или сходить в интернет посмотреть курс доллара.
Любой, кто хочет вызвать функцию смарт-контракта, обязан приложить к вызову немного денежек (Газа). Обычно эта сумма минимальна и её можно заработать просто включив в приложении Ethereum Wallet майнинг на пару минут.
Каждая строчка кода тратит прикрепленный к транзакции Газ. Если он внезапно кончается — исполнение прекращается и транзакция аннулируется. Если код успешно выполнился, но Газ еще остался, он возвращается отправителю как лишний. Всё честно.