diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2011-12-20 14:43:31 -0500 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2011-12-20 14:43:31 -0500 |
commit | 595925592d36fb5d5d34beea3c3e71fca2b6726e (patch) | |
tree | e28c34353aa08a6f3c0368a39982970c08245ea3 /src/base58.h | |
parent | f06e3e0ea6c8da90585a9f0936c390659dcece37 (diff) | |
parent | 77f21f1583deb89bf3fffe80fe9b181fedb1dd60 (diff) |
Merge branch 'op_eval'
Diffstat (limited to 'src/base58.h')
-rw-r--r-- | src/base58.h | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/src/base58.h b/src/base58.h index 113fa14a5e..cba638f4e0 100644 --- a/src/base58.h +++ b/src/base58.h @@ -253,14 +253,26 @@ public: }; // base58-encoded bitcoin addresses -// Addresses have version 0 or 111 (testnet) +// Public-key-hash-addresses have version 0 (or 192 testnet) // The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key +// Script-hash-addresses (OP_EVAL) have version 5 (or 196 testnet) +// The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script class CBitcoinAddress : public CBase58Data { public: - void SetHash160(const uint160& hash160) + enum { - SetData(fTestNet ? 111 : 0, &hash160, 20); + PUBKEY_ADDRESS = 0, + SCRIPT_ADDRESS = 5, + PUBKEY_ADDRESS_TEST = 192, + PUBKEY_ADDRESS_TEST_LEGACY = 111, // Deprecated: old testnet address + SCRIPT_ADDRESS_TEST = 196, + }; + + bool SetHash160(const uint160& hash160) + { + SetData(fTestNet ? PUBKEY_ADDRESS_TEST : PUBKEY_ADDRESS, &hash160, 20); + return true; } void SetPubKey(const std::vector<unsigned char>& vchPubKey) @@ -268,16 +280,34 @@ public: SetHash160(Hash160(vchPubKey)); } + bool SetScriptHash160(const uint160& hash160) + { + SetData(fTestNet ? SCRIPT_ADDRESS_TEST : SCRIPT_ADDRESS, &hash160, 20); + return true; + } + bool IsValid() const { int nExpectedSize = 20; bool fExpectTestNet = false; switch(nVersion) { - case 0: + case PUBKEY_ADDRESS: + nExpectedSize = 20; // Hash of public key + fExpectTestNet = false; + break; + case SCRIPT_ADDRESS: + nExpectedSize = 20; // OP_EVAL, hash of CScript + fExpectTestNet = false; break; - case 111: + case PUBKEY_ADDRESS_TEST_LEGACY: + case PUBKEY_ADDRESS_TEST: + nExpectedSize = 20; + fExpectTestNet = true; + break; + case SCRIPT_ADDRESS_TEST: + nExpectedSize = 20; fExpectTestNet = true; break; @@ -286,6 +316,14 @@ public: } return fExpectTestNet == fTestNet && vchData.size() == nExpectedSize; } + bool IsScript() const + { + if (!IsValid()) + return false; + if (fTestNet) + return nVersion == SCRIPT_ADDRESS_TEST; + return nVersion == SCRIPT_ADDRESS; + } CBitcoinAddress() { |