mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-27 07:18:33 +02:00
Merge #19114: scripted-diff: TxoutType C++11 scoped enum class
fa32adf9dcscripted-diff: TxoutType C++11 scoped enum class (MarcoFalke)fa95a694c4doc: Update outdated txnouttype documentation (MarcoFalke)fa58469c77rpc: Properly use underlying type in GetAllOutputTypes (MarcoFalke)fa41c65702rpc: Simplify GetAllOutputTypes with the Join helper (MarcoFalke) Pull request description: Non-scoped enums can accidentally and silently decay into an integral type. Also, the symbol names of the keys are exported to the surrounding (usually global) namespace. Fix both issues by switching to an `enum class TxoutType` in a (mostly) scripted-diff. ACKs for top commit: practicalswift: ACKfa32adf9dc-- patch looks correct hebasto: re-ACKfa32adf9dc, since fa5997bd6fc82e16b597ea96e3c5c665f1f174ab (https://github.com/bitcoin/bitcoin/pull/19114#pullrequestreview-421425198) rebased only (verified with `git range-diff`). Tree-SHA512: f42a9db47f9be89fa4bdd8d2fb05a16726286d8b12e3d87327b67d723f91c7d5a57deb4b2ddae9e1d16fee7a5f8c00828b6dc8909c5db680fc5e0a3cf07cd465
This commit is contained in:
@@ -856,20 +856,20 @@ static std::string RecurseImportData(const CScript& script, ImportData& import_d
|
||||
{
|
||||
// Use Solver to obtain script type and parsed pubkeys or hashes:
|
||||
std::vector<std::vector<unsigned char>> solverdata;
|
||||
txnouttype script_type = Solver(script, solverdata);
|
||||
TxoutType script_type = Solver(script, solverdata);
|
||||
|
||||
switch (script_type) {
|
||||
case TX_PUBKEY: {
|
||||
case TxoutType::PUBKEY: {
|
||||
CPubKey pubkey(solverdata[0].begin(), solverdata[0].end());
|
||||
import_data.used_keys.emplace(pubkey.GetID(), false);
|
||||
return "";
|
||||
}
|
||||
case TX_PUBKEYHASH: {
|
||||
case TxoutType::PUBKEYHASH: {
|
||||
CKeyID id = CKeyID(uint160(solverdata[0]));
|
||||
import_data.used_keys[id] = true;
|
||||
return "";
|
||||
}
|
||||
case TX_SCRIPTHASH: {
|
||||
case TxoutType::SCRIPTHASH: {
|
||||
if (script_ctx == ScriptContext::P2SH) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Trying to nest P2SH inside another P2SH");
|
||||
if (script_ctx == ScriptContext::WITNESS_V0) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Trying to nest P2SH inside a P2WSH");
|
||||
CHECK_NONFATAL(script_ctx == ScriptContext::TOP);
|
||||
@@ -880,14 +880,14 @@ static std::string RecurseImportData(const CScript& script, ImportData& import_d
|
||||
import_data.import_scripts.emplace(*subscript);
|
||||
return RecurseImportData(*subscript, import_data, ScriptContext::P2SH);
|
||||
}
|
||||
case TX_MULTISIG: {
|
||||
case TxoutType::MULTISIG: {
|
||||
for (size_t i = 1; i + 1< solverdata.size(); ++i) {
|
||||
CPubKey pubkey(solverdata[i].begin(), solverdata[i].end());
|
||||
import_data.used_keys.emplace(pubkey.GetID(), false);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
case TX_WITNESS_V0_SCRIPTHASH: {
|
||||
case TxoutType::WITNESS_V0_SCRIPTHASH: {
|
||||
if (script_ctx == ScriptContext::WITNESS_V0) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Trying to nest P2WSH inside another P2WSH");
|
||||
uint256 fullid(solverdata[0]);
|
||||
CScriptID id;
|
||||
@@ -901,7 +901,7 @@ static std::string RecurseImportData(const CScript& script, ImportData& import_d
|
||||
import_data.import_scripts.emplace(*subscript);
|
||||
return RecurseImportData(*subscript, import_data, ScriptContext::WITNESS_V0);
|
||||
}
|
||||
case TX_WITNESS_V0_KEYHASH: {
|
||||
case TxoutType::WITNESS_V0_KEYHASH: {
|
||||
if (script_ctx == ScriptContext::WITNESS_V0) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Trying to nest P2WPKH inside P2WSH");
|
||||
CKeyID id = CKeyID(uint160(solverdata[0]));
|
||||
import_data.used_keys[id] = true;
|
||||
@@ -910,10 +910,10 @@ static std::string RecurseImportData(const CScript& script, ImportData& import_d
|
||||
}
|
||||
return "";
|
||||
}
|
||||
case TX_NULL_DATA:
|
||||
case TxoutType::NULL_DATA:
|
||||
return "unspendable script";
|
||||
case TX_NONSTANDARD:
|
||||
case TX_WITNESS_UNKNOWN:
|
||||
case TxoutType::NONSTANDARD:
|
||||
case TxoutType::WITNESS_UNKNOWN:
|
||||
default:
|
||||
return "unrecognized script";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user