Как да създадете нотариус върху блокчейн Ethereum - Част 2

Ще създадете децентрализирано приложение, което разгръща официални сертификати на Ethereum в този урок

В част 1 създадохме интелигентен договор за представяне на сертификати.

Нека завършим фабричния договор, отговарящ за разполагането и управлението на вашите договори за сертификат. И накрая, ще използваме Next.js, за да увием прост преден край, за да може всеки да създаде сертификат на вашия DApp чрез потребителски интерфейс на формата:

Вижте демонстрация на живо на крайния продукт на https://www.forevermore.io/

Да започваме! Ето графично представяне на това, което ще правим.

Вижте част 1 за това как да сключите договори за сертификат.

Стъпка 1 - Създайте фабричния договор

  1. В същия Marriage.sol файл като вашия договор за сертификат, създайте MarriageNotary (или MarriageFactory) договор:
плътност на прагмата ^ 0.4.19;
договор БракНотариус {
    // ДА НАПРАВЯ
}
договор Брак {...}

По-конкретно, този фабричен договор ще:

  • Създайте нов сертификат смарт договор
  • Следете списък на предварително създадени сертификати

2. Нека съхраняваме списъка на предварително създадени договори в масив от адреси. Тази променлива на масив трябва да бъде обществено видима от всеки, т.е. обвивка от предния край, която ще представи предишни сертификати.

адрес [] публично регистрирани бракове;

Съвети за най-добри практики:

  • Масивите са добри за индексирани търсения. В този случай е достатъчно за нашия прост случай на употреба.
  • Ако трябва да прегледате своите записи, масивите са скъпи и не са най-добрата практика. Ако имате нужда от стандартна двойка ключ-стойност, потърсете, вместо това заменете масивите си с картографиране.
  • И накрая, в Solidity не можете да получите array.length. Така че, ако трябва да преброите общите създадени потребители на сертификати, трябва да създадете нова глобална променлива uint за съхранение, за да проследите дължината на масивите.

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

функция createMarriage (string _leftName, string _leftVows, string _rightName, string _rightVows, uint _date) public {
}

4. Инсталирайте новия си брачен договор и запазете адреса на новосъздадения смарт договор. Не забравяйте да натиснете адреса към вашия масив от регистрирани Марии.

функция createMarriage (...) public {
    адрес newMarriage = нов брак (msg.sender, _leftName, _leftVows, _rightName, _rightVows, _date);
    
    // запазване на адреса, така че клиент от предния край да го намери
    registeredMarriages.push (newMarriage);
}

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

Забележка: createMarriage е изпращане () към blockchain, което „обещава“ да върне вярно или невярно, в зависимост от успеха на транзакцията. Няма да върне никакви стойности, като новия адрес на договора, на предния клиент. По този начин, вашият уеб клиент веднага няма да знае адреса след изпращане на заявката createMarriage.
Тъй като искаме да пренасочим потребителите към този новосъздаден договор (чрез неговия адрес), ще ни е необходим някакъв (евтин) начин за фабричния договор да комуникира с вашия клиент, след като това „обещание“ бъде разрешено.

5. Нека този договор излъчи събитие, което да препредаде това съобщение.

Събитие Договор Създаден (адрес договор Адрес);
функция createMarriage (...) public {
    ...
    излъчват ДоговорСъздаден (newMarriage);
    ...
}

Съвети за най-добри практики:

  • Използвайте събитията като „евтина“ форма за съхранение. Това е полезно в Ethereum, където съхранението е скъпо.
  • Използвайте събития, за да проследявате историята на потребителя или забележителни моменти, като например резултата от офертата, или в случай, че някой запис е променен на blockchain.
  • Събитията се регистрират в мрежата и се виждат от предния край. Т.е. виж това събитие завинаги, когато някой звънна на сватбената ми камбана.
  • Въпреки че договорите излъчват събития, събитията не могат да бъдат четими от вътрешността на договора. Той е предназначен за външен клиент.

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

функция getDeployedMarriages () публичен изглед се връща (адрес []) {
 връщане регистрираниМари;
}

Забележете:

  • Солидността ви предоставя функции за преглед на статични типове данни безплатно. Ето защо можете да видите глобален uint без функция getUint () getter.
  • Това не се отнася за масиви В този случай трябва да декларирате собствената си функция за извличане. Това също трябва да повдигне флагове, че getArrays () може да не е най-добрата практика за масиви, които ще нарастват експоненциално.

Завършихте програмата за програмиране на смарт договори в този урок! Много добре.

Стъпка 2 - Тествайте и разгръщайте договорите си в Remix

Remix е онлайн IDE, който компилира, тества и разгръща вашите договори за тест-мрежи безплатно.

  1. Копирайте и поставете вашия код в IDE.
  2. Преминете към раздела Компилиране и разрешете всички грешки при компилация. Remix е чудесен за посочване на проблема и ви учи как да го разрешите. Ако не сте сигурни в кода си в този момент, моля, вижте този макет.
  3. Преминете към таблицата Run и се уверете, че средата е зададена на Javascript VM. Това разгръща договора ви към виртуална машина във вашия браузър, вместо към основната или тестова мрежа (което отнема повече време и може да струва пари).
  4. Изберете MarriageNotary от падащото меню. Кликнете върху внедряване. Не забравяйте, че разчитате на фабрика, за да създадете сертификатите, а не да ги създавате на ръка!
  5. Гледайте успешното внедряване :)
  6. Преглеждайте всички налични методи под MarriageNotary, включително функцията за създаване на нови сертификати.

Вашият нотариус вече е във виртуалната блокчейн! Накарайте го да създаде сертификат, като въведете функцията createMarriage:

„Рик“, „Вземи shwiftayyy“, „Морти“, „Никой не съществува нарочно“, 1532706206

Забележете:

  • Датата се съхранява с uint, така че използвайте конвертор на епохи
  • Не забравяйте да стригирате въвеждането на текст, Remix е строг по отношение на това
  1. Намерете адреса на договора в конзолата, който удобно излъчвате в събитията на MarriageNotary
  2. Изберете Брак от падащото меню
  3. Поставете адреса на договора и щракнете върху Адрес, за да извлечете екземпляра от новосъздадения Ви брачен договор
  4. Пуснете надолу, за да видите списък на наличните функции и данни в брачния договор
  5. Щракването върху LeftVows сега трябва да ви даде „вземете shwiftayyy“

Вашият нотариус е разположил сертификат във виртуалната блокчейн!

Стъпка 3 - Внедрете вашия DApp в Ethereum

Следваща версия на потребителския интерфейс за Forevermore.io - има ли сътрудници?

Ако искате да разгърнете договорите си към Ethereum без потребителски интерфейс, можете просто да използвате Remix. Това се препоръчва за бързо внедряване само по договор. Просто променете средата си на Injected Web3 и се уверете, че вашият акаунт в Metamask има достатъчно Ether, за да завърши транзакцията за внедряване.

За да разгърнете договора си с придружаващ уебсайт, има няколко възможности:

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

Забележка:

Forevermore е на Next.js, което е рамка React, която обработва рендериране от страна на сървъра. Next.js се счита за много съвместим с Web3, de-facto JavaScript API API на Ethereum.

Пълните инструкции за настройка на пълните зависимости на DApp са в тази ПРОЧЕТЕТЕ. Моля, разкажете свободно и изпращайте евентуални въпроси към своите отворени източници тук.

Искам още?

  • След това ще започнем поредица от преподаване на сигурност на Ethereum и най-добрите принципи за дизайн. Следвайте ни и бъдете насреща.

Кредити

  • Вижте окончателното приложение тук и пълния проект с отворен код тук.
  • Кредити: Даниел (двойка-кодер), Стивън (уроци)