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 is2// what MetaMask injects as window.ethereum into each page3const provider = new ethers.providers.Web3Provider(window.ethereum)45// The MetaMask plugin also allows signing transactions to6// 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// sau3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// schimbare furnizor6web3.setProvider("ws://localhost:8546")7// sau8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// Utilizarea furnizorului IPC în node.js11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path13// sau14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // calea mac os17// pe Windows calea este: "\\\\. \\ pipe \\ geth.ipc"18// pe linux calea este: "/users/myuser/.ethereum/geth.ipc"Afișează totCopiaț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)56// ...sau dintr-o cheie privată7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// Adresa ca o promisiune conform API-ului semnatar13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// O adresă portofel este de asemenea disponibilă sincron17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// Componentele criptografice interne21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// Mnemonica portofelului27walletMnemonic.mnemonic28// {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// }3334// Notă: un portofel creat cu o cheie privată nu35// are o mnemonică (derivarea îl împiedică)36walletPrivateKey.mnemonic37// null3839// Semnarea unui mesaj40walletMnemonic.signMessage(„Salut la toată lumea”)41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Semnarea unei tranzacții49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// Metoda de conectare returnează o nouă instanță a53// Wallet conectat la un furnizor54wallet = walletMnemonic.connect(provider)5556// Interogarea rețelei57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// Trimiterea eterului63wallet.sendTransaction(tx)Afișează totCopiaț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;45 function Test(uint testInt) { a = testInt;}67 event Event(uint indexed b, bytes32 c);89 event Event2(uint indexed b, bytes32 c);1011 function foo(uint b, bytes32 c) returns(address) {12 Event(b, c);13 return d;14 }15}Afișează totCopiaț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":false19 },{20 "type":"event",21 "name":"Event2",22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],23 "anonymous":false24}]Afișează totCopiaț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" }45// Deseori va trebui să formatezi rezultatul pentru utilizatorul6// 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.
- The Graph(opens in a new tab)
- Graph Explorer(opens in a new tab)
- Documentație(opens in a new tab)
- GitHub(opens in a new tab)
- Discord(opens in a new tab)
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!
Subiecte corelate
Tutoriale corelate
- 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.