JavaScript API könyvtárak
Ahhoz, hogy egy web alkalmazás interakcióba lépjen az Ethereum blokklánccal (vagyis képes legyen blokklánc adatok olvasására és/vagy tranzakció küldésre a hálózatra), rá kell csatlakoznia egy Ethereum csomópontra.
Erre a célra minden Ethereum kliens implementálja a JSON-RPC specifikációt, így egy egységes végpontkészlet áll rendelkezésre, amelyekre az alkalmazások támaszkodhatnak.
Ha JavaScript programnyelvet szeretnél használni, hogy csatlakozz egy Ethereum csomóponttal, lehetőséged van vanilla JavaScriptet használni, de ugyanakkor számos kényelmes könyvtár létezik az ökoszisztémán belül, melyek megkönnyítik ezt. Ezekkel a könyvtárakkal a fejlesztők intuitív, egysoros metódusokat írhatnak, hogy kezdeményezzenek egy JSON RPC kérést (a háttérben), mely interakcióba lép az Ethereummal.
Előfeltételek
A JavaScript megértése mellett lehet, hogy érdemes megérteni az Ethereum stacket és az Ethereum klienseket.
Miért használj könyvtárat?
Ezek a könyvtárak elveszik a komplexitás nagy részét, mely Ethereum csomóponthoz történő közvetlen csatlakozással jár. Ezenkívül használati függvényeket is szolgáltatnak (pl.: ETH konvertálása Gwei-be), így fejlesztőként kevesebb időt kell az Ethereum kliensek bonyodalmaival foglalkoznod és több időd jut egyedi funkcionalitást kialakítani az alkalmazásodnak.
Könyvtár tulajdonságok
Csatlakozás Ethereum csomóponthoz
Szolgáltatók használatakor ezen könyvtárak használatával rácsatlakozhatsz az Ethereumra és olvashatod az adatait, legyen az JSON-RPC-n, INFURA-n, Etherscan-en, Alchemy-n vagy MetaMaskon keresztül.
Ethers példa
1// Egy Web3Provider bewrappol egy standard Web3 szolgáltatót, ez az2// amit a Metamask beinjektál minden oldalra úgy mint, window.ethereum3const provider = new ethers.providers.Web3Provider(window.ethereum)45// A Metamask plugin továbbá lehetővé teszi tranzakciók aláírását6// ether küldésekor és hogy kifizessük az állapotváltást a blokkláncon.7// Ehhez kell egy számla aláíró (account signer)...8const signer = provider.getSigner()9Másolás
Web3js példa
1var web3 = new Web3("http://localhost:8545")2// vagy3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// szolgáltató (provider) váltás6web3.setProvider("ws://localhost:8546")7// vagy8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// IPC provider használata a node.js-ben11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path13// vagy14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // mac os elérési út17// windows rendszerben az elérési út: "\\\\.\\pipe\\geth.ipc"18// linux rendszerben az elérési út: "/users/myuser/.ethereum/geth.ipc"19Összes megjelenítéseMásolás
Amint be van állítva, lekérdezéseket indíthatsz a blokkláncon a következőkre:
- blokkszámok
- gas becslések
- okosszerződés események (events)
- hálózati azonosító
- és még sok mást...
Tárca funkcionalitás
Ezek a könyvtárak funkcionalitást adnak, hogy tárcákat hozz létre, kulcsokat kezelj és tranzakciókat írj alá.
Itt egy Ethers példa
1//Tárca instance létrehozása emlékeztető erősítőből...2mnemonic =3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"4walletMnemonic = Wallet.fromMnemonic(mnemonic)56// ...vagy egy privát kulcsból7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// A cím mint egy promise a Signer API szerint13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// a tárca cím szinkronban is elérhető17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// A belső kriptográfiai komponensek21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// A tárca emlékeztető erősítő27walletMnemonic.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// Megjegyzés: Egy privát kulcsból készített tárcának35// nincs emlékeztető erősítője (a származtatás megakadályozza)36walletPrivateKey.mnemonic37// null3839// Üzenet aláírása40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Tranzakció aláírása49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// A connect metódus egy új tárca instance-t ad vissza53// Tárca csatlakoztatva a szolgáltatóval (provider)54wallet = walletMnemonic.connect(provider)5556// Lekérdezés a hálózaton57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// Ether küldés63wallet.sendTransaction(tx)64Összes megjelenítéseMásolás
Olvasd el a teljes dokumentációt
Ha be van állítva, akkor már tudsz:
- számlákat létrehozni
- tranzakciókat küldeni
- tranzakciókat aláírni
- és még sok mást...
Interakció okosszerződés függvényekkel
A Javascript kliens könyvtárak lehetővé teszik az alkalmazásod számára, hogy okosszerződés függvényeket hívjanak meg egy befordított szerződés Application Binary Interface-ének (ABI) olvasásával.
Az ABI lényegében elmagyarázza a szerződés függvényeit egy JSON formátumban és lehetővé teszi, hogy normáls Javascript objectként használd.
A következő Solidity szerződés tehát:
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}16Összes megjelenítéseMásolás
A következő JSON-t adná:
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}]25Összes megjelenítéseMásolás
Ez azt jelenti, hogy:
- Tranzakciókat küldhetsz az okosszerződésnek és végrehajthatod a metódusát
- Megbecsülheted a gast, melyet egy metódus végrehajtás fog használni, amikor lefut az EVM-en
- Telepíthetsz egy szerződést
- És még sok mást...
Használati függvények
A használati függvények praktikus könnyítéseke adnak, hogy egyszerűbb legyen az Ethereumon való építés.
Az ETH értékei alapvetően Wei-ben vannak megadva. 1 ETH = 1,000,000,000,000,000,000 WEI – ez azt jelenti, hogy sok számmal kell foglalkoznod! web3.utils.toWei
átkonvertálja az ethert Wei-re neked.
Az ethers-ben így néz ki:
1// Egy számla egyenlege (cím vagy ENS név alapján)2balance = await provider.getBalance("ethers.eth")3// { BigNumber: "2337132817842795605" }45// Gyakran formáznod kell a kimenetet a felhasználó számára6// aki etherben szeretné látni az értéket (wei helyett)7ethers.utils.formatEther(balance)8// '2.337132817842795605'9Másolás
Elérhető könyvtárak
Web3.js - Ethereum JavaScript API.
Ethers.js - Teljes Ethereum tárca implementáció és segédprogramok JavaScript-ben és TypeScript-ben.
The Graph - Egy Ethereum és IPFS adat indexelés és lekérdezés protokoll a GraphQL használatával..
light.js - Egy magas szintű, reaktív JS könyvtár light client-ekre optimalizálva.
Web3-wrapper - Typescript Web3.js alternatíva.
Alchemyweb3 - Egy Web3.js wrapper automatikus újrapróbálkozásokkal és fejlesztett API-okkal.
További olvasnivaló
Ismersz olyan közösségi anyagot, mely segített neked? Módosítsd az oldalt és add hozzá!
Kapcsolódó témák
Kapcsolódó útmutatók
- Állítsd be a Web3js, hogy Javascriptben használd az Ethereum blokkláncot – Instrukciók arról, hogyan állítsd be a web3.js-t a projektedben.
- Okosszerződés hívása JavaScriptből – A DAI token használata, hogy lásd hogyan lehet szerződés függvényeket meghívni JavaScript használatával.
- Tranzakció küldés web3-mal és Alchemy-vel – Egy step-by-step útmutató arról, hogyan lehet tranzakciókat küldeni a backendből.