14 #include <validation.h> 18 #include <boost/test/unit_test.hpp> 34 std::vector<unsigned char> sSerialized(s.
begin(), s.
end());
42 txFrom.
vout.resize(1);
43 txFrom.
vout[0].scriptPubKey = scriptPubKey;
48 txTo.
vin[0].prevout.n = 0;
50 txTo.
vin[0].scriptSig = scriptSig;
51 txTo.
vout[0].nValue = 1;
68 for (
int i = 0; i < 4; i++)
82 for (
int i = 0; i < 4; i++)
90 txFrom.
vout.resize(8);
91 for (
int i = 0; i < 4; i++)
93 txFrom.
vout[i].scriptPubKey = evalScripts[i];
95 txFrom.
vout[i+4].scriptPubKey = standardScripts[i];
101 for (
int i = 0; i < 8; i++)
103 txTo[i].
vin.resize(1);
104 txTo[i].
vout.resize(1);
105 txTo[i].
vin[0].prevout.n = i;
106 txTo[i].
vin[0].prevout.hash = txFrom.
GetHash();
107 txTo[i].
vout[0].nValue = 1;
109 for (
int i = 0; i < 8; i++)
117 for (
int i = 0; i < 8; i++) {
119 for (
int j = 0; j < 8; j++)
122 txTo[i].
vin[0].scriptSig = txTo[j].
vin[0].scriptSig;
125 BOOST_CHECK_MESSAGE(sigOK,
strprintf(
"VerifySignature %d %d", i, j));
127 BOOST_CHECK_MESSAGE(!sigOK,
strprintf(
"VerifySignature %d %d", i, j));
128 txTo[i].
vin[0].scriptSig = sigSave;
165 std::vector<CPubKey> keys;
167 for (
int i = 0; i < 4; i++)
181 for (
int i = 0; i < 4; i++)
189 txFrom.
vout.resize(4);
190 for (
int i = 0; i < 4; i++)
192 txFrom.
vout[i].scriptPubKey = outer[i];
198 for (
int i = 0; i < 4; i++)
200 txTo[i].
vin.resize(1);
201 txTo[i].
vout.resize(1);
202 txTo[i].
vin[0].prevout.n = i;
203 txTo[i].
vin[0].prevout.hash = txFrom.
GetHash();
205 txTo[i].
vout[0].scriptPubKey = inner[i];
207 for (
int i = 0; i < 4; i++)
213 BOOST_CHECK_MESSAGE((i == 0 ? no_pbms_is_std : !no_pbms_is_std),
strprintf(
"txTo[%d].IsStandard(permbaremulti=false)", i));
225 std::vector<unsigned char> direct = {
OP_HASH160, 20};
226 direct.insert(direct.end(), 20, 0);
232 pushdata1.insert(pushdata1.end(), 20, 0);
236 pushdata2.insert(pushdata2.end(), 20, 0);
240 pushdata4.insert(pushdata4.end(), 20, 0);
283 for (
int i = 0; i < 6; i++)
288 std::vector<CPubKey> keys;
290 for (
int i = 0; i < 3; i++)
294 txFrom.
vout.resize(7);
302 txFrom.
vout[0].nValue = 1000;
303 txFrom.
vout[1].scriptPubKey = pay1;
304 txFrom.
vout[1].nValue = 2000;
305 txFrom.
vout[2].scriptPubKey = pay1of3;
306 txFrom.
vout[2].nValue = 3000;
317 txFrom.
vout[3].nValue = 4000;
326 txFrom.
vout[4].nValue = 5000;
332 txFrom.
vout[5].nValue = 5000;
336 txFrom.
vout[6].nValue = 6000;
345 for (
int i = 0; i < 5; i++)
347 txTo.
vin[i].prevout.n = i;
359 txTo.
vin[3].scriptSig << OP_11 << OP_11 << std::vector<unsigned char>(oneAndTwo.
begin(), oneAndTwo.
end());
360 txTo.
vin[4].scriptSig << std::vector<unsigned char>(fifteenSigops.
begin(), fifteenSigops.
end());
367 txToNonStd1.
vout.resize(1);
369 txToNonStd1.
vout[0].nValue = 1000;
370 txToNonStd1.
vin.resize(1);
371 txToNonStd1.
vin[0].prevout.n = 5;
372 txToNonStd1.
vin[0].prevout.hash = txFrom.
GetHash();
373 txToNonStd1.
vin[0].scriptSig << std::vector<unsigned char>(sixteenSigops.
begin(), sixteenSigops.
end());
379 txToNonStd2.
vout.resize(1);
381 txToNonStd2.
vout[0].nValue = 1000;
382 txToNonStd2.
vin.resize(1);
383 txToNonStd2.
vin[0].prevout.n = 6;
384 txToNonStd2.
vin[0].prevout.hash = txFrom.
GetHash();
385 txToNonStd2.
vin[0].scriptSig << std::vector<unsigned char>(twentySigops.
begin(), twentySigops.
end());
CScript GetScriptForMultisig(int nRequired, const std::vector< CPubKey > &keys)
Generate a multisig script.
bool SignSignature(const SigningProvider &provider, const CScript &fromPubKey, CMutableTransaction &txTo, unsigned int nIn, const CAmount &amount, int nHashType, SignatureData &sig_data)
Produce a satisfying script (scriptSig or witness).
Valid signature cache, to avoid doing expensive ECDSA signature checking twice for every transaction ...
enum ScriptError_t ScriptError
bool IsPayToScriptHash() const
CPubKey GetPubKey() const
Compute the public key from a private key.
bool VerifyScript(const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, unsigned int flags, const BaseSignatureChecker &checker, ScriptError *serror)
virtual bool AddCScript(const CScript &redeemScript)
bool AreInputsStandard(const CTransaction &tx, const CCoinsViewCache &mapInputs)
Check transaction inputs to mitigate two potential denial-of-service attacks:
void AddCoins(CCoinsViewCache &cache, const CTransaction &tx, int nHeight, bool check_for_overwrite)
Utility function to add all of a transaction's outputs to a cache.
Abort execution through assertion failure (for consensus code)
Abstract view on the open txout dataset.
static std::vector< unsigned char > Serialize(const CScript &s)
BOOST_AUTO_TEST_SUITE_END()
static bool IsStandardTx(const CTransaction &tx, bool permit_bare_multisig, std::string &reason)
Fillable signing provider that keeps keys in an address->secret map.
std::string ScriptErrorString(const ScriptError serror)
BOOST_AUTO_TEST_CASE(sign)
void MakeNewKey(bool fCompressed)
Generate a new private key using a cryptographic PRNG.
static constexpr unsigned int MAX_P2SH_SIGOPS
Maximum number of signature check operations in an IsStandard() P2SH script.
GenericTransactionSignatureChecker< CMutableTransaction > MutableTransactionSignatureChecker
Txid GetHash() const
Compute the hash of this CMutableTransaction.
std::vector< CTxOut > vout
Closure representing one script verification Note that this stores references to the spending transac...
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
static constexpr unsigned int DUST_RELAY_TX_FEE
Min feerate for defining dust.
std::vector< unsigned char > ToByteVector(const T &in)
#define BOOST_CHECK_EQUAL(v1, v2)
Serialized script, used inside transaction inputs and outputs.
static bool GetPubKey(const SigningProvider &provider, const SignatureData &sigdata, const CKeyID &address, CPubKey &pubkey)
unsigned int GetP2SHSigOpCount(const CTransaction &tx, const CCoinsViewCache &inputs)
Count ECDSA signature operations in pay-to-script-hash inputs.
Fee rate in satoshis per kilovirtualbyte: CAmount / kvB.
static bool Verify(const CScript &scriptSig, const CScript &scriptPubKey, bool fStrict, ScriptError &err)
A mutable version of CTransaction.
static constexpr size_t DEFAULT_SIGNATURE_CACHE_BYTES
static constexpr CAmount CENT
An encapsulated private key.
The basic transaction that is broadcasted on the network and contained in blocks. ...
CCoinsView that adds a memory cache for transactions to another CCoinsView.
virtual bool AddKey(const CKey &key)
#define BOOST_CHECK(expr)
static constexpr CAmount COIN
The amount of satoshis in one BTC.