Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 13646|Svare: 2

Guide for utvikling av blokkjedeapplikasjoner

[Kopier lenke]
Publisert på 03.05.2018 15:55:28 | | |
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)
 Vert| Publisert på 03.05.2018 16:01:58 |
Publisert på 08.05.2018 14:25:10 |
Lært, takk
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com