Solidity | Введение в язык
Что такое смарт-контракт?
Начнем с того, что разберемся: "что такое этот ваш смарт-контракт?".
Смарт-контракт - это набор инструкций, которые выполняются при каких либо условиях. Это работает примерно как любой программный код, но с одним важным отличием: Контракт может работать с активами сети (в нашем случае ethereum), например отправлять или получать токены ERC20.
Так ну теперь мы примерно представляем что такое смарт-контракт, и можно попробовать сделать свой.
На каком языке пишутся смарт-контракты?
Самый популярный язык - это solidity. Он был создан Ethereum Foundation специально для разработки смарт-контрактов. Если вы были знакомы с javascript или вы раньше изучали ООП, то вам будет понятнее по началу что происходит.
Где учиться писать смарт-контракты?
Для начала советую начать писать смарт-контракты в Remix - это специальная веб-IDE (интегрированная среда разработки) для создания, запуска и отладки смарт-контрактов в браузере.
Я не буду здесь рассказывать как им пользоваться, но покажу основные моменты.
Итак вы зашли в Remix, и там у вас будут уже написанные смарт-контракты
Я предлагаю их удалить и написать свой собственный.
Должно получиться что то вроде этого.
Теперь давайте напишем начало нашего смарт-контракта.
Первая строка - это лицензия, она нужна вам будет только когда вы будете публиковать свой исходный код, а так можете просто приучить себя это писать и не парится.
Вторая строка - это версия solidity и знак " ^ " показывает: возьми последнюю solidity версию (например 0.8.7 или 0.8.9, но первую цифру 0 и вторую цифру 8, нужно писать обязательно именно той версии, которая последняя), просто удобно, чтоб не искать какая там новая версия языка, ведь solidity развивается очень быстро и не всегда можно успеть за его обновлениями.
Следующая строка - это начало нашего контракта и его название (в нашем случае название контракта: demo).
Дальше идет тело контракта, где сейчас я поместил две Переменные состояния, которые записываются в хранилище контракта. Это означает, что они сохраняются в блокчейне Ethereum, как в базе данныx
Int и uint в solidity
Давайте разберемся в чем разница между int и uint.
Int это просто число (intenger), оно может быть как положительным, так и отрицательным.
Uint (unsigned intenger), то есть чисто без знака или положительное.
В solidity int и uint может быть максимум 256 бит, то есть число равно максимум 2^256 - 1 степени (это очень много) и минимум 0.
Но нужно понимать, что из за того что int может быть отрицательным, мы занимаем еще и бит памяти на знак, следовательно int может быть только максимум 2^255 - 1 ну и соответственно минимум -2^255 - 1.
На самом деле int редко используют в solidity, потому что мы часто работаем с деньгами, а отрицательных денег не бывает.
Так же можно использовать uint8 , uint16, uint32 и так до 256, прибавляя 8 (если вам не нужны большие числа), но почти всегда это бессмысленно, потому что вы не cэкономите газ, а иногда даже затратите больше (что такое газ я расскажу в следующий раз)
Функции в смарт-контрактах.
Ну что, напишем первую функцию.
Пишется так же как и везде: function, потом название и потом аргументы, которые мы хотим передать внутрь функции (аргументы принято называть с " _ ", чтоб их отличать).
Теперь давайте сделаем что то в теле функции.
Я дописал в строчку с функции: public view returns(uint), страшно?
Да, по началу не понятно, но давайте просто запомним, не углубляясь: Нужно указать тип видимости пока просто public, функция может быть вызвана как внешне, так и изнутри контракта. View -означает, что я не изменяю переменные состояния, а просто считываю их, ну и returns(), если нужно что то вернуть из функции. Пока что так, и не бойтесь, если что-то не понятно, всему свое время. О функциях еще погорим по подробнее позже.
Дальше я просто задаю переменную, в которую будет записываться результат умножения моего аргумента _number и переменной состояния number. После мы просто возвращаем этот результат.
Что теперь?
Ну вот я считаю наш первый смарт-контракт готов и можно его попробовать развернуть и посмотреть что мы можем с ним делать.
Заходим в 3 вкладку и нажимаем на compile DemoContract.sol
Если вы как я, что то уже тыкали, то обязательно удалите уже развернутый контракт и при изменение контракта или еще чего, то всегда удаляйте ранее задеплоенный контракт.
Дальше нажимаем Deploy и видим в консоли, что-то на подобии этого.
Здесь вся инфа он нашем контракте: хеш, кто его развернул (owner), сколько газа потратили. Ура, первый смарт-контракт!
Открываем наш контракт и видим нашу функцию CreateNewNumber, где мы можем передать любое значение и вызвать ее.
Передаем значение 100, вызываем, нажав кнопку с название функции и все готово.
Теперь мы видим, что функция вернула на 1000, потому что в самой функции мы умножали наш number = 10 на _number = 100.
В консоли видно входные (input = uint256 _number: 100) и выходные данные (output = uint256: 1000)
Ну вот мы и смогли написать свой первый смарт-контракт на solidity в болкчейне ethereum. Дальше больше.
P.S мне кажется, что в этой статье слово смарт-контракт было упомянуто больше раз чем uint256 ).
tg: мой телеграмчик
Тут возможно будет что-то интересное, но это не точно, но по крайней мере чатик)