sigopcount_tests.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // ECOin - Copyright (c) - 2014/2021 - GPLv3 - epsylon@riseup.net (https://03c8.net)
  2. #include <vector>
  3. #include <boost/test/unit_test.hpp>
  4. #include <boost/foreach.hpp>
  5. #include "script.h"
  6. #include "key.h"
  7. using namespace std;
  8. // Helpers:
  9. static std::vector<unsigned char>
  10. Serialize(const CScript& s)
  11. {
  12. std::vector<unsigned char> sSerialized(s);
  13. return sSerialized;
  14. }
  15. BOOST_AUTO_TEST_SUITE(sigopcount_tests)
  16. BOOST_AUTO_TEST_CASE(GetSigOpCount)
  17. {
  18. // Test CScript::GetSigOpCount()
  19. CScript s1;
  20. BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0);
  21. BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0);
  22. uint160 dummy;
  23. s1 << OP_1 << dummy << dummy << OP_2 << OP_CHECKMULTISIG;
  24. BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2);
  25. s1 << OP_IF << OP_CHECKSIG << OP_ENDIF;
  26. BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3);
  27. BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21);
  28. CScript p2sh;
  29. p2sh.SetDestination(s1.GetID());
  30. CScript scriptSig;
  31. scriptSig << OP_0 << Serialize(s1);
  32. BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3);
  33. std::vector<CKey> keys;
  34. for (int i = 0; i < 3; i++)
  35. {
  36. CKey k;
  37. k.MakeNewKey(true);
  38. keys.push_back(k);
  39. }
  40. CScript s2;
  41. s2.SetMultisig(1, keys);
  42. BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3);
  43. BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20);
  44. p2sh.SetDestination(s2.GetID());
  45. BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0);
  46. BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0);
  47. CScript scriptSig2;
  48. scriptSig2 << OP_1 << dummy << dummy << Serialize(s2);
  49. BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3);
  50. }
  51. BOOST_AUTO_TEST_SUITE_END()