From cf4136b3b037632db41aa143a07f23b9568657fa Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Mon, 20 Sep 2021 20:46:45 +0000 Subject: [PATCH] SIGHASH_RANGEPROOF and asset issuance rangeproofs --- src/validation.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/validation.cpp b/src/validation.cpp index 4f84f79bb3..24605b7bb6 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -750,6 +750,18 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) return false; // state filled in by CheckTxInputs } + // ELEMENTS: extra policy check for consistency between issuances and their rangeproof + if (fRequireStandard) { + for (unsigned i = 0; i < std::min(tx.witness.vtxinwit.size(), tx.vin.size()); i++) { + if (!tx.vin[i].assetIssuance.nAmount.IsCommitment() && !tx.witness.vtxinwit[i].vchIssuanceAmountRangeproof.empty()) { + return state.Invalid(TxValidationResult::TX_INPUTS_NOT_STANDARD, "bad-txin-extra-issuance-rangeproof"); + } + if (!tx.vin[i].assetIssuance.nInflationKeys.IsCommitment() && !tx.witness.vtxinwit[i].vchInflationKeysRangeproof.empty()) { + return state.Invalid(TxValidationResult::TX_INPUTS_NOT_STANDARD, "bad-txin-extra-inflation-rangeproof"); + } + } + } + // Check for non-standard pay-to-script-hash in inputs const auto& params = args.m_chainparams.GetConsensus(); auto taproot_state = VersionBitsState(::ChainActive().Tip(), params, Consensus::DEPLOYMENT_TAPROOT, versionbitscache);