Avaldus: Järgmine on Xunlei Company poolt kirjutatud "Xunlei Global Blockchain Application Competition Development Guide" dokument, miks kasutada Xunlei Company poolt kirjutatud dokumenti plokiahela arendusjuhendina?
Thunder on tegelikult privaatne kett, mis on ehitatud Ethereumi nutilepingutest, tehnoloogia on olnud väga küps ning sellel on põhjalik uurimistöö plokiahela tehnoloogia kohta, mis on meie plokiahela arenduses suunava tähtsusega.
Nagu öeldakse, "tee järeldusi ühest näitest", saame arendada teisi plokiahela rakendusi, lugedes Xunlei kirjutatud plokiahela arendusjuhendi dokumenti, tänu Xunleile.
Dokumendis seisab:
1/16 Thunder Global plokiahela rakenduste võistluse arendusjuhend Lepingu arendamine liinisoovituseks 1. Enne nutilepingute kirjutamist pead omama teatud arusaamist plokiahela põhialustest (lisatud: Ethereum ülevaade). 2. Õpi solidity keelt (solidity API). 3. Õpi kasutama trühvliraamistikku koos tahkusõppega. Kasuta trühvlit kohapeal Käivita lepinguid plokiahela keskkonnas. 4. Õpi ja kasuta zeppelin-solidty't (standardiseeritud lepinguraamistik, mis on pühendatud turvalisusele) ning disaini integratsiooni Lepingurežiim, eraldi andme- ja loogilised lepingud, kontrolli õiguste turvalisust ja kaalu uuendusloogikat. 5. Õpi lepingutega suhtlema, kasutades web3.js. Kasuta Metamaski pluginat ja veebiteenust plokiahelaga Interaktsioon. 6. Foorumi küsimused ja vastused: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Kõik probleemid, millega kokku puutute, saab selles foorumis tagasi pöörduda.) Vastame sulle 3 tööpäeva jooksul) Põhimõisted Plokiahel Plokiahel on detsentraliseeritud hajutatud arvutussüsteem, mille peamine omadus on andmete püsiv muutumatus, Seda ei saa võltsida ning see on kõrge avatuse, läbipaistvuse ja usalduse tase. Põhitehnoloogiate hulka kuuluvad Bütsantsi rikketaluva konsensuse algoritm (PBFT), krüpteerimistehnoloogia, P2P tehnoloogia jne. Tehing Plokiahelat võib mõista kui ülemaailmselt jagatud tehingute andmebaasisüsteemi. Iga tarkvara, kellel on luba, saab seda lugeda Võta andmed plokiahela võrgust. Kui plokivõrgus on vaja andmeid muuta, tuleb algatada tekk On taotlusi, mida aktsepteerivad plokisõlmed, mida süsteemis nimetatakse ühiselt tehinguteks. Tehingud on tehingulised ja esitatakse plokiahelasse, kas mitte kõik või kõik täidetakse. Kaubandusjuht Pärast rea lõpetamist salvestatakse see püsivalt plokiahelasse ja seda ei saa muuta ega uuesti käivitada. Tehingud algatatakse ja allkirjastatakse süsteemi konto poolt ning krüptograafia kaudu saab tehinguid hoida ainult privaatvõtmega 2/16 Keegi algatab selle, teised ei saa muuta ega sepistada. See tagab tehingu autentsuse ja turvalisuse. Konto Plokiahela süsteemis on kahte tüüpi kontosid: üks on väline ja teine lepingukonto. Väline konto omanik Sinu unikaalsed avalikud ja privaatvõtmed ning sinu kontot juhib see võtmepaar. Futuurikontodel on oma kood ja konto on loodud Oma koodikontroll. Konto identifitseeritakse aadressi järgi, aadressi pikkus on sama ja kahe konto tüübi vahel ei ole vahet. Välise konto aadress on esitatud Luuakse avalik võti ning lepingu aadress kasutab aadressi, kust lepingukonto loodi, ning tehingute arvu, mis lepingukonto lõid (nonce) on toodetud. Lepingud paigutatakse ametliku aadressi kaudu ning tavalised kontod ei saa lepinguid otse avaldada. Kasutaja kombinatsioon Xunlei peab selle ametlikult üle vaatama ja avaldama. Süsteemis ei ole kahe kontotüübi vahel vahet. Igal kontol on süsteemis 256-bitti Võtme-väärtuse salvestusstruktuuri kuni 256 bitini nimetatakse salvestuseks. Igal kontol on saldo nimega WEI-s saab saldot muuta, saates kontole numbrilise väärtusega tehingu. Leping Leping on plokiahela konto, mis salvestab koodi, ning lepingukõne tehakse tehingute saatmisega sellele kontole. Kui Varasem populaarsem lepinguprogrammeerimise keel oli Solidity. Praegu toetab võistlus ainult lepingute esitamist Solidity keeles. Leping jaguneb kaheks osaks: andmete salvestamine ja funktsioon, andmed salvestavad lepingu oleku ning funktsioon on leping Väline liides teostab andmepäringute ja oleku muutmist, kutsudes funktsioone. Kirjuta leping programmeerimiskeele kaudu ja saa EVM baitkood pärast kompileerimist. Saates tehingu lepingukontole, reaalne Praegune lepingukõne. Gaas Gaas on plokiahela makseühik ning tehingu tegemisel määratakse kindel gaasikogus. Isand Kui see on piiratud tehingu arvutusmaht ja tasu maksmine tehingu täitmise eest. Tehingu täitmise ajal Seda tarbib EVM-i kehtestatud reegel. Gaasihind on tehingu looja poolt määratud väärtus ning tehingu teostamiseks vajalike tasude arv Kogus on Gas_Price*Gaas. Tehing lõpeb Kui gaasi jääb üle, tagastatakse ülejäänud osa looja ettepanekule kasutajad. Kui gaasist ei piisa, ebaõnnestub tehingu täitmine ning tehing ei takista üleujutusrünnakuid süsteemi turvalisuse huvides Käitlemistasu ei tagastata. Väikseim kütusehinna ühik on wei, 10^18 wei = 1 ahelgramm. Tahkus 3/16 Solidity on kõrgetasemeline programmeerimiskeel, mis on mõeldud nutilepingutele ja töötab EVM-il (Ethereum). Virtual Machine)。 Keele disaini rakendust mõjutavad C++/Python/JavaScript. Solidity on tugevalt tüübistatud keel, mis toetab pärilikkust, polümorfismi, liideseid, abstraktsiooni, teeke, kohandatud andmetüüpe ja palju muud Seks. Solidity toetab assembler-käskude programmeerimist ning kood kompileeritakse baitkoodiks ja töötab EVM-il. Tahkus on Kõige populaarsem nutilepingute arenduskeel on ka Thunder Contract Platform soovitatud ja toetatud keel. Märkused: 1. Ethereum Virtual Machine on virtuaalne keskkond Ethereumis, mis pakub nutilepingute jaoks käituskeskkonda Simuleeritud masin. Võistlusplatvorm on ühilduv EVM-iga, kuid peab vastama ametliku platvormi kasutuspiirangutele. 2. Konto tüübid jagunevad välisteks kontodeks (tavalised kauplemiskonto aadressid) ja futuurikontodeks. Loo leping See on protsess, mille käigus saadetakse tehing sihtkonto aadressile 0. 3. Võistlus nõuab trühvli kasutamist (trühvli v4.1.5 solidity v0.4.21) intelligentsete kombinatsioonide arendamiseks Platvorm kontrollib baitkoodi vastavalt osaleja esitatud dokumendi lähtekoodile. , Sõlmi lepinguid trühvliga Nutika lepingu kindluse arendamise raamistik trühvlis. See pakub täielikku arenduse, silumise ja redigeerimise komplekti Kohapealsete keskkondade tõlge, juurutamine ja testimine. Sa saad kasutada mallikäsku avamine kiiresti, tuginedes mõnele mallile Loo vastav lepingustruktuur. Paigalda Trühvli NPM I -G trühvli [root@opennode sandai]# trühvliversioon Truffle v4.1.5 (tuum: 4.1.5) Solidity v0.4.21 (solc-js) Alusta 1. Algata lepinguprojekt trühvliga 4/16 mkdir simple-storage CD lihtne salvestus Trühvli algus 2. Loo uus lepingufail: Lepingu loomiseks saad kasutada trühvlit Sa saad ka uue faili luua otse SimpleStorage'i käsurealt contract/SimpleStorage.sol SimpleStorage.sol pragma tugevus ^0.4.21; leping SimpleStorage { uint myVariable; funktsioonikomplekt(uint x) avalik { myVariable = x;
} funktsioon get() konstantne avalikud tulud (uint) { return myVariable;
}
} 3. Lisa migreerimisskriptid: Saad kasutada truffle create migration'i 2_deploy_contract lisatakse käsurea meetod ning saad ka otse uue faili luua Migratsioonid/2_deploy_contract.js 2_deploy_contract.js; trühvlirände sooritamine Ridade järjekord on seotud failinimega, seega tuleb mitu juurutusskripti nimetada järjekorras var SimpleStorage = artfacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Käivita trühvli kompileerimisleping ja kompileeritud leping on ehituskaustas. Lepingu alusel Paigaldamiseks on vajalik vastav json-fail, mis sisaldab baitkoodi, abiCode'i jne 5. Muuda truffle.js, et seadistada trühvlite paigaldamise leping ja RPC ühendus plokiahelaga suhtlemiseks. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Lülita sisse Truffle'i vaikimisi plokiahela keskkond konsoolil. Trühvlite areng Trühvli arendus algas
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 Privaatvõtmed: (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) 8d5366123cb560bb606379f9a0bfd4769eecc0557f1b362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream Mee-rikas, sile puru, magus maius ⚠ Tähtis ⚠: See mnemoonika loodi sina Truffle'i poolt. See ei ole turvaline. Veendu, et sa ei kasutaks seda tootmises 7/16 plokiahelad, vastasel juhul riskid raha kaotamisega. Trühvli arendamine> See pakub Truffle'ile natiivset plokiahela keskkonda, kus saab sõlmida lepinguid, luues vaikimisi 10 kontot, millest igaüks genereeritakse Algne konto saldo on 100 eetrit. Võid kasutada ka Ganache'i graafilist liidest , peate muutma porti, millega konfiguratsioon on ühendatud. 7. Täida trühvli migratsiooni pordi juurutusleping uues konsoolis (või truffle'is arenda konsooli migratsiooni teostamiseks). 8. Testi lepingukoodi trühvliarendusega. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Väljundtehingute info SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {return value.toNumber()}); // 100 9. Testi lepingut trühvlitestiga Kasuta trühvlit loomistesti SimpleStorage'i, et luua uus või Loo uus fail test/SimpleStorage.test.js otse. const SimpleStorage = artfacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("peaks kinnitama tõene", function(done)
{ var simpleStorage = SimpleStorage.deployed(); VAR näide; simpleStorage.then(res => { instance = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'mitte võrdne 0') }).then(() => { instance.set(100) }).then(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'mitte võrdne 100') }) valmis(); }); }); Uues konsoolis sisesta trühvlitest ./test/SimpleStorage.test.js. 10. Testlepingud remiksiga Put-lepingud on välja töötatud trühvli abil remiksis kiireks muutmiseks Kavandatava lepingu kasutuselevõtt ja rakendamine. Remix pakub lepingute jaoks kompileerimistöökeskkonda ja seda saab lepinguga kontrollida Tabel näeb iga lepingu tehingu üksikasjalikku teavet, nagu sisend- ja väljundparameetrid, allkirjastatud meetodi andmed, tehingu räsi ja muu info. Toeta silumist. 1. Kasuta kompileerimisdetaile, et näha lepingu koostamise detaile. Kaasa arvatud baitkood, abi ning web3.js Drip Ah meetodi kiire kasutuselevõtu kasutamine. 9/16 2. Kasuta runi lepingu loomiseks ja konsool saab vaadata tehingut, mis lepingu lõi. Kasuta Truffle Unboxi interaktiivsete lepingurakenduste loomiseks Ülaltoodud sammud loovad lepingukeskkonna, mida saab kompileerida, juurutada ja siluda põhilise truffle init'i abil. Allpool Loo uus projekt Truffle Unboxiga, mis annab meile trühvliprojekti malli sees Mõned lepingulised rakenduste interaktsioonikeskkonna sõltuvused. Saad vaadata ametlikke pakkumisi trühvlikastides Mallikastid. Järgmine on reacti mall. 1. Uus projekt truf-react mkdir truf-react 10/16 CD truf-react Trühvli avakast React Unbox-protsess laadib alla ekstraktsioonimalli ja teostab selliseid toiminguid nagu npm paigaldus. 2. Seadista projekti truffle.js module.exports = { Vaata <http://truffleframework.com/docs/advanced/confi Guration> et kohandada oma trühvlit Konfiguratsioon!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Matš Ükskõik milline võrgu ID
}
} }; 3. Alusta trühvli kasvatamist 4. SRC/App.js muudatus impordi React, { Component } 'react'-ist impordi SimpleStorageContract aadressilt '.. /ehitab/lepingud/SimpleStorage.json' impordi getWeb3 aadressilt './utils/getWeb3' Impordi './css/oswald.css' Impordi './css/open-sans.css' Impordi './css/pure-min.css' 11/16 import './App.css' const leping = nõua ('trühvlileping') const simpleStorage = leping (SimpleStorageContract) class App laiendab komponenti { konstruktor(rekvisiidid) { super(rekvisiit) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(that)
} componentWillMount() { Hangi võrguteenuse pakkuja ja web3 Instant. Vaata rohkem kui utils/getWeb3 info. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instantsiate leping Kui Web3 oli olemas. 12/16 this.instantiateContract() }) .catch(() => { console.log('Viga Web3 otsimine.') })
} instantiateContract() {
/* * NUTILEPINGU NÄIDE
* * Tavaliselt oleksid need funktsioonid nimetada kontekstis * osariigi haldusraamatukogu, kuid mugavuse huvides olen need siia paigutanud. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Number(event.target.value) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Kuulutan selle hilisemaks, nii et 13/16 me saame funktsioone SimpleStorage'is aheldada. var simpleStorageInstance Hangi kontod. this.state.web3.eth.getAccounts((viga, kontod) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instants this.setState({
address: instance.address }) Kauplused a antud väärtus, vaikimisi 5. Tagasitulek simpleStorageInstance.set(x, {from: kontod[0]}) }).then((result) => { Hangi väärtus lepingust, et tõestada, et see toimis. Tagasitulek simpleStorageInstance.get.call(accounts[0]) }).then((result) => { Uuenda olek tulemusega. Tagasitulek this.setState({ storageValue: result.c[0] }) }) })
} render() { Return ( <div className="App"> <nav className="navbar puhas-menüü pure-menuhorisontaalne"> 14/16 <a href="#" className="puhas-menüü-pealkiri puremenu-link">Trühvli Kast</a> </nav> <main className="konteiner"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Valmis!</h1> <p>Sinu trühvlikast on paigaldatud ja valmis.</p> <h2>Nutilepingu näide</h2> <p>Kui su lepingud on koostatud ja üle viidud Edukalt näitab allpool salvestatud väärtus 5 (vaikimisi).</p> <p>Proovi muuta internetis salvestatud väärtust <strong> 59</strong> App.js.</p> <p>Salvestatud väärtus on: {this.state.storageValue}</p> <p>Paigutatud lepingu aadress: {this.state.address}</p> </div> <div> <sisendtüüp="number" onChange= {this.changeValueHandle}/> <nupp onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} ekspordi vaikimisi rakendus Lisatud lepingukomplekti meetodi kutsumine. Ja näita lepingu aadressi. 5. Ava uus konsool ja käivita npm käivitamine 6. Ava http://lcoalhost:3000 oma brauseris, et näha lepingu tulemusi. 7. Määra lepingu salvestatud andmete väärtus komplekti ja sisendkastide kaudu. 8. Sisene trufle arendusse
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Saadakse BigNUmber tüübi tagastusväärtus ning väärtus c-massiivis määratakse salvestatudAndmed. Kasuta brauseri pluginat Metamask, et plokiahelaga suhelda Viide http://truffleframework.com/tutorials/pet-shop Osalejad esitavad dokumendid Võistlus nõuab Truffle'i kasutamist nutilepingute arendamiseks, kus Truffle versioon v4.1.5 vastab solcjs versioonile v0.4.21. Arendajad peavad esitama Truffle projekti zip-paketi ja sellega seotud projekti sissejuhatusdokumendid, mis sisaldavad vähemalt Järgmine: 16/16 1. Truffle projekti põhifailistruktuur: ehituslepingute migratsioonitest package.json truffle.js truffle-config.js README.md // Inseneridokumentatsiooni kirjeldus node_modules pole vaja 2. Tuleb esitada PPT või PDF-selgitus kogu projekti toote kohta, sealhulgas toote tausta tutvustus, toote olulisus, Rakenduse allalaadimise aadress (valikuline), toote kasutusprotsessi tutvustus. Järgnevad kolmandate osapoolte arendajad saavad rakendada lepingulisi rakendusi ja Chain pockete vastavalt tulevasele ThunderChaini juhisdokumendile Interaktsioon. Dokumentatsioon ja tööriistad Solidity API Trühvlidokumentatsioon Ganache pakub graafilist liidest natiivsele plokiahela keskkonnale Zeppelin-Solidty on pühendunud turvalisele ja standardiseeritud lepinguraamistikule MetaMask pakub brauseri pluginaid plokiahela keskkonnaga brauseritele RPC-ühenduste kaudu web3.js Ethereumiga kapseldatud JS plokiahelaga suhtlemiseks Lõpuks pdf-dokumendi allalaadimine:
Dev_Guide_zh.pdf
(373.55 KB, Allalaadimiste arv: 6)
|