¿Cómo hacer una transacción taproot con bitcoin-cli?

¿Puede dar un ejemplo simple paso a paso para una transacción raíz con bitcoin-cli en Testnet?

Respuestas (2)

Pasos que seguí para hacer una transacción que crea una salida P2TR:

  1. Copie XPUB de los vectores de prueba mencionados en BIP 86
xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ
  1. Convierta XPUB (mainnet) a TPUB (testnet) usando Bitcoin Extended Public Key Converter
tpubDC3pD7UZXnsgh3EBjbtBQiB1FnLask7UHBSunZ1DPK4dCFFZoFRkgxHB8gt42FvLzx1DpxfHWxAsYaY6b643RVcGjDxXxns7wKKYnnfEcbB
  1. Cree una billetera de descriptor en blanco con claves privadas deshabilitadas:
bitcoin-cli -named createwallet wallet_name=taproot_wallet blank=true disable_private_keys=true descriptors=true
  1. Guarde la información del descriptor en un archivo de texto para TPUB que obtuvimos del paso 2 (descriptor.txt):
[
  {
    "desc": "tr([8868ab13/86'/1'/0']tpubDC3pD7UZXnsgh3EBjbtBQiB1FnLask7UHBSunZ1DPK4dCFFZoFRkgxHB8gt42FvLzx1DpxfHWxAsYaY6b643RVcGjDxXxns7wKKYnnfEcbB/0/*)#06sjusfa",
    "timestamp": "now",
    "active": true,
    "internal": false,
    "range": [
      0,
      999
    ],
    "next": 0
  }
]

Copié este formato de listdescriptorsla salida para una nueva billetera de descriptor que tenía claves privadas habilitadas.

  1. Importe este descriptor en la billetera que creamos en el paso 3:
bitcoin-cli -rpcwallet=taproot_wallet importdescriptors "$(cat descriptor.txt)"
  1. Esta es una billetera de solo reloj con un descriptor de raíz principal TPUB que se puede usar para crear una nueva dirección bech32m:
bitcoin-cli -rpcwallet=taproot_wallet getnewaddress "" "bech32m"
tb1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqp3mvzv
  1. Envía algo de bitcoin desde otra billetera:

https://blockstream.info/testnet/tx/2035ead4a9d0c8e2da1184924abc9034d26f2a7093371183ef12891623b235d1

Compilé bitcoind con branch usado por Sjors Provoost en PR #2260

Pero, ¿cómo gastas de esa salida principal? Supongo que tienes que hacer los mismos pasos mientras usas una privKey en lugar de un xPub, ¿verdad?
Sí, use XPRV para mainnet y TPRV para testnet. Los vectores de prueba en BIP 86 no tenían TPRV, por lo que tuve que seguir los pasos mencionados en esta respuesta.

Ahí está el ejemplo paso a paso de pasar de la tb1p8wpt9v4frpf3tkn0srd97pksgsxc5hs52lafxwru9kgeephvs7rqlqt9zjdirección Taproot a la otra dirección Taproot: tb1p90h6z3p36n9hrzy7580h5l429uwchyg8uc9sz4jwzhdtuhqdl5eqmpwq6n.

$ ./bitcoin-cli.exe -testnet createrawtransaction '[{"txid":"8cdf19ed3ade4af038314ef58b116a523f99aa1c585ca3c157ce5386f9df6421","vout":0}]' '[{"tb1p90h6z3p36n9hrzy7580h5l429uwchyg8uc9sz4jwzhdtuhqdl5eqmpwq6n":0.00001000}]'
$ ./bitcoin-cli.exe -testnet importdescriptors '[ { "desc" : "tr(cV628xvqToz45dwdPmTcJ9RgEVnWMwP8dpZBGzb9LfTk3sBHFNwc)#8skcj28y", "timestamp" : "now" } ]'
$ ./bitcoin-cli.exe -testnet signrawtransactionwithwallet "02000000012164dff98653ce57c1a35c581caa993f526a118bf54e3138f04ade3aed19df8c0000000000fdffffff01e8030000000000002251202befa14431d4cb71889ea1df7a7eaa2f1d8b9107e60b01564e15dabe5c0dfd3200000000" '[{"txid": "8cdf19ed3ade4af038314ef58b116a523f99aa1c585ca3c157ce5386f9df6421", "vout": 0, "scriptPubKey": "5120c38859777bc9c3294d3587035fc3823a146dabaab1fa250bc04e92f16887a065", "amount": 0.00000000}]' "DEFAULT"
$ ./bitcoin-cli.exe -testnet sendrawtransaction 020000000001012164dff98653ce57c1a35c581caa993f526a118bf54e3138f04ade3aed19df8c0000000000fdffffff01e8030000000000002251202befa14431d4cb71889ea1df7a7eaa2f1d8b9107e60b01564e15dabe5c0dfd320140f10fc6bb1d414d4c888838fb6b1699c3e538331d32b64b5baf85c1cc34e2c43eb7bdd7a14fd4a4a07341d1b0390ad977be711bc49df786982243c6564a33f6b400000000

Tenga en cuenta que los comandos con argumentos pueden no funcionar desde PowerShell. Está el Bash utilizado en el ejemplo anterior.