Úvod do Ethereum Smart Contract Clients (knižnica Web3js)

Po niekoľkých diskusiách o solídnom dizajne inteligentných zmlúv a problémoch v posledných dvoch článkoch (tu a tu) sa pozrieme na to, ako môžeme integrovať inteligentné zmluvy s aplikáciami podnikových klientov. Existuje niekoľko technológií, ktoré môžu interagovať s uzlom ethereum (klient ethereum blockchain).

Základná architektúra EVM (virtuálny stroj ethereum), ktorý prevádzkuje inteligentné zmluvy, spočíva v tom, že všetky hovory na zmluvu sa vykonávajú ako transakcia, pri ktorej sa éter požadovaný na vykonanie kontraktu prevedie z adresy volajúceho účtu na adresu účtu zmluvy. Kód zmluvy sa nachádza na adrese zmluvy na blockchaine a očakáva, že hovory prídu ako transakcie nesúce údaje parametra metódy spolu s transakciou ako „vstup“. Ak chcete povoliť štandardný formát pre všetkých klientov, je potrebné zhromaždiť názov metódy a parametre v odporúčanom formáte.

Úvod do Ethereum Smart Contract Clients (knižnica Web3js)

JSON-RPC

Štandardní klienti ethereum vystavujú rozhranie na vytváranie RPC (Remote Procedure Call) pre kontraktný kód nasadený na blockchaine. Toto sa nazýva rozhranie RPC, ktoré slúži ako žiadosť o príspevok HTTP na predvolenom porte 8545 pre klienta go, c ++ a parity. Toto je zvyčajne možné prispôsobiť ako parameter príkazu alebo vlastnosť konfiguračného súboru:

–rpc –rpcaddr <ip> –rpcport <číslo portu>

Formát RPC štruktúrovaný na populárnom JSON-RPC formát. Formát je zložitý najmä pre zaraďovanie hodnôt parametrov na základe typov. Je potrebné dodržať odporúčanú kódovaciu schému, ako je definovaná so správnym vyplnením, aby sa zabezpečilo, že EVM je schopná ich dekódovať.

Kvôli nízkej úrovni zložitosti formátu JSON_RPC je k dispozícii množstvo súhrnných knižníc, ktoré zjednodušujú formát hovoru. Najstarší z nich je obal JavaScriptu web3.js ktorý funguje v prehliadači a inštancii nodejs. Cieľom tejto diskusie nie je nahradiť referenčný dokument pre všetky definície API. Konkrétne volania API nájdete na vyššie uvedenom odkaze. Tu použijeme špecifickú sadu rozhraní API na vytvorenie odporúčania pre implementáciu klienta založeného na prehliadači pre inteligentnú zmluvu.

Nainštalujte si web3.js

Ak chcete nainštalovať web3 ako uzol, prehliadač alebo balík meteorov, postupujte podľa pokynov github vyššie. V prípade, že inštalujete uzlový modul s -g, nainštaluje sa do cesty / usr / lib / node_modules / web3. Zaistite, aby tento adresár existoval so závislosťami v nasledujúcej štruktúre (Toto je pre operačný systém Linux, s ktorým sa to testuje, informácie o ceste pre konkrétny operačný systém nájdete v dokumentácii nodejs špecifickej pre váš OS), je to dôležité pre beh nodejs, aby ste našli všetky knižnice.

/ usr / lib / node_modules / web3

├── bower.json

├── bundled.js

├── kruh.yml

├── coder.js

├── dist

│ ├── web3.js

│ ├── web3.js.map

│ ├── web3-light.js

│ ├── web3-light.min.js

│ └── web3.min.js

├── príklad

│ ├── balance.html

│ ├── contract_array.html

│ ├── contract.html

│ ├── event_inc.html

│ ├── icap.html

│ ├── namereg.html

│ └── node-app.js

├── gulpfile.js

├── index.js

├── lib

│ ├── zmluvy

│ │ ├── GlobalRegistrar.json

│ │ ├── ICAPRegistrar.json

│ │ └── SmartExchange.json

│ ├── solídnosť

│ │ ├── address.js

│ │ ├── bool.js

│ │ ├── bytes.js

│ │ ├── coder.js

│ │ ├── dynamicbytes.js

│ │ ├── formatters.js

│ │ ├── int.js

│ │ ├── param.js

│ │ ├── real.js

│ │ ├── string.js

│ │ ├── type.js

│ │ ├── uint.js

│ │ └── ureal.js

│ ├── utils

│ │ ├── browser-bn.js

│ │ ├── browser-xhr.js

│ │ ├── config.js

│ │ ├── sha3.js

│ │ └── utils.js

│ ├── version.json

│ ├── web3

│ │ ├── allevents.js

│ │ ├── batch.js

│ │ ├── contract.js

│ │ ├── errors.js

│ │ ├── event.js

│ │ ├── extend.js

│ │ ├── filter.js

│ │ ├── formatters.js

│ │ ├── function.js

│ │ ├── httpprovider.js

│ │ ├── iban.js

│ │ ├── ipcprovider.js

│ │ ├── jsonrpc.js

│ │ ├── method.js

│ │ ├── metódy

│ │ │ ├── db.js

│ │ │ ├── eth.js

│ │ │ ├── net.js

│ │ │ ├── personal.js

│ │ │ ├── shh.js

│ │ │ ├── swarm.js

│ │ │ └── watches.js

│ │ ├── namereg.js

│ │ ├── property.js

│ │ ├── requestmanager.js

│ │ ├── settings.js

│ │ ├── syncing.js

│ │ └── transfer.js

│ └── web3.js

├── LICENCIA

├── node_modules

│ ├── bignumber.js

│ │ ├── bignumber.js

│ │ ├── bignumber.js.map

│ │ ├── bignumber.min.js

│ │ ├── bower.json

│ │ ├── doc

│ │ │ └── API.html

│ │ ├── LICENCIA

│ │ ├── package.json

│ │ └── README.md

│ ├── krypto-js

│ │ ├── aes.js

│ │ ├── bower.json

│ │ ├── cipher-core.js

│ │ ├── CONTRIBUTING.md

│ │ ├── core.js

│ │ ├── crypto-js.js

│ │ ├── dokumenty

│ │ │ └── QuickStartGuide.wiki

│ │ ├── enc-base64.js

│ │ ├── enc-hex.js

│ │ ├── enc-latin1.js

│ │ ├── enc-utf16.js

│ │ ├── enc-utf8.js

│ │ ├── evpkdf.js

│ │ ├── format-hex.js

│ │ ├── format-openssl.js

│ │ ├── hmac.js

│ │ ├── hmac-md5.js

│ │ ├── hmac-ripemd160.js

│ │ ├── hmac-sha1.js

│ │ ├── hmac-sha224.js

│ │ ├── hmac-sha256.js

│ │ ├── hmac-sha384.js

│ │ ├── hmac-sha3.js

│ │ ├── hmac-sha512.js

│ │ ├── index.js

│ │ ├── lib-typedarrays.js

│ │ ├── LICENCIA

│ │ ├── md5.js

│ │ ├── mode-cfb.js

│ │ ├── mode-ctr-gladman.js

│ │ ├── mode-ctr.js

│ │ ├── mode-ecb.js

│ │ ├── mode-ofb.js

│ │ ├── package.json

│ │ ├── pad-ansix923.js

│ │ ├── pad-iso10126.js

│ │ ├── pad-iso97971.js

│ │ ├── pad-nopadding.js

│ │ ├── pad-pkcs7.js

│ │ ├── pad-zeropadding.js

│ │ ├── pbkdf2.js

│ │ ├── rabbit.js

│ │ ├── rabbit-legacy.js

│ │ ├── rc4.js

│ │ ├── README.md

│ │ ├── ripemd160.js

│ │ ├── sha1.js

│ │ ├── sha224.js

│ │ ├── sha256.js

│ │ ├── sha384.js

│ │ ├── sha3.js

│ │ ├── sha512.js

│ │ ├── tripledes.js

│ │ └── x64-core.js

│ ├── utf8

│ │ ├── LICENCIA-MIT.txt

│ │ ├── package.json

│ │ ├── README.md

│ │ └── utf8.js

│ ├── xhr2

│ │ ├── Cakefile

│ │ ├── CONTRIBUTING.md

│ │ ├── lib

│ │ │ ├── browser.js

│ │ │ └── xhr2.js

│ │ ├── LICENCIA.txt

│ │ ├── package.json

│ │ ├── README.md

│ │ ├── src

│ │ │ ├── 000-xml_http_request_event_target.coffee

│ │ │ ├── 001-xml_http_request.coffee

│ │ │ ├── chyby. Káva

│ │ │ ├── progress_event.coffee

│ │ │ └── xml_http_request_upload.coffee

│ │ └── test

│ │ ├── rozmiestnenie

│ │ │ ├── ahoj.json

│ │ │ ├── ahoj.txt

│ │ │ └── xhr2.png

│ │ ├── html

│ │ │ └── browser_test.html

│ │ └── src

│ │ ├── events_test.coffee

│ │ ├── event_target_test.coffee

│ │ ├── headers_test.coffee

│ │ ├── pomocníci

│ │ │ ├── browser_mocha_runner.coffee

│ │ │ ├── browser_mocha_setup.coffee

│ │ │ ├── setup.coffee

│ │ │ └── xhr_server.coffee

│ │ ├── nodejs_set_test.coffee

│ │ ├── redirect_test.coffee

│ │ ├── response_type_test.coffee

│ │ ├── responseurl_test.coffee

│ │ ├── send_test.coffee

│ │ ├── status_test.coffee

│ │ └── xhr_test.coffee

│ └── xmlhttprequest

│ ├── lib

│ │ └── XMLHttpRequest.js

│ ├── LICENCIA

│ ├── package.json

│ └── README.md

├── balíček-init.js

├── package.js

├── package.json

├── README.md

├── styleguide.md

└── priadza.lock

Nodejs Web3js beží

Nodejs je populárny runtime rámec JavaScriptu na strane servera. Podporuje veľa projektov middlewaru, má zmysel umožniť uzlom komunikovať s inteligentnými kontraktmi. Prečítajte si dokumentáciu k uzlom, ako nainštalovať nodejs na vašu platformu.

Testovanie vašej inštalácie web3 v prostredí uzlov. Uložte nasledujúci kód do súboru js a spustite ho cez svoj runtime uzla. Uistite sa, že na lokálnom počítači na porte 8545 beží uzol ethereum (alebo ho zmeňte na ten, ktorý ste nakonfigurovali – pozrite si predchádzajúci článok o nastavení súkromného uzla)..

console.log ("počnúc…");

var Web3 = require (‘/ usr / lib / node_modules / web3’);

web3 = nový Web3 (nový Web3.providers.HttpProvider (‘http: // localhost: 8545’));

console.log (web3.eth.accounts);

Ak v inštalácii nie je problém, bude k dispozícii nasledujúci výstup:

local @ local-Lenovo-G50-70: / nodeinstall / node $ node eth.js

počnúc…

[‘0x81c95efa213ed798cc99e80f79eece314f76fbe8’]

local @ local-Lenovo-G50-70: / nodeinstall / node $

Týmto sa tlačí pole účtov, ktoré sú k dispozícii v uzle ethereum. (V súčasnosti je v tomto prípade iba jeden) .

Všetky funkcie web3, ktorým sa budeme v nasledujúcich častiach venovať, budú k dispozícii aj v prostredí uzlov. Od tejto chvíle sa budeme sústrediť na vykonávanie v prehliadači. Ak sa vyskytnú nejaké konkrétne problémy v inštancii vášho uzla, kontaktujte ma.

V prehliadači je spustený web3js

Web3 je možné importovať do html kódu vášho prehliadača a vytvoriť tak používateľské rozhranie pre vaše zmluvy. Tento prístup sa neodporúča, pretože nebudete vystavovať svoje rozhranie RPC tak, aby sa k nemu pripojil klientsky prehliadač. Zvyčajne budete mať k prehliadaču pripojenú podnikovú aplikáciu pripojenú k vášmu uzlu ethereum. Preto je náš test s nodejs dôležitý. Existujú aj ďalšie staršie technológie ako Java, ktoré sa musia spojiť s inteligentnými zmluvami ethereum. Existujú spôsoby, ako vytvoriť obalové knižnice v každej technológii, ak dodržiavame predpísaný formát JSON-RPC. Budeme sa však držať prostredia Javascript v prehliadači, aby sme videli všetky možnosti a funkcie, ktoré poskytuje klient ethereum.

Pozrime sa na jednoduchú stránku HTML, ktorá importuje web3 js a uskutoční jednoduché volanie zmluvy.

&lt; html&gt;

&hlava;&gt;

&lt; názov&gt; Tester pre eth web3&lt; / nadpis&gt;

&lt; skript src ="https://static.blockgeeks.com/usr/lib/node_modules/web3/lib/web3.js"&gt;&lt; / skript&gt;

&skript&gt;

&nbsp;

spustenie funkcie () {

var Web3 = require (‘web3’);

var web3 = nový Web3 ();

web3.setProvider (nový web3.providers.HttpProvider (‘http: // localhost: 8545’));

var abi = […];

var corecontractContract = web3.eth.contract (abi);

var corecontractContractInst = corecontractContract

.at (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’); console.log (corecontractContract.createCustomer (287187, „custName“, 13243244,1213334));

}

&lt; / skript&gt;

&lt; / hlava&gt;

&zaťaženie tela"štart ();"&gt;

&telo;&gt;

&lt; / html&gt;

Web3.js je možné importovať priamo z priečinka lib vo vnútri inštalácie modulu uzla. Odporúča sa používať minifikovanú verziu, ale na testovanie používam rozšírenú verziu, aby som sa dokázal doladiť do knižnice z prehliadača. Nekopírujte, prosím, vložte vyššie uvedený kód bez zmeny kódu a pridajte svoje zmluvné ABI a pridanie transakčného objektu do volania metódy createCustomer.

Zmluva ABI

Mali by sme rýchlo segway pochopiť zmluvu ABI (Aplikačné binárne rozhranie). Špecifikácia zmluvy ABI je pole JSON metódy zmluvy a podpisov premenných. ABI definuje kódovanie potrebné pre každý typ parametra, pretože tvorí súčasť vstupu pre transakciu, ktorá spúšťa kontraktovú metódu.

Ako zistíte, v minulom článku, v ktorom ste na zostavenie zmluvy použili aplikáciu prehliadača Remix, sa v aplikácii nachádzalo ABI. Pokiaľ ide o dátovú zmluvu, ABU vyzerala asi takto:

[{"konštantný": pravda,"vstupy": [],"názov":"počítať","výstupy": [{"názov":"","typu":"uint256"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"kandidát","typu":"adresa"}, {"názov":"metóda","typu":"struna"}],"názov":"isUserAuthorized","výstupy": [{"názov":"","typu":"bool"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": pravda,"vstupy": [{"názov":"","typu":"uint256"}],"názov":"používateľov","výstupy": [{"názov":"","typu":"adresa"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [],"názov":"zabiť","výstupy": [],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"používateľ","typu":"adresa"}],"názov":"addUser","výstupy": [],"splatné": pravda,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"kandidát","typu":"adresa"}, {"názov":"metóda","typu":"struna"}],"názov":"isUser","výstupy": [{"názov":"","typu":"bool"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": pravda,"vstupy": [{"názov":"i","typu":"uint256"}],"názov":"getIthUser","výstupy": [{"názov":"","typu":"adresa"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"index","typu":"uint256"}, {"názov":"názov","typu":"struna"}],"názov":"updateCustomer","výstupy": [],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"i","typu":"uint256"}],"názov":"deleteIthUser","výstupy": [],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": pravda,"vstupy": [],"názov":"vlastník","výstupy": [{"názov":"","typu":"adresa"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"index","typu":"uint256"}, {"názov":"postavenie","typu":"uint256"}],"názov":"updateCustomerStatus","výstupy": [],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": nepravdivé,"vstupy": [{"názov":"id","typu":"uint256"}, {"názov":"názov","typu":"struna"}, {"názov":"dátum narodenia","typu":"uint256"}, {"názov":"sociálne","typu":"uint256"}],"názov":"createCustomer","výstupy": [],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": pravda,"vstupy": [],"názov":"getUserCount","výstupy": [{"názov":"","typu":"uint256"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": pravda,"vstupy": [{"názov":"index","typu":"uint256"}],"názov":"getCustomer","výstupy": [{"názov":"id","typu":"uint256"}, {"názov":"názov","typu":"struna"}, {"názov":"dátum narodenia","typu":"uint256"}, {"názov":"sociálne","typu":"uint256"}, {"názov":"postavenie","typu":"uint256"}],"splatné": nepravdivé,"typu":"funkcie"}, {"konštantný": pravda,"vstupy": [{"názov":"id","typu":"uint256"}],"názov":"getCustomerById","výstupy": [{"názov":"idRet","typu":"uint256"}, {"názov":"názov","typu":"struna"}, {"názov":"dátum narodenia","typu":"uint256"}, {"názov":"sociálne","typu":"uint256"}, {"názov":"postavenie","typu":"uint256"}],"splatné": nepravdivé,"typu":"funkcie"}, {"anonymný": nepravdivé,"vstupy": [{"indexované": nepravdivé,"názov":"eventType","typu":"struna"}, {"indexované": nepravdivé,"názov":"id","typu":"uint256"}],"názov":"Výstraha","typu":"udalosť"}, {"anonymný": nepravdivé,"vstupy": [{"indexované": pravda,"názov":"od","typu":"adresa"}, {"indexované": pravda,"názov":"accessTime","typu":"uint256"}, {"indexované": nepravdivé,"názov":"metóda","typu":"struna"}, {"indexované": nepravdivé,"názov":"popis","typu":"struna"}],"názov":"LogAccess","typu":"udalosť"}]

Ako vidíte, má metódy zo super kontraktu a aktuálneho kontraktu s podpisom, parametrami a návratovými typmi. Toto je potrebné odovzdať priamo ako pole json do konštruktora kontraktu (abi), aby ste vytvorili podrobný plán alebo triedu kontraktu..

var abi = […];

var corecontractContract = web3.eth.contract (abi);

Tento mechanizmus zaisťuje, že ľubovoľnú metódu je možné zavolať priamo na inštanciu triedy kontraktu. Nasledujúci príkaz vytvorí inštanciu triedy kontraktu corecontractContract

var corecontractContractInst = corecontractContract

.at (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’);

Teraz je zmluva viazaná na adresu, na ktorej je „nainštalovaný“ kód zmluvy. Teraz môžeme volať metódy na zmluve.

corecontractContract.createCustomer (287187, „custName“, 13243244,1213334);

Táto výzva vráti hodnotu transakcie za transakciu predloženú k zmluve.

Ďalšie parametre:

Spolu s parametrom metódy umožňuje volanie odovzdanie ďalších nefunkčných parametrov volania metódy.

Objekt transakcie (Toto je kópia definície objektu transakcie v referenčnom dokumente s niekoľkými ďalšími komentármi):

from: String – Adresa pre odosielajúci účet. Používa web3.eth.default účet majetok, ak nie je uvedený. Predvolené vlastníctvo účtu je vo fáze inicializácie uvedené ako web3.eth.defaultAccount = web3.eth.accounts [0]; To naznačuje, že použijeme prvý účet v poli accounts, plyn potrebný na transakciu sa odpočíta z tohto účtu.

do: String – (voliteľné) Cieľová adresa správy, ponechaná nedefinovaná pre transakciu vytvorenia zmluvy. Pre náš prípad, keď používame objekt transakcie na volanie inteligentných kontraktov, to teda nie je potrebné.

value: Number | String | BigNumber – (voliteľné) Hodnota prevedená pre transakciu v Wei, tiež dotácia, ak ide o transakciu vytvorenia zmluvy. Pretože nevytvárame zmluvu (už bola nasadená.

gas: Number | String | BigNumber – (voliteľné, predvolené: To-Be-Determined) Množstvo plynu, ktoré sa má použiť na transakciu (nepoužitý plyn sa vracia). To je v našom prípade dôležité, pretože potrebujeme odovzdať trochu plynu, aby metóda aktualizovania zmluvy získala potrebný plyn na dokončenie vykonania. Odhadovaný plyn na jednu metódu je k dispozícii v aplikácii remix. Túto hodnotu musíme použiť narazenú na celé číslo, aby naša transakcia nezlyhala kvôli chybe „nedostatok plynu“.

gasPrice: Number | String | BigNumber – (voliteľné, predvolené: To-Be-Determined) Cena plynu pre túto transakciu v wei, predvolené nastavenie je stredná cena plynu v sieti.

údaje: Reťazec – (voliteľné) Buď a bajtový reťazec obsahujúce súvisiace údaje správy alebo v prípade transakcie vytvorenia zmluvy inicializačný kód. Toto nie je v našom prípade potrebné, pretože naše nie je volanie nasadenia.

nonce: Number – (voliteľné) Celé číslo nonce. To umožňuje prepísať vaše vlastné nespracované transakcie, ktoré používajú rovnaký nonce.

Zmluva o neustálom volaní vs. Transakčné volanie

Zmluva môže obsahovať dva typy hovorov, ktoré sú implementované v jej kódexu spoľahlivosti. Konštantné volanie nezmení stav kontraktu, iba načíta blockchain a vráti hodnoty, ktoré filtruje podľa svojej logiky. Tento typ hovoru nepotrebuje na uskutočnenie žiadne ethery, takže v našom volaní zmluvnou metódou nemusíme uvádzať žiadny parameter plynu. Pre napr.

console.log (corecontractContractInst.getCustomer (0));

To vráti pole BigNumbers pre uints:

[BigNumber, "aCust", BigNumber, BigNumber, BigNumber]

Ak chcete previesť BigNumbers na desatinné miesta, použite obslužnú metódu toDecimal (BigNumber):

console.log (web3.toDecimal (corecontractContractInst.getCustomer (0) [0])));

Toto volanie nevytvára transakciu na blockchaine.

Transakčné volanie je určené na aktualizáciu stavu zmluvy, napríklad vytvorenie záznamu o mapovaní zákazníka tu v DataContract..

corecontractContract.createCustomer (287187, „custName“, 13243244,1213334);

Táto výzva bude mať za následok transakciu a bude spotrebovávať trochu plynu. Plyn je možné dodávať spolu s transakciou pomocou transakčného objektu:

console.log (corecontractContractInst.createCustomer (133423, ‘aCust’, 3334,454545), {plyn: 20000});

20000 je tu ľubovoľných, použite prosím plyn odhadnutý z vykonania metódy v aplikácii Remix. Ak je množstvo plynu nižšie ako sa očakávalo v EVM, dostanete chyby:

Uncaught Error: Transaction gas is too low. Nie je dostatok plynu na pokrytie minimálnych nákladov na transakciu (minimálne: 22680, získaných: 20000). Skúste zvýšiť dodávaný plyn.

na Object.InvalidResponse (web3.js: 3120)

na adrese RequestManager.send (web3.js: 6043)

0});

Filtre:

Udalosti, ktoré generujeme zo zmluvy o spoľahlivosti, si môžete vypočuť na vrstve Web3. Knižnica sleduje volebný mechanizmus, aby vyhľadala udalosti prihlásené na blockchaine a ak sa nejaké vygeneruje, prebubláva ich až do vrstvy web3.

V kóde ACLContract sme vytvorili niekoľko udalostí týkajúcich sa riadenia prístupu. Udalosti, ktoré sa generujú z ľubovoľného hovoru klienta, môžeme počúvať tak, že sa prihlásime na ich odber pomocou rozhrania allEvents () API.

var events = corecontractContractInst.allEvents ();

// pozor na zmeny

events.watch (funkcia (chyba, udalosť) {

if (! chyba)

console.log (JSON.stringify (udalosť));

});

Takto sa vygenerujú také udalosti:

{"adresa":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","blockNumber": 47,"logIndex": 0,"transactionHash":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","transactionIndex": 0,"transactionLogIndex":"0x0","typu":"ťaží","udalosť":"LogAccess","args": {"od":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","accessTime":"1494178629","metóda":"createCustomer","popis":"úspešný prístup"}}

{"adresa":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","blockNumber": 47,"logIndex": 0,"transactionHash":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","transactionIndex": 0,"transactionLogIndex":"0x0","typu":"ťaží","udalosť":"LogAccess","args": {"od":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","accessTime":"1494178629","metóda":"createCustomer","popis":"úspešný prístup"}}

Vyššie uvedené sú dve udalosti vytvorené, keď bol volaný createCustomer dvakrát. Je možné prijímať udalosti od jedného predplatiteľa, zatiaľ čo viaceré zdroje generujú udalosti pomocou volaní kontraktu prostredníctvom hovorov JSON-RPC. To umožňuje vytvoriť jednu aplikáciu na zaznamenávanie údajov auditu.

V tejto diskusii sme sa dotkli niekoľkých veľmi základných vecí klienta javascript. V ďalšom sa pozrieme na niektoré pokročilé koncepty, ako je napríklad napísanie testovacieho kódu pre funkcie prostredníctvom knižnice web3, vytvorenie kompletného Dappu, použitie hľuzovkového rámca a ďalšie.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me