Примеры контрактов в Solidity
Мы уже говорили о том, что такое Solidity и когда этот язык используется. Теперь давайте приведем ряд примеров. Один из примеров -- хранилище.
Пример хранилища
Здесь uint storedData объявляет переменную состояния, которая названа storedData типа uint (беззнаковое целое значение, 256 бит). Позиция переменной определяется компилятором автоматически. Задействованные функции set и get применяются в целях получения значения переменной и ее изменения.
Пример подвалюты
Настоящий контракт раскрывает нам ряд новых понятий. Одно из этих понятий -- тип address-а, который является 160-битовым значением, не позволяющим арифметические операции. Вдобавок к этому, тип переменной состояния balances, отображающий адреса на целые беззнаковые числа. По сути, отображения можно представить в виде хэш-таблицы, причем она виртуально инициализирована так, чтобы каждый потенциально возможный ключ существовал и отображался в значении, байт-представление которого -- нули.
Идем дальше. Специальная функция Coin -- это конструктор, выполняемый в процессе создания контракта, причем эту функцию впоследствии вызывать нельзя. Хранит она адрес лица, который создает договор вместе с tx и block, что касается msg, то она является волшебной глобальной переменной, включающей в себя ряд свойств, предоставляющих доступ к миру уже за пределами контракта. Функция queryBalance объявляется в качестве постоянной, в результате чего изменение состояния контракта не позволяется (но учтите, что это не принудительно).
Также стоит добавить, что в языке программирования Solidity возвращаемые параметры проименованы, то есть, по сути, создают локальную переменную. Это значит, что для возврата баланса можно просто использовать balance = balances[addr]; без return. Ну а такие события, как Send, дают возможность внешним клиентам осуществлять в блокчейне более эффективный поиск.
Хотите знать про Solidity больше? Добро пожаловать на специализированный курс в Otus!
По материалам https://ru.wikipedia.org/wiki/Solidity и https://github.com/ethereum/.