Los desarrolladores de Ethereum suelen confiar en Infura o Alchemy para el fácil acceso a los nodos de Ethereum. GetBlock es una alternativa atractiva que proporciona soporte multi-chain, un nivel gratuito generoso y una excelente estabilidad. En este tutorial, descubrirás cómo migrar un backend Truffle + web3.js de Infura/Alchemy a GetBlock. Inscríbete para GetBlock, Para obtener un punto final de RPC, reiniciar el truco, Prueba de Conectividad Web3. ejecutar los despliegos, y Comparar los límites de interés y controlar las diferencias. Necesitas un proyecto Ethereum DApp existente con Truffle, y Node.js instalado.Supongo que has estado utilizando Infura o Alchemy (con un ID del proyecto o una clave de API) y tienes una clave mnemónica o privada disponible para su implementación. Prerequisites: ¿Por qué cambiar de Infura o Alchemy a 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. Por último, el dashboard de GetBlock tiene algunas grandes capacidades de monitoreo y análisis, a las que vamos a llegar pronto. Paso 1: Regístrate para una cuenta GetBlock El primer paso es registrarse para una cuenta GetBlock gratuita: 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. Choose your preferred method and proceed with the instructions (e.g., verify your email if you chose email sign-up). You ought to have your GetBlock account in a minute or two. Once you've logged in, you'll be taken to the GetBlock Dashboard. Nota: El panel de control de GetBlock es donde usted va a manejar sus puntos finales de la API, monitorear el uso y ajustar la configuración. Sigue adelante y mire alrededor una vez que se haya registrado. Verá su ID de usuario en la configuración de la cuenta (útil si alguna vez necesita soporte), pero lo más importante es que configurará los puntos finales del proyecto a continuación. Paso 2: Obtenga su punto final de GetBlock RPC (clave de API y URL) La cuenta creada, ahora tendrá que crear un punto final RPC para la red Ethereum (o cualquier red que necesite). Esto le proporcionará una URL HTTP (y la URL WebSocket correspondiente si es necesario) que utilizará en lugar de Infura/Alchemy. Crear un nuevo punto final: En el GetBlock Dashboard, encuentra el botón "Crear punto final" o "Añadir nuevo punto 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). Opcionalmente, proporcione un nombre / etiqueta para este punto final (por ejemplo, "MyDApp Ethereum Mainnet") para que sea más fácil para usted seguir en caso de que configure más de un punto final. Haga clic en Crear o Confirmar. El dashboard generará los detalles de su punto final. Después de la creación, debe ver una URL RPC para su punto final. Copia esta URL; lo pasarás a tu configuración de Truffle. GetBlock puede mostrarte una URL de WebSocket (comenzando con wss://) para el mismo punto final, y cuando tu aplicación requiere WebSockets (para suscripciones o eventos en vivo), puedes utilizar eso. Almacenar la clave de la API de GetBlock de forma segura. No la comprometa en reposo público o código del lado del cliente. La mejor práctica es almacenarla como una variable de entorno o configurar el archivo fuera del control de fuente. Es importante. Ahora tienes una URL de punto final de GetBlock y una clave de API, listas para usar. Paso 3: Cambiar la configuración de Truffle para usar GetBlock tuya (o el en versiones anteriores) es donde se configuran las configuraciones de red. Si se utiliza Infura o Alchemy, su configuración podría haber parecido algo así para una red: 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 ... }; Nuestro objetivo es reemplazar la URL de Infura por la URL de GetBlock (y de la misma manera para cualquier URL de Alchemy).La buena noticia es que la RPC de GetBlock funciona de la misma manera: usted proporciona una URL de punto final y su proveedor de cartera. Si su proyecto Truffle ya no está utilizando (es probable que, si se ha implementado a través de Infura/Alchemy), instale con Esta biblioteca permite a Truffle firmar transacciones con sus claves y enviarlas a través del nodo remoto. Instalación de HDWalletProvider. @truffle/hdwallet-provider npm install @truffle/hdwallet-provider Modificación Añade su clave de API GetBlock a las variables de su entorno (por ejemplo, en una El archivo establecido También asegúrese de que su clave mnemónica o privada está en un env var (por ejemplo, o Por ejemplo, para usar Ethereum Sepolia testnet a través de 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 ... }; El cambio clave es la URL: usamos Con nuestro parámetro de la consulta. Ahora, cada vez que ejecutes Truffle con el network, it will route through GetBlock instead of Infura. If you want to configure Mainnet, you can add a similar section: 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 } Asegúrese de reemplazarlo por el correcto para su red (la Ethereum mainnet es 1, Sepolia es 11155111, etc.). network_id El es lo que se utiliza aquí, pero GetBlock también soporta la incorporación de la clave en el camino (como se puede ver en algunos ejemplos). Ambos son equivalentes. Es más típico usar el parámetro de la consulta y es fácil de manejar con plantillas de cuerdas. La nota. https://eth.getblock.io/<network>/?api_key=.. Step 4: Deploy and Test web3.js with GetBlock Antes de enviar sus contratos, es una buena idea comprobar que todo está configurado correctamente. 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 en la parte superior y definir GETBLOCK_API_KEY en su .env). Si imprime un número de bloque, se ha conectado con éxito a GetBlock a través de web3.js. require('dotenv').config(); node test-getblock.js El test anterior utiliza una llamada de lectura simple ( Puede intentar más, como recuperar un bloque o un saldo de cuenta, para confirmar aún más que las cosas están funcionando. eth_getBlockNumber const latestBlock = await web3.eth.getBlock('latest'); console.log("Latest block info:", latestBlock); Si algo está mal (por ejemplo, se captura un error de autenticación), compruebe que su clave de API en la URL es correcta y que el límite libre de su cuenta no ha sido superado (extremadamente poco probable con sólo unas pocas solicitudes). Si previamente ha utilizado el proveedor web3 de Alchemy o Infura en código (es decir, Alchemy ofrece un cliente Web3 o SDK con métodos personalizados), cambiar a GetBlock significará que todavía estará utilizando los métodos fundamentales de Web3. por el tipo. Paso 5: Execute migraciones de trufa y pruebas en GetBlock Y por último, la verdadera prueba: implementar sus contratos y alojar su DApp con GetBlock como proveedor de backend. Despliega contratos normalmente con Truffle, pero instruyéndolo a desplegar en la red que creaste para GetBlock. Despliegue de contratos. truffle migrate --network sepolia Truffle compilará sus contratos (si no están ya compilados) y luego utilizará el HDWalletProvider para transmitir las transacciones de implementación en el GetBlock RPC. Debería poder ver la salida en la consola de transacciones enviadas, confirmaciones recibidas, etc. El proceso es el mismo que fue con Infura/Alchemy – la única diferencia detrás de las escenas es la URL del nodo. Al desplegar a Ethereum mainnet, asegúrese de tener una cantidad razonable de ETH disponible en su cuenta de desplegador y preste atención a los precios del gas. (Haz tu La experiencia debe ser la misma que la de Infura: GetBlock está simplemente reenviando sus transacciones firmadas a la red Ethereum. truffle migrate --network mainnet mainnet Si tiene pruebas de Truffle o scripts que invocan sus contratos, también puede probarlos en la red ofrecida por GetBlock: Las pruebas de correr. truffle test --network sepolia Esto ejecutará su suite de pruebas en el punto final de GetBlock. Las transacciones de prueba (por ejemplo, una llamada de función de contrato en sus contratos implementados) se transmitirán a través del nodo de GetBlock. Con unas pocas excepciones, el cambio de punto final de RPC no debe afectar al comportamiento de Ethereum. Si sus migraciones o pruebas funcionaron bien en Infura/Alchemy, deberían funcionar bien en GetBlock. Todas las llamadas de JSON-RPC por defecto son compatibles con GetBlock (por ejemplo, implementación de contratos, lectura de estado, envío de transacciones, consultas de eventos) - es un servicio de nodo completo. Si una llamada de JSON-RPC se elimina por cualquier razón, los documentos de GetBlock normalmente lo indicarán, pero las llamadas simples como implementación ( Los llamados ( ), recibiendo recibos, etc., están todos disponibles. El comportamiento esperado. eth_sendRawTransaction eth_call ¡Felicitaciones! El backend de su DApp ya está en GetBlock! Su migración se ha completado. Sus llamadas web3 están utilizando la infraestructura de GetBlock y sus contratos inteligentes están en vivo. Gestión de claves de API, límites de tarifas y monitoreo en GetBlock Cambiar de proveedor no es solo una cuestión de actualizar URLs – también es necesario saber si hay diferencias en cómo se rastrea el uso, así como monitorear el rendimiento de su DApp en el nuevo proveedor. Infura usó un ID de proyecto en la URL; Alchemy usó claves de API bastante más a menudo en la forma embebida en la URL también (o un dominio personalizado). El enfoque de GetBlock también es el mismo - tendrás un token de acceso (clave de API) y lo agregarás a la URL de RPC. En un nivel funcional, tu aplicación no tiene que hacer que tu clave haga nada inusual excepto incluirla en la URL de punto final. API Key Instalación. Hay límites por proveedor en el nivel libre: Limitaciones de tarifas y rendimiento. 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. Otro aspecto increíble de GetBlock es su dashboard con análisis completos. En la página principal de su dashboard, usted recibe una visión general de su plan actual, CUs restantes para el día, su umbral RPS actual, y las solicitudes acumulativas tomadas en las últimas 24 horas. Esto le permite saber inmediatamente si está alcanzando su límite diario. Además, en la pestaña "Estadísticas" o "Analytics" de sus puntos finales, GetBlock proporciona gráficos y rebajas de: Monitorización del uso. Número de solicitudes en el tiempo Estado de respuesta (para que pueda ver si hubo errores) Distribución de llamadas de método (cuáles son los métodos RPC que más se están llamando) Cualquier rechazo del límite de tasa (si alcanza el límite de RPS) El seguimiento de estas métricas es altamente recomendable, especialmente a medida que se transita. Por ejemplo, si escribe un script por error que inunda la red con llamadas, el panel mostrará un aumento en el volumen de solicitudes o incluso unas 429 respuestas de límite de tasa. Este es el lugar donde desea optimizar las llamadas de backend de su DApp. Infura y Alchemy también ofrecen dashboards, pero la ventaja con GetBlock es que puede rastrear todo su uso de múltiples cadenas desde un solo lugar. En caso de que el plan gratuito no sea suficiente (tal vez su aplicación se está expandiendo), GetBlock tiene actualizaciones fáciles – Plan Starter (~50M CUs / mes, ~1.6M / día, 25 RPS) y Plan Pro (600M / mes, 200 RPS). Puede actualizar directamente desde el dashboard. Pero durante el desarrollo, probablemente no lo necesite. También tenga en cuenta que los CUs diarios no utilizados en el plan gratuito no se llevan a cabo (se resetan diariamente), por lo que no vale la pena ahorrar llamadas – solo use lo que necesita. Límites de acción. El plan gratuito de GetBlock incluye soporte para hasta 2 tokens de acceso (endpoints). Esto significa que puede crear uno para mainnet, uno para testnet, es decir, mantener aislados sus proyectos o entornos. Cada endpoints tendrá su propia clave de API y seguimiento del uso. Esto es comparable al enfoque de "Proyecto ID por proyecto" de Infura. Es una buena práctica tener endpoints separados para desarrolladores versus producción para que pueda rastrear el uso de forma independiente. Múltiples puntos finales. Mejores prácticas para la migración sin problemas Aquí está lo que te recomiendo: 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. Conclusión Al seguir este tutorial, ahora has migrado tu backend de Ethereum DApp de Infura/Alchemy a GetBlock. Tu configuración de Truffle ahora apunta a la RPC de GetBlock, y puedes desplegar contratos y hacer llamadas web3.js a través de GetBlock de la misma manera que antes.