entreplanctonyballenas
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

Your note will be visible on your profile and discoverable by anyone.
Your note is now live.
This note is visible on your profile and discoverable online.
Everyone on the web can find and read all notes of this public team.
See published notes
Unpublish note
Please check the box to agree to the Community Guidelines.
View profile
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
1
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
# Tutorial: ¿Cómo crear una transacción usando bitcoin-cli para hacer pruebas? ###### tags: `bitcoin` `transactions` _En este tutorial aprendemos a usar la línea de comandos del cliente de "Bitcoin Core" para que con tu propio nodo puedas hacer transacciones de manera manual y así entender más claramente cómo se ejecutan las transacciones en el sistema de Bitcoin._ [TOC] ## Autor: **Entre Plancton y Ballenas.** Twitter para correcciones, comentarios o sugerencias: [@entreplanctony1](https://twitter.com/Entreplanctony1). El presente tutorial se realizó con el aprendizaje social del [Seminario socrático de Mastering Bitcoin](https://libreriadesatoshi.com/) a través de [@libreriadesatoshi](https://twitter.com/libdesatoshi). En el siguiente enlace puedes encontrar la documentación de referencia: [BitcoinDeveloper Transaction Tutorial](https://developer.bitcoin.org/examples/transactions.html) :::success :bulb: **¿Tienes un nodo de bitcoin?** En este tutorial explicamos como usar la línea de comando de bitcoin core (bitcoin-cli), por lo que debes tener un nodo de bitcoin, estos pasos sirven igual para testnet o mainnet. Si no has instalado un nodo o no sabes como usar la testnet puedes hacerlo consultando los [Tutoriales sobre Nodos de Bitcoin](/jprsYssCTvuunqevvvzkZw). **NOTA:** Los ejemplos de este tutorial se corren en testnet. También se asume que tienes una wallet inicializada y cargada. Si no sabes cómo crear una wallet puedes ver el tutorial para [Configurar una wallet en Bitcoin Core](/EvZ1uVQZTSiuZ9HCbp7eWQ) ::: ## :arrow_forward: Videotutorial :eye: Si lo prefieres, en el siguiente enlace puedes ver el [Tutorial: Cómo crear transacciones en la testnet de Bitcoin.](https://youtu.be/Zejek_nugWw) ## Ubica el balance que tienes dentro de tu wallet El subcomando ***getbalance*** te muestra la cantidad total de satoshis disponibles para gastar en tu wallet, sumando todas las UTXO que tienes disponibles. ``` python $ bitcoin-cli getbalance 0.00008500 ``` ## ¿Cuánto vas a gastar? Debes verificar la cantidad a gastar, para este ejemplo, quiero hacer un pago simple de **0.00008000** bitcoin. Por lo que debo identificar si hay alguna UTXO dentro de mi wallet en la que tenga el saldo suficiente para hacer este pago. El subcomando **"listunspent"** nos despliega las UTXO que se tienen disponibles para gastar. ``` json= $ bitcoin-cli listunspent [ { "txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6", "vout": 0, "address": "tb1qn0z6jwa0dvgf3my00f862wunjkrethm3qtjdsv", "label": "destino", "scriptPubKey": "00149bc5a93baf6b1098ec8f7a4fa53b93958795df71", "amount": 0.00004500, "confirmations": 2518, "spendable": true, "solvable": true, "desc": "wpkh([c062f9b4/0'/0'/3']024a89edfcfe9c294765c7d0128862cf5911977f8ab2e449807afa3973b0e12bba)#34zpfpsk", "safe": true }, { "txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6", "vout": 1, "address": "tb1q76c6wv8v2k22682g9wdz73xxzm9pjg5cken3pu", "label": "p2sh-segwit", "scriptPubKey": "0014f6b1a730ec5594ad1d482b9a2f44c616ca192298", "amount": 0.00004000, "confirmations": 2518, "spendable": true, "solvable": true, "desc": "wpkh([c062f9b4/0'/0'/2']02f423b23f3ead98454eb19b9991c7b530aebb93a918aa78f63ed3ec7764f2b8d3)#wn6m9c0g", "safe": true } ] ``` De la salida resultante arriba, debemos identificar los siguientes campos para construir nuestra transacción: - **"txid"** es el identificador de nuestro UTXO [líneas 4 y 17] - **"vout"** es el índice que corresponde a la dirección que nos pertenece (la transacción pudo haber sido creada con más de un destinatario) [líneas 5 y 18] - **"amount"** es la cantidad disponible en cada UTXO [líneas 9 y 22] En mi wallet tengo 2 UTXO, la primera con **0.00004500** y la segunda con **0.00004000**, por lo que ninguna de las 2 tiene suficiente saldo para cubrir el pago que quiero hacer, sin embargo, la suma de ambas sí puede cubrir la cantidad que necesito pagar **0.00008000**. Ahora que conocemos las cantidades disponibles, podemos `declarar` las variables para las transacciones que necesitamos: ``` python= $ utxo_txid=b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6 $ utxo1_vout=0 $ utxo1_monto=0.00004500 $ utxo2_vout=1 $ utxo2_monto=0.00004000 $ montopago=0.00008000 ``` De la primera línea **utxo_txid** solo es el nombre que yo escogí para introducir un valor en la memoria de mi terminal (puedes darle a cada variable el nombre que tú quieras), el símbolo **"="** indica el valor que va a tener la variable, y así sucesivamente en cada línea. En este caso ambos UTXO que tengo disponibles están declarados dentro de la misma transacción (**txid** en la salida de **listunspent**) por lo que solo necesito declarar un txid dentro de mis variables y el resto de las variables solo son los montos que tiene cada UTXO y el monto a pagar. En cualquier momento puedes verificar que tus variables tengan los valores correctos ejecutando el comando **"echo"** y añade el carácter **"$"** al nombre de tu variable. ``` shell= $ echo $utxo_txid b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6 $ echo $utxo1_vout 0 $ echo $utxo1_monto 0.00004500 $ echo $utxo2_vout 1 $ echo $utxo2_monto 0.00004000 $ echo $montopago 0.00008000 ``` ## Calcula los montos de salida de tu transacción Debido a que las UTXO se deben "gastar" en su totalidad para poder ser utilizadas, necesito consumir ambas UTXO que tengo en mi wallet para hacer el pago deseado, pero como la suma de ambas no da la cantidad exacta del pago, necesito calcular tanto mi "cambio" como el *"fee"* (la cuota) a pagar a la red para garantizar que mi transacción sea verificada. El cálculo de los *fee* es complejo, por lo que para este ejemplo estoy asumiendo que es algo simple y solo quiero pagar una cuota de 0.00000300: ``` python $ echo 0.00004500 + 0.00004000 - 0.00008000 - 0.00000300 | bc 0.00000200 $ cambio=0.00000200 ``` - **echo** es un comando que despliega en la terminal lo que escribes frente a él. - El carácter **|** (pipe) indica que a la salida resultante del comando de la izquierda se le va a aplicar el comando de la derecha. - **bc** solo es para indicar que quiero hacer una operación con valores de número flotante. - **cambio=** Aquí guardo en memoria el valor obtenido. En total necesito definir 2 montos de salida en mi transacción, una salida que contenga el valor definido en **montopago** y otra salida que será mi **cambio**. El **fee** de transacción, aunque debemos siempre calcularlo, en Bitcoin el sobrante de tus operaciones de salida ya está implícito que será tu pago a los mineros. :::warning :warning: Si no declaras en tu transacción un monto de salida para definir tu "cambio" el sistema asume que cualquier valor sobrante es lo que vas a pagar de **fee** a los mineros. ::: Por último, necesitamos las direcciones a las cuales vamos a depositar el monto de pago y el cambio (para este último estoy creando una nueva dirección dentro de mi wallet): ``` phyton $ bitcoin-cli getnewaddress direcciondecambio tb1qzrfj0w8ec7mjtyhtg4tcvy6zg53wh4335uu8x5 $ direcciondecambio= tb1qzrfj0w8ec7mjtyhtg4tcvy6zg53wh4335uu8x5 $ direcciondepago= tb1qpsjd66q4rwgfp6zju67wjyh6778ytj5ak200nt ``` ## Crea tu transacción El subcomando **createrawtransaction** es utilizado para crear las transacciones en crudo (en hexadecimal). Se debe introducir un arreglo JSON para listar las UTXO que está gastando y otro para listar las salidas (destinatarios). La estructura del comando podemos entenderla con el siguiente diagrama: ``` mermaid classDiagram ENTRADAS --> UTXO1 UTXO1 : txid UTXO1 : vout ENTRADAS --> UTXO2 UTXO2 : txid UTXO2 : vout ENTRADAS -- SALIDAS SALIDAS --> PAGO PAGO : direcciondepago PAGO : montopago SALIDAS --> CAMBIO CAMBIO : direcciondecambio CAMBIO : montocambio ``` Las entradas y las salidas se deben agrupar en un orden definido para que el comando las reconozca y deben contar con la siguiente sintaxis de objetos JSON, si usamos las variables que hemos definido previamente nos quedaría lo siguiente: ``` json= % bitcoin-cli createrawtransaction ''' [ { "txid": "'$utxo_txid'","vout": '$utxo1_vout' }, { "txid": "'$utxo_txid'","vout": '$utxo2_vout' } ] ''' ''' [ { "'$direcciondepago'": '$montopago' }, { "'$direcciondecambio'": '$cambio' } ] ''' ``` El comando **bitcoin-cli** utiliza un RPC JSON, por lo que la sintaxis del subcomando **createrawtransaction** podemos explicarla as: - Las 3 comillas **'''** y los símbolos **[ ]** en las líneas 2 y 9 representan el inicio y el final del arreglo JSON para las transacciones de entrada. Mientras que en las líneas 11 y 17 representan el inicio y el final del arreglo de salidas. - Los corchetes **{ }** delimitan el inicio y final de cada uno de los valores de entrada y salida. - Las comas al final del corchete de cierre **},** solo indican que hay más de un valor de entrada o salida y no son necesarias cuando se tiene una sola entrada y una sola salida. - Las comillas **" "** indican que estás pasándole un valor de texto al comando. Con estas reglas de sintaxis para este comando es suficiente para definir nuestra transacción y la misma quedaría de la siguiente manera: ``` shell $ bitcoin-cli createrawtransaction '''[{"txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6","vout": 0}, {"txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6","vout": 1}]''' '''[{"tb1qpsjd66q4rwgfp6zju67wjyh6778ytj5ak200nt": 0.00008000}, {"tb1qzrfj0w8ec7mjtyhtg4tcvy6zg53wh4335uu8x5": 0.00000200}]''' ``` Sin embargo, podemos también usar las variables que definimos anteriormente, ya que la idea es que tú puedas copiar y pegar estos comandos y experimentar con ellos con las UTXO que tengas en tu wallet. Para usar las variables cargadas en la memoria de nuestra terminal, necesitamos pasar otros caracteres para que el comando pueda leer lo que tenemos en nuestras variables. Las comillas simples **' '** ejecutan lo que está dentro de ellas y el **$** es para indicar que el texto frente a este símbolo es un apuntador a un valor que está en memoria. El siguiente comando crea la transacción usando nuestras variables y el valor hexadecimal resultante queda almacenado en una variable nueva llamada **txhex**: ``` shell $ txhex=$(bitcoin-cli createrawtransaction '''[{"txid": "'$utxo_txid'","vout": '$utxo1_vout'}, {"txid": "'$utxo_txid'","vout": '$utxo2_vout'}]''' '''[{"'$direcciondepago'": '$montopago'}, {"'$direcciondecambio'": '$cambio'}]''') $ echo $txhex 0200000002d69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40000000000ffffffffd69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40100000000ffffffff02401f0000000000001600140c24dd68151b9090e852e6bce912faf78e45ca9dc80000000000000016001410d327b8f9c7b72592eb45578613424522ebd63100000000 ``` ## Verifica y firma tu transacción Usa el comando **decoderawtransaction** para verificar que todos los campos que acabas de construir con **createrawtransaction** están correctos. Notarás que el comando ha agregado varios campos por ti de manera automática. ```json= $ bitcoin-cli decoderawtransaction $txhex { "txid": "87bcc93f122a96e5b2c56de996f4efcd1f330eceff039146e329038c261afbc5", "hash": "87bcc93f122a96e5b2c56de996f4efcd1f330eceff039146e329038c261afbc5", "version": 2, "size": 154, "vsize": 154, "weight": 616, "locktime": 0, "vin": [ { "txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6", "vout": 0, "scriptSig": { "asm": "", "hex": "" }, "sequence": 4294967295 }, { "txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6", "vout": 1, "scriptSig": { "asm": "", "hex": "" }, "sequence": 4294967295 } ], "vout": [ { "value": 0.00008000, "n": 0, "scriptPubKey": { "asm": "0 0c24dd68151b9090e852e6bce912faf78e45ca9d", "hex": "00140c24dd68151b9090e852e6bce912faf78e45ca9d", "address": "tb1qpsjd66q4rwgfp6zju67wjyh6778ytj5ak200nt", "type": "witness_v0_keyhash" } }, { "value": 0.00000200, "n": 1, "scriptPubKey": { "asm": "0 10d327b8f9c7b72592eb45578613424522ebd631", "hex": "001410d327b8f9c7b72592eb45578613424522ebd631", "address": "tb1qzrfj0w8ec7mjtyhtg4tcvy6zg53wh4335uu8x5", "type": "witness_v0_keyhash" } } ] } ``` :::warning :warning: Verifica cuidadosamente que la sección de **vin** tenga las UTXO correctas, y que la sección de **vout** tenga las direcciones y los montos a pagar correctos, si cometes un error y gastas una UTXO equivocada o si depositas a una dirección incorrecta y la transacción es aceptada por la red, ++no hay forma de revertir los cambios en la cadena de bloques++. El comando **createrawtransaction** no calcula que los montos de entrada y salida sean correctos, solo valida que la sintaxis con la que la escribiste esté correcta, por lo que aún podría ser rechazada tu transacción si cometiste errores de cálculo. ::: Si en este punto todos los valores están correctos, entonces ahora puedes firmar la transacción con el comando **signrawtransaction** ``` json= $ bitcoin-cli signrawtransactionwithwallet $txhex { "hex": "02000000000102d69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40000000000ffffffffd69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40100000000ffffffff02401f0000000000001600140c24dd68151b9090e852e6bce912faf78e45ca9dc80000000000000016001410d327b8f9c7b72592eb45578613424522ebd63102473044022030d66c943170e5379d0c7a1e5c72074e8209909cbbace9ad3871ef167f670a660220678145bd2936ee098764394949a3feb29f1210368db75c87f644c733dd3a22d20121024a89edfcfe9c294765c7d0128862cf5911977f8ab2e449807afa3973b0e12bba0247304402205606745ac0af2ae456c8a3a6fc3ac27c1060068104b6b19e9598747bc6802fd60220725de7c9d9fb0bf7c33cfef774c8084bbf1429d3961da1fee8fe23ac84f14a5e012102f423b23f3ead98454eb19b9991c7b530aebb93a918aa78f63ed3ec7764f2b8d300000000", "complete": true } $ txfirmada= 02000000000102d69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40000000000ffffffffd69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40100000000ffffffff02401f0000000000001600140c24dd68151b9090e852e6bce912faf78e45ca9dc80000000000000016001410d327b8f9c7b72592eb45578613424522ebd63102473044022030d66c943170e5379d0c7a1e5c72074e8209909cbbace9ad3871ef167f670a660220678145bd2936ee098764394949a3feb29f1210368db75c87f644c733dd3a22d20121024a89edfcfe9c294765c7d0128862cf5911977f8ab2e449807afa3973b0e12bba0247304402205606745ac0af2ae456c8a3a6fc3ac27c1060068104b6b19e9598747bc6802fd60220725de7c9d9fb0bf7c33cfef774c8084bbf1429d3961da1fee8fe23ac84f14a5e012102f423b23f3ead98454eb19b9991c7b530aebb93a918aa78f63ed3ec7764f2b8d300000000 ``` El comando devuelve un valor en hexadecimal llamado **"hex"**, esta es tu transacción ya firmada con tu wallet. El valor **"complete"**, si devuelve valor **true**, significa que tu transacción no tiene errores (tu wallet si puede firmar la dirección de la UTXO), si hay algún problema con tu transacción verás los mensajes de error aquí. El valor lo guardamos en una variable llamada **txfirmada**. Puedes correr el comando **decoderawtransaction** y verás como ahora existen los campos de **"txinwitness"** dentro de tus **vin**, estos contienen las firmas de tu wallet. ``` shell $ bitcoin-cli decoderawtransaction $txfirmada ``` :::info :bulb: **Puedes firmar tu transacción sin conexión** Como puedes ver hasta este punto, la transacción no ha sido enviada a la red de bitcoin, por lo que el paso de crear y firmar la transacción pueden ejecutarse en una computadora distinta o incluso sin conexión a internet para aumentar tu seguridad. ::: ## Envía tu transacción a la red El último paso es enviar la transacción a la red de **bitcoin**, para esto usamos el comando **sendrawtransaction** ``` shell $ bitcoin-cli sendrawtransaction $txfirmada c8493beae315f8c090aab8a348968c895a98534cd879496359561fb41ead7ea2 ``` El comando devuelve un valor en hexadecimal que es el id de la transacción, el cual podemos verificar con **getrawtransaction**. ``` json= % bitcoin-cli getrawtransaction c8493beae315f8c090aab8a348968c895a98534cd879496359561fb41ead7ea2 1 { "txid": "c8493beae315f8c090aab8a348968c895a98534cd879496359561fb41ead7ea2", "hash": "d2d217070fc053da1f92b7e10dae1f38d78156ea1a745eb64689cc12f7f78e12", "version": 2, "size": 370, "vsize": 208, "weight": 832, "locktime": 0, "vin": [ { "txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6", "vout": 0, "scriptSig": { "asm": "", "hex": "" }, "txinwitness": [ "3044022030d66c943170e5379d0c7a1e5c72074e8209909cbbace9ad3871ef167f670a660220678145bd2936ee098764394949a3feb29f1210368db75c87f644c733dd3a22d201", "024a89edfcfe9c294765c7d0128862cf5911977f8ab2e449807afa3973b0e12bba" ], "sequence": 4294967295 }, { "txid": "b467ac2cc9729e59b1712a371e6c8ed27976163244f740ce4f123191234796d6", "vout": 1, "scriptSig": { "asm": "", "hex": "" }, "txinwitness": [ "304402205606745ac0af2ae456c8a3a6fc3ac27c1060068104b6b19e9598747bc6802fd60220725de7c9d9fb0bf7c33cfef774c8084bbf1429d3961da1fee8fe23ac84f14a5e01", "02f423b23f3ead98454eb19b9991c7b530aebb93a918aa78f63ed3ec7764f2b8d3" ], "sequence": 4294967295 } ], "vout": [ { "value": 0.00008000, "n": 0, "scriptPubKey": { "asm": "0 0c24dd68151b9090e852e6bce912faf78e45ca9d", "hex": "00140c24dd68151b9090e852e6bce912faf78e45ca9d", "address": "tb1qpsjd66q4rwgfp6zju67wjyh6778ytj5ak200nt", "type": "witness_v0_keyhash" } }, { "value": 0.00000200, "n": 1, "scriptPubKey": { "asm": "0 10d327b8f9c7b72592eb45578613424522ebd631", "hex": "001410d327b8f9c7b72592eb45578613424522ebd631", "address": "tb1qzrfj0w8ec7mjtyhtg4tcvy6zg53wh4335uu8x5", "type": "witness_v0_keyhash" } } ], "hex": "02000000000102d69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40000000000ffffffffd69647239131124fce40f74432167679d28e6c1e372a71b1599e72c92cac67b40100000000ffffffff02401f0000000000001600140c24dd68151b9090e852e6bce912faf78e45ca9dc80000000000000016001410d327b8f9c7b72592eb45578613424522ebd63102473044022030d66c943170e5379d0c7a1e5c72074e8209909cbbace9ad3871ef167f670a660220678145bd2936ee098764394949a3feb29f1210368db75c87f644c733dd3a22d20121024a89edfcfe9c294765c7d0128862cf5911977f8ab2e449807afa3973b0e12bba0247304402205606745ac0af2ae456c8a3a6fc3ac27c1060068104b6b19e9598747bc6802fd60220725de7c9d9fb0bf7c33cfef774c8084bbf1429d3961da1fee8fe23ac84f14a5e012102f423b23f3ead98454eb19b9991c7b530aebb93a918aa78f63ed3ec7764f2b8d300000000", "blockhash": "000000000000002c8a723618df5b72e390df8d7f2d5caf8ea34762fd8ba71561", "confirmations": 1, "time": 1661204372, "blocktime": 1661204372 } ``` Al cabo de unos minutos, si nuestros valores fueron correctos, podremos ver que la transacción ya está confirmada (línea 62, número de confirmaciones) y en que bloque lo fue (línea 61 muestra el hash del bloque). También puedes visualizar la transacción en tu wallet con el comando **listtransactions**, y el saldo total en tu cartera deberá cambiar en **getbalance**. :::success :thumbsup: Felicidades, ya puedes usar tu nodo para hacer transacciones de prueba! ::: ## :zap: Donaciones :::success Si te fue útil este material puedes agradecer a Iván @entreplanctonyballenas, enviándole un aporte vía Lightning Address: entreplanctonyballenas@getalby.com :::

Import from clipboard

Paste your markdown or webpage here...

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template has been removed or transferred.
Upgrade
All
  • All
  • Team
No template.

Create a template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

Slide Example

API Docs

Edit in VSCode

Install browser extension

Contacts

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

Note content is identical to the latest version.
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully