Al doilea pas

    În această secțiune vom introduce câteva instrumente puternice pentru a vă face experiența de dezvoltare cât mai ușoară posibil. Vom instala un mediu de dezvoltare numit Truffle, vom explora soliditatea, vom acoperi elementele fundamentale ale unui contract inteligent (chiar ne vom face propriile!) Și vom începe propriul nostru nod pe mașina noastră locală. Odată ce ne-am desfășurat cu succes la nivel local, vom folosi Remix pentru a interacționa cu contractul nostru și pentru a ne adânci în procesul de dezvoltare!

    Familiarizarea cu trufa

    Trufa

    Trufa este un mediu excelent de dezvoltare care vă permite să vă conectați și să testați folosind mașina virtuală Ethereum. Trufa a fost creată pentru a face dezvoltarea mai ușoară, iar cu interacțiunile care apar local, acest lucru ajută la reducerea stresului de implementare atât pe o rețea de testare (cum ar fi Ropsten sau Rinkeby), cât și pe rețeaua principală.

    Pentru mai multe documentații despre Truffle, aruncați o privire Aici:

    Captură de ecran 2020 08 26 la 5 49 43 PM

    Pentru a instala Truffle în terminalul dvs., continuați și rulați următoarele:

    npm instalați trufa -g

    Notă: Recomandări pentru Windows

    Dacă rulați Truffle pe Windows, este posibil să întâlniți unele conflicte de denumire care ar putea împiedica executarea corectă a Truffle. Te rog vezi secțiunea privind rezolvarea conflictelor de denumire pentru soluții.

    Ganache 

    În timp ce ne aflăm, să mergem mai departe și să instalăm CLI pentru ganache

    O descriere rapidă a ganache-ului este că este un blockchain personal pe care îl puteți utiliza local pentru a vă roti rapid și a testa funcționalitatea proiectelor. Ganache este un instrument pe care îl puteți utiliza pe tot parcursul ciclului de dezvoltare. Nu numai că sunteți capabil să vă dezvoltați, dar să implementați și să testați dApp-urile. Toate acestea se întâmplă local pe mașina dvs., deci acesta este cel mai mic mediu de frecare / risc pentru a lucra la proiectele dvs.!

    Folosind npm:

    npm install -g ganache-cli

    Ok, înapoi la trufe!

    Unele dintre ofertele Truffle oferă:

    • Compilare, conectare, implementare și gestionare binară a contractelor inteligente încorporate.
    • Testare automată a contractelor pentru dezvoltare rapidă.
    • Implementare scriptabilă, extensibilă & cadrul migrațiilor.
    • Administrarea rețelei pentru implementarea în orice număr de public & rețele private.
    • Gestionarea pachetelor cu EthPM & NPM, utilizând standardul ERC190.
    • Consolă interactivă pentru comunicare directă prin contract.
    • Conductă de construcție configurabilă cu suport pentru integrare strânsă.
    • Runner de script extern care execută scripturi într-un mediu Truffle.

    Pentru tutorialul nostru vom construi ceva de la bază, totuși sunteți absolut încurajați să verificați unele dintre proiectele cazanelor pe care Truffle le-a creat deja numite Truffle Boxes (găsite Aici).

    Acum că avem trufe și ganache instalate, să discutăm soliditatea!

    Soliditate 

    Soliditatea este un limbaj incredibil orientat spre obiecte, la nivel înalt, pentru implementarea contractelor inteligente care rulează pe mașina virtuală Ethereum (EVM). Contractele inteligente sunt programe care guvernează comportamentul conturilor în statul Ethereum. Dacă nu v-ați uitat niciodată la o linie de soliditate, dar sunteți familiarizați cu C ++ și sau cu JavaScript, veți observa mai mult de câteva asemănări. 

    Soliditatea este un limbaj tipizat static care acceptă moștenire, biblioteci și tipuri complexe definite de utilizator, printre alte caracteristici. Cu Solidity puteți crea contracte pentru utilizări precum votul, crowdfunding-ul, chiar și licitațiile nevăzătoare pentru a numi doar câteva cazuri de utilizare. 

    Soliditatea este compilată în bytecode care este executabil pe EVM. Cu Solidity, dezvoltatorii sunt capabili să scrie aplicații care implementează logica de afaceri autoaplicată înglobată în contracte inteligente, lăsând o evidență a tranzacțiilor fără respingere. Contractele inteligente permit utilizatorilor să aibă încredere în cod, ceea ce ajută la crearea unui mediu de încredere în care potențialele corupții umane sunt eliminate. 

    Rețineți atunci când implementați contracte, ar trebui să acordați întotdeauna atenție versiunii pe care o utilizați. Modificările de rupere, funcțiile noi și remedierile de erori sunt introduse în mod regulat (amintiți-vă acest lucru dacă vă aflați urmând tutoriale online, se pot întâmpla erori, așa că documentație apropiată de tine). 

    Începerea unui proiect Truffle 

    Cu toate acestea, să începem proiectul nostru și să-l numim „eth-hello-world”

    Salt în terminal și să creăm un nou folder gol 

    mkdir eth-hello-world

    Odată ce avem directorul gol, mergeți mai departe și săriți în dosar și executați comanda

    init trufe

    Odată ce procesul se termină, ar trebui să putem vedea câteva fișiere care au fost create pentru noi:

    Captură de ecran 2020 08 26 la 7 21 53 PM

    Acum avem contacte, migrări, un folder de testare și un fișier de configurare a trufelor. Să aruncăm o privire în aceste fișiere și să discutăm la un nivel superior despre ce sunt acestea.

    Contracte

    Acest dosar va conține toate contractele dvs. inteligente (pe care în acest exemplu le vom crea folosind Solidity). Dacă nu ați auzit niciodată de contacte inteligente, o modalitate de a vă gândi la ele este; bucăți de cod care rulează pe blockchain (acesta poate fi local, test sau mainnet) care sunt garantate pentru a produce aceleași rezultate pentru toată lumea care le rulează. Contractele inteligente sunt utilizate în dApp-uri (aplicații descentralizate) și au o cantitate extraordinară de cazuri de utilizare. Votul, jocurile, lanțul de aprovizionare, monedele, înregistrările financiare și asta este doar pentru a numi câteva!

    Pentru a descompune și mai mult, Nick Szabo oferă exemplul distribuitorului automat. Dacă introduceți cantitatea corectă de monede în mașină, dvs. (și toată lumea înainte / după dvs.) vă puteți aștepta la același rezultat exact în schimb. Același lucru este valabil și pentru contactele inteligente construite pe Ethereum, acestea conțin o valoare și până când sunt îndeplinite condițiile lor (adică cantitatea corectă de monede din exemplul nostru), atunci va debloca și elibera informațiile pe care încercați să le extrageți.

    Vom reveni la discuțiile despre soliditate și contracte inteligente puțin mai târziu, să trecem la migrații!

    Migrații

    Migrațiile sunt fișiere Javascript care vă permit să implementați contractele în rețeaua Ethereum. Ceea ce este cu adevărat interesant la ei este că există o ipoteză de bază care va evolua munca ta, iar implementarea ta se va schimba în timp. Pe măsură ce faceți actualizări, veți crea noi scripturi de migrare pe parcursul evoluției proiectului. O modalitate de a vă gândi la fișierele de migrație este că acestea sunt în principal responsabile de organizarea și implementarea sarcinilor dvs. O modalitate simplă de a vă gândi la ele este că migrările sunt un set de scripturi de implementare gestionate. Pe măsură ce vă actualizați munca, un jurnal al migrațiilor efectuate anterior este înregistrat pe lanț printr-un contract de migrări încorporat.

    Uită-te pentru tine, ai deja un contract de migrare! Accesați directorul contractului și deschideți-l, veți vedea un fișier Migrations.sol care conține un contract care ar trebui să arate cam așa:

    Captură de ecran 2020 08 27 la 4 49 03 AM

    Acesta este un contract implicit care este creat pentru noi atunci când rulăm truffle init. Trufa prin natură necesită să aveți un contract de migrare pentru a utiliza funcția de migrare, deci nu ștergeți acest lucru!

    Notă: Trebuie să implementați acest contract în cadrul primei dvs. migrații pentru a profita de funcția Migrații.

    Acum, că am avut ocazia să ne uităm la contractul nostru de migrare, ne putem îndrepta către directorul de migrare și vom vedea un fișier numit 1_inital_migrations.js

    Notă: Aruncați o privire asupra convenției de denumire a acestui fișier, acesta este prefixat cu un număr și este sufixat de o descriere. Prefixul numerotat este necesar pentru a înregistra dacă migrarea a rulat cu succes. Sufixul este doar pentru lizibilitatea umană

    Captură de ecran 2020 08 27 la 5 09 25 AM

    Pe măsură ce creați contracte, va trebui să vă asigurați că aveți un fișier migration.js împreună cu acestea. Fără a vă scufunda prea adânc în artifacts.require (), deployer.deploy etc. Aici este o documentație excelentă de la echipa trufelor pentru a explica în continuare utilizarea acestor metode.

    Pentru a compila un proiect Truffle, treceți la rădăcina directorului în care se află proiectul și apoi tastați următoarele într-un terminal:

    compilare trufe

    Pentru a rula migrațiile în terminalul dvs., veți rula în cele din urmă (totuși, nu trebuie să facem acest lucru încă!)

    trufa migrează

    Aceasta va rula toate migrațiile situate în directorul de migrații al proiectului dvs..

    Ceea ce este interesant de observat este că această comandă va executa doar migrații create recent. Deci, dacă migrarea dvs. anterioară a rulat cu succes, nu o va relua din nou. De asemenea, dacă nu există migrări noi pentru a rula, pur și simplu nu va rula. Dacă este necesar, puteți utiliza opțiunea –reset pentru a rula toate migrările de la început.

    Alte opțiuni de comandă sunt documentate Aici.

    Notă: Am instalat mai devreme, dar pentru testarea locală asigurați-vă că aveți un blockchain de testare cum ar fi Ganache instalat și rulat înainte de a executa migrare.

    Testarea

    Când vine vorba de scrierea testelor, trufele sunt încărcate cu câteva instrumente excelente pentru a face acest lucru intuitiv. Mai ales dacă intenționați să vă implementați contractele pe mainnet, (dar este o bună practică, chiar și pe testnet), este foarte important să rulați teste și să vă verificați contractele la maximum. Trufa a făcut ca revizuirea / testarea dezvoltării dvs. să fie simplă și ușor de gestionat.

    Trufa folosește Mocha cadru de testare și Chai pentru afirmații care să vă ofere un cadru solid din care să scrieți testele JavaScript. 

    Notă: dacă nu sunteți familiarizați cu scrierea testelor unitare în Mocha, vă rugăm să consultați Documentația Mocha înainte de a continua.

    Notă laterală: un instrument excelent de utilizat pentru a vă examina temeinic contractele este Mythx, primul serviciu de analiză a securității din domeniu care oferă analize aprofundate pentru contractele inteligente. Misiunea lor este să nu vă asigure doar evitarea erorilor costisitoare, ci să faceți din Ethereum o platformă mai sigură și mai de încredere.

    Toate fișierele de testare trebuie să fie localizate în directorul./test. Truffle va rula fișiere de test numai cu următoarele extensii de fișiere: .js, .ts, .es, .es6, .jsx și.sol. Toate celelalte fișiere sunt ignorate.

    Pentru a rula toate testele, pur și simplu rulați:

    testul trufelor

    Acum, că am acoperit ceea ce creează inițierea trufelor și schela proiectului nostru, haideți acum să adăugăm contractul nostru inteligent la proiectul nostru!

    Scrierea unui contract inteligent

    Să trecem în directorul contractului și să scriem primul nostru contract pe care intenționăm să îl implementăm în mediul nostru local de testare (ganache)!

    Vom începe prin a crea fișierul nostru.sol, pe care îl vom numi HelloWorld.sol

    În continuare, putem adăuga contractul nostru de bază, care va arăta cam așa

    soliditatea pragmatică >= 0,5,8 <0,7,0; contract HelloWorld {șir mesaj public; constructor (șir de memorie initMessage) public {mesaj = initMessage; } actualizare funcție (șir de memorie newMessage) public {message = newMessage; }}

    Privind contractul nostru un pic mai atent, putem descompune câteva elemente

    Amintiți-vă, un contract este o colecție de funcții și date (starea sa).

    Cuvântul cheie pragma poate fi utilizat pentru a activa anumite caracteristici sau verificări ale compilatorului. O directivă pragmatică este întotdeauna locală pentru un fișier sursă, deci trebuie să adăugați pragma la toate fișierele dvs. dacă doriți să fie activate în proiect. Fără o declarație de pragmă la începutul fișierului nostru de soliditate (sau a oricărui), contractul nostru nu va ști cum să compileze.

    (Aici este un link către documentele de soliditate pentru a învăța profunzimile nuanțelor de soliditate)

    În cele din urmă, un contract este o colecție de funcții și date (starea sa) care se află la o anumită adresă pe blockchain-ul Ethereum.

    Privind funcționalitatea contractului nostru, putem vedea că ne setăm mesajul să fie un șir public vizibil. 

    Cuvântul cheie „public” face variabilele accesibile din afara unui contract și creează o funcție pe care alte contracte sau SDK-uri o pot apela pentru a accesa șirul de valori mesaj public.

    contract HelloWorld {șir mesaj public;

    Iată o funcție care rulează numai în timpul creării contractului 

    constructor (șir de memorie initMessage) public {mesaj = initMessage; }

    Acesta ia o valoare șir și stochează valoarea în zona de stocare a datelor de memorie, setând mesajul pe acel mesaj de valoare, adică initMessage.

    Putem apoi inițializa un mesaj care este transmis ca parametru și poate fi modificat / actualizat cu funcția de actualizare.

    Aceasta este o funcție accesibilă publicului, care ia un șir ca parametru și actualizează „mesajul” (vezi mai jos).

    actualizare funcție (memorie șir newMessage) public {mesaj = newMessage; }}

    Iată-l, un contract HelloWorld de bază, dar digerabil!

    Acum că ne-am adăugat contractul, ne putem asigura acum că are capacitatea de a compila!

    Accesați folderul Migrare din proiectul nostru și vom crea acum un fișier a.js dedicat contractului nostru HelloWorld.

    Vom crea un fișier nou și numele este 2_deploy_contracts.js

    Amintiți-vă nota despre convențiile de denumire de mai devreme!

    const HelloWorld = artifacts.require ("Salut Lume"); module.exports = function (deployer) {deployer.deploy (HelloWorld, "şir"); };

    Buna treaba! Suntem aproape gata să ne implementăm contractul, dar mai întâi trebuie să ne asigurăm că fișierele noastre de configurare a trufelor știu cu cine să vorbim. Așa cum am menționat mai devreme, ne vom concentra asupra mediului nostru local în această secțiune, dar în secțiunea 3 (spolier) nu numai că creăm și implementăm local, îl aducem la o rețea de testare!

    Derulați în jos în fișierul truffle-config.js până când vedeți secțiunea referitoare la rețele

    decomentați / adăugați următoarele 

    rețele: {dezvoltare: {gazdă: "127.0.0.1", port: 8545, network_id: "*", },

    Acum, fișierul dvs. ar trebui să arate cam așa:

     

    Captură de ecran 2020 08 31 la 6 14 45 AM

    Ce se întâmplă aici este că ni se spune fișierul nostru de configurare instrucțiuni specifice cu ce să ne conectăm. În acest caz, după cum veți vedea în curând, ne vom conecta la instrumentul nostru ganache-cli.

    Porniți Ganache

    Cu acestea, să mergem mai departe și să pornim ganache-ul nostru 

    în terminalul dvs. mergeți mai departe și alergați 

    ganache-cli

    Captură de ecran 2020 08 31 la 6 20 12 AM

    Verifică! Acum rulați propriul TestRPC chiar acolo în terminal! 

    (mai multe despre asta Aici)

    Notă: Păstrați această filă în terminalul dvs. deschis, dar continuați și deschideți una nouă pentru a lucra.

    Scurtă revizuire 

    Să ne întoarcem la proiectul nostru și să analizăm rapid ceea ce am făcut. 

    • Am creat un nou proiect
    • Trufa inițializată
    • Am făcut un tur rapid al schelelor
    • Am creat contractul nostru HelloWorld
    • S-a adăugat logică în folderul nostru de migrații pentru contractul nostru
    • Am intrat în fișierul nostru de configurare și ne-am ajustat informațiile de rețea 

    E timpul să ne punem în funcțiune contractul! 

    În noua noastră fereastră de terminal (deoarece avem ganache care rulează în cealaltă) 

    să mergem înainte și să fugim 

    compilare trufe

    Acum ar trebui să vedeți acest lucru ca rezultat în terminalul dvs.:

    Captură de ecran 2020 08 31 la 7 07 17 AM

    Dacă mergeți acum la proiectul dvs., veți vedea că acum aveți un folder de construcție / contracte deasupra folderului de contract care conține fișiere two.json. Ar trebui sa vezi: 

    • HelloWorld.json
    • Migrations.json 

    Fișierul.json la un nivel înalt descrie contractul implementat și funcțiile sale. Ne permite să contextualizăm contractul și să apelăm la funcțiile acestuia.

    Dacă aruncăm o privire în interior, putem vedea o mulțime de informații:

     

    Captură de ecran 2020 08 31 la 8 01 28 AM

    Ne adâncim în aceste informații mai adânc în pasul trei, dar ceva important de luat în considerare este ABI.

    Interfața binară a aplicației este o schemă de codificare a datelor utilizată în Ethereum pentru lucrul cu contracte inteligente.

    Aruncând o privire asupra informațiilor, este relativ intuitiv să înțelegeți. ABI definește, de asemenea, modul în care utilizatorul poate apela funcțiile – adică locația funcției în raport cu adresa contractului inteligent. O rezumare la nivel înalt este ABI este descrierea interfeței contractului. Nu conține cod și nu are capacitatea de a rula de la sine. Apoi aveți bytecode-ul, care este codul EVM executabil, dar în sine este fără context.

    E timpul să migrez

    Bine! 

    Acum, că avem ganache-cli în funcțiune și ne-am compilat contractul inteligent, așa că acum este timpul să ne migrăm contractele! 

    în terminalul dvs. mergeți mai departe și alergați 

    trufa migrează

    DA! Tu ai făcut-o!

    Captură de ecran 2020 08 31 la 8 37 37 AM

    Vedem că am implementat cu succes contractul nostru inteligent. Puteți vedea câteva informații cu adevărat utile care au fost generate și dacă vă îndreptați către cealaltă filă cu rularea ganachi-cli ar trebui să vedeți un TransactionReceipt (aruncați o privire pentru dvs.).

    Testează ETH 

    Înainte de a ne îndrepta spre Remix, trebuie să obținem un test ETH, astfel încât să putem plăti taxele de gaz pentru Remix (nu vă faceți griji, acest lucru nu vă va costa de fapt bani). 

    Mergeți spre acest robinet și apucă niște Rinkeby. Ne scufundăm în ce test este ETH în pasul 3, dar în acest pas știm doar că vom folosi Rinkeby, care este o rețea de dovadă a autorității, opusă să spunem Ropsten, care este o rețea de probă a muncii (care este mai asemănătoare cu principala publică) net). După parcurgerea pașilor 2 și 3, veți avea parte din ambele în portofelul MetaMask cu care să experimentați!

    Remix

    Ok, acum că avem unele teste EHT, este timpul să mergem la Remix și să ne implementăm contractul în afara mediului nostru local și chiar să avem capacitatea de a interacționa cu acesta!

    „Ce naiba e Remix?” 

    Mă bucur că ai întrebat! 

    Remix este un instrument puternic, open source, care vă ajută să scrieți contracte Solidity direct din browser. Un element cu adevărat uimitor în special despre Remix este acela că acceptă atât utilizarea în browser, cât și local! Remix acceptă testarea, depanarea și implementarea contractului pentru a numi câteva caracteristici cheie. Remixul ar trebui să fie considerat un instrument de bază pentru un dezvoltator în procesul de construire. Începând cu implementarea locală (așa cum am făcut mai devreme) cu ganache este o bază excelentă, trecând de la implementarea locală putem experimenta și interacționa cu contractul nostru pe Remix.

    Luând convingeri adecvate și testându-vă (din nou și din nou) dezvoltarea înainte de o potențială lansare în rețeaua principală de etereum, vă puteți salva poate mai mult decât o durere de cap!

    Acum să luăm același contract și să-l implementăm în afara mediului nostru local folosind Remix 

    Legătură Aici 

    Contractul nostru 

    Faceți clic pe fișier nou și să-l numim HelloWorld.sol

    (iată contractul pe care îl vom folosi din nou) 

    soliditatea pragmatică >= 0,5,8 <0,7,0; contract HelloWorld {șir mesaj public; constructor (șir de memorie initMessage) public {mesaj = initMessage; } actualizare funcție (șir de memorie newMessage) public {message = newMessage; }}

    Acum putem continua și adăuga contractul pe teren. (Verificați-l mai jos) 

    Captură de ecran 2020 08 31 la 9 47 48 AM

    Acum, să verificăm meniul din stânga care solicită versiunea de compilator selectată.

    Compilator

    Rețineți că, în cadrul contractului nostru, am declarat gama noastră de compilatoare.

    Amintiți-vă că cuvântul cheie pragma este utilizat pentru a activa anumite caracteristici sau verificări ale compilatorului. 

    Deci, putem seta compilatorul la 0.6.0, care se încadrează între intervalul nostru furnizat (vezi suflare) 

    Captură de ecran 2020 09 08 la 8 44 41 AM

    Contractul nostru ar trebui să fie compilat automat, dacă nu, continuați și faceți clic pe Compilare HelloWorld.sol

    În continuare, vom configura mediul nostru pentru a ne implementa contractul! 

    Implementați și executați tranzacții

    Mediu inconjurator 

    Veți observa câteva opțiuni diferite atunci când vă selectați mediul:

    VM JavaScript: Toate tranzacțiile vor fi executate într-un sandbox blockchain din browser. Aceasta înseamnă că nimic nu va fi persistat atunci când reîncărcați pagina. JsVM este propriul blockchain și la fiecare reîncărcare va începe un blockchain nou, cel vechi nu va fi salvat.

    Furnizor injectat: Remix se va conecta la un furnizor web3 injectat. Metamask este un exemplu de furnizor care injectează web3.

    Furnizor Web3: Remix se va conecta la un nod la distanță. Va trebui să furnizați adresa URL furnizorului selectat: geth, paritate sau orice client Ethereum.

    În acest exemplu vom folosi: Injected Web3

    Vom folosi portofelul MetaMask și ne vom asigura că suntem conectați la rețeaua noastră de testare Rinkeby 

    Putem vedea în partea stângă că suntem conectați la Rinkeby și, de asemenea, putem vedea adresa contului nostru conectat! 

    Captură de ecran 2020 09 08 la 8 30 29 AM

    După ce avem totul setat, să mergem mai departe și să ne implementăm contractul!

    Captură de ecran 2020 09 08 la 8 57 35 AM

    &# 127881; Am făcut-o! &# 127881; 

    Verificați terminalul furnizat și puteți vedea confirmarea

    Captură de ecran 2020 09 08 la 8 58 11 AM

    Acum avem posibilitatea de a vizualiza contractul nostru desfășurat, putem actualiza mesajul nostru (trebuie să semnăm și să plătim taxa pentru acest lucru, deoarece actualizăm statul)

    Odată ce avem confirmarea, putem vedea că mesajul nostru s-a actualizat!

    Captură de ecran 2020 09 08 la 9 18 54 AM

    &# 129395; Foarte bine! &# 129395; 

    Am luat contractul cu care am început inițial la nivel local și l-am implementat pe Remix pentru a avea o reprezentare vizuală a interacțiunii contractului. Acesta este un flux sănătos pentru dezvoltatori, pe măsură ce încep să construiască în acest spațiu. Remix-ul este un instrument incredibil care ar trebui folosit des. La Pasul 3 vom face un pas mai departe și vom lega toate informațiile pe care le-am învățat în Pașii 1 & 2 și legați Truffle + Infura + React împreună! 

      Onboarding pentru dezvoltatori: Pasul 1Onboarding pentru dezvoltatori Pasul 1

      Onboarding pentru dezvoltatori: Pasul 1

      Onboarding pentru dezvoltatori: Pasul 3Onboarding pentru dezvoltatori Pasul 3

      Onboarding pentru dezvoltatori: Pasul 3

      Orientare Ethereum de 10 minuteOrientare Ethereum de 10 minute

      Orientare Ethereum de 10 minute

    Mike Owergreen Administrator
    Sorry! The Author has not filled his profile.
    follow me