Knihovny JavaScript API
Aby mohla webová aplikace komunikovat s blockchainem Etherea (tj. číst data z blockchainu a/nebo odesílat transakce do sítě), musí se připojit k uzlu Etherea.
Za tímto účelem implementuje každý klient Etherea specifikaci JSON-RPC, takže existuje jednotná sada metod, na které se aplikace mohou spolehnout.
Pokud chcete k připojení k uzlu Etherea použít JavaScript, je možné použít čistý (vanilla) JavaScript, ale v ekosystému existuje několik užitečných knihoven, které to mnohem usnadňují. S těmito knihovnami mohou vývojáři psát intuitivní, jednořádkové metody pro inicializaci požadavků JSON-RPC (na pozadí), které komunikují s Ethereem.
Vezměte prosím na vědomí, že od Merge jsou ke spuštění uzlu vyžadovány dvě propojené části softwaru Etherea – exekuční klient a konsensuální klient. Ujistěte se prosím, že váš uzel obsahuje jak exekučního, tak konsensuálního klienta. Pokud váš uzel neběží na vašem lokálním počítači (např. váš uzel běží na instanci AWS), aktualizujte odpovídajícím způsobem IP adresy v tutoriálu. Pro více informací se prosím podívejte na naši stránku o provozování uzlu.
Předpoklady
Kromě porozumění JavaScriptu může být užitečné porozumět technologickému zásobníku Etherea a klientům Etherea.
Proč používat knihovnu?
Tyto knihovny abstrahují velkou část složitosti přímé komunikace s uzlem Etherea. Poskytují také pomocné funkce (např. převod ETH na Gwei), takže jako vývojář můžete strávit méně času řešením složitostí klientů Etherea a více času se soustředit na jedinečnou funkcionalitu vaší aplikace.
Funkce knihoven
Připojení k uzlům Etherea
Pomocí poskytovatelů (providers) vám tyto knihovny umožňují připojit se k Ethereu a číst jeho data, ať už přes JSON-RPC, Infura, Etherscan, Alchemy nebo MetaMask.
Varování: Knihovna Web3.js byla archivována 4. března 2025. Přečtěte si oznámení (opens in a new tab). Pro nové projekty zvažte použití alternativních knihoven, jako jsou Ethers.js (opens in a new tab) nebo Viem (opens in a new tab).
Příklad v Ethers
// BrowserProvider obaluje standardního poskytovatele Web3, což je
// to, co MetaMask vkládá jako window.ethereum do každé stránky
const provider = new ethers.BrowserProvider(window.ethereum)
// Plugin MetaMask také umožňuje podepisovat transakce pro
// odesílání etheru a placení za změnu stavu v rámci blockchainu.
// K tomu potřebujeme podepisovatele účtu...
const signer = provider.getSigner()
Příklad ve Web3.js
var web3 = new Web3("http://localhost:8545")
// or
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
// změnit poskytovatele
web3.setProvider("ws://localhost:8546")
// or
web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
// Použití poskytovatele IPC v node.js
var net = require("net")
var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // cesta v mac os
// or
var web3 = new Web3(
new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
) // cesta v mac os
// ve windows je cesta: "\\\\.\\pipe\\geth.ipc"
// v linuxu je cesta: "/users/myuser/.ethereum/geth.ipc"
Po nastavení budete moci dotazovat blockchain na:
- čísla bloků
- odhady gasu
- události chytrých kontraktů
- ID sítě
- a další...
Funkcionalita peněženky
Tyto knihovny vám poskytují funkcionalitu pro vytváření peněženek, správu klíčů a podepisování transakcí.
Zde je příklad z Ethers
// Vytvoření instance peněženky z mnemoniky...
mnemonic =
"announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
walletMnemonic = Wallet.fromPhrase(mnemonic)
// ...nebo ze soukromého klíče
walletPrivateKey = new Wallet(walletMnemonic.privateKey)
walletMnemonic.address === walletPrivateKey.address
// true
// Adresa jako Promise podle API podepisovatele
walletMnemonic.getAddress()
// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
// Adresa peněženky je k dispozici také synchronně
walletMnemonic.address
// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
// Interní kryptografické komponenty
walletMnemonic.privateKey
// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
walletMnemonic.publicKey
// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
// Mnemonika peněženky
walletMnemonic.mnemonic
// {
// locale: 'en',
// path: 'm/44\'/60\'/0\'/0/0',
// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
// }
// Poznámka: Peněženka vytvořená pomocí soukromého klíče nemá
// mnemoniku (odvození tomu brání)
walletPrivateKey.mnemonic
// null
// Podepsání zprávy
walletMnemonic.signMessage("Hello World")
// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
tx = {
to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
value: utils.parseEther("1.0"),
}
// Podepsání transakce
walletMnemonic.signTransaction(tx)
// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
// Metoda connect vrací novou instanci
// peněženky připojené k poskytovateli
wallet = walletMnemonic.connect(provider)
// Dotazování sítě
wallet.getBalance()
// { Promise: { BigNumber: "42" } }
wallet.getTransactionCount()
// { Promise: 0 }
// Odesílání etheru
wallet.sendTransaction(tx)
Přečtěte si celou dokumentaci (opens in a new tab)
Po nastavení budete moci:
- vytvářet účty
- odesílat transakce
- podepisovat transakce
- a další...
Interakce s funkcemi chytrých kontraktů
Klientské knihovny v JavaScriptu umožňují vaší aplikaci volat funkce chytrých kontraktů čtením aplikačního binárního rozhraní (ABI) zkompilovaného kontraktu.
ABI v podstatě popisuje funkce kontraktu ve formátu JSON a umožňuje vám jej používat jako běžný objekt v JavaScriptu.
Takže následující kontrakt v Solidity:
contract Test {
uint a;
address d = 0x12345678901234567890123456789012;
constructor(uint testInt) { a = testInt;}
event Event(uint indexed b, bytes32 c);
event Event2(uint indexed b, bytes32 c);
function foo(uint b, bytes32 c) returns(address) {
Event(b, c);
return d;
}
}
By vedl k následujícímu JSONu:
[{
"type":"constructor",
"payable":false,
"stateMutability":"nonpayable"
"inputs":[{"name":"testInt","type":"uint256"}],
},{
"type":"function",
"name":"foo",
"constant":false,
"payable":false,
"stateMutability":"nonpayable",
"inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
"outputs":[{"name":"","type":"address"}]
},{
"type":"event",
"name":"Event",
"inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
"anonymous":false
},{
"type":"event",
"name":"Event2",
"inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
"anonymous":false
}]
To znamená, že můžete:
- Odeslat transakci do chytrého kontraktu a provést jeho metodu
- Zavolat odhad gasu, který si vyžádá spuštění metody při provedení v EVM
- Nasadit kontrakt
- A další...
Pomocné funkce
Pomocné funkce vám poskytují šikovné zkratky, které trochu usnadňují vývoj na Ethereu.
Hodnoty v ETH jsou ve výchozím nastavení ve Wei. 1 ETH = 1 000 000 000 000 000 000 Wei – to znamená, že pracujete s velkými čísly! web3.utils.toWei za vás převede ether na Wei.
A v Ethers to vypadá takto:
// Získání zůstatku účtu (podle adresy nebo jména ENS)
balance = await provider.getBalance("ethers.eth")
// { BigNumber: "2337132817842795605" }
// Často budete muset formátovat výstup pro uživatele,
// kteří preferují vidět hodnoty v etherech (místo Wei)
ethers.utils.formatEther(balance)
// '2.337132817842795605'
Dostupné knihovny
Web3.js - JavaScript API pro Ethereum.
Ethers.js - Kompletní implementace peněženky Etherea a nástroje v JavaScriptu a TypeScriptu.
- Domovská stránka Ethers.js (opens in a new tab)
- Dokumentace (opens in a new tab)
- GitHub (opens in a new tab)
The Graph - Protokol pro indexování dat z Etherea a IPFS a jejich dotazování pomocí GraphQL.
- The Graph (opens in a new tab)
- Graph Explorer (opens in a new tab)
- Dokumentace (opens in a new tab)
- GitHub (opens in a new tab)
- Discord (opens in a new tab)
Alchemy SDK - Wrapper kolem Ethers.js s vylepšenými API.
Viem - Rozhraní TypeScriptu pro Ethereum.
Codex - API pro obohacená blockchainová data v reálném čase napříč desítkami sítí.
- Dokumentace (opens in a new tab)
- Průzkumník (opens in a new tab)
- GitHub (opens in a new tab)
- Discord (opens in a new tab)
Drift - Meta-knihovna v TypeScriptu s vestavěným cachováním, hooky a testovacími mocky.
Další čtení
Znáte komunitní zdroj, který vám pomohl? Upravte tuto stránku a přidejte ho!
Související témata
Související tutoriály
- Nastavení Web3.js pro použití blockchainu Etherea v JavaScriptu – Pokyny pro nastavení Web3.js ve vašem projektu.
- Volání chytrého kontraktu z JavaScriptu – Podívejte se, jak volat funkce kontraktů pomocí JavaScriptu na příkladu tokenu DAI.
- Odesílání transakcí pomocí Web3 a Alchemy – Průvodce krok za krokem pro odesílání transakcí z backendu.
Tutoriály: JavaScript API a WebSockets na Ethereu
- Použití WebSockets – Jak používat WebSockets s Alchemy k odběru událostí Etherea a provádění požadavků JSON-RPC v reálném čase.