Skip to content

Commit

Permalink
Merge #20016: uint256: 1 is a constant
Browse files Browse the repository at this point in the history
4cc7171 wallet: no need for duplicate storage for ABANDON_HASH constant (Anthony Towns)
82cf464 scripted-diff: Replace UINT256_ONE() with uint256::ONE (Anthony Towns)
183f308 uint256: Update constructors to c++11, make ONE static (Anthony Towns)

Pull request description:

  `UINT256_ONE()` returns a reference to a global; mark it as const to be sure someone doesn't accidently modify it.

ACKs for top commit:
  promag:
    ACK 4cc7171
  MarcoFalke:
    re ACK 4cc7171, only change is some constexpr shuffling 🛁
  kallewoof:
    ACK 4cc7171

Tree-SHA512: 7f399658bfd9ffa4075bc2349049476d842b9579a67518fb7151f56eab36907ef24b1474ee1e89bdc69fe181abe7295dfe19e33b3623d43cec71fc00e356e347
  • Loading branch information
MarcoFalke committed Sep 28, 2020
2 parents e7e6f0b + 4cc7171 commit c95784e
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/script/interpreter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1375,7 +1375,7 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn
if ((nHashType & 0x1f) == SIGHASH_SINGLE) {
if (nIn >= txTo.vout.size()) {
// nOut out of range
return UINT256_ONE();
return uint256::ONE;
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/test/sighash_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, un
{
if (nIn >= txTo.vin.size())
{
return UINT256_ONE();
return uint256::ONE;
}
CMutableTransaction txTmp(txTo);

Expand Down Expand Up @@ -58,7 +58,7 @@ uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, un
unsigned int nOut = nIn;
if (nOut >= txTmp.vout.size())
{
return UINT256_ONE();
return uint256::ONE;
}
txTmp.vout.resize(nOut+1);
for (unsigned int i = 0; i < nOut; i++)
Expand Down
6 changes: 6 additions & 0 deletions src/test/uint256_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -278,4 +278,10 @@ BOOST_AUTO_TEST_CASE( operator_with_self )
BOOST_CHECK(v == UintToArith256(uint256S("0")));
}

BOOST_AUTO_TEST_CASE( check_ONE )
{
uint256 one = uint256S("0000000000000000000000000000000000000000000000000000000000000001");
BOOST_CHECK_EQUAL(one, uint256::ONE);
}

BOOST_AUTO_TEST_SUITE_END()
5 changes: 1 addition & 4 deletions src/uint256.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,4 @@ template std::string base_blob<256>::ToString() const;
template void base_blob<256>::SetHex(const char*);
template void base_blob<256>::SetHex(const std::string&);

uint256& UINT256_ONE() {
static uint256* one = new uint256(uint256S("0000000000000000000000000000000000000000000000000000000000000001"));
return *one;
}
const uint256 uint256::ONE(1);
17 changes: 9 additions & 8 deletions src/uint256.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ class base_blob
static constexpr int WIDTH = BITS / 8;
uint8_t m_data[WIDTH];
public:
base_blob()
{
memset(m_data, 0, sizeof(m_data));
}
/* construct 0 value by default */
constexpr base_blob() : m_data() {}

/* constructor for constants between 1 and 255 */
constexpr explicit base_blob(uint8_t v) : m_data{v} {}

explicit base_blob(const std::vector<unsigned char>& vch);

Expand Down Expand Up @@ -111,7 +112,7 @@ class base_blob
*/
class uint160 : public base_blob<160> {
public:
uint160() {}
constexpr uint160() {}
explicit uint160(const std::vector<unsigned char>& vch) : base_blob<160>(vch) {}
};

Expand All @@ -122,8 +123,10 @@ class uint160 : public base_blob<160> {
*/
class uint256 : public base_blob<256> {
public:
uint256() {}
constexpr uint256() {}
constexpr explicit uint256(uint8_t v) : base_blob<256>(v) {}
explicit uint256(const std::vector<unsigned char>& vch) : base_blob<256>(vch) {}
static const uint256 ONE;
};

/* uint256 from const char *.
Expand All @@ -147,6 +150,4 @@ inline uint256 uint256S(const std::string& str)
return rv;
}

uint256& UINT256_ONE();

#endif // BITCOIN_UINT256_H
2 changes: 1 addition & 1 deletion src/wallet/scriptpubkeyman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,7 @@ std::unique_ptr<CKeyMetadata> LegacyScriptPubKeyMan::GetMetadata(const CTxDestin

uint256 LegacyScriptPubKeyMan::GetID() const
{
return UINT256_ONE();
return uint256::ONE;
}

/**
Expand Down
2 changes: 0 additions & 2 deletions src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,8 +324,6 @@ std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::strin
return wallet;
}

const uint256 CWalletTx::ABANDON_HASH(UINT256_ONE());

/** @defgroup mapWallet
*
* @{
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/wallet.h
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ class CWalletTx
/** Constant used in hashBlock to indicate tx has been abandoned, only used at
* serialization/deserialization to avoid ambiguity with conflicted.
*/
static const uint256 ABANDON_HASH;
static constexpr const uint256& ABANDON_HASH = uint256::ONE;

public:
/**
Expand Down

0 comments on commit c95784e

Please sign in to comment.