Ajută la actualizarea acestei pagini

🌏

Există o nouă versiune a acestei pagini, dar acum este doar în engleză. Ajută-ne să traducem cea mai recentă versiune.

Această pagină este incompletă. Dacă ești expert în acest subiect, te rugăm să editezi această pagină și s-o presari cu înțelepciune.

Biblioteci API JavaScript

Ultima editare: , Invalid DateTime
Edit page

Pentru ca o aplicație web să interacționeze cu blockchain-ul Ethereum (adică să citească date blockchain și/sau să trimită tranzacții către rețea), trebuie să se conecteze la un nod Ethereum.

În acest scop, fiecare client Ethereum implementează specificația JSON-RPC, deci există un set uniform de puncte finale pe care se pot baza aplicațiile.

Dacă dorești să utilizezi JavaScript pentru a te conecta la un nod Ethereum, poți să utilizezi vanilla JavaScript, dar există mai multe biblioteci utile în ecosistem care fac acest lucru mult mai ușor. Cu aceste biblioteci, programatorii pot scrie metode intuitive, pe o singură linie, pentru a inițializa cereri JSON RPC (în culise) care interacționează cu Ethereum.

Condiții prealabile

Pe lângă înțelegerea JavaScript, ar putea fi util să înțelegi stiva Ethereum și clienții Ethereum.

De ce să folosești o bibliotecă?

Aceste biblioteci elimină o mare parte din complexitatea interacțiunii directe cu un nod Ethereum. Ele oferă, de asemenea, funcții utilitare (cum ar fi conversia din ETH în Gwei), astfel încât ca programator, să petreci mai mult timp cu funcționalitatea unică a aplicației tale decât cu complexitatea clienților Ethereum.

Caracteristicile bibliotecii

Conectează la nodurile Ethereum

Folosind furnizorii, aceste biblioteci îți permit să te conectezi la Ethereum și să-i citești datele, indiferent dacă este vorba de JSON-RPC, INFURA, Etherscan, Alchemy sau MetaMask.

Exemplu de Ethers

1// Un Web3Provider ce integrează un furnizor Web3 standard, care este
2// ceea ce Metamask injectează ca window.ethereum în fiecare pagină
3const provider = new ethers.providers.Web3Provider(window.ethereum)
4
5// Plug-in-ul Metamask permite, în plus, semnarea de tranzacții pentru a
6// trimite eter și a plătii pentru a schimba starea în cadrul blockchain-ului.
7// Pentru aceasta, avem nevoie de semnatarul contului...
8const signer = provider.getSigner()
9
📋 Copiere

Exemplu Web3js

1var web3 = new Web3("http://localhost:8545")
2// sau
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// schimbare furnizor
6web3.setProvider("ws://localhost:8546")
7// sau
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// Utilizarea furnizorului IPC în node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path
13// sau
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // calea mac os
17// pe Windows calea este: "\\\\. \\ pipe \\ geth.ipc"
18// pe linux calea este: "/users/myuser/.ethereum/geth.ipc"
19
Afișează tot
📋 Copiere

După configurare, vei putea interoga blockchain-ul pentru:

  • numărul blocului
  • estimări de gaz
  • evenimente cu contractele inteligente
  • id rețea
  • și altele...

Funcționalitate de portofel

Aceste biblioteci îți oferă funcționalități pentru crearea portofelelor, gestionarea cheilor și semnarea tranzacțiilor.

Iată câteva exemple din Ethers

1// Creează o instanță de portofel dintr-un mnemonic...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromMnemonic(mnemonic)
5
6// ...sau dintr-o cheie privată
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// Adresa ca o promisiune conform API-ului semnatar
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// O adresă portofel este de asemenea disponibilă sincron
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// Componentele criptografice interne
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// Mnemonica portofelului
27walletMnemonic.mnemonic
28// {
29// locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// }
33
34// Notă: un portofel creat cu o cheie privată nu
35// are o mnemonică (derivarea îl împiedică)
36walletPrivateKey.mnemonic
37// null
38
39// Semnarea unui mesaj
40walletMnemonic.signMessage(„Salut la toată lumea”)
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Semnarea unei tranzacții
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// Metoda de conectare returnează o nouă instanță a
53// Wallet conectat la un furnizor
54wallet = walletMnemonic.connect(provider)
55
56// Interogarea rețelei
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Trimiterea eterului
63wallet.sendTransaction(tx)
64
Afișează tot
📋 Copiere

Citește specificațiile complete

Odată configurat vei putea să:

  • creezi conturi
  • trimiți tranzacții
  • semnezi tranzacții
  • și altele...

Interacționează cu funcțiile contractelor inteligente

Bibliotecile client JavaScript permit aplicației tale să apeleze funcții de contract inteligent citind interfața binară a aplicației (ABI) a unui contract compilat.

Interfața ABI explică în esență funcțiile contractului într-un format JSON și îți permite să îl utilizezi ca un obiect JavaScript normal.

Deci, următorul contract Solidity:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 function Test(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 function foo(uint b, bytes32 c) returns(address) {
12 Event(b, c);
13 return d;
14 }
15}
16
Afișează tot
📋 Copiere

Ar rezulta în următorul JSON:

1[{
2 "type":"constructor",
3 "payable":false,
4 "stateMutability":"nonpayable"
5 "inputs":[{"name":"testInt","type":"uint256"}],
6 },{
7 "type":"function",
8 "name":"foo",
9 "constant":false,
10 "payable":false,
11 "stateMutability":"nonpayable",
12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
13 "outputs":[{"name":"","type":"address"}]
14 },{
15 "type":"event",
16 "name":"Event",
17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
18 "anonymous":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]
25
Afișează tot
📋 Copiere

Aceasta înseamnă că poți:

  • Trimite o tranzacție către contractul inteligent și executa metoda acestuia
  • Apela pentru estimarea gazului necesar execuției metodei atunci când va fi executat în EVM
  • Implementa un contract
  • Și altele...

Funcții utilitare

Funcțiile utilitare îți oferă comenzi rapide la îndemână, care facilitează construirea cu Ethereum.

Valorile ETH sunt în mod implicit în Wei. 1 ETH = 1.000.000.000.000.000.000 WEI – asta înseamnă că ai de-a face cu o mulțime de numere! web3.utils.toWei convertește eterul în Wei pentru tine.

Iar în eteri arată așa:

1// Obține soldul unui cont (după adresă sau numele ENS)
2balance = await provider.getBalance(„ethers.eth”)
3// { BigNumber: "2337132817842795605" }
4
5// Deseori va trebui să formatezi rezultatul pentru utilizatorul
6// care preferă să vadă valori în eter (în loc de wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'
9
📋 Copiere

Biblioteci disponibile

Web3.js - API JavaScript Ethereum.

Ethers.js - Implementare completă de portofel Ethereum și utilitare, în JavaScript și TypeScript.

The Graph - Un protocol de indexare a datelor Ethereum și IPFS și interogarea acestora folosind GraphQL.

light.js - O bibliotecă JS reactivă la nivel înalt optimizată pentru clienții ușori.

Web3-wrapper - Alternativă de script la Web3.js.

Alchemyweb3 - Wrapper în jurul Web3.js cu reîncercare automată și api-uri îmbunătățite.

Referințe suplimentare

Cunoști o resursă comunitară care te-a ajutat? Editează această pagină și adaug-o!