Ugrás a fő tartalomra
Change page

JavaScript API könyvtárak

Utolsó módosítás: @robertdosa(opens in a new tab), 2024. június 28.

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 egységes módszerek állnak rendelkezésre, amelyekre az alkalmazások támaszkodhatnak.

Ha JavaScript programnyelvet szeretne használni, hogy kapcsolódjon egy Ethereum csomóponthoz, lehetősége van vanilla JavaScriptet használni, de számos 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.

Az egyesítés (Merge) után, az Ethereum szoftver két kapcsolódó darabja – egy végrehajtó kliens és egy konszenzus kliens – kell a csomópont futtatásához. Gondoskodjon arról, hogy a csomópont mindkét kliens benne legyen. Ha a csomópont nem a helyi gépen van (pl. egy AWS-en fut), akkor az IP-címet frissíteni kell az útmutatóban. Bővebb információért érdemes felkeresni a csomópont futtatása oldalt.

Előfeltételek

A JavaScript megértése mellett lehet érdemes lehet előbb alaposan megismerni 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. Ezen kí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ácsatlakozhat az Ethereumra és kiolvashatja az adatait, függetlenül attól, hogy JSON-RPC, INFURA, Etherscan, Alchemy vagy MetaMask rendszeren keresztül történik.

Példa az Ethers-re

1// Egy BrowserProvider bewrappol egy standard Web3 szolgáltatót, ez az
2// amit a MetaMask beinjektál minden oldalra úgy mint, window.ethereum
3const provider = new ethers.BrowserProvider(window.ethereum)
4
5// A MetaMask plugin továbbá lehetővé teszi tranzakciók aláírását
6// 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()
Másolás

Példa a Web3js-re

1var web3 = new Web3("http://localhost:8545")
2// vagy
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// szolgáltató (provider) váltás
6web3.setProvider("ws://localhost:8546")
7// vagy
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// IPC provider használata a node.js-ben
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path
13// vagy
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // mac os elérési út
17// windows rendszerben az elérési út: "\\\\.\\pipe\\geth.ipc"
18// linux rendszerben az elérési út: "/users/myuser/.ethereum/geth.ipc"
Összes megjelenítése
Másolás

Amint be van állítva, lekérdezéseket indíthat 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 hozzon létre, kulcsokat kezeljen és tranzakciókat írjon alá.

Íme egy példa az Ethers-re

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.fromPhrase(mnemonic)
5
6// ...or from a private key
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// The address as a Promise per the Signer API
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// A Wallet address is also available synchronously
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// The internal cryptographic components
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// The wallet mnemonic
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// Note: A wallet created with a private key does not
35// have a mnemonic (the derivation prevents it)
36walletPrivateKey.mnemonic
37// null
38
39// Signing a message
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Signing a transaction
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// The connect method returns a new instance of the
53// Wallet connected to a provider
54wallet = walletMnemonic.connect(provider)
55
56// Querying the network
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Sending ether
63wallet.sendTransaction(tx)
Összes megjelenítése
Másolás

Olvassa el a teljes dokumentációt(opens in a new tab)

Amint be van állítva, a következőket teheti:

  • 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árai lehetővé teszik az alkalmazás 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ális Javascript-objektumként használja.

A következő Solidity szerződés tehát:

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}
Összes megjelenítése
Má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":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}]
Összes megjelenítése
Má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 foglalkoznia! web3.utils.toWei átkonvertálja az ethert Wei-re.

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" }
4
5// Gyakran formáznod kell a kimenetet a felhasználó számára
6// aki etherben szeretné látni az értéket (wei helyett)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'
Másolás

Elérhető könyvtárak

Web3.js - Ethereum JavaScript API.

Ethers.js - Teljes Ethereum-tárcaimplementáció és segédprogramok JavaScript-ben és TypeScript-ben.

The Graph - Egy Ethereum- és IPFS-adatindexelési és -lekérdezési protokoll a GraphQL használatával.

light.js - Egy magas szintű, reaktív JS könyvtár könnyű kliensekre optimalizálva.

Web3-wrapper - A Typescript Web3.js alternatíva.

Alchemyweb3 - Egy Web3.js wrapper automatikus újrapróbálkozásokkal és továbbfejlesztett API-kkal.

Alchemy NFT API - API az NFT adat megszerzésére, beleértve a tulajdonjogot, metaadatok attribútumait stb.

viem - TypeScript-interfész az Ethereumra.

További olvasnivaló

Van olyan közösségi erőforrása, amely segített Önnek? Szerkessze ezt az oldalt, és adja hozzá!

  • Csomópontok és kliensek
  • Fejlesztői keretrendszerek
  • Web3js beállítása az Ethereum-blokklánc használatához JavaScriptben – Útmutató a web3.js projektben való beállításához..
  • Okosszerződés hívása JavaScriptből – A DAI token használatával tekintse meg, hogyan hívhat be szerződéseket a JavaScript segítségével.
  • Tranzakció küldése web3-mal és Alchemy-vel – Egy részletes útmutató arról, hogyan lehet tranzakciókat küldeni a backendből.

Hasznosnak találta a cikket?