Les développeurs d'Ethereum comptent généralement sur Infura ou Alchemy pour un accès facile aux nœuds d'Ethereum. GetBlock est une alternative attrayante qui fournit un support multi-chaîne, un niveau gratuit généreux et une excellente stabilité. Dans ce tutoriel, vous découvrirez comment migrer un backend Truffle + web3.js d'Infura/Alchemy à GetBlock. Je couvrirai rapidement pourquoi vous devriez changer de fournisseur et détailler ensuite chaque étape: S’inscrire pour GetBlock, Pour obtenir un endpoint RPC, Récupération de Truffle, Tester la connectivité Web3, des déploiements, et Comparaison des taux et surveillance des différences. Vous avez besoin d'un projet Ethereum DApp existant avec Truffle, et Node.js installé. Je suppose que vous avez utilisé Infura ou Alchemy (avec un identifiant de projet ou une clé API) et que vous avez une clé mnemonique ou privée disponible pour le déploiement. Prerequisites: Pourquoi passer d'Infura ou 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. Enfin, le tableau de bord de GetBlock a quelques grandes capacités de surveillance et d'analyse, que nous allons aborder bientôt. Étape 1 : Inscrivez-vous pour un compte GetBlock La première étape consiste à vous inscrire pour un compte GetBlock gratuit : 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. Choisissez votre méthode préférée et suivez les instructions (par exemple, vérifiez votre e-mail si vous avez choisi l'enregistrement par e-mail). Vous devriez avoir votre compte GetBlock dans une minute ou deux. Remarque. Le tableau de bord GetBlock est l'endroit où vous allez gérer vos endpoints API, surveiller l'utilisation et ajuster les paramètres. Allez-y et regardez autour de vous une fois que vous vous êtes connecté. Vous verrez votre identifiant d'utilisateur dans les paramètres du compte (utile si vous avez besoin de support), mais plus important encore, vous configurerez les endpoints du projet la prochaine fois. Étape 2: Obtenez votre point final GetBlock RPC (clé API et URL) Un compte créé, vous aurez maintenant besoin de créer un endpoint RPC pour le réseau Ethereum (ou quel que soit le réseau dont vous avez besoin). Cela vous fournira une URL HTTP (et l'URL WebSocket correspondante si nécessaire) que vous utiliserez à la place d'Infura/Alchemy. Créer un nouvel endpoint : Dans le tableau de bord GetBlock, trouvez le bouton « Créer un point final » ou « Ajouter un nouveau point final ». 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). Optionnellement, fournissez un nom / étiquette pour ce point final (par exemple, "MyDApp Ethereum Mainnet") pour faciliter votre suivi en cas de configuration de plus d'un point final. Cliquez sur Créer ou Confirmer. Le tableau de bord générera les détails de votre point final. Après la création, vous devriez voir une URL RPC pour votre point final. Copiez cette URL; vous la passerez dans votre configuration Truffle. GetBlock peut vous montrer une URL WebSocket (commençant par wss://) pour le même endpoint, et lorsque votre application nécessite WebSockets (pour les abonnements ou les événements en direct), vous pouvez l'utiliser. Stocker votre clé GetBlock API en toute sécurité. Ne le commettrez pas dans le repos public ou le code du côté client. La meilleure pratique est de le stocker en tant que variable environnementale ou de configurer le fichier en dehors du contrôle source. Important . Vous avez maintenant une URL de bouton GetBlock et une clé API prête à être utilisée. Étape 3: Changer la configuration de Truffle pour utiliser GetBlock Votre (ou de Si vous utilisez Infura ou Alchemy, votre configuration aurait pu ressembler à ceci pour un réseau: 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 ... }; Notre objectif est de remplacer l’URL Infura par l’URL GetBlock (et de la même manière pour toutes les URL Alchemy).La bonne nouvelle est que le RPC de GetBlock fonctionne de la même manière – vous fournissez une URL de bouton et votre fournisseur de portefeuille. Si votre projet Truffle n'est pas déjà utilisé (il est probable que, si vous avez déployé via Infura / Alchemy), installez-le avec Cette bibliothèque permet à Truffle de signer des transactions avec vos clés et de les envoyer via le nœud distant. Installez HDWalletProvider. @truffle/hdwallet-provider npm install @truffle/hdwallet-provider Modifier Ajoutez votre clé API GetBlock à vos variables environnementales (par exemple, dans un fichier set Assurez-vous également que votre clé mnemonique ou privée est dans un env var (par exemple, ou Par exemple, pour utiliser 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 ... }; Le changement clé est l'URL: nous avons utilisé Avec notre paramètre de requête. Maintenant, chaque fois que vous exécutez Truffle avec réseau, il va router à travers GetBlock au lieu d'Infura. Si vous voulez configurer Mainnet, vous pouvez ajouter une section similaire: 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 } Assurez-vous de le remplacer par le bon pour votre réseau (le mainnet Ethereum est 1, Sepolia est 11155111, etc.). network_id Le est ce que l'utilisation ici, mais GetBlock prend également en charge l'intégration de la clé dans le chemin (comme vous pouvez le voir dans certains exemples). Les deux sont équivalents. Il est plus typique d'utiliser le paramètre de la requête et il est facile de gérer les modèles de chaînes. La note. https://eth.getblock.io/<network>/?api_key=.. Étape 4: Déployer et tester web3.js avec GetBlock Avant d'envoyer vos contrats, il est une bonne idée de vérifier que tout est correctement configuré. 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)); N'oubliez pas de charger vos variables d'environnement (vous pouvez ajouter en haut et définissez GETBLOCK_API_KEY dans votre .env). Si elle imprime un numéro de bloc, vous avez réussi à vous connecter à GetBlock via web3.js. require('dotenv').config(); node test-getblock.js Le test ci-dessus utilise un simple appel de lecture ( Vous pouvez essayer plus, comme récupérer un bloc ou un solde de compte, pour confirmer davantage que les choses fonctionnent. eth_getBlockNumber const latestBlock = await web3.eth.getBlock('latest'); console.log("Latest block info:", latestBlock); Si quelque chose ne va pas (par exemple, vous faites une erreur d'authentification), vérifiez que votre clé API dans l'URL est correcte et que la limite gratuite de votre compte n'a pas été dépassée (extrêmement improbable avec seulement quelques demandes). Si vous avez déjà utilisé le fournisseur web3 d'Alchemy ou d'Infura dans le code (c'est-à-dire que Alchemy propose un client Web3 ou un SDK avec des méthodes personnalisées), le passage à GetBlock signifie que vous utiliserez toujours les méthodes fondamentales Web3. pour le type. Étape 5: Exécuter les migrations et les tests de Truffle sur GetBlock Et enfin, le véritable test – déployer vos contrats et héberger votre DApp avec GetBlock en tant que fournisseur de backend. Déployez normalement des contrats avec Truffle, mais instruisez-le à déployer sur le réseau que vous avez créé pour GetBlock. Déploiement des contrats. truffle migrate --network sepolia Truffle compilera vos contrats (si ils ne sont pas déjà compilés) et utilisera ensuite le fournisseur HDWalletProvider pour diffuser les transactions de déploiement sur le GetBlock RPC. Vous devriez être en mesure de visualiser la sortie dans la console des transactions envoyées, des confirmations reçues, etc. Le processus est le même qu'avec Infura/Alchemy - la seule différence derrière les scènes est l'URL du nœud. Lors du déploiement sur Ethereum mainnet, assurez-vous d'avoir une quantité raisonnable d'ETH disponible dans votre compte de déploiement et faites attention aux prix du gaz. Faites votre L'expérience devrait être la même que celle d'Infura: GetBlock transmet simplement vos transactions signées au réseau Ethereum. truffle migrate --network mainnet mainnet Si vous avez des tests Truffle ou des scripts qui invoquent vos contrats, vous pouvez également les tester sur le réseau offert par GetBlock : Tests de course. truffle test --network sepolia Les transactions de test (par exemple, un appel de fonction de contrat sur vos contrats déployés) seront transmises sur le nœud de GetBlock. À quelques exceptions, le changement de point de terminaison RPC n'est pas censé affecter le comportement d'Ethereum. Si vos migrations ou vos tests se sont bien déroulés sur Infura/Alchemy, ils devraient bien fonctionner sur GetBlock. Tous les appels JSON-RPC par défaut sont pris en charge pour GetBlock (par exemple, déploiement de contrats, lecture d'état, envoi de transactions, requêtes d'événements) - c'est un service de nœud complet. Si un appel JSON-RPC est jamais supprimé pour une raison quelconque, les dossiers de GetBlock indiqueront généralement cela, mais des appels simples comme le déploiement ( Les appels ( , recevoir des reçus, etc., sont tous disponibles. Le comportement attendu. eth_sendRawTransaction eth_call Félicitations! Le backend de votre DApp est maintenant sur GetBlock! Votre migration est terminée. Vos appels web3 utilisent l'infrastructure de GetBlock et vos contrats intelligents sont en direct. Gérer les clés API, les limites de taux et le suivi sur GetBlock Le changement de fournisseur n’est pas seulement une question de mise à jour des URL – il est également nécessaire de savoir s’il existe des différences dans la façon dont l’utilisation est suivie, ainsi que de surveiller la performance de votre DApp sur le nouveau fournisseur. Infura a utilisé un identifiant de projet dans l'URL; Alchemy a utilisé des clés API plus souvent dans la forme intégrée dans l'URL (ou un domaine personnalisé). L'approche de GetBlock est également la même - vous aurez un jeton d'accès (clé API) et vous l'ajouterez à l'URL RPC. À un niveau fonctionnel, votre application n'a pas à faire votre clé faire quelque chose d'inhabituel autre que de l'inclure dans l'URL du point final. De même, comme vous avez sécurisé votre Infura Project ID ou votre clé API Alchemy, sécurisez la clé de GetBlock (entreposer dans une variable environnementale, pas le code du côté client). Démarrage de la clé API. Il y a des limites par fournisseur sur le niveau gratuit: Les limites et le dépassement. 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. Un autre aspect incroyable de GetBlock est son tableau de bord avec des analyses complètes. Sur la page principale de votre tableau de bord, vous recevez un aperçu de votre plan actuel, des CU restants pour la journée, de votre seuil RPS actuel et des demandes cumulatives faites au cours des dernières 24 heures. Cela vous permet de savoir immédiatement si vous atteignez votre limite quotidienne. En outre, dans l'onglet "Statistiques" ou "Analytics" de vos endpoints, GetBlock fournit des graphiques et des écarts de: Surveillance de l’utilisation. Nombre de demandes au fil du temps Statuts de réponse (pour voir s'il y a eu des erreurs) Distribution de l'appel de méthode (quelles méthodes RPC vous appelez le plus) Tout rejet de limite de taux (si vous atteignez la limite RPS) Par exemple, si vous avez écrit par erreur un script qui inonde le réseau avec des appels, le tableau de bord montrera une augmentation du volume des demandes ou même des réponses à une limite de taux de 429. C'est là que vous voudriez optimiser les appels de back-end de votre DApp. Infura et Alchemy offrent également des tableaux de bord, mais l'avantage avec GetBlock est que vous pouvez suivre toute votre utilisation multi-chaîne depuis un seul endroit. Dans le cas où le plan gratuit n’est pas suffisant (peut-être que votre application est en expansion), GetBlock a des mises à niveau faciles – plan Starter (~50M CUs / mois, ~1.6M / jour, 25 RPS) et plan Pro (600M / mois, 200 RPS). Vous pouvez mettre à niveau directement depuis le tableau de bord. Mais pendant le développement, vous n’aurez probablement pas besoin de cela. Notez également que les CU quotidiens inutilisés dans le plan gratuit ne sont pas transférés (ils sont réinitialisés quotidiennement), donc il ne vaut pas la peine d’économiser des appels – utilisez simplement ce dont vous avez besoin. Les limites d’action. Le plan gratuit GetBlock inclut le support pour jusqu'à 2 jetons d'accès (endpoints). Cela signifie que vous pouvez en créer un pour mainnet, un pour testnet, c'est-à-dire garder vos projets ou environnements isolés. Chaque endpoint aura sa propre clé API et suivi de l'utilisation. Ceci est comparable à l'approche "Projet ID par projet" d'Infura. Plusieurs endpoints. Les meilleures pratiques pour une migration fluide Voici ce que je vous recommande : 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. Conclusion En suivant ce tutoriel, vous avez maintenant migré votre backend Ethereum DApp d'Infura/Alchemy à GetBlock. Votre configuration Truffle pointe maintenant vers le RPC de GetBlock, et vous pouvez déployer des contrats et effectuer des appels web3.js via GetBlock de la même manière que vous le pouviez auparavant. La migration n'altérera pas la fonction de votre DApp, mais elle vous positionne pour ajouter facilement des blockchains supplémentaires ou augmenter l'utilisation sans exécuter vos propres nœuds.