Exemplo n.º 1
0
        private static byte[] ParseAddressHash(CashFormat format, string str, Network expectedNetwork)
        {
            switch (format)
            {
            case CashFormat.Legacy:
                var data         = Encoders.Base58Check.DecodeData(str);
                var versionBytes = expectedNetwork.GetVersionBytes(Base58Type.PUBKEY_ADDRESS, false);
                if (versionBytes != null && data.StartWith(versionBytes))
                {
                    if (data.Length == versionBytes.Length + 20)
                    {
                        return(data.Skip(versionBytes.Length).ToArray());
                    }
                }

                break;

            case CashFormat.Cashaddr:
                var cashaddr = CashAddr.Decode(str);
                if (cashaddr.Prefix == expectedNetwork.Prefix)
                {
                    return(cashaddr.Hash);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            throw new FormatException();
        }
Exemplo n.º 2
0
        private static string ValidateCashAddr(string str, ref Network expectedNetwork)
        {
            var data = CashAddr.Decode(str);

            if (data.Type == BchAddr.CashType.P2PKH)
            {
                var networks = expectedNetwork == null?Network.GetNetworks() : new[] { expectedNetwork };
                foreach (var network in networks)
                {
                    if (data.Prefix == network.Prefix)
                    {
                        expectedNetwork = network;
                        return(str);
                    }
                }
            }

            throw new FormatException("Invalid public key address.");
        }