diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 033813bdf..790d03b63 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -109,18 +109,6 @@ static bool SignStep(const BaseSignatureCreator& creator, const CScript& scriptP ret.push_back(valtype()); // workaround CHECKMULTISIG bug return (SignN(vSolutions, creator, scriptPubKey, ret, sigversion)); - case TX_WITNESS_V0_KEYHASH: - ret.push_back(vSolutions[0]); - return true; - - case TX_WITNESS_V0_SCRIPTHASH: - CRIPEMD160().Write(&vSolutions[0][0], vSolutions[0].size()).Finalize(h160.begin()); - if (creator.KeyStore().GetCScript(h160, scriptRet)) { - ret.push_back(std::vector(scriptRet.begin(), scriptRet.end())); - return true; - } - return false; - default: return false; } @@ -148,9 +136,7 @@ bool ProduceSignature(const BaseSignatureCreator& creator, const CScript& fromPu std::vector result; txnouttype whichType; solved = SignStep(creator, script, result, whichType, SIGVERSION_BASE); - bool P2SH = false; CScript subscript; - sigdata.scriptWitness.stack.clear(); if (solved && whichType == TX_SCRIPTHASH) { @@ -159,31 +145,9 @@ bool ProduceSignature(const BaseSignatureCreator& creator, const CScript& fromPu // and then the serialized subscript: script = subscript = CScript(result[0].begin(), result[0].end()); solved = solved && SignStep(creator, script, result, whichType, SIGVERSION_BASE) && whichType != TX_SCRIPTHASH; - P2SH = true; - } - - if (solved && whichType == TX_WITNESS_V0_KEYHASH) - { - CScript witnessscript; - witnessscript << OP_DUP << OP_HASH160 << ToByteVector(result[0]) << OP_EQUALVERIFY << OP_CHECKSIG; - txnouttype subType; - solved = solved && SignStep(creator, witnessscript, result, subType, SIGVERSION_WITNESS_V0); - sigdata.scriptWitness.stack = result; - result.clear(); - } - else if (solved && whichType == TX_WITNESS_V0_SCRIPTHASH) - { - CScript witnessscript(result[0].begin(), result[0].end()); - txnouttype subType; - solved = solved && SignStep(creator, witnessscript, result, subType, SIGVERSION_WITNESS_V0) && subType != TX_SCRIPTHASH && subType != TX_WITNESS_V0_SCRIPTHASH && subType != TX_WITNESS_V0_KEYHASH; - result.push_back(std::vector(witnessscript.begin(), witnessscript.end())); - sigdata.scriptWitness.stack = result; - result.clear(); - } - - if (P2SH) { result.push_back(std::vector(subscript.begin(), subscript.end())); } + sigdata.scriptSig = PushAll(result); // Test solution @@ -195,9 +159,6 @@ SignatureData DataFromTransaction(const CMutableTransaction& tx, unsigned int nI SignatureData data; assert(tx.vin.size() > nIn); data.scriptSig = tx.vin[nIn].scriptSig; - if (tx.wit.vtxinwit.size() > nIn) { - data.scriptWitness = tx.wit.vtxinwit[nIn].scriptWitness; - } return data; } @@ -205,10 +166,6 @@ void UpdateTransaction(CMutableTransaction& tx, unsigned int nIn, const Signatur { assert(tx.vin.size() > nIn); tx.vin[nIn].scriptSig = data.scriptSig; - if (!data.scriptWitness.IsNull() || tx.wit.vtxinwit.size() > nIn) { - tx.wit.vtxinwit.resize(tx.vin.size()); - tx.wit.vtxinwit[nIn].scriptWitness = data.scriptWitness; - } } bool SignSignature(const CKeyStore &keystore, const CScript& fromPubKey, CMutableTransaction& txTo, unsigned int nIn, const CAmount& amount, int nHashType) @@ -294,18 +251,16 @@ namespace struct Stacks { std::vector script; - std::vector witness; Stacks() {} - explicit Stacks(const std::vector& scriptSigStack_) : script(scriptSigStack_), witness() {} - explicit Stacks(const SignatureData& data) : witness(data.scriptWitness.stack) { + explicit Stacks(const std::vector& scriptSigStack_) : script(scriptSigStack_) {} + explicit Stacks(const SignatureData& data) { EvalScript(script, data.scriptSig, SCRIPT_VERIFY_STRICTENC, BaseSignatureChecker(), SIGVERSION_BASE); } SignatureData Output() const { SignatureData result; result.scriptSig = PushAll(script); - result.scriptWitness.stack = witness; return result; } }; @@ -329,11 +284,6 @@ static Stacks CombineSignatures(const CScript& scriptPubKey, const BaseSignature if (sigs1.script.empty() || sigs1.script[0].empty()) return sigs2; return sigs1; - case TX_WITNESS_V0_KEYHASH: - // Signatures are bigger than placeholders or empty scripts: - if (sigs1.witness.empty() || sigs1.witness[0].empty()) - return sigs2; - return sigs1; case TX_SCRIPTHASH: if (sigs1.script.empty() || sigs1.script.back().empty()) return sigs2; @@ -356,30 +306,6 @@ static Stacks CombineSignatures(const CScript& scriptPubKey, const BaseSignature } case TX_MULTISIG: return Stacks(CombineMultisig(scriptPubKey, checker, vSolutions, sigs1.script, sigs2.script, sigversion)); - case TX_WITNESS_V0_SCRIPTHASH: - if (sigs1.witness.empty() || sigs1.witness.back().empty()) - return sigs2; - else if (sigs2.witness.empty() || sigs2.witness.back().empty()) - return sigs1; - else - { - // Recur to combine: - CScript pubKey2(sigs1.witness.back().begin(), sigs1.witness.back().end()); - txnouttype txType2; - vector vSolutions2; - Solver(pubKey2, txType2, vSolutions2); - sigs1.witness.pop_back(); - sigs1.script = sigs1.witness; - sigs1.witness.clear(); - sigs2.witness.pop_back(); - sigs2.script = sigs2.witness; - sigs2.witness.clear(); - Stacks result = CombineSignatures(pubKey2, checker, txType2, vSolutions2, sigs1, sigs2, SIGVERSION_WITNESS_V0); - result.witness = result.script; - result.script.clear(); - result.witness.push_back(valtype(pubKey2.begin(), pubKey2.end())); - return result; - } default: return Stacks(); } diff --git a/src/script/sign.h b/src/script/sign.h index 8aaae1663..5ec0f0b0f 100644 --- a/src/script/sign.h +++ b/src/script/sign.h @@ -61,7 +61,6 @@ public: struct SignatureData { CScript scriptSig; - CScriptWitness scriptWitness; SignatureData() {} explicit SignatureData(const CScript& script) : scriptSig(script) {} diff --git a/src/script/standard.cpp b/src/script/standard.cpp index 2747b300a..ce50e3aad 100644 --- a/src/script/standard.cpp +++ b/src/script/standard.cpp @@ -30,8 +30,6 @@ const char* GetTxnOutputType(txnouttype t) case TX_SCRIPTHASH: return "scripthash"; case TX_MULTISIG: return "multisig"; case TX_NULL_DATA: return "nulldata"; - case TX_WITNESS_V0_KEYHASH: return "witness_v0_keyhash"; - case TX_WITNESS_V0_SCRIPTHASH: return "witness_v0_scripthash"; } return NULL; } @@ -70,22 +68,6 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector witnessprogram; - if (scriptPubKey.IsWitnessProgram(witnessversion, witnessprogram)) { - if (witnessversion == 0 && witnessprogram.size() == 20) { - typeRet = TX_WITNESS_V0_KEYHASH; - vSolutionsRet.push_back(witnessprogram); - return true; - } - if (witnessversion == 0 && witnessprogram.size() == 32) { - typeRet = TX_WITNESS_V0_SCRIPTHASH; - vSolutionsRet.push_back(witnessprogram); - return true; - } - return false; - } - // Scan templates const CScript& script1 = scriptPubKey; BOOST_FOREACH(const PAIRTYPE(txnouttype, CScript)& tplate, mTemplates) @@ -334,26 +316,3 @@ CScript GetScriptForMultisig(int nRequired, const std::vector& keys) script << CScript::EncodeOP_N(keys.size()) << OP_CHECKMULTISIG; return script; } - -CScript GetScriptForWitness(const CScript& redeemscript) -{ - CScript ret; - - txnouttype typ; - std::vector > vSolutions; - if (Solver(redeemscript, typ, vSolutions)) { - if (typ == TX_PUBKEY) { - unsigned char h160[20]; - CHash160().Write(&vSolutions[0][0], vSolutions[0].size()).Finalize(h160); - ret << OP_0 << std::vector(&h160[0], &h160[20]); - return ret; - } else if (typ == TX_PUBKEYHASH) { - ret << OP_0 << vSolutions[0]; - return ret; - } - } - uint256 hash; - CSHA256().Write(&redeemscript[0], redeemscript.size()).Finalize(hash.begin()); - ret << OP_0 << ToByteVector(hash); - return ret; -} diff --git a/src/script/standard.h b/src/script/standard.h index 30ddcec15..da778878b 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -65,8 +65,6 @@ enum txnouttype TX_SCRIPTHASH, TX_MULTISIG, TX_NULL_DATA, - TX_WITNESS_V0_SCRIPTHASH, - TX_WITNESS_V0_KEYHASH, }; class CNoDestination { @@ -94,6 +92,5 @@ bool ExtractDestinations(const CScript& scriptPubKey, txnouttype& typeRet, std:: CScript GetScriptForDestination(const CTxDestination& dest); CScript GetScriptForMultisig(int nRequired, const std::vector& keys); -CScript GetScriptForWitness(const CScript& redeemscript); #endif // BITCOIN_SCRIPT_STANDARD_H diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index ee4af3007..3730430b7 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2798,7 +2798,6 @@ bool CWallet::CreateTransaction(const vector& vecSend, CWalletTx& wt if (!sign) { BOOST_FOREACH (CTxIn& vin, txNew.vin) vin.scriptSig = CScript(); - txNew.wit.SetNull(); } // Embed the constructed transaction data in wtxNew. diff --git a/src/wallet/wallet_ismine.cpp b/src/wallet/wallet_ismine.cpp index 7d0236bbe..5e144eabe 100644 --- a/src/wallet/wallet_ismine.cpp +++ b/src/wallet/wallet_ismine.cpp @@ -56,7 +56,6 @@ isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey) return ISMINE_SPENDABLE; break; case TX_PUBKEYHASH: - case TX_WITNESS_V0_KEYHASH: keyID = CKeyID(uint160(vSolutions[0])); if (keystore.HaveKey(keyID)) return ISMINE_SPENDABLE; @@ -72,19 +71,6 @@ isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey) } break; } - case TX_WITNESS_V0_SCRIPTHASH: - { - uint160 hash; - CRIPEMD160().Write(&vSolutions[0][0], vSolutions[0].size()).Finalize(hash.begin()); - CScriptID scriptID = CScriptID(hash); - CScript subscript; - if (keystore.GetCScript(scriptID, subscript)) { - isminetype ret = IsMine(keystore, subscript); - if (ret == ISMINE_SPENDABLE) - return ret; - } - break; - } case TX_MULTISIG: {