From 1b0424530a8e2d099aca51d4e276174b2e2fd8dc Mon Sep 17 00:00:00 2001 From: Jeff Frontz Date: Fri, 3 Mar 2023 19:42:45 -0500 Subject: [PATCH 1/6] Remove erroneous PAK-checking info from testproposedblock help --- src/rpc/mining.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 6ed4612ce04..758d37a0ed2 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -1716,7 +1716,7 @@ static RPCHelpMan testproposedblock() "\nChecks a block proposal for validity, and that it extends chaintip\n", { {"blockhex", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The hex-encoded block from getnewblockhex"}, - {"acceptnonstd", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED_NAMED_ARG, "If set false, returns error if block contains non-standard transaction. Default is set via `-acceptnonstdtxn`. If PAK enforcement is set, block commitment mismatches with configuration PAK lists are rejected as well."}, + {"acceptnonstd", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED_NAMED_ARG, "If set false, returns error if block contains non-standard transaction. Default is set via `-acceptnonstdtxn`."}, }, RPCResult{RPCResult::Type::NONE, "", ""}, RPCExamples{ From cfb7565520a13340f50b70400c3af121ccec0761 Mon Sep 17 00:00:00 2001 From: Andrea Bonel Date: Wed, 15 Mar 2023 09:37:55 -0300 Subject: [PATCH 2/6] Elements-qt: Avoid mixing assets when using all the available balance --- src/qt/sendcoinsdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 5180e66e8d7..376b00bbbf0 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -781,7 +781,7 @@ void SendCoinsDialog::useAvailableBalance(SendCoinsEntry* entry) CAmount amount = valueFor(model->wallet().getAvailableBalance(*m_coin_control), ::policyAsset); for (int i = 0; i < ui->entries->count(); ++i) { SendCoinsEntry* e = qobject_cast(ui->entries->itemAt(i)->widget()); - if (e && !e->isHidden() && e != entry) { + if (e && !e->isHidden() && e != entry && e->getValue().asset == ::policyAsset) { amount -= e->getValue().asset_amount; } } From 3c8d3a2a7dd5f6d64600e574f8c92dd34382649b Mon Sep 17 00:00:00 2001 From: Pablo Greco Date: Wed, 15 Mar 2023 21:29:44 -0300 Subject: [PATCH 3/6] RPC: Avoid assert by keeping a flag to identify trimmed dynafed blocks --- src/chain.h | 9 +++++++++ src/rpc/blockchain.cpp | 2 +- src/txdb.cpp | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/chain.h b/src/chain.h index 74cc29fb80d..231113534ae 100644 --- a/src/chain.h +++ b/src/chain.h @@ -200,6 +200,7 @@ class CBlockIndex std::optional m_signblock_witness{}; bool m_trimmed{false}; + bool m_trimmed_dynafed_block{false}; friend class CBlockTreeDB; @@ -210,6 +211,7 @@ class CBlockIndex void trim() { assert_untrimmed(); m_trimmed = true; + m_trimmed_dynafed_block = !m_dynafed_params.value().IsNull(); proof = std::nullopt; m_dynafed_params = std::nullopt; m_signblock_witness = std::nullopt; @@ -228,6 +230,13 @@ class CBlockIndex return proof.value(); } + const bool dynafed_block() const { + if (m_trimmed) { + return m_trimmed_dynafed_block; + } + return !m_dynafed_params.value().IsNull(); + } + const DynaFedParams& dynafed_params() const { assert_untrimmed(); return m_dynafed_params.value(); diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 9c9ef7b5b43..899d3cc7b7e 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -248,7 +248,7 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex result.pushKV("difficulty", GetDifficulty(blockindex)); result.pushKV("chainwork", blockindex->nChainWork.GetHex()); } else { - if (blockindex->dynafed_params().IsNull()) { + if (!blockindex->dynafed_block()) { if (blockindex->trimmed()) { result.pushKV("signblock_witness_asm", ""); result.pushKV("signblock_witness_hex", ""); diff --git a/src/txdb.cpp b/src/txdb.cpp index ae85840111b..a679b0f5429 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -389,6 +389,7 @@ bool CBlockTreeDB::LoadBlockIndexGuts(const Consensus::Params& consensusParams, } } else { pindexNew->m_trimmed = true; + pindexNew->m_trimmed_dynafed_block = !diskindex.m_dynafed_params.value().IsNull(); } pcursor->Next(); From 8f16e00ee2e3bba8874908d1d4eb16ca1f8f7e14 Mon Sep 17 00:00:00 2001 From: Pablo Greco Date: Thu, 16 Mar 2023 09:21:44 -0300 Subject: [PATCH 4/6] Avoid reloading the block before calling blockheaderToJSON, the loaded block is incomplete and makes it crash --- src/rpc/blockchain.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 899d3cc7b7e..d935292e321 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -280,13 +280,7 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex UniValue blockToJSON(const CBlock& block, const CBlockIndex* tip, const CBlockIndex* blockindex, bool txDetails) { - UniValue result; - if (blockindex->trimmed()) { - CBlockIndex tmp = CBlockIndex(block.GetBlockHeader()); - result = blockheaderToJSON(tip, &tmp); - } else { - result = blockheaderToJSON(tip, blockindex); - } + UniValue result = blockheaderToJSON(tip, blockindex); result.pushKV("strippedsize", (int)::GetSerializeSize(block, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS)); result.pushKV("size", (int)::GetSerializeSize(block, PROTOCOL_VERSION)); From 7a98c29c6e994c697cc9d1e864e5247e0ea15bcc Mon Sep 17 00:00:00 2001 From: Andrea Bonel Date: Wed, 15 Mar 2023 10:38:31 -0300 Subject: [PATCH 5/6] Elements-qt: Use available balance from the currently selected asset --- src/qt/sendcoinsdialog.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 376b00bbbf0..506a2c1fdad 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -777,21 +777,25 @@ void SendCoinsDialog::useAvailableBalance(SendCoinsEntry* entry) // Include watch-only for wallets without private key m_coin_control->fAllowWatchOnly = model->wallet().privateKeysDisabled() && !model->wallet().hasExternalSigner(); + SendAssetsRecipient recipient = entry->getValue(); // Calculate available amount to send. - CAmount amount = valueFor(model->wallet().getAvailableBalance(*m_coin_control), ::policyAsset); + CAmount amount = valueFor(model->wallet().getAvailableBalance(*m_coin_control), recipient.asset); for (int i = 0; i < ui->entries->count(); ++i) { SendCoinsEntry* e = qobject_cast(ui->entries->itemAt(i)->widget()); - if (e && !e->isHidden() && e != entry && e->getValue().asset == ::policyAsset) { + if (e && !e->isHidden() && e != entry && e->getValue().asset == recipient.asset) { amount -= e->getValue().asset_amount; } } if (amount > 0) { - entry->checkSubtractFeeFromAmount(); - entry->setAmount(amount); + if (recipient.asset == ::policyAsset) { + entry->checkSubtractFeeFromAmount(); + } + recipient.asset_amount = amount; } else { - entry->setAmount(0); + recipient.asset_amount = 0; } + entry->setValue(recipient); } void SendCoinsDialog::updateFeeSectionControls() From ad10204cc8e3e1faf15bdd05582fed54a425434a Mon Sep 17 00:00:00 2001 From: Pablo Greco Date: Fri, 17 Mar 2023 12:44:35 -0300 Subject: [PATCH 6/6] Bump version to 22.1.1-rc2 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 81b993d140f..91ef47d1a57 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ AC_PREREQ([2.69]) define(_CLIENT_VERSION_MAJOR, 22) define(_CLIENT_VERSION_MINOR, 1) define(_CLIENT_VERSION_BUILD, 1) -define(_CLIENT_VERSION_RC, 1) +define(_CLIENT_VERSION_RC, 2) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2023) define(_COPYRIGHT_HOLDERS,[The %s developers])