Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 13646|Svar: 2

Guide för utveckling av blockkedjeapplikationer

[Kopiera länk]
Publicerad på 2018-05-03 15:55:28 | | |
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)
 Hyresvärd| Publicerad på 2018-05-03 16:01:58 |
Publicerad på 2018-05-08 14:25:10 |
Lärt mig, tack
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com