Развивачите на Ethereum обично се потпираат на Infura или Alchemy за лесен пристап до Ethereum јазли. GetBlock е атрактивна алтернатива која обезбедува поддршка за повеќе синџири, великодушен бесплатен ниво и одлична стабилност. Во ова упатство, ќе откриете како да мигрирате Truffle + web3.js backend од Infura / Alchemy до GetBlock. да се регистрирате за GetBlock, Добивање на RPC крајна точка, реконфигурирање на Truffle, Тестирање на веб3 конективноста управување со депонирање, и споредба на лимитите и следење на разликите. Потребен ви е постоечки Ethereum DApp проект со Truffle, а Node.js инсталиран. Претпоставувам дека сте користеле Infura или Alchemy (со проект ИД или API клуч) и имате мнемоничен или приватен клуч достапен за имплементација. Prerequisites: Зошто да се префрлите од Infura или Alchemy на 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. Конечно, таблата на GetBlock има некои одлични можности за следење и анализа, на кои наскоро ќе стигнеме. Чекор 1: Регистрирајте се за GetBlock сметка Првиот чекор е да се регистрирате за бесплатна сметка 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. Изберете го вашиот омилен метод и продолжете со упатствата (на пример, проверете ја вашата е-пошта ако сте избрале е-пошта). Треба да ја имате вашата GetBlock сметка за една минута или две. Забелешка. Табелата GetBlock е местото каде што ќе ги обработувате вашите API крајни точки, следење на употребата и прилагодување на поставките. Одете напред и погледнете наоколу откако ќе се најавите. Ќе го видите вашиот кориснички ИД на поставките на сметката (корисно ако некогаш ви е потребна поддршка), но што е поважно, ќе ги конфигурирате крајните точки на проектот следно. Чекор 2: Get Your GetBlock RPC Endpoint (API клуч и URL) Создадена сметка, сега ќе треба да креирате RPC крајна точка за мрежата Ethereum (или која било мрежа што ви е потребна). Ова ќе ви обезбеди со HTTP URL (и соодветниот WebSocket URL ако е потребно) што ќе го користите наместо Infura/Alchemy. Креирајте нова крајна точка: Во GetBlock таблата, пронајдете го копчето "Креирај крајна точка" или "Додај нова крајна точка". 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). Опционално обезбедете име / ознака за оваа крајна точка (на пример, "MyDApp Ethereum Mainnet") за да ви биде полесно да го следите во случај да конфигурирате повеќе од една крајна точка. Кликнете на креирај или потврди. таблата ќе ги генерира вашите детали за крајната точка. По создавањето, треба да видите RPC URL за вашата крајна точка. GetBlock може да ви покаже WebSocket URL (почнувајќи со wss://) за истата крајна точка, и кога вашата апликација бара WebSockets (за претплати или живи настани), можете да го искористите тоа. Чувајте го вашиот GetBlock API клуч безбедно. Не го ангажирајте во јавен репо или код од страна на клиентот. Најдобрата пракса е да го зачувате како променлива на животната средина или да го конфигурирате датотеката надвор од контролата на изворот. Важно е Сега имате URL на крајната точка GetBlock и API клуч, подготвен за употреба. Чекор 3: Променете ја конфигурацијата на Truffle за да го користите GetBlock Вашиот (или на Ако користите Infura или Alchemy, вашата конфигурација би можела да изгледа вака за мрежа: 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 ... }; Нашата цел е да го замениме Infura URL со GetBlock URL (и слично за сите Alchemy URLs). Ако вашиот Truffle проект веќе не го користи (веројатно е, ако сте го имплементирале преку Infura/Alchemy), инсталирајте го со Оваа библиотека му овозможува на Truffle да ги потпише трансакциите со вашите клучеви и да ги испрати преку далечниот јазол. Инсталирајте го HDWalletProvider. @truffle/hdwallet-provider npm install @truffle/hdwallet-provider Модификација Додадете го вашиот GetBlock API клуч на промените во животната средина (на пример, во Датотеката се Исто така, бидете сигурни дека вашиот mnemonic или приватен клуч е во env var (на пример, или ). Then update the network config. For example, to use Ethereum Sepolia testnet via 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 ... }; Тоа е тоа! клучната промена е URL: ние се користи Со нашите параметар на прашањето. Сега, секогаш кога ќе го извршите Truffle со мрежа, ќе се рутира преку GetBlock наместо Infura. Ако сакате да го конфигурирате Mainnet, можете да додадете сличен дел: 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 } Бидете сигурни да го замените со вистинскиот за вашата мрежа (Ethereum mainnet е 1, Sepolia е 11155111, итн.). network_id на е она што се користи тука, но GetBlock, исто така, поддржува вградување на клучот во патот (како што може да видите во некои примери). И двете се еквивалентни. Забелешка https://eth.getblock.io/<network>/?api_key=.. Чекор 4: Поставување и тестирање на web3.js со GetBlock Пред да ги испратите вашите договори, добра идеја е да проверите дали сè е правилно конфигурирано. 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)); Не заборавајте да ги вчитате вашите променливи на животната средина (можете да додадете на врвот и дефинирајте GETBLOCK_API_KEY во вашиот .env). Ако печати блок број, успешно сте се поврзале со GetBlock преку web3.js. require('dotenv').config(); node test-getblock.js Горенаведениот тест користи едноставен повик за читање ( ). You can try more, such as retrieving a block or an account balance, to further confirm things are working. For example: eth_getBlockNumber const latestBlock = await web3.eth.getBlock('latest'); console.log("Latest block info:", latestBlock); Ако нешто не е во ред (на пример, ќе уловите грешка во аутентификацијата), проверете го вашиот API клуч во URL е точен и слободниот лимит на вашата сметка не е надминат (екстремно малку веројатно со само неколку барања). Ако претходно сте го користеле Alchemy's или Infura's web3 провајдер во код (т.е. Alchemy нуди Web3 клиент или SDK со прилагодени методи), преминувањето на GetBlock ќе значи дека се уште ќе ги користите основните Web3 методи. За типот Чекор 5: Извршете миграции и тестови на Truffle на GetBlock И на крајот, вистинскиот тест – имплементирање на вашите договори и хостирање на вашиот DApp со GetBlock како ваш провајдер за поддршка. Дипломирајте договори нормално со Truffle, но наредете го да се дипломира на мрежата што сте ја креирале за GetBlock. Имплементација на договори. truffle migrate --network sepolia Truffle ќе ги компилира вашите договори (ако тие не се веќе компилирани) и потоа ќе го користи HDWalletProvider за емитување на трансакциите за имплементација на GetBlock RPC. Треба да бидете во можност да го видите излезот во конзолата на трансакции испратени, потврди добиени, итн Процесот е ист како што беше со Infura/Alchemy – единствената разлика зад сцените е URL-то на јазолот. При распоредувањето на Ethereum mainnet, бидете сигурни дека имате разумен износ на ETH на располагање во вашата сметка за распоредување и обрнете внимание на цените на гасот. Направете го вашиот Искуството треба да биде исто како и на Infura: GetBlock едноставно ги пренесува вашите потпишани трансакции на мрежата Ethereum. truffle migrate --network mainnet mainnet If you have Truffle tests or scripts that invoke your contracts, you can test them on the network offered by GetBlock as well: Тестирање на трчање. truffle test --network sepolia Ова ќе го изврши вашиот тест пакет на GetBlock крајната точка. Тестирање трансакции (на пример, повик на договор функција на вашите распоредени договори) ќе бидат пренесени преку GetBlock јазол. Со неколку исклучоци, RPC префрлување на крајната точка не треба да влијае на однесувањето на Ethereum. Ако вашите миграции или тестови се одвиваат добро на Infura/Alchemy, тие треба да се одвиваат добро на GetBlock. Сите подразбирани JSON-RPC повици се поддржани за GetBlock (на пример, распоредување договори, читање состојба, испраќање трансакции, побарувања за настани) – тоа е целосна услуга на јазол. Ако JSON-RPC повик некогаш е отстранет од било која причина, документите на GetBlock обично ќе го покажат тоа, но едноставни повици како распоредување ( Повик за повик ( ), примање на примања, итн, сите се достапни. Очекувано однесување eth_sendRawTransaction eth_call Честитки! Вашиот DApp backend е сега на GetBlock! Вашата миграција е завршена. Вашите web3 повици ја користат инфраструктурата на GetBlock и вашите паметни договори се во живо. Ракување со API клучеви, ограничувања на стапките и следење на GetBlock Промената на провајдерите не е само прашање на ажурирање на URL адресите – исто така, неопходно е да се знаат дали постојат разлики во начинот на кој се следи употребата, како и следење на перформансите на вашиот DApp на новиот провајдер. Infura користеше проект ИД во URL-то; Alchemy користеше API клучеви прилично почесто во формата вградена во URL-то, како и (или прилагоден домен). Пристапот на GetBlock е исто така ист – ќе имате токен за пристап (API клуч) и ќе го додадете ова на URL-то на RPC. На функционално ниво, вашата апликација не мора да го направи вашиот клуч да направи нешто необично освен да го вклучи во URL-то на крајната точка. Поставување на API Key. Постојат ограничувања по провајдер на слободниот ниво: Ограничувања на стапката и пропуст. 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. Друг неверојатен аспект на GetBlock е таблата со целосна анализа. На главната страница на таблата, ќе добиете преглед на тековниот план, преостанатите ЦУ за денот, тековниот праг на RPS и кумулативните барања направени во последните 24 часа. Ова веднаш ви овозможува да знаете дали го достигнувате вашиот дневен лимит. Покрај тоа, во таблата "Статистика" или "Аналитика" на вашите крајни точки, GetBlock обезбедува графикони и падови на: Следење на употребата. Број на барања во текот на времето Статуси на одговорот (за да можете да видите дали имало грешки) Дистрибуција на методот за повик (кои RPC методи ги повикувате најмногу) Сите отфрлања на лимитот на стапката (ако го достигнете RPS лимитот) На пример, ако погрешно сте напишале скрипт кој ја поплавува мрежата со повици, таблата ќе покаже зголемување на обемот на барањето или дури и некои 429 одговори со ограничување на стапката. Ова е местото каде што би сакале да ги оптимизирате позадинските повици на DApp. Infura и Alchemy исто така нудат табла, но предноста со GetBlock е дека можете да ја следите целата ваша употреба на повеќе синџири од едно место. Во случај бесплатниот план не е доволен (можеби вашата апликација се шири), GetBlock има лесни надградби – Стартер план (~50M CUs / месец, ~1.6M / ден, 25 RPS) и Про план (600M / месец, 200 RPS). Можете да надградите директно од таблата. Но, за време на развојот, најверојатно нема да ви треба ова. Исто така, имајте на ум дека неискористените дневни CUs во бесплатниот план не се пренесуваат (се ресетираат секојдневно), па затоа не вреди да заштедите повици – само користете што ви треба. Ограничување на постапката. GetBlock бесплатен план вклучува поддршка за до 2 пристапни токени (ендпоинти). Тоа значи дека можете да креирате еден за mainnet, еден за testnet, т.е. да ги задржите вашите проекти или средини изолирани. Секоја крајна точка ќе има свој API клуч и следење на употребата. Ова е споредливо со пристапот на Infura "Project ID per project". Многу крајни точки. Најдобри практики за беспрекорна миграција Еве што ви препорачувам: 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. Заклучок Со следење на ова упатство, сега сте го мигрирале вашиот Ethereum DApp backend од Infura/Alchemy на GetBlock. Вашата конфигурација на Truffle сега укажува на RPC на GetBlock, и можете да распоредите договори и да направите веб3.js повици преку GetBlock на ист начин како што би можеле порано.