Web3 & DApp Development Fundamentals · Lekcja

Łączenie z providerem

RPC i portfele

Lekcja 1 z 413 kroki

Łą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, a BrowserProvider opakowuje providery wstrzykiwane przez portfel.
  • getSigner zwraca połączone konto, a new 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.
Bezpłatny start

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

  1. Łączenie z providerem
  2. Odczytywanie danych kontraktu
  3. Wysyłanie transakcji
  4. Nasłuchiwanie zdarzeń
← Powrót do Web3 & DApp Development Fundamentals