Aussage: Das Folgende ist das Dokument "Xunlei Global Blockchain Application Competition Development Guide", verfasst von der Xunlei Company. Warum verwenden Sie das von Xunlei Company verfasste Dokument als Blockchain-Entwicklungsleitfaden?
Thunder ist tatsächlich eine private Kette, die mit Ethereum-Smart-Contracts aufgebaut wurde, die Technologie ist sehr ausgereift, und es verfügt über tiefgehende Forschung zur Blockchain-Technologie, die eine entscheidende Bedeutung für unsere Blockchain-Entwicklung hat.
Wie das Sprichwort sagt: "Ziehe Schlussfolgerungen aus einem Beispiel", wir können weitere Blockchain-Anwendungen entwickeln, indem wir das von Xunlei verfasste Blockchain-Entwicklungsleitfaden lesen, dank Xunlei.
Das Dokument lautet:
1/16 Entwicklungsleitfaden für Thunder Global Blockchain-Anwendungswettbewerbe Vertragsentwicklung zur Linienempfehlung 1. Bevor Sie Smart Contracts schreiben, müssen Sie ein gewisses Verständnis der Blockchain-Grundlagen haben (angehängt: Ethereum Overview). 2. Lerne die Solidity-Sprache (Solidity API). 3. Lernen Sie, das Trüffel-Framework in Kombination mit Solidity Learning zu verwenden. Verwenden Sie Trüffel lokal Verträge in einer Blockchain-Umgebung ausführen. 4. Lernen und nutzen Sie zeppelin-solidty (ein standardisiertes Vertragsframework, das sich der Sicherheit widmet) und Designintegration Vertragsmodus, Trennung von Daten und logischen Verträgen, Kontrolle der Berechtigungssicherheit und Berücksichtigung der Upgrade-Logik. 5. Lernen Sie, mit Verträgen web3.js zu interagieren. Verwenden Sie das Metamask-Plugin und den Webservice mit der Blockchain Interaktion. 6. Forum Q&A: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Alle Probleme, die du bemerkst, können in diesem Forum rückgängig gemacht werden.) Wir antworten Ihnen innerhalb von 3 Werktagen.) Grundlegende Konzepte Blockchain Die Blockchain ist ein dezentrales, verteiltes Rechensystem, dessen Hauptmerkmal die dauerhafte Unveränderlichkeit von Daten ist, Es kann nicht geschmiedet werden und weist ein hohes Maß an Offenheit, Transparenz und Vertrauen auf. Zu den Kerntechnologien gehören der Byzantine Fault Tolerant Consensus Algorithm (PBFT), Verschlüsselungstechnologie, P2P-Technologie usw. Transaktion Blockchain kann als global geteiltes Datenbanksystem für Transaktionen verstanden werden. Jede Software mit Erlaubnis kann sie lesen Nehmen Sie Daten aus dem Blockchain-Netzwerk. Wenn es notwendig ist, die Daten im Blocknetzwerk zu ändern, muss ein Blanket eingeleitet werden Es gibt Anfragen, die von Blockknoten angenommen werden, die im System zusammenfassend als Transaktionen bezeichnet werden. Transaktionen sind transaktional und werden an die Blockchain übermittelt, entweder nicht alle oder alle durchgeführt. Ein Handelsmanager Nachdem die Zeile abgeschlossen ist, wird sie dauerhaft in der Blockchain gespeichert und kann nicht mehr geändert oder ausgeführt werden. Transaktionen werden vom Konto im System initiiert und signiert, und durch Kryptografie können Transaktionen nur über den privaten Schlüssel gehalten werden 2/16 Jemand initiiert es, andere können es nicht modifizieren und schmieden. Dies gewährleistet die Authentizität und Sicherheit der Transaktion. Konto Im Blockchain-System gibt es zwei Arten von Konten, eines extern und das andere das Vertragskonto. Externes Konto im Besitz Deine eigenen einzigartigen öffentlichen und privaten Schlüssel, und dein Konto wird von diesem Schlüsselpaar kontrolliert. Futures-Konten haben ihren eigenen Code, und das Konto wird erstellt von Eigene Code-Kontrolle. Das Konto wird durch eine Adresse identifiziert, die Adresslänge ist gleich, und es gibt keinen Unterschied zwischen den beiden Kontentypen. Die Adresse des externen Kontos wird bereitgestellt durch Der öffentliche Schlüssel wird generiert, und die Vertragsadresse verwendet die Adresse, von der aus das Vertragskonto erstellt wurde, sowie die Anzahl der Transaktionen, die das Vertragskonto erstellt haben (Nonce) wird produziert. Verträge werden über die offizielle Adresse bereitgestellt, und gewöhnliche Konten können Verträge nicht direkt veröffentlichen. Die Kombination des Anwenders Es muss offiziell von Xunlei überprüft und veröffentlicht werden. Innerhalb des Systems gibt es keinen Unterschied zwischen den beiden Kontentypen. Jedes Konto hat 256 Bit im System Die Schlüsselwert-Speicherstruktur bis zu 256 Bit wird als Speicher bezeichnet. Jedes Konto hat ein Guthaben namens Der Saldo in Wei kann geändert werden, indem eine Transaktion mit numerischem Wert an das Konto gesendet wird. Vertrag Ein Vertrag ist ein Blockchain-Konto, das den Code speichert, und der Vertragsaufruf erfolgt durch das Senden von Transaktionen an dieses Konto. Wenn Die vorherige, beliebtere Vertragsprogrammiersprache war Solidity. Derzeit unterstützt der Wettbewerb nur Vertragseinreichungen in der Solidity-Sprache. Der Vertrag ist in zwei Teile unterteilt: Datenspeicherung und Funktion, die Daten speichern den Zustand des Vertrags, und die Funktion ist der Vertrag Die externe Schnittstelle realisiert Datenabfrage und Zustandsänderung durch Aufruf von Funktionen. Schreibe einen Vertrag über eine Programmiersprache und erhalte den EVM-Bytecode nach der Kompilierung. Indem eine Transaktion an das Vertragskonto gesendet wird, real Aktueller Vertragsaufruf. Gas Gas ist die Zahlungseinheit der Blockchain, und wenn eine Transaktion erstellt wird, wird eine bestimmte Gasmenge angegeben. Herr Wenn es darum geht, die Berechnungsmenge der Transaktion zu begrenzen und eine Gebühr für die Ausführung der Transaktion zu zahlen. Während der Durchführung der Transaktion wurde Gas Es wird von einer vom EVM festgelegten Regel verbraucht. Der Gaspreis ist ein vom Transaktionsersteller und der Anzahl der Gebühren für die Ausführung der Transaktion festgelegten Wert Die Menge ist Gas_Price*Gas. Transaktion beendet Wenn ein Gas übrig bleibt, wird der verbleibende Teil an den Vorschlag des Erstellers zurückgegeben Nutzer. Wenn das Gas nicht ausreicht, schlägt die Ausführung der Transaktion fehl, und die Transaktion scheitert, um Überschwemmungsangriffe zur Systemsicherheit zu verhindern Die Bearbeitungsgebühr wird nicht zurückerstattet. Die kleinste Einheit des Gaspreises ist Wei, 10^18 wei = 1 Kettengramm. Solidität 3/16 Solidity ist eine hochrangige Programmiersprache, die für Smart Contracts entwickelt wurde und auf EVM (Ethereum) läuft. Virtual Machine)。 Die Implementierung des Sprachdesigns ist von C++/Python/JavaScript beeinflusst. Solidity ist eine stark typisierte Sprache, die Vererbung, Polymorphismus, Schnittstellen, Abstraktion, Bibliotheken, benutzerdefinierte Datentypen und mehr unterstützt Sex. Solidity unterstützt die Programmierung von Assemblerbefehlen, und der Code wird zu Bytecode kompiliert und läuft auf dem EVM. Solidität ist Die beliebteste Smart-Contract-Entwicklungssprache ist auch die Sprache, die von der Thunder Contract Platform empfohlen und unterstützt wird. Notizen: 1. Die Ethereum Virtual Machine ist eine virtuelle Umgebung auf Ethereum, die eine Laufzeitumgebung für Smart Contracts bereitstellt Simulierte Maschine. Die Wettbewerbsplattform ist mit EVM kompatibel, muss jedoch die Nutzungsbeschränkungen der offiziellen Plattform einhalten. 2. Kontotypen sind in externe Konten (gewöhnliche Handelskontoadressen) und Terminkonten unterteilt. Erstellen Sie einen Vertrag Es ist der Prozess, eine Transaktion an die Zielkontoadresse 0 zu senden. 3. Der Wettbewerb legt die Verwendung von Trüffel (Trüffel v4.1.5 Solidity v0.4.21) fest, um intelligente Kombinationen zu entwickeln Die Plattform überprüft den Bytecode gemäß dem Quellcode des vom Teilnehmer eingereichten Dokuments. , Verträge mit Trüffel entwickeln Smart-Contract-Solidity-Entwicklungsframework-Trüffel. Es bietet ein vollständiges Set an Entwicklung, Debugging und Bearbeitung Übersetzung, Bereitstellung und Testen von On-Premises-Umgebungen. Du kannst den Template-Befehl Unbox schnell verwenden, basierend auf einigen Vorlagen. Erstellen Sie die entsprechende Vertragsstruktur. Trüffel installieren NPM i -g Trüffel [root@opennode Sandai]# Trüffel-Version Truffle v4.1.5 (Kern: 4.1.5) Solidity v0.4.21 (solc-js) Beginnen 1. Initialisieren Sie das Vertragsprojekt mit Trüffel 4/16 mkdir simple-storage CD-Einfachspeicher Trüffel init 2. Erstelle eine neue Vertragsdatei: Du kannst Trüffel verwenden, um einen Vertrag zu erstellen Man kann auch eine neue Datei direkt über die SimpleStorage-Kommandozeile erstellen contract/SimpleStorage.sol SimpleStorage.sol pragma-Solidität ^0.4.21; contract SimpleStorage { uint myVariable; Function Set(uint x) public { myVariable = x;
} Funktion get() konstante öffentliche Rückgaben (uint) { return myVariable;
}
} 3. Migrierungsskripte hinzufügen: Du kannst Trüffel zur Erstellung von Migration verwenden 2_deploy_contract Kommandozeilen-Methode hinzugefügt wird, kann man auch direkt eine neue Datei erstellen Migrationen/2_deploy_contract.js 2_deploy_contract.js; die Ausführung der Trüffelmigration Die Zeilenreihenfolge steht im Zusammenhang mit dem Dateinamen, daher müssen mehrere Deployment-Skripte in der richtigen Reihenfolge benannt werden var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Führe den Trüffel-Kompile-Vertrag aus, und der kompilierte Vertrag befindet sich im Build-Ordner. pro Vertrag Es gibt eine entsprechende JSON-Datei mit Bytecode, abiCode usw., die für die Bereitstellung erforderlich ist 5. Bearbeiten Sie die truffle.js, um den Trüffel-Deployment-Vertrag und die RPC-Verbindung einzurichten, um mit der Blockchain zu interagieren. [root@localhost Opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Aktivieren Sie die Standard-Blockchain-Umgebung von Truffle auf der Konsole. Trüffelentwicklung Trüffelentwicklung begann bei
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 Schlüssel: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 AD91193c05875EF1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18b18bd f89de078917abc63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123cb560BB606379f90a0BFD4769eec0557F1B362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream Honigreiche, glatte, smulrige süße Leckerei ⚠ Wichtig ⚠: Diese Eselsbrücke wurde erstellt für du von Truffle. Es ist nicht sicher. Stellen Sie sicher, dass Sie es nicht in der Produktion verwenden 7/16 Blockchains, sonst riskieren Sie, Geld zu verlieren. Trüffel(entwickeln)> Dies bietet eine native Blockchain-Umgebung, in der Truffle Verträge ausführen kann, wodurch standardmäßig 10 Konten generiert werden, von denen jedes erstellt wird Der anfängliche Kontostand beträgt 100 Ether. Du kannst auch die von Ganache bereitgestellte grafische Oberfläche nutzen , du musst den Port ändern, an den die Konfiguration angeschlossen ist. 7. Führe den Truffle Migrate Port Deployment-Vertrag in einer neuen Konsole aus (oder in Truffle) Konsole entwickeln, um Migration durchzuführen). 8. Testen Sie den Vertragscode mit Trüffelentwicklung. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).dann(Funktion(Wert) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Ausgabetransaktionsinformationen SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).dann(Funktion(Wert) {return value.toNumber()}); // 100 9. Test den Vertrag mit Trüffeltest Verwenden Sie Trüffel erstellen Test SimpleStorage, um ein neues oder Erstelle direkt eine neue Datei, Test/SimpleStorage.test.js. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 es("sollte wahr behaupten", Funktion (erledigt)
{ var simpleStorage = SimpleStorage.deployed(); War Instance; simpleStorage.then(res => { Instanz = Res; return instance.get() }).dann(Wert => { assert.equal('0', value.toNumber(), 'nicht gleich 0') }).dann(() => { instance.set(100) }).dann(() => { return instance.get() }).dann(Wert => { assert.equal('100', value.toNumber(), 'nicht gleich 100') }) done(); }); }); In der neuen Konsole kommt Trüffeltest ./test/SimpleStorage.test.js ins Spiel. 10. Testverträge mit Remix Put-Verträge, die mit Trüffel im Remix entwickelt wurden, um schnell zu modifizieren Bereitstellung und Inanspruchnahme des vorgeschlagenen Vertrags. Remix bietet eine Compilation-Laufzeitumgebung für Verträge und kann vom Vertrag gesteuert werden Die Tabelle kann detaillierte Informationen zu jeder Transaktion des Vertrags sehen, wie Eingabe- und Ausgabeparameter, signierte Methodendaten, Transaktionshash und andere Informationen. Support für Debugging. 1. Verwenden Sie Compile Detail, um die Vertragszusammenstellungsdetails einzusehen. Einschließlich Bytecode, abi und web3.js schnelle Anwendung der Drip-Ah-Methode. 9/16 2. Verwenden Sie Run, um einen Vertrag zu erstellen, und die Konsole kann die Transaktion anzeigen, die den Vertrag erstellt hat. Verwenden Sie Truffle Unbox, um interaktive Vertrags-Apps zu erstellen Die obigen Schritte erstellen eine Vertragsumgebung, die mit grundlegendem Trüffel-Init kompiliert, bereitgestellt und debuggt werden kann. Unten Erstelle ein neues Projekt mit Truffle Unbox, das uns eine Trüffelprojekt-Vorlage bietet, im Inneren Einige Abhängigkeiten der Vertragsanwendungs-Interaktionsumgebung. Du kannst dir die offiziellen Angebote in Truffle Boxes ansehen Template-Boxen. Das Folgende ist die React-Vorlage. 1. Neues Projekt truf-react mkdir truf-react 10/16 cd truf-react Trüffel-Unbox reagieren Der Unbox-Prozess lädt die Extraktionsvorlage herunter und führt Operationen wie die npm-Installation durch. 2. Konfigurieren Sie die truffle.js des Projekts module.exports = { Siehe <http://truffleframework.com/docs/advanced/confi Guration> um Ihren Trüffel individuell zu gestalten Konfiguration!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match Jede Netzwerk-ID
}
} }; 3. Starte eine Trüffelentwicklung 4. Änderung des SRC/App.js import React, { Component } aus 'react' importiere SimpleStorageContract aus '.. /bauen/kontraktieren/SimpleStorage.json' importiere getWeb3 aus './utils/getWeb3' Importiere './CSS/oswald.css' Import './CSS/open-sans.css' Import './CSS/pure-min.css' 11/16 import './App.css' const contract = erfordern('Trüffel-Vertrag') const simpleStorage = Vertrag(SimpleStorageContract) class App erweitert Component { Konstrukteur(Props) { super(Requisiten) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Netzwerkanbieter und Web3 erhalten Instanz. Siehe utils/getWeb3 für mehr Informationen Info. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instanzierter Vertrag Sobald Web3 bereitgestellt hat. 12/16 this.instanziateContract() }) .catch(() => { console.log('Fehler Web3 finden.') })
} instantiateContract() {
/* * BEISPIEL FÜR SMARTE VERTRÄGE
* * Normalerweise würden diese Funktionen im Kontext von einem * Staatliche Verwaltungsbibliothek, aber Der Bequemlichkeit halber habe ich sie hier platziert. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Nummer(event.target.value) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Ich deklariere das für später, also 13/16 wir können Funktionen auf SimpleStorage verketten. var simpleStorageInstance Erstellen Sie Konten. this.state.web3.eth.getAccounts((fehler, Konten) => { simpleStorage.deployed().then(instance) => { simpleStorageInstance = Instanz this.setState({
address: instance.address }) Lager ein Der Wert wird standardmäßig 5 gegeben. Rückgabe simpleStorageInstance.set(x, {from: Konten[0]}) }).dann((Ergebnis) => { Erfassen Sie den Wert aus dem Vertrag, um zu beweisen, dass es funktioniert hat. Rückgabe simpleStorageInstance.get.call(accounts[0]) }).dann((Ergebnis) => { Aktualisieren des Zustands mit dem Ergebnis. Rückgabe this.setState({ storageValue: result.c[0] }) }) })
} render() { Rückkehr ( <div className="App"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Truffle Box</a> </nav> <main className="container"> <Div className="pure-g"> <div className="pure-u-1-1"> <h1>Bereit!</h1> <p>Ihre Trüffelbox ist installiert und bereit.</p> <h2>Beispiel Smart Contract</h2> <p>Wenn deine Verträge zusammengestellt und migriert wurden erfolgreich zeigt unten einen gespeicherten Wert von 5 (standardmäßig).</p> <p>Versuche, den im Internet gespeicherten Wert zu ändern.<strong> 59</strong> von App.js.</p> <p>Der gespeicherte Wert ist: {this.state.storageValue}</p> <p>Eingesetzte Vertragsadresse: {this.state.address}</p> </div> <div> <Eingabetyp="nummer" aufÄnderung= {this.changeValueHandle}/> <button onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} Export-Standard-App Ich habe den Aufruf der Contract Set Methode hinzugefügt. Und zeigen Sie die Adresse des Vertrags. 5. Eine neue Konsole öffnen und npm run start 6. Öffnen Sie die http://lcoalhost:3000 in Ihrem Browser, um die Ergebnisse des Vertrags zu sehen. 7. Setzen Sie den Wert des gespeicherten Vertrags über die Set- und Eingabeboxen fest. 8. Tritt in trufle develop ein
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Der Rückgabewert des BigNUmber-Typs wird erhalten, und der Wert im c-Array wird gesetzt gespeicherte Daten. Verwenden Sie das Browser-Plugin Metamask, um mit der Blockchain zu interagieren Referenz http://truffleframework.com/tutorials/pet-shop Teilnehmer reichen Dokumente ein Der Wettbewerb spezifiziert die Verwendung von Truffle zur Entwicklung von Smart Contracts, wobei die Truffle-Version v4.1.5 der solcjs-Version entspricht v0.4.21. Entwickler müssen das Truffle-Projekt-Zip-Paket und zugehörige Projekteinführungsdokumente einreichen, die mindestens Folgendes: 16/16 1. Truffle Project Grunddateistruktur: Build Contracts Migrations Test package.json truffle.js truffle-config.js README.md // Beschreibung der technischen Dokumentation Keine node_modules erforderlich 2. Es muss eine PPT- oder PDF-Erklärung des gesamten Projektprodukts bereitgestellt werden, einschließlich Produkthintergrund, Produktbedeutung, App-Download-Adresse (optional), Einführung des Produktnutzungsprozesses. Nachfolgende Drittentwickler können gemäß dem kommenden ThunderChain-Leitdokument Vertragsanwendungen und Chain-Pockets implementieren Interaktion. Dokumentation & Werkzeuge Soliditäts-API Trüffeldokumentation Ganache bietet eine grafische Oberfläche für die native Blockchain-Umgebung Zeppelin-Solidty verpflichtet sich zu einem sicheren und standardisierten Vertragsrahmen MetaMask stellt Browser-Plugins für Browser mit einer Blockchain-Umgebung über RPC-Verbindungen bereit web3.js von Ethereum gekapseltes JS zur Interaktion mit der Blockchain Abschließend der PDF-Dokument-Download:
Dev_Guide_zh.pdf
(373.55 KB, Anzahl der Downloads: 6)
|