diff --git a/src/blind.cpp b/src/blind.cpp index eec35f8c07..0afc87bd88 100644 --- a/src/blind.cpp +++ b/src/blind.cpp @@ -125,7 +125,7 @@ int BlindOutputs(std::vector& input_blinding_factors, const std::vecto CTxOut& out = tx.vout[nOut]; // Wallet only understands all-blinded or all-unblinded assert((output_blinding_factors[nOut] != uint256()) == !out.nValue.IsAmount()); - assert(out.nValue.IsAmount() == out.nAsset.IsAsset()); + assert(out.nValue.IsAmount() == out.nAsset.IsExplicit()); assert(out.nAsset.IsCommitment() == !out.nAsset.vchSurjectionproof.empty()); if (output_blinding_factors[nOut] != uint256()) { assert(output_asset_blinding_factors[nOut] != uint256()); diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 77d9549365..2e3de70ba5 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -73,7 +73,7 @@ CTxOut::CTxOut(const CTxOutAsset& nAssetIn, const CTxOutValue& nValueIn, CScript std::string CTxOut::ToString() const { std::string strAsset; - if (nAsset.IsAsset()) + if (nAsset.IsExplicit()) strAsset = strprintf("nAsset=%s, ", nAsset.GetAsset().GetHex()); if (nAsset.IsCommitment()) strAsset = std::string("nAsset=UNKNOWN, "); diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 450c5d55f1..7f273f9b25 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -74,13 +74,13 @@ public: void SetNull(); - bool IsAsset() const + bool IsExplicit() const { return vchAssetTag.size()==nAssetTagSize && vchAssetTag[0]==1; } const CAsset& GetAsset() const { - assert(IsAsset()); + assert(IsExplicit()); return *reinterpret_cast(&vchAssetTag[1]); } @@ -252,7 +252,7 @@ public: { if (!nValue.IsAmount()) return false; // FIXME - if (!nAsset.IsAsset() || nAsset.GetAsset() != BITCOINID) + if (!nAsset.IsExplicit() || nAsset.GetAsset() != BITCOINID) return false; //Withdrawlocks are evaluated at a higher, static feerate //to ensure peg-outs are IsStandard on mainchain @@ -264,7 +264,7 @@ public: bool IsFee() const { CAsset asset; - if (scriptPubKey == CScript() && nValue.IsAmount() && nAsset.IsAsset()) + if (scriptPubKey == CScript() && nValue.IsAmount() && nAsset.IsExplicit()) return true; return false; } diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 7f2cc2e88a..991012cf0b 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -144,7 +144,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) } } const CTxOutAsset& asset = txout.nAsset; - if (asset.IsAsset()) { + if (asset.IsExplicit()) { out.push_back(Pair("asset", asset.GetAsset().GetHex())); } else if (asset.IsCommitment()) { @@ -774,7 +774,7 @@ UniValue blindrawtransaction(const JSONRPCRequest& request) } input_blinds.push_back(it->second.GetBlindingFactor(tx.vin[nIn].prevout.n)); input_asset_blinds.push_back(it->second.GetAssetBlindingFactor(tx.vin[nIn].prevout.n)); - if (it->second.tx->vout[tx.vin[nIn].prevout.n].nAsset.IsAsset()) { + if (it->second.tx->vout[tx.vin[nIn].prevout.n].nAsset.IsExplicit()) { input_assets.push_back(it->second.tx->vout[tx.vin[nIn].prevout.n].nAsset.GetAsset()); } else { diff --git a/src/validation.cpp b/src/validation.cpp index 7181666900..f2112ffaa1 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -683,7 +683,7 @@ bool VerifyAmounts(const CCoinsViewCache& cache, const CTransaction& tx, std::ve if (val.IsNull() || asset.IsNull()) return false; - if (asset.IsAsset()) { + if (asset.IsExplicit()) { ret = secp256k1_generator_generate(secp256k1_ctx_verify_amounts, &gen, asset.GetAsset().begin()); assert(ret != 0); } @@ -726,7 +726,7 @@ bool VerifyAmounts(const CCoinsViewCache& cache, const CTransaction& tx, std::ve if (val.vchNonceCommitment.size() > CTxOutValue::nCommittedSize || val.vchRangeproof.size() > 5000) return false; - if (asset.IsAsset()) { + if (asset.IsExplicit()) { ret = secp256k1_generator_generate(secp256k1_ctx_verify_amounts, &gen, asset.GetAsset().begin()); assert(ret != 0); } @@ -783,7 +783,7 @@ bool VerifyAmounts(const CCoinsViewCache& cache, const CTransaction& tx, std::ve for (size_t i = 0; i < tx.vin.size(); i++) { const CTxOutAsset& asset = cache.GetOutputFor(tx.vin[i]).nAsset; - if (asset.IsAsset()) { + if (asset.IsExplicit()) { ret = secp256k1_generator_generate(secp256k1_ctx_verify_amounts, &ephemeral_input_tags[i], asset.GetAsset().begin()); assert(ret != 0); } @@ -799,7 +799,7 @@ bool VerifyAmounts(const CCoinsViewCache& cache, const CTransaction& tx, std::ve { const CTxOutAsset& asset = tx.vout[i].nAsset; //No need for surjective proof - if (asset.IsAsset()) { + if (asset.IsExplicit()) { assert(asset.vchSurjectionproof.size() == 0); continue; } @@ -826,7 +826,7 @@ bool VerifyCoinbaseAmount(const CTransaction& tx, const CAmountMap& mapFees) assert(tx.IsCoinBase()); CAmountMap remaining = mapFees; for (unsigned int i = 0; i < tx.vout.size(); i++) { - if (!tx.vout[i].nValue.IsAmount() || !tx.vout[i].nAsset.IsAsset()) + if (!tx.vout[i].nValue.IsAmount() || !tx.vout[i].nAsset.IsExplicit()) return false; remaining[tx.vout[i].nAsset.GetAsset()] -= tx.vout[i].nValue.GetAmount(); } diff --git a/src/validation.h b/src/validation.h index 6da19d2c1b..2dfc9dd164 100644 --- a/src/validation.h +++ b/src/validation.h @@ -444,7 +444,7 @@ bool VerifyAmounts(const CCoinsViewCache& cache, const CTransaction& tx, std::ve /** * Verify the amounts of coinbase transactions. It will fail for any blinded amount or type. - * Each output must be IsAmount && IsAsset. + * Each output must be explicit in both nValue and nAsset. */ bool VerifyCoinbaseAmount(const CTransaction& tx, const CAmountMap& mapFees); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index ef9d5f99f8..b266f183d0 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2554,7 +2554,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, bool ov for (size_t idx = 0; idx < tx.vout.size(); idx++) { const CTxOut& txOut = tx.vout[idx]; - if (!txOut.nValue.IsAmount() || !txOut.nAsset.IsAsset()) { + if (!txOut.nValue.IsAmount() || !txOut.nAsset.IsExplicit()) { strFailReason = _("Pre-funded amounts must be non-blinded"); return false; } @@ -4415,7 +4415,7 @@ bool CWallet::LoadAssetLabelMapping(const CAsset& id, const std::string& label) void CWallet::ComputeBlindingData(const CTxOut& output, CAmount& amount, CPubKey& pubkey, uint256& blindingfactor, CAsset& asset, uint256& assetBlindingFactor) const { - if (output.nValue.IsAmount() && output.nAsset.IsAsset()) { + if (output.nValue.IsAmount() && output.nAsset.IsExplicit()) { amount = output.nValue.GetAmount(); asset = output.nAsset.GetAsset(); pubkey = CPubKey();