Bitcoin: [问题] 如何获取入账手续费

创建于 2017-07-03  ·  3评论  ·  资料来源: bitcoin/bitcoin

你好。

我有一个问题,我找不到简单的解决方案。

我正在努力为传入的卡住交易自动执行 CPFP(子代为父代付费),并希望确保新交易有费用,因此每字节产生的费用将设置为当前网络条件,因此卡住交易( s) 将很快得到确认。

问题是我无法确定通过gettransaction rpc 调用到达钱包的传入交易的费用。

下面是一个例子:

$ ./bitcoin-cli gettransaction yyy
{
  "amount": 0.00010000,
  "confirmations": 0,
  "trusted": false,
  "txid": "yyy",
  "walletconflicts": [
  ],
  "time": 1499083856,
  "timereceived": 1499083856,
  "bip125-replaceable": "yes",
  "details": [
    {
      "account": "user_123",
      "address": "xxxxxxxx",
      "category": "receive",
      "amount": 0.00010000,
      "label": "user_123",
      "vout": 0
    }
  ],
  "hex": "1234567"
}

比特币没有退还费用。 仅当我发送传出交易时才会退还费用。

有什么方法可以确定为传入交易设置了多少费用(通过 JSON-RPC)?

谢谢你。

最有用的评论

您将需要使用 getrawtransaction 然后进行数学计算。

所以以这个 txid 为例:e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314

{
    "result": {
        "hex": "0200000001f9516e774026d5cd88e1039d6ce5879ccfe5df3bc43cf4473aa5528bb0687c7d0000000069463043021f547eaf1f48630195efe1c6424e517381ee633d6d245f9dfbae8891e48f3a8f02206d68b6e82f623c2c4c90f06db8803de9e0f44fa5965cd020aa6024fae13ef5a40121033aa5441548b3ba49cc974a0e9e141ffbfcdb70df7015da3fde5f63263bb01c6efeffffff020084d717000000001976a91461281b74375a87a0ed0a63c4b8540fc8cffbbf1988acc79d2112000000001976a914941cae6b6c65cb2b45322c5a1b5c62c14fda124488ac503c0700",
        "txid": "e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314",
        "hash": "e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314",
        "size": 224,
        "vsize": 224,
        "version": 2,
        "locktime": 474192,
        "vin": [
            {
                "txid": "7d7c68b08b52a53a47f43cc43bdfe5cf9c87e56c9d03e188cdd52640776e51f9",
                "vout": 0,
                "scriptSig": {
                    "asm": "3043021f547eaf1f48630195efe1c6424e517381ee633d6d245f9dfbae8891e48f3a8f02206d68b6e82f623c2c4c90f06db8803de9e0f44fa5965cd020aa6024fae13ef5a4[ALL] 033aa5441548b3ba49cc974a0e9e141ffbfcdb70df7015da3fde5f63263bb01c6e",
                    "hex": "463043021f547eaf1f48630195efe1c6424e517381ee633d6d245f9dfbae8891e48f3a8f02206d68b6e82f623c2c4c90f06db8803de9e0f44fa5965cd020aa6024fae13ef5a40121033aa5441548b3ba49cc974a0e9e141ffbfcdb70df7015da3fde5f63263bb01c6e"
                },
                "sequence": 4294967294
            }
        ],
        "vout": [
            {
                "value": 4.00000000,
                "n": 0,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 61281b74375a87a0ed0a63c4b8540fc8cffbbf19 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a91461281b74375a87a0ed0a63c4b8540fc8cffbbf1988ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "19ribJqiHeVrFiwWb1ogmvVGE646f4acD3"
                    ]
                }
            },
            {
                "value": 3.04192967,
                "n": 1,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 941cae6b6c65cb2b45322c5a1b5c62c14fda1244 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a914941cae6b6c65cb2b45322c5a1b5c62c14fda124488ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1EW9NCrefefLERJMZK5wAHPYGHtfwkmEvN"
                    ]
                }
            }
        ],
        "blockhash": "00000000000000000142d9a78c0097f291a028006056d3958b987bbb2ce4c391",
        "confirmations": 1,
        "time": 1499173533,
        "blocktime": 1499173533
    },
    "error": null,
    "id": null
}

现在你需要做的是计算费用的数量,就是查看vin里面并取vout数量。 所以在这个例子中,vout 数是 0。然后你去 vout 并将所有输出的值加在一起。

现在您必须对 vin txid 执行另一个 getrawtransaction。 在我们的例子中,这会给我们这个:

{
    "result": {
        "hex": "...",
        "txid": "7d7c68b08b52a53a47f43cc43bdfe5cf9c87e56c9d03e188cdd52640776e51f9",
        "hash": "7d7c68b08b52a53a47f43cc43bdfe5cf9c87e56c9d03e188cdd52640776e51f9",
        "size": 520,
        "vsize": 520,
        "version": 2,
        "locktime": 473652,
        "vin": [...],
        "vout": [
            {
                "value": 7.04418967,
                "n": 0,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 941cae6b6c65cb2b45322c5a1b5c62c14fda1244 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a914941cae6b6c65cb2b45322c5a1b5c62c14fda124488ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1EW9NCrefefLERJMZK5wAHPYGHtfwkmEvN"
                    ]
                }
            },
            {
                "value": 25.00000000,
                "n": 1,
                "scriptPubKey": {
                    "asm": "OP_HASH160 53686151ca689cc39c42c6c63c774ec76ac12856 OP_EQUAL",
                    "hex": "a91453686151ca689cc39c42c6c63c774ec76ac1285687",
                    "reqSigs": 1,
                    "type": "scripthash",
                    "addresses": [
                        "39J33vf83H4YdPvnDwiWYBzhoSWqVDhQP9"
                    ]
                }
            }
        ],
        "blockhash": "0000000000000000013602fbbd4791c0f4b7e612d11ccd4d825cc0fc34318f39",
        "confirmations": 541,
        "time": 1498901391,
        "blocktime": 1498901391
    },
    "error": null,
    "id": null
}

所以在这里,你必须寻找的是,在 vout 中,n 值等于你得到的前一个数字,所以在我们的例子中它是 0。你得到这个输出的值,即 7.04418967 BTC。 现在来计算费用,你用这个数字减去你之前得到的值,这给你:

费用 = 7.04418967 - (4.00000000 + 3.04192967)
费用 = 0.00226 BTC

希望这会帮助你。

所有3条评论

您将需要使用 getrawtransaction 然后进行数学计算。

所以以这个 txid 为例:e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314

{
    "result": {
        "hex": "0200000001f9516e774026d5cd88e1039d6ce5879ccfe5df3bc43cf4473aa5528bb0687c7d0000000069463043021f547eaf1f48630195efe1c6424e517381ee633d6d245f9dfbae8891e48f3a8f02206d68b6e82f623c2c4c90f06db8803de9e0f44fa5965cd020aa6024fae13ef5a40121033aa5441548b3ba49cc974a0e9e141ffbfcdb70df7015da3fde5f63263bb01c6efeffffff020084d717000000001976a91461281b74375a87a0ed0a63c4b8540fc8cffbbf1988acc79d2112000000001976a914941cae6b6c65cb2b45322c5a1b5c62c14fda124488ac503c0700",
        "txid": "e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314",
        "hash": "e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314",
        "size": 224,
        "vsize": 224,
        "version": 2,
        "locktime": 474192,
        "vin": [
            {
                "txid": "7d7c68b08b52a53a47f43cc43bdfe5cf9c87e56c9d03e188cdd52640776e51f9",
                "vout": 0,
                "scriptSig": {
                    "asm": "3043021f547eaf1f48630195efe1c6424e517381ee633d6d245f9dfbae8891e48f3a8f02206d68b6e82f623c2c4c90f06db8803de9e0f44fa5965cd020aa6024fae13ef5a4[ALL] 033aa5441548b3ba49cc974a0e9e141ffbfcdb70df7015da3fde5f63263bb01c6e",
                    "hex": "463043021f547eaf1f48630195efe1c6424e517381ee633d6d245f9dfbae8891e48f3a8f02206d68b6e82f623c2c4c90f06db8803de9e0f44fa5965cd020aa6024fae13ef5a40121033aa5441548b3ba49cc974a0e9e141ffbfcdb70df7015da3fde5f63263bb01c6e"
                },
                "sequence": 4294967294
            }
        ],
        "vout": [
            {
                "value": 4.00000000,
                "n": 0,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 61281b74375a87a0ed0a63c4b8540fc8cffbbf19 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a91461281b74375a87a0ed0a63c4b8540fc8cffbbf1988ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "19ribJqiHeVrFiwWb1ogmvVGE646f4acD3"
                    ]
                }
            },
            {
                "value": 3.04192967,
                "n": 1,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 941cae6b6c65cb2b45322c5a1b5c62c14fda1244 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a914941cae6b6c65cb2b45322c5a1b5c62c14fda124488ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1EW9NCrefefLERJMZK5wAHPYGHtfwkmEvN"
                    ]
                }
            }
        ],
        "blockhash": "00000000000000000142d9a78c0097f291a028006056d3958b987bbb2ce4c391",
        "confirmations": 1,
        "time": 1499173533,
        "blocktime": 1499173533
    },
    "error": null,
    "id": null
}

现在你需要做的是计算费用的数量,就是查看vin里面并取vout数量。 所以在这个例子中,vout 数是 0。然后你去 vout 并将所有输出的值加在一起。

现在您必须对 vin txid 执行另一个 getrawtransaction。 在我们的例子中,这会给我们这个:

{
    "result": {
        "hex": "...",
        "txid": "7d7c68b08b52a53a47f43cc43bdfe5cf9c87e56c9d03e188cdd52640776e51f9",
        "hash": "7d7c68b08b52a53a47f43cc43bdfe5cf9c87e56c9d03e188cdd52640776e51f9",
        "size": 520,
        "vsize": 520,
        "version": 2,
        "locktime": 473652,
        "vin": [...],
        "vout": [
            {
                "value": 7.04418967,
                "n": 0,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 941cae6b6c65cb2b45322c5a1b5c62c14fda1244 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a914941cae6b6c65cb2b45322c5a1b5c62c14fda124488ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1EW9NCrefefLERJMZK5wAHPYGHtfwkmEvN"
                    ]
                }
            },
            {
                "value": 25.00000000,
                "n": 1,
                "scriptPubKey": {
                    "asm": "OP_HASH160 53686151ca689cc39c42c6c63c774ec76ac12856 OP_EQUAL",
                    "hex": "a91453686151ca689cc39c42c6c63c774ec76ac1285687",
                    "reqSigs": 1,
                    "type": "scripthash",
                    "addresses": [
                        "39J33vf83H4YdPvnDwiWYBzhoSWqVDhQP9"
                    ]
                }
            }
        ],
        "blockhash": "0000000000000000013602fbbd4791c0f4b7e612d11ccd4d825cc0fc34318f39",
        "confirmations": 541,
        "time": 1498901391,
        "blocktime": 1498901391
    },
    "error": null,
    "id": null
}

所以在这里,你必须寻找的是,在 vout 中,n 值等于你得到的前一个数字,所以在我们的例子中它是 0。你得到这个输出的值,即 7.04418967 BTC。 现在来计算费用,你用这个数字减去你之前得到的值,这给你:

费用 = 7.04418967 - (4.00000000 + 3.04192967)
费用 = 0.00226 BTC

希望这会帮助你。

鉴于这是(技术上)公开可用的信息-如果可以计算费用然后将其添加到getrawtransaction返回的结果对象中,那就太好

这也将显着减少用于计算费用的服务器上的负载,因为消费者不再需要为任何单笔交易多次访问比特币节点(假设他们想要计算费用)

是的,我也想说费用应该显示在那里

此页面是否有帮助?
0 / 5 - 0 等级