Paziņojums: Šis ir Xunlei Company rakstītais dokuments "Xunlei Global Blockchain Application Competition Development Guide", kāpēc izmantot Xunlei Company rakstīto dokumentu kā blokķēdes izstrādes rokasgrāmatu?
Pērkons faktiski ir privāta ķēde, kas izveidota ar Ethereum viedajiem līgumiem, tehnoloģija ir ļoti nobriedusi, un tai ir padziļināti pētījumi par blokķēdes tehnoloģiju, kas ir nozīmīga mūsu blokķēdes attīstībā.
Kā saka, "izdarīt secinājumus no viena piemēra", mēs varam izstrādāt citas blokķēdes lietojumprogrammas, izlasot blokķēdes izstrādes rokasgrāmatas dokumentu, ko rakstījis Xunlei, pateicoties Xunlei.
Dokumentā teikts:
1/16 Thunder globālā blokķēdes lietojumprogrammu konkursa izstrādes rokasgrāmata Līguma izstrāde līnijas ieteikumā 1. Pirms viedo līgumu rakstīšanas jums ir jābūt zināmai izpratnei par blokķēdes pamatiem (pielikumā: Ethereum pārskats). 2. Apgūstiet soliditātes valodu (solidity API). 3. Iemācieties izmantot trifeļu ietvaru kombinācijā ar stabilitātes mācīšanos. Izmantojiet trifeles attīstīt lokāli Izpildiet līgumus blokķēdes vidē. 4. Apgūstiet un izmantojiet zeppelin-solidty (standartizētu līgumu sistēmu, kas veltīta drošībai) un dizaina integrāciju Līguma režīms, atdaliet datus un loģiskos līgumus, kontrolējiet atļauju drošību un apsveriet jaunināšanas loģiku. 5. Iemācieties mijiedarboties ar līgumiem, izmantojot web3.js. Izmantojiet Metamask spraudni un tīmekļa pakalpojumu ar blokķēdi Mijiedarbība. 6. Foruma jautājumi un atbildes: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Visas problēmas, ar kurām jūs saskaraties, var tikt atgrieztas šajā forumā.) Mēs Jums atbildēsim 3 darba dienu laikā) Pamatjēdzieni Blokķēde Blockchain ir decentralizēta sadalīta skaitļošanas sistēma, kuras galvenā iezīme ir pastāvīga datu nemainīgums, To nevar viltot, un tam ir augsta atklātības, pārredzamības un uzticības pakāpe. Galvenās tehnoloģijas ietver Bizantijas kļūdu tolerantu vienprātības algoritmu (PBFT), šifrēšanas tehnoloģija, P2P tehnoloģija utt. Darījums Blokķēdi var saprast kā globāli kopīgu darījumu datu bāzes sistēmu. Jebkura programmatūra ar atļauju to var lasīt Ņemiet datus no blokķēdes tīkla. Ja ir nepieciešams mainīt datus bloku tīklā, ir jāuzsāk sega Blokmezgli pieņem pieprasījumus, kurus sistēmā kopā sauc par darījumiem. Darījumi ir darījumu un tiek iesniegti blokķēdē, vai nu ne visi, vai visi izpildīti. Tirdzniecības vadītājs Pēc rindas pabeigšanas tā tiek neatgriezeniski saglabāta blokķēdē un to nevar mainīt vai izpildīt vēlreiz. Darījumus iniciē un paraksta konts sistēmā, un, izmantojot kriptogrāfiju, darījumus var turēt tikai ar privāto atslēgu 2/16 Kāds to ierosina, citi nevar modificēt un viltot. Tas nodrošina darījuma autentiskumu un drošību. Konts Blokķēdes sistēmā ir divu veidu konti, viens ir ārējs, bet otrs ir līguma konts. Ārējais konts pieder Jūsu unikālas publiskās un privātās atslēgas, un jūsu kontu kontrolē šis atslēgu pāris. Nākotnes līgumu kontiem ir savs kods, un kontu veido Pašu koda kontrole. Konts tiek identificēts pēc adreses, un adreses garums ir vienāds, un starp abiem kontu veidiem nav atšķirības. Ārējā konta adresi nodrošina Tiek ģenerēta publiskā atslēga, un līguma adrese izmanto adresi, no kuras tika izveidots līguma konts, un transakciju skaitu, kas izveidoja līguma kontu (nonce) tiek ražots. Līgumi tiek izvietoti pēc oficiālās adreses, un parastie konti nevar tieši publicēt līgumus. Lietotāja kombinācija Tas ir oficiāli jāpārskata un jāizlaiž Xunlei. Sistēmā nav atšķirības starp abiem kontu veidiem. Katram kontam sistēmā ir 256 biti Atslēgas-vērtības krātuves struktūru līdz 256 bitiem sauc par krātuvi. Katram kontam ir bilance, ko sauc par Atlikumu WEI var mainīt, nosūtot darījumu ar skaitlisku vērtību uz kontu. Līgums Līgums ir blokķēdes konts, kurā tiek glabāts kods, un līguma izsaukums tiek veikts, nosūtot darījumus uz šo kontu. Kad Iepriekšējā populārākā līgumu programmēšanas valoda bija Solidity. Pašlaik konkurss atbalsta tikai līgumu iesniegšanu Solidity valodā. Līgums ir sadalīts divās daļās, datu glabāšana un funkcija, dati glabā līguma stāvokli, un funkcija ir līgums Ārējais interfeiss realizē datu vaicājumu un stāvokļa modifikāciju, izsaucot funkcijas. Uzrakstiet līgumu, izmantojot programmēšanas valodu, un pēc kompilēšanas iegūstiet EVM baitu kodu. Nosūtot darījumu uz līguma kontu, reāls Pašreizējais līguma izsaukums. Gāze Gāze ir blokķēdes maksājumu vienība, un, izveidojot darījumu, tiks norādīts noteikts gāzes daudzums. Kungs Ja tas ir ierobežot aprēķina summu par darījumu un maksāt maksu par darījuma izpildi. Darījuma izpildes laikā gāze To patērēs EVM noteiktais noteikums. Gāzes cena ir darījuma veidotāja norādītā vērtība un darījuma izpildei nepieciešamo maksu skaits Summa ir Gas_Price*Gāze. Darījums beidzas Ja ir atlikusi gāze, atlikusī daļa tiek atgriezta satura veidotāja ieteikumam lietotājiem. Ja gāze ir nepietiekama, darījuma izpilde neizdosies, un darījums nenovērsīs plūdu uzbrukumus sistēmas drošībai Apstrādes maksa netiek atgriezta. Mazākā gāzes cenas vienība ir wei, 10^18 wei = 1 ķēdes grams. Stabilitāte 3/16 Solidity ir augsta līmeņa programmēšanas valoda, kas paredzēta viedajiem līgumiem, kas darbojas EVM (Ethereum). Virtual Machine)。 Valodas dizaina ieviešanu ietekmē C++/Python/JavaScript. Solidity ir spēcīgi ierakstīta valoda, kas atbalsta pārmantošanu, polimorfismu, saskarnes, abstrakciju, bibliotēkas, pielāgotus datu tipus un daudz ko citu Sekss. Solidity atbalsta montāžas instrukciju programmēšanu, un kods tiek kompilēts baitu kodā un darbojas EVM. Stabilitāte ir Vispopulārākā viedo līgumu izstrādes valoda ir arī valoda, ko iesaka un atbalsta Thunder Contract Platform. Piezīmes: 1. Ethereum virtuālā mašīna ir virtuālā vide Ethereum, kas nodrošina izpildlaika vidi viedajiem līgumiem Simulēta mašīna. Sacensību platforma ir saderīga ar EVM, taču tai jāatbilst oficiālās platformas lietošanas ierobežojumiem. 2. Kontu veidi ir sadalīti ārējos kontos (parasto tirdzniecības kontu adresēs) un nākotnes kontos. Līguma izveide Tas ir darījuma nosūtīšanas process uz galamērķa konta adresi 0. 3. Konkurss nosaka trifeļu (trifeļu v4.1.5 soliditāte v0.4.21) izmantošanu, lai izstrādātu inteliģentas kombinācijas Platforma pārbaudīs baitu kodu atbilstoši dalībnieka iesniegtā dokumenta pirmkodam. , Izstrādājiet līgumus ar trifelēm Viedo līgumu stabilitātes izstrādes ietvara trifele. Tas nodrošina pilnīgu izstrādes, atkļūdošanas un rediģēšanas komplektu Lokālo vides tulkošana, izvietošana un testēšana. Veidnes komandu var ātri izmantot izpakošana, pamatojoties uz dažām veidnēm Ģenerējiet atbilstošo līguma struktūru. Instalējiet trifeles npm i -g trifeles [root@opennode sandai]# trifeļu versija Trifeles v4.1.5 (kodols: 4.1.5) Soliditāte v0.4.21 (solc-js) Sākt 1. Inicializējiet līguma projektu ar trifeli 4/16 mkdir vienkārša uzglabāšana CD vienkāršā glabāšana trifeles init 2. Izveidojiet jaunu līguma failu: Līguma izveidei varat izmantot trifeles Varat arī izveidot jaunu failu tieši no SimpleStorage komandrindas līgums/SimpleStorage.sol SimpleStorage.sol pragma soliditāte ^0.4.21; līgums SimpleStorage { uint myVariable; funkciju kopa(uint x) public { myVariable = x;
} funkcija get() pastāvīga publiskā atgriešanās (uint) { atgriezt myVariable;
}
} 3. Pievienojiet migrācijas skriptus: varat izmantot trifeļu izveides migrāciju 2_deploy_contract Tiek pievienota komandrindas metode, un jūs varat arī tieši izveidot jaunu failu migrācijas/2_deploy_contract.js 2_deploy_contract.js; trifeļu migrācijas izpilde Rindu secība ir saistīta ar faila nosaukumu, tāpēc vairāki izvietošanas skripti ir jānosauc secībā var SimpleStorage = artefacts.require("Vienkārša glabāšana"); module.exports = funkcija (izvietotājs) { deployer.deploy(SimpleStorage); 5/16 }; 4. Palaidiet trifeļu kompilācijas līgumu, un kompilētais līgums atrodas būvēšanas mapē. par līgumu Izvietošanai ir nepieciešams atbilstošs json fails, kas satur baitu kodu, abiCode utt 5. Rediģējiet truffle.js, lai iestatītu trifeļu izvietošanas līgumu un RPC savienojumu, lai mijiedarbotos ar blokķēdi. [root@localhost opennode]# vi truffle.js modulis.eksports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Ieslēdziet Truffle noklusējuma blokķēdes vidi konsolē. trifeļu attīstība Trifeļu izstrāde sākās plkst.
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 Privātās atslēgas: (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 medus bagāts gluds drupināts salds kārums ⚠ Svarīgi ⚠: Šī mnemonika tika izveidota jūs ar trifeli. Tas nav droši. Pārliecinieties, ka to neizmantojat ražošanā 7/16 blokķēdes, pretējā gadījumā jūs riskējat zaudēt līdzekļus. trifele(attīstīt)> Tas nodrošina vietējo blokķēdes vidi, lai Truffle varētu izpildīt līgumus, pēc noklusējuma ģenerējot 10 kontus, no kuriem katrs tiek ģenerēts Sākotnējais konta atlikums ir 100 ēteri. Varat arī izmantot Ganache nodrošināto grafisko interfeisu , jums ir jāmodificē ports, kuram ir pievienota konfigurācija. 7. Izpildiet trifeļu migrācijas portu izvietošanas līgumu jaunā konsolē (vai trifelēs izstrādāt konsoli, lai veiktu migrāciju). 8. Pārbaudiet līguma kodu ar trifeļu izstrādi. SimpleStorage.deployed().then(function(instance ){atgriezties instance.get.call(); }).then(funkcija(vērtība) {atgriezt vērtību.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){atgriezt instance.set(100); }); Izvades transakciju informācija SimpleStorage.deployed().then(function(instance ){atgriezties instance.get.call(); }).then(funkcija(vērtība) {atgriezt vērtību.toNumber()}); // 100 9. Pārbaudiet līgumu ar trifeļu testu Izmantojiet trifeles izveidot testu SimpleStorage, lai izveidotu jaunu vai Izveidojiet jaunu failu testu / SimpleStorage.test.js tieši. const SimpleStorage = artefacts.require('Vienkārša glabāšana'); contract('SimpleStorage', function(accounts) { 8/16 it("vajadzētu apgalvot patiesu", funkcija(gatavs)
{ var simpleStorage = SimpleStorage.deployed(); var instance; simpleStorage.then(res => { instance = res; atgriezt instance.get() }).then(vērtība => { assert.equal('0', value.toNumber(), 'nav vienāds ar 0') }).then(() => { instance.set(100) }).then(() => { atgriezt instance.get() }).then(vērtība => { assert.equal('100', value.toNumber(), 'nav vienāds ar 100') }) gatavs(); }); }); Jaunajā konsolē ievadiet trifeļu testu ./test/SimpleStorage.test.js. 10. Testa līgumi ar remiksu Ievietojiet līgumus, kas izstrādāti, izmantojot trifeles remiksā, lai ātri modificētu Piedāvātā līguma izvietošana un atsaukšana. Remix nodrošina kompilācijas izpildlaika vidi līgumiem, un to var kontrolēt ar līgumu Tabulā var redzēt detalizētu informāciju par katru līguma darījumu, piemēram, ievades un izejas parametrus, parakstītās metodes datus, darījumu jaucējkods un cita informācija. Atbalstiet atkļūdošanu. 1. Izmantojiet kompilācijas informāciju, lai skatītu līguma apkopošanas informāciju. Ieskaitot baitu kodu, abi un izmantojot web3.js ātru Drip Ah metodes ieviešanu. 9/16 2. Izmantojiet izpildi, lai izveidotu līgumu, un konsole var apskatīt darījumu, kas izveidoja līgumu. Izmantojiet Truffle Unbox, lai izveidotu interaktīvas līgumu lietotnes Iepriekš minētās darbības izveido līguma vidi, kuru var kompilēt, izvietot un atkļūdot, izmantojot pamata trifeļu init. Zemāk Izveidojiet jaunu projektu, izmantojot Truffle Unbox, kas nodrošina mums trifeļu projekta veidni Dažas līguma lietojumprogrammas mijiedarbības vides atkarības. Jūs varat apskatīt oficiālos piedāvājumus trifeļu kastēs Veidņu lodziņi. Tālāk ir reakcijas veidne. 1. Jauns projekts truf-react mkdir truf-react 10/16 CD truf-react trifeļu izpakošana react Izpakošanas process lejupielādē ekstrakcijas veidni un veic tādas darbības kā npm instalēšana. 2. Konfigurējiet projekta truffle.js modulis.eksports = { Skatīt <http://truffleframework.com/docs/advanced/confi gurācija> , lai pielāgotu savu trifeli Konfigurācija!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match Jebkurš tīkla ID
}
} }; 3. Sāciet trifeļu attīstību 4. Grozījumi SRC/App.js import React, { Component } no 'react' importēt SimpleStorageContract no '.. /būve/līgumi/SimpleStorage.json" importēt getWeb3 no './utils/getWeb3' import './css/oswald.css' import './css/open-sans.css' import './css/pure-min.css' 11/16 import './App.css' const līgums = require('trifeļu līgums') const simpleStorage = līgums (SimpleStorageContract) klase Lietotne paplašina komponentu { konstruktors (rekvizīti) { super (rekvizīti) šis.stāvoklis = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(šis) this.setHandle = this.setHandle.bind(šis)
} componentWillMount() { Iegūstiet tīkla pakalpojumu sniedzēju un web3 piemērs. Vairāk skatiet utils/getWeb3 informācija. getWeb3 .then(rezultāti => { this.setState({
web3: rezultāti.web3 }) Informatīvais līgums Kad Web3 tika nodrošināts. 12/16 this.instantiateContract() }) .catch(() => { console.log('Kļūda Web3 atrašana.') })
} instantiateContract() {
/* * VIEDĀ LĪGUMA PIEMĒRS
* * Parasti šīs funkcijas jāizsauc saistībā ar * Valsts pārvaldes bibliotēka, bet ērtības labad es tos esmu ievietojis šeit. */ this.simpleStorageSet(5)
} changeValueHandle(notikums) { this.setState({
inputValue: Number(notikums.mērķis.vērtība) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tNodrošinātājs) Paziņojot to par vēlāku laiku 13/16 mēs varam ķēdēt funkcijas vietnē SimpleStorage. var simpleStorageInstance Iegūstiet kontus. this.state.web3.eth.getAccounts((kļūda, konti) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instance this.setState({
address: instance.address }) Veikali a dotā vērtība, 5 pēc noklusējuma. Atgriešanās simpleStorageInstance.set(x, {no: konti[0]}) }).then((rezultāts) => { Iegūstiet vērtību no līguma, lai pierādītu, ka tas darbojās. Atgriešanās simpleStorageInstance.get.call(konti[0]) }).then((rezultāts) => { Atjaunināšanas stāvoklis ar rezultātu. Atgriešanās this.setState({ storageValue: result.c[0] }) }) })
} render() { atgriešanās ( <div className="App"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Trifeles Kaste</a> </nav> <galvenās className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Labi iet!</h1> <p>Jūsu trifeļu kaste ir uzstādīta un gatava.</p> <h2>Viedā līguma piemērs</h2> <p>Ja jūsu līgumi ir apkopoti un migrēti veiksmīgi, zemāk tiks parādīta saglabātā vērtība 5 (pēc noklusējuma).</p> <p>Mēģiniet mainīt tiešsaistē saglabāto vērtību <strong> 59</strong> no App.js.</p> <p>Saglabātā vērtība ir: {this.state.storageValue}</p> <p>izvietotā līguma adrese: {šī.valsts.adrese}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <poga onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} eksportēt noklusējuma lietotni Pievienots līgumu kopas metodes izsaukums. Un parādiet līguma adresi. 5. Atveriet jaunu konsoli un palaidiet npm palaišanas sākumu 6. Atveriet http://lcoalhost:3000 savā pārlūkprogrammā, lai redzētu līguma rezultātus. 7. Iestatiet glabātā līguma vērtību, izmantojot komplekta un ievades lodziņus. 8. Ievadiet trufle izstrādi
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Tiek iegūta tipa BigNUmber atgrieztā vērtība un iestatīta c masīva vērtība storedData. Izmantojiet pārlūkprogrammas spraudni Metamask, lai mijiedarbotos ar blokķēdi Atsauces http://truffleframework.com/tutorials/pet-shop Dalībnieki iesniedz dokumentus Konkursā ir norādīta Truffle izmantošana viedo līgumu izstrādē, un Truffle versija v4.1.5 atbilst solcjs versijai v0.4.21. Izstrādātājiem ir jāiesniedz Truffle projekta zip pakete un saistītie projekta ievada dokumenti, kas ietver vismaz Sekojošie: 16/16 1. Trifeļu projekta pamata faila struktūra: būvniecības līgumu migrācijas pārbaude package.json truffle.js truffle-config.js README.md // Inženiertehniskās dokumentācijas apraksts Nav nepieciešama node_modules 2. Nepieciešamība sniegt PPT vai PDF paskaidrojumu par visu projekta produktu, ieskaitot produkta fona ievadu, produkta nozīmi, Lietotnes lejupielādes adrese (pēc izvēles), produkta lietošanas procesa ievads. Turpmākie trešo pušu izstrādātāji var ieviest līgumu lietojumprogrammas un ķēdes kabatas saskaņā ar gaidāmo ThunderChain vadlīniju dokumentu Mijiedarbība. Dokumentācija un rīki soliditātes API trifeļu dokumentācija Ganache nodrošina grafisko interfeisu vietējai blokķēdes videi Zeppelin-Solidty ir apņēmies nodrošināt drošu un standartizētu līgumu sistēmu MetaMask nodrošina pārlūkprogrammas spraudņus pārlūkprogrammām ar blokķēdes vidi, izmantojot RPC savienojumus web3.js Ethereum iekapsulēts JS mijiedarbībai ar blokķēdi Visbeidzot, pdf dokumenta lejupielāde:
Dev_Guide_zh.pdf
(373.55 KB, Lejupielādes skaits: 6)
|