Dichiarazione: Quanto segue è il documento "Xunlei Global Blockchain Application Competition Development Guide" scritto da Xunlei Company, perché utilizzare il documento scritto da Xunlei Company come guida allo sviluppo blockchain?
Thunder è in realtà una catena privata costruita con smart contract Ethereum, la tecnologia è molto matura e ha una ricerca approfondita sulla tecnologia blockchain, che ha un significato guida per il nostro sviluppo blockchain.
Come dice il proverbio, "trai inferenze da un esempio", possiamo sviluppare altre applicazioni blockchain leggendo il documento guida allo sviluppo blockchain scritto da Xunlei, grazie a Xunlei.
Il documento recita:
1/16 Guida globale allo sviluppo delle competizioni per applicazioni blockchain Thunder Sviluppo contrattuale nella raccomandazione della linea 1. Prima di scrivere smart contract, è necessario avere una certa comprensione dei fondamenti della blockchain (allegato: Panoramica su Ethereum). 2. Impara il linguaggio Solidity (API Solidity). 3. Impara a usare il framework del tartufo in combinazione con l'apprendimento della solidità. Utilizzare il tartufo per sviluppare localmente Esegui contratti in un ambiente blockchain. 4. Apprendere e utilizzare zeppelin-solidty (un quadro contrattuale standardizzato dedicato alla sicurezza) e progettare l'integrazione Modalità contrattuale, separato dai dati e contratti logici, controllo della sicurezza dei permessi e considera la logica di aggiornamento. 5. Impara a interagire con i contratti usando web3.js. Usa il plugin Metamask e il servizio web con blockchain Interazione. 6. Domande e risposte nel forum: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Qualsiasi problema tu riscontrate può essere ripristinato su questo forum.) Ti risponderemo entro 3 giorni lavorativi) Concetti di base Blockchain La blockchain è un sistema di calcolo distribuito e decentralizzato, la cui caratteristica principale è l'immutabilità permanente dei dati, Non può essere falsificato e ha un alto grado di apertura, trasparenza e fiducia. Le tecnologie principali includono l'Algoritmo di Consenso Byzantino Fault Tolerance (PBFT), tecnologia di crittografia, tecnologia P2P, ecc. Transazione La blockchain può essere intesa come un sistema di database di transazioni condiviso a livello globale. Qualsiasi software con permesso può leggerlo Prendi dati dalla rete blockchain. Quando è necessario modificare i dati nella rete a blocchi, deve essere avviata una copertura Esistono richieste accettate dai nodi blocchi, che sono collettivamente chiamate transazioni nel sistema. Le transazioni sono transazionali e vengono inviate alla blockchain, non tutte o tutte eseguite. Un dirigente commerciale Dopo il completamento della riga, viene salvata permanentemente sulla blockchain e non può essere modificata o eseguita nuovamente. Le transazioni vengono avviate e firmate dall'account nel sistema e, tramite la crittografia, le transazioni possono essere detenute solo dalla chiave privata 2/16 Qualcuno lo avvia, altri non possono modificarlo e falsificarlo. Questo garantisce l'autenticità e la sicurezza della transazione. Account Nel sistema blockchain esistono due tipi di account: uno esterno e l'altro è il conto contratto. Conto esterno di proprietà Le tue chiavi pubbliche e private uniche, e il tuo account è controllato da questa coppia di chiavi. I conti futures hanno un proprio codice, e il conto viene creato da Controllo del codice proprio. L'account è identificato da un indirizzo, la lunghezza dell'indirizzo è la stessa e non c'è differenza tra i due tipi di conti. L'indirizzo dell'account esterno è fornito da La chiave pubblica viene generata, e l'indirizzo contrattuale utilizza l'indirizzo da cui è stato creato il conto contrattuale e il numero di transazioni che hanno creato il conto contrattuale (nonce) viene prodotta. I contratti sono inviati tramite l'indirizzo ufficiale e i conti ordinari non possono pubblicare direttamente i contratti. La combinazione dell'utente Deve essere ufficialmente revisionato e rilasciato da Xunlei. All'interno del sistema, non c'è differenza tra i due tipi di conti. Ogni account ha 256bit all'interno del sistema La struttura di archiviazione chiave-valore fino a 256 bit è chiamata storage. Ogni conto ha un saldo chiamato Il saldo, in Wei, può essere modificato inviando una transazione con un valore numerico al conto. Contratto Un contratto è un account blockchain che memorizza il codice, e la chiamata contrattuale viene effettuata inviando transazioni a questo account. Quando Il precedente linguaggio di programmazione a contratto più popolare era Solidity. Attualmente, il concorso supporta solo la presentazione di contratti in linguaggio Solidity. Il contratto è diviso in due parti: archiviazione e funzione dati, i dati memorizzano lo stato del contratto e la funzione è il contratto L'interfaccia esterna realizza query e modifica dello stato dei dati chiamando funzioni. Scrivi un contratto tramite un linguaggio di programmazione e ottieni il bytecode dell'EVM dopo la compilazione. Inviando una transazione al conto contrattuale, reali Chiamata contrattuale attuale. Gas Il gas è l'unità di pagamento della blockchain, e quando viene creata una transazione, verrà specificata una certa quantità di gas. Signore Se serve a limitare l'importo di calcolo sulla transazione e a pagare una commissione per l'esecuzione della transazione. Durante l'esecuzione della transazione, Gas Sarà consumata da una regola stabilita dall'EVM. Il prezzo del gas è un valore specificato dal creatore della transazione e il numero di commissioni necessarie per eseguire la transazione La quantità è Gas_Price*Gas. Transazione terminata Se rimane un gas residuo, la porzione rimanente viene restituita al suggerimento del creatore utenti. Se il gas è insufficiente, l'esecuzione della transazione fallirà e la transazione non riuscirà a prevenire attacchi flood per la sicurezza del sistema La tariffa di gestione non viene restituita. La minore unità di prezzo del gas è wei, 10^18 wei = 1 grammo di catena. Solidità 3/16 Solidity è un linguaggio di programmazione di alto livello progettato per smart contract, che gira su EVM (Ethereum). Macchina Virtuale)。 L'implementazione della progettazione del linguaggio è influenzata da C++/Python/JavaScript. Solidity è un linguaggio fortemente tipizzato che supporta eredità, polimorfismi, interfacce, astrazione, librerie, tipi di dati personalizzati e altro ancora Sesso. Solidity supporta la programmazione delle istruzioni assembly, e il codice viene compilato in bytecode ed eseguito sull'EVM. La solidità è Il linguaggio di sviluppo smart contract più popolare è anche quello raccomandato e supportato dalla Thunder Contract Platform. Note: 1. Ethereum Virtual Machine è un ambiente virtuale su Ethereum che fornisce un ambiente di esecuzione per smart contract Macchina simulata. La piattaforma di concorrenza è compatibile con EVM, ma deve rispettare le restrizioni d'uso della piattaforma ufficiale. 2. I tipi di conto sono suddivisi in conti esterni (indirizzi ordinari dei conti di trading) e conti futures. Crea un contratto È il processo di invio di una transazione all'indirizzo di destinazione 0. 3. La competizione specifica l'uso del tartufo (truffle v4.1.5 solidity v0.4.21) per sviluppare combinazioni intelligenti La piattaforma verificherà il bytecode in base al codice sorgente del documento inviato dal partecipante. , Sviluppare contratti con il tartufo Struttura di sviluppo solidità smart contract truffle. Fornisce un insieme completo di sviluppo, debugging e modifica Traduzione, distribuzione e test di ambienti on-premise. Puoi usare rapidamente il comando template unbox basandoti su alcuni template Genera la corrispondente struttura contrattuale. Installa Truffle NPM I -G Tartufo [root@opennode sandai]# versione al tartufo Truffle v4.1.5 (nucleo: 4.1.5) Solidity v0.4.21 (solc-js) Inizio 1. Inizializzare il progetto contrattuale con il tartufo 4/16 mkdir simple-storage CD Simple Storage Tartufo 2. Crea un nuovo file contrattuale: Puoi usare Truffle per creare il contratto Puoi anche creare un nuovo file direttamente dalla riga di comando di SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol Pragma Solidity ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { miaVariabile = x;
} Rendimenti pubblici costanti della funzione get() (uint) { return myVariable;
}
} 3. Aggiungi script di migrazione: Puoi usare Truffle Create Migration 2_deploy_contract metodo a riga di comando viene aggiunto e puoi anche creare direttamente un nuovo file Migrazioni/2_deploy_contract.js 2_deploy_contract.js l'esecuzione della migrazione del tartufo L'ordine delle righe è correlato al nome del file, quindi è necessario nominare più script di distribuzione in ordine var SimpleStorage = artefacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Esegui il contratto di compilazione truffle, e il contratto compilato è nella cartella build. per contratto È necessario un file json corrispondente contenente bytecode, abiCode, ecc. 5. Modifica il truffle.js per impostare il contratto di distribuzione del truffle e la connessione RPC per interagire con la blockchain. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Attiva l'ambiente blockchain predefinito di Truffle sulla console. Sviluppo del tartufo Truffle Develop è iniziata a
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 Chiavi private: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) AE6AE8E5CCBF04590405997EEe2D52D2B330726137B87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c6736790f1b8 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 dolce ricco di miele e liscio e crumble ⚠ Importante ⚠: Questo mnemonico è stato creato per tu per Tartufo. Non è sicuro. Assicurati di non usarlo in produzione 7/16 blockchain, altrimenti rischi di perdere fondi. Tartufo (sviluppare)> Questo fornisce un ambiente blockchain nativo per Truffle per eseguire contratti, generando 10 account di default, ognuno dei quali viene generato Il saldo iniziale del conto è di 100 ether. Puoi anche utilizzare l'interfaccia grafica fornita da Ganache , devi modificare la porta a cui è collegata la configurazione. 7. Eseguire il contratto di deployment della porta migrazione truffle in una nuova console (o in truffle sviluppa console per effettuare la migrazione). 8. Testare il codice contrattuale con lo sviluppo di tartufo. SimpleStorage.deployed().then(function(instance ){ritorno istanza.get.chiamata(); }).allora(funzione(valore) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Informazioni sulle transazioni di output SimpleStorage.deployed().then(function(instance ){ritorno istanza.get.chiamata(); }).allora(funzione(valore) {return value.toNumber()}); // 100 9. Testare il contratto con il test del tartufo Usa il test di creazione del tartufo SimpleStorage per creare un nuovo oppure Crea direttamente un nuovo test o SimpleStorage.test.js file. const SimpleStorage = artefacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("dovrebbe affermare vero", funzione(done)
{ var simpleStorage = SimpleStorage.deployed(); vari istance; simpleStorage.then(res => { istanza = res; return instance.get() }).allora(valore => { assert.equal('0', value.toNumber(), 'non uguale a 0') }).allora(() => { istanza.set(100) }).allora(() => { return instance.get() }).allora(valore => { assert.equal('100', value.toNumber(), 'non uguale a 100') }) done(); }); }); Nella nuova console, inserisci il test del tartufo ./test/SimpleStorage.test.js. 10. Contratti di prova con remix Contratti put sviluppati usando truffle in remix per modificare rapidamente Implementazione e invocazione del contratto proposto. Remix fornisce un ambiente runtime di compilazione per i contratti e può essere controllato dal contratto La tabella può vedere le informazioni dettagliate di ogni transazione del contratto, come parametri di input e output, dati di metodo firmato, Hash delle transazioni e altre informazioni. Supporto per il debug. 1. Utilizzare i dettagli di compilazione per vedere i dettagli della compilazione del contratto. Includendo bytecode, abi e utilizzando web3.js rapido utilizzo del metodo Drip Ah. 9/16 2. Usa run per creare un contratto, e la console può visualizzare la transazione che ha creato il contratto. Usa Truffle Unbox per creare app contrattuali interattive I passaggi sopra creano un ambiente contrattuale che può essere compilato, distribuito e debuggato usando il basic truffle init. Sotto Crea un nuovo progetto con Truffle Unbox, che ci fornisce un template di progetto Truffle, all'interno Alcune dipendenze nell'ambiente di interazione con le applicazioni contrattuali. Puoi dare un'occhiata alle offerte ufficiali nelle Tartufi Box Scatole modello. Di seguito è riportato il modello React. 1. Nuovo progetto truf-react MKDIR TRUF-REACT 10/16 CD truf-react Reazione del Truffle Unbox Il processo unbox scarica il template di estrazione ed esegue operazioni come l'installazione di npm. 2. Configurare i truffle.js del progetto module.exports = { Vedi <http://truffleframework.com/docs/advanced/confi Guration> per personalizzare il tuo Tartufo Configurazione!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Corrispondenza qualsiasi ID di rete
}
} }; 3. Inizia a sviluppare tartufi 4. Modifica al SRC/App.js import React, { Component } da 'react' importa SimpleStorageContract da '.. /costruiscono/contratti/SimpleStorage.json' importa getWeb3 da './utils/getWeb3' importa './css/oswald.css' importa './css/open-sans.css' importa './css/pure-min.css' 11/16 importazione './App.css' contratto const = richiedere ('contratto-tartufo') const simpleStorage = contratto (SimpleStorageContract) class App estende Component { constructor(props) { super(oggetti di scena) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Ottieni il provider di rete e il web3 Istanza. Vedi utils/getWeb3 per maggiori informazioni Informazioni. getWeb3 .allora(results => { this.setState({
web3: results.web3 }) Istanzia contratto Una volta che il web3 è stato garantito. 12/16 this.instantiateContract() }) .catch(() => { console.log('Errore Trovare Web3.') })
} instanceiateContract() {
/* * ESEMPIO DI SMART CONTRACT
* * Normalmente queste funzioni essere chiamato nel contesto di un * libreria di gestione statale, ma per comodità li ho messi qui. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Number(evento.target.valore) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Dichiaro questo per più tardi, quindi 13/16 possiamo concatenare funzioni su SimpleStorage. var simpleStorageInstance Fai conti. this.state.web3.eth.getAccounts((errore, conti) => { simpleStorage.deployed().then(instance) => { simpleStorageInstance = istanza this.setState({
address: instance.address }) Negozi a dato valore, 5 di default. Ritorno simpleStorageInstance.set(x, {da: conti[0]}) }).allora((risultato) => { Ottieni il valore dal contratto per dimostrare che funzionava. Ritorno simpleStorageInstance.get.call(accounts[0]) }).allora((risultato) => { Stato di aggiornamento con il risultato. Ritorno this.setState({ storageValue: result.c[0] }) }) })
} render() { ritorno ( <div className="App"> <navigazione className="navbar-puro-menu-puro-orizzontale"> 14/16 <a href="#" className="pure-menu-head-pur-link">Truffle Scatola</a> </nav> <principale className="container"> < divisione className="puro-g"> <div className="pure-u-1-1"> <h1>Pronti all'uso!</h1> La <p>tua Truffle Box è installata e pronta.</p> <h2>Esempio di Smart Contract</h2> <p>Se i tuoi contratti sono stati compilati e migrati Di seguito mostrerà un valore memorizzato di 5 (di default).</p> <p>Prova a cambiare il valore memorizzato <strong>online 59</strong> di App.js.</p> <p>Il valore immagazzinato è: {this.state.storageValue}</p> <p>Indirizzo del contratto distribuito: {questo.indirizzo.stato}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <button onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} esporta app predefinita Aggiunta la chiamata del metodo contrattuale. E mostra l'indirizzo del contratto. 5. Apri una nuova console e esegui npm run start 6. Apri il http://lcoalhost:3000 nel browser per vedere i risultati del contratto. 7. Impostare il valore del contratto Dati memorizzati tramite le caselle set e input. 8. Entra nello sviluppo del tartuolo
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Si ottiene il valore di ritorno del tipo BigNUmber, e il valore nell'array c viene fissato Dati memorizzati. Usa il plugin per browser Metamask per interagire con la blockchain Riferimento http://truffleframework.com/tutorials/pet-shop I partecipanti inviano documenti Il concorso specifica l'uso di Truffle per sviluppare smart contract, con la versione v4.1.5 di Truffle corrispondente alla versione solcjs v0.4.21. Gli sviluppatori devono inviare il pacchetto zip del progetto Truffle e i documenti di presentazione correlati, che includono, almeno, I seguenti: 16/16 1. Struttura File di Base del Progetto Truffle: Test di Migrazione dei Contratti di Build package.json truffle.js truffle-config.js README.md // Descrizione della documentazione ingegneristica Non è necessario node_modules 2. Necessità fornire una spiegazione PPT o PDF dell'intero prodotto del progetto, inclusi l'introduzione del contesto del prodotto, il significato del prodotto, Indirizzo di download dell'app (opzionale), introduzione al processo di utilizzo del prodotto. Gli sviluppatori terzi successivi potranno implementare applicazioni contrattuali e Chain pockets secondo il prossimo documento di guida ThunderChain Interazione. Documentazione e strumenti API di solidità Documentazione del tartufo Ganache fornisce un'interfaccia grafica per l'ambiente blockchain nativo Zeppelin-Solidty è impegnata in un quadro contrattuale sicuro e standardizzato MetaMask fornisce plugin per browser con un ambiente blockchain tramite connessioni RPC web3.js JS incapsulato in Ethereum per interagire con la blockchain Infine, il documento pdf scarica:
Dev_Guide_zh.pdf
(373.55 KB, Numero di download: 6)
|