LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

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.

Fuente.

Otros artículos sobre BlockChain:

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías