Home - redfors/blockchain GitHub Wiki
Простой смарт-договор
Начнем с самого элементарного примера. Это прекрасно, если вы не все понимаете прямо сейчас, мы поговорим подробнее.
Место хранения
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public constant returns (uint) {
return storedData;
}
}
Первая строка просто говорит, что исходный код написан для Solidity версии 0.4.0 или что-то новое, что не нарушает функциональность (вплоть до версии 0.5.0, но не включая). Это делается для того, чтобы контракт не изменился по-другому с новой версией компилятора. Ключевое слово pragmaназывается таким образом, потому что, как правило, прагмы являются инструкциями для компилятора о том, как обрабатывать исходный код (например, прагма один раз ).
Контракт в смысле Solidity представляет собой набор кода (его функций ) и данных (его состояние ), который находится на определенном адресе в блок-цепочке Ethereum. Строка объявляет переменную состояния, называемую типом (беззнаковое целое число из 256 бит). Вы можете думать об этом как о одном слоте в базе данных, который может быть запрошен и изменен путем вызова функций кода, управляющего базой данных. В случае с Ethereum это всегда является собственником. И в этом случае функции и могут быть использованы для изменения или получения значения переменной.uint storedData;storedDatauintsetget
Чтобы получить доступ к переменной состояния, вам не нужен префикс, this.как обычно на других языках.
Этот контракт еще не делает многого (из-за инфраструктуры, созданной Ethereum), кроме того, что позволяет кому-либо хранить единственное число, доступное любому человеку в мире, без возможного способа предотвратить публикацию этого номера. Конечно, любой может просто позвонить еще setраз с другим значением и перезаписать свой номер, но номер все равно будет сохранен в истории блочной цепочки. Позже мы увидим, как вы можете ввести ограничения доступа, чтобы только вы могли изменить число.