Рассчитать виртуальный размер транзакции (адрес SegWit) - PullRequest
1 голос
/ 19 марта 2020

Этот учебник: https://bitzuma.com/posts/making-sense-of-bitcoin-transaction-fees/

Предоставляет следующую формулу:

v = (42 + 272×(number of inputs) + 128×(number of outputs))/4

Однако, расчет транзакции с 1 входом и 2 выходами:

v = (42 + 272×(number of inputs) + 128×(number of outputs))/4
v = (42 + 272×(1) + 128×(3))/4
v = 174.5

Что не соответствует ни одному из этих двух инструментов:

Кроме того, формула не учитывает различные типы выходных транзакций:

  • P2 SH
  • P2WPKH
  • P2PKH

1 Ответ

0 голосов
/ 19 марта 2020

Вверх, есть Bitcoin Обмен стэков: https://bitcoin.stackexchange.com/.

В любом случае, давайте попробуем это (в оболочке Fi sh, должно быть понятно даже без знания Fi sh):

set addr (bitcoin-cli -regtest getnewaddress "" bech32)
set inputs "[]"
set outputs "[{\"$addr\": 1}]"
set unfunded (bitcoin-cli -regtest createrawtransaction $inputs $outputs)
set funded (bitcoin-cli -regtest fundrawtransaction $unfunded '{"change_type": "bech32"}' | jq .hex --raw-output )
set signed (bitcoin-cli -regtest signrawtransactionwithwallet $funded | jq .hex --raw-output )
bitcoin-cli -regtest decoderawtransaction $signed

Это дает мне:

{
  "txid": "50633d5ff3de40650a9d0ac4669f408736b8fd98cd8129767650637c11680559",
  "hash": "dc0147a282b811ef23d7325aede8ededbedcc2ecf73321fa7a74eb89521fcdf0",
  "version": 2,
  "size": 245,
  "vsize": 164,
  "weight": 653,
  "locktime": 0,
  "vin": [
    {
      "txid": "f113bb1dc07dc7adccc546870d98d38ac9a0dd22a4d7861b1eeb0ccceb9597d7",
      "vout": 0,
      "scriptSig": {
        "asm": "00146e90108bb6b936e5e2fd9a108ba6e9ca458033b1",
        "hex": "1600146e90108bb6b936e5e2fd9a108ba6e9ca458033b1"
      },
      "txinwitness": [
        "304402200d3ab9fa5ee232c23a5d29d8fec445ae7f868bec8146de8cedfad1fae567a60802202174dfc11bf46ed0ef5fcf17334fa62fdf56d4320b8a0c0b60fdd93983dd5cd301",
        "03a29c4e49ab8f54ba07dff57c2cf2a214135bfffef101549b5935d00612af849d"
      ],
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 1.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "0 999e92cd7790d23740e8244e09c5397cd8debb67",
        "hex": "0014999e92cd7790d23740e8244e09c5397cd8debb67",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "bcrt1qnx0f9nthjrfrws8gy38qn3fe0nvdawm8vcw7lr"
        ]
      }
    },
    {
      "value": 48.99996720,
      "n": 1,
      "scriptPubKey": {
        "asm": "0 e88b5a93dd8082f792f24079ee9537af56a8dfc5",
        "hex": "0014e88b5a93dd8082f792f24079ee9537af56a8dfc5",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "bcrt1qaz944y7aszp00yhjgpu7a9fh4at23h79y0z3ht"
        ]
      }
    }
  ]
}

vsize здесь - 164, что мало чем отличается от того, что мне дали вышеописанные инструменты.

Я считаю, что причина, по которой размеры отличаются от опубликованных вами инструментов, заключается в том, что как публичные c ключи, так и подписи могут иметь переменный размер. В общем случае невозможно точно знать, насколько крупной будет транзакция без ее подписания.

...