Cómo transferir fondos en la red Ethereum usando la CLI de GETH

En mi artículo anterior, aprendiste cómo configurar un nodo blockchain completamente sincronizado en 10 minutos. Ahora es el momento de aprender a realizar una transacción en la red Ethereum utilizando GETH CLI.

Para estar en la misma página, primero siga todos los pasos del artículo anterior.

¿Hecho? Perfecto.

En este punto sabes:

  • cómo ejecutar un nodo de cadena de bloques Ethereum completamente sincronizado
  • cómo adjuntar GETH console
  • cómo consultar el saldo de una cuenta Ethereum
geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc 
eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4")
> 7500000000000000000

Podrías pensar que sí, pero espera un segundo Lukas ... ¿por qué 7.5ETHse muestra como 7500000000000000000en el Geth console?

Éter vs Wei

La máquina virtual Ethereum no admite decimales ni flotantes. Aparentemente, los cálculos en finanzas son más fáciles con números enteros.

Por lo tanto, para poder enviar una fracción de 1 ETH, la fundación Ethereum decidió crear su propio sistema métrico donde la unidad más pequeña sería 1 Wei y 1 Ether es 1e18 Wei.

Pero no se preocupe, existen herramientas que pueden facilitarle la vida. Por ejemplo, recomiendo encarecidamente el convertidor en línea de Ether a Wei:

//etherconverter.online

Para enviar $ 15 en Ether, donde 1 ETH == $ 200 (buenos viejos tiempos…), usted haría una transacción enviando 0.0740 ETH que sería, y debe estar representada en Wei como, 74000000000000000.

Convertidor de Ether a Wei en línea:

Descripción general del sistema métrico Ethereum:

La práctica hace el dominio. De hecho, enviemos 74000000000000000 Wei ($ 15) a otra cuenta.

Enviar Ether a otra cuenta mediante GETH CLI

En una terminal, recuerde ejecutar un nodo blockchain completamente sincronizado:

geth --rinkeby --datadir=~/.gophersland_ethereum_r1 --port=30304 --cache=2048 --rpc --rpcport=8546 --rpcapi=eth,web3,net,personal --syncmode=fast

En otra terminal, crearemos nuestra segunda cuenta Ethereum, exactamente como en la Parte 1.

ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 sep 24 15:36 .> drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4geth --datadir=~/.gophersland_ethereum_r1 account new> INFO [09-24|15:36:33.566] Maximum peer count ETH=25 LES=0 total=25> Your new account is locked with a password. Please give a password. Do not forget this password.
> Passphrase: > Repeat passphrase: > Address: {7aa4a14286a25e3a275d7a122c23dc3c107a636a}ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 oct 25 20:14 .> drwx------ 4 enchanter enchanter 4096 oct 25 19:48 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4

Ahora, conectemos la Consola Geth al nodo blockchain que se está ejecutando actualmente como hicimos en el artículo anterior para transferir $ 15 a esta cuenta recién creada mediante la ejecución del eth.sendTransactioncomando.

geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc 
eth.sendTransaction({from: "0xceee57f2b700c2f37d1476a7974965e149fce2d4",to: "0x7aa4a14286a25e3a275d7a122c23dc3c107a636a", value: "74000000000000000"})

Error: autenticación necesaria: contraseña o desbloqueo.

Debería recibir un error. Esto se debe a que enviar Ether es una "transacción" y una transacción cambia de estado, cuesta gas y gasta fondos. Lo que significa que debe firmarse con nuestra clave privada que se almacena en el almacén de claves . Para poder descifrar la clave, debemos proporcionar una contraseña, o en otras palabras, desbloquear la cuenta.

Ejecute el siguiente comando para desbloquear su cuenta durante los próximos 60 y ejecute el comando sendTransaction una vez más.

web3.personal.unlockAccount(web3.personal.listAccounts[0], null, 60) 
eth.sendTransaction({from: "0xceee57f2b700c2f37d1476a7974965e149fce2d4", to: "0x7aa4a14286a25e3a275d7a122c23dc3c107a636a", value: "74000000000000000"})

También podríamos haber pasado la contraseña como segundo argumento en lugar de nulo. Pero de esta manera es más seguro ya que su contraseña está solo en un búfer y no está almacenada en ningún registro o visible en la pantalla.

Esta vez, el comando tuvo éxito y se devolvió un recibo de hash de transacción. ¡Oh si!

Como estamos conectados a la red de Rinkeby, podemos aprovechar el explorador de GUI de Rinkeby para verificar el estado de esta transacción, gas gastado, precio del gas, etc.

  1. Abre el explorador
  2. Pegue el hash del recibo de la transacción en la barra de búsqueda
  3. Hecho, gastamos 21,000 de Gas (estándar para enviar fondos) y la Transacción fue exitosa.

Ahora puede consultar los saldos de ambas cuentas y ver el estado cambiado:

eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4") > 7425979000000000000 
eth.getBalance("0x7aa4a14286a25e3a275d7a122c23dc3c107a636a") > 74000000000000000

Funciona de maravilla.

¡Felicidades! Usted:

  • aprendí la diferencia entre Ether y Wei y cómo convertirlos
  • envió su primera transacción a través de la red global de prueba Ethereum, Rinkeby

You can continue expanding your blockchain skills by building one from scratch in Go!"