Lausunto: Seuraava on Xunlei Companyn kirjoittama "Xunlei Global Blockchain Application Competition Development Guide" -dokumentti, miksi käyttää Xunlei Companyn laatimaa dokumenttia lohkoketjukehityksen oppaana?
Thunder on itse asiassa yksityinen ketju, joka on rakennettu Ethereum-älysopimuksilla, teknologia on ollut hyvin kypsää, ja sillä on syvällistä tutkimusta lohkoketjuteknologiasta, jolla on ohjaava merkitys lohkoketjun kehityksessämme.
Kuten sanonta kuuluu, "tee johtopäätöksiä yhdestä esimerkistä", voimme kehittää muita lohkoketjusovelluksia lukemalla Xunlein kirjoittaman lohkoketjukehitysoppaan, kiitos Xunlein.
Asiakirjassa todetaan:
1/16 Thunder Global Blockchain -sovelluskilpailun kehitysopas Sopimuksen kehittäminen linjasuositukseksi 1. Ennen älysopimusten kirjoittamista sinun täytyy ymmärtää tietty ymmärrys lohkoketjun perusteista (liitteenä: Ethereum-yleiskatsaus). 2. Opettele solidity-kieli (solidity API). 3. Opettele käyttämään tryffelikehystä yhdistettynä solidity-oppimiseen. Käytä tryffelikehitystä paikallisesti Aja sopimuksia lohkoketjuympäristössä. 4. Opi ja käytä zeppelin-solidtyä (standardoitu sopimuskehys, joka on omistettu turvallisuudelle) ja suunnittele integraatio Sopimustila, erilliset data- ja loogiset sopimukset, käyttöoikeuksien hallinta ja päivityslogiikan huomioiminen. 5. Opettele olemaan vuorovaikutuksessa sopimusten kanssa web3.js avulla. Käytä Metamask-lisäosaa ja verkkopalvelua lohkoketjun kanssa Vuorovaikutus. 6. Foorumin kysymys-vastaus: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Kaikki kohtaamasi ongelmat voi palauttaa tällä foorumilla.) Vastaamme sinulle kolmen arkipäivän kuluessa) Peruskäsitteet Lohkoketju Lohkoketju on hajautettu hajautettu laskentajärjestelmä, jonka pääominaisuus on datan pysyvä muuttumattomuus, Sitä ei voi muovata, ja siinä on korkea avoimuus, läpinäkyvyys ja luottamus. Ydinteknologioihin kuuluvat Byzantine Fault Tolerant Consensus Algorithm (PBFT), salausteknologia, P2P-teknologia jne. Kauppa Lohkoketju voidaan ymmärtää maailmanlaajuisesti jaettuna transaktiotietokantajärjestelmänä. Mikä tahansa ohjelmisto, jolla on lupa, voi lukea sen Ota dataa lohkoketjuverkosta. Kun lohkoverkossa on tarpeen muuttaa dataa, on aloitettava peite Lohkosolmut hyväksyvät pyynnöt, joita järjestelmässä kutsutaan yhteisesti transaktioiksi. Tapahtumat ovat transaktionaalisia ja toimitetaan lohkoketjuun, joko ei kaikki tai kaikki suoritetaan. Kauppajohtaja Kun rivi on valmis, se tallennetaan pysyvästi lohkoketjuun eikä sitä voi muokata tai suorittaa uudelleen. Tapahtumat käynnistetään ja allekirjoitetaan järjestelmän tilin toimesta, ja kryptografian kautta tapahtumat voidaan säilyttää vain yksityisellä avaimella 2/16 Joku aloittaa sen, toiset eivät voi muokata tai takoa. Tämä takaa kaupan aitouden ja turvallisuuden. Tilin Lohkoketjujärjestelmässä on kahta tyyppiä tilejä: toinen ulkoinen ja toinen sopimustili. Ulkoisen tilin omistama Sinulla on omat ainutlaatuiset julkiset ja yksityiset avaimet, ja tilisi on tämän avainparin hallinnassa. Futuuritileillä on oma koodinsa, ja tili on luotu Oma koodinhallinta. Tili tunnistetaan osoitteella, osoitteen pituus on sama, eikä tilityypin välillä ole eroa. Ulkoisen tilin osoite annetaan seuraavasti Julkinen avain luodaan, ja sopimusosoite käyttää osoitetta, josta sopimustili on luotu, sekä sopimustilin luoneiden tapahtumien määrää (nonce) tuotetaan. Sopimukset sijoitetaan virallisen osoitteen kautta, eikä tavalliset tilit voi suoraan julkaista sopimuksia. Käyttäjän yhdistelmä Se täytyy virallisesti tarkistaa ja julkaista Xunlein toimesta. Järjestelmässä ei ole eroa näiden kahden tilityypin välillä. Jokaisessa tilissä on järjestelmässä 256-bittisiä Avain-arvo-tallennusrakennetta enintään 256 bittiä kutsutaan tallennukseksi. Jokaisella tilillä on saldo nimeltä WEI:n saldoa voidaan muuttaa lähettämällä tilille numeerisen arvon omaava tapahtuma. Sopimus Sopimus on lohkoketjutili, joka tallentaa koodin, ja sopimuskutsu tehdään lähettämällä tapahtumat tälle tilille. Milloin Aiempi suositumpi sopimusohjelmointikieli oli Solidity. Tällä hetkellä kilpailu tukee vain sopimusten jättämistä Solidity-kielellä. Sopimus on jaettu kahteen osaan: datan tallennus ja funktio, data tallentaa sopimuksen tilan ja funktio on sopimus Ulkoinen rajapinta toteuttaa datakyselyn ja tilan muokkauksen kutsumalla funktioita. Kirjoita sopimus ohjelmointikielellä ja hanki EVM-tavukoodi kääntämisen jälkeen. Lähettämällä tapahtuman sopimustilille, todellinen Nykyinen sopimuspuhelu. Kaasu Kaasu on lohkoketjun maksuyksikkö, ja kun transaktio luodaan, määritellään tietty kaasumäärä. Herra Jos tarkoituksena on rajoittaa tapahtuman laskentamäärää ja maksaa maksu tapahtuman suorittamisesta. Kaupan toteuttamisen aikana Gas Se kulutetaan EVM:n asettaman säännön mukaan. Kaasun hinta on arvo, jonka transaktion tekijä määrittelee ja kuinka monta maksua tapahtuman toteuttamiseen vaaditaan Määrä on Gas_Price*Kaasu. Tapahtuma päättyy Jos kaasua jää yli, jäljelle jäävä osa palautetaan tekijän ehdotukselle käyttäjiä. Jos kaasu on riittämätön, transaktion suoritus epäonnistuu, eikä tapahtuma onnistu estämään tulvahyökkäyksiä järjestelmän turvallisuuden vuoksi Käsittelymaksua ei palauteta. Kaasun hinnan pienin yksikkö on wei, 10^18 wei = 1 ketjugramma. Kiinteyys 3/16 Solidity on korkean tason ohjelmointikieli, joka on suunniteltu älysopimuksille ja toimii EVM:llä (Ethereum). Virtual Machine)。 Kielisuunnittelun toteutukseen vaikuttavat C++/Python/JavaScript. Solidity on vahvasti tyypitetty kieli, joka tukee periytymistä, polymorfismia, rajapintoja, abstraktiota, kirjastoja, mukautettuja tietotyyppejä ja paljon muuta Seksi. Solidity tukee assemble-käskyjen ohjelmointia, ja koodi käännetään tavukoodiksi ja toimii EVM:llä. Kiinteyys on Suosituin älysopimuskehityskieli on myös Thunder Contract Platformin suosittelema ja tukema kieli. Huomautuksia: 1. Ethereum Virtual Machine on virtuaaliympäristö Ethereumissa, joka tarjoaa ajonaikaisen ympäristön älysopimuksille Simuloitu kone. Kilpailualusta on yhteensopiva EVM:n kanssa, mutta sen on noudatettava virallisen alustan käyttörajoituksia. 2. Tilityypit jaetaan ulkoisiin tileihin (tavalliset kaupankäyntitilien osoitteet) ja futuuritileihin. Luo sopimus Se on prosessi, jossa transaktio lähetetään kohdetilin osoitteeseen 0. 3. Kilpailussa määritellään tryffelin (tryffeli v4.1.5 solidity v0.4.21) käyttö älykkäiden yhdistelmien kehittämiseksi Alusta varmistaa tavukoodin osallistujan toimittaman asiakirjan lähdekoodin mukaisesti. , Laadi sopimuksia tryffelin kanssa Älysopimusten kiinteyttävyyskehys Tryffle. Se tarjoaa täydellisen kehitys-, virheenkorjaus- ja muokkaussarjan Paikallisten ympäristöjen kääntäminen, käyttöönotto ja testaus. Voit käyttää mallikomentoa unbox nopeasti joidenkin mallipohjien perusteella Luo vastaava sopimusrakenne. Asenna tryffeli NPM i -G tryffeli [root@opennode sandai]# tryffeliversio Tryffle v4.1.5 (ydin: 4.1.5) Solidity v0.4.21 (solc-js) Aloita 1. Käynnistä sopimusprojekti tryffellä 4/16 mkdir simple-storage CD-yksinkertainen tallennus tryffeli init 2. Luo uusi sopimustiedosto: Voit käyttää tryffeliä sopimuksen luomiseen Voit myös luoda uuden tiedoston suoraan SimpleStorage-komentoriviltä contract/SimpleStorage.sol SimpleStorage.sol pragman kiinteyys ^0.4.21; contract SimpleStorage { uint myVariable; Funktiojoukko(UINT X) julkinen { myVariable = x;
} funktio get() vakio julkiset tuotot (uint) { return myVariable;
}
} 3. Lisää siirtoskriptit: Voit käyttää tryffle create migrationia 2_deploy_contract Komentorivimetodi lisätään, ja voit myös luoda uuden tiedoston suoraan Muuttoliikkeet/2_deploy_contract.js 2_deploy_contract.js; tryffelivaeltajan toteutus Rivijärjestys liittyy tiedoston nimeen, joten useita käyttöönottoskriptejä täytyy nimetä järjestyksessä var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Suorita tryffelikäännössopimus, ja käännetty sopimus löytyy build-kansiosta. Sopimuksen mukaan Vastaava json-tiedosto sisältää tavukoodin, abiCoden jne. käyttöönottoon 5. Muokkaa truffle.js asettaaksesi tryffelien käyttöönottosopimuksen ja RPC-yhteyden toimiaksesi lohkoketjun kanssa. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Käynnistä Trufflen oletuslohkoketjuympäristö konsolilla. Tryffelikehitys Tryffle Development alkoi
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 Yksityiset avaimet: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 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 hunajainen sileä muru makea herkku ⚠ Tärkeää ⚠: Tämä muistisääntö on luotu sinä Trufflen kautta. Se ei ole turvallista. Varmista, ettet käytä sitä tuotannossa 7/16 lohkoketjut, muuten riskeeraat varojen menettämisen. Tryffeli (kehitys)> Tämä tarjoaa Trufflelle natiivin lohkoketjuympäristön sopimusten suorittamiseen, jolloin oletuksena syntyy 10 tiliä, joista jokainen luodaan Alkuperäinen tilin saldo on 100 eetteriä. Voit myös käyttää Ganachen tarjoamaa graafista käyttöliittymää , sinun täytyy muokata porttia, johon konfiguraatio on liitetty. 7. Suorita tryffelisiirtoportin käyttöönottosopimus uudessa konsolissa (tai tryfflessa) kehitä konsoli suorittamaan migraation). 8. Testaa sopimuskoodi tryffelikehityksellä. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(funktio(arvo) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Tulostustransaktiotiedot SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(funktio(arvo) {return value.toNumber()}); // 100 9. Testaa sopimus tryffelitestillä Käytä tryffeliluo testiä SimpleStorage luodaksesi uuden tai Luo uusi tiedostotesti/SimpleStorage.test.js suoraan. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("pitäisi väittää tode", funktio(tehty)
{ var simpleStorage = SimpleStorage.deployed(); VAR-instanssi; simpleStorage.then(res => { instance = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'ei ole yhtä suuri kuin 0') }).then(() => { instance.set(100) }).then(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'ei ole yhtä suuri kuin 100') }) done(); }); }); Uudessa konsolissa syötä tryffelitesti ./test/SimpleStorage.test.js. 10. Testaussopimukset remixillä Put sopimukset on kehitetty tryffelin avulla remixissä nopeaan muokkaamiseen Ehdotetun sopimuksen käyttöönotto ja käyttöönotto. Remix tarjoaa kokoamisaikaisen ajonaikaisen ympäristön sopimuksille ja sitä voidaan hallita sopimuksella Taulukko voi nähdä yksityiskohtaiset tiedot jokaisesta sopimuksen transaktiosta, kuten syöte- ja tulostusparametrit, allekirjoitetut menetelmätiedot, transaktion tiiviste ja muuta tietoa. Tue debuggausta. 1. Käytä kokoamistietoja nähdäksesi sopimuksen kokoamistiedot. Sisältää tavukoodit, abi sekä web3.js Drip Ah -menetelmän nopean käyttöönoton avulla. 9/16 2. Käytä juoksua sopimuksen luomiseen, ja konsoli voi nähdä transaktion, joka loi sopimuksen. Käytä Truffle Unboxia luodaksesi interaktiivisia sopimussovelluksia Edellä mainitut vaiheet luovat sopimusympäristön, joka voidaan kääntää, ottaa käyttöön ja debuggata perus-truffle-initillä. Alla Luo uusi projekti Truffle Unboxilla, joka tarjoaa meille tryffeliprojektipohjan sisällä Jotkut sopimussovellusten vuorovaikutusympäristön riippuvuuksista. Voit tutustua viralliseen tarjontaan Tryffle Boxissa Mallilaatikot. Seuraava on react-malli. 1. Uusi projekti truf-react mkdir truf-react 10/16 CD truf-react tryffeli unbox React Unbox-prosessi lataa poimintapohjan ja suorittaa toimintoja, kuten npm-asennuksen. 2. Määritä projektin truffle.js module.exports = { Katso <http://truffleframework.com/docs/advanced/confi Guration> voit räätälöidä tryffelisi Kokoonpano!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Ottelu Mikä tahansa verkkotunnus
}
} }; 3. Aloita tryffelin kehittäminen 4. SRC/App.js muutos tuo React, { Komponentti } pois 'react' tuo SimpleStorageContract '.. /rakenna/sopimukset/SimpleStorage.json' tuo getWeb3 osoitteesta './utils/getWeb3' Tuo './css/oswald.css' Tuo './css/open-sans.css' Tuo './css/pure-min.css' 11/16 Tuo './App.css' const contract = vaatia ('tryffelisopimus') const simpleStorage = sopimus (SimpleStorageContract) class App laajentaa Komponentti { constructor(props) { super(rekvisiitta) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Hanki verkkopalveluntarjoaja ja web3 Instanssi. Katso lisätietoja osoitteista utils/getWeb3 tietoa. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instantsiate-sopimus Kun web3 tarjottiin. 12/16 this.instantiateContract() }) .catch(() => { console.log('Virhe Web3:n löytäminen.') })
} instantiateContract() {
/* * ÄLYSOPIMUSESIMERKKI
* * Normaalisti nämä funktiot olisivat kutsuttaisiin kontekstissa * osavaltion hallintokirjasto, mutta Mukavuuden vuoksi olen sijoittanut ne tänne. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Numero(event.target.value) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Ilmoitan tämän myöhemmäksi, joten 13/16 voimme ketjuttaa funktioita SimpleStoragessa. var simpleStorageInstance Hanki tilejä. this.state.web3.eth.getAccounts((virhe, accounts) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instanssi this.setState({
address: instance.address }) Varastot a annettu arvo, oletuksena 5. Paluu simpleStorageInstance.set(x, {from: tilit[0]}) }).then((result) => { Saat arvon sopimuksesta todistaakseen, että se toimi. Paluu simpleStorageInstance.get.call(accounts[0]) }).then((result) => { Päivitystila tuloksena. Paluu this.setState({ storageValue: result.c[0] }) }) })
} render() { Return ( <div className="App"> <nav className="navbar puhdas-menu puhdas-menu"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Tryffel Laatikko</a> </nav> <pää className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Valmiina!</h1> <p>Tryffelilaatikkosi on asennettu ja valmis.</p> <h2>Älysopimusesimerkki</h2> <p>Jos sopimuksesi on käännetty ja siirretty Onnistuneesti alla näkyy tallennettu arvo 5 (oletuksena).</p> <p>Kokeile muuttaa verkkoon tallennettua arvoa <strong> 59</strong>/App.js.</p> <p>Tallennettu arvo on: {this.state.storageValue}</p> <p>Lähetetty sopimusosoite: {this.state.address}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <button onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} vientioletussovellus Lisäsin sopimussetin menetelmän kutsun. Ja näytä sopimuksen osoite. 5. Avaa uusi konsoli ja käynnistä npm, käynnistä 6. Avaa http://lcoalhost:3000 selaimessasi nähdäksesi sopimuksen tulokset. 7. Aseta sopimuksen tallennetun datan arvo set- ja syöttölaatikoiden kautta. 8. Osallistu trufle developmentiin
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) BigNUmber-tyypin palautusarvo saadaan, ja c-taulukon arvo asetetaan stored Data. Käytä selainlisäosaa Metamask vuorovaikutukseen lohkoketjun kanssa Viite http://truffleframework.com/tutorials/pet-shop Osallistujat lähettävät asiakirjoja Kilpailu määrittelee Trufflen käytön älysopimusten kehittämiseen, ja Truffle-versio v4.1.5 vastaa solcjs-versiota v0.4.21. Kehittäjien tulee toimittaa Truffle-projektin zip-paketti ja siihen liittyvät projektin johdantodokumentit, jotka sisältävät vähintään Seuraavat: 16/16 1. Truffle Project Basic File Structure: Build Contracts Migrations Test package.json truffle.js truffle-config.js README.md // Insinööridokumentaation kuvaus Ei vaadita node_modules 2. Tarve toimittaa PPT- tai PDF-selitys koko projektin tuotteesta, mukaan lukien tuotteen taustaesittely, tuotteen merkitys, Sovelluksen latausosoite (valinnainen), tuotteen käyttöprosessin esittely. Seuraavat kolmannen osapuolen kehittäjät voivat toteuttaa sopimussovelluksia ja ketjutaskuja tulevan ThunderChain-ohjeistuksen mukaisesti Vuorovaikutus. Dokumentaatio ja työkalut kiinteyys-API Tryffelidokumentaatio Ganache tarjoaa graafisen käyttöliittymän natiivilohkoketjuympäristölle Zeppelin-Solidty on sitoutunut turvalliseen ja standardoituun sopimuskehykseen MetaMask tarjoaa selainlaajennuksia selaimille, joilla on lohkoketjuympäristö RPC-yhteyksien kautta web3.js Ethereum-kapseloitu JS lohkoketjun kanssa vuorovaikutukseen Lopuksi pdf-dokumentin lataus:
Dev_Guide_zh.pdf
(373.55 KB, Latausten määrä: 6)
|