Udtalelse: Følgende er dokumentet "Xunlei Global Blockchain Application Competition Development Guide" skrevet af Xunlei Company, hvorfor bruge dokumentet skrevet af Xunlei Company som en blockchain-udviklingsguide?
Thunder er faktisk en privat kæde bygget med Ethereum smart contracts, teknologien har været meget moden, og den har dybdegående forskning i blockchain-teknologi, hvilket har en ledende betydning for vores blockchain-udvikling.
Som man siger, "træk slutninger fra ét eksempel", kan vi udvikle andre blockchain-applikationer ved at læse blockchain-udviklingsvejledningen skrevet af Xunlei, takket være Xunlei.
Dokumentet lyder:
1/16 Thunder Global Blockchain Application Konkurrence Udviklingsguide Kontraktudvikling til linjeanbefaling 1. Før du skriver smarte kontrakter, skal du have en vis forståelse af blockchain-fundamenterne (vedhæftet: Ethereum Oversigt). 2. Lær solidity-sproget (solidity API). 3. Lær at bruge trøffel-rammen i kombination med soliditetslæring. Brug trøffel lokalt Kør kontrakter i et blockchain-miljø. 4. Lær og brug zeppelin-solidty (en standardiseret kontraktramme dedikeret til sikkerhed) og designintegration Kontrakttilstand, adskil data og logiske kontrakter, kontroller tilladelsessikkerhed, og overvej opgraderingslogik. 5. Lær at interagere med kontrakter ved hjælp af web3.js. Brug Metamask-plugin'et og webtjenesten med blockchain Interaktion. 6. Forum Q&A: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Eventuelle problemer, du støder på, kan tilbagegøres på dette forum.) Vi svarer dig inden for 3 arbejdsdage) Grundlæggende begreber Blockchain Blockchain er et decentraliseret distribueret computersystem, hvis hovedtræk er dataenes permanente uforanderlighed, Den kan ikke forfalskes og har en høj grad af åbenhed, gennemsigtighed og tillid. Kerneteknologierne omfatter Byzantine Fault Tolerant Consensus Algorithm (PBFT), krypteringsteknologi, P2P-teknologi osv. Transaktion Blockchain kan forstås som et globalt delt transaktionsdatabasesystem. Enhver software med tilladelse kan læse den Tag data fra blockchain-netværket. Når det er nødvendigt at ændre dataene i bloknetværket, skal der iværksættes en blanket Der accepteres anmodninger af bloknoder, som samlet kaldes transaktioner i systemet. Transaktioner er transaktionelle og indsendes til blockchainen, enten ikke alle eller alle udført. En handelsdirektør Når rækken er fuldført, gemmes den permanent på blockchainen og kan ikke ændres eller udføres igen. Transaktioner initieres og underskrives af kontoen i systemet, og gennem kryptografi kan transaktioner kun holdes af den private nøgle 2/16 Nogen initierer det, andre kan ikke ændre og smede. Dette sikrer transaktionens ægthed og sikkerhed. Beretning Der findes to typer konti i blockchain-systemet, den ene er ekstern og den anden er kontraktkontoen. Ekstern konto ejet Dine egne unikke offentlige og private nøgler, og din konto styres af dette nøglepar. Futures-konti har deres egen kode, og kontoen oprettes af Egen kodekontrol. Kontoen identificeres ved en adresse, og adresselængden er den samme, og der er ingen forskel mellem de to typer konti. Adressen på den eksterne konto angives af Den offentlige nøgle genereres, og kontraktadressen bruger den adresse, hvorfra kontraktkontoen blev oprettet, samt antallet af transaktioner, der oprettede kontraktkontoen (nonce) produceres. Kontrakter udsendes via den officielle adresse, og almindelige konti kan ikke offentliggøre kontrakter direkte. Brugerens kombination Den skal officielt gennemgås og udgives af Xunlei. Inden for systemet er der ingen forskel mellem de to typer konti. Hver konto har 256 bit inde i systemet Nøgleværdi-lagringsstrukturen op til 256 bit kaldes lagring. Hver konto har en saldo kaldet Saldoen i Wei kan ændres ved at sende en transaktion med numerisk værdi til kontoen. Kontrakt En kontrakt er en blockchain-konto, der gemmer koden, og kontraktkaldet foretages ved at sende transaktioner til denne konto. Hvornår Det tidligere mere populære kontraktprogrammeringssprog var Solidity. I øjeblikket understøtter konkurrencen kun kontraktindsendelse i Solidity-sproget. Kontrakten er opdelt i to dele, datalagring og funktion, dataene gemmer kontraktens tilstand, og funktionen er kontrakten Det eksterne interface realiserer dataforespørgsel og tilstandsændring ved at kalde funktioner. Skriv en kontrakt gennem et programmeringssprog, og hent EVM-bytekoden efter kompilering. Ved at sende en transaktion til kontraktkontoen, reel Nuværende kontraktopkald. Gas Gas er betalings-enheden i blockchainen, og når en transaktion oprettes, vil en bestemt mængde gas blive specificeret. Herre Hvis det er for at begrænse mængden af beregning på transaktionen og betale et gebyr for udførelsen af transaktionen. Under gennemførelsen af transaktionen blev Gas Den vil blive forbrugt af en regel, som EVM'en sætter. Gasprisen er en værdi, der er angivet af transaktionsskaberen og antallet af gebyrer, der kræves for at gennemføre transaktionen. Mængden er Gas_Price*Gas. Transaktion Slutter Hvis der er gas tilbage, returneres den resterende del til skaberens forslag brugere. Hvis gassen er utilstrækkelig, vil transaktionsudførelsen fejle, og transaktionen vil fejle for at forhindre oversvømmelsesangreb for systemets sikkerhed Håndteringsgebyret bliver ikke tilbagebetalt. Den mindste enhed af gasprisen er wei, 10^18 wei = 1 kæde gram. Soliditet 3/16 Solidity er et højniveau programmeringssprog designet til smarte kontrakter, der kører på EVM (Ethereum). Virtual Machine)。 Sprogdesignimplementeringen er påvirket af C++/Python/JavaScript. Solidity er et stærkt typet sprog, der understøtter arv, polymorfi, grænseflader, abstraktion, biblioteker, brugerdefinerede datatyper og mere Køn. Solidity understøtter assembly-instruktionsprogrammering, og koden kompileres til bytekode og kører på EVM'en. Soliditet er Det mest populære sprog til udvikling af smarte kontrakter er også det sprog, der anbefales og understøttes af Thunder Contract Platform. Noter: 1. Ethereum Virtual Machine er et virtuelt miljø på Ethereum, der tilbyder et runtime-miljø for smarte kontrakter Simuleret maskine. Konkurrenceplatformen er kompatibel med EVM, men den skal overholde brugsbegrænsningerne for den officielle platform. 2. Kontotyper er opdelt i eksterne konti (almindelige handelskontoadresser) og futureskonti. Opret en kontrakt Det er processen med at sende en transaktion til destinationskontoens adresse 0. 3. Konkurrencen specificerer brugen af trøffel (trøffel v4.1.5 soliditet v0.4.21) til at udvikle intelligente kombinationer Platformen vil verificere bytekoden i henhold til kildekoden til det dokument, deltageren indsender. , Udvikl kontrakter med trøffel Smart contract solidity development framework truffle. Det giver et komplet sæt af udvikling, fejlfinding og redigering Oversættelse, implementering og test af lokale miljøer. Du kan hurtigt bruge skabelon-kommandoen unbox baseret på nogle skabeloner Generer den tilsvarende kontraktstruktur. Installer trøffel npm i -g trøffel [root@opennode sandai]# trøffelversion Truffle v4.1.5 (kerne: 4.1.5) Soliditet v0.4.21 (solc-js) Begynd 1. Initiér kontraktprojektet med trøffel 4/16 mkdir simple-storage CD Simple-Storage trøffel init 2. Opret en ny kontraktfil: Du kan bruge trøffel til at oprette kontrakt Du kan også oprette en ny fil direkte fra SimpleStorage-kommandolinjen contract/SimpleStorage.sol SimpleStorage.sol pragma-soliditet ^0.4.21; contract SimpleStorage { uint myVariable; Function Set(uint x) public { myVariable = x;
} funktion get() konstante offentlige afkast (uint) { return myVariable;
}
} 3. Tilføj migrér-scripts: Du kan bruge truffle create migration 2_deploy_contract kommandolinjemetode tilføjes, og du kan også oprette en ny fil direkte Migrationer/2_deploy_contract.js 2_deploy_contract.js; udførelsen af trøffelmigrering Linjerækkefølgen er relateret til filnavnet, så flere deployment-scripts skal navngives i rækkefølge var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Kør truffle compile contract, og den kompilerede kontrakt ligger i build-mappen. Pr. kontrakt Der er en tilsvarende json-fil, der indeholder bytecode, abiCode osv., som kræves for deployment 5. Rediger truffle.js for at opsætte truffle-deployeringskontrakten og RPC-forbindelsen til at interagere med blockchainen. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Tænd for Truffles standard blockchain-miljø på konsollen. trøffeludvikling Trøffeludvikling startede ved
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øgler: (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) 8d5366123cb560BB606379f90a0BFD4769eEC0557F1B362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream honningrig, glat smuldret sød godbid ⚠ Vigtigt ⚠: Denne huskeregel blev skabt til du fra Truffle. Det er ikke sikkert. Sørg for, at du ikke bruger det i produktionen 7/16 Blockchains, ellers risikerer du at miste penge. trøffel(udvikle)> Dette giver et indbygget blockchain-miljø, hvor Truffle kan køre kontrakter, hvilket genererer 10 konti som standard, hver genereret Den oprindelige kontosaldo er 100 ether. Du kan også bruge det grafiske interface, som Ganache stiller til rådighed , skal du ændre porten, som konfigurationen er tilsluttet. 7. Udfør truffle migrate port deployment-kontrakten i en ny konsol (eller i truffle Udvikl konsol til at udføre migrer). 8. Test kontraktkoden med trøffeludvikling. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).så(funktion(værdi) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Outputtransaktionsinformation SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).så(funktion(værdi) {return value.toNumber()}); // 100 9. Test kontrakten med trøffeltest Brug trøffel skab test SimpleStorage til at oprette en ny eller Opret en ny fil, test/SimpleStorage.test.js direkte. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 det("bør hævde sand", funktion(færdigt)
{ var simpleStorage = SimpleStorage.deployed(); Var instance; simpleStorage.then(res => { instans = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'ikke lig med 0') }).så(() => { instance.set(100) }).så(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'ikke lig med 100') }) done(); }); }); I den nye konsol kommer trøffeltest ./test/SimpleStorage.test.js. 10. Testkontrakter med remix Put-kontrakter udviklet med trøffel i remix for hurtigt at modificere Implementering og påberåbelse af den foreslåede kontrakt. Remix tilbyder et kompilerings-runtime-miljø for kontrakter og kan styres af kontrakten Tabellen kan se detaljerede oplysninger om hver transaktion i kontrakten, såsom input- og outputparametre, signerede metodedata, transaktionshash og anden information. Support fejlfinding. 1. Brug kompileringsdetaljer til at se kontraktens sammensætningsdetaljer. Inklusive bytekode, abi og ved at anvende web3.js hurtig anvendelse af Drip Ah-metoden. 9/16 2. Brug run til at oprette en kontrakt, og konsollen kan se transaktionen, der skabte kontrakten. Brug Truffle Unbox til at skabe interaktive kontraktapps Ovenstående trin skaber et kontraktmiljø, der kan kompileres, implementeres og fejlsøges ved hjælp af grundlæggende truffle init. Nedenfor Opret et nyt projekt med Truffle Unbox, som giver os en trøffelprojektskabelon indeni Nogle kontraktapplikationsinteraktionsmiljøafhængigheder. Du kan tjekke de officielle tilbud i Truffle Boxes Skabelonbokse. Følgende er react-skabelonen. 1. Nyt projekt truf-react mkdir truf-react 10/16 cd truf-react trøffel unbox react Unbox-processen downloader udtræksskabelonen og udfører operationer som npm-installation. 2. Konfigurér projektets truffle.js module.exports = { Se <http://truffleframework.com/docs/advanced/confi Guration> for at tilpasse din trøffel konfiguration!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match Enhver netværks-ID
}
} }; 3. Start en trøffeludvikling 4. Ændring af 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 import './App.css' const kontrakt = kræve('trøffelkontrakt') const simpleStorage = kontrakt(SimpleStorageContract) class App udvider Component { konstruktør(props) { 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å netværksudbyder og web3 eksempel. Se utils/getWeb3 for mere info. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instansiat kontrakt Når Web3 har leveret. 12/16 this.instantiateContract() }) .catch(() => { console.log('Fejl Finding web3.') })
} instantiateContract() {
/* * EKSEMPEL PÅ SMART KONTRAKT
* * Normalt ville disse funktioner være kaldes i konteksten af en * statsligt forvaltningsbibliotek, men For nemheds skyld har jeg lagt 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) Erklærer dette for senere, så 13/16 vi kan kæde funktioner på SimpleStorage. var simpleStorageInstance Få konti. this.state.web3.eth.getAccounts((fejl, konti) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instans this.setState({
address: instance.address }) Butikker a givet værdi, 5 som standard. Tilbagevenden simpleStorageInstance.set(x, {from: konti[0]}) }).så((resultat) => { Få værdien fra kontrakten for at bevise, at det virkede. Tilbagevenden simpleStorageInstance.get.call(accounts[0]) }).så((resultat) => { Opdater status med resultatet. Tilbagevenden 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 Kasse</a> </nav> <hoved className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Klar til at gå!</h1> <p>Din trøffelæske er installeret og klar.</p> Smart <h2>Contract-eksempel</h2> <p>Hvis dine kontrakter blev samlet og migreret Succesfuldt vil nedenfor vise en lagret værdi af 5 (som standard).</p> <p>Prøv at ændre værdien, der er gemt online <strong> 59</strong> af App.js.</p> <p>Den gemte værdi er: {this.state.storageValue}</p> <p>Udrullet kontraktadresse: {this.state.address}</p> </div> <div> <inputtype="number" onChange= {this.changeValueHandle}/> <knap onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} eksporter standard App Tilføjede kaldet af kontraktsæt-metoden. Og vis adressen på kontrakten. 5. Åbn en ny konsol og kør npm run start 6. Åbn http://lcoalhost:3000 i din browser for at se resultatet af kontrakten. 7. Sæt værdien af den kontraktlagrede Data via sæt- og inputboksene. 8. Træd ind i trufle develop
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Returværdien af BigNUmber-typen opnås, og værdien i c-arrayet sættes lagrede Data. Brug browser-pluginet Metamask til at interagere med blockchainen Reference http://truffleframework.com/tutorials/pet-shop Deltagerne indsender dokumenter Konkurrencen specificerer brugen af Truffle til at udvikle smarte kontrakter, hvor Truffle-versionen v4.1.5 svarer til solcjs-versionen v0.4.21. Udviklere skal indsende Truffle-projektets zip-pakke og relaterede projektintroduktionsdokumenter, som mindst indeholder Følgende: 16/16 1. Truffle Project grundlæggende filstruktur: Build Contracts Migrations Test package.json truffle.js truffle-config.js README.md // Beskrivelse af ingeniørdokumentation Ingen node_modules nødvendig 2. Behov for at levere PPT- eller PDF-forklaring af hele projektproduktet, inklusive produktbaggrundsintroduktion, produktets betydning, App download-adresse (valgfrit), introduktion af produktbrugsprocessen. Efterfølgende tredjepartsudviklere kan implementere kontraktapplikationer og Chain pockets ifølge det kommende ThunderChain-vejledningsdokument Interaktion. Dokumentation & Værktøjer solidity API Trøffeldokumentation Ganache tilbyder en grafisk grænseflade til det native blockchain-miljø Zeppelin-Solidty er forpligtet til en sikker og standardiseret kontraktramme MetaMask tilbyder browser-plugins til browsere med et blockchain-miljø via RPC-forbindelser web3.js Ethereum-indkapslet JS til interaktion med blockchainen Endelig downloader pdf-dokumentet:
Dev_Guide_zh.pdf
(373.55 KB, Antal downloads: 6)
|