PIVX Core  5.6.99
P2P Digital Currency
sigopcount_tests.cpp
Go to the documentation of this file.
1 // Copyright (c) 2012-2013 The Bitcoin Core developers
2 // Copyright (c) 2017-2020 The PIVX Core developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #include "pubkey.h"
7 #include "key.h"
8 #include "script/script.h"
9 #include "script/standard.h"
10 #include "uint256.h"
11 #include "test_pivx.h"
12 
13 #include <vector>
14 
15 #include <boost/test/unit_test.hpp>
16 
17 
18 // Helpers:
19 static std::vector<unsigned char>
20 Serialize(const CScript& s)
21 {
22  std::vector<unsigned char> sSerialized(s.begin(), s.end());
23  return sSerialized;
24 }
25 
27 
28 BOOST_AUTO_TEST_CASE(GetSigOpCount)
29 {
30  // Test CScript::GetSigOpCount()
31  CScript s1;
32  BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0U);
33  BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0U);
34 
35  uint160 dummy;
36  s1 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << OP_2 << OP_CHECKMULTISIG;
37  BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2U);
38  s1 << OP_IF << OP_CHECKSIG << OP_ENDIF;
39  BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3U);
40  BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21U);
41 
43  CScript scriptSig;
44  scriptSig << OP_0 << Serialize(s1);
45  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3U);
46 
47  std::vector<CPubKey> keys;
48  for (int i = 0; i < 3; i++)
49  {
50  CKey k;
51  k.MakeNewKey(true);
52  keys.push_back(k.GetPubKey());
53  }
54  CScript s2 = GetScriptForMultisig(1, keys);
55  BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3U);
56  BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20U);
57 
59  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0U);
60  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0U);
61  CScript scriptSig2;
62  scriptSig2 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << Serialize(s2);
63  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3U);
64 }
65 
An encapsulated private key.
Definition: key.h:30
void MakeNewKey(bool fCompressed)
Generate a new private key using a cryptographic PRNG.
Definition: key.cpp:158
CPubKey GetPubKey() const
Compute the public key from a private key.
Definition: key.cpp:186
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:381
unsigned int GetSigOpCount(bool fAccurate) const
Pre-version-0.6, Bitcoin always counted CHECKMULTISIGs as 20 sigops.
Definition: script.cpp:164
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: standard.h:24
iterator begin()
Definition: prevector.h:285
iterator end()
Definition: prevector.h:287
160-bit opaque blob.
Definition: uint256.h:127
BOOST_AUTO_TEST_SUITE_END()
#define BOOST_FIXTURE_TEST_SUITE(a, b)
Definition: object.cpp:14
#define BOOST_CHECK_EQUAL(v1, v2)
Definition: object.cpp:18
std::vector< unsigned char > ToByteVector(const T &in)
Definition: script.h:43
@ OP_2
Definition: script.h:61
@ OP_CHECKMULTISIG
Definition: script.h:168
@ OP_IF
Definition: script.h:80
@ OP_CHECKSIG
Definition: script.h:166
@ OP_ENDIF
Definition: script.h:85
@ OP_1
Definition: script.h:59
@ OP_0
Definition: script.h:52
void Serialize(Stream &s, char a)
Definition: serialize.h:237
BOOST_AUTO_TEST_CASE(GetSigOpCount)
CScript GetScriptForMultisig(int nRequired, const std::vector< CPubKey > &keys)
Generate a multisig script.
Definition: standard.cpp:311
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a PIVX scriptPubKey for the given CTxDestination.
Definition: standard.cpp:278
Basic testing setup.
Definition: test_pivx.h:51