Įvadas į „Ethereum“ išmaniųjų sutarčių klientus („Web3js“ biblioteka)

Po tam tikrų diskusijų apie tvirtą išmaniųjų sutarčių dizainą ir paskutiniuose dviejuose straipsniuose (čia ir čia) pateiktas problemas, mes apžvelgsime, kaip mes galime integruoti pažangias sutartis su įmonės klientų programomis. Yra keletas technologijų, galinčių sąveikauti su ethereum mazgu (ethereum blockchain klientas).

Pagrindinė pažangias sutartis vykdančios EVM („ethereum“ virtualiosios mašinos) architektūra yra ta, kad visi skambučiai į sutartį vykdomi kaip operacija, kai eteris, reikalingas vykdant sutarties metodą, perkeliamas iš skambinančiojo sąskaitos adreso į sutarties sąskaitos adresą. Sutarties kodas yra sutarties adresas, esantis blokų grandinėje, ir tikisi, kad skambučiai įvyks kaip operacijos, turinčios metodo parametrų duomenis kartu su operacija kaip „įvestis“. Norint įgalinti standartinį formatą visiems klientams, metodo pavadinimą ir parametrus reikia išdėstyti rekomenduojamu formatu.

„Ethereum“ išmaniųjų sutarčių klientų įvadas („Web3js“ biblioteka)

JSON-RPC

„ethereum“ standartiniai klientai pateikia sąsają, leidžiančią atlikti RPC (nuotolinio procedūrų iškvietimą) sutarties kodui, dislokuotam blokų grandinėje. Tai vadinama RPC sąsaja, teikiama kaip HTTP pranešimų užklausa pagal numatytąjį 8545 prievadą „go“, „c ++“ ir „parity“ klientams. Tai paprastai galima pritaikyti kaip komandos parametrą arba konfigūracijos failo ypatybę:

#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 <uosto numeris>

RPC formatas susistemintas populiariajame JSON-RPC formatas. Formatas yra sudėtingas, ypač norint nustatyti parametrų vertes pagal tipus. Norint užtikrinti, kad EVM galėtų juos iššifruoti, reikia laikytis rekomenduojamos kodavimo schemos, kaip apibrėžta teisingu užpildu.

Dėl žemo lygio JSON_RPC formato sudėtingumo yra keletas pakavimo bibliotekų, kurios supaprastina skambučio formatą. Seniausias yra „JavaScript“ įvyniojimas web3.js kuris veikia naršyklėje ir „nodejs“ egzemplioriuje. Ši diskusija nesiekia pakeisti visų API apibrėžimų informacinio dokumento. Dėl konkrečių API skambučių žr. Aukščiau pateiktą nuorodą. Čia naudosime konkretų API rinkinį, kad sukurtume rekomendaciją, kaip įdiegti naršyklės klientą išmaniajai sutarčiai.

#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

Įdiekite „web3.js“

Norėdami įdiegti „Web3“ kaip mazgą, naršyklę ar meteorų paketą, vadovaukitės aukščiau pateiktomis „github“ instrukcijomis. Jei įdiegiate mazgo modulį su -g, jis bus įdiegtas kelyje / usr / lib / node_modules / web3. Įsitikinkite, kad šiame kataloge yra priklausomybių šioje struktūroje (tai skirta „Linux“ operacinei sistemai, su kuria bandoma, prašome peržiūrėti savo OS specifinį „nodejs“ dokumentaciją, skirtą jūsų konkrečiam OS keliui). bibliotekos.

/ usr / lib / node_modules / web3

├── bower.json

├── paketas.js

├── apskritimas.yml

├── coder.js

├── dist

│ ├── web3.js

│ ├── web3.js.map

│ ├── web3-light.js

│ ├── web3-light.min.js

│ └── web3.min.js

├── pavyzdys

│ ├── balansas.html

│ ├── contract_array.html

│ ├── sutartis.html

│ ├── event_inc.html

│ ├── icap.html

│ ├── namereg.html

│ └── mazgas-app.js

├── gulpfile.js

├── index.js

├── lib

│ ├── sutartys

│ │ ├── GlobalRegistrar.json

│ │ ├── ICAPRegistrar.json

│ │ └── „SmartExchange.json“

│ ├── tvirtumas

│ │ ├── adresas.js

│ │ ├── bool.js

│ │ ├── bytes.js

│ │ ├── coder.js

│ │ ├── dynamicbytes.js

│ │ ├── formatters.js

│ │ ├── tarpt

│ │ ├── param.js

│ │ ├── real.js

│ │ ├── string.js

│ │ ├── type.js

│ │ ├── uint.js

│ │ └── ureal.js

│ ├── utils

│ │ ├── naršyklė-bn.js

│ │ ├── naršyklė-xhr.js

│ │ ├── config.js

│ │ ├── sha3.js

│ │ └── utils.js

│ ├── versija.json

│ ├── internetas3

│ │ ├── allevents.js

│ │ ├── batch.js

│ │ ├── contract.js

│ │ ├── klaidos.js

│ │ ├── event.js

│ │ ├── pratęsti.js

│ │ ├── filter.js

│ │ ├── formatters.js

│ │ ├── funkcija.js

│ │ ├── httpprovider.js

│ │ ├── iban.js

│ │ ├── ipcprovider.js

│ │ ├── jsonrpc.js

│ │ ├── metodas.js

│ │ ├── metodai

│ │ │ ├── db.js

│ │ │ ├── et.js

│ │ │ ├── net.js

│ │ │ ├── personal.js

│ │ │ ├── shh.js

│ │ │ ├── swarm.js

│ │ │ └── watches.js

│ │ ├── namereg.js

│ │ ├── nuosavybė.js

│ │ ├── requestmanager.js

│ │ ├── settings.js

│ │ ├── sinchronizavimas.js

│ │ └── transfer.js

│ └── web3.js

├── LICENCIJA

├── mazgo_moduliai

│ ├── bignumber.js

│ │ ├── bignumber.js

│ │ ├── bignumber.js.map

│ │ ├── bignumber.min.js

│ │ ├── bower.json

│ │ ├── doc

│ │ │ └── API.html

│ │ ├── LICENCIJA

│ │ ├── paketas.json

│ │ └── README.md

│ ├── kripto-js

│ │ ├── aes.js

│ │ ├── bower.json

│ │ ├── cipher-core.js

│ │ ├── ĮNAŠAS.md

│ │ ├── core.js

│ │ ├── kripto-js.js

│ │ ├── dokumentai

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

│ │ ├── LICENCIJA

│ │ ├── md5.js

│ │ ├── mode-cfb.js

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

│ │ ├── mode-ctr.js

│ │ ├── mode-ecb.js

│ │ ├── mode-ofb.js

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

│ │ ├── LICENCIJA-MIT.txt

│ │ ├── paketas.json

│ │ ├── README.md

│ │ └── utf8.js

│ ├── xhr2

│ │ ├── Cakefile

│ │ ├── ĮNAŠAS.md

│ │ ├── lib

│ │ │ ├── browser.js

│ │ │ └── xhr2.js

│ │ ├── LICENCIJA.txt

│ │ ├── paketas.json

│ │ ├── README.md

│ │ ├── src

│ │ │ ├── 000-xml_http_request_event_target.coffee

│ │ │ ├── 001-xml_http_request.coffee

│ │ │ ├── klaidos.kava

│ │ │ ├── progress_event.kava

│ │ │ └── xml_http_request_upload.coffee

│ │ └── testas

│ │ ├── armatūra

│ │ │ ├── labas.json

│ │ │ ├── labas.txt

│ │ │ └── xhr2.png

│ │ ├── html

│ │ │ └── naršyklės_testas.html

│ │ └── src

│ │ ├── įvykių_testas. Kava

│ │ ├── event_target_test.kava

│ │ ├── antraštės_testas. Kava

│ │ ├── pagalbininkai

│ │ │ ├── browser_mocha_runner.coffee

│ │ │ ├── browser_mocha_setup.coffee

Setup │ │ ├── nustatymas.kava

│ │ │ └── xhr_server.coffee

│ │ ├── nodejs_set_test.coffee

│ │ ├── peradresavimo_testas.kava

│ │ ├── atsakymo tipo_testas.kava

│ │ ├── responseurl_test.kava

│ │ ├── send_test.kavos

│ │ ├── status_test.kava

│ │ └── xhr_test.kava

│ └── xmlhttprequest

│ ├── lib

│ │ └── XMLHttpRequest.js

│ ├── LICENCIJA

│ ├── paketas.json

│ └── README.md

├── package-init.js

├── package.js

├── paketas.json

├── README.md

├── stiliaus vadovas.md

└── verpalai.užrakinti

„Nodejs Web3js“ paleisti

„Nodejs“ yra populiari serverio „Java“ scenarijaus vykdymo laiko sistema. Tai palaiko daugelį tarpinės programinės įrangos projektų, prasminga leisti „nodejs“ sąveikauti su išmaniosiomis sutartimis. Norėdami įdiegti „nodejs“ savo platformoje, perskaitykite kai kuriuos mazgo dokumentus.

Norėdami išbandyti savo „Web3“ diegimą naudodami mazgo aplinką. Įrašykite šį kodą į js failą ir paleiskite jį per savo mazgo vykdymo laiką. Įsitikinkite, kad vietiniame kompiuteryje 8545 prievade veikia ethereum mazgas (arba pakeiskite jį į sukonfigūruotą – žr. Ankstesnį straipsnį apie privataus mazgo nustatymą).

console.log ("pradedant…");

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

web3 = new Web3 (new Web3providers.HttpProvider (‘http: // localhost: 8545’));

console.log (web3.eth.accounts);

Jei diegiant nėra problemos, bus toks išvestis:

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

pradedant…

[‘0x81c95efa213ed798cc99e80f79eece314f76fbe8’]

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

Tai spausdina sąskaitų masyvą, esantį „ethereum“ mazge. (Šiuo metu šiuo atveju yra tik vienas) .

Visos „web3“ funkcijos, kurias aptarsime tolesniuose skyriuose, bus prieinamos ir mazgo aplinkoje. Nuo šiol sutelksime dėmesį į naršyklės vykdymą, jei susiduriate su konkrečiomis problemomis savo mazgo egzemplioriuje, susisiekite su manimi.

Naršyklėje veikia „Web3js“

„Web3“ galima importuoti į jūsų naršyklės HTML kodą, kad būtų sukurta vartotojo sąsaja jūsų sutartims. Šis metodas nerekomenduojamas, nes nepateiksite RPC sąsajos, kad kliento naršyklės mašina galėtų prisijungti. Paprastai vietoj naršyklės turėsite įmonės programą, jungiančią jūsų „ethereum“ mazgą. Štai kodėl mūsų testas su „nodejs“ yra svarbus. Yra ir kitų senų technologijų, tokių kaip „Java“, kurios turi prisijungti prie „ethereum“ išmaniųjų sutarčių. Kiekvienoje technologijoje yra būdų sukurti pakavimo bibliotekas, jei laikysimės JSON-RPC formato, kaip buvo nustatyta. Tačiau mes laikysimės naršyklės „JavaScript“ aplinkos, kad pamatytume visas galimybes ir funkcijas, kurias teikia „ethereum“ klientas.

Pažiūrėkime paprastą HTML puslapį, kuris importuoja „web3 js“ ir paprasčiausiai skambina pagal sutartį.

&lt; html&gt;

&lt; galva&gt;

&lt; pavadinimas&gt; „Eth web“ bandytojas3&lt; / pavadinimas&gt;

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

&lt; scenarijus&gt;

&šaukštai;

funkcijos pradžia () {

var Web3 = reikalauti (‘web3’);

var web3 = naujas Web3 ();

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

var abi = […];

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

var corecontractContractInst = corecontractContract

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

}

&lt; / scenarijus&gt;

&lt; / galva&gt;

&kūno apkrova ="pradžia ();"&gt;

&lt; kūnas&gt;

&lt; / html&gt;

„Web3.js“ galima importuoti tiesiai iš mazgo modulio diegimo aplanko lib. Rekomenduojama naudoti sutrumpintą versiją, tačiau bandymui naudoju išplėstinę versiją, kad galėčiau derinti į biblioteką iš naršyklės. Nekopijuokite aukščiau esančio kodo, nekeisdami kodo, pridėkite sutarties ABI ir nepridėdami operacijos objekto prie „createCustomer“ metodo skambučio..

Sutartis ABI

Turėtume greitai išsiaiškinti sutartį ABI (Programos dvejetainė sąsaja). Sutarties ABI specifikacija yra JSON sutarties metodo ir kintamų parašų masyvas. ABI apibrėžia kodavimą, reikalingą kiekvienam parametrų tipui, nes jis sudaro operacijos įvesties dalį, kuri sukelia sutarties metodą.

Kaip suprasite, paskutiniame straipsnyje, kuriame sudarydami sutartį naudojote „Remix“ naršyklės programą, buvo programos sukurtas ABI. Dėl duomenų sutarties ABU atrodė maždaug taip:

[{"pastovus":tiesa,"įvestys": [],"vardas":"suskaičiuoti","išėjimai": [{"vardas":"","tipo":"uint256"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"kandidatas","tipo":"adresas"}, {"vardas":"metodas","tipo":"stygos"}],"vardas":"isUserAuthorized","išėjimai": [{"vardas":"","tipo":"bool"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus":tiesa,"įvestys": [{"vardas":"","tipo":"uint256"}],"vardas":"vartotojų","išėjimai": [{"vardas":"","tipo":"adresas"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [],"vardas":"nužudyti","išėjimai": [],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"Vartotojas","tipo":"adresas"}],"vardas":"addUser","išėjimai": [],"mokėtinas":tiesa,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"kandidatas","tipo":"adresas"}, {"vardas":"metodas","tipo":"stygos"}],"vardas":"isUser","išėjimai": [{"vardas":"","tipo":"bool"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus":tiesa,"įvestys": [{"vardas":"i","tipo":"uint256"}],"vardas":"„getIthUser“","išėjimai": [{"vardas":"","tipo":"adresas"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"indeksas","tipo":"uint256"}, {"vardas":"vardas","tipo":"stygos"}],"vardas":"„updateCustomer“","išėjimai": [],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"i","tipo":"uint256"}],"vardas":"deleteIthUser","išėjimai": [],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus":tiesa,"įvestys": [],"vardas":"savininkas","išėjimai": [{"vardas":"","tipo":"adresas"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"indeksas","tipo":"uint256"}, {"vardas":"statusą","tipo":"uint256"}],"vardas":"„updateCustomerStatus“","išėjimai": [],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus": klaidinga,"įvestys": [{"vardas":"id","tipo":"uint256"}, {"vardas":"vardas","tipo":"stygos"}, {"vardas":"Gimimo data","tipo":"uint256"}, {"vardas":"socialinis","tipo":"uint256"}],"vardas":"sukurti klientą","išėjimai": [],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus":tiesa,"įvestys": [],"vardas":"getUserCount","išėjimai": [{"vardas":"","tipo":"uint256"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus":tiesa,"įvestys": [{"vardas":"indeksas","tipo":"uint256"}],"vardas":"„getCustomer“","išėjimai": [{"vardas":"id","tipo":"uint256"}, {"vardas":"vardas","tipo":"stygos"}, {"vardas":"Gimimo data","tipo":"uint256"}, {"vardas":"socialinis","tipo":"uint256"}, {"vardas":"statusą","tipo":"uint256"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"pastovus":tiesa,"įvestys": [{"vardas":"id","tipo":"uint256"}],"vardas":"„getCustomerById“","išėjimai": [{"vardas":"„idRet“","tipo":"uint256"}, {"vardas":"vardas","tipo":"stygos"}, {"vardas":"Gimimo data","tipo":"uint256"}, {"vardas":"socialinis","tipo":"uint256"}, {"vardas":"statusą","tipo":"uint256"}],"mokėtinas": klaidinga,"tipo":"funkcija"}, {"Anoniminis": klaidinga,"įvestys": [{"indeksuota": klaidinga,"vardas":"eventType","tipo":"stygos"}, {"indeksuota": klaidinga,"vardas":"id","tipo":"uint256"}],"vardas":"Budrus","tipo":"įvykis"}, {"Anoniminis": klaidinga,"įvestys": [{"indeksuota":tiesa,"vardas":"pateikė","tipo":"adresas"}, {"indeksuota":tiesa,"vardas":"„accessTime“","tipo":"uint256"}, {"indeksuota": klaidinga,"vardas":"metodas","tipo":"stygos"}, {"indeksuota": klaidinga,"vardas":"aprašymas","tipo":"stygos"}],"vardas":"„LogAccess“","tipo":"įvykis"}]

Kaip matote, jis turi super sutarties ir dabartinės sutarties metodus su parašu, parametrais ir grąžinimo tipais. Tai turi būti tiesiogiai perduodama kaip JSON masyvas į sutarties (abi) konstruktorių, kad būtų sukurtas sutarties projektas arba klasės klasė.

var abi = […];

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

Šis mechanizmas užtikrina, kad bet kurį metodą galima tiesiogiai panaudoti sutarties klasės egzemplioriui. Kitas sakinys sukuria sutarties klasės „corecontractContract“ egzempliorių

var corecontractContractInst = corecontractContract

.adresu (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’);

Dabar sutartis susieta su adresu, kur „įdiegtas“ sutarties kodas. Dabar sutartyje galime nurodyti metodus.

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

Šis skambutis grąžins pagal sutartį pateiktą operacijos maišos sandorį.

Papildomi parametrai:

Kartu su metodo parametru iškvietimas leidžia perduoti papildomus nefunkcinius parametrus metodo skambučio metu.

Operacijos objektas (Tai yra operacijos objekto apibrėžimo, esančio informaciniame dokumente, kopija su keletu papildomų komentarų):

from: String – siunčiančios paskyros adresas. Naudoja web3.eth.default paskyra nuosavybė, jei nenurodyta. Numatytoji paskyros ypatybė inicijavimo etape nurodoma kaip web3.eth.defaultAccount = web3.eth.accounts [0]; Tai rodo, kad naudosime pirmąją sąskaitų masyvo sąskaitą, iš šios sąskaitos išskaičiuojamos operacijai reikalingos dujos.

to: String – (neprivaloma) Pranešimo paskirties adresas, paliekamas neapibrėžtas sutarties sudarymo operacijai. Taigi mūsų atveju, kai sandorio objektą naudojame išmaniesiems sutarties skambučiams, to nereikia.

reikšmė: Skaičius | Eilutė | Didelis skaičius – (neprivaloma) Vertė, perkelta už operaciją Vei, taip pat dotacija, jei tai yra sutarties sudarymo operacija. Kadangi mes nekuriame sutarties (ji jau įdiegta.

dujos: Skaičius | Eilutė | Didelis skaičius – (neprivaloma, pagal nutylėjimą: Turi būti nustatyta) Sandoriui sunaudoti dujų kiekis (už nepanaudotas dujas grąžinama). Tai yra svarbu mūsų atveju, nes mes turime perduoti šiek tiek dujų, kad pagal sutarties atnaujinimo metodą gautume reikalingas dujas, kad būtų galima užbaigti. Apskaičiuotas vieno metodo dujų kiekis yra „remix“ programoje. Turime naudoti šią vertę susumuojant iki sveiko skaičiaus, kad operacija nepavyktų dėl „nepakankamai dujų“ klaidos.

gas Kaina: Skaičius | Eilutė | Didelis skaičius – (neprivaloma, numatytasis nustatymas: Nustatoma) Šio sandorio dujų kaina, išreikšta vei, pagal numatytąją reikšmę yra vidutinė tinklo dujų kaina.

duomenys: Stygos – (neprivaloma) Arba a baitų eilutė turintys susietus pranešimo duomenis arba sutarties sudarymo operacijos atveju – inicijavimo kodą. Mūsų atveju to nereikia, nes mūsiškis nėra diegimo skambutis.

nonce: skaičius – (pasirinktinai) nonce sveikasis skaičius. Tai leidžia perrašyti savo laukiančias operacijas, kuriose naudojama ta pati sąlyga.

Sutarties nuolatinis skambutis vs. Sandorio skambutis

Sutartyje gali būti dviejų tipų skambučiai, kaip numatyta jos solidumo kode. Nuolatinis skambutis nepakeičia sutarties būsenos, jis tik nuskaito blokų grandinę ir grąžina filtruojamas reikšmes pagal savo logiką. Tokio tipo skambučiams atlikti nereikia jokių eterių, todėl mums nereikia perduoti jokių dujų parametrų mūsų sutarties metodo skambučiuose. Pavyzdžiui,.

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

Tai grąžins „BigNumbers“ masyvą už uints:

[Didelis skaičius, "aCust", BigNumber, BigNumber, BigNumber]

Norėdami konvertuoti „BigNumbers“ į dešimtainius ženklus, naudokite „decimalo“ („BigNumber“) naudingumo metodą:

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

Šis skambutis nesukuria „blockchain“ operacijos.

Operacijos skambutis skirtas atnaujinti sutarties būseną, pvz., Sukurti įrašą apie kliento atvaizdavimą čia „DataContract“.

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

Šis skambutis atliks operaciją ir sunaudos šiek tiek dujų. Dujos gali būti tiekiamos kartu su sandoriu naudojant sandorio objektą:

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

20000 čia yra savavališkas, naudokite dujas, apskaičiuotas pagal metodo vykdymą „Remix“ programoje. Jei dujų kiekis yra mažesnis nei tikėtasi EVM, gausite klaidų:

Neužfiksuota klaida: per mažai sandorio dujų. Nėra pakankamai dujų, kad padengtų minimalias sandorio išlaidas (minimalus: 22680, gautas: 20000). Pabandykite padidinti tiekiamas dujas.

„Object.InvalidResponse“ (web3.js: 3120)

adresu RequestManager.send (web3.js: 6043)

0});

Filtrai:

Įvykius, kuriuos generuojame pagal solidumo sutartį, galima klausytis „Web3“ sluoksnyje. Biblioteka vadovaujasi apklausos mechanizmu, norėdama ieškoti įvykių, užregistruotų „blockchain“, ir burbuliukais padaro jį iki „web3“ sluoksnio, jei tokių yra.

Mes sukūrėme keletą įvykių, susijusių su prieigos valdymu ACLContract kode. Mes galime klausytis įvykių, nes jie generuojami iš bet kurio kliento skambučio, juos prenumeruojant naudojant allEvents () API.

var įvykiai = corecontractContractInst.allEvents ();

// stebėk pokyčius

events.watch (funkcija (klaida, įvykis) {

jei (! klaida)

console.log (JSON.stringify (įvykis));

});

Tai pateiks tokius įvykius:

{"adresas":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","blockNumber": 47,"logIndex": 0,"actionHash":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","sandorio indeksas": 0,"actionLogIndex":"0x0","tipo":"užminuotas","įvykis":"„LogAccess“","argumentuoja": {"pateikė":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","„accessTime“":"1494178629","metodas":"sukurti klientą","aprašymas":"sėkminga prieiga"}}

{"adresas":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","blockNumber": 47,"logIndex": 0,"actionHash":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","sandorio indeksas": 0,"actionLogIndex":"0x0","tipo":"užminuotas","įvykis":"„LogAccess“","argumentuoja": {"pateikė":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","„accessTime“":"1494178629","metodas":"sukurti klientą","aprašymas":"sėkminga prieiga"}}

Pirmiau pateikiami du įvykiai, sukurti, kai „createCustomer“ buvo iškviesta du kartus. Įvykius galima gauti iš vieno abonento, o keli šaltiniai generuoja įvykius naudodamiesi sutartiniais skambučiais per JSON-RPC skambučius. Tai leidžia sukurti vieną programą audito duomenims surinkti.

Šioje aukščiau pateiktoje diskusijoje mes palietėme kai kuriuos pagrindinius „JavaScript“ kliento pagrindus. Kitame išnagrinėsime keletą pažangių sąvokų, pavyzdžiui, kaip parašyti funkcijų testavimo kodą per „Web3“ biblioteką, sukurti pilną „Dapp“, naudoti triufelių sistemą ir dar daugiau.

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