Как да напиша първия си интелигентен договор?



Научете основите на разработването на интелигентен договор и започнете да пишете първия си интелигентен договор. Също така ще знаете как да тествате интелигентния договор.

В , научихте за това какво представляват интелигентните договори, различни езици за интелигентни договори и как да настроите среда за разработване на интелигентен договор. В тази статия ще научите как да изградите първия си интелигентен договор. Ще използвамRemix IDE за разработване и тестване на интелигентен договор.

По-долу са разгледани темите в този урок за разработване на интелигентни договори:





Изграждане на вашия интелигентен договор

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



Структура на интелигентния договор

Интелигентният договор Solidity по същество е колекция от следните

  • данни - което поддържа текущото състояние на договора
  • функция - които прилагат логиката за преход на състоянието на договора

Интелигентните договори за солидност следват стандартна структура. Всеки интелигентен договор започва със следното изявление



Директива Прагма

Ключовата дума „pragma“ може да се използва за активиране на определени функции или проверки на компилатора. Изложението по-долу определя, че изходният файл (интелигентен договор) няма да се компилира с компилатор по-рано от 0.4.0 и версия на компилатора след 0.6.0. Тази декларация гарантира, че не се въвежда неволно поведение, когато се въведе нова версия на компилатора.

твърдост прагма> = 0,4,0<=0.6.0 

Декларация за договор

Договорът се декларира с ключовата дума „договор“. Това декларира празен договор, който се идентифицира с името „PurchaseOrder”.

договор PurchaseOrder {}

Съхраняване на съответните данни към договора

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

Разработване на интелигентен договор: Въвеждане на променливи

Като цяло, променливите са два вида

  1. Тип стойност: Този тип променливи се предават по стойност, т.е.те винаги се копират, когато се използват като аргументи на функции или в задания. Например: цели числа, булеви адреси и т.н.
  2. Типове референции: Този тип променливи са от сложни типове и се предават чрез препратка, тези променливи не се вписват в 256 бита и трябва да се управляват внимателно, тъй като копирането им е скъпо.

Добавяне на данни към интелигентен договор

Нека добавим променлива за данни към договора. За всяка поръчка за покупка трябва да има някакво количество продукт, свързан с нея. Нека добавим променлива product_quantity, която ще бъде от тип данни цяло число или число.

използвайте python във визуално студио

Променливата, която въвеждаме сега, е неподписано цяло число и е представена от uint256, 256 тук означава 256 битови хранилища.

  • U - неподписан (което означава, че този тип може да представлява само положителни цели числа, а не положителни и отрицателни цели числа)
  • INT - цяло число
  • 256 - 256 бита по размер
  • минималната стойност uint256 може да бъде присвоена е 0
  • максималната стойност uint256 може да бъде присвоена е 2 ^ 256-1 [много голям брой]

Количеството на продукта е само положителна стойност и сегашното предположение е, че ще се погрижим за много голяма стойност за количеството продукт.

cloudera сертифициран администратор за apache hadoop

Декларираната променлива „product_quantity“ е част от състоянието на договора и следователно се запазва или съхранява в пространството на договора. Понастоящем тази променлива ще има стойност 0.

договор PurchaseOrder {uint256 product_quantity}

Дефиниране на конструктора

Конструкторът се извиква, когато договорът е разгърнат. Конструкторът инициализира договора с някои стойности. В текущия сценарий количеството на продукта е настроено на 100, когато договорът е разгърнат. Параметризиран конструктор също може да бъде създаден чрез предаване на променлива и инициализиране на product_quantity с помощта на предадената стойност.

Ключовият момент, който трябва да се отбележи тук, е модификаторът за достъп „public“, свързан с конструктора. Публичната ключова дума указва, че всеки може да има достъп до тази функция, това не е ограничена функция.

конструктор () public {product_quantity = 100}

Добавяне на функции

Нека сега добавим функция, за да направим нашата програма интерактивна. Функциите са контролирани възможности, които могат да бъдат добавени към програма. Всяка функция се предшества от ключова дума функция. Като цяло така изглежда декларацията на функцията' функция ”.

Вземете функция

Едно от най-често срещаните изисквания за която и да е програма е да се прочете запаметената стойност. В следващия договор ще трябва да прочетем стойността „product_quantity“. За да се осигури тази възможност, се добавя функция за четене или функция за получаване. В тази функция ние не правим никаква манипулация със съхранената стойност, а само извличаме съхранената стойност.

Нека сега разбием нашата функция get (get_quantity)

Не. Ключова дума Стойност
един get_quantity (){не са предадени параметри}
2 публично{всеки има достъп до функцията}
3 изглед{означава, че функцията само чете състоянието на договора, не променя състоянието на договора, следователно преглед}
4 връща променлива от тип uint256 {дефинирано какво се връща от функцията}
функция get_quantity () публичен изглед връща (uint256) {връщане product_quantity}

Функции на сетера

Четенето на данните е необходимо и ние го постигнахме в последния раздел, но по-голямата част от сценария също изисква способността за записване / актуализиране на данните. Тази специфична възможност се предоставя чрез добавяне на функция за настройка. Тази функция взема стойност от потребителя под формата на входен параметър. Използвайки стойността, предоставена на функцията от потребителя, стойността на променлива “product_quantity” се записва / актуализира.

Нека сега разбием нашата зададена функция (update_quantity)

Добавяне на функция за актуализиране на стойността на количеството на продукта

Не. Ключова дума Стойност
един update_quantity (стойност uint256){стойността на параметъра от тип uint256 е предадена}
2 публично{всеки има достъп до функцията}
3 Не се изисква, тъй като състоянието се актуализира от функциите
4 връща променлива от тип uint256 (дефинирана какво се връща от функцията)
функция update_quantity (стойност uint256) public {product_quantity = product_quantity + value}

Свържете всичко това заедно, така трябва да изглежда цялостният договор.

твърдост прагма> = 0,4,0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

Внедряване на интелигентен договор

Време е да тествате интелигентния договор. За да тестваме този интелигентен договор, ще използваме Remix Online IDE .

Remix е онлайн детска площадка за интелигентен договор на ethereum . Remix е изцяло базиран на браузър. Remix ви предоставя онлайн IDE (интегрирана среда за разработка), където можете да пишете вашите интелигентни договори. Remix ви предоставя възможност за онлайн компилатор на солидност. Интелигентният договор в Remix IDE може да бъде съставен безпроблемно с помощта на конкретна версия на компилатора.

Remix също така предоставя възможност за бързо тестване на интелигентния договор.

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

С Remix IDE всичко, от което се нуждаете, е браузър и интернет връзка, за да започнете с разработването на интелигентни договори. Бързо разработване, тестване и валидиране на идея за интелигентен договор.

Remix наскоро надстрои своя потребителски интерфейс.

Remix-UI-Smart-Contracts-Edureka

Щракнете върху иконата на файла, както е подчертано в горното изображение, ще се отвори File Explorer.

  1. Щраквайки върху иконата плюс, може да се създаде нов файл, дайте име на файла PurchaseOrder.sol
  2. Това ще създаде празен файл с име PurchaseOrder.sol, щракнете и отворете този файл.
  3. Нека копираме поставяме целия договор в PurchaseOrder.sol.
  4. Щракнете върху втората икона, в лявото меню точно под иконата на файла трябва да се появи опцията за компилатор на солидност.
  5. Под етикета на компилатора изберете версията на компилатора. Текущата избрана версия е 0.5.8.
  6. Публикувайте избора на версия на компилатора, кликнете върху „Compile PurchaseOrder.sol“. Това ще състави интелигентния договор.

7. След като интелигентният договор се компилира успешно, щракнете върху бутона „Детайли за компилация“ и трябва да се появят следните подробности. След компилация се предоставят две ключови информации

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

8. За да се тества интелигентният договор, интелигентният договор трябва да бъде разгърнат. За да разгърнете интелигентния договор, щракнете върху следващата икона в менюто отляво, под иконата за компилиране. Ще се появи следният екран. За да се тества интелигентният договор, интелигентният договор трябва да бъде разгърнат. За да разгърнете интелигентния договор, щракнете върху следващата икона в менюто отляво, под иконата за компилиране. Ще се появи следният екран.

Възможност за разполагане

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

  • Околна среда: Това може да се мисли за опция, подобна на избора за закупуване на лаптоп от Amazon, Flipkart, Newegg (всичко това е онлайн търговец на дребно), от който правите избор, от който искате да купувате, въз основа на вашите изисквания. По същия начин, в случай на Remix, имаме опция къде да внедрим интелигентния договор и да тестваме интелигентния договор. Падащото меню до етикета на околната среда предоставя три селекции
    • JavaScript VM - локален Ethereum единичен възел се завърта в паметта на браузъра и предоставя 5 предварително тествани акаунта, които могат да се използват за транзакцията (внедряване, извикване на функции)
    • Инжектирано предоставяне на Web3 - Това разчита на MetaMask. Metamask е като брокер или посредник, който позволява на уеб приложенията да взаимодействат със смарт договора. Metamask предоставя възможност за управление на самоличностите и също така подписване на транзакциите, които трябва да бъдат изпратени до мрежата на ethereum. Това посредник или 3rdстрана Ви предоставя помощ да определите блокчейн мрежата, към която ще бъде внедрен интелигентният договор.
    • Доставчик на Web3 - ако използвате локален възел Ethereum и е налична крайна точка RPC, тази опция може да се използва. Интелигентният договор ще бъде разположен на локалния възел Ethereum.
  • Акаунти: Тази информация се попълва въз основа на избраната среда. Например. JavaScript VM предоставя 5 предварително тествани акаунта. В случай на доставчик на Web3 и инжектиран Web3 не предоставят предварително финансирани тестови акаунти.
  • Ограничение на газа: Това определя максималното количество газ, което инициаторът е готов да похарчи за всяка транзакция. Това е мястото за защита срещу безкраен цикъл и изчерпване на всички средства по сметката в случай на безкраен цикъл.
  • Стойност: Стойността, която може да се наложи да се изпрати при разгръщане на интелигентния договор. Това е незадължителна стойност.

За да разгърнете договора, изберете опция JavaScript VM, изберете първата сметка от падащото меню за акаунти, отбележете салдото по сметката (100 етер).

Уверете се, че името на интелигентния договор е PurchaseOrder, кликнете върху разполагане. Ключови действия, които ще се случат

  1. Салдото по сметката се променя от 100 етер на 99,999999 етер, приспадната сума е транзакционната цена за внедряване на интелигентния договор.
  2. В разгърнатия договор ще се появи нова плочка за интелигентен договор, която също ще предостави адреса на новия интелигентен договор нещо подобно (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. В прозореца на конзолата ще се появи следната информация
    1. Хеш на транзакция - уникално идентифицира разполагането на договора
    2. Разходи за транзакция
    3. Адрес на договора

Взаимодействие с разгърнатия договор

  1. Съгласно разгърнатия договор са налични два метода за взаимодействие update_quantity и get_quantity.
  2. И двата метода за взаимодействие са публичните методи, дефинирани в договора „Поръчка за покупка“.
  3. Методът за актуализиране на количеството “update_quantity” изисква входен параметър, следователно полето за въвеждане.
  4. Методът за получаване на количество get_quantity извлича стойността на product_quantity.
  5. Нека проверим какво се случва при извикване на get_quantity, показва се върната стойност 100, която е инициализирана в конструктора. Това не води до транзакция
  6. Нека извикаме update_quantity и предоставим 30 като вход. Това води до транзакция

Накратко, всяка операция, която причинява операция за запис в състоянието на договора (т.е. променя променливите на договора), ще доведе до транзакция.

Всяка операция, която само чете състоянието на договора, не води до транзакция.

Заключение за разработване на интелигентен договор

С това току-що създадохме първия си интелигентен договор, просто надрасквайки повърхността на солидността. Току-що видяхме какво е необходимо, за да се тества интелигентният договор от внедряването на интелигентния договор до инициирането на транзакции.

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

С това заключавам Интелигентен договор блог за развитие. Надявам се да ви е харесало да четете този блог и да го намерите информативен.

Азако искате да научите интелигентни договори, да изградите кариера в областта на Blockchain и да натрупате опит в програмирането на Ethereum, да се запишете на живо онлайн тук това идва с поддръжка 24 * 7, която да ви води през целия период на обучение.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на „Интелигентно разработване на договори“ и ние ще се свържем с вас най-раноул.