Salt la conținutul principal
Change page

Biblioteci API JavaScript

Ultima modificare: @nicklcanada(opens in a new tab), 28 iunie 2024

Pentru ca o aplicație web să interacționeze cu blockchain-ul Ethereum (adică să citească datele blockchain-ului ș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, astfel încât să existe un set uniform de endpoint-uri pe care se pot baza aplicațiile.

Dacă doriţi să utilizaţi JavaScript pentru a vă conecta la un nod Ethereum, puteţi să utilizaţi vanilla JavaScript, dar există mai multe biblioteci utile în ecosistem care facilitează mult acest lucru. Cu aceste biblioteci, programatorii pot scrie metode intuitive şi scurte 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țelegeţi stiva Ethereum și clienții Ethereum.

De ce să folosiţi o bibliotecă?

Aceste biblioteci elimină o mare parte din complexitatea interacțiunii directe cu un nod Ethereum. Ele oferă şi funcții utilitare (cum ar fi conversia din ETH în Gwei), astfel încât, ca programator, să petreceţi mai mult timp axându-vă pe funcționalitatea unică a aplicației dvs. decât încercând să vă descurcaţi cu complexitatea clienților Ethereum.

Funcţionalităţile bibliotecilor

Conectaţi-vă la nodurile Ethereum

Folosind furnizorii, aceste biblioteci vă permit să vă conectaţi la Ethereum și să-i citiţi datele, indiferent dacă este vorba de JSON-RPC, INFURA, Etherscan, Alchemy sau MetaMask.

Exemplu în Ethers

1// A Web3Provider wraps a standard Web3 provider, which is
2// what MetaMask injects as window.ethereum into each page
3const provider = new ethers.providers.Web3Provider(window.ethereum)
4
5// The MetaMask plugin also allows signing transactions to
6// send ether and pay to change state within the blockchain.
7// Pentru aceasta, avem nevoie de semnatarul contului...
8const signer = provider.getSigner()
Copiați

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"
Afișează tot
Copiați

După configurare, veţi putea interoga blockchain-ul pentru:

  • numărul blocului
  • estimările de gaz
  • evenimentele din contractele inteligente
  • id-ul rețelei
  • și altele...

Funcționalitatea de portofel

Aceste biblioteci vă 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)
Afișează tot
Copiați

Citește specificațiile complete(opens in a new tab)

Odată configurat veţi putea să:

  • creaţi conturi
  • trimiteţi tranzacții
  • semnaţi tranzacții
  • și altele...

Interacționează cu funcțiile contractelor inteligente

JavaScript client libraries allow your application to call smart contract functions by reading the Application Binary Interface (ABI) of a compiled contract.

Interfața ABI explică în esență funcțiile contractului într-un format JSON și vă permite să îl utilizaţi ca 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}
Afișează tot
Copiați

Ar avea drept rezultat 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}]
Afișează tot
Copiați

Aceasta înseamnă că puteţi:

  • trimite o tranzacție către contractul inteligent și îi puteţi executa metoda
  • 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 vă oferă comenzi rapide pe care să le aveţi la îndemână, ce facilitează construirea cu Ethereum.

Valorile ETH sunt în mod implicit în Wei. 1 ETH = 1.000.000.000.000.000.000 WEI – aceasta înseamnă că aveţi de-a face cu o mulțime de cifre! web3.utils.toWei convertește ether-ul în Wei pentru dvs.

Iar în ether-i 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'
Copiați

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 de interogare a 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.

Alchemy NFT API - API for fetching NFT data, including ownership, metadata attributes and more.

Referințe suplimentare

Cunoaşteţi o resursă comunitară care v-a ajutat? Editaţi această pagină și adăugaţi-o!

  • Noduri și clienți
  • Framework-uri de dezvoltare
  • Set up Web3js to use the Ethereum blockchain in JavaScript – Instructions for getting web3.js set up in your project.
  • Calling a smart contract from JavaScript - Folosind token-ul DAI, vedeți cum să apelați funcția contractelor folosind JavaScript.
  • Trimiterea de tranzacții folosind web3 și Alchemy – Tutorial pas cu pas pentru trimiterea de tranzacții din backend.

A fost util acest articol?