Deweloperzy Ethereum zazwyczaj polegają na Infura lub Alchemy dla łatwego dostępu do węzłów Ethereum. GetBlock jest atrakcyjną alternatywą, która zapewnia wsparcie dla wielu łańcuchów, hojny darmowy poziom i doskonałą stabilność. W tym samouczku dowiesz się, jak przenieść backend Truffle + web3.js z Infura / Alchemy do GetBlock. zarejestrowanie się na GetBlock, uzyskanie punktu końcowego RPC, ponowna konfiguracja Truffle, testowanie łączności web3, Uruchamianie rozmieszczeń oraz Porównanie limitu oprocentowania i monitorowanie różnic. Potrzebujesz istniejącego projektu Ethereum DApp z Truffle, a zainstalowany jest Node.js. Zakładam, że używasz Infura lub Alchemy (z identyfikatorem projektu lub kluczem API) i masz dostępny klucz mnemoniczny lub prywatny do wdrożenia. Prerequisites: Dlaczego przełączyć się z Infura lub Alchemy na GetBlock? GetBlock allows you to connect to not just Ethereum but 55+ blockchain networks using JSON-RPC, REST, and WebSocket APIs. This allows you to use Ethereum, Bitcoin, BNB Smart Chain, Polygon, Solana, and a lot of others with one platform. Infura and Alchemy, meanwhile, have a shorter list of networks supported (Infura supports Ethereum primarily and some networks like IPFS or certain L2s, and Alchemy supports Ethereum and some chains but not BSC specifically). If your DApp can be more than Ethereum, the broad multi-chain support of GetBlock is a huge plus. Multi-chain support. Each of these providers has free plans, but their limitations and models are different. Infura's free plan conventionally provided around 50,000 requests per day (now measured as 3 million daily credits with some rate limiting). Alchemy's free tier offers up to 100 million compute units a month (Alchemy measures different RPC calls as different "compute units"). GetBlock's free tier is very developer-friendly: it offers 50,000 requests a day (reset daily) with a limit of 5 requests a second. Practically, 50k daily calls are sufficient for development and small DApps, and you can always upgrade in case you need more. The free plan is indeed free ("zero fees") and still allows access to all supported chains. The key takeaway here is that GetBlock's free plan should be more than sufficient for typical dev and testing demands. Generous free tier. GetBlock offers a 99.9% uptime guarantee with a stable 24/7 connection to blockchain networks. That is, you can expect a highly stable service for your DApp backend. Stability is also what Infura and Alchemy are famous for, but GetBlock's infrastructure is built to be rock-solid and scalable. Many developers appreciate the fact that GetBlock provides both shared nodes (with usage limits) and dedicated nodes for heavier workloads, so you have a way to scale up. The correct answer is that the platform is highly reliable, so you won't see variations in network uptime when you switch over – possibly except for better performance in certain instances. Stability and uptime. Wreszcie, płyta kontrolna GetBlock ma kilka świetnych możliwości monitorowania i analizy, do których wkrótce dojdziemy. Krok 1: Zarejestruj się na konto GetBlock Pierwszym krokiem jest zarejestrowanie się na bezpłatne konto GetBlock: Navigate to the GetBlock website and click on "Sign Up" (or directly visit the GetBlock dashboard sign-up page). You have a few sign-up options: Email/Password. Sign up using email and choose a password. Social Login. Use Google or GitHub to sign up immediately. Web3 Wallet. You can even sign up by connecting a MetaMask wallet (no email required). This is a great option for developers who are already set up on MetaMask. Wybierz preferowaną metodę i postępuj zgodnie z instrukcjami (np. sprawdź swoją wiadomość e-mail, jeśli zdecydujesz się na rejestrację e-mail). Powinieneś mieć konto GetBlock w ciągu minuty lub dwóch. Uwaga. Panel sterowania GetBlock to miejsce, w którym będziesz obsługiwać punkty końcowe API, monitorować użycie i dostosowywać ustawienia. Idź do przodu i rozejrzyj się po zalogowaniu się. zobaczysz swój identyfikator użytkownika w ustawieniach konta (przydatne, jeśli kiedykolwiek potrzebujesz wsparcia), ale co ważniejsze, następnym razem skonfigurujesz punkty końcowe projektu. Krok 2: Uzyskaj punkt końcowy GetBlock RPC (klucz API i adres URL) Po utworzeniu konta musisz teraz utworzyć punkt końcowy RPC dla sieci Ethereum (lub dowolnej sieci, której potrzebujesz). To zapewni ci adres URL HTTP (i odpowiedni adres URL WebSocket, jeśli to konieczne), który będziesz używać zamiast Infura/Alchemy. Stwórz nowy punkt końcowy: W panelu sterowania GetBlock znajdź przycisk "Utwórz punkt końcowy" lub "Dodaj nowy punkt końcowy". Select the blockchain network. As in our case, choose Ethereum from the list of available protocols. Then select the network type: For Ethereum Mainnet, choose Mainnet. For a testnet, choose the specific test network (GetBlock now supports Ethereum Sepolia). Opcjonalnie podaj nazwę / etykietę dla tego punktu końcowego (np. "MyDApp Ethereum Mainnet"), aby ułatwić śledzenie w przypadku skonfigurowania więcej niż jednego punktu końcowego. Kliknij pozycję Utwórz lub potwierdź. Panel narzędzi generuje szczegóły punktów końcowych. Po utworzeniu powinieneś zobaczyć adres URL RPC dla punktu końcowego. GetBlock może pokazać Ci URL WebSocket (począwszy od wss://) dla tego samego punktu końcowego, a kiedy Twoja aplikacja wymaga WebSockets (dla subskrypcji lub wydarzeń na żywo), możesz to wykorzystać. Przechowuj klucz API GetBlock bezpiecznie. Nie angażuj go w publiczny repos lub kod po stronie klienta. Najlepszą praktyką jest przechowywanie go jako zmiennej środowiska lub konfigurowanie pliku poza kontrolą źródłową. Ważne jest. Masz teraz adres URL punktu końcowego GetBlock i klucz API, gotowy do użycia. Krok 3: Zmień konfigurację Truffle, aby użyć GetBlock Twój (lub Jeśli używasz Infura lub Alchemy, konfiguracja może wyglądać tak dla sieci: truffle-config.js truffle.js require('dotenv').config(); const HDWalletProvider = require('@truffle/hdwallet-provider'); const INFURA_PROJECT_ID = process.env.INFURA_PROJECT_ID; const MNEMONIC = process.env.MNEMONIC; // or a private key module.exports = { networks: { ropsten: { provider: () => new HDWalletProvider(MNEMONIC, `https://ropsten.infura.io/v3/${INFURA_PROJECT_ID}`), network_id: 3, gas: 5500000, confirmations: 2, timeoutBlocks: 200, skipDryRun: true }, // ... other networks ... }, // ... other Truffle config ... }; Naszym celem jest zastąpienie adresu URL Infura adresem URL GetBlock (i podobnie dla wszystkich adresów URL Alchemy).Dobra wiadomość jest taka, że RPC GetBlock działa w ten sam sposób – podajesz adres URL punktu końcowego i dostawcę portfela. Jeśli Twój projekt Truffle nie jest już używany (jest to prawdopodobne, jeśli został wdrożony za pośrednictwem Infura/Alchemy), zainstaluj go z Ta biblioteka pozwala Truffle podpisywać transakcje za pomocą kluczy i wysyłać je za pośrednictwem zdalnego węzła. Instalacja HDWalletProvider. @truffle/hdwallet-provider npm install @truffle/hdwallet-provider Modyfikacja Dodaj klucz API GetBlock do zmiennych środowiska (na przykład w archiwum set Upewnij się również, że klucz mnemoniczny lub prywatny znajduje się w warstwie env (np. lub Na przykład, aby korzystać z Ethereum Sepolia testnet za pośrednictwem GetBlock: truffle-config.js .env GETBLOCK_API_KEY=<your_key_here> MNEMONIC PRIVATE_KEY require('dotenv').config(); const HDWalletProvider = require('@truffle/hdwallet-provider'); const PRIVATE_KEY = process.env.PRIVATE_KEY; // your wallet private key (hex string, no 0x) const GETBLOCK_KEY = process.env.GETBLOCK_API_KEY; // your GetBlock API key module.exports = { networks: { sepolia: { provider: () => new HDWalletProvider( PRIVATE_KEY, `https://eth.getblock.io/sepolia/?api_key=${GETBLOCK_KEY}` ), network_id: 11155111, // Sepolia network ID gas: 5500000, // Gas limit, adjust as needed confirmations: 2, // # of blocks to wait between deployments (optional) timeoutBlocks: 200, // # of blocks before a deployment times out (optional) skipDryRun: true // Skip dry run before migrations (recommended for public nets) }, // ... other networks (mainnet, etc) ... }, // ... rest of config ... }; Kluczową zmianą jest adres URL: używaliśmy Z naszymi parametr zapytania. Teraz, za każdym razem, gdy uruchamiasz Truffle z sieć, będzie on przekierowany przez GetBlock zamiast Infura. Jeśli chcesz skonfigurować Mainnet, możesz dodać podobną sekcję: https://eth.getblock.io/... ?api_key= sepolia mainnet: { provider: () => new HDWalletProvider( PRIVATE_KEY, `https://eth.getblock.io/mainnet/?api_key=${GETBLOCK_KEY}` ), network_id: 1, gas: 5500000, gasPrice: 20e9, // e.g., 20 Gwei (you may adjust according to network conditions) confirmations: 2, timeoutBlocks: 200, skipDryRun: true } Pamiętaj, aby zastąpić go prawidłowym dla Twojej sieci (Ethereum mainnet jest 1, Sepolia jest 11155111, itp.) Zapisz swoje zmiany w pliku konfiguracyjnym. network_id o jest to, co użyć tutaj, ale GetBlock obsługuje również osadzenie klucza w ścieżce (jak można zobaczyć w niektórych przykładach). Oba są równoważne. Notatka https://eth.getblock.io/<network>/?api_key=.. Krok 4: Wdrażanie i testowanie web3.js z GetBlock Przed wysłaniem umów, dobrze jest sprawdzić, czy wszystko jest poprawnie skonfigurowane. Truffle Console. Run (or the name of the network you specified). This will launch a console with Web3 available interactively. Try running something as a test, such as this: . If everything is properly set up, this should display the current block number on that network via GetBlock. If you get a response, your connection is solid! truffle console --network sepolia await web3.eth.getBlockNumber() Node.js Script. Alternatively, you could test using web3.js in a standalone script. First, make sure you have web3 installed ( ), then create a simple script like below to get the latest block number: npm install web3 // test-getblock.js const Web3 = require('web3'); const RPC_URL = `https://eth.getblock.io/sepolia/?api_key=${process.env.GETBLOCK_API_KEY}`; const web3 = new Web3(RPC_URL); web3.eth.getBlockNumber() .then(num => console.log("Latest block number:", num)) .catch(err => console.error("Error connecting to GetBlock:", err)); Don’t forget to load your environment variables (you could add na górze i zdefiniuj GETBLOCK_API_KEY w pliku .env). Jeśli drukuje numer bloku, z powodzeniem połączyłeś się z GetBlock za pośrednictwem web3.js. require('dotenv').config(); node test-getblock.js Wyżej wymieniony test wykorzystuje proste wezwanie do odczytu ( Możesz spróbować więcej, takich jak pobieranie bloku lub salda konta, aby jeszcze bardziej potwierdzić, że rzeczy działają. eth_getBlockNumber const latestBlock = await web3.eth.getBlock('latest'); console.log("Latest block info:", latestBlock); Jeśli coś jest nie tak (np. popełnisz błąd uwierzytelniania), sprawdź, czy klucz API w adresie URL jest poprawny, a wolny limit konta nie został przekroczony (bardzo mało prawdopodobne przy zaledwie kilku prośbach). Jeśli wcześniej korzystałeś z dostawcy web3 Alchemy lub Infura w kodzie (tj. Alchemy oferuje klienta Web3 lub SDK z metodami niestandardowymi), przełączanie do GetBlock oznacza, że nadal będziesz korzystać z podstawowych metod Web3. Dla typu . Krok 5: Uruchom migracje Truffle i testy na GetBlock I wreszcie, prawdziwy test – wdrażanie umów i hosting DApp z GetBlock jako dostawcą backend. Rozmieszczanie umów zwykle z Truffle, ale poleć mu rozmieszczenie w sieci, którą utworzyłeś dla GetBlock. Wdrażanie umów . truffle migrate --network sepolia Truffle skompiluje Twoje kontrakty (jeśli nie są już skompilowane) a następnie korzysta z HDWalletProvider do transmisji transakcji wdrażania na GetBlock RPC. Powinieneś być w stanie wyświetlić wyjście w konsoli wysłanych transakcji, otrzymanych potwierdzeń itp. Proces jest taki sam jak w przypadku Infura/Alchemy – jedyną różnicą za kulisami jest adres URL węzła. Podczas wdrażania do Ethereum mainnet, upewnij się, że masz rozsądną ilość ETH dostępnych na koncie wdrażającego i zwrócić uwagę na ceny gazu. (Zrób swój Doświadczenie powinno być takie samo jak w przypadku Infury: GetBlock po prostu przekazuje podpisane transakcje do sieci Ethereum. truffle migrate --network mainnet mainnet Jeśli masz testy Truffle lub skrypty, które powołują się na twoje kontrakty, możesz również przetestować je w sieci oferowanej przez GetBlock: Bieganie w testach. truffle test --network sepolia To uruchomi pakiet testowy na końcowym punkcie GetBlock. Transakcje testowe (np. wezwanie funkcji kontraktu na rozmieszczone kontrakty) zostaną przesyłane przez węzeł GetBlock. Z kilkoma wyjątkami, przełączanie punktów końcowych RPC nie powinno mieć wpływu na zachowanie Ethereum. Jeśli twoje migracje lub testy przebiegły dobrze na Infura/Alchemy, powinny działać dobrze na GetBlock. Wszystkie domyślne połączenia JSON-RPC są obsługiwane dla GetBlock (np. wdrażanie umów, czytanie stanu, wysyłanie transakcji, zapytania zdarzeń) – jest to usługa pełnego węzła. Jeśli połączenie JSON-RPC jest kiedykolwiek usunięte z jakiegokolwiek powodu, dokumenty GetBlock zazwyczaj to oznaczają, ale proste połączenia, takie jak wdrażanie ( Wymagania ( ), otrzymywanie paragonów itp., są wszystkie dostępne. Oczekiwane zachowanie eth_sendRawTransaction eth_call Gratulacje! Twój DApp's backend jest teraz na GetBlock! Twoja migracja została zakończona. Twoje połączenia web3 wykorzystują infrastrukturę GetBlock, a twoje inteligentne kontrakty są na żywo. Zarządzanie kluczami API, limitami oprocentowania i monitorowaniem na GetBlock Zmiana dostawcy to nie tylko kwestia aktualizacji adresów URL – konieczne jest również, aby wiedzieć, czy istnieją różnice w sposobie śledzenia użytkowania, a także monitorowanie wydajności DApp na nowym dostawcy. Infura użył identyfikatora projektu w adresie URL; Alchemy używał kluczy API raczej częściej w formie osadzonej w adresie URL (lub domenie niestandardowej). Podejście GetBlocka jest również takie samo – będziesz miał token dostępu (klucz API) i dodasz go do adresu URL RPC. Na poziomie funkcjonalnym Twoja aplikacja nie musi sprawić, aby twój klucz robił coś niezwykłego, oprócz włączenia go do adresu URL końcowego. Podobnie, ponieważ zabezpieczyłeś swój Infura Project ID lub klucz API Alchemy, zabezpiecz klucz GetBlocka (przechowuj w zmiennej środowisku, a nie kod po stronie klienta). Klucz API Setup. Istnieją limity dla każdego dostawcy na wolnym poziomie: Ograniczenia cenowe i przepustowość. GetBlock Free Tier. 50,000 compute units per day and max 5 requests per second. In practice, 1 simple RPC call ≈ 1 CU (more complex calls like logs could be more counted, as with Alchemy's system). The 5 RPS restriction will make you not burst more than 5 requests in the same second on free tier. If so, subsequent calls may be refused with a rate-limit response. For all but the most busy DApps, 5 RPS is fine while developing – but if your backend scripts are making lots of concurrent calls, you may need to rate-limit them or consider switching to a more expensive plan (the one after this offers 25 RPS). Infura. Infura's free tier was circa 100k requests/day historically and since their new configuration, it's 6 million credits/day throughput of up to 2,000 credits/sec (which is roughly the equivalent of perhaps ~2000 simple calls/sec). Infura's generous free plan RPS is very kind, but note the fact that not all calls are 1 credit (some big calls are more credits). Either way, if your DApp wasn't hitting Infura's limits, it likely won't hit GetBlock's either, by similar scale. Alchemy. Alchemy's 100M free tier monthly of compute units is significant as well. They have no hard RPS fee, but intense usage will consume those compute units quickly. Alchemy bills calls (e.g., a simple ETH call might be 0.5 CU, a complex one 10 CUs, etc.). If you weren’t close to 100M units, you should be fine switching to 50k/day (≈1.5M/month) on GetBlock for dev. If 50k/day is not enough (e.g., if you are running a production app on a free plan – not typical), you might have to move to GetBlock's paid plans which offer much higher monthly CUs. Innym niesamowitym aspektem GetBlock jest jego pulpit z pełną analizą. Na głównej stronie pulpitu otrzymasz przegląd bieżącego planu, pozostałych CU na dzień, bieżącego progu RPS i skumulowanych żądań złożonych w ciągu ostatnich 24 godzin. To pozwala natychmiast wiedzieć, czy osiągasz dzienny limit. Ponadto, na karcie "Statystyki" lub "Analityka" w punktach końcowych, GetBlock zapewnia wykresy i podziały: Monitorowanie użytkowania . Liczba wniosków w czasie Statusy odpowiedzi (aby można było sprawdzić, czy wystąpiły błędy) Dystrybucja połączeń metod (które metody RPC używasz najczęściej) Wszelkie odrzucenia limitu oprocentowania (jeśli trafisz limit RPS) Monitorowanie tych wskaźników jest wysoce zalecane, zwłaszcza gdy przechodzisz. Na przykład, jeśli pomyłkowo napisałeś skrypt, który zalewa sieć za pomocą połączeń, pulpit pokaże wzrost objętości żądań lub nawet niektóre 429 odpowiedzi limitowe. To jest miejsce, w którym chciałbyś zoptymalizować połączenia backendowe DApp. Infura i Alchemy oferują również pulpity, ale zaletą GetBlock jest to, że możesz śledzić całe korzystanie z wielu łańcuchów z jednego miejsca. W przypadku, gdy darmowy plan nie jest wystarczający (może Twoja aplikacja się rozszerza), GetBlock ma łatwe uaktualnienia – plan Starter (~50M CUs / miesiąc, ~1.6M / dzień, 25 RPS) i plan Pro (600M / miesiąc, 200 RPS). Możesz uaktualnić bezpośrednio z pulpitu. Ograniczenia działania . Darmowy plan GetBlock zawiera wsparcie dla maksymalnie 2 tokenów dostępu (punkty końcowe). Oznacza to, że możesz utworzyć jeden dla mainnet, jeden dla testnetu, tj. Utrzymać swoje projekty lub środowiska w izolacji. Każdy punkt końcowy będzie miał swój własny klucz API i śledzenie użytkowania. Jest to porównywalne z podejściem Infura "Project ID per project". Wiele punktów końcowych. Najlepsze praktyki na rzecz bezproblemowej migracji Oto co Wam polecam: Maintain environment variables. Place your API keys and secrets (mnemonic/private key) in an file or in your system environment, not in source code. This makes switching endpoints easier and more secure. .env Test on a testnet first. While switching providers, attempt to deploy on a test network (Sepolia) with the help of GetBlock before working on mainnet. This makes sure that your setup is right. After confirmation, you can shift your mainnet setup. Compare behavior. It is a good idea to do some sanity checks after migration – i.e., get a known contract's data via Infura and via GetBlock and compare that the results are identical. They should be, since both are reading from Ethereum, but this can give confidence that GetBlock is in full sync (GetBlock does run full nodes, so it should be). WebSockets (if required). If your backend relies on WebSocket subscriptions (i.e., listening to events), GetBlock does offer that too. Simply use the URL in a Web3 WebsocketProvider. Ensure that your plan covers the throughput your subscriptions require (the same RPS limits apply to websockets). The majority of developers, however, use WebSockets in the frontend (with a library like MetaMask or Alchemy's subscription API). In purely backend contexts, WebSockets are less common, but it’s good to know GetBlock has the option. wss://go.getblock.io/xxxxxxx No frontend changes. Since this migration is backend-facing, your frontend (if you have one) doesn't have to change. If you were using MetaMask to connect to a testnet using Infura, you can still do so – MetaMask does not require GetBlock for connecting users (though GetBlock can also provide custom RPC endpoints for MetaMask). The separation of concerns (frontend vs. backend) remains. konkluzji Poprzez ten samouczek przeniosłeś swój backend Ethereum DApp z Infura/Alchemy do GetBlock. Twoja konfiguracja Truffle wskazuje teraz na RPC GetBlocka i możesz wdrażać kontrakty i wykonywać połączenia web3.js za pośrednictwem GetBlocka w taki sam sposób, jak wcześniej.