LinuxParty
Cómo configurar una cadena de bloques ethereum privada utilizando herramientas de código abierto y una mirada a algunos mercados e industrias donde las tecnologías de cadena de bloques pueden agregar valor.
En la Parte I, dediqué bastante tiempo a explorar las criptomonedas y el mecanismo que las hace posible: la cadena de bloques. Cubrí detalles sobre cómo funciona la cadena de bloques y por qué es tan segura y poderosa. En esta segunda parte, describo cómo instalar y configurar su propia cadena de bloques ethereum privada utilizando herramientas de código abierto. También analizo dónde esta tecnología puede aportar algún valor o ayudar a redefinir la forma en que las personas realizan transacciones en una web más abierta. Configuración de su propia red privada de blockchain
En esta sección, exploro la mecánica de una red blockchain basada en ethereum, específicamente, cómo crear una cadena de bloques ethereum privada, una red privada para alojar y compartir esta cadena de bloques, una cuenta y luego cómo hacer algunas cosas interesantes con la cadena de bloques. .
¿Qué es ethereum, de nuevo? Ethereum es una plataforma blockchain pública y de código abierto con funcionalidad de contrato inteligente (es decir, scripting). Es similar a bitcoin pero se diferencia en que se extiende más allá de las transacciones monetarias.
Los contratos inteligentes están escritos en lenguajes de programación, como Solidity (similar a C y JavaScript), Serpent (similar a Python), LLL (un lenguaje similar a Lisp) y Mutan (basado en Go). Los contratos inteligentes se compilan en el código de bytes de EVM (ver más abajo) y se implementan en la cadena de bloques de ethereum para su ejecución. Los contratos inteligentes ayudan en el intercambio de dinero, propiedad, acciones o cualquier cosa de valor, y lo hace de forma transparente y libre de conflictos evitando al intermediario tradicional.
Si recuerda de la Parte I, un diseño típico para cualquier blockchain es uno en el que todos los nodos están conectados a todos los demás nodos, creando una malla. En el mundo de ethereum, estos nodos se conocen como Ethereum Virtual Machines (EVM), y cada EVM albergará una copia de toda la cadena de bloques. Cada EVM también competirá para extraer el siguiente bloque o validar una transacción. Una vez que el nuevo bloque se agrega a la cadena de bloques, las actualizaciones se propagan a toda la red, de modo que cada nodo está sincronizado.
Para convertirse en un nodo EVM en una red ethereum, deberá descargar e instalar el software adecuado. Para lograr esto, usará Geth (Go Ethereum). Geth es la implementación oficial de Go del protocolo ethereum. Es una de estas tres implementaciones; los otros dos están escritos en C ++ y Python. Estos paquetes de software de código abierto tienen la licencia GNU Lesser General Public License (LGPL) versión 3. Los paquetes de cliente Geth independientes para todos los sistemas operativos y arquitecturas compatibles, incluido Linux, están disponibles aquí . El código fuente del paquete está alojado en GitHub .
Geth es una herramienta de interfaz de línea de comandos (CLI) que se utiliza para comunicarse con la red ethereum. Está diseñado para actuar como un enlace entre su computadora y todos los demás nodos de la red ethereum. Cuando otro nodo de la red está minando un bloque, su instalación de Geth será notificada de la actualización y luego pasará la información para actualizar su copia local de la cadena de bloques. Con la utilidad Geth, podrá extraer ether (similar a bitcoin pero la criptomoneda de la red ethereum), transferir fondos entre dos direcciones, crear contratos inteligentes y más. Descarga e instalación
En mis ejemplos aquí, estoy configurando esta cadena de bloques ethereum en la última versión LTS de Ubuntu. Tenga en cuenta que las herramientas en sí mismas no están restringidas a esta distribución o versión.
Descarga e instalación del binario desde el sitio web del proyecto
Descargue la última versión estable, extráigala y cópiela en un directorio adecuado:
$ wget https://gethstore.blob.core.windows.net/builds/ ↪geth-linux-amd64-1.7.3-4bb3c89d.tar.gz $ tar xzf geth-linux-amd64-1.7.3-4bb3c89d.tar.gz $ cd geth-linux-amd64-1.7.3-4bb3c89d/ $ sudo cp geth /usr/bin/
Construyendo a partir del código fuente
Si está compilando a partir del código fuente, debe instalar los compiladores Go y C:
$ sudo apt-get install -y build-essential golang
Cambie al directorio y haga:
$ make geth
Instalación desde un repositorio público
Si está ejecutando Ubuntu y decide instalar el paquete desde un repositorio público, ejecute los siguientes comandos:
$ sudo apt-get install software-properties-common $ sudo add-apt-repository -y ppa:ethereum/ethereum $ sudo apt-get update $ sudo apt-get install ethereum
Empezando
Aquí está la cosa, no tienes ningún éter para empezar. Con eso en mente, limitemos esta implementación a una red de cadena de bloques "privada" que se ejecutará como una versión de desarrollo o de prueba de la red principal de ethereum. Desde el punto de vista de la funcionalidad, esta red privada será idéntica a la cadena de bloques principal, con la excepción de que todas las transacciones y contratos inteligentes implementados en esta red serán accesibles solo para los nodos conectados en esta red privada. Geth ayudará en esta configuración privada o "testnet". Con la herramienta, podrá hacer todo lo que anuncia la plataforma ethereum, sin necesidad de éter real.
Recuerde, la cadena de bloques no es más que un libro de contabilidad público y digital que preserva las transacciones en su orden cronológico. Cuando se verifican y configuran nuevas transacciones en un bloque, el bloque se agrega a la cadena, que luego se distribuye a través de la red. Cada nodo de esa red actualizará su copia local de la cadena a la última copia. Pero es necesario comenzar desde algún punto: un comienzo o una génesis. Cada blockchain comienza con un bloque de génesis, es decir, un bloque "cero" o el primer bloque de la cadena. Será el único bloque sin predecesor. Para crear su cadena de bloques privada, debe crear este bloque de génesis. Para hacer esto, necesita crear un archivo de génesis personalizado y luego decirle a Geth que use ese archivo para crear su propio bloque de génesis.
Cree una ruta de directorio para alojar todos sus datos y configuraciones relacionados con ethereum y cámbielo al subdirectorio config:
$ mkdir ~/eth-evm $ cd ~/eth-evm $ mkdir config data $ cd config
Abra su editor de texto preferido y guarde el siguiente contenido en un archivo llamado Genesis.json en ese mismo directorio:
{ "config": { "chainId": 999, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "0x400", "gasLimit": "0x8000000", "alloc": {} }
Así es como se verá su archivo de génesis. Esta sencilla cadena con formato JSON describe lo siguiente:
- config - este bloque define la configuración de su cadena personalizada.
- chainId - esto identifica su Blockchain, y debido a que la red principal de ethereum tiene la suya propia, debe configurar su propio valor único para su cadena privada.
- homesteadBlock - define la versión y el protocolo de la plataforma ethereum.
- eip155Block / eip158Block- estos campos agregan soporte para cambios de protocolo no compatibles con versiones anteriores a la versión de Homestead utilizada. Para los propósitos de este ejemplo, no los aprovechará, por lo que se establecen en "0".
- difficulty- este valor controla el tiempo de generación de bloques de la cadena de bloques. Cuanto mayor sea el valor, más cálculos debe realizar un minero para descubrir un bloque válido. Debido a que este ejemplo simplemente implementa una red de prueba, mantengamos este valor bajo para reducir los tiempos de espera.
- gasLimit- el gas es el combustible de ethereum gastado durante las transacciones. Como no quiere estar limitado en sus pruebas, mantenga este valor alto.
- alloc - esta sección prefunda las cuentas, pero como extraerá su ether localmente, no necesita esta opción.
Ahora es el momento de crear una instancia del directorio de datos. Abra una ventana de terminal, y asumiendo que tiene el binario Geth instalado y que es accesible a través de su ruta de trabajo, escriba lo siguiente:
$ geth --datadir /home/petros/eth-evm/data/PrivateBlockchain ↪init /home/petros/eth-evm/config/Genesis.json WARN [02-10|15:11:41] No etherbase set and no accounts found ↪as default INFO [02-10|15:11:41] Allocated cache and file handles ↪database=/home/petros/eth-evm/data/PrivateBlockchain/ ↪geth/chaindata cache=16 handles=16 INFO [02-10|15:11:41] Writing custom genesis block INFO [02-10|15:11:41] Successfully wrote genesis state ↪database=chaindata hash=d1a12d...4c8725 INFO [02-10|15:11:41] Allocated cache and file handles ↪database=/home/petros/eth-evm/data/PrivateBlockchain/ ↪geth/lightchaindata cache=16 handles=16 INFO [02-10|15:11:41] Writing custom genesis block INFO [02-10|15:11:41] Successfully wrote genesis state ↪database=lightchaindata
El comando deberá hacer referencia a un directorio de datos de trabajo para almacenar los datos de su cadena privada. Aquí, he especificado subdirectorios eth-evm / data / PrivateBlockchain en mi directorio de inicio. También necesitará decirle a la utilidad que se inicialice usando su archivo de génesis.
Este comando llena su directorio de datos con un árbol de subdirectorios y archivos:
$ ls -R /home/petros/eth-evm/ .: config data ./config: Genesis.json ./data: PrivateBlockchain ./data/PrivateBlockchain: geth keystore ./data/PrivateBlockchain/geth: chaindata lightchaindata LOCK nodekey nodes transactions.rlp ./data/PrivateBlockchain/geth/chaindata: 000002.ldb 000003.log CURRENT LOCK LOG MANIFEST-000004 ./data/PrivateBlockchain/geth/lightchaindata: 000001.log CURRENT LOCK LOG MANIFEST-000000 ./data/PrivateBlockchain/geth/nodes: 000001.log CURRENT LOCK LOG MANIFEST-000000 ./data/PrivateBlockchain/keystore:
Ahora se crea su cadena de bloques privada. El siguiente paso consiste en iniciar la red privada que le permitirá extraer nuevos bloques y agregarlos a su cadena de bloques. Para hacer esto, escriba:
petros@ubuntu-evm1:~/eth-evm$ geth --datadir ↪/home/petros/eth-evm/data/PrivateBlockchain --networkid 9999 WARN [02-10|15:11:59] No etherbase set and no accounts found ↪as default INFO [02-10|15:11:59] Starting peer-to-peer node ↪instance=Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2 INFO [02-10|15:11:59] Allocated cache and file handles ↪database=/home/petros/eth-evm/data/PrivateBlockchain/ ↪geth/chaindata cache=128 handles=1024 WARN [02-10|15:11:59] Upgrading database to use lookup entries INFO [02-10|15:11:59] Initialised chain configuration ↪config="{ChainID: 999 Homestead: 0 DAO: <nil> DAOSupport: ↪false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: <nil> ↪Engine: unknown}" INFO [02-10|15:11:59] Disk storage enabled for ethash caches ↪dir=/home/petros/eth-evm/data/PrivateBlockchain/ ↪geth/ethash count=3 INFO [02-10|15:11:59] Disk storage enabled for ethash DAGs ↪dir=/home/petros/.ethash count=2 INFO [02-10|15:11:59] Initialising Ethereum protocol ↪versions="[63 62]" network=9999 INFO [02-10|15:11:59] Database deduplication successful ↪deduped=0 INFO [02-10|15:11:59] Loaded most recent local header ↪number=0 hash=d1a12d...4c8725 td=1024 INFO [02-10|15:11:59] Loaded most recent local full block ↪number=0 hash=d1a12d...4c8725 td=1024 INFO [02-10|15:11:59] Loaded most recent local fast block ↪number=0 hash=d1a12d...4c8725 td=1024 INFO [02-10|15:11:59] Regenerated local transaction journal ↪transactions=0 accounts=0 INFO [02-10|15:11:59] Starting P2P networking INFO [02-10|15:12:01] UDP listener up ↪self=enode://f51957cd4441f19d187f9601541d66dcbaf560 ↪770d3da1db4e71ce5ba3ebc66e60ffe73c2ff01ae683be0527b77c0f96 ↪a178e53b925968b7aea824796e36ad27@[::]:30303 INFO [02-10|15:12:01] IPC endpoint opened: /home/petros/eth-evm/ ↪data/PrivateBlockchain/geth.ipc INFO [02-10|15:12:01] RLPx listener up ↪self=enode://f51957cd4441f19d187f9601541d66dcbaf560 ↪770d3da1db4e71ce5ba3ebc66e60ffe73c2ff01ae683be0527b77c0f96 ↪a178e53b925968b7aea824796e36ad27@[::]:30303
Observe el uso del nuevo parámetro, networkid. Esto networkidayuda a garantizar la privacidad de su red. Aquí se puede utilizar cualquier número. He decidido usar 9999. Tenga en cuenta que otros pares que se unan a su red deberán usar el mismo ID.
¡Tu red privada ya está activa! Recuerde, cada vez que necesite acceder a su cadena de bloques privada, deberá usar estos dos últimos comandos con exactamente los mismos parámetros (la herramienta Geth no lo recordará por usted):
$ geth --datadir /home/petros/eth-evm/data/PrivateBlockchain ↪init /home/petros/eth-evm/config/Genesis.json $ geth --datadir /home/petros/eth-evm/data/PrivateBlockchain ↪--networkid 9999
Configurar una cuenta de usuario
Entonces, ahora que su red privada de blockchain está en funcionamiento, puede comenzar a interactuar con ella. Pero para hacerlo, debe adjuntar al proceso Geth en ejecución. Abra una segunda ventana de terminal. El siguiente comando se adjuntará a la instancia que se ejecuta en la primera ventana de terminal y lo llevará a una consola de JavaScript:
$ geth attach /home/petros/eth-evm/data/PrivateBlockchain/geth.ipc Welcome to the Geth JavaScript console! instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 ↪personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 >
Es hora de crear una nueva cuenta que manipulará la red Blockchain:
> personal.newAccount() Passphrase: Repeat passphrase: "0x92619f0bf91c9a786b8e7570cc538995b163652d"
Recuerda esta cadena. Lo necesitará en breve. Si olvida esta cadena hexadecimal, puede volver a imprimirla en la consola escribiendo:
> eth.coinbase "0x92619f0bf91c9a786b8e7570cc538995b163652d"
Verifique su saldo de ether escribiendo el siguiente script:
> eth.getBalance("0x92619f0bf91c9a786b8e7570cc538995b163652d") 0
Aquí hay otra forma de verificar su saldo sin necesidad de escribir toda la cadena hexadecimal:
> eth.getBalance(eth.coinbase) 0
Minería
Hacer minería real en la cadena de bloques principal de ethereum requiere un hardware muy especializado, como unidades de procesamiento de gráficos (GPU) dedicadas, como las que se encuentran en las tarjetas gráficas de gama alta mencionadas en la Parte I. Sin embargo, dado que está extrayendo bloques en una cadena privada con un nivel de dificultad bajo, puede prescindir de ese requisito. Para comenzar a minar, ejecute el siguiente script en la consola de JavaScript:
> miner.start() null
Actualizaciones en la primera ventana de terminal
Observará la actividad minera en los registros de salida que se muestran en la primera ventana de terminal:
INFO [02-10|15:14:47] Updated mining threads ↪threads=0 INFO [02-10|15:14:47] Transaction pool price threshold ↪updated price=18000000000 INFO [02-10|15:14:47] Starting mining operation INFO [02-10|15:14:47] Commit new mining work ↪number=1 txs=0 uncles=0 elapsed=186.855us INFO [02-10|15:14:57] Generating DAG in progress ↪epoch=1 percentage=0 elapsed=7.083s INFO [02-10|15:14:59] Successfully sealed new block ↪number=1 hash=c81539...dc9691 INFO [02-10|15:14:59] mined potential block ↪number=1 hash=c81539...dc9691 INFO [02-10|15:14:59] Commit new mining work ↪number=2 txs=0 uncles=0 elapsed=211.208us INFO [02-10|15:15:04] Generating DAG in progress ↪epoch=1 percentage=1 elapsed=13.690s INFO [02-10|15:15:06] Successfully sealed new block ↪number=2 hash=d26dda...e3b26c INFO [02-10|15:15:06] mined potential block ↪number=2 hash=d26dda...e3b26c INFO [02-10|15:15:06] Commit new mining work ↪number=3 txs=0 uncles=0 elapsed=510.357us [ ... ] INFO [02-10|15:15:52] Generating DAG in progress ↪epoch=1 percentage=8 elapsed=1m2.166s INFO [02-10|15:15:55] Successfully sealed new block ↪number=15 hash=d7979f...e89610 INFO [02-10|15:15:55] block reached canonical chain ↪number=10 hash=aedd46...913b66 INFO [02-10|15:15:55] mined potential block ↪number=15 hash=d7979f...e89610 INFO [02-10|15:15:55] Commit new mining work ↪number=16 txs=0 uncles=0 elapsed=105.111us INFO [02-10|15:15:57] Successfully sealed new block ↪number=16 hash=61cf68...b16bf2 INFO [02-10|15:15:57] block reached canonical chain ↪number=11 hash=6b89ff...de8f88 INFO [02-10|15:15:57] mined potential block ↪number=16 hash=61cf68...b16bf2 INFO [02-10|15:15:57] Commit new mining work ↪number=17 txs=0 uncles=0 elapsed=147.31us
Volver a la segunda ventana de terminal
Espere de 10 a 20 segundos y, en la consola de JavaScript, comience a verificar su saldo:
> eth.getBalance(eth.coinbase) 10000000000000000000
Espere un poco más y vuelva a enumerarlo:
> eth.getBalance(eth.coinbase) 75000000000000000000
Recuerda, esto es éter falso, así que no abras esa botella de champán todavía. No puede utilizar este éter en la red principal de ethereum.
Para detener al minero, invoque el siguiente script:
> miner.stop() true
Bueno, lo hiciste. Creó su propia cadena de bloques privada y extrajo algo de éter. ¿Quién se beneficiará de esta tecnología hoy y en el futuro?
Aunque la cadena de bloques se desarrolló originalmente en torno a la criptomoneda (más específicamente, bitcoin), sus usos no terminan ahí. Hoy en día, puede parecer que ese es el caso, pero hay industrias y mercados sin explotar donde las tecnologías blockchain pueden redefinir la forma en que se procesan las transacciones. Los siguientes son algunos ejemplos que me vienen a la mente.
Mejorando los contratos inteligentes
Ethereum, el mismo proyecto de cadena de bloques de código abierto implementado anteriormente, ya está haciendo todo el asunto del contrato inteligente, pero la idea aún está en su infancia y, a medida que madura, evolucionará para satisfacer las demandas de los consumidores. Hay mucho espacio para el crecimiento en esta área. Probablemente y eventualmente se infiltrará en la gobernanza de las empresas (como la verificación de activos digitales, el capital, etc.), el comercio de acciones, el manejo de la propiedad intelectual y la gestión de la propiedad, como el registro de títulos de propiedad.
Habilitación de mercados y economías compartidas
Piense en eBay pero reenfocado para ser peer-to-peer. Esto significaría no más tarifas de transacción, pero también enfatizará la importancia de su reputación personal, ya que no habrá un organismo único que gobierne el mercado en el que se comercializan o intercambian bienes o servicios.
Recaudación de fondos
Siguiendo la misma dirección que mis comentarios anteriores sobre un mercado descentralizado, también existen oportunidades para que las personas o las empresas obtengan el capital necesario para ayudar a "impulsar" sus iniciativas. Piense en un Kickstarter o GoFundMe más abierto y global.
Compartición o alojamiento multimedia
Una red peer-to-peer para músicos aspirantes o establecidos definitivamente podría recorrer un largo camino aquí, una en la que el contenido llegará directamente a sus audiencias objetivo y también evitará los altos costos de regalías que se pagan a los estudios, sellos discográficos y distribuidores de contenido. Lo mismo se aplica al contenido de video e imagen.
Almacenamiento de archivos y gestión de datos
Al habilitar una red global peer-to-peer, la tecnología blockchain lleva la computación en la nube a un nivel completamente nuevo. A medida que la tecnología continúe avanzando hacia los mercados de servicios en la nube existentes, desafiará a los proveedores tradicionales, incluidos Amazon AWS e incluso Dropbox y otros, y lo hará a una fracción del precio. Por ejemplo, las ofertas de datos de almacenamiento en frío son un mercado de miles de millones de dólares en la actualidad. Al distribuir sus archivos cifrados a través de una red global y descentralizada, la necesidad de mantener el equipo del centro de datos local por una sola entidad se reduce significativamente.
Las redes sociales y la forma en que se administra el contenido publicado también cambiarían bajo este modelo. Bajo la cadena de bloques, Facebook o Twitter o cualquier otra persona no puede reclamar lo que usted elige compartir.
Otro beneficio adicional de aprovechar blockchain aquí es hacer uso de la criptografía que protege sus valiosos datos para que no sean pirateados o perdidos.
Internet de las Cosas
¿Qué es Internet de las cosas (IoT)? Es un término amplio que describe la gestión en red de dispositivos electrónicos muy específicos, que incluyen termostatos de calefacción y refrigeración, luces, puertas de garaje y más. Usando una combinación de software, sensores e instalaciones de red, las personas pueden habilitar fácilmente un entorno en el que pueden automatizar y monitorear equipos domésticos y / o comerciales.
Auditorías de la cadena de suministro
Con un libro mayor público distribuido a disposición de los consumidores, los minoristas no pueden falsificar las afirmaciones realizadas contra sus productos. Los consumidores podrán verificar sus fuentes, ya sean alimentos, joyas o cualquier otra cosa.
Gestión de identidad
No hay mucho que explicar aquí. La amenaza es muy real. El robo de identidad nunca toma un día libre. Los sistemas de nombre de usuario / contraseña anticuados de hoy han seguido su curso, y ya es hora de que los marcos de autenticación existentes aprovechen las capacidades criptográficas que ofrece la cadena de bloques.
Resumen
Esta tecnología revolucionaria ha permitido a las organizaciones de formas que no eran posibles hace una década. Sus posibilidades son enormes y parece que cualquier industria que se ocupe de algún tipo de modelo basado en transacciones se verá interrumpida por la tecnología. Es solo cuestión de tiempo hasta que suceda.
Ahora, ¿cómo será el futuro de blockchain? En esta etapa, es difícil de decir. Sin embargo, una cosa es segura; Las grandes empresas, como IBM, están invirtiendo mucho en la tecnología y construyendo su propia infraestructura de cadena de bloques que pueden ser vendidas y utilizadas por empresas corporativas e instituciones financieras. Sin embargo, esto puede crear algunos problemas. A medida que estas grandes empresas construyan sus infraestructuras blockchain, solicitarán patentes para proteger sus tecnologías. Y con esas patentes en su arsenal, existe la posibilidad de que se muevan agresivamente contra la competencia en un intento de desacreditarlas a ellas y a su valor.
De todos modos, si me disculpan, necesito hacer algunas criptomonedas.
Otros artículos sobre BlockChain:
- Creando un Blockchain en 60 líneas de Python
- Parte 1, Blockchain en Linux - Introducción y criptomoneda
- Parte 2, Blockchain en Linux - Configurar una red Blockchain y aprovechar la tecnología
- Cómo instalar Blockchain en Ubuntu
- Crear tu propia criptomoneda, usando tu blockchain
- Desmitificando Blockchains
-
Encriptación
- Cómo crear una carpeta privada, personal y encriptada En Ubuntu
- Encriptar y desencriptar archivos y directorios en Windows, Linux y Mac, con Tar y OpenSSL
- Cómo cifrar y descifrar archivos y directorios con Tar y OpenSSL
- Encriptación del Directorio Home en Windows
- Desmitificando Blockchains
- Crear tu propia criptomoneda, usando tu blockchain
- Parte 1, Blockchain en Linux - Introducción y criptomoneda
- Parte 2, Blockchain en Linux - Configurar una red Blockchain y aprovechar la tecnología
- Cómo instalar Blockchain en Ubuntu
- Crear una carpeta segura y encriptada en Linux al estilo RealCrypt (ya encfs)
- Las mejores VPN para Linux
- Charla IPTABLES, que se dió en el canal #linux_party
- Charla IPTABLES, que se dió en el canal #linux_party (2)
- Espiar conversaciones y rastrear móviles, ¿estamos seguros en Internet?
- Encriptar y desencriptar ficheros en Linux, desde la consola