Uttalelse: Følgende er dokumentet "Xunlei Global Blockchain Application Competition Development Guide" skrevet av Xunlei Company, hvorfor bruke dokumentet skrevet av Xunlei Company som en veiledning for blokkjedeutvikling?
Thunder er faktisk en privat kjede bygget med Ethereum smarte kontrakter, teknologien har vært svært moden, og de har grundig forskning på blokkjedeteknologi, noe som har en ledende betydning for vår blokkjedeutvikling.
Som ordtaket sier, «trekk slutninger fra ett eksempel», kan vi utvikle andre blokkjedeapplikasjoner ved å lese blokkjede-utviklingsdokumentet skrevet av Xunlei, takket være Xunlei.
Dokumentet lyder:
1/16 Thunder Global Blockchain Application Competition Utviklingsguide Kontraktsutvikling inn i linjeanbefalingen 1. Før du skriver smarte kontrakter, må du ha en viss forståelse av blokkjede-grunnprinsippene (vedlagt: Ethereum Oversikt). 2. Lær solidity-språket (solidity API). 3. Lær å bruke trøffelrammeverket i kombinasjon med soliditetslæring. Bruk trøffel lokalt Kjør kontrakter i et blokkjede-miljø. 4. Lær og bruk zeppelin-solidty (et standardisert kontraktsrammeverk dedikert til sikkerhet) og designintegrasjon Kontraktmodus, separer data og logiske kontrakter, kontrollerer tillatelsessikkerhet, og vurderer oppgraderingslogikk. 5. Lær å samhandle med kontrakter ved hjelp av web3.js. Bruk Metamask-pluginen og webtjenesten med blokkjede Interaksjon. 6. Forum Spørsmål og svar: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Eventuelle problemer du støter på kan tilbakestilles på dette forumet.) Vi svarer deg innen 3 virkedager) Grunnleggende konsepter Blokkjede Blockchain er et desentralisert distribuert datasystem, hvor hovedfunksjonen er den permanente uforanderligheten til data, Den kan ikke smides, og har en høy grad av åpenhet, åpenhet og tillit. Kjerneteknologiene inkluderer Byzantine Fault Tolerant Consensus Algorithm (PBFT), krypteringsteknologi, P2P-teknologi, osv. Transaksjon Blockchain kan forstås som et globalt delt transaksjonsdatabasesystem. Enhver programvare med tillatelse kan lese den Ta data fra blokkjedenettverket. Når det er nødvendig å endre dataene i blokknettverket, må en blanket initieres Det er forespørsler akseptert av blokknoder, som samlet omtales som transaksjoner i systemet. Transaksjoner er transaksjonelle og sendes til blokkjeden, enten ikke alle eller alle gjennomføres. En handelsleder Etter at raden er fullført, lagres den permanent i blokkjeden og kan ikke endres eller utføres igjen. Transaksjoner initieres og signeres av kontoen i systemet, og gjennom kryptografi kan transaksjoner kun holdes av den private nøkkelen 2/16 Noen initierer det, andre kan ikke endre og smi. Dette sikrer transaksjonens ekthet og sikkerhet. Beretning Det finnes to typer kontoer i blokkjedesystemet, én er ekstern og den andre er kontraktskontoen. Ekstern konto eid Dine egne unike offentlige og private nøkler, og kontoen din kontrolleres av dette nøkkelparet. Futureskontoer har sin egen kode, og kontoen opprettes av Egen kodekontroll. Kontoen identifiseres med en adresse, og adresselengden er den samme, og det er ingen forskjell mellom de to typene kontoer. Adressen til den eksterne kontoen oppgis av Den offentlige nøkkelen genereres, og kontraktsadressen bruker adressen kontraktskontoen ble opprettet fra og antall transaksjoner som opprettet kontraktskontoen (nonce) produseres. Kontrakter distribueres via den offisielle adressen, og vanlige kontoer kan ikke publisere kontrakter direkte. Brukerens kombinasjon Den må offisielt gjennomgås og utgis av Xunlei. Innenfor systemet er det ingen forskjell mellom de to typene kontoer. Hver konto har 256 biter inne i systemet Nøkkelverdi-lagringsstrukturen opp til 256 biter kalles lagring. Hver konto har en saldo kalt Saldo i Wei kan endres ved å sende en transaksjon med numerisk verdi til kontoen. Kontrakt En kontrakt er en blokkjedekonto som lagrer koden, og kontraktskallet gjøres ved å sende transaksjoner til denne kontoen. Når Det tidligere mer populære kontraktsprogrammeringsspråket var Solidity. For øyeblikket støtter konkurransen kun innsending av kontrakter i Solidity-språket. Kontrakten er delt inn i to deler, datalagring og funksjon, dataene lagrer tilstanden til kontrakten, og funksjonen er kontrakten Det eksterne grensesnittet realiserer dataspørring og tilstandsendring ved å kalle funksjoner. Skriv en kontrakt gjennom et programmeringsspråk, og hent EVM-bytekoden etter kompilering. Ved å sende en transaksjon til kontraktskontoen, reell Nåværende kontraktssamtale. Gass Gass er betalingsenheten i blokkjeden, og når en transaksjon opprettes, vil en viss mengde gass bli spesifisert. Herre Hvis det er for å begrense mengden beregning på transaksjonen og betale et gebyr for gjennomføringen av transaksjonen. Under gjennomføringen av transaksjonen, Gas Den vil bli konsumert av en regel satt av EVM. Gassprisen er en verdi spesifisert av transaksjonsskaperen og antall gebyrer som kreves for å gjennomføre transaksjonen Mengden er Gas_Price*Gass. Transaksjonen avsluttes Hvis det er gass til overs, returneres den gjenværende delen til skaperens forslag brukere. Hvis gassen er utilstrekkelig, vil transaksjonskjøringen feile, og transaksjonen vil feile for å forhindre flomangrep for systemsikkerhet Håndteringsgebyret blir ikke tilbakebetalt. Den minste enheten av gassprisen er wei, 10^18 wei = 1 kjedegram. Soliditet 3/16 Solidity er et høynivå programmeringsspråk designet for smarte kontrakter, som kjører på EVM (Ethereum). Virtual Machine)。 Språkdesignimplementeringen er påvirket av C++/Python/JavaScript. Solidity er et sterkt typet språk som støtter arv, polymorfisme, grensesnitt, abstraksjon, biblioteker, egendefinerte datatyper og mer Sex. Solidity støtter programmering av assemblerinstruksjoner, og koden kompileres til bytekode og kjøres på EVM-en. Soliditet er Det mest populære språket for utvikling av smarte kontrakter er også språket som anbefales og støttes av Thunder Contract Platform. Notater: 1. Ethereum Virtual Machine er et virtuelt miljø på Ethereum som tilbyr et kjøretidsmiljø for smarte kontrakter Simulert maskin. Konkurranseplattformen er kompatibel med EVM, men må overholde bruksbegrensningene til den offisielle plattformen. 2. Kontotyper deles inn i eksterne kontoer (vanlige handelskontoadresser) og futureskontoer. Lag en kontrakt Det er prosessen med å sende en transaksjon til destinasjonskontoens adresse 0. 3. Konkurransen spesifiserer bruk av trøffel (trøffel v4.1.5 soliditet v0.4.21) for å utvikle intelligente kombinasjoner Plattformen vil verifisere bytekoden i henhold til kildekoden til dokumentet som deltakeren sender inn. , Utvikle kontrakter med trøffel Truffle for utvikling av soliditetsrammeverk for smartkontrakter. Den gir et komplett sett med utvikling, feilsøking og redigering Oversettelse, utrulling og testing av lokale miljøer. Du kan bruke malkommandoen unbox raskt basert på noen maler Generer den tilsvarende kontraktstrukturen. Installer trøffel npm i -g trøffel [root@opennode sandai]# trøffelversjon Truffle v4.1.5 (kjerne: 4.1.5) Soliditet v0.4.21 (solc-js) Begynn 1. Starte kontraktsprosjektet med trøffel 4/16 mkdir simple-storage CD Simple-Storage trøffel init 2. Lag en ny kontraktsfil: Du kan bruke trøffel for å opprette kontrakt Du kan også opprette en ny fil direkte fra SimpleStorage-kommandolinjen contract/SimpleStorage.sol SimpleStorage.sol pragma-soliditet ^0.4.21; contract SimpleStorage { uint myVariable; funksjonsmengde(uint x) offentlig { myVariabel = x;
} funksjon get() konstante offentlige avkastninger (uint) { returnere myVariable;
}
} 3. Legg til migreringsskript: Du kan bruke truffle create migration 2_deploy_contract kommandolinjemetode legges til, og du kan også opprette en ny fil direkte Migrasjoner/2_deploy_contract.js 2_deploy_contract.js; utførelsen av trøffel migrerer Rekkefølgen er relatert til filnavnet, så flere distribusjonsskript må navngis i rekkefølge var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Kjør truffle compile contract, og den kompilerte kontrakten ligger i build-mappen. per kontrakt Det finnes en tilsvarende json-fil som inneholder bytekode, abiCode osv. som kreves for distribusjon 5. Rediger truffle.js for å sette opp truffeldistribusjonskontrakten og RPC-tilkoblingen for å samhandle med blokkjeden. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Slå på Truffles standard blokkjede-miljø på konsollen. trøffelutvikling Truffle Develop startet på
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 Private nøkler: (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 honningrik, glatt, smuldrende søt godbit ⚠ Viktig ⚠: Denne huskeregelen ble laget for du av Truffle. Det er ikke sikkert. Sørg for at du ikke bruker det i produksjonen 7/16 Blokkjeder, ellers risikerer du å tape penger. trøffel(utvikler)> Dette gir et innebygd blokkjede-miljø for Truffle til å kjøre kontrakter, og genererer 10 kontoer som standard, hver generert Den opprinnelige kontobalansen er 100 ether. Du kan også bruke det grafiske grensesnittet som Ganache tilbyr , må du endre porten som konfigurasjonen er koblet til. 7. Kjør truffle migrate port-distribusjonskontrakten i en ny konsoll (eller i truffle) Utvikle konsoll for å utføre migrering). 8. Test kontraktskoden med trøffelutvikling. SimpleStorage.deployed().then(function(instance ){returner instance.get.call(); }).da(funksjon(verdi) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Utdatatransaksjonsinformasjon SimpleStorage.deployed().then(function(instance ){returner instance.get.call(); }).da(funksjon(verdi) {return value.toNumber()}); // 100 9. Test kontrakten med trøffeltest Bruk trøffel og lag test SimpleStorage for å opprette en ny eller Opprett en ny filtest/SimpleStorage.test.js direkte. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 det("bør hevde sann", funksjon(ferdig)
{ var simpleStorage = SimpleStorage.deployed(); Var instance; simpleStorage.then(res => { instans = res; return instance.get() }).then(verdi => { assert.equal('0', value.toNumber(), 'ikke lik 0') }).da(() => { instance.set(100) }).da(() => { return instance.get() }).then(verdi => { assert.equal('100', value.toNumber(), 'ikke lik 100') }) done(); }); }); I den nye konsollen kommer trøffeltest ./test/SimpleStorage.test.js. 10. Testkontrakter med remix Put-kontrakter utviklet med trøffel i remiks for raskt å endre Utrulling og iverksettelse av den foreslåtte kontrakten. Remix tilbyr et kompileringsmiljø for kontrakter og kan styres av kontrakten Tabellen kan se detaljert informasjon om hver transaksjon i kontrakten, som input- og outputparametere, signerte metodedata, transaksjonshash og annen informasjon. Støtte feilsøking. 1. Bruk kompileringsdetaljer for å se kontraktskompilasjonsdetaljene. Inkludert bytekode, abi og bruk web3.js rask bruk av Drip Ah-metoden. 9/16 2. Bruk run for å lage en kontrakt, og konsollen kan se transaksjonen som opprettet kontrakten. Bruk Truffle Unbox for å lage interaktive kontraktsapper Stegene ovenfor skaper et kontraktsmiljø som kan kompileres, distribueres og feilsøkes ved hjelp av grunnleggende truffle init. Nedenfor Opprett et nytt prosjekt med Truffle Unbox, som gir oss en mal for trøffelprosjekt inni Noen kontraktsapplikasjonsinteraksjonsmiljøavhengigheter. Du kan sjekke ut de offisielle tilbudene i Truffle Boxes Malbokser. Følgende er react-malen. 1. Nytt prosjekt truf-react mkdir truf-react 10/16 cd truf-react Trøffel unbox react Unbox-prosessen laster ned uttrekksmalen og utfører operasjoner som npm-installasjon. 2. Konfigurer prosjektets truffle.js module.exports = { Se <http://truffleframework.com/docs/advanced/confi Gurasjon> for å tilpasse din trøffel konfigurasjon!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match Hvilken som helst nettverks-ID
}
} }; 3. Start en trøffelutvikling 4. Endring av SRC/App.js import React, { Component } fra 'react' importer SimpleStorageContract fra '.. /bygg/kontrakterer/SimpleStorage.json' importer getWeb3 fra './utils/getWeb3' importer './css/oswald.css' importer './css/open-sans.css' importer './css/pure-min.css' 11/16 importere './App.css' const kontrakt = krev ('trøffelkontrakt') const simpleStorage = kontrakt(SimpleStorageContract) class App utvider Komponent { konstruktør(rekvisitter) { super(rekvisitter) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Få nettverksleverandør og web3 eksempel. Se utils/getWeb3 for mer info. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instansiert kontrakt Når Web3 leverte. 12/16 this.instansiateContract() }) .catch(() => { console.log('Feil Å finne Web3.') })
} instantiateContract() {
/* * EKSEMPEL PÅ SMARTE KONTRAKTER
* * Normalt ville disse funksjonene fungere kalles i konteksten av en * statlig administrasjonsbibliotek, men For enkelhets skyld har jeg plassert dem her. */ 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) Bestemmer dette for senere, så 13/16 vi kan kjede funksjoner på SimpleStorage. var simpleStorageInstance Få kontoer. this.state.web3.eth.getAccounts((feil, kontoer) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instans this.setState({
address: instance.address }) Butikker a gitt verdi, 5 som standard. Tilbake simpleStorageInstance.set(x, {from: regnskaper[0]}) }).then((result) => { Få verdien fra kontrakten for å bevise at det fungerte. Tilbake simpleStorageInstance.get.call(accounts[0]) }).then((result) => { Oppdater tilstand med resultatet. Tilbake this.setState({ storageValue: result.c[0] }) }) })
} render() { returner ( <div className="App"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Truffle Boks</a> </nav> <hoved className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Klar til å gå!</h1> <p>Trøffelboksen din er installert og klar.</p> <h2>Eksempel på smartkontrakter</h2> <p>Hvis kontraktene dine ble samlet og migrert vellykket vil nedenfor vise en lagret verdi på 5 (som standard).</p> <p>Prøv å endre verdien som lagres på <strong>nettet 59</strong> av App.js.</p> <p>Den lagrede verdien er: {this.state.storageValue}</p> <p>Distribuert kontraktadresse: {this.state.address}</p> </div> <div> <inputtype="number" onChange= {this.changeValueHandle}/> <button onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} eksport standard App La til call of the contract set-metoden. Og vis adressen til kontrakten. 5. Åpne en ny konsoll og kjør npm run start 6. Åpne http://lcoalhost:3000 i nettleseren din for å se resultatene av kontrakten. 7. Sett verdien av kontrakten lagretData via sett- og inndataboksene. 8. Gå inn i trufle develop
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Returverdien til BigNUmber-typen oppnås, og verdien i c-arrayet settes lagredeData. Bruk nettleserpluginen Metamask for å samhandle med blokkjeden Referanse http://truffleframework.com/tutorials/pet-shop Deltakerne sender inn dokumenter Konkurransen spesifiserer bruk av Truffle for å utvikle smarte kontrakter, med Truffle versjon v4.1.5 som tilsvarer solcjs-versjonen v0.4.21. Utviklere må sende inn Truffle-prosjektets zip-pakke og tilhørende prosjektintroduksjonsdokumenter, som inkluderer minst Følgende: 16/16 1. Truffle Project grunnleggende filstruktur: Build Contracts Migrations Test package.json truffle.js truffle-config.js README.md // Beskrivelse av ingeniørdokumentasjon Ingen node_modules nødvendig 2. Må gi PPT- eller PDF-forklaring av hele prosjektproduktet, inkludert produktbakgrunnspresentasjon, produktets betydning, App nedlastingsadresse (valgfritt), introduksjon av produktbruksprosess. Påfølgende tredjepartsutviklere kan implementere kontraktsapplikasjoner og Chain-lommer i henhold til det kommende ThunderChain-veiledningsdokumentet Interaksjon. Dokumentasjon og verktøy soliditets-API Trøffeldokumentasjon Ganache tilbyr et grafisk grensesnitt for det native blokkjedemiljøet Zeppelin-Solidty er forpliktet til et sikkert og standardisert kontraktsrammeverk MetaMask tilbyr nettleser-plugins for nettlesere med blokkjede-miljø via RPC-tilkoblinger web3.js Ethereum-innkapslet JS for samhandling med blokkjeden Til slutt, pdf-dokumentnedlastingen:
Dev_Guide_zh.pdf
(373.55 KB, Antall nedlastinger: 6)
|