Oświadczenie: Poniżej znajduje się dokument "Xunlei Global Blockchain Application Application Development Guide" napisany przez firmę Xunlei, dlaczego warto wykorzystać dokument napisany przez firmę Xunlei jako przewodnik po rozwoju blockchain?
Thunder to w rzeczywistości prywatny łańcuch zbudowany na inteligentnych kontraktach Ethereum, technologia ta jest bardzo dojrzała i posiada dogłębne badania nad technologią blockchain, co ma kluczowe znaczenie dla naszego rozwoju blockchain.
Jak mówi przysłowie: "wyciągnąć wnioski z jednego przykładu", możemy rozwijać inne aplikacje blockchain, czytając dokument przewodnika rozwoju blockchain napisany przez Xunlei, dzięki Xunlei.
Dokument brzmi:
1/16 Przewodnik po rozwoju globalnego konkursu aplikacji blockchain Thunder Rozwój kontraktu w rekomendacji linii 1. Przed napisaniem smart kontraktów musisz mieć pewną znajomość podstaw blockchaina (załączone: Ethereum Overview ). 2. Poznaj język solidity (solidity API). 3. Naucz się korzystać z ramy trufli w połączeniu z nauką solidności. Używaj trufli uprawianych lokalnie Uruchamiaj kontrakty w środowisku blockchain. 4. Nauka i używanie zeppelin-solidty (standaryzowanego frameworka kontraktowego poświęconego bezpieczeństwu) oraz integracji projektowej Tryb kontraktowy, oddzielne dane i logiczne kontrakty, kontrola bezpieczeństwa uprawnień oraz rozważenie logiki aktualizacji. 5. Naucz się wchodzić w interakcje z kontraktami za pomocą web3.js. Użyj wtyczki Metamask i usługi webowej z blockchainem Interakcja. 6. Forum Q&A: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Wszelkie problemy, które napotkasz, można cofnąć na tym forum.) Odpowiemy w ciągu 3 dni roboczych) Podstawowe pojęcia Blockchain Blockchain to zdecentralizowany system rozproszonych obliczeń, którego główną cechą jest trwała niezmienność danych, Nie da się go sfałszować i cechuje się dużą otwartością, przejrzystością i zaufaniem. Podstawowe technologie obejmują Bizantyjski Algorytm Konsensusu Tolerancyjnego na Uszkodzenia (PBFT), technologia szyfrowania, technologia P2P itd. Transakcja Blockchain można rozumieć jako globalnie współdzielony system bazy danych transakcji. Każde oprogramowanie z uprawnieniami może go odczytać Weź dane z sieci blockchain. Gdy konieczne jest zmienienie danych w sieci blokowej, należy zainicjować ogólnik Istnieją żądania akceptowane przez węzły blokowe, które w systemie są łącznie określane jako transakcje. Transakcje są transakcyjne i są przesyłane do blockchaina, albo nie wszystkie, albo wszystkie realizowane. Dyrektor handlowy Po ukończeniu wiersza jest on trwale zapisywany na blockchainie i nie może być ponownie modyfikowany ani wykonywany. Transakcje są inicjowane i podpisywane przez konto w systemie, a dzięki kryptografii transakcje mogą być przechowywane wyłącznie za pomocą klucza prywatnego 2/16 Ktoś ją inicjuje, inni nie mogą modyfikować ani fałszować. Zapewnia to autentyczność i bezpieczeństwo transakcji. Relacja W systemie blockchain istnieją dwa typy kont: jedno zewnętrzne, a drugie to konto kontraktowe. Konto zewnętrzne własne Twoje unikalne klucze publiczne i prywatne, a twoje konto jest kontrolowane przez tę parę kluczy. Konta futures mają własny kod, a konto jest tworzone przez Własna kontrola kodu. Konto jest identyfikowane przez adres, a długość adresu jest taka sama i nie ma różnicy między tymi dwoma typami kont. Adres konta zewnętrznego jest podany przez Klucz publiczny jest generowany, a adres kontraktu wykorzystuje adres, z którego utworzono konto kontraktowe oraz liczbę transakcji, które utworzyły konto kontraktowe (nonce) jest produkowany. Umowy są realizowane przez oficjalny adres, a zwykłe konta nie mogą bezpośrednio publikować umów. Kombinacja użytkownika Musi być oficjalnie zrecenzowana i wydana przez Xunlei. W systemie nie ma różnicy między tymi dwoma typami kont. Każde konto ma 256 bitów w systemie Struktura pamięci klucz-wartość do 256 bitów nazywana jest pamięcią masową. Każde konto ma saldo zwane Saldo w Wei można modyfikować, wysyłając transakcję o wartości liczbowej na konto. Umowa Kontrakt to konto blockchain, które przechowuje kod, a wywołanie kontraktu jest realizowane poprzez wysyłanie transakcji na to konto. Kiedy Poprzednim, bardziej popularnym językiem programowania kontraktowego był Solidity. Obecnie konkurs umożliwia składanie kontraktów wyłącznie w języku Solidity. Umowa dzieli się na dwie części: przechowywanie danych i funkcję – dane przechowują stan umowy, a funkcja to umowa Interfejs zewnętrzny realizuje zapytania i modyfikację stanu danych poprzez wywoływanie funkcji. Napisz kontrakt w języku programowania i pobierz bajtkod EVM po kompilacji. Wysyłając transakcję na konto kontraktowe, prawdziwe Aktualna umowa. Gaz Gaz jest jednostką płatniczą blockchaina, a podczas tworzenia transakcji określana jest określona ilość gazu. Panie Jeśli chodzi o ograniczenie ilości obliczeń na transakcję i zapłacenie opłaty za jej wykonanie. Podczas realizacji transakcji Gas Będzie on zużywany przez regułę ustaloną przez EVM. Cena gazu to wartość określona przez twórcę transakcji oraz liczba opłat wymaganych do jej wykonania Ilość to Gas_Price*Benzyna. Transakcja zakończona Jeśli zostanie gaz, pozostała część wraca do sugestii twórcy użytkowników. Jeśli gaz jest niewystarczający, wykonanie transakcji się nie powie, a transakcja nie zapobiegnie atakom flood dla bezpieczeństwa systemu Opłata za przesyłkę nie jest zwracana. Najmniejsza jednostka ceny gazu to wei, 10^18 wei = 1 gram łańcucha. Solidność 3/16 Solidity to język programowania wysokiego poziomu zaprojektowany dla smart kontraktów, działający na EVM (Ethereum). Virtual Machine)。 Implementacja projektowania języka jest inspirowana C++/Pythonem/JavaScriptem. Solidity to język silnie typowany, który obsługuje dziedziczenie, polimorfizm, interfejsy, abstrakcję, biblioteki, niestandardowe typy danych i inne działania Seks. Solidity obsługuje programowanie instrukcji asemblera, a kod jest kompilowany do bajtkodu i działa na EVM. Solidność wynosi Najpopularniejszym językiem tworzenia smart kontraktów jest także język polecany i wspierany przez Thunder Contract Platform. Notatki: 1. Ethereum Virtual Machine to środowisko wirtualne na Ethereum, które zapewnia środowisko uruchomieniowe dla smart kontraktów Symulowana maszyna. Platforma konkurencyjna jest kompatybilna z EVM, ale musi spełniać ograniczenia korzystania z oficjalnej platformy. 2. Typy kont dzielą się na konta zewnętrzne (zwykłe adresy kont handlowych) oraz konta terminowe. Stwórz umowę Jest to proces wysyłania transakcji na adres konta docelowego 0. 3. Konkurs określa użycie trufli (trufla v4.1.5 solidity v0.4.21) do opracowywania inteligentnych kombinacji Platforma weryfikuje bajtkod zgodnie z kodem źródłowym dokumentu przesłanego przez uczestnika. , Zawieraj kontrakty z truflą Framework rozwojowy Smart Contract Solidity Truffle. Zapewnia pełen zestaw narzędzi do rozwoju, debugowania i edycji Tłumaczenie, wdrażanie i testowanie środowisk lokalnych. Możesz szybko użyć polecenia szablonu unbox na podstawie niektórych szablonów Wygeneruj odpowiadającą strukturę kontraktu. Instaluj Truffle npm i -g trufla [root@opennode sandai] # wersja truflowa Truffle v4.1.5 (rdzenny: 4.1.5) Solidity v0.4.21 (solc-js) Początek 1. Inicjalizacja projektu kontraktowego truflą 4/16 mkdir simple-storage CD Simple Storage trufla init 2. Utworzenie nowego pliku kontraktowego: Możesz użyć trufli do stworzenia kontraktu Możesz też utworzyć nowy plik bezpośrednio z linii poleceń SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol Solidność pragmy ^0.4.21; contract SimpleStorage { uint myVariable; funkcja zbiór(uint x) public { myVariable = x;
} funkcja get() stałe publiczne zwroty (uint) { return myVariable;
}
} 3. Dodaj skrypty migracji: Możesz użyć migracji do tworzenia trufli 2_deploy_contract Dodana jest metoda wiersza poleceń, a także możesz bezpośrednio utworzyć nowy plik migracje/2_deploy_contract.js 2_deploy_contract.js egzekucja migracji trufli Kolejność linii jest powiązana z nazwą pliku, więc należy nazwać wiele skryptów wdrożonych w kolejności var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Uruchom kontrakt kompilacji truffle, a skompilowany kontrakt znajduje się w folderze build. Na kontrakt Do wdrożenia wymagany jest odpowiadający plik json zawierający bajtkod, abiCode itp. 5. Edytować truffle.js, aby ustawić kontrakt na wdrożenie trufli oraz połączenie RPC do interakcji z blockchainem. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Włącz domyślne środowisko blockchain Truffle na konsoli. Trufle rozwijają Truffle Development rozpoczęło działalność w
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 Klucze prywatne: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 ad91193c05875ef1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44DB637789887B1e22153c086a95eb6b18bd f89de078917abc63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a 87b08f39395618b7 (8) 0f62D96D6675F32685BBD8AC13cDa7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream bogaty w miód, gładki, kruszony słodki przysmak ⚠ Ważne ⚠: Ten mnemotechnik został stworzony dla ty od Truffle. Nie jest bezpieczny. Upewnij się, że nie używasz go na produkcji 7/16 blockchain, bo inaczej ryzykujesz utratę środków. Trufla (rozwijać)> Zapewnia to natywne środowisko blockchain, w którym Truffle może uruchamiać kontrakty, generując domyślnie 10 kont, z których każde jest generowane Początkowe saldo konta wynosi 100 eterów. Możesz także korzystać z graficznego interfejsu udostępnionego przez Ganache , musisz zmodyfikować port, do którego podłączona jest konfiguracja. 7. Wykonaj kontrakt wdrożenia portów truffle migrate w nowej konsoli (lub w truffle rozwijaj konsolę do migracji). 8. Przetestować kod kontraktowy z truflami. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Informacje o transakcjach wyjściowych SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {return value.toNumber()}); // 100 9. Przetestowaj kontrakt z truflami Test Użyj trufli do stworzenia testu SimpleStorage, aby utworzyć nowy lub Bezpośrednio stwórz nowy plik testowy/SimpleStorage.test.js. const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("powinno twierdzić prawdę", function(done)
{ var simpleStorage = SimpleStorage.deployed(); VAR instancja; simpleStorage.then(res => { instancja = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'nie równa się 0') }).wtedy(() => { instance.set(100) }).wtedy(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'nie równa się 100') }) done(); }); }); W nowej konsoli wejdź test trufli ./test/SimpleStorage.test.js. 10. Testowe kontrakty z remiksem Kontrakty Putting opracowane przy użyciu trufli w remiksie, aby szybko modyfikować Wdrożenie i realizacja proponowanej umowy. Remix zapewnia środowisko wykonawcze do kompilacji dla kontraktów i może być kontrolowany przez kontrakt Tabela zawiera szczegółowe informacje o każdej transakcji kontraktu, takie jak parametry wejściowe i wyjściowe, podpisane dane metody, hash transakcji i inne informacje. Wspieraj debugowanie. 1. Użyj szczegółów kompilacji, aby zobaczyć szczegóły kompilacji kontraktów. Wliczając kod bajtowy, abi oraz web3.js szybkie wdrożenie metody Drip Ah. 9/16 2. Użyj run do utworzenia kontraktu, a konsola może zobaczyć transakcję, która stworzyła kontrakt. Użyj Truffle Unbox do tworzenia interaktywnych aplikacji kontraktowych Powyższe kroki tworzą środowisko kontraktowe, które można kompilować, wdrażać i debugować za pomocą podstawowego init-a truffle. Poniżej Stwórz nowy projekt za pomocą Truffle Unbox, który dostarcza nam szablon projektu trufli, wewnątrz Niektóre zależności interakcji z aplikacjami w kontraktach. Oficjalne propozycje możesz sprawdzić w Truffle Boxes Szablonowe pudełka. Poniżej znajduje się szablon react. 1. Nowy projekt truf-react mkdir truf-react 10/16 cd truf-react Truffle Unbox React Proces unbox pobiera szablon ekstrakcji i wykonuje operacje takie jak npm install. 2. Konfiguruj truffle.js projektu module.exports = { Zobacz <http://truffleframework.com/docs/advanced/confi Guration> aby dostosować swoją Truflę Konfiguracja!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Dopasowanie dowolny identyfikator sieci
}
} }; 3. Rozpocznij uprawę trufli 4. Poprawka do SRC/App.js import React, { Component } z 'react' importuj SimpleStorageContract z '.. /buduj/kontraktuje/SimpleStorage.json' importuj getWeb3 z './utils/getWeb3' importuj './css/oswald.css' import './css/open-sans.css' import './css/pure-min.css' 11/16 import './App.css' Const contract = Require('kontrakt truflowy') const simpleStorage = contract(SimpleStorageContract) class App rozšěrja Component { konstruktor(props) { super(props) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Pobierz dostawcę sieci i web3 Instancja. Zobacz utils/getWeb3 po więcej Informacje. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Utworzenie kontraktu Gdy Web3 to zapewnił. 12/16 this.instanciateContract() }) .catch(() => { console.log('Błąd Finding Web3.') })
} instantiateContract() {
/* * PRZYKŁAD SMART KONTRAKTÓW
* * Normalnie te funkcje należy nazywać w kontekście * państwowa biblioteka zarządzająca, ale dla wygody położyłem je tutaj. */ 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) Deklaruję to na później, więc 13/16 możemy łączyć funkcje na SimpleStorage. var simpleStorageInstance Załóż konta. this.state.web3.eth.getAccounts((error, konta) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instancja this.setState({
address: instance.address }) Magazyny dana wartość domyślnie 5. powrót simpleStorageInstance.set(x, {from: konta[0]}) }).wtedy((wynik) => { Zdobądź wartość z umowy, by udowodnić, że działa. powrót simpleStorageInstance.get.call(accounts[0]) }).wtedy((wynik) => { Stan aktualizacji Z efektem. powrót this.setState({ storageValue: result.c[0] }) }) })
} render() { return ( <div className="App"> <nawigacja className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-header-puremenu-link">Truffle Pudełko</a> </nav> <Główne className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Gotowe!</h1> <p>Twoje pudełko na trufle jest zainstalowane i gotowe.</p> <h2>Przykład inteligentnego kontraktu</h2> <p>Jeśli twoje kontrakty zostały skompilowane i przeniesione Poniżej poprawnie pokażemy wartość zapisaną 5 (domyślnie).</p> <p>Spróbuj zmienić wartość zapisaną online <strong> 59</strong> z App.js.</p> <p>Wartość przechowywana to: {this.state.storageValue}</p> <p>Adres wdrożonego kontraktu: {this.state.address}</p> </div> <div> <typ wejścia="number" onChange= {this.changeValueHandle}/> <przycisk onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} eksportuj domyślną aplikację Dodano wywołanie metody zestawu kontraktowego. I pokaż adres umowy. 5. Otwórz nową konsolę i uruchom npm, run start 6. Otwórz http://lcoalhost:3000 w swojej przeglądarce, aby zobaczyć wyniki umowy. 7. Ustaw wartość kontraktu przechowywanego w danych za pomocą pola set i input. 8. Wejść w trufle develop
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Otrzymuje się wartość zwrotną typu BigNUmber, a wartość w tablicy c jest ustalana przechowywane Dane. Użyj wtyczki przeglądarki Metamask, aby wchodzić w interakcję z blockchainem Odniesienie http://truffleframework.com/tutorials/pet-shop Uczestnicy składają dokumenty Konkurs określa wykorzystanie Truffle do tworzenia smart kontraktów, przy czym wersja Truffle v4.1.5 odpowiada wersji solcjs v0.4.21. Deweloperzy muszą złożyć pakiet zip do projektu Truffle oraz powiązane dokumenty wprowadzające projekt, które obejmują przynajmniej Następujące: 16/16 1. Podstawowa struktura pliku Truffle Project: Test migracji kontraktów budowania package.json truffle.js truffle-config.js README.md // Opis dokumentacji inżynierskiej Nie jest wymagana node_modules 2. Konieczność przedstawienia wyjaśnienia w formacie PPT lub PDF dotyczącego całego produktu projektu, w tym wprowadzenia do tła produktu, znaczenia produktu, Adres pobrania aplikacji (opcjonalny), wprowadzenie do procesu użytkowania produktu. Kolejni deweloperzy zewnętrzni mogą wdrażać aplikacje kontraktowe i Chain pockets zgodnie z nadchodzącym wytycznym ThunderChain Interakcja. Dokumentacja i narzędzia API solidity API Dokumentacja truflow Ganache zapewnia graficzny interfejs dla natywnego środowiska blockchain Zeppelin-Solidty zobowiązuje się do bezpiecznego i ustandaryzowanego systemu umów MetaMask udostępnia wtyczki do przeglądarek korzystających ze środowiska blockchain za pośrednictwem połączeń RPC web3.js JS zamknięty w Ethereum do interakcji z blockchainem Na koniec, pobierz dokument PDF:
Dev_Guide_zh.pdf
(373.55 KB, Liczba pobranych plików: 6)
|