Програмиране на блокчейн: Солидност. Програмиране на интелигентните договори

За повече от 10 години от своето развитие блокчейнът се разшири значително от пряка система за прехвърляне на стойност чрез монети към основата за Web 3.0 и децентрализирани приложения. Това се случи главно поради избухването на нови проекти, след като Ethereum представи своя стандарт ERC20 и интелигентни договори.

Интелигентните договори бяха широко използвани при набирането на средства за ICO, за да се осигури прозрачност за участниците. Това ги направи известни, но това не беше единственото изпълнение. Има успешни случаи за интелигентни договори при създаването на разпределени автономни организации, управлението на правата и управлението. Необходимостта от тях е толкова очевидна, че дори има опити за създаване на интелигентни договори за биткойн.

Ако искате да го направите в блокчейн инженеринга, ще трябва да знаете как работят интелигентните договори и как да ги изградите. За щастие Ethereum предоставя всичко необходимо за него, включително собствения си език за програмиране – Solidity. Този език е специално създаден за работа с виртуална машина Ethereum. Това е доста лесно за разбиране, но има някои отличителни черти, които ще трябва да имате предвид. Днес ще се потопим дълбоко в света на интелигентните договори и ще кодираме някои от тях. Хайде да се търкаляме!

Как работи Ethereum?

Първо и най-важно, трябва да разберем основите на блокчейна на Ethereum и как функционира. Това ще ни помогне да разберем разликата между кодирането на централизираните приложения и децентрализираните (които всъщност са интелигентните договори).

В основата си Ethereum има виртуална машина. Вероятно сте се сблъсквали с тях по-рано, когато стартирате стари игри в емулатор или стартирате някакъв специфичен за ОС софтуер на не-родната ОС. С прости думи, виртуалната машина е компютър в компютъра, който използва хардуера на оригиналната машина. В случая с Ethereum, EVM използва ресурси на компютри, свързани към мрежата (възли). Подобно на всяка друга виртуална машина, тази на Ethereum има собствена RAM и ROM, които се използват от програми, работещи върху нея. Единственото съществено изключение е, че ROM паметта на EVM е блокчейн, така че след като нещо попадне там, не може да бъде премахнато.

Защо това е важно? Създаването на интелигентни договори е невероятна отговорност, защото в случай, че има уязвимост, парите на потребителите могат да бъдат откраднати или загубени. Въпреки че можете да промените или напълно да замените кода на централизиран сървър, не можете да го направите на децентрализирана виртуална машина. Освен това всяко действие, извършено с интелигентен договор, изисква заплащане на такси към мрежата. Защо? Тъй като EVM трябва да обработи дадена задача и може да го направи само чрез използване на обработващата мощност на някои възли. Таксите се наричат ​​Gas и се плащат в Gwei, които са подобни на Satoshi на Bitcoin.

Как работи интелигентният договор?

Ако някога сте използвали Ethereum, тогава сте генерирали портфейл в мрежата поне веднъж. Вашият портфейл е основно акаунт, който е представен от адрес. Интелигентният договор също е акаунт, но се различава от обикновения акаунт.

След като създадете портфейл, можете да го свържете с някоя от наличните мрежи и единственото нещо, което ще се промени, е балансът ви. Това е така, защото потребителските адреси не са вътрешни за никоя мрежа – те съществуват паралелно. От друга страна, екземпляр от интелигентен договор е включен в дадена блокчейн и не може да бъде видян в друга верига. За да може да стартира договор в Главната мрежа, след като го тества в, да кажем Rinkeby, създателят му ще трябва да внедри нов екземпляр на договора. Това ще изисква компилиране на изходния код още веднъж. Създателят на договор може да направи толкова екземпляри от кода, колкото пожелае, стига да разполага с достатъчно ETH, за да плати на газ за взаимодействие с мрежата.

Подобно на централизираното приложение, интелигентният договор има специално място за съхранение на своите ресурси и резервоар за код (представете го като уеб страница, която изтегляте от интернет, той ще има a.html файл и някои папки със снимки и други неща). Има и индикация за това колко ETH има даден договор на баланса си; това е от решаващо значение за различни случаи на употреба като набиране на средства, завещания и др. Пълната схема е представена на снимката по-долу.

Ethereum EVM & amp; Схематично портфейлИзображение от U.Today

Как да изградим интелигентен договор?

След като вече знаем принципите на това как функционира Ethereum и как работят интелигентните договори в него, можем да създадем такъв сами. Първо, ще трябва да създадем подходящата среда. Можете да отидете по два маршрута, или да напишете кода в браузъра с Remix IDE, предоставен от Ethereum Foundation, или да изтеглите приложение за кодиране по ваш избор, заедно с някои пакети за него. За целите на този урок ще ви покажем Remix и Atom (универсално приложение за кодиране за Mac & Windows).

Първият интелигентен договор, който ще сключим, ще вземе имената на различни модели автомобили и техните конски сили. Това, което искаме да видим, са две входни и две изходни полета за стойностите, които имаме. Тъй като ще променим входовете, трябва да зададем променливи от два вида: низ за имената и цяло число за конските сили.

Преди нашия договор ще поставим ред, който определя езиковата версия, тъй като това ще помогне на компилатора да адаптира правилно кода. Компилирането на кода е необходимо, защото след като стигнем до етапа на внедряване, кодът ще бъде адаптиран към машинния код, който EVM ще може да чете и обработва. Освен това ще бъде създаден двоичен интерфейс на приложение, който може да се използва допълнително при създаването на пълноценно децентрализирано приложение. Винаги можете да проверите най-новата версия на Solidity на официалния му уебсайт. За да го посочите, напишете ‘pragma solidity’ и версията след знака ‘^’.

За да зададем граници за нашия договор, нека му дадем име, последвано от скоби. Първо ще декларираме две променливи: „модел“ и „HP“. Първият ще бъде низ, който представлява модел на автомобил, а вторият ще бъде цяло число, което представлява конските сили на даден модел автомобил. Има две неща, които трябва да се споменат за променливите по отношение на Solidity. Първият е, че трябва да декларираме дали трети страни трябва да могат да ги виждат, като поставят до тях „публичен“ или „частен“. Последното е, че целите числа в Solidity могат да бъдат подписани или неподписани. Неподписано цяло число може да бъде възможно и се записва като „uint“. Подписаното цяло число може да бъде и положително & отрицателен и се записва като ‘int’.

След като посочим нашите променливи, е време да напишем някои функции, които ще изпълнява нашият интелигентен договор. Първо, трябва да направим резервоари за нашия модел и HP. Ще използваме няколко зададени публични функции и ще прикачим нашите променливи към тях. На второ място, трябва да очертаем няколко получавания на публични функции, които да върнат вход. Погледнете как изглежда нашият интелигентен договор.

Модел на превозното средство & amp; конски сили интелигентен договорИзображение от U.Today

Как да направите токен на Ethereum?

Много хора бяха привлечени от блокчейн индустрията заради скандалните печалби на крипто пазара в края на 2017 г. Това беше главно резултатът от появата на новия стандарт за токени ERC20, който огромен брой стартиращи компании използваха за пускане на своите токени и повишаване пари за развитие. Въпреки спада в ажиотажа, някои компании все още пускат своите токени на Ethereum и продават на сътрудници, доказвайки, че търсенето все още е налице. Ако винаги сте мечтали да създадете стартиране и да стартирате своя токен, тази част ще бъде много интересна.

Създаването на токен означава използване на стандарта ERC20, който може бързо да се изгугли. Не забравяйте да зададете версията на Solidity преди самия стандарт. Ще има набор от функции и няколко събития, които трябва да регистрират действия в дневника на Ethereum. Сред функциите ще намерите набор от необходими: една за определяне на общото предлагане, една за проверка на баланса на даден портфейл и една за прехвърляне на жетони между портфейли. Тъй като Ethereum позволява контрол на портфейли от други портфейли, вие също ще намерите функции, които определят целевия портфейл и позволяват баланс за прехвърляне и одобряване на транзакция. Запазете това в отделен файл .sol.

Време е да очертаем собствения си знак. Започнете със спецификациите на версията на Solidity. След това импортирайте интерфейса и го прикачете към нов интелигентен договор чрез ‘is’. Продължавайки по-нататък, ние ще:

  • Първо очертайте символа, името и броя на десетичните знаци в променливите. Броят на десетичните знаци позволява на потребителя да прехвърля и съхранява части от маркер, най-често срещаният брой десетични знаци е 18. Всички те трябва да бъдат видими за потребителите, така че ги правим публични.

  • Второ, ще определим общото предлагане. В случая с този урок той ще бъде фиксиран и равен на един милиард.

  • Трето, нека направим картографиране за проверка на салдото в портфейлите и квотите, в случай че някоя трета страна ще контролира адрес.

  • Четвърто, ще зададем функция, която ще бъде изпълнена само веднъж при разполагане на договора (конструктор), която ще даде на нашия адрес всички токени, които ще създадем.

  • Пето, трябва да създадем редица функции, които ограничават това, което имаме в интерфейса. Общото предлагане ще бъде взето от променливата, която декларирахме преди. Салдата ще бъдат проверени според картографирането. Прехвърлянето ще бъде разрешено само ако потребителят има малко ETH и той изпраща по-малко или равно на това, което всъщност има. Контролирането на друг портфейл ще се извърши съгласно предварително дефинираното картографиране и ще се провери за допустима сума. Проверете кода, който получихме по-долу.

UTD ERC20 маркерИзображение от U.Today

Как да стартирате интелигентен договор?

Вече знаете как да кодирате прости интелигентни договори на Solidity. Нека се опитаме да разберем как те могат да бъдат стартирани в мрежата Ethereum. Първо, трябва да компилираме кода. За тази цел можете или да използвате интегрирания компилатор на Remix, или да го направите на вашата машина с помощта на Truffle framework. Нека тръгнем първо по лесния маршрут.

Преди да започнем, е необходимо да създадете акаунт в Ethereum, ако не сте го направили досега. За това препоръчваме да използвате разширение Metamask, което може да се инсталира върху браузърите Chrome, Opera, Firefox и Brave. След като създадете портфейл, уверете се, че сте запазили началната фраза, защото това ще бъде единственият начин за достъп до портфейл от други машини или в случай, че трябва да преинсталирате разширението. Предимството на Metamask е, че можете да превключвате между различни мрежи. Това ще бъде полезно, тъй като ще използваме тестова мрежа за нашите експерименти. Отворете разширението и изберете мрежата Ropsten. След това отидете до крана и поискайте малко ETH, не забравяйте, че всяка операция с EVM струва Wei.

Отворете remix.ethereum.org. Ще видите код за бюлетина – затворете раздела с него. Remix има специален браузър за .sol файлове и интегриран компилатор. В горната част на браузъра има икона на кръст, която позволява създаването на нови файлове. Нека създадем файл и копираме първия ни интелигентен договор с превозни средства и техните конски сили. В дясната част на екрана ще видите компилатора с няколко раздела. В първия раздел изберете версия на компилатора, която съответства на версията на Solidity, която сте посочили, и стартирайте процеса на компилация. Ако няма грешки, ще ви се покаже съобщение „успех“. Изберете втория раздел и ще видите раздел, в който трябва да посочите подходяща среда (в нашия случай Web3) и да проверите дали адресът ви е правилен (той трябва да слезе от Metamask). Ако всичко е правилно, натиснете ‘deploy’ и ще получите изскачащ прозорец от Metamask с транзакция. Потвърдете го и voila, вашият интелигентен договор е разположен в мрежата.

Сега към нещо по-интересно. Ако сте използвали текстов редактор на компютъра си, за да напишете кода, можете да го разположите локално, като използвате Node.js. Първо го изтеглете от официалния уебсайт или инсталирайте чрез команден ред (Windows) или терминал (OSX). В нашия случай ще използваме OSX, но процесът е подобен.

Инсталиране на Node.js.Изображение от U.Today

Второ, инсталирайте Solidity framework Truffle чрез ‘npm install’.

Инсталиране на трюфелИзображение от U.Today

Трето, направете нова папка и създайте репо чрез командата ‘init’.

Създаване на репо за трюфелИзображение от U.Today

Четвърто, инсталирайте HDWalletProvider в това репо чрез Node.js също.

Инсталиране на HDWalletProviderИзображение от U.Today

Пето, копирайте файлове с интерфейса ERC20 и договора си с токени в папката „договори“ във вашето репо. Шесто, създайте следния JavaScript файл във вашата папка ‘Migrations’ в репото.

JS файл за разполаганеИзображение от U.Today

Седмо, трябва да модифицирате вашия конфигурационен файл на трюфел. Преди това обаче се изисква една допълнителна стъпка. Ще въведете мнемоника на портфейла си (който сте запазили по-рано) и API за Ropsten testnet. За да получите последното, отидете в Infura и регистрирайте проект. На страницата на проекта ще видите идентификационния му номер. Използвайте го като API.

Конфигурация на трюфелИзображение от U.Today

И накрая, вие сте готови да стартирате вашия интелигентен договор. Ето как изглеждат командата и процесът. Ако има някакви проблеми, вместо това ще ви бъдат представени.

Интелигентен договор се разполага локалноИзображение от U.Today

Какво можете да направите с интелигентен договор?

Добра работа, разполагате с първите два интелигентни договора. Сега какво? За начало трябва да ги проверите и публикувате. Нека ги намерим първо във всеки от блоковите изследователи на Ethereum. Ще използваме Etherscan.

Най-бързият начин за достъп до вашите договори е чрез транзакциите от вашия портфейл. Отворете Metamask, натиснете три точки и тя ще ви позволи да прегледате акаунта си в Etherscan. Сега вашият адрес има поне една транзакция за създаване на договор. При достъп до транзакция ще намерите адрес на местоназначение, който по същество е адрес на договор. След като попаднете на страницата на договора, ще видите няколко раздела. Отидете в раздела ‘Код’ и продължете към страницата за потвърждение. Тук въведете цялата необходима информация и натиснете бутона, за да стартирате процеса на проверка.

Проверка на кодаИзображение от U.Today

След като проверите първия интелигентен договор, който създадохме, вече можете да взаимодействате с него. Отидете в раздела ‘Писане на договор’ и ще видите заместителите, които сме посочили. Нека свържем Etherscan с Metamask и въведем Toyota Soarer и 280 HP. Опреснете страницата и ще видите данните в раздела „Четене“.

Интелигентният договор работиИзображение от U.Today

Обобщение

В обобщение, изграждането на интелигентни договори е необходимо умение за всеки блокчейн инженер там. Първата платформа за въвеждане на интелигентни договори беше Ethereum; фондацията също така представи на общността специално написан език, наречен Solidity. Въпреки новостта на концепцията и самия език, изграждането на интелигентни договори няма нищо изключително за него. Хората, които имат предишен опит с обектно-ориентирани езици за програмиране, особено JavaScript, ще се чувстват много удобно да се придвижват.

Интелигентните договори са само програми, но те имат отличителни черти, които всеки разработчик трябва да има предвид. Например, тъй като интелигентните договори се изпълняват върху децентрализирана виртуална машина, данните им се записват неизменно в блокчейна. Следователно няма място за грешки и тестването на интелигентен договор е от решаващо значение, преди да бъде внедрен в основната мрежа. Друга характеристика на интелигентния договор е, че всяко действие се извършва чрез транзакции, които изискват процесорна мощ на EVM. В резултат на това внедряването на интелигентни договори и взаимодействието с тях струва пари.

Днес обяснихме принципите на функциониране на Ethereum Main и тестовите мрежи, показахме ви различни инструменти за създаване на интелигентни договори и очертахме процеса на сключване на два вида договори. Също така демонстрирахме различни начини за стартиране на интелигентни договори в мрежата и по-нататъшно взаимодействие с тях. Вярваме, че с тези знания ще сте готови да започнете като блокчейн инженер и да изградите въз основа на тях изключителни интелигентни договори и децентрализирани приложения. Наслади се!