Izjava: Spodaj je dokument "Xunlei Global Blockchain Application Competition Development Guide", ki ga je napisalo podjetje Xunlei, zakaj uporabiti dokument, ki ga je napisalo podjetje Xunlei, kot vodič za razvoj blockchaina?
Thunder je pravzaprav zasebna veriga, zgrajena z Ethereum pametnimi pogodbami, tehnologija je zelo zrela in ima poglobljene raziskave o blockchain tehnologiji, kar ima vodilni pomen za naš razvoj blockchaina.
Kot pravi pregovor, »iz enega primera potegnemo sklepe«, lahko razvijemo druge blockchain aplikacije z branjem dokumenta o razvoju blockchaina, ki ga je napisal Xunlei, zahvaljujoč Xunleiju.
Dokument se glasi:
1/16 Vodnik za razvoj globalnih tekmovanj v aplikacijah Blockchain Thunder Razvoj pogodbe v priporočilo za linijo 1. Pred pisanjem pametnih pogodb morate imeti določeno razumevanje osnov blockchaina (priloženo: Ethereum pregled). 2. Naučite se jezika trdnosti (API trdnosti). 3. Naučite se uporabljati okvir tartufa v kombinaciji z učenjem trdnosti. Uporabite tartufe, ki jih gojite lokalno Izvajajte pogodbe v blockchain okolju. 4. Naučiti se in uporabljati zeppelin-solidty (standardizirani pogodbeni okvir, namenjen varnosti) in integracijo načrtovanja Način pogodbe, ločevanje podatkov in logičnih pogodb, nadzor varnosti dovoljenj in upoštevanje logike nadgradenj. 5. Naučite se komunicirati s pogodbami z uporabo web3.js. Uporabite vtičnik Metamask in spletno storitev z blockchainom Interakcija. 6. Forum vprašanja in odgovori: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Vse težave, na katere naletite, lahko na tem forumu razveljavite.) Odgovorili vam bomo v 3 delovnih dneh) Osnovni pojmi Blockchain Blockchain je decentraliziran distribuiran računalniški sistem, katerega glavna značilnost je trajna nespremenljivost podatkov, Ni ga mogoče ponarediti in ima visoko stopnjo odprtosti, preglednosti in zaupanja. Temeljne tehnologije vključujejo Bizantinski algoritem za odpornost na napake (PBFT), tehnologija šifriranja, P2P tehnologija itd. Transakcija Blockchain lahko razumemo kot globalno deljen sistem podatkovne baze transakcij. Vsaka programska oprema z dovoljenjem ga lahko prebere Vzemite podatke iz blockchain omrežja. Ko je potrebno spremeniti podatke v blok omrežju, je treba sprožiti blanket Obstajajo zahteve, ki jih sprejemajo blok vozlišča, ki se v sistemu skupaj imenujejo transakcije. Transakcije so transakcijske in se pošiljajo v blockchain, bodisi ne vse ali pa so vse izvedene. Trgovski direktor Ko je vrstica dokončana, se trajno shrani v verigo blokov in je ni mogoče več spreminjati ali izvajati. Transakcije sproži in podpiše račun v sistemu, kriptografija pa je mogoče transakcije hraniti le z zasebnim ključem 2/16 Nekdo ga začne, drugi ne morejo spreminjati in ponarejati. To zagotavlja avtentičnost in varnost transakcije. Račun V blockchain sistemu obstajata dve vrsti računov, ena je zunanja in druga je pogodbeni račun. Zunanji račun v lasti Imate svoje edinstvene javne in zasebne ključe, vaš račun pa nadzoruje ta par ključev. Terminski računi imajo svojo kodo, račun pa je ustvarjen Lastni nadzor kode. Račun je identificiran z naslovom, dolžina naslova je enaka in med obema vrstama računov ni razlike. Naslov zunanjega računa zagotavlja Javni ključ se ustvari, naslov pogodbe pa uporablja naslov, s katerega je bil ustvarjen pogodbeni račun, in število transakcij, ki so ustvarile pogodbeni račun (nonce) je proizvedeno. Pogodbe se izvajajo prek uradnega naslova, običajni računi pa ne morejo neposredno objavljati pogodb. Uporabniška kombinacija Uradno ga mora pregledati in izdati Xunlei. V sistemu ni razlike med obema vrstama računov. Vsak račun ima v sistemu 256 bitov Ključ-vrednost shranjevalna struktura do 256 bitov se imenuje shranjevanje. Vsak račun ima stanje, imenovano Stanje v WEI je mogoče spremeniti z pošiljanjem transakcije s številčno vrednostjo na račun. Pogodba Pogodba je blockchain račun, ki shranjuje kodo, klic pogodbe pa se izvede s pošiljanjem transakcij na ta račun. Ko Prejšnji bolj priljubljen pogodbeni programski jezik je bil Solidity. Trenutno natečaj podpira oddajo pogodb le v jeziku Solidity. Pogodba je razdeljena na dva dela: shranjevanje podatkov in funkcijo; podatki shranjujejo stanje pogodbe, funkcija pa je pogodba Zunanji vmesnik izvaja poizvedovanje podatkov in spreminjanje stanja z klicanjem funkcij. Napiši pogodbo preko programskega jezika in po prevajanju pridobi bajtkodo EVM. S pošiljanjem transakcije na pogodbeni račun je resnično Trenutni pogodbeni klic. Plin Plin je plačilna enota verige blokov, in ko je transakcija ustvarjena, je določena določena količina plina. Gospod Če gre za omejitev količine izračuna transakcije in plačilo pristojbine za izvedbo transakcije. Med izvedbo transakcije je Gas Porablja ga pravilo, ki ga določa EVM. Cena plina je vrednost, ki jo določi ustvarjalec transakcije, in število pristojbin, potrebnih za izvedbo transakcije Znesek je Gas_Price*bencin. Transakcija se konča Če ostane gorivo, se preostali del vrne na predlog ustvarjalca uporabniki. Če plin ni dovolj, bo izvedba transakcije spodletela, transakcija pa ne bo preprečila flood napadov za varnost sistema Stroški obdelave se ne vračajo. Najmanjša enota cene plina je wei, 10^18 wei = 1 gram verige. Trdnost 3/16 Solidity je visokonivojski programski jezik, zasnovan za pametne pogodbe, ki deluje na EVM (Ethereum). Virtual Machine)。 Implementacija oblikovanja jezika je pod vplivom C++/Python/JavaScript. Solidity je močno tipiziran jezik, ki podpira dedovanje, polimorfizem, vmesnike, abstrakcijo, knjižnice, prilagojene podatkovne tipe in še več Seks. Solidity podpira programiranje z asemblerskimi ukazi, koda pa je prevedena v bajtkodo in teče na EVM. Trdnost je Najbolj priljubljen jezik za razvoj pametnih pogodb je tudi jezik, ki ga priporoča in podpira platforma Thunder Contract. Opombe: 1. Ethereum Virtual Machine je virtualno okolje na Ethereumu, ki zagotavlja okolje za izvajanje pametnih pogodb Simulirani stroj. Tekmovalna platforma je združljiva z EVM, vendar mora izpolnjevati omejitve uporabe uradne platforme. 2. Vrste računov so razdeljene na zunanje račune (naslovi običajnih trgovalnih računov) in terminske račune. Ustvarite pogodbo Gre za postopek pošiljanja transakcije na naslov ciljnega računa 0. 3. Tekmovanje določa uporabo tartufa (tartuf v4.1.5 trdnost v0.4.21) za razvoj inteligentnih kombinacij Platforma bo preverila bajtkodo glede na izvorno kodo dokumenta, ki ga predloži udeleženec. , Razvijanje pogodb s tartufi Pametna pogodba za razvoj trdnosti tartuf. Omogoča popoln nabor razvoja, odpravljanja napak in urejanja Prevajanje, nameščanje in testiranje lokalnih okolij. Lahko hitro uporabiš ukaz za predlogo unbox, ki temelji na nekaterih predlogah Ustvarite ustrezno strukturo pogodbe. Namestite Truffle npm i -g tartuf [root@opennode Sandai] # Tartufova različica Truffle v4.1.5 (osnovno: 4.1.5) Trdnost v0.4.21 (solc-js) Začni 1. Začetek pogodbenega projekta s tartufi 4/16 mkdir preprosta shramba CD Preprosto shranjevanje tartuf init 2. Ustvarite novo datoteko pogodbe: Za ustvarjanje pogodbe lahko uporabite tartuf Novo datoteko lahko ustvarite tudi neposredno iz ukazne vrstice SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol pragma trdnost ^0.4.21; contract SimpleStorage { uint myVariable; Funkcija množica(uint x) public { myVariable = x;
} funkcija get() konstantne javne donose (uint) { vrni myVariable;
}
} 3. Dodaj skripte za migracijo: Lahko uporabiš migracijo za ustvarjanje tartufov 2_deploy_contract Dodana je metoda ukazne vrstice, prav tako pa lahko neposredno ustvarite novo datoteko migracije/2_deploy_contract.js 2_deploy_contract.js izvajanja tartufske migracije Vrstni red vrstic je povezan z imenom datoteke, zato je treba poimenovati več skript za nameščanje po vrstnem redu var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Zaženi truffle compile contract, in prevedena pogodba je v mapi build. po pogodbi Za namestitev je potrebna ustrezna json datoteka, ki vsebuje bajtkodo, abiCode itd. 5. Urediti truffle.js za vzpostavitev pogodbe o uporabi tartufov in povezave RPC za interakcijo z verigo blokov. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Vklopite privzeto blockchain okolje Truffle na konzoli. Razvoj tartufov Truffle Development se je začel pri
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 Zasebni ključi: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c6736790f1b8 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 Med bogata, gladka drobtina sladka poslastica ⚠ Pomembno ⚠: Ta mnemotehnika je bila ustvarjena za tebe po Truffle. Ni varna. Poskrbite, da ga ne uporabljate v proizvodnji 7/16 Blockchain, sicer tvegate izgubo sredstev. tartufi (razvijajo)> To zagotavlja izvorno blockchain okolje, kjer lahko Truffle izvaja pogodbe, pri čemer privzeto ustvari 10 računov, od katerih je vsak ustvarjen Začetno stanje na računu je 100 eterov. Uporabite lahko tudi grafični vmesnik, ki ga ponuja Ganache , morate spremeniti priključek, na katerega je konfiguracija priključena. 7. Izvesti pogodbo o prenosu portov s tartufi v novi konzoli (ali v tartufih Razvijte konzolo za izvedbo migracije). 8. Preizkusite pogodbeno kodo s tartufovim razvojem. SimpleStorage.deployed().then(function(instance ){vrni instance.get.call(); }).then(function(value) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Informacije o izhodnih transakcijah SimpleStorage.deployed().then(function(instance ){vrni instance.get.call(); }).then(function(value) {return value.toNumber()}); // 100 9. Preizkusite pogodbo s testom tartufov. Uporabite test za ustvarjanje tartufov, SimpleStorage, da ustvarite novo ali Ustvarite novo datoteko za testiranje/SimpleStorage.test.js neposredno. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("should assert true", function(done)
{ var simpleStorage = SimpleStorage.deployed(); var instance; simpleStorage.then(res => { instance = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'ni enako 0') }).then(() => { instance.set(100) }).then(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'ni enako 100') }) done(); }); }); V novi konzoli vnesite test tartufov ./test/SimpleStorage.test.js. 10. Testne pogodbe z remix pogodbami, razvitimi s tartufi v remiksu za hitro spreminjanje Uvedba in uveljavljanje predlagane pogodbe. Remix zagotavlja okolje za izvajanje prevajanja pogodb in ga lahko nadzoruje pogodba Tabela lahko prikazuje podrobne informacije o vsaki transakciji pogodbe, kot so vhodni in izhodni parametri, podpisani podatki metode, transakcijski hash in druge informacije. Podpora odpravljanju napak. 1. Uporabite podrobnosti o prevajanju za ogled podrobnosti o sestavljanju pogodb. Vključno z bajtkodo, abi in uporabo web3.js hitro uporabo metode Drip Ah. 9/16 2. Uporabite run za ustvarjanje pogodbe, konzola pa lahko vidi transakcijo, ki je pogodbo ustvarila. Uporabite Truffle Unbox za ustvarjanje interaktivnih aplikacij za pogodbe Zgornji koraki ustvarijo pogodbeno okolje, ki ga je mogoče prevesti, namestiti in razhroščiti z osnovnim truffle initom. Spodaj Ustvarite nov projekt s Truffle Unbox, ki nam ponuja predlogo projekta za tartufe, znotraj Nekatere odvisnosti okolja interakcije s pogodbami in aplikacijami. Uradne ponudbe si lahko ogledate v Truffle Boxes Predloge za škatle. Sledi predloga react. 1. Novi projekt truf-react mkdir truf-react 10/16 cd truf-react Truffle Unbox React Proces razpakiranja prenese predlogo za izvlek in izvede operacije, kot je npm namestitev. 2. Konfigurirajte truffle.js projekta module.exports = { Glej <http://truffleframework.com/docs/advanced/confi Guration> za prilagoditev vašega tartufa konfiguracija!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Ujemanje Kateri koli omrežni ID
}
} }; 3. Začnite razvijati tartufe 4. Sprememba SRC/App.js import React, { Component } iz 'react' uvoz SimpleStorageContract iz '.. /gradnja/pogodbe/SimpleStorage.json' uvoz getWeb3 iz './utils/getWeb3' uvoz './css/oswald.css' uvoz './css/open-sans.css' uvoz './css/pure-min.css' 11/16 uvoz './App.css' Const pogodba = zahteva('tartuf-pogodba') const simpleStorage = pogodba(SimpleStorageContract) class App Extending Component { konstruktor(props) { super(props) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Pridobite ponudnika omrežja in web3 primer. Za več informacij glejte utils/getWeb3 Informacije. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instancirana pogodba Ko je Web3 to zagotovil. 12/16 this.instantiateContract() }) .catch(() => { console.log('Napaka iskanje web3.') })
} instantiateContract() {
/* * PRIMER PAMETNE POGODBE
* * Običajno bi te funkcije se imenuje v kontekstu * državna upravna knjižnica, vendar Za lažje razumevanje sem jih postavil tukaj. */ 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) To razglašam za kasneje, torej 13/16 funkcije lahko verižujemo na SimpleStorage. var simpleStorageInstance Pridobi račune. this.state.web3.eth.getAccounts((napaka, računi) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instanca this.setState({
address: instance.address }) Shrambe podana vrednost, 5 privzeto. Vrnitev simpleStorageInstance.set(x, {from: računi[0]}) }).then((result) => { Pridobite vrednost iz pogodbe, da dokaže, da deluje. Vrnitev simpleStorageInstance.get.call(accounts[0]) }).then((result) => { Stanje posodobitve z rezultatom. Vrnitev this.setState({ storageValue: result.c[0] }) }) })
} render() { vrni ( <div className="App"> <navigacija className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-header-puremenu-link">Truffle Škatla</a> </nav> <Main className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Pripravljeno!</h1> <p>Vaša škatla s tartufi je nameščena in pripravljena.</p> <h2>Primer pametne pogodbe</h2> <p>Če so se vaše pogodbe kompilirale in migrirale Spodaj bo uspešno prikazana shranjena vrednost 5 (privzeto).</p> <p>Poskusite spremeniti vrednost, shranjeno na <strong>spletu 59</strong> od App.js.</p> <p>Shranjena vrednost je: {this.state.storageValue}</p> <p>Naslov za razporejeno pogodbo: {this.state.address}</p> </div> <div> <vhodni tip="številka" naSprememba= {this.changeValueHandle}/> <gumb onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} izvoz privzete aplikacije Dodali smo klic metode pogodbenega množice. In pokaži naslov pogodbe. 5. Odpri novo konzolo in zaženi npm run start 6. Odprite http://lcoalhost:3000 v brskalniku in si ogledate rezultate pogodbe. 7. Nastavite vrednost pogodbenega shranjevanja podatkov preko polj set in input. 8. Vstopi v razvoj
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Dobimo povratno vrednost tipa BigNUmber in nastavimo vrednost v c polju shranjeni podatki. Za interakcijo z blockchainom uporabite vtičnik Metamask za brskalnik Referenčni http://truffleframework.com/tutorials/pet-shop Udeleženci oddajo dokumente Tekmovanje določa uporabo Truffle za razvoj pametnih pogodb, pri čemer različica Truffle v4.1.5 ustreza solcjs različici v0.4.21. Razvijalci morajo predložiti zip paket projekta Truffle in povezane uvodne dokumente, ki vključujejo vsaj Naslednje: 16/16 1. Osnovna struktura datoteke Truffle Project: Test migracij gradbenih pogodb package.json truffle.js truffle-config.js README.md // Opis inženirske dokumentacije Ni potrebnih node_modules 2. Potrebno je zagotoviti PPT ali PDF razlago celotnega projektnega izdelka, vključno z uvodom v ozadje izdelka, pomenom izdelka, Naslov za prenos aplikacije (neobvezno), uvod v postopek uporabe izdelka. Kasnejši razvijalci tretjih oseb lahko v skladu z prihajajočimi smernicami ThunderChain implementirajo pogodbene aplikacije in Chain žepe Interakcija. Dokumentacija in orodja API trdnosti Dokumentacija o tartufih Ganache zagotavlja grafični vmesnik za izvorno blockchain okolje Zeppelin-Solidty je zavezan varnemu in standardiziranemu pogodbenemu okviru MetaMask zagotavlja vtičnike za brskalnike z blockchain okoljem preko RPC povezav web3.js JS, enkapsuliran z Ethereumom, za interakcijo z blockchainom Nazadnje, pdf dokument za prenos:
Dev_Guide_zh.pdf
(373.55 KB, Število prenosov: 6)
|