From: 0xDEADFACE Date: Fri, 12 Feb 2016 15:24:19 +0000 (-0800) Subject: Add TX_PUBKEY_DROP transaction type. X-Git-Tag: nvc-v0.5.6~86 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=bd4a1340b19f76cbb4e0507a30621d0be37394af Add TX_PUBKEY_DROP transaction type. --- diff --git a/src/script.cpp b/src/script.cpp index 36b144f..9079102 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -99,6 +99,7 @@ const char* GetTxnOutputType(txnouttype t) { case TX_NONSTANDARD: return "nonstandard"; case TX_PUBKEY: return "pubkey"; + case TX_PUBKEY_DROP: return "pubkeydrop"; case TX_PUBKEYHASH: return "pubkeyhash"; case TX_SCRIPTHASH: return "scripthash"; case TX_MULTISIG: return "multisig"; @@ -1194,6 +1195,12 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector SMALLDATA_SWITCH_TIME) + { + // Malleable pubkey tx hack, sender provides generated pubkey combined with R parameter. The R parameter is dropped before checking a signature. + mTemplates.insert(make_pair(TX_PUBKEY_DROP, CScript() << OP_PUBKEY << OP_PUBKEY << OP_DROP << OP_CHECKSIG)); + } + // Bitcoin address tx, sender provides hash of pubkey, receiver provides signature and pubkey mTemplates.insert(make_pair(TX_PUBKEYHASH, CScript() << OP_DUP << OP_HASH160 << OP_PUBKEYHASH << OP_EQUALVERIFY << OP_CHECKSIG)); @@ -1357,6 +1364,7 @@ bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, const uint25 case TX_NULL_DATA: return false; case TX_PUBKEY: + case TX_PUBKEY_DROP: keyID = CPubKey(vSolutions[0]).GetID(); return Sign1(keyID, keystore, hash, nHashType, scriptSigRet); case TX_PUBKEYHASH: @@ -1389,6 +1397,7 @@ int ScriptSigArgsExpected(txnouttype t, const std::vector