Uttalande: Följande är dokumentet "Xunlei Global Blockchain Application Competition Development Guide" skrivet av Xunlei Company, varför använda dokumentet skrivet av Xunlei Company som en blockchain-utvecklingsguide?
Thunder är faktiskt en privat kedja byggd med Ethereum smarta kontrakt, teknologin har varit mycket mogen och har djupgående forskning på blockkedjeteknik, vilket har avgörande betydelse för vår blockkedjeutveckling.
Som ordspråket säger, "dra slutsatser från ett exempel", kan vi utveckla andra blockkedjeapplikationer genom att läsa blockkedjeutvecklingsguiden skriven av Xunlei, tack vare Xunlei.
Dokumentet lyder:
1/16 Thunder Global Blockchain Application Competition Development Guide Kontraktsutveckling till linjerekommendation 1. Innan du skriver smarta kontrakt behöver du ha en viss förståelse för blockkedjegrunderna (bifogat: Ethereum Overview). 2. Lär dig solidity-språket (solidity API). 3. Lär dig använda tryffelramverket i kombination med fasthetsinlärning. Använd tryffel lokalt Kör kontrakt i en blockkedjemiljö. 4. Lär dig och använd zeppelin-solidty (ett standardiserat kontraktsramverk dedikerat till säkerhet) och designintegration Kontraktsläge, separera data och logiska kontrakt, kontrollera behörighetssäkerhet och överväg uppgraderingslogik. 5. Lär dig att interagera med kontrakt med hjälp av web3.js. Använd Metamask-pluginet och webbtjänsten med blockkedjan Interaktion. 6. Forum Q&A: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Alla problem du stöter på kan återställas på detta forum.) Vi svarar dig inom 3 arbetsdagar) Grundläggande begrepp Blockkedja Blockkedjan är ett decentraliserat distribuerat datorsystem, vars huvudfunktion är datans permanenta oföränderlighet, Den kan inte förfalskas och har en hög grad av öppenhet, transparens och förtroende. Kärnteknologierna inkluderar Byzantine Fault Tolerant Consensus Algorithm (PBFT), krypteringsteknologi, P2P-teknik, etc. Transaktion Blockchain kan förstås som ett globalt delat transaktionsdatabassystem. Alla program med tillstånd kan läsa den Ta data från blockkedjenätverket. När det är nödvändigt att ändra data i blocknätverket måste en blanket initieras Det finns förfrågningar som tas emot av blocknoder, vilka gemensamt kallas transaktioner i systemet. Transaktioner är transaktionella och skickas till blockkedjan, antingen inte alla eller alla utförs. En handelschef När raden är klar sparas den permanent i blockkedjan och kan inte ändras eller köras igen. Transaktioner initieras och signeras av kontot i systemet, och genom kryptografi kan transaktioner endast hållas av den privata nyckeln 2/16 Någon initierar det, andra kan inte modifiera och smida. Detta säkerställer äktheten och säkerheten i transaktionen. Kontot Det finns två typer av konton i blockkedjesystemet, det ena är externt och det andra är kontraktskontot. Externt konto ägt Dina egna unika publika och privata nycklar, och ditt konto styrs av detta nyckelpar. Terminskonton har sin egen kod, och kontot skapas av Egen kodkontroll. Kontot identifieras med en adress, adresslängden är densamma, och det finns ingen skillnad mellan de två typerna av konton. Adressen till det externa kontot tillhandahålls av Den publika nyckeln genereras, och kontraktsadressen använder adressen från vilken kontraktskontot skapades samt antalet transaktioner som skapade kontraktskontot (Nonce) produceras. Kontrakt distribueras via den officiella adressen, och vanliga konton kan inte direkt publicera kontrakt. Användarens kombination Den måste officiellt granskas och släppas av Xunlei. Inom systemet finns ingen skillnad mellan de två typerna av konton. Varje konto har 256 bitar i systemet Nyckelvärdeslagringsstrukturen upp till 256 bitar kallas lagring. Varje konto har ett saldo som kallas Saldo i Wei kan ändras genom att skicka en transaktion med numeriskt värde till kontot. Kontrakt Ett kontrakt är ett blockkedjekonto som lagrar koden, och kontraktsanropet görs genom att skicka transaktioner till detta konto. När Det tidigare mer populära kontraktsprogrammeringsspråket var Solidity. För närvarande stödjer tävlingen endast kontraktsinlämning på Solidity-språket. Kontraktet är uppdelat i två delar, datalagring och funktion, datan lagrar kontraktets tillstånd, och funktionen är kontraktet Det externa gränssnittet realiserar dataförfrågan och tillståndsändring genom att anropa funktioner. Skriv ett kontrakt via ett programmeringsspråk och hämta EVM-bytekoden efter kompilering. Genom att skicka en transaktion till kontraktskontot, real Nuvarande kontraktssamtal. Gas Gas är blockkedjans betalningsenhet, och när en transaktion skapas specificeras en viss mängd gas. Herre Om det är för att begränsa mängden beräkning på transaktionen och betala en avgift för genomförandet av transaktionen. Under genomförandet av transaktionen Gas Den kommer att konsumeras av en regel som EVM:n sätter upp. Gaspriset är ett värde som anges av transaktionsskaparen och antalet avgifter som krävs för att genomföra transaktionen Mängden är Gas_Price*Gas. Transaktionen avslutas Om det finns gas kvar återlämnas den återstående delen till skaparens förslag användare. Om gasen är otillräcklig kommer transaktionsexekveringen att misslyckas, och transaktionen kommer att misslyckas för att förhindra översvämningsattacker för systemsäkerheten Hanteringsavgiften återbetalas inte. Den minsta enheten av gaspriset är wei, 10^18 wei = 1 kedjegram. Soliditet 3/16 Solidity är ett högnivåprogrammeringsspråk designat för smarta kontrakt och körs på EVM (Ethereum). Virtual Machine)。 Språkdesignens implementation är påverkad av C++/Python/JavaScript. Solidity är ett starkt typat språk som stödjer arv, polymorfism, gränssnitt, abstraktion, bibliotek, anpassade datatyper och mer Sex. Solidity stöder assemblerinstruktionsprogrammering, och koden kompileras till bytekod och körs på EVM:n. Soliditet är Det mest populära språket för utveckling av smarta kontrakt är också det språk som rekommenderas och stöds av Thunder Contract Platform. Anteckningar: 1. Ethereum Virtual Machine är en virtuell miljö på Ethereum som tillhandahåller en runtime-miljö för smarta kontrakt Simulerad maskin. Tävlingsplattformen är kompatibel med EVM, men måste följa de officiella plattformens användningsrestriktioner. 2. Kontotyper delas in i externa konton (vanliga handelskontoadresser) och terminskonton. Skapa ett kontrakt Det är processen att skicka en transaktion till destinationskontoadressen 0. 3. Tävlingen specificerar användningen av tryffel (tryffel v4.1.5 solidity v0.4.21) för att utveckla intelligenta kombinationer Plattformen verifierar bytekoden enligt källkoden till dokumentet som deltagaren lämnat in. , Utveckla kontrakt med tryffel Truffle för utveckling av soliditetsramverk för smarta kontrakt. Den erbjuder en komplett uppsättning utveckling, felsökning och redigering Översättning, distribution och testning av lokala miljöer. Du kan snabbt använda mallkommandot unbox baserat på vissa mallar Generera motsvarande kontraktsstruktur. Installera tryffel npm i -g tryffel [root@opennode Sandai]# tryffelversion Truffle v4.1.5 (kärna: 4.1.5) Soliditet v0.4.21 (solc-js) Börja 1. Initiera kontraktsprojektet med tryffel 4/16 mkdir simple-storage CD Enkellagring tryffel init 2. Skapa en ny kontraktsfil: Du kan använda tryffel för att skapa kontrakt Du kan också skapa en ny fil direkt från SimpleStorage-kommandoraden contract/SimpleStorage.sol SimpleStorage.sol pragmasoliditet ^0.4.21; contract SimpleStorage { uint myVariable; Function Set(uint x) public { myVariabel = x;
} funktion get() konstanta publika avkastningar (uint) { returnera myVariable;
}
} 3. Lägg till migreringsskript: Du kan använda truffle create migration 2_deploy_contract kommandoradsmetod läggs till, och du kan också direkt skapa en ny fil Migrationer/2_deploy_contract.js 2_deploy_contract.js; utförandet av tryffel migrerar Radordningen är relaterad till filnamnet, så flera distributionsskript måste namnges i ordning var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Kör tryffelkompileringskontraktet, och det kompilerade kontraktet finns i byggmappen. per kontrakt Det finns en motsvarande json-fil som innehåller bytecode, abiCode, etc. som krävs för distribution 5. Redigera truffle.js för att ställa in tryffeldistributionskontraktet och RPC-anslutningen för att interagera med blockkedjan. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Slå på Truffles standard-blockkedjemiljö på konsolen. tryffelutveckling Truffle Develop startade vid
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 Privata nycklar: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) AE6AE8e5CCBFb04590405997ee2D52D2B330726137B87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 ad91193c05875ef1 (3) c88B703fb08cbea894B6aeff5A544fb92E78A18E19814CD8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18BD f89DE078917ABC63 (6) 82d052c865f5763aad42add4385692766c00d3d88a2d062d3 6b2bae914d58b8c8 (7) AA3680D5D48A8283413F7A108367C7299Ca73F553735860a 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123cb560BB606379f90a0BFD4769eEC0557F1B362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream Honungsrik, slät smulad söt godsak ⚠ Viktigt ⚠: Denna minnesregel skapades för du av Truffle. Det är inte säkert. Se till att du inte använder det i produktionen 7/16 blockkedjor, annars riskerar du att förlora pengar. tryffel(utveckla)> Detta ger en inbyggd blockkedjemiljö för Truffle att köra kontrakt, vilket genererar 10 konton som standard, var och en genererad Det initiala kontosaldot är 100 ether. Du kan också använda det grafiska gränssnittet som Ganache tillhandahåller , du behöver modifiera porten som konfigurationen är ansluten till. 7. Exekverar truffle migrate port-distributionskontraktet i en ny konsol (eller i truffle utveckla konsol för att utföra migrering). 8. Testa kontraktskoden med tryffelutveckling. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).då(funktion(värde) {returnera värde.tillNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Utdata från transaktionsinformation SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).då(funktion(värde) {return value.toNumber()}); // 100 9. Testa kontraktet med tryffeltest Använd tryffel skapa test SimpleStorage för att skapa en ny eller Skapa en ny filtest/SimpleStorage.test.js direkt. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 den("bör hävda sann", funktion(klart)
{ var simpleStorage = SimpleStorage.deployed(); var instance; simpleStorage.then(res => { instans = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'inte lika med 0') }).då(() => { instance.set(100) }).då(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'inte lika med 100') }) done(); }); }); I den nya konsolen kommer tryffeltest ./test/SimpleStorage.test.js. 10. Testa kontrakt med remix Put-kontrakt utvecklade med tryffel i remix för att snabbt modifiera Utrullning och åberopande av det föreslagna kontraktet. Remix tillhandahåller en kompileringsmiljö för kontrakt och kan styras av kontraktet Tabellen kan se detaljerad information om varje transaktion i kontraktet, såsom in- och utdataparametrar, signerade metoddata, transaktionshash och annan information. Stöd felsökning. 1. Använd kompileringsdetaljer för att se kontraktssammanställningsdetaljerna. Inklusive bytekod, abi och använder web3.js snabb användning av Drip Ah-metoden. 9/16 2. Använd kör för att skapa ett kontrakt, och konsolen kan se transaktionen som skapade kontraktet. Använd Truffle Unbox för att skapa interaktiva kontraktsappar Ovanstående steg skapar en kontraktsmiljö som kan kompileras, distribueras och felsökas med grundläggande truffle init. Nedan Skapa ett nytt projekt med Truffle Unbox, som ger oss en tryffelprojektmall, inuti Vissa kontraktsapplikationsinteraktionsberoenden. Du kan kolla in de officiella erbjudandena i Truffle Boxes Mallrutor. Följande är react-mallen. 1. Nytt projekt truf-react mkdir truf-react 10/16 cd truf-react tryffel unbox-reaktion Avpackningsprocessen laddar ner extraktionsmallen och utför operationer som npm-installation. 2. Konfigurera projektets truffle.js module.exports = { Se <http://truffleframework.com/docs/advanced/confi Guration> för att anpassa din tryffel konfiguration!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match Vilket nätverks-ID som helst
}
} }; 3. Starta en tryffelframkallning 4. Ändring av SRC/App.js importera React, { Component } från 'react' importera SimpleStorageContract från '.. /bygg/kontrakterar/SimpleStorage.json' importera getWeb3 från './utils/getWeb3' importera './css/oswald.css' importera './css/open-sans.css' Importera './CSS/pure-min.css' 11/16 importera './App.css' const kontrakt = kräva ('tryffelkontrakt') const simpleStorage = kontrakt(SimpleStorageContract) class App utvidgar Component { konstruktör(props) { super(rekvisita) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Skaffa nätverksleverantör och web3 exempel. Se utils/getWeb3 för mer info. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instansiat kontrakt När Web3 tillhandahöll. 12/16 this.instansiateContract() }) .catch(() => { console.log('Fel Hitta Web3.') })
} instantiateContract() {
/* * EXEMPEL PÅ SMARTA KONTRAKT
* * Normalt skulle dessa funktioner vara kallas i kontexten av en * Statens förvaltningsbibliotek, men För bekvämlighetens skull har jag lagt dem här. */ 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) Bestämmer detta för senare så 13/16 vi kan kedja funktioner på SimpleStorage. var simpleStorageInstance Skaffa konton. this.state.web3.eth.getAccounts((error, konton) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instans this.setState({
address: instance.address }) Butiker a Givet värde, 5 som standard. Återkomsten simpleStorageInstance.set(x, {from: konton[0]}) }).då((resultat) => { Få ut värdet från kontraktet för att bevisa att det fungerade. Återkomsten simpleStorageInstance.get.call(accounts[0]) }).då((resultat) => { Uppdatera tillstånd med resultatet. Återkomsten this.setState({ storageValue: result.c[0] }) }) })
} render() { återvända ( <div className="App"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Truffle Låda</a> </nav> <main className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Redo att köra!</h1> <p>Din tryffellåda är installerad och redo.</p> <h2>Exempel på smart kontrakt</h2> <p>Om dina kontrakt har samlats ihop och migrerats framgångsrikt kommer nedan att visa ett lagrat värde på 5 (som standard).</p> <p>Försök ändra värdet som lagras online <strong> 59</strong> av App.js.</p> <p>Det lagrade värdet är: {this.state.storageValue}</p> <p>Distribuerad kontraktsadress: {this.state.address}</p> </div> <div> <inmatningstyp="nummer" påÄndra= {this.changeValueHandle}/> <knapp påKlick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} exportera standardapp Lade till anropet för kontraktsmetoden. Och visa adressen till kontraktet. 5. Öppna en ny konsol och kör npm run start 6. Öppna http://lcoalhost:3000 i din webbläsare för att se resultatet av kontraktet. 7. Sätt värdet på kontraktet lagrad via set- och inmatningsrutorna. 8. Gå in i störe develop
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Returvärdet av typen BigNUmber erhålls, och värdet i c-arrayen sätts lagrad Data. Använd webbläsarpluginet Metamask för att interagera med blockkedjan Referens http://truffleframework.com/tutorials/pet-shop Deltagarna skickar in dokument Tävlingen specificerar användningen av Truffle för att utveckla smarta kontrakt, där Truffle version v4.1.5 motsvarar solcjs-versionen v0.4.21. Utvecklare måste skicka in Truffle-projektets zip-paket och relaterade introduktionsdokument, som åtminstone inkluderar Följande: 16/16 1. Truffle Project grundläggande filstruktur: Byggkontraktsmigreringstest package.json truffle.js truffle-config.js README.md // Beskrivning av ingenjörsdokumentation Ingen node_modules krävs 2. Behöver tillhandahålla PPT- eller PDF-förklaring av hela projektets produkt, inklusive produktbakgrund, produktens betydelse, App Download address (valfritt), introduktion av produktanvändningsprocessen. Efterföljande tredjepartsutvecklare kan implementera kontraktsansökningar och Chain-fickor enligt det kommande ThunderChain-vägledningsdokumentet Interaktion. Dokumentation & Verktyg soliditets-API Tryffeldokumentation Ganache tillhandahåller ett grafiskt gränssnitt för den inbyggda blockkedjemiljön Zeppelin-Solidty är engagerade i en säker och standardiserad kontraktsram MetaMask tillhandahåller webbläsartillägg för webbläsare med blockkedjemiljö via RPC-anslutningar web3.js Ethereum-kapslat JS för interaktion med blockkedjan Slutligen, pdf-dokumentnedladdningen:
Dev_Guide_zh.pdf
(373.55 KB, Antal nedladdningar: 6)
|