Declarație: Următorul este documentul "Ghidul Global de Dezvoltare a Concurenței Aplicațiilor Blockchain Xunlei" scris de compania Xunlei, de ce să folosiți documentul scris de compania Xunlei ca ghid de dezvoltare blockchain?
Thunder este de fapt un lanț privat construit cu contracte inteligente Ethereum, tehnologia este foarte matură și are cercetări aprofundate asupra tehnologiei blockchain, care au o semnificație călăuzitoare pentru dezvoltarea noastră blockchain.
După cum spune vorba, "trage inferențe dintr-un singur exemplu", putem dezvolta alte aplicații blockchain citind documentul ghidului de dezvoltare blockchain scris de Xunlei, mulțumită Xunlei.
Documentul spune:
1/16 Ghidul global de dezvoltare a concurenței aplicațiilor blockchain Thunder Dezvoltarea contractului în recomandarea liniei 1. Înainte de a scrie contracte inteligente, trebuie să ai o anumită înțelegere a fundamentelor blockchain-ului (atașat: Prezentare generală Ethereum). 2. Învață limbajul Solidity (API-ul Solidity). 3. Învață să folosești cadrul trufelor în combinație cu învățarea solidității. Folosiți trufele dezvoltate local Rulează contracte într-un mediu blockchain. 4. Învață și folosește zeppelin-solidty (un cadru contractual standardizat dedicat securității) și proiectează integrarea Modul contractual, date separate de contractele logice, controlul permisiunilor și logica de a lua în considerare logica upgrade-urilor. 5. Învață să interacționezi cu contractele folosind web3.js. Folosește pluginul Metamask și serviciul web cu blockchain Interacțiune. 6. Întrebări și răspunsuri pe forum: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Orice probleme întâmpinați poate fi anulată pe acest forum.) Îți vom răspunde în termen de 3 zile lucrătoare) Concepte de bază Blockchain Blockchain-ul este un sistem de calcul distribuit descentralizat, al cărui principal caracter este imuabilitatea permanentă a datelor, Nu poate fi falsificată și are un grad ridicat de deschidere, transparență și încredere. Tehnologiile de bază includ Algoritmul de Consens Byzantin Fault Tolerant Fault (PBFT), tehnologia criptării, tehnologia P2P etc. Tranzacție Blockchain-ul poate fi înțeles ca un sistem de baze de date de tranzacții partajat la nivel global. Orice software cu permisiune îl poate citi Ia date din rețeaua blockchain. Când este necesar să se modifice datele din rețeaua de blocuri, trebuie inițiată o pază Există cereri acceptate de nodurile bloc, care sunt denumite colectiv tranzacții în sistem. Tranzacțiile sunt tranzacționale și sunt trimise către blockchain, fie nu toate, fie toate executate. Un executiv de tranzacționare După ce linia este finalizată, aceasta este salvată permanent pe blockchain și nu poate fi modificată sau executată din nou. Tranzacțiile sunt inițiate și semnate de contul din sistem, iar prin criptografie, tranzacțiile pot fi reținute doar de cheia privată 2/16 Cineva inițiază asta, alții nu pot modifica și falsifica. Acest lucru asigură autenticitatea și siguranța tranzacției. Cont Există două tipuri de conturi în sistemul blockchain, unul extern și celălalt este contul contractual. Cont extern deținut Cheile tale publice și private unice, iar contul tău este controlat de această pereche de chei. Conturile futures au propriul lor cod, iar contul este creat de Controlul propriu al codului. Contul este identificat printr-o adresă, iar lungimea adresei este aceeași, iar nu există nicio diferență între cele două tipuri de conturi. Adresa contului extern este furnizată de Cheia publică este generată, iar adresa contractului folosește adresa de la care a fost creat contul contractual și numărul de tranzacții care au generat contul contractual (nonce) este produs. Contractele sunt stabilite prin adresa oficială, iar conturile obișnuite nu pot publica direct contractele. Combinația utilizatorului Trebuie revizuit oficial și lansat de Xunlei. În cadrul sistemului, nu există nicio diferență între cele două tipuri de conturi. Fiecare cont are 256 biți în interiorul sistemului Structura de stocare cheie-valoare până la 256 de biți se numește stocare. Fiecare cont are un sold numit Soldul, în Wei, poate fi modificat prin trimiterea unei tranzacții cu o valoare numerică către cont. Contract Un contract este un cont blockchain care stochează codul, iar apelul contractual se face prin trimiterea tranzacțiilor către acest cont. Când Limbajul de programare contractual anterior, mai popular, era Solidity. În prezent, concursul suportă doar înscrierea contractelor în limbajul Solidity. Contractul este împărțit în două părți: stocarea și funcția datelor, datele stochează starea contractului, iar funcția este contractul Interfața externă realizează interogarea datelor și modificarea stării prin apelarea funcțiilor. Scrie un contract printr-un limbaj de programare și obține bytecode-ul EVM după compilare. Prin trimiterea unei tranzacții către contul contractual, real Apel contractual actual. Gaz Gazul este unitatea de plată a blockchain-ului, iar când se creează o tranzacție, se specifică o anumită cantitate de gaz. Doamne Dacă este pentru a limita suma de calcul asupra tranzacției și pentru a plăti o taxă pentru executarea tranzacției. În timpul executării tranzacției, Gas Va fi consumat de o regulă stabilită de EVM. Prețul gazului este o valoare specificată de creatorul tranzacției și numărul de comisioane necesare pentru executarea tranzacției Suma este Gas_Price*Gaz. Tranzacția se încheie Dacă mai rămâne gaz, porțiunea rămasă este returnată la sugestia creatorului utilizatori. Dacă gazul este insuficient, execuția tranzacției va eșua, iar tranzacția nu va preveni atacurile de inundație pentru securitatea sistemului Taxa de manipulare nu este returnată. Cea mai mică unitate de preț a gazului este wei, 10^18 wei = 1 gram de lanț. Soliditate 3/16 Solidity este un limbaj de programare de nivel înalt conceput pentru contracte inteligente, care rulează pe EVM (Ethereum). Virtual Machine)。 Implementarea designului limbajului este influențată de C++/Python/JavaScript. Solidity este un limbaj puternic tipat care suportă moștenire, polimorfism, interfețe, abstractizare, biblioteci, tipuri de date personalizate și altele Sex. Solidity suportă programarea instrucțiunilor de asamblare, iar codul este compilat în bytecode și rulează pe EVM. Soliditatea este Cel mai popular limbaj de dezvoltare a contractelor inteligente este, de asemenea, cel recomandat și susținut de Thunder Contract Platform. Note: 1. Ethereum Virtual Machine este un mediu virtual pe Ethereum care oferă un mediu de execuție pentru contracte inteligente Mașină simulată. Platforma de concurență este compatibilă cu EVM, dar trebuie să respecte restricțiile de utilizare ale platformei oficiale. 2. Tipurile de conturi sunt împărțite în conturi externe (adrese obișnuite ale conturilor de tranzacționare) și conturi futures. Creează un contract Este procesul de trimiterea unei tranzacții către adresa de cont de destinație 0. 3. Concursul specifică utilizarea trufelor (trufe v4.1.5 soliditate v0.4.21) pentru a dezvolta combinații inteligente Platforma va verifica bytecode-ul conform codului sursă al documentului trimis de participant. , Dezvoltarea contractelor cu trufe Cadrul de dezvoltare solidă al contractelor inteligente truffle. Oferă un set complet de dezvoltare, depanare și editare Traducerea, implementarea și testarea mediilor on-premises. Poți folosi rapid comanda de deschidere a șablonului pe baza unor șabloane Generează structura contractuală corespunzătoare. Instalează Truffle NPM I -g trufe [root@opennode sandai]# versiunea trufelor Truffle v4.1.5 (nucleu: 4.1.5) Solidity v0.4.21 (solc-js) Începe 1. Inițializarea proiectului contractual cu trufe 4/16 mkdir simple-storage CD Simple-Storage Trufe Init 2. Creează un nou fișier de contract: Poți folosi Truffle pentru a crea contractul De asemenea, poți crea un fișier nou direct din linia de comandă SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol Pragma Solidity ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { myVariable = x;
} funcția get() randamente publice constante (uint) { returnează myVariable;
}
} 3. Adaugă scripturi de migrare: Poți folosi Truffle Create Migration 2_deploy_contract metodă de linie de comandă este adăugată și poți crea direct un fișier nou Migrații/2_deploy_contract.js 2_deploy_contract.js executarea migrației trufelor Ordinea liniilor este legată de numele fișierului, astfel încât mai multe scripturi de implementare trebuie denumite în ordine var SimpleStorage = artefacte.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Rulați contractul de compilare truffle, iar contractul compilat este în folderul de construcție. conform contractului Există un fișier json corespunzător care conține bytecode, abiCode etc. necesar pentru implementare 5. Editați truffle.js pentru a configura contractul de implementare a trufelor și conexiunea RPC pentru a interacționa cu blockchain-ul. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Activează mediul blockchain implicit Truffle pe consolă. Dezvoltarea trufelor Truffle Develop a început la
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 Chei private: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) AE6AE8E5CCBB04590405997EE2D52D2B330726137B87505 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 Dulceață fine, bogată în miere ⚠ Important ⚠: Acest mnemotehnic a fost creat pentru tu, pe Truffle. Nu este sigur. Asigură-te că nu îl folosești în producție 7/16 blockchain-uri, altfel riști să pierzi fonduri. trufa (dezvoltă)> Aceasta oferă un mediu blockchain nativ pentru ca Truffle să ruleze contracte, generând implicit 10 conturi, fiecare fiind generat Soldul inițial al contului este de 100 ether. Poți folosi și interfața grafică oferită de Ganache , trebuie să modifici portul la care este conectată configurația. 7. Executarea contractului de implementare a portului de migrare truffe într-o consolă nouă (sau în truffle dezvoltă consolă pentru a face migrare). 8. Testarea codului contractual cu developare de trufe. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).atunci(funcție(valoare) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Informații despre tranzacțiile de ieșire SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).atunci(funcție(valoare) {return value.toNumber()}); // 100 9. Testează contractul cu testul trufelor Folosește trufa creează testul SimpleStorage pentru a crea un nou sau Creează un fișier nou test/SimpleStorage.test.js direct. const SimpleStorage = artefacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("ar trebui să afirme adevărat", funcție(done)
{ var simpleStorage = SimpleStorage.deployed(); instanță var; simpleStorage.then(res => { instanță = res; return instance.get() }).atunci(valoare => { affirmt.equal('0', value.toNumber(), 'nu egal cu 0') }).atunci(() => { instanță.set(100) }).atunci(() => { return instance.get() }).atunci(valoare => { affirmt.equal('100', value.toNumber(), 'nu egal cu 100') }) finalizat(); }); }); În noua consolă, introduci trufa test ./test/SimpleStorage.test.js. 10. Contracte de test cu remix Contracte de tip put dezvoltate folosind truffle in remix pentru a modifica rapid Implementarea și invocarea contractului propus. Remix oferă un mediu de rulare pentru compilare pentru contracte și poate fi controlat de contract Tabelul poate vedea informațiile detaliate ale fiecărei tranzacții a contractului, cum ar fi parametrii de intrare și ieșire, datele metodei semnate, Hash-ul tranzacțiilor și alte informații. Suport pentru depanare. 1. Folosiți detaliile de compilare pentru a vedea detaliile de compilare a contractului. Inclusiv bytecode, abi și folosind web3.js implementare rapidă a metodei Drip Ah. 9/16 2. Folosește run pentru a crea un contract, iar consola poate vizualiza tranzacția care a creat contractul. Folosește Truffle Unbox pentru a crea aplicații interactive de contracte Pașii de mai sus creează un mediu contractual care poate fi compilat, implementat și depanat folosind basic truffle init. Mai jos Creează un proiect nou cu Truffle Unbox, care ne oferă un șablon de proiect cu trufe, în interior Unele dependențe de mediul de interacțiune cu aplicații contractuale. Poți verifica ofertele oficiale în Trufe Cutii Casete șablon. Următorul este șablonul React. 1. Proiect nou truf-react MKDIR TRUF-REACT 10/16 CD truf-react Trufă Unbox React Procesul unbox descarcă șablonul de extragere și efectuează operațiuni precum instalarea npm. 2. Configurarea truffle.js proiectului module.exports = { Vezi <http://truffleframework.com/docs/advanced/confi Guration> pentru a-ți personaliza trufa Configurație!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Potrivire orice ID de rețea
}
} }; 3. Începe o developare de trufe 4. Amendament la SRC/App.js import React, { Component } din 'react' import SimpleStorageContract de la '.. /construiesc/contracte/SimpleStorage.json' import getWeb3 de pe './utils/getWeb3' import './css/oswald.css' import './css/open-sans.css' import './css/pure-min.css' 11/16 import './App.css' contract const = exige('truffle-contract') const simpleStorage = contract(SimpleStorageContract) class App extinde Component { constructor(props) { super(recuzită) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Obține furnizorul de rețea și web3 exemplu. Vezi utils/getWeb3 pentru mai multe detalii informații. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instanțiază contractul Odată ce Web3 a fost oferit. 12/16 this.instantiateContract() }) .catch(() => { console.log('Eroare Găsind Web3.') })
} instantiateContract() {
/* * EXEMPLU DE CONTRACT INTELIGENT
* * În mod normal, aceste funcții ar să fie numit în contextul unui * bibliotecă de management al statului, dar Pentru comoditate, le-am pus aici. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Număr(eveniment.țintă.valoare) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Declar acest lucru pentru mai târziu, deci 13/16 putem lanța funcții pe SimpleStorage. var simpleStorageInstance Fă-ți conturi. this.state.web3.eth.getAccounts((eroare, conturi) => { simpleStorage.deployed().then((instanță) => { simpleStorageInstance = instanță this.setState({
address: instance.address }) Magazine a dată valoare, 5 implicit. Întoarcerea simpleStorageInstance.set(x, {from: relatări[0]}) }).atunci((rezultat) => { Obține valoarea din contract pentru a demonstra că a funcționat. Întoarcerea simpleStorageInstance.get.call(accounts[0]) }).atunci((rezultat) => { Starea actualizării cu rezultatul. Întoarcerea this.setState({ storageValue: result.c[0] }) }) })
} render() { Întoarcerea ( <div className="App"> <nav className="navbar meniu pur-meniu pur-orizontal"> 14/16 <a href="#" className="pure-menu-head-head">Truffle Cutie</a> </nav> <principal className="container"> Divizia < className="pur-g"> <div className="pure-u-1-1"> <h1>Gata de plecare!</h1> <p>Cutia ta de trufe este instalată și pregătită.</p> <h2>Exemplu de contract inteligent</h2> <p>Dacă contractele tale au fost compilate și migrate Cu succes, mai jos va arăta o valoare stocată de 5 (implicit).</p> <p>Încearcă să schimbi valoarea stocată <strong>online 59</strong> din App.js.</p> <p>Valoarea stocată este: {this.state.storageValue}</p> <p>Adresa contractului implementat: {aceasta.adresă.stat}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <butonul onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} exportă aplicația implicită Am adăugat metoda de apelare a setării contractului. Și arată adresa contractului. 5. Deschide o consolă nouă și rulează npm run start 6. Deschide http://lcoalhost:3000 în browser pentru a vedea rezultatele contractului. 7. Setează valoarea contractului stocat Data prin casetele de set și de intrare. 8. Intră în dezvoltarea trufelor
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Valoarea de returnare a tipului BigNUmber este obținută, iar valoarea din tabloul c este setată storedData. Folosește pluginul de browser Metamask pentru a interacționa cu blockchain-ul Referință http://truffleframework.com/tutorials/pet-shop Participanții depun documente Competiția specifică utilizarea Truffle pentru dezvoltarea contractelor inteligente, versiunea Truffle v4.1.5 corespunzând versiunii solcjs v0.4.21. Dezvoltatorii trebuie să trimită pachetul poștal al proiectului Truffle și documentele de introducere aferente, care includ cel puțin Următoarele: 16/16 1. Structura de bază a fișierelor Proiectului Truffle: Testul migrării contractelor de construcție package.json truffle.js truffle-config.js README.md // Descrierea documentației inginerești Nu este nevoie de node_modules 2. Trebuie să ofere o explicație PPT sau PDF a întregului produs al proiectului, inclusiv introducerea contextului produsului, semnificația produsului, Adresa de descărcare a aplicației (opțional), introducerea procesului de utilizare a produsului. Dezvoltatorii terți ulteriori pot implementa aplicații contractuale și buzunare Chain conform viitorului document de ghidare ThunderChain Interacțiune. Documentație și Instrumente API solidity Documentația trufelor Ganache oferă o interfață grafică pentru mediul blockchain nativ Zeppelin-Solidty este dedicată unui cadru contractual sigur și standardizat MetaMask oferă pluginuri pentru browsere cu un mediu blockchain prin conexiuni RPC web3.js JS încapsulat în Ethereum pentru interacțiunea cu blockchain-ul În final, descărcarea documentului pdf:
Dev_Guide_zh.pdf
(373.55 KB, Numărul de descărcări: 6)
|