mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-12 11:19:08 -05:00
Merge #16647: rpc: add weight to getmempoolentry output
17d178fb94
doc: add release-notes for getmempoolentry weight field addition (fanquake)9c9cc2bd20
qa: Add RPC tests for weight in mempool entry (Daniel Edgecumbe)54aaa7883c
RPC: add weight to mempool entry output (Daniel Edgecumbe) Pull request description: Rebase of #14649 (which itself was a rebase of #11256). Squash the two test related commits, and swapped out `size` usage for `vsize`. Added a commit with release notes. ACKs for top commit: emilengler: Concept ACK17d178f
instagibbs: utACK17d178fb94
meshcollider: utACK17d178fb94
Tree-SHA512: 1d354c9837e0ad0afa40325de9329b9e62688d5eab4d9e1cf9b46d8ae29d08f42d903ab37a41751c2ea8f9034231b21095881b1f5d911cb542b8b06bc85dc7cd
This commit is contained in:
commit
70b12af87e
3 changed files with 27 additions and 1 deletions
3
doc/release-notes-16647.md
Normal file
3
doc/release-notes-16647.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
RPC changes
|
||||||
|
-----------
|
||||||
|
`getmempoolentry` now provides a `weight` field containing the transaction weight as defined in BIP 141.
|
|
@ -374,6 +374,7 @@ static std::string EntryDescriptionString()
|
||||||
return " \"vsize\" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted.\n"
|
return " \"vsize\" : n, (numeric) virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted.\n"
|
||||||
" \"size\" : n, (numeric) (DEPRECATED) same as vsize. Only returned if bitcoind is started with -deprecatedrpc=size\n"
|
" \"size\" : n, (numeric) (DEPRECATED) same as vsize. Only returned if bitcoind is started with -deprecatedrpc=size\n"
|
||||||
" size will be completely removed in v0.20.\n"
|
" size will be completely removed in v0.20.\n"
|
||||||
|
" \"weight\" : n, (numeric) transaction weight as defined in BIP 141.\n"
|
||||||
" \"fee\" : n, (numeric) transaction fee in " + CURRENCY_UNIT + " (DEPRECATED)\n"
|
" \"fee\" : n, (numeric) transaction fee in " + CURRENCY_UNIT + " (DEPRECATED)\n"
|
||||||
" \"modifiedfee\" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED)\n"
|
" \"modifiedfee\" : n, (numeric) transaction fee with fee deltas used for mining priority (DEPRECATED)\n"
|
||||||
" \"time\" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT\n"
|
" \"time\" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT\n"
|
||||||
|
@ -413,6 +414,7 @@ static void entryToJSON(const CTxMemPool& pool, UniValue& info, const CTxMemPool
|
||||||
|
|
||||||
info.pushKV("vsize", (int)e.GetTxSize());
|
info.pushKV("vsize", (int)e.GetTxSize());
|
||||||
if (IsDeprecatedRPCEnabled("size")) info.pushKV("size", (int)e.GetTxSize());
|
if (IsDeprecatedRPCEnabled("size")) info.pushKV("size", (int)e.GetTxSize());
|
||||||
|
info.pushKV("weight", (int)e.GetTxWeight());
|
||||||
info.pushKV("fee", ValueFromAmount(e.GetFee()));
|
info.pushKV("fee", ValueFromAmount(e.GetFee()));
|
||||||
info.pushKV("modifiedfee", ValueFromAmount(e.GetModifiedFee()));
|
info.pushKV("modifiedfee", ValueFromAmount(e.GetModifiedFee()));
|
||||||
info.pushKV("time", e.GetTime());
|
info.pushKV("time", e.GetTime());
|
||||||
|
|
|
@ -226,6 +226,16 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
assert tx.wit.is_null() # This should not be a segwit input
|
assert tx.wit.is_null() # This should not be a segwit input
|
||||||
assert txid1 in self.nodes[0].getrawmempool()
|
assert txid1 in self.nodes[0].getrawmempool()
|
||||||
|
|
||||||
|
tx1_hex = self.nodes[0].gettransaction(txid1)['hex']
|
||||||
|
tx1 = FromHex(CTransaction(), tx1_hex)
|
||||||
|
|
||||||
|
# Check that wtxid is properly reported in mempool entry (txid1)
|
||||||
|
assert_equal(int(self.nodes[0].getmempoolentry(txid1)["wtxid"], 16), tx1.calc_sha256(True))
|
||||||
|
|
||||||
|
# Check that weight and vsize are properly reported in mempool entry (txid1)
|
||||||
|
assert_equal(self.nodes[0].getmempoolentry(txid1)["vsize"], (self.nodes[0].getmempoolentry(txid1)["weight"] + 3) // 4)
|
||||||
|
assert_equal(self.nodes[0].getmempoolentry(txid1)["weight"], len(tx1.serialize_without_witness())*3 + len(tx1.serialize_with_witness()))
|
||||||
|
|
||||||
# Now create tx2, which will spend from txid1.
|
# Now create tx2, which will spend from txid1.
|
||||||
tx = CTransaction()
|
tx = CTransaction()
|
||||||
tx.vin.append(CTxIn(COutPoint(int(txid1, 16), 0), b''))
|
tx.vin.append(CTxIn(COutPoint(int(txid1, 16), 0), b''))
|
||||||
|
@ -235,6 +245,13 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
tx = FromHex(CTransaction(), tx2_hex)
|
tx = FromHex(CTransaction(), tx2_hex)
|
||||||
assert not tx.wit.is_null()
|
assert not tx.wit.is_null()
|
||||||
|
|
||||||
|
# Check that wtxid is properly reported in mempool entry (txid2)
|
||||||
|
assert_equal(int(self.nodes[0].getmempoolentry(txid2)["wtxid"], 16), tx.calc_sha256(True))
|
||||||
|
|
||||||
|
# Check that weight and vsize are properly reported in mempool entry (txid2)
|
||||||
|
assert_equal(self.nodes[0].getmempoolentry(txid2)["vsize"], (self.nodes[0].getmempoolentry(txid2)["weight"] + 3) // 4)
|
||||||
|
assert_equal(self.nodes[0].getmempoolentry(txid2)["weight"], len(tx.serialize_without_witness())*3 + len(tx.serialize_with_witness()))
|
||||||
|
|
||||||
# Now create tx3, which will spend from txid2
|
# Now create tx3, which will spend from txid2
|
||||||
tx = CTransaction()
|
tx = CTransaction()
|
||||||
tx.vin.append(CTxIn(COutPoint(int(txid2, 16), 0), b""))
|
tx.vin.append(CTxIn(COutPoint(int(txid2, 16), 0), b""))
|
||||||
|
@ -251,9 +268,13 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
assert txid2 in template_txids
|
assert txid2 in template_txids
|
||||||
assert txid3 in template_txids
|
assert txid3 in template_txids
|
||||||
|
|
||||||
# Check that wtxid is properly reported in mempool entry
|
# Check that wtxid is properly reported in mempool entry (txid3)
|
||||||
assert_equal(int(self.nodes[0].getmempoolentry(txid3)["wtxid"], 16), tx.calc_sha256(True))
|
assert_equal(int(self.nodes[0].getmempoolentry(txid3)["wtxid"], 16), tx.calc_sha256(True))
|
||||||
|
|
||||||
|
# Check that weight and vsize are properly reported in mempool entry (txid3)
|
||||||
|
assert_equal(self.nodes[0].getmempoolentry(txid3)["vsize"], (self.nodes[0].getmempoolentry(txid3)["weight"] + 3) // 4)
|
||||||
|
assert_equal(self.nodes[0].getmempoolentry(txid3)["weight"], len(tx.serialize_without_witness())*3 + len(tx.serialize_with_witness()))
|
||||||
|
|
||||||
# Mine a block to clear the gbt cache again.
|
# Mine a block to clear the gbt cache again.
|
||||||
self.nodes[0].generate(1)
|
self.nodes[0].generate(1)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue