Biblioteci API JavaScript
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 este2// ceea ce Metamask injectează ca window.ethereum în fiecare pagină3const provider = new ethers.providers.Web3Provider(window.ethereum)45// Plug-in-ul Metamask permite, în plus, semnarea de tranzacții pentru a6// 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()9Copiere
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"19Afișează totCopiere
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)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)64Afișează totCopiere
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;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}16Afișează totCopiere
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":false19 },{20 "type":"event",21 "name":"Event2",22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],23 "anonymous":false24}]25Afișează totCopiere
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" }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'9Copiere
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!
Subiecte corelate
Tutoriale corelate
- Configurează Web3js pentru a utiliza blockchain-ul Ethereum în JavaScript – Instrucțiuni pentru configurarea web3.js în proiectul tău.
- Apelarea unui contract inteligent din JavaScript – Folosind tokenuri DAI, vezi cum să apelezi funcții de contracte folosind JavaScript.
- Trimiterea de tranzacții folosind web3 și Alchemy – Tutorial pas cu pas pentru trimiterea de tranzacții din back-end.