Manejo seguro de llaves privadas en proyectos blockchain con .env
Resumen
¿Por qué son importantes las llaves privadas en blockchain?
La importancia de las llaves privadas en el entorno blockchain radica en su papel determinante para la seguridad y autenticación de transacciones y contratos inteligentes. En la web 3.0, tu identidad está definida por tu firma digital y se genera a través de tu llave privada. Usualmente, cuando se realiza un despliegue de contratos inteligentes o se efectúan transferencias de valor, se necesita firmar una transacción mediante un proceso criptográfico que valida la autenticidad del remitente.
Función de las llaves privadas:
Validan la autenticidad de las transacciones.
Permiten firmar transacciones que después pueden enviarse a la blockchain.
El problema de compartir una clave privada es que cualquiera que la posea puede firmar transacciones en tu nombre. Este potencial riesgo de seguridad hace esencial protegerla en todo momento.
¿Cómo manejar de manera segura las llaves privadas?
Proteger las llaves privadas y otros datos sensibles dentro de un proyecto es crucial para evitar hackeos o robos. Una forma efectiva de hacerlo es mediante el uso de archivos .env, que almacenan información sensible localmente sin ser incluidos en repositorios públicos.
Implementación con .env
Para ocultar la información sensible en tu código, puedes seguir los siguientes pasos utilizando la librería .env:
Instalación de la librería .env:
yarnadd dotenv --dev
Esta herramienta te permite leer variables del entorno e insertarlas en tu código JavaScript.
Creación de archivo .env:
Crea un archivo .env para almacenar las llaves privadas y otros datos confidenciales, como el Infura Project ID.
Para integrar las variables obtenidas del archivo .env en tu código de manera segura, puedes utilizar la interpolación de strings en JavaScript para sustituir directamente los valores privados en las configuraciones de conexión.
¿Qué otras alternativas existen para manejar llaves privadas?
Aunque el uso de .env es una estándar popular, no es la única forma de proteger la información sensible. Existen otras técnicas y herramientas que puedes explorar:
Vaults de secretos: Servicios de seguridad que almacenan y gestionan información sensible de forma centralizada.
Hardware Wallets: Dispositivos físicos que almacenan de forma segura las claves privadas fuera de línea, brindando una capa adicional de protección.
Proteger adecuadamente las llaves privadas y otros datos confidenciales es un paso vital en el desarrollo seguro de contratos inteligentes en blockchain. ¡Continúa explorando para encontrar las mejores prácticas y alternativas que se adapten a tus necesidades!
Los archivos .env NO deben versionarse en GIT. Mientras que si decidimos crear un archivo .env.example con un ejemplo de las variables de entorno que nuestro proyecto necesita. Es muy buen práctica hacer esto en cualquier projecto NodeJS. Los desarrolladores futuros lo agradecerán.
me da este error :
❯ npx hardhat run scripts/sample-script.js
Error HH8: There's one or more errors in your config file:
Invalid account: #0 for network: rinkeby - Expected string, received undefined
Me sale este error
TypeError: Cannot read property 'INFURA_PROJECT_ID' of undefined
at Object.<anonymous> (/Users/coffeebeans/Documents/proyectos/platzipunks/hardhat.config.js:4:34)
Este es mi codigo
require("@nomiclabs/hardhat-waffle");
require('dotenv').config();
ese process.env.in no existe , solo es process.env
Espero te ayude !
Me di cuenta del tipo en el id de proyecto y el .env no estaba en la raiz
Para los que recién estén haciendo el curso, en el hardhat.config.js, a la hora de almacenar la private key y la url, hay que hacerlo así: const privateKey = process.env.DEPLOYER_SIGNER_PRIVATE_KEY y lo mismo para la url, solo con el process.DEPLOYER_SIGNER_PRIVATE_KEY va a arrojar un error HH8.
un saludo.
no tienes instalado esa dependencia en clases anteriores se hizo un:
yarn add @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers -D
o sino con NPM:
npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers
Entonces eso de git ignore no sirve para esto
despues de mil pruebas no soy capaz de que la url recoja correctamente la direccion de rinkeby así que la he hardcodeado temporalmente mientras continuo el curso
rinkeby: {
url: 'https://rinkeby.infura.io/v3/69400000000000000000000f9f2',
// @kicoes habría que cambiar aquí la url concatenando como abajo pero no me ha funcionado
//url: https://rinkeby.infura.io/v3/${projectId},
accounts: [privateKey],
Ni copiando tal cual los archivos de la clase y repasando todos los typos. cuando sepa debugar miraré a ver donde me estoy quedando atascado
que significa el "agregar como herramienta de desarrollo" cuando utilizas yarn add xxx -D? en términos prácticos que significa?
De donde sale la variable process?
Te recomiendo ver el curso de fundamentos de node.js para aprender sobre ellas.
Pero en resumen son variables que están en el proceso que corremos dentro de nuestro programa.
Si queremos automatizar el deploy dentro de GitHub, pero al commitear no se comitea el .env, como sabe el código dentro de GitHub los valores de esas variables? No serviría en ese caso
Excelente profesor, el mas claro que he escuchado en cuanto a dapps