Solidity
October 12, 2022

Solidity | Введение в язык

Что такое смарт-контракт?

Начнем с того, что разберемся: "что такое этот ваш смарт-контракт?".

Смарт-контракт - это набор инструкций, которые выполняются при каких либо условиях. Это работает примерно как любой программный код, но с одним важным отличием: Контракт может работать с активами сети (в нашем случае ethereum), например отправлять или получать токены ERC20.

Так ну теперь мы примерно представляем что такое смарт-контракт, и можно попробовать сделать свой.

На каком языке пишутся смарт-контракты?

Самый популярный язык - это solidity. Он был создан Ethereum Foundation специально для разработки смарт-контрактов. Если вы были знакомы с javascript или вы раньше изучали ООП, то вам будет понятнее по началу что происходит.

Где учиться писать смарт-контракты?

Для начала советую начать писать смарт-контракты в Remix - это специальная веб-IDE (интегрированная среда разработки) для создания, запуска и отладки смарт-контрактов в браузере.

Я не буду здесь рассказывать как им пользоваться, но покажу основные моменты.

Итак вы зашли в Remix, и там у вас будут уже написанные смарт-контракты

Я предлагаю их удалить и написать свой собственный.

Назовем его DemoContract.sol

Должно получиться что то вроде этого.

Теперь давайте напишем начало нашего смарт-контракта.

Первая строка - это лицензия, она нужна вам будет только когда вы будете публиковать свой исходный код, а так можете просто приучить себя это писать и не парится.

Вторая строка - это версия 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: мой телеграмчик

Тут возможно будет что-то интересное, но это не точно, но по крайней мере чатик)