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(); }
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."); }