цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Пример создания простой криптовалюты на языке Solidity

Пример создания простой криптовалюты на языке Solidity

Автор: Mike(admin) от 27-11-2017, 20:05

В предыдущем материале мы рассмотрели простейший пример программы на языке Solidity, главным образом предназначенном для создания смарт-контрактов в системе Ethereum. В этом материале будет представлен пример немного посложнее, который продемонстрирует некоторое подобие создания криптовалюты, а точнее подвалюты.


Solidity

В этом контракте будет реализована простейшая форма криптовалюты. При этом можно создавать монеты из воздуха, но только человек, создавший контракт, сможет это сделать. Кроме того, каждый может отправлять монеты друг другу без необходимости регистрироваться с именем пользователя и паролем – все, что вам нужно, это ключевая пара в системе Ethereum.


pragma solidity ^0.4.0;
contract Coin {
// Ключевое слово "public" позволяет получать доступ к переменным извне
address public minter;
mapping (address => uint) public balances;
// События позволяют клиентам эффективно реагировать на изменения
event Sent(address from, address to, uint amount);
// Это конструктор, код которого запускается только при создании контракта
function Coin() {
minter = msg.sender;
}
function mint(address receiver, uint amount) {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount; 
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
} 

В данном контракте мы видим некоторые новые элементы, поэтому последовательно ознакомимся с ними подробнее. Итак, строчка address public minter объявляет переменную состояния типа address, которая является общедоступной. Данный тип представляет собой 160-разрядное значение, которое не дает выполнять арифметические операции. Он подходит для хранения адресов контрактов или ключей, принадлежащих внешним лицам. Ключевое слово public автоматически генерирует функцию, которая позволяет вам получить доступ к текущему значению переменной состояния. Без этого ключевого слова другие контракты не имеют доступа к переменной.


Следующая строчка mapping (address =- uint) public balances также создает переменную с публичным доступом, но это более сложный тип данных. Этот тип отображает адреса беззнаковых целых чисел. Это можно рассматривать в виде хеш-таблиц, которые фактически составляются так, что все вероятные ключи существуют и сопоставляются со значением, байт-представление которого заполнено нулями. Однако эта аналогия не полная, поскольку невозможно получить список всех ключей сопоставления и список всех значений.


Строчка Sent(address from, address to, uint amount) объявляет так называемое «событие», которое запускается в последней строке функции send. Конечно, пользовательские интерфейсы (а также серверные приложения) могут «прослушивать» те события, которые были запущены на блок-цепочке без особых затрат. Как только он будет запущен, «слушатель» также получит аргументы «от» и «до» суммы, что упростит отслеживание транзакций.


Далее строчка function Coin() задает функцию под названием Coin, которая представляет собой конструктор, который запускается во время создания контракта и не может быть вызван после этого. В нем перманентно содержится адрес человека, создающего контракт. Здесь msg (наряду с с tx и block) представляет собой глобальную переменную, которая имеет свойства, позволяющие получить доступ к блокчейну. Так, msg.sender – это адрес, откуда пришел текущий (внешний) вызов функции.


Наконец, функции, которые заканчивают контракт и могут быть вызваны пользователями и контрактами – mint и send. Если mint вызывается кем угодно, кроме учетной записи, которая создала контракт, то ничего не произойдет. С другой стороны, send может использовать любой (кто уже имеет хотя бы несколько монет), чтобы отправлять монеты кому-либо еще.




© digitrode.ru


Теги: криптовалюты, Ethereum, Solidity, блокчейн




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий