Jak vytvořit notáře na blockchainu Ethereum - část 2

V tomto tutoriálu vytvoříte decentralizovanou aplikaci, která implementuje oficiální certifikáty pro Ethereum

V části 1 jsme vytvořili inteligentní smlouvu na zastupování certifikátů.

Pojďme dokončit tovární smlouvu, která má na starosti rozmístění a správu certifikátů. Nakonec použijeme Next.js k zabalení jednoduchého rozhraní front-end, které umožní každému vytvořit certifikát na vašem DApp prostřednictvím uživatelského rozhraní formuláře:

Podívejte se na živé ukázky finálního produktu na adrese https://www.forevermore.io/

Začněme! Zde je grafické znázornění toho, co budeme dělat.

Viz část 1 o tom, jak uzavřít smlouvy o osvědčení.

Krok 1 - Vytvořte tovární smlouvu

  1. Ve stejném souboru Marriage.sol jako smlouva s certifikátem vytvořte smlouvu MarriageNotary (nebo MarriageFactory):
pragmatická pevnost ^ 0,19;
smlouva MarriageNotary {
    // DĚLAT
}
smlouva Manželství {...}

Konkrétně tato tovární smlouva:

  • Vytvořte novou inteligentní smlouvu s certifikátem
  • Sledujte seznam dříve vytvořených certifikátů

2. Uložme seznam dříve vytvořených smluv na řadu adres. Tuto proměnnou matice by měl veřejně zobrazit kdokoli, tj. Přední rozhraní, které vykreslí předchozí certifikáty.

adresa [] veřejně registrovaná manželství;

Tipy pro osvědčené postupy:

  • Pole jsou vhodná pro indexovaná vyhledávání. V tomto případě to stačí pro náš jednoduchý případ použití.
  • Pokud potřebujete opakovat své záznamy, pole jsou drahá a ne nejlepší praxe. Pokud potřebujete standardní pár klíč-hodnota, vyhledejte pole namísto mapování.
  • Nakonec v Solidity nemůžete získat array.length. Pokud tedy potřebujete spočítat celkový počet vytvořených certifikátů, měli byste vytvořit novou proměnnou uint pro globální úložiště, abyste mohli sledovat délku polí.

3. Dále deklarujte funkci vytváření budoucích manželských listů. Uživatelé budou tuto funkci nazývat sami, s podrobnostmi, jako jsou jména a sliby párů.

function createMarriage (řetězec _leftName, řetězec _leftVows, řetězec _rightName, řetězec _rightVows, uint _date) public {
}

4. Okamžitě uzavřete novou manželskou smlouvu a uložte adresu nově vytvořené inteligentní smlouvy. Nezapomeňte poslat adresu do pole registrovaných manželství.

function createMarriage (...) public {
    adresa newMarriage = new Marriage (msg.sender, _leftName, _leftVows, _rightName, _rightVows, _date);
    
    // uložení adresy, aby ji klient front-end mohl najít
    registrovanéMarriages.push (newMarriage);
}

Podívejme se na chvíli na interakci front-end. Když vytvoříte novou manželskou smlouvu, bude nějakou dobu trvat, než bude nová smlouva s certifikátem zapsána do blockchainu.

Poznámka: createMarriage je odeslání () do blockchainu, které „slibuje“, že vrátí true nebo false, v závislosti na úspěchu transakce. Klientovi front-end nevrátí žádné hodnoty, jako je nová adresa smlouvy. Váš webový klient tedy adresu ihned po odeslání žádosti createMarriage nezná.
Protože chceme přesměrovat uživatele na tuto nově vytvořenou smlouvu (prostřednictvím její adresy), budeme potřebovat nějaký (levný) způsob, jak tovární smlouva komunikovat s klientem, jakmile bude tento „slib“ vyřešen.

5. Pojďme, aby tato smlouva vyšla jako událost k předání této zprávy.

událost ContractCreated (adresa contractAddress);
function createMarriage (...) public {
    ...
    emise ContractCreated (new Manželství);
    ...
}

Tipy pro osvědčené postupy:

  • Používejte události jako „levnou“ formu úložiště. To je užitečné v Ethereum, kde je skladování nákladné.
  • Pomocí událostí můžete sledovat historii uživatele nebo pozoruhodné okamžiky, jako je výsledek nabídky nebo případ, kdy se na blockchainu změní nějaký záznam.
  • Události jsou protokolovány v síti a volně viditelné na front-endu. Tj. podívejte se na tuto událost, kde mi někdo zazvonil můj svatební zvonek.
  • Ačkoli smlouvy vydávají události, události nelze přečíst uvnitř smlouvy. Je určen pro externího klienta.

6. Nakonec poskytněte pomocnou funkci, aby váš webový klient mohl snadno získat všechny certifikáty vytvořené touto továrnou.

function getDeployedMarriages () vrátí veřejné zobrazení (adresa []) {
 návrat registrované manželství;
}

Oznámení:

  • Solidity vám poskytuje funkce zobrazení statických datových typů zdarma. Z tohoto důvodu můžete zobrazit globální uint bez funkce getUint () getter.
  • To neplatí pro pole. V tomto případě musíte deklarovat svou vlastní vyhledávací funkci. To by také mělo zvýšit příznaky, které getArrays () nemusí být nejlepší praxí pro pole, která budou růst exponenciálně.

Dokončili jste část výuky týkající se inteligentního programování smluv! Výborně.

Krok 2 - Otestujte a nasaďte své smlouvy v Remixu

Remix je online IDE, které sestavuje, testuje a nasazuje vaše smlouvy do testovacích sítí zdarma.

  1. Zkopírujte a vložte svůj kód do IDE.
  2. Přepněte na kartu Kompilace a vyřešte všechny chyby kompilace. Remix je skvělý o tom, jak ukázat problém a naučí vás, jak jej vyřešit. Pokud si nejste jisti svým kódem v tomto okamžiku, podívejte se prosím na tento cheatsheet.
  3. Přepněte do tabulky Run a ujistěte se, že je prostředí nastaveno na Javascript VM. Tím se zavádí smlouva na virtuální stroj ve vašem prohlížeči namísto hlavní nebo testovací sítě (což trvá déle a může stát peníze).
  4. Z rozbalovací nabídky vyberte položku MarriageNotary. Klepněte na tlačítko nasadit. Nezapomeňte, že při vytváření certifikátů spoléháte na továrnu, nikoli na ruční vytváření certifikátů!
  5. Sledujte úspěšné nasazení :)
  6. Zobrazit všechny dostupné metody v části MarriageNotary, včetně funkce vytváření nových certifikátů.

Váš notář je nyní na virtuálním blockchainu! Nechte si vytvořit certifikát zadáním uvnitř funkce createMarriage:

"Rick", "Get shwiftayyy", "Morty", "Nikdo neexistuje záměrně", 1532706206

Oznámení:

  • Datum je uloženo uint, takže použijte převaděč epoch
  • Nezapomeňte na přísné zadávání textu, Remix je v tom přísný
  1. Najděte smlouvuAdresa v konzole, kterou jste pohodlně vyslali při akcích MarriageNotary
  2. Z rozbalovací nabídky vyberte možnost Manželství
  3. Vložte adresu smlouvy a kliknutím na Na adresu načtěte instanci nově vytvořené manželské smlouvy
  4. Rozevírací seznam zobrazíte seznam dostupných funkcí a dat v manželské smlouvě
  5. Kliknutím na LeftVows by se vám nyní mělo dostat „dostat shwiftayyy“

Váš notář nasadil certifikát do virtuální blockchainu!

Krok 3 - nasaďte DApp do Ethereum

Další vydání uživatelského rozhraní pro Forevermore.io - přispěvatelé?

Pokud chcete nasadit své smlouvy na Ethereum bez uživatelského rozhraní, stačí použít Remix. To se doporučuje pro rychlé nasazení se smlouvou. Jednoduše změňte své prostředí na Injected Web3 a ujistěte se, že váš účet Metamask má dostatek Ether k dokončení transakce nasazení.

Chcete-li nasadit smlouvu s doprovodným webem, existuje několik možností:

  1. Použít lanýž: doporučeno pro plné nasazení DApp, bez příliš mnoha konfigurací
  2. Použijte forebermore codebase: doporučeno, pokud chcete tento DApp dále přizpůsobit a vytvořit si svůj vlastní. Obsahuje vlastní kompilační skript a implementační README.

Poznámka:

Forevermore je na Next.js, což je framework React, který zpracovává vykreslování na straně serveru. Next.js je považován za vysoce kompatibilní s Web3, de-facto javascript API API Ethereum.

Úplné pokyny k nastavení úplných závislostí DApp jsou v tomto README. Prosím, volně jej rozvětvujte a odešlete případné problémy svým přispěvatelům s otevřeným zdrojovým kódem.

Chcete víc?

  • Poté začneme sérií výuky bezpečnosti Ethereum a nejlepších principů designu. Sledujte nás a zůstaňte naladěni.

Úvěry

  • Podívejte se na konečnou aplikaci zde a kompletní open-source projekt zde.
  • Kredity: Daniel (párový kodér), Stephen (tutoriály)