Pareiškimas: Toliau pateikiamas "Xunlei Company" parašytas dokumentas "Xunlei Global Blockchain Application Competition Development Guide", kodėl verta naudoti "Xunlei Company" parašytą dokumentą kaip blokų grandinės kūrimo vadovą?
"Thunder" iš tikrųjų yra privati grandinė, sukurta naudojant Ethereum išmaniąsias sutartis, technologija buvo labai brandi ir joje atlikti nuodugnūs blokų grandinės technologijos tyrimai, kurie turi pagrindinę reikšmę mūsų blokų grandinės plėtrai.
Kaip sakoma, "darykite išvadas iš vieno pavyzdžio", galime sukurti kitas blokų grandinės programas perskaitę "Xunlei" parašytą blokų grandinės kūrimo vadovo dokumentą.
Dokumente rašoma:
1/16 "Thunder Global Blockchain" programų konkurso kūrimo vadovas Rekomendacija dėl sutarties išplėtimo į liniją 1. Prieš rašydami išmaniąsias sutartis, turite turėti tam tikrą supratimą apie blokų grandinės pagrindus (pridedama: Ethereum apžvalga). 2. Išmokite solidumo kalbą (solidity API). 3. Išmokite naudoti triufelių sistemą kartu su solidumo mokymusi. Naudokite triufelį vystytis vietoje Vykdykite sutartis blokų grandinės aplinkoje. 4. Išmokite ir naudokite zeppelin-solidty (standartizuotą sutarčių sistemą, skirtą saugumui) ir dizaino integraciją Sutarties režimas, atskirkite duomenis ir logines sutartis, valdykite leidimų saugą ir apsvarstykite atnaujinimo logiką. 5. Išmokite bendrauti su sutartimis naudodami web3.js. Naudokite "Metamask" papildinį ir žiniatinklio paslaugą su blokų grandine Sąveika. 6. Forumo klausimai ir atsakymai: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Visos problemos, su kuriomis susiduriate, gali būti atšauktos šiame forume.) Mes jums atsakysime per 3 darbo dienas) Pagrindinės sąvokos Blokų grandinė "Blockchain" yra decentralizuota paskirstyta skaičiavimo sistema, kurios pagrindinis bruožas yra nuolatinis duomenų nekintamumas, Ji negali būti suklastota, ji pasižymi dideliu atvirumu, skaidrumu ir pasitikėjimu. Pagrindinės technologijos apima Bizantijos gedimams atsparų konsensuso algoritmą (PBFT), šifravimo technologija, P2P technologija ir kt. Operacija Blokų grandinė gali būti suprantama kaip pasauliniu mastu bendra sandorių duomenų bazės sistema. Jį gali perskaityti bet kuri leidimą turinti programinė įranga Paimkite duomenis iš blokų grandinės tinklo. Kai reikia pakeisti duomenis blokiniame tinkle, reikia inicijuoti antklodę Yra užklausų, kurias priima blokiniai mazgai, kurie sistemoje bendrai vadinami sandoriais. Sandoriai yra transakciniai ir pateikiami į blokų grandinę, ne visi arba visi įvykdyti. Prekybos vadovas Užbaigus eilutę, ji visam laikui išsaugoma blokų grandinėje ir negali būti modifikuojama ar vykdoma dar kartą. Operacijas inicijuoja ir pasirašo sąskaita sistemoje, o kriptografijos būdu operacijos gali būti laikomos tik privačiu raktu 2/16 Kažkas tai inicijuoja, kiti negali modifikuoti ir suklastoti. Tai užtikrina operacijos autentiškumą ir saugumą. Sąskaita Blokų grandinės sistemoje yra dviejų tipų sąskaitos: viena yra išorinė, o kita yra sutarties sąskaita. Išorinė paskyra priklauso Jūsų unikalūs viešieji ir privatūs raktai, o jūsų paskyra valdoma šia raktų pora. Ateities sandorių sąskaitos turi savo kodą, o sąskaitą sudaro Nuosavas kodo valdymas. Sąskaita identifikuojama pagal adresą, o adreso ilgis yra vienodas, todėl tarp dviejų tipų sąskaitų nėra skirtumo. Išorinės sąskaitos adresą pateikia Sugeneruojamas viešasis raktas, o sutarties adresas naudoja adresą, iš kurio buvo sukurta sutarties sąskaita, ir operacijų, kurios sukūrė sutarties sąskaitą, skaičių (nonce). Sutartys diegiamos oficialiu adresu, o įprastos paskyros negali tiesiogiai skelbti sutarčių. Vartotojo derinys Jis turi būti oficialiai peržiūrėtas ir išleistas Xunlei. Sistemoje nėra skirtumo tarp dviejų tipų sąskaitų. Kiekviena paskyra turi 256 bitus sistemoje Rakto vertės saugojimo struktūra iki 256 bitų vadinama saugykla. Kiekviena sąskaita turi likutį, vadinamą Likutis WEI gali būti pakeistas siunčiant į sąskaitą skaitinės vertės operaciją. Sutartis Sutartis yra blokų grandinės sąskaita, kurioje saugomas kodas, o sutarties skambutis atliekamas siunčiant operacijas į šią sąskaitą. Kada Ankstesnė populiaresnė kontraktinio programavimo kalba buvo "Solidity". Šiuo metu konkursas palaiko tik sutarčių pateikimą "Solidity" kalba. Sutartis yra padalinta į dvi dalis: duomenų saugojimas ir funkcija, duomenys saugo sutarties būseną, o funkcija yra sutartis Išorinė sąsaja realizuoja duomenų užklausą ir būsenos modifikavimą iškviesdama funkcijas. Parašykite sutartį naudodami programavimo kalbą ir gaukite EVM baitų kodą po kompiliavimo. Siųsdami operaciją į sutarties sąskaitą, realios Dabartinės sutarties iškvietimas. Dujos Dujos yra blokų grandinės mokėjimo vienetas, o sukūrus sandorį bus nurodytas tam tikras dujų kiekis. Viešpats Jei jis turi apriboti sandorio skaičiavimo sumą ir sumokėti mokestį už sandorio vykdymą. Vykdant sandorį, dujos Jis bus sunaudotas pagal EVM nustatytą taisyklę. Dujų kaina yra sandorio sudarytojo nurodyta vertė ir sandoriui įvykdyti reikalingų mokesčių skaičius Kiekis yra Gas_Price*Dujos. Operacija baigiasi Jei lieka degalų, likusi dalis grąžinama kūrėjo pasiūlymui vartotojams. Jei dujų nepakanka, operacijos vykdymas nepavyks, o operacija nepadės išvengti potvynių atakų sistemos saugumui Tvarkymo mokestis negrąžinamas. Mažiausias dujų kainos vienetas yra wei, 10^18 wei = 1 grandinės gramas. Tvirtumas 3/16 "Solidity" yra aukšto lygio programavimo kalba, skirta išmaniosioms sutartims, veikianti EVM (Ethereum). Virtuali mašina)。 Kalbos dizaino įgyvendinimui įtakos turi C++/Python/JavaScript. "Solidity" yra stipriai įvesta kalba, palaikanti paveldėjimą, polimorfizmą, sąsajas, abstrakciją, bibliotekas, pasirinktinius duomenų tipus ir kt Seksas. "Solidity" palaiko surinkimo instrukcijų programavimą, o kodas kompiliuojamas į baitų kodą ir veikia EVM. Solidumas yra Populiariausia išmaniųjų sutarčių kūrimo kalba taip pat yra kalba, kurią rekomenduoja ir palaiko "Thunder Contract Platform". Pastabos: 1. Ethereum virtuali mašina yra virtuali Ethereum aplinka, suteikianti išmaniųjų sutarčių vykdymo aplinką Imituojama mašina. Varžybų platforma yra suderinama su EVM, tačiau ji turi atitikti oficialios platformos naudojimo apribojimus. 2. Sąskaitų tipai skirstomi į išorines sąskaitas (įprastus prekybos sąskaitų adresus) ir ateities sandorių sąskaitas. Sutarties kūrimas Tai operacijos siuntimo paskirties sąskaitos adresu 0 procesas. 3. Konkurse nurodomas triufelių naudojimas (triufelis v4.1.5, tvirtumas v0.4.21) intelektualiems deriniams kurti Platforma patikrins baitų kodą pagal dalyvio pateikto dokumento šaltinio kodą. , Sudarykite sutartis su triufeliais Išmaniųjų sutarčių solidumo kūrimo sistemos triufelis. Jame pateikiamas visas kūrimo, derinimo ir redagavimo rinkinys Vietinių aplinkų vertimas, diegimas ir testavimas. Galite greitai naudoti šablono komandą išpakuoti pagal kai kuriuos šablonus Sukurkite atitinkamą sutarties struktūrą. Įdiekite triufelį npm i -g triufelis [root@opennode sandai]# triufelių versija Triufelis v4.1.5 (branduolys: 4.1.5) Solidumas v0.4.21 (solc-js) Pradėti 1. Inicijuokite sutarties projektą su triufeliais 4/16 MKDIR paprastas saugojimas CD paprasta saugykla triufelis init 2. Sukurkite naują sutarties failą: Norėdami sukurti sutartį, galite naudoti triufelį Taip pat galite sukurti naują failą tiesiai iš "SimpleStorage" komandų eilutės sutartis/SimpleStorage.sol SimpleStorage.sol pragma solidumas ^0.4.21; sutartis SimpleStorage { uint myVariable; Function Set(uint X) public { myVariable = x;
} funkcija get() pastovus viešas grąžinimas (uint) { grąžinti myVariable;
}
} 3. Pridėkite perkėlimo scenarijus: galite naudoti triufelių kūrimo migraciją 2_deploy_contract Pridėtas komandinės eilutės metodas, taip pat galite tiesiogiai sukurti naują failą migracija / 2_deploy_contract.js 2_deploy_contract.js; triufelių migracijos vykdymas Eilučių tvarka yra susijusi su failo vardu, todėl reikia pavadinti kelis diegimo scenarijus var SimpleStorage = artifacts.require("Paprasta saugykla"); module.exports = funkcija (diegėjas) { deployer.deploy(SimpleStorage); 5/16 }; 4. Paleiskite triufelių kompiliavimo sutartį, o sukompiliuota sutartis yra kūrimo aplanke. vienai sutarčiai Yra atitinkamas json failas, kuriame yra baitų kodas, abiCode ir kt., reikalingas diegimui 5. Redaguokite truffle.js, kad nustatytumėte triufelių diegimo sutartį ir RPC ryšį, kad sąveikautumėte su blokų grandine. [root@localhost opennode]# vi truffle.js modulis.eksportas = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Konsolėje įjunkite numatytąją "Truffle" blokų grandinės aplinką. triufelių vystymasis "Truffle Develop" prasidėjo nuo
http://127.0.0.1:9545/
Accounts: (0) 0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0xf17f52151ebef6c7334fad080c5704d77216b732 (2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef (3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544 (4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2 (5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e (6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5 (7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5 (8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc (9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de 6/16 Privatūs raktai: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 AD91193C05875EF1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bd F89DE078917ABC63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362 DCAE9012B548B1E5
Mnemonic: candy maple cake sugar pudding cream Medaus turtingas švelnus trupinys saldus skanėstas ⚠ Svarbu ⚠ : Ši mnemonika buvo sukurta Tu pagal triufelį. Tai nėra saugu. Įsitikinkite, kad jo nenaudojate gamyboje 7/16 blokų grandinės, kitaip rizikuojate prarasti lėšas. triufelis (vystytis)> Tai suteikia vietinę blokų grandinės aplinką, kurioje "Truffle" gali vykdyti sutartis, pagal numatytuosius nustatymus sugeneruojant 10 paskyrų, kurių kiekviena yra sugeneruota Pradinis sąskaitos likutis yra 100 eterių. Taip pat galite naudoti "Ganache" teikiamą grafinę sąsają , turite modifikuoti prievadą, prie kurio prijungta konfigūracija. 7. Vykdykite triufelių migracijos prievado diegimo sutartį naujoje konsolėje (arba triufelyje) sukurti konsolę atlikti migruoti). 8. Išbandykite sutarties kodą su triufelių kūrimu. SimpleStorage.deployed().then(function(instance ){grįžti instance.get.call(); }).then(funkcija(reikšmė) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){grąžinti instance.set(100); }); Išvesties operacijos informacija SimpleStorage.deployed().then(function(instance ){grįžti instance.get.call(); }).then(funkcija(reikšmė) {return value.toNumber()}); // 100 9. Išbandykite sutartį su triufelių testu Naudokite triufelių kūrimo testą SimpleStorage, kad sukurtumėte naują arba Sukurkite naują failo testavimą / SimpleStorage.test.js tiesiogiai. const SimpleStorage = artifacts.require('Paprasta saugykla'); contract('SimpleStorage', function(accounts) { 8/16 it("turėtų tvirtinti teisingumą", funkcija(atlikta)
{ var simpleStorage = SimpleStorage.deployed(); var instance; simpleStorage.then(res => { egzempliorius = res; grąžinti instance.get() }).then(reikšmė => { assert.equal('0', value.toNumber(), 'nelygu 0') }).then(() => { egzempliorius.rinkinys(100) }).then(() => { grąžinti instance.get() }).then(reikšmė => { assert.equal('100', value.toNumber(), 'nelygu 100') }) atlikta(); }); }); Naujoje konsolėje įveskite triufelių testą ./test/SimpleStorage.test.js. 10. Bandomosios sutartys su remiksu Įdėkite sutartis, sukurtas naudojant triufelį remikse, kad greitai pakeistumėte Siūlomos sutarties diegimas ir taikymas. "Remix" suteikia kompiliavimo vykdymo aplinką sutartims ir gali būti valdoma pagal sutartį Lentelėje galima matyti išsamią informaciją apie kiekvieną sutarties sandorį, pvz., įvesties ir išvesties parametrus, pasirašyto metodo duomenis, operacijų maiša ir kita informacija. Palaikykite derinimą. 1. Naudokite kompiliavimo informaciją, kad pamatytumėte išsamią sutarties sudarymo informaciją. Įskaitant baitų kodą, abi ir naudojant web3.js greitą lašelinio Ah metodo diegimą. 9/16 2. Naudokite vykdyti, kad sukurtumėte sutartį, ir konsolė galės peržiūrėti operaciją, kuria buvo sukurta sutartis. Naudokite "Truffle Unbox" interaktyvioms sutarčių programoms kurti Aukščiau nurodyti veiksmai sukuria sutarties aplinką, kurią galima kompiliuoti, įdiegti ir derinti naudojant pagrindinį triufelių init. Žemiau Sukurkite naują projektą naudodami "Truffle Unbox", kuriame pateikiamas triufelių projekto šablonas Kai kurios sutarties programos sąveikos aplinkos priklausomybės. Oficialius pasiūlymus galite peržiūrėti "Truffle Boxes" Šablonų dėžutės. Toliau pateikiamas react šablonas. 1. Naujas projektas truf-react MKDIR TRUF-React 10/16 CD truf-react triufelių išpakavimas reaguoti Išpakavimo procesas atsisiunčia ištraukimo šabloną ir atlieka tokias operacijas kaip npm diegimas. 2. Sukonfigūruokite projekto truffle.js modulis.eksportas = { Žr. <http://truffleframework.com/docs/advanced/confi guracija> tinkinti savo triufelį Konfigūracija!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Rungtynės Bet koks tinklo ID
}
} }; 3. Pradėkite triufelių vystymąsi 4. SRK/App.js pakeitimas import React, { Component } iš 'react' importuoti SimpleStorageContract iš '.. /build/contracts/SimpleStorage.json" importuoti getWeb3 iš "./utils/getWeb3" importuoti "./css/oswald.css" importuoti "./css/open-sans.css" importuoti "./css/pure-min.css" 11/16 importuoti "./App.css" const sutartis = require('triufelio sutartis') const simpleStorage = sutartis (SimpleStorageContract) klasė Programa išplečia komponentą { konstruktorius (rekvizitai) { super (rekvizitai) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(šis) this.setHandle = this.setHandle.bind(šis)
} componentWillMount() { Gaukite tinklo teikėją ir web3 pavyzdys. Daugiau informacijos rasite utils/getWeb3 informacija. getWeb3 .then(rezultatai => { this.setState({
web3: rezultatai.web3 }) Momentinė sutartis Kai Web3 pateikė. 12/16 this.instantiateContract() }) .catch(() => { console.log('Klaida rasti web3.") })
} instantiateContract() {
/* * IŠMANIOSIOS SUTARTIES PAVYZDYS
* * Paprastai šios funkcijos turi būti kviečiami atsižvelgiant į * Valstybės valdymo biblioteka, bet patogumui juos įdėjau čia. */ šis.paprastas saugojimo rinkinys(5)
} changeValueHandle(įvykis) { this.setState({
inputValue: Number(event.target.value) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tTeikėjas) Paskelbti tai vėlesniam laikui 13/16 galime sujungti funkcijas "SimpleStorage". var simpleStorageInstance Gaukite paskyras. this.state.web3.eth.getAccounts((klaida, sąskaitos) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = egzempliorius this.setState({
address: instance.address }) Parduotuvės nurodytą reikšmę, 5 pagal numatytuosius nustatymus. grįžti simpleStorageInstance.set(x, {nuo: sąskaitos[0]}) }).then((rezultatas) => { Gaukite vertę iš sutarties, kad įrodytų, kad jis veikė. grįžti simpleStorageInstance.get.call(paskyros[0]) }).then((rezultatas) => { Atnaujinti būseną su rezultatu. grįžti this.setState({ storageValue: result.c[0] }) }) })
} render() { grąžinti ( <div className="Programa"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Triufelis Dėžutė</a> </nav> < pagrindinis className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Gera eiti!</h1> <p>Jūsų triufelių dėžutė yra sumontuota ir paruošta.</p> <h2>Išmaniosios sutarties pavyzdys</h2> <p>Jei jūsų sutartys buvo sudarytos ir perkeltos sėkmingai, žemiau bus rodoma išsaugota reikšmė 5 (pagal numatytuosius nustatymus).</p> <p>Pabandykite pakeisti eilutėje saugomą reikšmę <strong> 59</strong> iš App.js.</p> <p>Išsaugota reikšmė yra: {this.state.storageValue}</p> <p>Įdiegtos sutarties adresas: {this.state.address}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> < mygtukąClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} eksportuoti numatytąją programą Pridėtas sutarčių rinkinio metodo iškvietimas. Ir parodykite sutarties adresą. 5. Atidarykite naują konsolę ir paleiskite npm run start 6. Atidarykite http://lcoalhost:3000 savo naršyklėje, kad pamatytumėte sutarties rezultatus. 7. Nustatykite saugomos sutarties vertę naudodami rinkinio ir įvesties laukelius. 8. Įveskite trufle plėtoti
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Gaunama BigNUmber tipo grąžinama reikšmė ir nustatoma c masyvo reikšmė saugomi duomenys. Norėdami sąveikauti su blokų grandine, naudokite naršyklės papildinį Metamask Nuoroda http://truffleframework.com/tutorials/pet-shop Dalyviai pateikia dokumentus Konkurse nurodoma, kad "Truffle" bus naudojamas kuriant išmaniąsias sutartis, o "Truffle" versija v4.1.5 atitinka solcjs versiją v0.4.21. Kūrėjai turi pateikti "Truffle" projekto zip paketą ir susijusius projekto įvedimo dokumentus, kuriuose yra bent Šie dalykai: 16/16 1. Pagrindinė triufelių projekto failo struktūra: sutarčių perkėlimo testas package.json truffle.js truffle-config.js README.md // Inžinerinės dokumentacijos aprašymas Nereikia node_modules 2. Poreikis pateikti PPT arba PDF paaiškinimą apie visą projekto produktą, įskaitant produkto fono pristatymą, produkto reikšmę, Programėlės atsisiuntimo adresas (pasirinktinai), produkto naudojimo proceso pristatymas. Vėlesni trečiųjų šalių kūrėjai gali įdiegti sutartines programas ir grandinės kišenes pagal būsimą "ThunderChain" gairių dokumentą Sąveika. Dokumentacija ir įrankiai solidumo API triufelių dokumentacija "Ganache" pateikia grafinę sąsają vietinei blokų grandinės aplinkai "Zeppelin-Solidty" yra įsipareigojusi užtikrinti saugią ir standartizuotą sutarčių sistemą "MetaMask" teikia naršyklės papildinius naršyklėms su blokų grandinės aplinka per RPC ryšius web3.js Ethereum kapsuliuotą JS, skirtą sąveikai su blokų grandine Galiausiai, pdf dokumento atsisiuntimas:
Dev_Guide_zh.pdf
(373.55 KB, Atsisiuntimų skaičius: 6)
|