Łączenie z providerem
RPC i portfele
Łączenie z providerem to bezpłatna lekcja Web3 & DApp Development Fundamentals na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Web3 & DApp Development Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Web3 & DApp Development Fundamentals zawiera 4 lekcji w sumie.
Komunikacja z blockchainem
Aby korzystać z Ethereum za pomocą JavaScriptu, potrzebujesz providera — obiektu, który łączy się z węzłem i umożliwia odczytywanie danych łańcucha oraz wysyłanie transakcji.
Biblioteki takie jak ethers.js i web3.js opakowują protokół JSON-RPC używany przez węzły.
Providery a signery
Dwie kluczowe abstrakcje:
- Provider — połączenie z łańcuchem tylko do odczytu (salda, bloki, wywołania view).
- Signer — przechowuje klucz prywatny i może podpisywać oraz wysyłać transakcje.
Do odczytu używa się providera, a do zapisu — signera.
Provider JSON-RPC
Najczęściej używany provider łączy się z punktem końcowym RPC, takim jak Infura, Alchemy lub lokalny węzeł:
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider(
"https://mainnet.example-rpc.io/KEY"
);Dzięki niemu można od razu odpytywać publiczne dane łańcucha.
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider(
"https://mainnet.example-rpc.io/KEY"
);Odczytywanie informacji o sieci
Po nawiązaniu połączenia odczytaj podstawowy stan sieci:
const network = await provider.getNetwork();
console.log(network.chainId);
const block = await provider.getBlockNumber();
console.log("Latest block:", block);Wartość chainId identyfikuje używaną sieć (1 = mainnet).
const network = await provider.getNetwork();
console.log(network.chainId);
const block = await provider.getBlockNumber();
console.log("Latest block:", block);Sprawdzanie salda
Pobierz saldo ETH konta za pośrednictwem providera:
const balance = await provider.getBalance("0xAbc...");
console.log(ethers.formatEther(balance), "ETH");Surowa wartość jest wyrażona w wei (jako BigInt); formatEther konwertuje ją na czytelny dla człowieka ciąg reprezentujący ETH.
const balance = await provider.getBalance("0xAbc...");
console.log(ethers.formatEther(balance), "ETH");Portfele przeglądarkowe
W aplikacji dApp działającej w przeglądarce portfel (np. MetaMask) wstrzykuje provider pod adresem window.ethereum. Należy opakować go w BrowserProvider:
const provider = new ethers.BrowserProvider(window.ethereum);\nawait provider.send("eth_requestAccounts", []);Wywołanie eth_requestAccounts prosi użytkownika o połączenie.
const provider = new ethers.BrowserProvider(window.ethereum);
await provider.send("eth_requestAccounts", []);Uzyskiwanie signera
Z poziomu browser providera należy uzyskać signera połączonego konta:
const signer = await provider.getSigner();\nconsole.log("Connected as:", await signer.getAddress());Ten signer może teraz wysyłać transakcje zatwierdzane przez użytkownika w jego portfelu.
const signer = await provider.getSigner();
console.log("Connected as:", await signer.getAddress());Portfel z klucza prywatnego
Na backendzie można utworzyć signera na podstawie klucza prywatnego. Należy połączyć go z providerem, aby mógł rozgłaszać transakcje:
const wallet = new ethers.Wallet(\n process.env.PRIVATE_KEY,\n provider\n);Nigdy nie wpisuj kluczy prywatnych bezpośrednio w kodzie — wczytuj je ze zmiennych środowiskowych.
const wallet = new ethers.Wallet(
process.env.PRIVATE_KEY,
provider
);Porównanie z web3.js
web3.js to starsza alternatywa. Połączenie z nim wygląda następująco:
const { Web3 } = require("web3");\nconst web3 = new Web3("https://mainnet.example-rpc.io/KEY");\nconst block = await web3.eth.getBlockNumber();Obie biblioteki opierają się na podobnych koncepcjach, ale ethers.js wyraźniej rozdziela providery i signery.
const { Web3 } = require("web3");
const web3 = new Web3("https://mainnet.example-rpc.io/KEY");
const block = await web3.eth.getBlockNumber();Bezpieczne przechowywanie sekretów
Klucze RPC i klucze prywatne to dane wrażliwe:
- Przechowuj je w
.env, nigdy w repozytorium kodu. - W kodzie frontendu używaj providerów tylko do odczytu.
- Klucze prywatne powinny znajdować się wyłącznie na bezpiecznych backendach lub w prywatnym portfelu użytkownika.
Domyślne providery i providery zapasowe
ethers może łączyć kilka backendów, aby zwiększyć niezawodność. Fallback provider wysyła zapytania do wielu endpointów i uzgadnia wynik:
const provider = ethers.getDefaultProvider("mainnet", {\n alchemy: process.env.ALCHEMY_KEY,\n infura: process.env.INFURA_KEY,\n});Jeśli jeden backend przestanie działać, pozostałe nadal zapewnią działanie aplikacji.
const provider = ethers.getDefaultProvider("mainnet", {
alchemy: process.env.ALCHEMY_KEY,
infura: process.env.INFURA_KEY,
});Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat providerów i signerów.
Podsumowanie
Nauczyłeś się łączyć z blockchainem.
- Provider odczytuje dane z łańcucha, a signer wysyła transakcje.
JsonRpcProviderłączy się z adresem RPC, aBrowserProvideropakowuje providery wstrzykiwane przez portfel.getSignerzwraca połączone konto, anew Wallet(key, provider)podpisuje transakcje na backendzie.- Wartości są podawane w wei; do ich wyświetlania używaj
formatEther. - Klucze RPC i klucze prywatne przechowuj w
.env, nigdy bezpośrednio w kodzie.
Ucz się Web3 & DApp Development Fundamentals dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 29
- Lekcje
- 105
Często zadawane pytania
Czy lekcja „Łączenie z providerem” jest bezpłatna?
Tak — pełny tekst „Łączenie z providerem” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Web3 & DApp Development Fundamentals, przejdź na CoddyKit PRO. Kurs Web3 & DApp Development Fundamentals zawiera 4 lekcji w sumie.
Co nauczysz się w „Łączenie z providerem”?
RPC i portfele Ćwiczysz Web3 & DApp Development Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Web3 & DApp Development Fundamentals?
Nie wymagamy żadnego doświadczenia. Web3 & DApp Development Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Łączenie z providerem”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Web3 & DApp Development Fundamentals?
Tak. Każda lekcja Web3 & DApp Development Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Łączenie z providerem
- Odczytywanie danych kontraktu
- Wysyłanie transakcji
- Nasłuchiwanie zdarzeń