¿Cómo desplegar y verificar un contrato inteligente en una red de prueba?
El despliegue y verificación de un contrato inteligente son pasos fundamentales para garantizar su funcionamiento y seguridad. Vamos a guiarte a través de este proceso usando Etherscan y Hardhat, herramientas esenciales para los desarrolladores en el ecosistema Ethereum.
¿Cómo ajustar el script de deploy?
Para iniciar, deberás hacer pequeños ajustes en tu script de despliegue. Si tu contrato tiene un parámetro como max supply que ya definiste, asegúrate de configurarlo correctamente en el script. Para un ejemplo como PlatziPons, si decidiste un máximo de 10,000, asegúrate de incluir esta cantidad en el script. Una vez hecho esto, ejecuta el script en la red Rinkabyte con el siguiente comando:
npx hardhat run scripts --network rinkeby
Asegúrate de estar conectado a la red adecuada y monitorea el proceso, ya que puede demorar un poco hasta que el contrato sea procesado por el bloque.
¿Cómo utilizar Etherscan para verificar el contrato?
Una vez que el contrato está desplegado, el siguiente paso es verificarlo usando Etherscan. Esto permite crear una interfaz de usuario que facilita su interacción sin desarrollar una interfaz gráfica.
Dirígete a la sección "Verificar y Publicar" en Etherscan.
Selecciona la versión del compilador que usaste, por ejemplo, 0.8.4.
Añade una licencia, como MIT, para facilitar el proceso.
Copia el código del contrato aplanado en Solidity y pégalo en Etherscan.
Usa el siguiente comando en Hardhat para generar un archivo con el contrato aplanado:
npx hardhat flatten > flattened.sol
Antes de subir el archivo, elimina las múltiples etiquetas de licencia para evitar errores. Usa herramientas de reemplazo para facilitar este paso.
¿Cómo interactuar con el contrato verificado?
Una vez verificado el contrato, puedes inspeccionar y manipularlo. Etherscan proporciona dos interfaces:
ReadContract: para consultar datos como el nombre del token.
WriteContract: permite realizar acciones que modifican el estado del contrato.
Conectando Web3 con Metamask
Para escribir en el contrato, como hacer una transacción, necesitas conectar Web3, generalmente mediante Metamask. Autoriza la conexión y ejecuta acciones como mintear (mint) nuevos tokens. Se te pedirá confirmación, y tras un tiempo, la transacción se completará.
Mantener la transparencia en tus contratos y permitir que otros inspecionen su código aumenta la confianza en tus desarrollos. Te invitamos a que sigas explorando más sobre cómo publicar y visualizar tokens en el Marketplace para sacar el máximo provecho de tus proyectos blockchain. ¡Atrévete a seguir aprendiendo y elevando tus habilidades al siguiente nivel!
Yo tambien tenia ese error.
Mira que el profesor, desde la interfaz de etherscan utiliza la version 0.8.4. Usa esa misma.
Yo utilizaba 0.8 y me daba ese error
La versión del compilador que seleccionas en la interfaz de etherscan debe ser la misma a la del archivo hardhat.config.js
Todo bien. Lo único que tuve que hacer fue remover la licencia del archivo Flattened porque el verificador de etherscan me dio el mensaje de multiples licencias
Me salió ese error y era que en dos de los contratos la licencia estaba separada por un espacio de los slash "// SPDX" y en otro contrato estaba pegado "//SPDX" por eso lo toma como que hay diferentes licencias. Los dejé todos iguales y funcionó
Estuve trabajando con la testnet de Ropsten y a la hora de hacer el deploy me aparecia "out of gas" (no me alcanzaba el gas, y tenia 5 ETH en la cuenta) intente en el hardhat.config.js sumar
"gasLimit" y "Gasprice" pero tampoco lo pude hacer funcionar...
Me pase a Rinkeby y de los 3 ETH gasto solo 0.20 ETH... Alguien que sepa aclarar porque con la misma configuracion en ropsten no funciono? 🤔
Tengo entendido que el gas depende de lo saturada que este la red al momento de despliegue, probablemente estabas en una hora muy saturada
Me sucedio igual. Intentando desde la testnet de Ropsten me daba error out of gas aun y cuando tenia varios ethers en la wallet. Cambie a Rinkeby cargando la wallet y funciono de maravilla el deploy 👌
No pude hacer el deploy directamente desde hardhat, cada vez que realizaba la operación me salia un mensaje de
Contract creation code storage out of gas
Intente modificar el gas limit y aún así no me dejó.
Lo que hice fue que subí todo el ejercicio a remix y hice deploy con metamask, funcionó bien. Aún así, me gustaría entender porque no lo pude deployar cómo en la clase
contract creation code storage out of gas.
Me paso exactamente lo mismo. Me tira out of gas
Si, tengo el mismo error
Compañeros ¿ya revisaron en su "hardhat.config.js" si el valor de url esta apuntando a Rinkeby o Ropsten? Ejemplo: url: `https://rinkeby.infura.io/v3/
; )
dejo mi wallet de rinkeby si alguno le sobra algo gracias 0xc1f834dc9E2A955CEB2cd8f568D3418d471b2404
Te envié algo, te dejo link de una faucet
muchas gracias
npx hardhat flatten >Flattened.sol
En Ropsten no es posible hacer el deploy. En Rinkeby sí.
IMPORTANTE:
Hagan el deploy en Goerli o Sepolia, las redes Rinkeby y Ropsten fueron deprecadas.
Ojalá ayude a alguien! :)
Saludos.
TENGO UN ERROR
Cuando intento desplegar el contrato a la red de Ropsten (porque la testnet de Rinkeby se me hizo complicado conseguir ETH de prueba) me saca este error, dice que utilice demasiado gas, pero se que tengo 0.5 ETH en la address 0x1FFF66713e2ce0D4c51C27d4E9424b9E58a55426
Este es el error:
$ npx hardhat run scripts/deploy.js --network ropsten
Deploying contract with the account: 0x1FFF66713e2ce0D4c51C27d4E9424b9E58a55426
ProviderError: contract creation code storage out of gas
at HttpProvider.request (C:\Users\Luis\Desktop\platzi\platzi-punks\node_modules\hardhat\src\internal\core\providers\http.ts:49:19) at LocalAccountsProvider.request (C:\Users\Luis\Desktop\platzi\platzi-punks\node_modules\hardhat\src\internal\core\providers\accounts.ts:187:34) at processTicksAndRejections (node:internal/process/task_queues:96:5) at EthersProviderWrapper.send (C:\Users\Luis\Desktop\platzi\platzi-punks\node_modules\@nomiclabs\hardhat-ethers\src\internal\ethers-provider-wrapper.ts:13:20)
Mi script de deploy:
constdeploy=async()=>{// El deployer nos permite desplegar el CI a la red que tengamos configuradaconst[deployer]=await ethers.getSigners();// Llenado automaticamente con la informacion de nuestra configuracionconsole.log("Deploying contract with the account: ", deployer.address);//Toma la informacion del cache de configuracion y nos trae la infomacion que necesita para desplega los metodosconstLuisPunks=await ethers.getContractFactory("LuisPunks");const deployed =awaitLuisPunks.deploy(10000);console.log("LuisPunks is deployed at: ", deployed.address)};// Una vez que se complete cierre el procesodeploy().then(()=> process.exit(0)).catch((error)=>{console.log(error); process.exit(1);});
Me compila bien y pasa los tests.
Se que tengo ETH en la address y he cambiado las variables de entorno:
Hola!,
este parece ser realmente un error de gas insuficiente . En remix creo que puedes setear el limite de gas a utilizar. En Rinkeby no me dió ningún problema, con literalmente la misma config , te dejo una faucet para conseguir eth de prueba faucet, espero lo puedas resolver. Saludos.
Buen día alguien pudo probar en Goerli el deploy, no lo he podido lograr en esta test net
Hay forma de acceder al contrato usando remix ? para poder interactuar con el contrato de igual forma que en la UI de etherscan
Cuánto es necesario tener cómo minimo en la billetera? yo de momento tengo el error de "Fondos insuficientes" y cuánto cuesta la transacción?
como se puede solucionar este error, ? error ProviderError: contract creation code storage out of gas
Hola
Parece que debes de definir bien la cantidad de gas necesaria para la transacción y que tengas fondos suficientes para realizar la operación.
Saludos
estoy igual rinkeby no fondoar ya que esta off line y por ropsten sale ProviderError: contract creation code storage out of gas
Alguien que pueda regalarme unos ETH de prueba en rinkeby? En ropsten y kovan dicen "out of gas", ademas que la red de rinkeby esta offline por los momentos.
Aqui mi address: 0x4cB067088989c5014Ee02BDBDE61699dF9a59E90
Te mande algo, dejo link de una faucet
Cada vez que hago deploy del deploy.js me sale este error: error: ProviderError: Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 14504062505801625 and got: 4000006551192660.
Al principio tenia 0 eth en la wallet, cogi unas monedas de prueba para hacer test y cada vez que metia mas eth de prueba el required aumentaba. A que puede deberse esto?
tengo este error alguien me podria ayudar
Error: missing argument: in Contract constructor (count=1, expectedCount=2, code=MISSING_ARGUMENT, version=contracts/5.5.0)...
reason: 'too many arguments: in Contract constructor',
code: 'UNEXPECTED_ARGUMENT',
count: 1,
expectedCount: 0
pudiste solucionarlo?
En hardhat la cantidad de argumentos en el constructor del contrato necesarios tiene que coincidir con la cantidad de argumentos en el método .deploy() del script de implementación.
Hola, buenas!
A mí el contrato se me deployó con el codigo fuente ya visible en etherscan. Puede ser por la licencia, version del compilador, o por algun update?
Por que Ernesto tuvo que submittear un audir y codigo fuente manualmente?
Hola, tengo un problema al hacer el deployment en Mumbai es cómo si no leyera la metadata pues al verlo en OpenSea no salen ni la descripción ni trae la imagen. Es raro porque el único cambio que hago está en el flag del network, a alguien le ha pasado?
tengo este error pero en la cuenta tengo sufciente eth, alguien me puede ayudar?
Error: insufficient funds for intrinsic transaction cost [ See: https://links.ethers.org/v5-errors-INSUFFICIENT_FUNDS ] (error={"name":"ProviderError","_stack":"ProviderError: HttpProviderError\n at HttpProvider.request (C:\Users\gianf\Desktop\platzi-punk\node_modules\hardhat\src\internal\core\providers\http.ts:78:19)\n at LocalAccountsProvider.request (C:\Users\gianf\Desktop\platzi-punk\node_modules\hardhat\src\internal\core\providers\accounts.ts:181:36)\n at processTicksAndRejections (node:internal/process/task_queues:96:5)\n at EthersProviderWrapper.send (C:\Users\gianf\Desktop\platzi-punk\node_modules\@nomiclabs\hardhat-ethers\src\internal\ethers-provider-wrapper.ts:13:20)","code":-32000,"_isProviderError":true}, method="sendTransaction", transaction=undefined, code=INSUFFICIENT_FUNDS, version=providers/5.7.2)
at Logger.makeError (C:\Users\gianf\Desktop\platzi-punk\node_modules@ethersproject\logger\src.ts\index.ts:269:28)
at Logger.throwError (C:\Users\gianf\Desktop\platzi-punk\node_modules@ethersproject\logger\src.ts\index.ts:281:20)
at checkError (C:\Users\gianf\Desktop\platzi-punk\node_modules@ethersproject\providers\src.ts\json-rpc-provider.ts:98:16)
at C:\Users\gianf\Desktop\platzi-punk\node_modules@ethersproject\providers\src.ts\json-rpc-provider.ts:265:24
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
reason: 'insufficient funds for intrinsic transaction cost',
code: 'INSUFFICIENT_FUNDS',
error: ProviderError: HttpProviderError
at HttpProvider.request (C:\Users\gianf\Desktop\platzi-punk\node_modules\hardhat\src\internal\core\providers\http.ts:78:19)
at LocalAccountsProvider.request (C:\Users\gianf\Desktop\platzi-punk\node_modules\hardhat\src\internal\core\providers\accounts.ts:181:36)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at EthersProviderWrapper.send (C:\Users\gianf\Desktop\platzi-punk\node_modules@nomiclabs\hardhat-ethers\src\internal\ethers-provider-wrapper.ts:13:20),
method: 'sendTransaction',
transaction: undefined
}