Introduksjon til Ethereum Smart Contract Clients (Web3js Library)

Etter noen diskusjoner rundt solidity-kontraktdesign og problemstillinger i de to siste artiklene (her og her), vil vi se på hvordan vi kan integrere smarte kontrakter med applikasjoner for bedriftskunder. Det er flere teknologier som kan samhandle med en etereumnode (ethereum blockchain-klient).

Den grunnleggende arkitekturen til EVM (ethereum virtual machine) som kjører smarte kontrakter, er at alle anrop til kontrakten blir utført som en transaksjon der eteren som kreves for en utført kontraktsmetode, blir overført fra den anropende kontoadressen til kontraktsadressen. Kontraktskoden ligger på kontraktsadressen på blockchain og forventer at samtalene kommer inn som transaksjoner som bærer metodeparameterdataene sammen med transaksjonen som “input”. For å aktivere et standardformat for alle klienter, må metodens navn og parametere samles i et anbefalt format.

Introduksjon til Ethereum Smart Contract Clients (Web3js Library)

JSON-RPC

ethereum standardklienter utsetter et grensesnitt for å lage RPC (Remote Procedure Call) for kontraktkode distribuert på blockchain. Dette kalles RPC-grensesnittet som fungerer som en HTTP-postforespørsel ved standardport 8545 for farten, c ++ og paritetsklienten. Dette kan vanligvis tilpasses som en kommandoparameter eller en konfigurasjonsfilegenskap:

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

–rpc –rpcaddr <ip> –rpcport <portnummer>

RPC-formatet strukturert på det populære JSON-RPC format. Formatet er komplekst, spesielt for marshaling av parameterverdier basert på typene. Den anbefalte kodingsskjemaet må følges som definert med riktig polstring for å sikre at EVM er i stand til å dekode dem.

På grunn av det lave nivået av kompleksitet i JSON_RPC-formatet, er det en rekke innpakningsbiblioteker tilgjengelig som forenkler anropsformatet. Den eldste er en JavaScript-innpakning web3.js som fungerer i nettleseren og en nodejs-forekomst. Denne diskusjonen tar ikke sikte på å erstatte referansedokumentet for alle API-definisjonene. Se lenken ovenfor for spesifikke API-samtaler. Her vil vi bruke et spesifikt sett med APIer for å lage en anbefaling for implementering av en nettleserbasert klient for den smarte kontrakten.

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Installer web3.js

Følg github-instruksjonen ovenfor for å installere web3 som en node, nettleser eller meteorpakke. I tilfelle du installerer en nodemodul med -g, blir den installert i banen / usr / lib / node_modules / web3. Forsikre deg om at denne katalogen eksisterer med avhengighetene i følgende struktur (Dette er for Linux OS dette er testet med, se din OS-spesifikke nodejs-dokumentasjon for din OS-spesifikke bane), dette er viktig for nodejs kjøretid for å finne alle de avhengige biblioteker.

/ usr / lib / node_modules / web3

├── bower.json

├── bundled.js

├── sirkel.yml

├── coder.js

├── dist

│ ├── web3.js

│ ├── web3.js.map

│ ├── web3-light.js

│ ├── web3-light.min.js

│ └── web3.min.js

├── eksempel

│ ├── balance.html

│ ├── kontrakt_array.html

│ ├── kontrakt.html

│ ├── hendelse_inc.html

│ ├── icap.html

│ ├── namereg.html

│ └── node-app.js

├── gulpfile.js

├── index.js

├── lib

│ ├── kontrakter

│ │ ├── GlobalRegistrar.json

│ │ ├── ICAPRegistrar.json

│ │ └── SmartExchange.json

│ ├── soliditet

│ │ ├── 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

│ ├── verktøy

│ │ ├── browser-bn.js

│ │ ├── browser-xhr.js

│ │ ├── config.js

│ │ ├── sha3.js

│ │ └── utils.js

│ ├── versjon.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

│ │ ├── metoder

│ │ │ ├── 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

├── LISENS

├── node_modules

│ ├── bignumber.js

│ │ ├── bignumber.js

│ │ ├── bignumber.js.map

│ │ ├── bignumber.min.js

│ │ ├── bower.json

│ │ ├── dok

│ │ │ └── API.html

│ │ ├── LISENS

│ │ ├── pakke.json

│ │ └── README.md

│ ├── crypto-js

│ │ ├── aes.js

│ │ ├── bower.json

│ │ ├── cipher-core.js

│ │ ├── BIDRAG.md

│ │ ├── core.js

│ │ ├── crypto-js.js

│ │ ├── dok

│ │ │ └── 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

│ │ ├── LISENS

│ │ ├── md5.js

│ │ ├── mode-cfb.js

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

│ │ ├── mode-ctr.js

│ │ ├── mode-ecb.js

│ │ ├── modus-ofb.js

│ │ ├── pakke.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

│ │ ├── LISENS-MIT.txt

│ │ ├── pakke.json

│ │ ├── README.md

│ │ └── utf8.js

│ ├── xhr2

│ │ ├── Cakefile

│ │ ├── BIDRAG.md

│ │ ├── lib

│ │ │ ├── browser.js

│ │ │ └── xhr2.js

│ │ ├── LISENS.txt

│ │ ├── pakke.json

│ │ ├── README.md

│ │ ├── src

│ │ │ ├── 000-xml_http_request_event_target.coffee

│ │ │ ├── 001-xml_http_request.coffee

│ │ │ ├── feil. Kaffe

│ │ │ ├── progress_event.coffee

│ │ │ └── xml_http_request_upload.coffee

│ │ └── test

│ │ ├── inventar

│ │ │ ├── hallo.json

│ │ │ ├── hallo.txt

│ │ │ └── xhr2.png

│ │ ├── html

│ │ │ └── browser_test.html

│ │ └── src

│ │ ├── events_test.coffee

│ │ ├── event_target_test.coffee

│ │ ├── headers_test.coffee

│ │ ├── hjelpere

│ │ │ ├── browser_mocha_runner.coffee

│ │ │ ├── browser_mocha_setup.coffee

│ │ │ ├── setup.coffee

│ │ │ └── xhr_server.coffee

│ │ ├── nodejs_set_test.coffee

│ │ ├── redirect_test.coffee

│ │ ├── respons_type_test.coffee

│ │ ├── responsurl_test.coffee

│ │ ├── send_test.coffee

│ │ ├── status_test.coffee

│ │ └── xhr_test.coffee

│ └── xmlhttforespørsel

│ ├── lib

│ │ └── XMLHttpRequest.js

│ ├── LISENS

│ ├── pakke.json

│ └── README.md

├── package-init.js

├── package.js

├── pakke.json

├── README.md

├── styleguide.md

└── garn. Lås

Nodejs Web3js kjøres

Nodejs er et populært rammeverk for runtime for javascript på serveren. Den støtter mange mellomvareprosjekter, det er fornuftig å gjøre det mulig for nodejs å samhandle med smarte kontrakter. Se litt nodedokumentasjon om hvordan du installerer nodejs på plattformen din.

For å teste web3-installasjonen din med node-miljø. Lagre følgende kode i en js-fil og kjør den gjennom noden din. Forsikre deg om at du har en etereumnode som kjører på den lokale maskinen på port 8545 (eller endre den til den du har konfigurert – se den tidligere artikkelen om å sette opp en privat node).

console.log ("starter…");

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

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

console.log (web3.eth.accounts);

Hvis det ikke er noe problem i installasjonen, vil det være følgende utdata:

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

starter…

[‘0x81c95efa213ed798cc99e80f79eece314f76fbe8’]

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

Dette skriver ut en rekke kontoer som er tilgjengelige med ethereum-noden. (For øyeblikket er det bare en i dette tilfellet) .

Alle web3-funksjonene som vi vil diskutere i de følgende avsnittene, vil også være tilgjengelige i nodemiljøet. Herfra vil vi konsentrere oss om nettleserbasert kjøring. Hvis du møter spesifikke problemer i din node-instans, kan du kontakte meg.

Web3js kjører i nettleseren

Web3 kan importeres til nettleserens html-kode for å opprette brukergrensesnitt for kontraktene dine. Denne tilnærmingen anbefales ikke, da du ikke vil utsette RPC-grensesnittet for klientlesermaskinen å koble seg til. Vanligvis vil du ha en bedriftsapplikasjon som kobler til ethereumnoden din i stedet for nettleseren. Dette er grunnen til at testen vår med nodejs er viktig. Det er andre eldre teknologier som java som trenger å koble til ethereum smarte kontrakter. Det er måter å lage omslagsbibliotekene i hver teknologi hvis vi følger JSON-RPC-formatet slik det ble foreskrevet. Vi vil imidlertid holde oss til javascript-miljøet i nettleseren for å se alle fasilitetene og funksjonene som en etereumklient tilbyr.

La oss se en enkel HTML-side som importerer web3 js og foretar en enkel kontraktsanrop.

&lt; html&gt;

&lt; hode&gt;

&lt; tittel&gt; Tester for eth web3&lt; / tittel&gt;

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

&lt; manus&gt;

&nbsp;

funksjonsstart () {

var Web3 = krever (‘web3’);

var web3 = ny Web3 ();

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

var abi = […];

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

var corecontractContractInst = corecontractContract

.på (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’); console.log (corecontractContract.createCustomer (287187, ”custName”, 13243244,1213334));

}

&lt; / skript&gt;

&lt; / hode&gt;

&lt; kroppsbelastning ="start();"&gt;

&lt; kropp&gt;

&lt; / html&gt;

Web3.js kan importeres direkte fra lib-mappen inne i installasjonen av nodemodulen. Det anbefales å bruke den minifiserte versjonen, men jeg bruker den utvidede versjonen for testing for å kunne feilsøke biblioteket fra nettleseren. Vær så snill, ikke kopier lim inn koden ovenfor uten å endre koden, og legg til ABI-kontrakten din og legge til et transaksjonsobjekt i createCustomer-metoden..

Kontrakt ABI

Vi bør en rask segway for å forstå kontrakten ABI (Søknads binært grensesnitt). En ABI-spesifikasjon for kontrakt er et JSON-utvalg av kontraktsmetoden og variable signaturer. ABI definerer kodingen som trengs for hver type parameter, da den utgjør en del av inngangen for transaksjonen som utløser en kontraktsmetode.

Som du vil finne, i den siste artikkelen der du brukte Remix-nettleser-appen til å kompilere kontrakten din, var det et ABI opprettet av appen. For datakontrakten så ABU omtrent slik ut:

[{"konstant":ekte,"innganger": [],"Navn":"telle","utganger": [{"Navn":"","type":"uint256"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"kandidat","type":"adresse"}, {"Navn":"metode","type":"streng"}],"Navn":"isUserAuthorized","utganger": [{"Navn":"","type":"bool"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [{"Navn":"","type":"uint256"}],"Navn":"brukere","utganger": [{"Navn":"","type":"adresse"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [],"Navn":"drepe","utganger": [],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"bruker","type":"adresse"}],"Navn":"addUser","utganger": [],"som skal betales":ekte,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"kandidat","type":"adresse"}, {"Navn":"metode","type":"streng"}],"Navn":"er bruker","utganger": [{"Navn":"","type":"bool"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [{"Navn":"Jeg","type":"uint256"}],"Navn":"getIthUser","utganger": [{"Navn":"","type":"adresse"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"indeks","type":"uint256"}, {"Navn":"Navn","type":"streng"}],"Navn":"updateCustomer","utganger": [],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"Jeg","type":"uint256"}],"Navn":"deleteIthUser","utganger": [],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [],"Navn":"Eieren","utganger": [{"Navn":"","type":"adresse"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"indeks","type":"uint256"}, {"Navn":"status","type":"uint256"}],"Navn":"updateCustomerStatus","utganger": [],"som skal betales":falsk,"type":"funksjon"}, {"konstant":falsk,"innganger": [{"Navn":"id","type":"uint256"}, {"Navn":"Navn","type":"streng"}, {"Navn":"fødselsdato","type":"uint256"}, {"Navn":"sosial","type":"uint256"}],"Navn":"createCustomer","utganger": [],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [],"Navn":"getUserCount","utganger": [{"Navn":"","type":"uint256"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [{"Navn":"indeks","type":"uint256"}],"Navn":"getCustomer","utganger": [{"Navn":"id","type":"uint256"}, {"Navn":"Navn","type":"streng"}, {"Navn":"fødselsdato","type":"uint256"}, {"Navn":"sosial","type":"uint256"}, {"Navn":"status","type":"uint256"}],"som skal betales":falsk,"type":"funksjon"}, {"konstant":ekte,"innganger": [{"Navn":"id","type":"uint256"}],"Navn":"getCustomerById","utganger": [{"Navn":"idRet","type":"uint256"}, {"Navn":"Navn","type":"streng"}, {"Navn":"fødselsdato","type":"uint256"}, {"Navn":"sosial","type":"uint256"}, {"Navn":"status","type":"uint256"}],"som skal betales":falsk,"type":"funksjon"}, {"anonym":falsk,"innganger": [{"indeksert":falsk,"Navn":"eventType","type":"streng"}, {"indeksert":falsk,"Navn":"id","type":"uint256"}],"Navn":"Varsling","type":"begivenhet"}, {"anonym":falsk,"innganger": [{"indeksert":ekte,"Navn":"av","type":"adresse"}, {"indeksert":ekte,"Navn":"tilgangstid","type":"uint256"}, {"indeksert":falsk,"Navn":"metode","type":"streng"}, {"indeksert":falsk,"Navn":"avd","type":"streng"}],"Navn":"LogAccess","type":"begivenhet"}]

Som du ser har den metodene fra superkontrakten og den nåværende kontrakten med signatur, parametere og returtyper. Dette må sendes direkte som en json-matrise i kontraktskonstruktøren (abi) for å lage en tegning eller klasse av kontrakten.

var abi = […];

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

Denne mekanismen sikrer at en hvilken som helst metode kan kalles direkte på forekomsten av kontraktklassen. Neste uttalelse oppretter en forekomst av kontraktklassen corecontractContract

var corecontractContractInst = corecontractContract

.på (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’);

Nå er kontrakten knyttet til adressen der kontraktkoden er “installert”. Nå kan vi kalle metoder på kontrakten.

corecontractContract.createCustomer (287187, ”custName”, 13243244,1213334);

Denne samtalen returnerer en transaksjonshash av transaksjonen som er sendt til kontrakten.

Ytterligere parametere:

Sammen med metodeparameteren tillater samtalen at flere ikke-funksjonelle parametere sendes i metodeanropet.

Transaksjonsobjektet (Dette er en kopi av transaksjonsobjektdefinisjonen i referansedokumentet med noen ekstra kommentarer):

fra: String – Adressen til senderkontoen. Bruker web3.eth.default-konto eiendom, hvis ikke spesifisert. Standard kontoegenskap er spesifisert i initialiseringsfasen som web3.eth.defaultAccount = web3.eth.accounts [0]; Dette indikerer at vi vil bruke den første kontoen i regnskapsoppstillingen, gassen som trengs for transaksjonen blir trukket fra denne kontoen.

til: Streng – (valgfritt) Destinasjonsadressen til meldingen, som er udefinert for en kontraktopprettingstransaksjon. Så for vårt tilfelle der vi bruker transaksjonsobjektet for smarte kontraktssamtaler, er dette ikke nødvendig.

verdi: Number | String | BigNumber – (valgfritt) Verdien overført for transaksjonen i Wei, også legatet hvis det er en transaksjon som oppretter kontrakt. Siden vi ikke oppretter en kontrakt (den har allerede blitt distribuert.

gass: Antall | Streng | BigNumber – (valgfritt, standard: Skal bestemmes) Mengden gass som skal brukes til transaksjonen (ubrukt gass refunderes). Dette er viktig i vårt tilfelle da vi trenger å gi litt gass, slik at kontraktsoppdateringsmetoden får den nødvendige gassen for å fullføre utførelsen. Den estimerte gassen per metode er tilgjengelig i remix-appen. Vi må bruke den verdien som er støtt opp til hele tallet, slik at transaksjonen vår ikke mislykkes på grunn av feilen “ikke nok gass”.

gasPrice: Number | String | BigNumber – (valgfritt, standard: skal bestemmes) Prisen på bensin for denne transaksjonen i wei, er standard til den gjennomsnittlige nettverksgassprisen.

data: String – (valgfritt) Enten a byte streng som inneholder tilhørende data i meldingen eller i tilfelle en kontraktopprettelsestransaksjon, initialiseringskoden. Dette er ikke nødvendig i vårt tilfelle, ettersom vårt ikke er en distribusjonsanrop.

nonce: Number – (valgfritt) Heltall av en nonce. Dette gjør at du kan overskrive dine egne ventende transaksjoner som bruker samme nonce.

Kontrakt konstant samtale vs. Transaksjonssamtale

En kontrakt kan ha to typer anrop som implementert i soliditetskoden. En konstant samtale endrer ikke kontrakttilstanden, den leser bare blockchain og returnerer verdiene den filtrerer ut i henhold til logikken. Denne typen samtaler trenger ikke etere for å utføre, så vi trenger ikke å sende noen gassparameter i kontraktsmetoden. For eksempel.

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

Dette vil returnere en rekke BigNumbers for uints:

[Stort antall, "aCust", BigNumber, BigNumber, BigNumber]

For å konvertere BigNumbers til desimaler, bruk toDecimal (BigNumber) verktøymetode:

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

Denne samtalen oppretter ikke en transaksjon på blockchain.

En transaksjonsanrop er ment å oppdatere kontrakttilstanden, som å lage en post på kundekartleggingen her i DataContract.

corecontractContract.createCustomer (287187, ”custName”, 13243244,1213334);

Denne samtalen vil resultere i en transaksjon og vil forbruke litt bensin. Gass kan leveres sammen med transaksjonen ved hjelp av transaksjonsobjektet:

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

20000 her er vilkårlig. Vennligst bruk gassen beregnet fra metodeutførelsen i Remix-appen. Hvis gassmengden er lavere enn forventet av EVM, vil du motta feil:

Ikke fanget feil: Transaksjonsgassen er for lav. Det er ikke nok gass til å dekke minimale kostnadene ved transaksjonen (minimum: 22680, fikk: 20000). Prøv å øke tilført gass.

på Object.InvalidResponse (web3.js: 3120)

på RequestManager.send (web3.js: 6043)

0});

Filtre:

Hendelsene vi genererer fra soliditetskontrakten kan høres på på Web3-laget. Biblioteket følger en avstemningsmekanisme for å lete etter hendelser som er logget på blockchain og bobler den opp til web3-laget, hvis noen genereres.

Vi har opprettet noen hendelser relatert til tilgangskontroll i ACLContract-koden. Vi kan lytte til hendelsene når de genereres fra ethvert klientsamtale ved å abonnere på dem ved hjelp av allEvents () API.

var events = corecontractContractInst.allEvents ();

// se etter endringer

events.watch (funksjon (feil, hendelse) {

hvis (! feil)

console.log (JSON.stringify (event));

});

Dette vil sende hendelser som dette:

{"adresse":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","blockNumber": 47,"logIndex": 0,"transactionHash":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","transactionIndex": 0,"transactionLogIndex":"0x0","type":"utvunnet","begivenhet":"LogAccess","argumenterer": {"av":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","tilgangstid":"1494178629","metode":"createCustomer","avd":"vellykket tilgang"}}

{"adresse":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","blockNumber": 47,"logIndex": 0,"transactionHash":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","transactionIndex": 0,"transactionLogIndex":"0x0","type":"utvunnet","begivenhet":"LogAccess","argumenterer": {"av":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","tilgangstid":"1494178629","metode":"createCustomer","avd":"vellykket tilgang"}}

Ovennevnte er to hendelser opprettet da createCustomer ble ringt to ganger. Det er mulig å motta hendelser fra en enkelt abonnent mens flere kilder genererer hendelser ved hjelp av kontraktssamtalene gjennom JSON-RPC-samtaler. Dette gjør det mulig å lage en enkelt app for å fange revisjonsdata.

I denne diskusjonen ovenfor berørte vi noen veldig grunnleggende om javascript-klienten. I den neste vil vi se på noen avanserte konsepter som hvordan man skriver testkode for funksjoner gjennom web3-biblioteket, Opprette en komplett Dapp, ved hjelp av trøffelrammeverk og mer.

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