1818#include < string>
1919#include < vector>
2020
21+ #include " chainparams.h"
2122#include " bignum.h"
2223#include " key.h"
2324#include " script.h"
@@ -271,21 +272,13 @@ class CBitcoinAddressVisitor : public boost::static_visitor<bool>
271272class CBitcoinAddress : public CBase58Data
272273{
273274public:
274- enum
275- {
276- PUBKEY_ADDRESS = 25 ,
277- SCRIPT_ADDRESS = 85 ,
278- PUBKEY_ADDRESS_TEST = 111 ,
279- SCRIPT_ADDRESS_TEST = 196 ,
280- };
281-
282275 bool Set (const CKeyID &id) {
283- SetData (fTestNet ? PUBKEY_ADDRESS_TEST : PUBKEY_ADDRESS, &id, 20 );
276+ SetData (Params (). Base58Prefix (CChainParams:: PUBKEY_ADDRESS) , &id, 20 );
284277 return true ;
285278 }
286279
287280 bool Set (const CScriptID &id) {
288- SetData (fTestNet ? SCRIPT_ADDRESS_TEST : SCRIPT_ADDRESS, &id, 20 );
281+ SetData (Params (). Base58Prefix (CChainParams:: SCRIPT_ADDRESS) , &id, 20 );
289282 return true ;
290283 }
291284
@@ -296,32 +289,10 @@ class CBitcoinAddress : public CBase58Data
296289
297290 bool IsValid () const
298291 {
299- unsigned int nExpectedSize = 20 ;
300- bool fExpectTestNet = false ;
301- switch (nVersion)
302- {
303- case PUBKEY_ADDRESS:
304- nExpectedSize = 20 ; // Hash of public key
305- fExpectTestNet = false ;
306- break ;
307- case SCRIPT_ADDRESS:
308- nExpectedSize = 20 ; // Hash of CScript
309- fExpectTestNet = false ;
310- break ;
311-
312- case PUBKEY_ADDRESS_TEST:
313- nExpectedSize = 20 ;
314- fExpectTestNet = true ;
315- break ;
316- case SCRIPT_ADDRESS_TEST:
317- nExpectedSize = 20 ;
318- fExpectTestNet = true ;
319- break ;
320-
321- default :
322- return false ;
323- }
324- return fExpectTestNet == fTestNet && vchData.size () == nExpectedSize;
292+ bool fCorrectSize = vchData.size () == 20 ;
293+ bool fKnownVersion = nVersion == Params ().Base58Prefix (CChainParams::PUBKEY_ADDRESS) ||
294+ nVersion == Params ().Base58Prefix (CChainParams::SCRIPT_ADDRESS);
295+ return fCorrectSize && fKnownVersion ;
325296 }
326297
327298 CBitcoinAddress ()
@@ -346,48 +317,27 @@ class CBitcoinAddress : public CBase58Data
346317 CTxDestination Get () const {
347318 if (!IsValid ())
348319 return CNoDestination ();
349- switch (nVersion) {
350- case PUBKEY_ADDRESS:
351- case PUBKEY_ADDRESS_TEST: {
352- uint160 id;
353- memcpy (&id, &vchData[0 ], 20 );
320+ uint160 id;
321+ memcpy (&id, &vchData[0 ], 20 );
322+ if (nVersion == Params ().Base58Prefix (CChainParams::PUBKEY_ADDRESS))
354323 return CKeyID (id);
355- }
356- case SCRIPT_ADDRESS:
357- case SCRIPT_ADDRESS_TEST: {
358- uint160 id;
359- memcpy (&id, &vchData[0 ], 20 );
324+ else if (nVersion == Params ().Base58Prefix (CChainParams::SCRIPT_ADDRESS))
360325 return CScriptID (id);
361- }
362- }
363- return CNoDestination ();
326+ else
327+ return CNoDestination ();
364328 }
365329
366330 bool GetKeyID (CKeyID &keyID) const {
367- if (!IsValid ())
331+ if (!IsValid () || nVersion != Params (). Base58Prefix (CChainParams::PUBKEY_ADDRESS) )
368332 return false ;
369- switch (nVersion) {
370- case PUBKEY_ADDRESS:
371- case PUBKEY_ADDRESS_TEST: {
372- uint160 id;
373- memcpy (&id, &vchData[0 ], 20 );
374- keyID = CKeyID (id);
375- return true ;
376- }
377- default : return false ;
378- }
333+ uint160 id;
334+ memcpy (&id, &vchData[0 ], 20 );
335+ keyID = CKeyID (id);
336+ return true ;
379337 }
380338
381339 bool IsScript () const {
382- if (!IsValid ())
383- return false ;
384- switch (nVersion) {
385- case SCRIPT_ADDRESS:
386- case SCRIPT_ADDRESS_TEST: {
387- return true ;
388- }
389- default : return false ;
390- }
340+ return IsValid () && nVersion == Params ().Base58Prefix (CChainParams::SCRIPT_ADDRESS);
391341 }
392342};
393343
@@ -402,7 +352,7 @@ class CBitcoinSecret : public CBase58Data
402352 void SetKey (const CKey& vchSecret)
403353 {
404354 assert (vchSecret.IsValid ());
405- SetData (128 + ( fTestNet ? CBitcoinAddress::PUBKEY_ADDRESS_TEST : CBitcoinAddress::PUBKEY_ADDRESS ), vchSecret.begin (), vchSecret.size ());
355+ SetData (Params (). Base58Prefix (CChainParams::SECRET_KEY ), vchSecret.begin (), vchSecret.size ());
406356 if (vchSecret.IsCompressed ())
407357 vchData.push_back (1 );
408358 }
@@ -416,20 +366,9 @@ class CBitcoinSecret : public CBase58Data
416366
417367 bool IsValid () const
418368 {
419- bool fExpectTestNet = false ;
420- switch (nVersion)
421- {
422- case (128 + CBitcoinAddress::PUBKEY_ADDRESS):
423- break ;
424-
425- case (128 + CBitcoinAddress::PUBKEY_ADDRESS_TEST):
426- fExpectTestNet = true ;
427- break ;
428-
429- default :
430- return false ;
431- }
432- return fExpectTestNet == fTestNet && (vchData.size () == 32 || (vchData.size () == 33 && vchData[32 ] == 1 ));
369+ bool fExpectedFormat = vchData.size () == 32 || (vchData.size () == 33 && vchData[32 ] == 1 );
370+ bool fCorrectVersion = nVersion == Params ().Base58Prefix (CChainParams::SECRET_KEY);
371+ return fExpectedFormat && fCorrectVersion ;
433372 }
434373
435374 bool SetString (const char * pszSecret)
0 commit comments