Skip to content

PSBT

tprv8ZgxMBicQKsPfLVEFf7JWTghGUcThYJAgzH65pNbSDkPATQ8zJHpszUh7eGWgT68PUo5ZeFYUWqUEmzBrcZFeDetTSaNVgphnLj93u876Eh
>>> address(wpkh(tpubD6NzVbkrYhZ4YkXgDdfBVwigSTgKMkV1QeXUBL1xbgbDfyKszBVCodbaEjwxHqze648jbkr2iACvSc2qAWQ6Q9sdenocVzCtixB7VcSkb8y))
tb1qmauxxxxv352sktpl2xeypvhsg8nd94qxapz0wy
dummy::xprivs(3)
[
  xprv9s21ZrQH143K4UGMfR95vtSaZJkAxuG6Vo1a2PZChSJM3tL2NRKs7PcG9SjYhiG4ixzXGqTkiv2G7wWW6hTM8D2r64cMQXZdhcwB7X9pg14,
  xprv9s21ZrQH143K3HFu6X9WuRwdu3e3RsNNqHfkNddGU23YY61Ex5TopKNTkyXewPipa7tsxeGApmfJQ1oXzf8GoxrgUh62oW8tehRam76GcNL,
  xprv9s21ZrQH143K36mSaufYoZsCWHhpwT5CYKQhRZUecYmDGawfEMm2zAxpijxed1W91Wqieur27X6gMdCxEgpCxYWfzd1XiTFYDEudhcpukJu
]

Hello

Setting up key and descriptor

$alice = tprv8ZgxMBicQKsPf4oFSJFdUEXQHcA5Hb7QBD8uXkExq5bKGTxtMU9frMUitTcHVm1FooAs289saDv8oQrbrzzCbZtUoQukqtBbesgkttNcQuG;

$descriptor = wpkh($alice/0/*);
$alice = tprv8ZgxMBicQKsPf4oFSJFdUEXQHcA5Hb7QBD8uXkExq5bKGTxtMU9frMUitTcHVm1FooAs289saDv8oQrbrzzCbZtUoQukqtBbesgkttNcQuG // seckey

$descriptor = wpkh(tpubD6NzVbkrYhZ4YXq3KwvDseBWrdg1SvJJkWjgpGHGFMPi6xDeyryG2r6b4bKa4QagNRkofhFUs5HNmrnspuReCm71rMUZTrnTWBVMcw7tkok/0/*) // descriptor

Generating address

>>> address($descriptor/10)
tb1qu9m9csl9gc06xcr97y7ccq3dmzrlvqq4hu63uy
Generating address range
>>> map($descriptor/range(0, 10), address)
[
  tb1qstphygc6e07jfqqatvjryqy82q3k3zdw4ghzk0,
  tb1qn86zsdj4sma7dc58cnt47z9z5re847erpjevt8,
  tb1quklxg94he7dlqy6vrjwzm6u3q6cgdv0mc6a52t,
  tb1q4x92ypp22sfaahg7uxgnpckrve65u2pv5h555l,
  tb1qkne2ew99m0hflnxc8fvw4lskd8g6y952ehaf8z,
  tb1qjmxqrg06fngsurm7csqtwncuqmcr789l0vf2w9,
  tb1qy40w67jphvzemk2049lnyqg4lmz5lzvuzhkley,
  tb1q34jkj8wnpatgky798n9z6tjns3u88xun95s6zc,
  tb1qrmjecjc6kxk0st6hs6cpuydqkw4u55l3m35rwk,
  tb1qf7zkzgu5gju7gkuwaakl324e4re4wa8wg6zef8,
  tb1qu9m9csl9gc06xcr97y7ccq3dmzrlvqq4hu63uy
]

Spending from address

// Generate address from wpkh() descriptor
$address = address(wpkh($alice_sk/0'/0/0)); // first receive address at m/0'/0/0

// Create, sign, finalize & extract PSBT
$psbt = psbt[
  "input": [
    "prevout": b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c:1,
    "utxo": wpkh($alice_sk/0'/0/0):0.3 BTC,
  ],
  "outputs": [
    tb1qs2xpw2sc6vrl8u0x5mw2l9ff2tj4tsca82nq9w:0.0499 BTC,
    wpkh($alice_sk/0'/1/0):0.25 BTC, // change to m/0'/1/0
    `OP_RETURN "Hello Minsc!"`:0,
  ],
];
$tx_signed = psbt::sign_extract($psbt, $alice_sk);
$tx_hex = hex($tx_signed);
$address = tb1q3xulcscnhezhag500z4fz2hkky5s62vx93sw7m // address

$psbt = psbt [
  "unsigned_tx": tx [
    "version": 2,
    "inputs": [
      b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c:1
    ],
    "outputs": [
      tb1qs2xpw2sc6vrl8u0x5mw2l9ff2tj4tsca82nq9w:0.0499 BTC,
      tb1q2vds8yf0ft6e8pdnqtsmnyrt8k6ndnstedtrzy:0.25 BTC,
      `OP_RETURN <0x48656c6c6f204d696e736321>`:0 BTC
    ]
  ],
  "version": 0,
  "inputs": [
    [
      "witness_utxo": tb1q3xulcscnhezhag500z4fz2hkky5s62vx93sw7m:0.3 BTC,
      "bip32_derivation": [
        [df786318/0'/0/0]03d2765e36c56f1afe437ab018efd3de17635d2446549403ca201cd1e2f6ec4c75
      ]
    ]
  ],
  "outputs": [
    [ ],
    [ "bip32_derivation": [ [df786318/0'/1/0]03e959b8f0ea68364eacd7f3a4f9e571cae1d016348204463203bfc9cdb7b665f9 ] ],
    [ ]
  ]
] // psbt

$tx_signed = tx [
  "version": 2,
  "inputs": [
    [
      "prevout": b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c:1,
      "witness": [ 0x304502210098bfdbf3951442c77e8967c242e093981925a3625bbacdce7fed0b6ae87fdd7502206dfef0d9cc84bc76e2399b59e3986e4336c2908a84bf181bec0a008fb41b36c801, 0x03d2765e36c56f1afe437ab018efd3de17635d2446549403ca201cd1e2f6ec4c75 ]
    ]
  ],
  "outputs": [
    tb1qs2xpw2sc6vrl8u0x5mw2l9ff2tj4tsca82nq9w:0.0499 BTC,
    tb1q2vds8yf0ft6e8pdnqtsmnyrt8k6ndnstedtrzy:0.25 BTC,
    `OP_RETURN <0x48656c6c6f204d696e736321>`:0 BTC
  ]
] // transaction

$tx_hex = "020000000001014c94e48a870b85f41228d33cf25213dfcc8dd796e7211ed6b1f9a014809dbbb50100000000ffffffff0330244c0000000000160014828c172a18d307f3f1e6a6dcaf952952e555c31d40787d0100000000160014531b03912f4af59385b302e1b9906b3db536ce0b00000000000000000e6a0c48656c6c6f204d696e7363210248304502210098bfdbf3951442c77e8967c242e093981925a3625bbacdce7fed0b6ae87fdd7502206dfef0d9cc84bc76e2399b59e3986e4336c2908a84bf181bec0a008fb41b36c8012103d2765e36c56f1afe437ab018efd3de17635d2446549403ca201cd1e2f6ec4c7500000000" // string
$a = 1;
$b = 2;
$a = 1 // int

$b = 2 // int
$c=3;
$d=4;
$c = 3 // int

$d = 4 // int