Biblioteki JavaScript API
Ostatnia edycja: @wosek_(opens in a new tab), 28 czerwca 2024
Aby aplikacja mogła wchodzić w interakcję z blockchainem Ethereum (tj. odczytywać dane blockchainu i/lub wysyłać transakcje do sieci), musi łączyć się z węzłem Ethereum.
W tym celu każdy klient Ethereum implementuje specyfikację JSON-RPC, dzięki czemu istnieje jednolity zestaw punktów końcowych, 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 programiści mogą pisać intuicyjne, jednowierszowe metody inicjowania żądań JSON RPC (pod maską), które współdziałają z Ethereum.
Wymagania wstępne
Oprócz zrozumienia JavaScript, pomocne może być zrozumienie Ethereum stack 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 także użyteczne funkcje (np. konwersję ETH na Gwei), dzięki czemu jako programiści możemy spędzić mniej czasu na zajmowaniu się zawiłościami klientów, a skupić się w głównej mierze na unikalnej funkcji naszej aplikacji.
Funkcje biblioteki
Połącz 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.
Przykładowy Ether
1// Web3Provider otacza standardowego dostawcę Web3, którym jest // MetaMask co wstrzykuje jako window.ethereum do każdej strony const provider = nowy ethers.providers.Web3Provider(window.ethereum) // Wtyczka MetaMask umożliwia również podpisywanie transakcji do // wyślij ether i zapłać, aby zmienić stan w łańcuchu bloków.2// W tym celu potrzebujemy podpisującego konto...3const signer = provider.getSigner()Kopiuj
Przykład Web3.py
1var web3 = new Web3("http://localhost:8545") // lub var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) // zmiana dostawcy web3.setProvider("ws://localhost:8546") // lub web3.setProvider (nowy Web3.providers.WebsocketProvider("ws://localhost:8546")) // Korzystanie z dostawcy IPC w node.js var net = wymagaj("net") var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // ścieżka mac os // lub var web3 = nowy Web3( nowy Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net) ) // ścieżka mac os // w systemie Windows ścieżka to: "\\\\.\\pipe\\geth.ipc" // w Linuksie ścieżka to: "/users/myuser/.ethereum/geth.ipc"Kopiuj
Po skonfigurowaniu łańcucha bloków będziesz mógł zapytać o:
- numery bloku
- oszacowanie gazu
- wydarzenia inteligentnych kontraktów
- id sieci
- i więcej...
Funkcjonalność portfela
Te biblioteki zapewniają Ci funkcjonalność tworzenia portfeli, zarządzania kluczami i podpisywania transakcji.
Tutaj są przykłady od Ethers
1// Utwórz instancję portfela z mnemonika...2mnemonic =3 "zapowiadaj wzór kończyny pomieszczenia w suchej skali wysiłek gładki alkohol jazzowy"4walletMnemonic = Wallet. romMnemonic(mnemonic)56// ...lub z klucza prywatnego7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic. ddress === walletPrivateKey.address10// true1112// Adres jako Promise na portfel Signer API13etAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// Adres portfela jest również dostępny synchronicznie17walletMnemonic. ddress18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// Wewnętrzne składniki kryptograficzne21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic. ublicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// / Portfel mnemonic27walletMnemonic. nemonic28// {29// locale: 'en',30// path: 'm/44\'/60\'/0\'/0/0',31// wyrażenie: 'zapowiadaj pokój wzorzec suchy jednostkowy wysiłek gładki alkohol jazzowy'32// }3334// Uwaga: Portfel utworzony kluczem prywatnym nie35// ma mnemonic (zapobiega temu efektowi)36walletPrivateKey. nemonic37// null3839// Podpisanie wiadomości40walletMnemonic. ignMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 wartość: utils. arseEther("1.0"),46}4748// Podpisanie transakcji49walletMnemonic. ignTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// Metoda połączenia zwraca nową instancję53// Wallet połączony z dostawcą54portfel = portfel Mnemonic. onnect(provider)5556// Querying the network57wallet.getBalance()58// { Promise: { BigNumber: "42" }59portfela. etTransactionCount()60// { Promise: 0 }6162// Sending ether63wallet.sendTransaction(tx)Pokaż wszystkoKopiuj
Przeczytaj pełną dokumentację(opens in a new tab)
Po skonfigurowaniu będziesz w stanie:
- utworzyć konto
- wysłać transakcje
- podpisać transakcje
- i więcej...
Interakcja z funkcjami inteligentnego kontraktu
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:
1kontrakt Test {2 uint a;3 adres d = 0x12345678901234567890123456789012;45 function Test(uint testInt) { a = testInt;}67 zdarzenie (uint indexed b, bytes32 c);89 zdarzenie wydarzenia2 (indeks b, bajty32 c);1011 function foo(uint b, bytes32 c) returns(address) {12 Event(b, c);13 zwrot d;14 }15}Pokaż wszystkoKopiuj
Skutkowałby następującym 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 "stałe":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, nazwa":"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ż wszystkoKopiuj
Oznacza 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 użytkowe
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 ether na Wei dla Ciebie.
A w eterach wygląda to tak:
1// Uzyskaj saldo konta (przez adres lub nazwę ENS)2saldo = oczekiwanie na dostawcę.getBalance ("ethers. th")3// { BigNumber: "2337132817842795605" }45// często musisz sformatować dane wyjściowe dla użytkownika6// które wolą zobaczyć wartości w eterze (zamiast Wei)7eterach. tils.formatEther(balance)8// '2,337132817842795605'Kopiuj
Dostępne biblioteki
Web3.js - Ethereum JavaScript API.
Ethers.js — Pełna implementacja portfela Ethereum i narzędzia w JavaScript i TypeScript.
Wykres - Protokół do indeksowania danych Ethereum i IPFS i zapytania za pomocą GraphQL.
- Wykres(opens in a new tab)
- Eksplorator wykresów(opens in a new tab)
- Dokumentacja(opens in a new tab)
- GitHub(opens in a new tab)
- Discord(opens in a new tab)
light.js - Wysokopoziomowa reaktywna biblioteka JS zoptymalizowana dla lekkich klientów.
Web3-wrapper - Typescript alternatywny dla Web3.js.
Alchemyweb3 - Wrapper wokół Web3.js z automatycznymi ponownymi próbami i ulepszonymi apis.
Dodatkowo przeczytaj
Wiesz o zasobach społecznościowych, które Ci pomogły? Wyedytuj tę stronę i dodaj je!
Powiązane tematy
Powiązane samouczki
- Skonfiguruj Web3js, aby używać blockchain Ethereum w JavaScript – Instrukcje dotyczące konfiguracji web3.js w Twoim projekcie.
- Wywołanie inteligentnego kontraktu z JavaScript – za pomocą tokena DAI zobacz jak wywołać funkcję kontraktów przy użyciu JavaScript.
- Wysyłanie transakcji przy użyciu web3 i Alchemy – krok po kroku do wysyłania transakcji z backendu.