public static bool VerfiyAddress(out AddressData addressData, string Address, byte[] PublicKey, string UserName)
        {
            addressData = new AddressData(Address);

            if (!Utils.ValidateUserName(UserName)) return false;

            byte[] ExpectedAddress = GetAddress(PublicKey, UserName, addressData.NetworkType, addressData.AccountType);

            if (Utils.ByteArrayEquals(addressData.AddressBinary, ExpectedAddress))
            {
                return true;
            }

            return false;
        }
        public void Deserialize(byte[] Data)
        {
            List<ProtocolDataType> PDTs = ProtocolPackager.UnPackRaw(Data);
            int cnt = 0;

            while (cnt < (int)PDTs.Count)
            {
                ProtocolDataType PDT = PDTs[cnt++];

                switch (PDT.NameType)
                {
                    case 0:
                        byte[] PK = new byte[Common.KEYLEN_PUBLIC];
                        ProtocolPackager.UnpackByteVector_s(PDT, 0, Common.KEYLEN_PUBLIC, ref PK);
                        PublicKey = PK;
                        break;

                    case 1:
                        string _Name = "";
                        ProtocolPackager.UnpackString(PDT, 1, ref _Name);
                        Name = _Name;
                        break;

                    case 2:
                        string AddressString = "";
                        ProtocolPackager.UnpackString(PDT, 2, ref AddressString);
                        AddressData = new AddressData(AddressString);
                        break;
                }
            }
        }