2 using System.Collections.Generic;
5 using System.Threading.Tasks;
10 /// Available address types
16 PUBKEY_ADDRESS_TEST = 111,
17 SCRIPT_ADDRESS_TEST = 196
21 /// Represents novacoin address
23 public class CNovacoinAddress
25 private byte nVersion;
26 private List<byte> addrData;
29 /// Initialize with custom data and version
31 /// <param name="nVersionIn"></param>
32 /// <param name="addrDataIn"></param>
33 public CNovacoinAddress(byte nVersionIn, IEnumerable<byte> addrDataIn)
35 nVersion = nVersionIn;
36 addrData = addrDataIn.ToList();
40 /// Initialize new instance of PUBKEY_ADDRESS
42 /// <param name="keyID">CKeyID instance</param>
43 public CNovacoinAddress(CKeyID keyID)
45 nVersion = (byte)AddrType.PUBKEY_ADDRESS;
46 addrData = new List<byte>(keyID.hashBytes);
49 public CNovacoinAddress(string strNovacoinAddress)
51 addrData = AddressTools.Base58DecodeCheck(strNovacoinAddress).ToList();
53 nVersion = addrData[0];
58 /// Initialize new instance of SCRIPT_ADDRESS
60 /// <param name="keyID">CScriptID instance</param>
61 public CNovacoinAddress(CScriptID scriptID)
63 nVersion = (byte)AddrType.SCRIPT_ADDRESS;
64 addrData = new List<byte>(scriptID.hashBytes);
68 /// Basic sanity checking
74 // Address data is normally generated by RIPEMD-160 hash function
75 int nExpectedSize = 20;
77 switch ((AddrType)nVersion)
79 case AddrType.PUBKEY_ADDRESS:
80 nExpectedSize = 20; // Hash of public key
82 case AddrType.SCRIPT_ADDRESS:
83 nExpectedSize = 20; // Hash of CScript
85 case AddrType.PUBKEY_ADDRESS_TEST:
88 case AddrType.SCRIPT_ADDRESS_TEST:
95 return addrData.Count == nExpectedSize;
100 /// Generate base58 serialized representation of novacoin address
102 /// <returns>Base58(data + checksum)</returns>
103 public override string ToString()
105 List<byte> r = new List<byte>();
108 r.AddRange(addrData);
110 return AddressTools.Base58EncodeCheck(r);