你好。
我有一个问题,我找不到简单的解决方案。
我正在努力为传入的卡住交易自动执行 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
希望这会帮助你。
鉴于这是(技术上)公开可用的信息-如果可以计算费用然后将其添加到getrawtransaction
返回的结果对象中,那就太好
这也将显着减少用于计算费用的服务器上的负载,因为消费者不再需要为任何单笔交易多次访问比特币节点(假设他们想要计算费用)
是的,我也想说费用应该显示在那里
最有用的评论
您将需要使用 getrawtransaction 然后进行数学计算。
所以以这个 txid 为例:e198d4b193644116d9df0b9d65c4346a9f4d6214a46ffba8c0b2fd6999eda314
现在你需要做的是计算费用的数量,就是查看vin里面并取vout数量。 所以在这个例子中,vout 数是 0。然后你去 vout 并将所有输出的值加在一起。
现在您必须对 vin txid 执行另一个 getrawtransaction。 在我们的例子中,这会给我们这个:
所以在这里,你必须寻找的是,在 vout 中,n 值等于你得到的前一个数字,所以在我们的例子中它是 0。你得到这个输出的值,即 7.04418967 BTC。 现在来计算费用,你用这个数字减去你之前得到的值,这给你:
费用 = 7.04418967 - (4.00000000 + 3.04192967)
费用 = 0.00226 BTC
希望这会帮助你。