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
70 /// <returns></returns>
73 // Address data is normally generated by RIPEMD-160 hash function
74 int nExpectedSize = 20;
76 switch ((AddrType) nVersion)
78 case AddrType.PUBKEY_ADDRESS:
79 nExpectedSize = 20; // Hash of public key
81 case AddrType.SCRIPT_ADDRESS:
82 nExpectedSize = 20; // Hash of CScript
84 case AddrType.PUBKEY_ADDRESS_TEST:
87 case AddrType.SCRIPT_ADDRESS_TEST:
94 return addrData.Count == nExpectedSize;
98 /// Generate base58 serialized representation of novacoin address
100 /// <returns>Base58(data + checksum)</returns>
101 public override string ToString()
103 List<byte> r = new List<byte>();
106 r.AddRange(addrData);
108 return AddressTools.Base58EncodeCheck(r);