Skip to content

Commit 5d9b530

Browse files
committed
Merge bitcoin/bitcoin#19888: rpc, test: Improve getblockstats for unspendables
d885bb2 test: Test exclusion of OP_RETURN from getblockstats (Fabian Jahr) ba9d288 test: Fix getblockstats test data generator (Fabian Jahr) 2ca5a49 rpc: Improve getblockstats (Fabian Jahr) cb94db1 validation, index: Add unspendable coinbase helper functions (Fabian Jahr) Pull request description: Fixes #19885 The genesis block does not have undo data saved to disk so the RPC errored because of that. ACKs for top commit: achow101: ACK d885bb2 aureleoules: ACK d885bb2 stickies-v: ACK d885bb2 Tree-SHA512: f37bda736ed605b7a41a81eeb4bfbb5d2b8518f847819e5d6a090548a61caf1455623e15165d72589ab3f4478252b00e7b624f9313ad6708cac06dd5edb62e9a
2 parents 2ce3d26 + d885bb2 commit 5d9b530

File tree

6 files changed

+115
-53
lines changed

6 files changed

+115
-53
lines changed

src/index/coinstatsindex.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,13 @@ bool CoinStatsIndex::CustomAppend(const interfaces::BlockInfo& block)
144144
}
145145
}
146146

147-
// TODO: Deduplicate BIP30 related code
148-
bool is_bip30_block{(block.height == 91722 && block.hash == uint256S("0x00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e")) ||
149-
(block.height == 91812 && block.hash == uint256S("0x00000000000af0aed4792b1acee3d966af36cf5def14935db8de83d6f9306f2f"))};
150-
151147
// Add the new utxos created from the block
152148
assert(block.data);
153149
for (size_t i = 0; i < block.data->vtx.size(); ++i) {
154150
const auto& tx{block.data->vtx.at(i)};
155151

156152
// Skip duplicate txid coinbase transactions (BIP30).
157-
if (is_bip30_block && tx->IsCoinBase()) {
153+
if (IsBIP30Unspendable(*pindex) && tx->IsCoinBase()) {
158154
m_total_unspendable_amount += block_subsidy;
159155
m_total_unspendables_bip30 += block_subsidy;
160156
continue;

src/rpc/blockchain.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,10 @@ static CBlockUndo GetUndoChecked(BlockManager& blockman, const CBlockIndex* pblo
601601
{
602602
AssertLockHeld(::cs_main);
603603
CBlockUndo blockUndo;
604+
605+
// The Genesis block does not have undo data
606+
if (pblockindex->nHeight == 0) return blockUndo;
607+
604608
if (blockman.IsBlockPruned(pblockindex)) {
605609
throw JSONRPCError(RPC_MISC_ERROR, "Undo data not available (pruned data)");
606610
}
@@ -1779,8 +1783,10 @@ static RPCHelpMan getblockstats()
17791783
{RPCResult::Type::NUM, "total_weight", /*optional=*/true, "Total weight of all non-coinbase transactions"},
17801784
{RPCResult::Type::NUM, "totalfee", /*optional=*/true, "The fee total"},
17811785
{RPCResult::Type::NUM, "txs", /*optional=*/true, "The number of transactions (including coinbase)"},
1782-
{RPCResult::Type::NUM, "utxo_increase", /*optional=*/true, "The increase/decrease in the number of unspent outputs"},
1786+
{RPCResult::Type::NUM, "utxo_increase", /*optional=*/true, "The increase/decrease in the number of unspent outputs (not discounting op_return and similar)"},
17831787
{RPCResult::Type::NUM, "utxo_size_inc", /*optional=*/true, "The increase/decrease in size for the utxo index (not discounting op_return and similar)"},
1788+
{RPCResult::Type::NUM, "utxo_increase_actual", /*optional=*/true, "The increase/decrease in the number of unspent outputs, not counting unspendables"},
1789+
{RPCResult::Type::NUM, "utxo_size_inc_actual", /*optional=*/true, "The increase/decrease in size for the utxo index, not counting unspendables"},
17841790
}},
17851791
RPCExamples{
17861792
HelpExampleCli("getblockstats", R"('"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"' '["minfeerate","avgfeerate"]')") +
@@ -1811,7 +1817,7 @@ static RPCHelpMan getblockstats()
18111817
const bool do_medianfee = do_all || stats.count("medianfee") != 0;
18121818
const bool do_feerate_percentiles = do_all || stats.count("feerate_percentiles") != 0;
18131819
const bool loop_inputs = do_all || do_medianfee || do_feerate_percentiles ||
1814-
SetHasKeys(stats, "utxo_size_inc", "totalfee", "avgfee", "avgfeerate", "minfee", "maxfee", "minfeerate", "maxfeerate");
1820+
SetHasKeys(stats, "utxo_increase", "utxo_increase_actual", "utxo_size_inc", "utxo_size_inc_actual", "totalfee", "avgfee", "avgfeerate", "minfee", "maxfee", "minfeerate", "maxfeerate");
18151821
const bool loop_outputs = do_all || loop_inputs || stats.count("total_out");
18161822
const bool do_calculate_size = do_mediantxsize ||
18171823
SetHasKeys(stats, "total_size", "avgtxsize", "mintxsize", "maxtxsize", "swtotal_size");
@@ -1833,7 +1839,9 @@ static RPCHelpMan getblockstats()
18331839
int64_t swtxs = 0;
18341840
int64_t total_size = 0;
18351841
int64_t total_weight = 0;
1842+
int64_t utxos = 0;
18361843
int64_t utxo_size_inc = 0;
1844+
int64_t utxo_size_inc_actual = 0;
18371845
std::vector<CAmount> fee_array;
18381846
std::vector<std::pair<CAmount, int64_t>> feerate_array;
18391847
std::vector<int64_t> txsize_array;
@@ -1846,7 +1854,18 @@ static RPCHelpMan getblockstats()
18461854
if (loop_outputs) {
18471855
for (const CTxOut& out : tx->vout) {
18481856
tx_total_out += out.nValue;
1849-
utxo_size_inc += GetSerializeSize(out, PROTOCOL_VERSION) + PER_UTXO_OVERHEAD;
1857+
1858+
size_t out_size = GetSerializeSize(out, PROTOCOL_VERSION) + PER_UTXO_OVERHEAD;
1859+
utxo_size_inc += out_size;
1860+
1861+
// The Genesis block and the repeated BIP30 block coinbases don't change the UTXO
1862+
// set counts, so they have to be excluded from the statistics
1863+
if (pindex.nHeight == 0 || (IsBIP30Repeat(pindex) && tx->IsCoinBase())) continue;
1864+
// Skip unspendable outputs since they are not included in the UTXO set
1865+
if (out.scriptPubKey.IsUnspendable()) continue;
1866+
1867+
++utxos;
1868+
utxo_size_inc_actual += out_size;
18501869
}
18511870
}
18521871

@@ -1888,7 +1907,9 @@ static RPCHelpMan getblockstats()
18881907
const CTxOut& prevoutput = coin.out;
18891908

18901909
tx_total_in += prevoutput.nValue;
1891-
utxo_size_inc -= GetSerializeSize(prevoutput, PROTOCOL_VERSION) + PER_UTXO_OVERHEAD;
1910+
size_t prevout_size = GetSerializeSize(prevoutput, PROTOCOL_VERSION) + PER_UTXO_OVERHEAD;
1911+
utxo_size_inc -= prevout_size;
1912+
utxo_size_inc_actual -= prevout_size;
18921913
}
18931914

18941915
CAmount txfee = tx_total_in - tx_total_out;
@@ -1948,6 +1969,8 @@ static RPCHelpMan getblockstats()
19481969
ret_all.pushKV("txs", (int64_t)block.vtx.size());
19491970
ret_all.pushKV("utxo_increase", outputs - inputs);
19501971
ret_all.pushKV("utxo_size_inc", utxo_size_inc);
1972+
ret_all.pushKV("utxo_increase_actual", utxos - inputs);
1973+
ret_all.pushKV("utxo_size_inc_actual", utxo_size_inc_actual);
19511974

19521975
if (do_all) {
19531976
return ret_all;

src/validation.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2080,8 +2080,7 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
20802080
// Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the
20812081
// two in the chain that violate it. This prevents exploiting the issue against nodes during their
20822082
// initial block download.
2083-
bool fEnforceBIP30 = !((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256S("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) ||
2084-
(pindex->nHeight==91880 && pindex->GetBlockHash() == uint256S("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721")));
2083+
bool fEnforceBIP30 = !IsBIP30Repeat(*pindex);
20852084

20862085
// Once BIP34 activated it was not possible to create new duplicate coinbases and thus other than starting
20872086
// with the 2 existing duplicate coinbase pairs, not possible to create overwriting txs. But by the
@@ -5313,3 +5312,15 @@ Chainstate& ChainstateManager::ActivateExistingSnapshot(CTxMemPool* mempool, uin
53135312
m_active_chainstate = m_snapshot_chainstate.get();
53145313
return *m_snapshot_chainstate;
53155314
}
5315+
5316+
bool IsBIP30Repeat(const CBlockIndex& block_index)
5317+
{
5318+
return (block_index.nHeight==91842 && block_index.GetBlockHash() == uint256S("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) ||
5319+
(block_index.nHeight==91880 && block_index.GetBlockHash() == uint256S("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721"));
5320+
}
5321+
5322+
bool IsBIP30Unspendable(const CBlockIndex& block_index)
5323+
{
5324+
return (block_index.nHeight==91722 && block_index.GetBlockHash() == uint256S("0x00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e")) ||
5325+
(block_index.nHeight==91812 && block_index.GetBlockHash() == uint256S("0x00000000000af0aed4792b1acee3d966af36cf5def14935db8de83d6f9306f2f"));
5326+
}

src/validation.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,4 +1066,10 @@ bool DeploymentEnabled(const ChainstateManager& chainman, DEP dep)
10661066
*/
10671067
const AssumeutxoData* ExpectedAssumeutxo(const int height, const CChainParams& params);
10681068

1069+
/** Identifies blocks that overwrote an existing coinbase output in the UTXO set (see BIP30) */
1070+
bool IsBIP30Repeat(const CBlockIndex& block_index);
1071+
1072+
/** Identifies blocks which coinbase output was subsequently overwritten in the UTXO set (see BIP30) */
1073+
bool IsBIP30Unspendable(const CBlockIndex& block_index);
1074+
10691075
#endif // BITCOIN_VALIDATION_H

test/functional/data/rpc_getblockstats.json

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@
102102
"00000020f44e7a48b9f221af95f3295c8dcefc5358934a68dc79e2933dc0794b350cad0a90fad2cd50b41d4ef45e76c2a456b98c180632bb4b44e0cd18ce90679fe54e552b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401630101ffffffff0200f2052a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000",
103103
"0000002087454276cce83f4d19e0120f6e9728ac5905f7adaf6b27e3f5bbe43ab823f85db7d1f44666531483df3d67c15f2c231718ad93b63b851dce5ff4c4a67f524ffa2b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401640101ffffffff0200f2052a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000",
104104
"000000202cdc3e99f07a80252dd6097faa0eddf3f2dde5ae390610e0bca94ecc25931551d31fceb8fe0a682f6017ca3dbb582f3a2f06e5d99ec99c42c8a744dd4c9216b82b4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401650101ffffffff0200f2052a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000",
105-
"000000209b3ace9bd510918d20e87518c0cf5976cab3e28cc7af41259a89c6dd7668a32922808b8a082be71bcd6152cb8fd223650b5579a41344ba749e4d17b9bf211a9e2b4ae75affff7f200000000002020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401660101ffffffff026c03062a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9edb85d8f3c122c43a72f1e0dd122c8f7af040aa0b0a46001621110fb37818021510120000000000000000000000000000000000000000000000000000000000000000000000000020000000128394022bf44bff30d7399cb5a16e3b94fed67dc174c2e1d77df91bad5a51cb3000000006a47304402201c16d06a5c4353168b3881071aea7d1eb4d88eedfea53a9d6af9abb56da9060002205abf3ae535f1f1b5cfe8ba955535c2b20ac003e7d7720c5b7d2640ac2a04d19001210227d85ba011276cf25b51df6a188b75e604b38770a462b2d0e9fb2fc839ef5d3ffeffffff0294b89a3b000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac00286bee0000000017a91452bab4f229415d0dc5c6d30b162f93a1a0cac5958765000000",
106-
"000000200fa168b50a79ad24378a6b0f96e4c9f4ccb657a2663320d5fc1efd8ee7caa10ab42a31c444f2153387530a0979d4dc3dcc134b394c821227b8abff930c03c8412b4ae75affff7f200200000004020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401670101ffffffff02e015072a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ed20376d4bc90f9c689850eec3603cda658ba6295241730473ceb0e970b8d594150120000000000000000000000000000000000000000000000000000000000000000000000000020000000191e549a6cc852bbf1d3f11144b1a34079f64305e6971d2e685d2b40cd386e8a6000000006a47304402200bf62021c0a9a47ced8eba1e0998f5c71b2950763198d83ad284bd791241dbb00220446a05b7c35e7458924de88a8dcccab1ec6a106aa005345e55b482d8eb66337301210227d85ba011276cf25b51df6a188b75e604b38770a462b2d0e9fb2fc839ef5d3ffeffffff02acdbf405000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac94d7a4350000000017a914dfa6f0b17d2c64962c94203e744a9d4179ed22c18766000000020000000112d2f07672102dc6f099c4be308f598e4c4da1a7e0cb462ae14f0444525a1332000000006a47304402200a6a2f544f3f9d299608a7c745e2326de176fb1cac03ae3e74943f4250b8896e02205023a5b4faff99865bf91f1263605a502c723628be9240c0b7bec81d2ed106f101210227d85ba011276cf25b51df6a188b75e604b38770a462b2d0e9fb2fc839ef5d3ffeffffff0200ca9a3b000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac94166bee0000000017a914152cc82f7944f5c416de7dbffb052f7081765d7987660000000200000000010191e549a6cc852bbf1d3f11144b1a34079f64305e6971d2e685d2b40cd386e8a601000000171600147cc872ad7350c37fecab9c4c6d9f08aceb53bdb8feffffff02005ed0b20000000017a914aab1c8c53fe62e283a53efa28097709f4f2ed37b87e0bc9a3b000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0247304402201b4476f238ed5d515bfcd6927d0d008a4993770763eca73e3ee66f69971831d902200f5215a6dfd90391dd63462cfdf69804fe31224c309ec9c38d33a04dce71c0ee0121028c9d2955a95301b699db62e97d54bf0a91feb44e5cd94bbf5b62f1df57fb643966000000"
105+
"000000209b3ace9bd510918d20e87518c0cf5976cab3e28cc7af41259a89c6dd7668a329f03ef4716ad5d88bccfd71088bf2ec3eb5b32e0ff60f35f9becd73052bfa8af12b4ae75affff7f200000000002020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401660101ffffffff025803062a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9edb11910e4e0ee6ee6d6bad42736999d1eba649243dc781438e5ef845c7227aaad0120000000000000000000000000000000000000000000000000000000000000000000000000020000000128394022bf44bff30d7399cb5a16e3b94fed67dc174c2e1d77df91bad5a51cb3000000006a47304402200650c6c50bd4952ca13b7aa37d458a36628434bbb968701063cdd36d0725e36c02202e059ccf7a4a049de028c4f140e543baa7e69ea3663e3d1fdfbc8ba7247e82f901210227d85ba011276cf25b51df6a188b75e604b38770a462b2d0e9fb2fc839ef5d3ffeffffff02a8b89a3b000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac00286bee0000000016001423838e991caedd69289d9dac88ca423cca683a2265000000",
106+
"0000002061597bf3305ee2334b5d7fec136c2064b69d14955b50cd0b81f49ac33d88e506d80731ce60c2f275d29539a4d04c7e8c72aa4ade3c9baec24881a581fc524c6a2b4ae75affff7f200000000005020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401670101ffffffff023840072a010000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ed89a3c65f40921b14168368cf4775a710ad17b613cedcff001f1f1ca3c863cc11012000000000000000000000000000000000000000000000000000000000000000000000000002000000000101bb475ac72ba1a45a96be584a689d6d0ace820d9587b0db53dc40a15555b9be770100000000feffffff02c0be9a3b000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac005ed0b200000000160014a57f6871c70569e0543322614c5c85438b796a900247304402207893b5466cdbf9cdedcc73fb8e10e01c4dd9aac4345031ef0c35d91e82ff5fd602207f0e1d7e4270a532060fd1e6ad7881d18acb173fd4fd1d61f3c8ff6707bdb972012103bb4c79ca594b19bbec7ee6302af0ef4191345fa7f03a30ed4e042aeed680924b6600000002000000000101e6a996cbac10b2d6b2bb2796a4ebf639ee21b136e06c7d8c6bc62b7cb4a311870100000000feffffff0200ca9a3b000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88acc088357700000000160014c48ea35298422796eb75ee9a04ebada66780083902473044022062963ff9f1f0d2c885060c083b97ddd67bd6e8a7daaed6578a62c1f905fd31a6022001836efe75bbce64d29700f5568aed78ce68f098ef0b8efdad0679e2f6c0ceb5012102228c4d459ce647b63b2681597a6e8391e4b5afab147f90747184a0893e4934c26600000002000000000101c654a35d86b4c3112ae9ec75e3bc271e0b8f928620386fdaf9517e8a9b511d850100000000feffffff024038f505000000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88acc0a73f7100000000160014cb1049e20cebfe756d657af0d47a3357c1db3c9702473044022024728eb27e884d08b2b95e670fd58c0e10106a18bc9e01f753f9ae474aa2c95e02201d5abe91302b373507dce1fd2f4b95ddc36e21d23eda6c476cc9efea80338ef90121036be02fd68622ce6740f0d028059af96a310c23c675f044732171df6f64f0fcb2660000000200000000010135c4ee1a780d8279ea7c79d3ad6fbb39315a13e6b51dd51f49db6e2f4796bada0100000000feffffff020000000000000000036a0121c8183f71000000001600147ea4d830ca77c20a23155a176a1472613dc4e7840247304402202db3527431e09ca8034d207134d79fc063939bd402286dd8b3872de3b2a746b402207faae5fb8838e6877822a9209fe2e81d4be4a69ce8164215e03f9b92d75e94f90121024d456d37df6f3436ee1685b78d90d2d24c4dd8c602d5f41405fe7f449b43415f00000000"
107107
],
108108
"mocktime": 1525107225,
109109
"stats": [
@@ -142,13 +142,15 @@
142142
"totalfee": 0,
143143
"txs": 1,
144144
"utxo_increase": 2,
145-
"utxo_size_inc": 163
145+
"utxo_increase_actual": 1,
146+
"utxo_size_inc": 163,
147+
"utxo_size_inc_actual": 75
146148
},
147149
{
148-
"avgfee": 4460,
150+
"avgfee": 4440,
149151
"avgfeerate": 20,
150-
"avgtxsize": 223,
151-
"blockhash": "0aa1cae78efd1efcd5203366a257b6ccf4c9e4960f6b8a3724ad790ab568a10f",
152+
"avgtxsize": 222,
153+
"blockhash": "06e5883dc39af4810bcd505b95149db664206c13ec7f5d4b33e25e30f37b5961",
152154
"feerate_percentiles": [
153155
20,
154156
20,
@@ -158,65 +160,69 @@
158160
],
159161
"height": 102,
160162
"ins": 1,
161-
"maxfee": 4460,
163+
"maxfee": 4440,
162164
"maxfeerate": 20,
163-
"maxtxsize": 223,
164-
"medianfee": 4460,
165+
"maxtxsize": 222,
166+
"medianfee": 4440,
165167
"mediantime": 1525107242,
166-
"mediantxsize": 223,
167-
"minfee": 4460,
168+
"mediantxsize": 222,
169+
"minfee": 4440,
168170
"minfeerate": 20,
169-
"mintxsize": 223,
171+
"mintxsize": 222,
170172
"outs": 4,
171173
"subsidy": 5000000000,
172174
"swtotal_size": 0,
173175
"swtotal_weight": 0,
174176
"swtxs": 0,
175177
"time": 1525107243,
176-
"total_out": 4999995540,
177-
"total_size": 223,
178-
"total_weight": 892,
179-
"totalfee": 4460,
178+
"total_out": 4999995560,
179+
"total_size": 222,
180+
"total_weight": 888,
181+
"totalfee": 4440,
180182
"txs": 2,
181183
"utxo_increase": 3,
182-
"utxo_size_inc": 236
184+
"utxo_increase_actual": 2,
185+
"utxo_size_inc": 235,
186+
"utxo_size_inc_actual": 147
183187
},
184188
{
185-
"avgfee": 24906,
186-
"avgfeerate": 121,
187-
"avgtxsize": 231,
188-
"blockhash": "53e416e2538bc783c42a7aea566e884321afed893e9e58cf356d6429759dfa46",
189+
"avgfee": 21390,
190+
"avgfeerate": 155,
191+
"avgtxsize": 219,
192+
"blockhash": "7474991c2ae3c94c4813d75b4c752028304b773dd4dce8d460dfa2d1e7b542a3",
189193
"feerate_percentiles": [
190194
20,
191195
20,
192196
20,
193-
300,
194-
300
197+
301,
198+
301
195199
],
196200
"height": 103,
197-
"ins": 3,
198-
"maxfee": 66900,
199-
"maxfeerate": 300,
200-
"maxtxsize": 249,
201-
"medianfee": 4460,
201+
"ins": 4,
202+
"maxfee": 43200,
203+
"maxfeerate": 301,
204+
"maxtxsize": 225,
205+
"medianfee": 19740,
202206
"mediantime": 1525107243,
203-
"mediantxsize": 223,
204-
"minfee": 3360,
207+
"mediantxsize": 225,
208+
"minfee": 2880,
205209
"minfeerate": 20,
206-
"mintxsize": 223,
207-
"outs": 8,
210+
"mintxsize": 203,
211+
"outs": 10,
208212
"subsidy": 5000000000,
209-
"swtotal_size": 249,
210-
"swtotal_weight": 669,
211-
"swtxs": 1,
213+
"swtotal_size": 878,
214+
"swtotal_weight": 2204,
215+
"swtxs": 4,
212216
"time": 1525107243,
213-
"total_out": 9999920820,
214-
"total_size": 695,
215-
"total_weight": 2453,
216-
"totalfee": 74720,
217-
"txs": 4,
218-
"utxo_increase": 5,
219-
"utxo_size_inc": 384
217+
"total_out": 10899908680,
218+
"total_size": 878,
219+
"total_weight": 2204,
220+
"totalfee": 85560,
221+
"txs": 5,
222+
"utxo_increase": 6,
223+
"utxo_increase_actual": 4,
224+
"utxo_size_inc": 441,
225+
"utxo_size_inc_actual": 300
220226
}
221227
]
222228
}

0 commit comments

Comments
 (0)