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);
50 /// Initialize new instance of SCRIPT_ADDRESS
52 /// <param name="keyID">CScriptID instance</param>
53 public CNovacoinAddress(CScriptID scriptID)
55 nVersion = (byte)AddrType.SCRIPT_ADDRESS;
56 addrData = new List<byte>(scriptID.hashBytes);
60 /// Basic sanity checking
62 /// <returns></returns>
65 // Address data is normally generated by RIPEMD-160 hash function
66 int nExpectedSize = 20;
68 switch ((AddrType) nVersion)
70 case AddrType.PUBKEY_ADDRESS:
71 nExpectedSize = 20; // Hash of public key
73 case AddrType.SCRIPT_ADDRESS:
74 nExpectedSize = 20; // Hash of CScript
76 case AddrType.PUBKEY_ADDRESS_TEST:
79 case AddrType.SCRIPT_ADDRESS_TEST:
86 return addrData.Count == nExpectedSize;
90 /// Generate base58 serialized representation of novacoin address
92 /// <returns>Base58(data + checksum)</returns>
93 public override string ToString()
95 List<byte> r = new List<byte>();
100 return AddressTools.Base58EncodeCheck(r.ToArray());