Отличия языков программирования Sol и Solidity

Для реализации смартконтрактов используется язык программирования Sol являющийся подмножеством языка Solidity. Solidity молодой высокоуровневый, объекто-ориентированный язык программирования использующийся исключительно для программирования смарт-контрактов в среде Ethereum. Для его компиляции используется Ethereum Virtual Machine.

Язык программирования Solidity имеет JavaScript-подобный синтаксис, но он был специально разработан для компиляции в байт-код для виртуальной машины Ethereum. EVM запускает код, который полностью детерминирован; одинаковые алгоритмы с одинаковыми входными данными всегда будут давать одинаковые результаты

Основные элементы синтаксиса языка программирования Solidity:

Contracts. Контракты заменяют традиционные классы в других языках программирования - они имеют конструкторы, могут наследовать от других классы и имеют свои собственные функции.

Фрагмент кода смарт-контракта

Is Interface - обозначает, что Контракт наследуется от Интерфейса. Мы часто будем использовать это для наследования от стандартов токенов Ethereum, наиболее распространенным из которых является ERC20. ERC20 содержит базовую функциональность для создания токена в сети Ethereum.

Контракты, которые наследуются от других контрактов, могут получать доступ к любым компонентам родительского контракта (переменные состояния, модификаторы, функции), помеченные как приватные или публичные. Контракты могут также переопределять компоненты их родительского контракта [18].

Events – используется для работы с утилитой логгирования «logging» блокчейна Ethereum. Каждый блок имеет свой лог работы, и когда события генерируются в контракте, событие регистрируется в блокчейне. Пример использования Event продемонстрирован во фрагменте кода на рисунке 5.

Фрагмент кода с примером Event

Типы данных используемые в Solidity:

  • Целочисленные типы без знака размеров байтов - uint8, uint16, uint34, uint64, uint128, uint256(uint);
  • Целочисленные типы со знаком различных размеров байтов: int8, int16, int32, int64, int128, int256(uint).

Язык программирования Solidity считается статически типизированным. Он поддерживает наследование, библиотеки и сложные пользовательские типы, помимо прочих особенностей. Аккуратное использование типов может помочь программистам понять, как их программы будут выполняться.

Выбирают язык программирования Sol по причине его пригодности для упрощения процедуры проверки смарт-контрактов, при этом достаточности для реализации нетривиальной бизнес логики. Сам язык программирования Solidity имеет схожий синтаксис с JavaScript. Отличия языка программирования Sol от Solidity представлены в таблице 1.

Отличие Sol Solidity
Циклы for, do/while, рекурсия, взаимные вызовы функций +
Механизмы динамического создания и удаления объектов через new и delete +
Поддержка только статических массивов +
Использование var +
Использование более 1 contract в коде +
Более 4 аргументов в событии +
Address задается конечным множеством уникальных идентификаторов +
Возможность вызова методов других контрактов +