Biblioteki API JavaScript
Strona ostatnio zaktualizowana: 25 lutego 2026
Aby aplikacja internetowa mogła wchodzić w interakcję z blockchainem Ethereum (tj. odczytywać dane z blockchaina i/lub wysyłać transakcje do sieci), musi połączyć się z węzłem Ethereum.
W tym celu każdy klient Ethereum implementuje specyfikację JSON-RPC, dzięki czemu istnieje jednolity zestaw metod, na których mogą polegać aplikacje.
Jeśli chcesz użyć określonego języka programowania do połączenia z węzłem Ethereum, rozpisz własne rozwiązanie, ale w ekosystemie istnieje kilka wygodnych bibliotek, które znacznie to ułatwiają. Dzięki tym bibliotekom deweloperzy mogą pisać intuicyjne, jednowierszowe metody inicjowania żądań JSON-RPC (pod maską), które wchodzą w interakcję z Ethereum.
Należy pamiętać, że od czasu The Merge do uruchomienia węzła wymagane są dwa połączone elementy oprogramowania Ethereum – klient wykonawczy i klient konsensusu. Upewnij się, że Twój węzeł zawiera zarówno klienta wykonawczego, jak i klienta konsensusu. Jeśli Twój węzeł nie znajduje się na Twoim komputerze lokalnym (np. węzeł działa w instancji AWS), zaktualizuj odpowiednio adresy IP w samouczku. Więcej informacji można znaleźć na naszej stronie o uruchamianiu węzła.
Wymagania wstępne
Oprócz znajomości JavaScript pomocne może być zrozumienie stosu Ethereum i klientów Ethereum.
Dlaczego warto użyć biblioteki?
Biblioteki te eliminują znaczną złożoność interakcji bezpośrednio z węzłem Ethereum. Zapewniają one również funkcje pomocnicze (np. przeliczanie ETH na Gwei), dzięki czemu jako programista możesz poświęcić mniej czasu na zmaganie się ze złożonością klientów Ethereum, a więcej na skupieniu się na unikalnej funkcjonalności swojej aplikacji.
Funkcje biblioteki
Łączenie z węzłami Ethereum
Korzystając z dostawców, biblioteki te pozwalają Ci połączyć się z Ethereum i przeczytać jego dane, niezależnie od tego, czy chodzi o JSON-RPC, INFURA, Etherscan, Alchemy czy MetaMask.
Ostrzeżenie: Web3.js został zarchiwizowany 4 marca 2025 roku. Przeczytaj ogłoszenie (opens in a new tab). Rozważ użycie alternatywnych bibliotek, takich jak ethers.js (opens in a new tab) lub viem (opens in a new tab), w nowych projektach.
Przykład Ethers
1// BrowserProvider opakowuje standardowego dostawcę Web3, którym jest2// to, co MetaMask wstrzykuje jako window.ethereum na każdej stronie3const provider = new ethers.BrowserProvider(window.ethereum)45// Wtyczka MetaMask pozwala również na podpisywanie transakcji w celu6// wysyłania etheru i płacenia za zmianę stanu w blockchainie.7// Do tego potrzebujemy signera konta...8const signer = provider.getSigner()Przykład Web3js
1var web3 = new Web3("http://localhost:8545")2// or3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// change provider6web3.setProvider("ws://localhost:8546")7// or8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// Using the IPC provider in node.js11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path13// or14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // mac os path17// on windows the path is: "\\\\.\\pipe\\geth.ipc"18// on linux the path is: "/users/myuser/.ethereum/geth.ipc"Pokaż wszystkoPo skonfigurowaniu będziesz mógł wysyłać zapytania do blockchaina o:
- numery bloku
- oszacowanie gazu
- wydarzenia inteligentnych kontraktów
- id sieci
- i nie tylko...
Funkcjonalność portfela
Te biblioteki zapewniają Ci funkcjonalność tworzenia portfeli, zarządzania kluczami i podpisywania transakcji.
Oto przykłady od Ethers
1// Utwórz instancję portfela z mnemonika...2mnemonic =3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"4walletMnemonic = Wallet.fromPhrase(mnemonic)56// ...lub z klucza prywatnego7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// Adres jako Promise zgodnie z interfejsem API Signer13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// Adres portfela jest również dostępny synchronicznie17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// Wewnętrzne komponenty kryptograficzne21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// Mnemonik portfela27walletMnemonic.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// Uwaga: Portfel utworzony za pomocą klucza prywatnego nie ma35// mnemonika (uniemożliwia to derywacja)36walletPrivateKey.mnemonic37// null3839// Podpisywanie wiadomości40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Podpisywanie transakcji49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// Metoda connect zwraca nową instancję53// portfela połączonego z dostawcą54wallet = walletMnemonic.connect(provider)5556// Wysyłanie zapytań do sieci57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// Wysyłanie etheru63wallet.sendTransaction(tx)Pokaż wszystkoPrzeczytaj pełną dokumentację (opens in a new tab)
Po skonfigurowaniu będziesz w stanie:
- utworzyć konto
- wysłać transakcje
- podpisać transakcje
- i nie tylko...
Interakcja z funkcjami inteligentnych kontraktów
Biblioteki klienta JavaScript pozwalają aplikacji na wywołanie funkcji inteligentnych kontraktów poprzez odczyt interfejsu binarnego aplikacji (ABI) skompilowanego kontraktu.
ABI zasadniczo wyjaśnia funkcje kontraktu w formacie JSON i pozwala na używanie go jak zwykłego obiektu JavaScript.
A zatem następujący kontrakt Solidity:
1contract Test {2 uint a;3 address d = 0x12345678901234567890123456789012;45 constructor(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}Pokaż wszystkoSkutkowałby następującym plikiem 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}]Pokaż wszystkoOznacza to, że możesz:
- Wysłać transakcję do inteligentnego kontraktu i wykonać jego metodę
- Wezwać do oszacowania gazu, którego wykonanie zostanie przeprowadzone w EVM
- Wdrożyć kontrakt
- I więcej...
Funkcje pomocnicze
Funkcje użytkowe dają Ci praktyczne skróty, które sprawiają, że budowanie z Ethereum jest nieco łatwiejsze.
Wartości ETH są domyślnie w Wei. 1 ETH = 1.000.000.000.000.000 WEI — oznacza to, że masz do czynienia z wieloma liczbami! web3.utils.toWei konwertuje dla Ciebie ether na Wei.
A w Ethers wygląda to tak:
1// Get the balance of an account (by address or ENS name)2balance = await provider.getBalance("ethers.eth")3// { BigNumber: "2337132817842795605" }45// Often you will need to format the output for the user6// which prefer to see values in ether (instead of wei)7ethers.utils.formatEther(balance)8// '2.337132817842795605'Dostępne biblioteki
Web3.js – interfejs API JavaScript dla Ethereum.
Ethers.js – Kompletna implementacja portfela Ethereum i narzędzia w językach JavaScript i TypeScript.
- Strona główna Ethers.js (opens in a new tab)
- Dokumentacja (opens in a new tab)
- GitHub (opens in a new tab)
The Graph – Protokół do indeksowania danych Ethereum i IPFS oraz wysyłania do nich zapytań za pomocą GraphQL.
- The Graph (opens in a new tab)
- Graph Explorer (opens in a new tab)
- Dokumentacja (opens in a new tab)
- GitHub (opens in a new tab)
- Discord (opens in a new tab)
Alchemy SDK – Nakładka na Ethers.js z rozszerzonymi interfejsami API.
viem – Interfejs TypeScript dla Ethereum.
Drift – Metateka TypeScript z wbudowanym buforowaniem, hakami i makietami testowymi.
Dalsza lektura
Znasz jakieś zasoby społeczności, które Ci pomogły? Edytuj tę stronę i dodaj je!
Powiązane tematy
Powiązane samouczki
- Konfiguracja Web3.js do używania blockchainu Ethereum w JavaScript – Instrukcje dotyczące konfiguracji web3.js w projekcie.
- Wywoływanie smart kontraktu z poziomu JavaScript – Zobacz, jak wywołać funkcje kontraktu za pomocą JavaScriptu, używając tokenu DAI.
- Wysyłanie transakcji za pomocą web3 i Alchemy – Przewodnik krok po kroku dotyczący wysyłania transakcji z zaplecza.