Mercurial > hg > bitcoin
changeset 1606:de07341137cd draft
Update bitcoin address numbers for latest luke-jr/sipa scheme
author | Gavin Andresen <gavinandresen@gmail.com> |
---|---|
date | Fri, 16 Dec 2011 18:03:48 -0500 |
parents | f3595c50b020 |
children | c211ddfb15f0 |
files | src/base58.h src/main.cpp src/script.cpp |
diffstat | 3 files changed, 25 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/base58.h +++ b/src/base58.h @@ -253,14 +253,26 @@ }; // 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) @@ -270,7 +282,7 @@ bool SetScriptHash160(const uint160& hash160) { - SetData(fTestNet ? 111^2 : 2, &hash160, 20); + SetData(fTestNet ? SCRIPT_ADDRESS_TEST : SCRIPT_ADDRESS, &hash160, 20); return true; } @@ -280,20 +292,21 @@ bool fExpectTestNet = false; switch(nVersion) { - case 0: + case PUBKEY_ADDRESS: nExpectedSize = 20; // Hash of public key fExpectTestNet = false; break; - case 2: + 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 111^2: + case SCRIPT_ADDRESS_TEST: nExpectedSize = 20; fExpectTestNet = true; break; @@ -308,8 +321,8 @@ if (!IsValid()) return false; if (fTestNet) - return nVersion == 111^2; - return nVersion == 2; + return nVersion == SCRIPT_ADDRESS_TEST; + return nVersion == SCRIPT_ADDRESS; } CBitcoinAddress()
--- a/src/main.cpp +++ b/src/main.cpp @@ -902,7 +902,7 @@ { if (IsCoinBase()) return true; // Coinbase transactions have no inputs to fetch. - + for (int i = 0; i < vin.size(); i++) { COutPoint prevout = vin[i].prevout;
--- a/src/script.cpp +++ b/src/script.cpp @@ -1025,7 +1025,7 @@ valtype& vchScript = stacktop(-1); CScript subscript(vchScript.begin(), vchScript.end()); popstack(stack); - + // Codeseparators not allowed; they don't make sense 'inside' an OP_EVAL, because // their purpose is to change which parts of the scriptPubKey script is copied // and signed by OP_CHECKSIG, but OP_EVAl'ed code is in the scriptSig, not the scriptPubKey.