Example #1
0
        /// <summary>
        /// Decodes the given address into its constituting hash, format, network and type
        /// </summary>
        /// <param name="address">A valid Bitcoin Cash address in any format</param>
        /// <returns></returns>
        private static BchAddrData DecodeBase58Address(string address)
        {
            var payload     = Encoders.Base58Check.DecodeData(address);
            var versionByte = payload[0];
            var hash        = payload.Skip(1).ToArray();

            switch (versionByte)
            {
            case 0:
                return(BchAddrData.Create(CashFormat.Legacy, CashNetwork.Mainnet, CashType.P2PKH, hash));

            case 5:
                return(BchAddrData.Create(CashFormat.Legacy, CashNetwork.Mainnet, CashType.P2SH, hash));

            case 111:
                return(BchAddrData.Create(CashFormat.Legacy, CashNetwork.Testnet, CashType.P2PKH, hash));

            case 196:
                return(BchAddrData.Create(CashFormat.Legacy, CashNetwork.Testnet, CashType.P2SH, hash));

            case 28:
                return(BchAddrData.Create(CashFormat.Bitpay, CashNetwork.Mainnet, CashType.P2PKH, hash));

            case 40:
                return(BchAddrData.Create(CashFormat.Bitpay, CashNetwork.Mainnet, CashType.P2SH, hash));

            default:
                throw new Validation.ValidationError($"Invalid address type in version byte: {versionByte}");
            }
        }
Example #2
0
        /// <summary>
        /// Attempts to decode the given address assuming it is a cashaddr address with explicit prefix
        /// </summary>
        /// <param name="address">A valid Bitcoin Cash address in any format</param>
        /// <returns></returns>
        private static BchAddrData DecodeCashAddressWithPrefix(string address)
        {
            var decoded = CashAddr.Decode(address);
            var type    = decoded.Type == "P2PKH" ? CashType.P2PKH : CashType.P2SH;

            switch (decoded.Prefix)
            {
            case "bitcoincash":
                return(BchAddrData.Create(CashFormat.Cashaddr, CashNetwork.Mainnet, type, decoded.Hash));

            case "bchtest":
                return(BchAddrData.Create(CashFormat.Cashaddr, CashNetwork.Testnet, type, decoded.Hash));

            case "regtest":
                return(BchAddrData.Create(CashFormat.Cashaddr, CashNetwork.RegTest, type, decoded.Hash));
            }
            throw new Validation.ValidationError($"Invalid address {address}");
        }
Example #3
0
        /// <summary>
        ///     Attempts to decode the given address assuming it is a cashaddr address with explicit prefix
        /// </summary>
        /// <param name="address">A valid Bitcoin Cash address in any format</param>
        /// <returns></returns>
        private static BchAddrData DecodeCashAddressWithPrefix(string address, Network network)
        {
            var decoded = CashAddr.Decode(address);

            return(BchAddrData.Create(CashFormat.Cashaddr, network, decoded.Type, decoded.Hash));
        }