Exemplo n.º 1
0
 public BitcoinWitPubKeyAddress(string bech32, Network expectedNetwork)
     : base(Validate(bech32, expectedNetwork), expectedNetwork)
 {
     if (expectedNetwork.GetBech32Encoder(Bech32Type.WITNESS_PUBKEY_ADDRESS, false) is Bech32Encoder encoder)
     {
         byte witVersion;
         var  decoded = encoder.Decode(bech32, out witVersion);
         if (witVersion != 0)
         {
             throw expectedNetwork.Bech32NotSupported(Bech32Type.WITNESS_PUBKEY_ADDRESS);
         }
         _Hash = new WitKeyId(decoded);
     }
     else
     {
         throw expectedNetwork.Bech32NotSupported(Bech32Type.WITNESS_PUBKEY_ADDRESS);
     }
 }
Exemplo n.º 2
0
 public BitcoinWitScriptAddress(string bech32, Network expectedNetwork)
     : base(Validate(bech32, expectedNetwork), expectedNetwork)
 {
     if (expectedNetwork.GetBech32Encoder(Bech32Type.WITNESS_SCRIPT_ADDRESS, false) is Bech32Encoder encoder)
     {
         var decoded = encoder.Decode(bech32, out _);
         _Hash = new WitScriptId(decoded);
     }
     else
     {
         throw expectedNetwork.Bech32NotSupported(Bech32Type.WITNESS_SCRIPT_ADDRESS);
     }
 }
Exemplo n.º 3
0
        public static new TaprootAddress Create(string bech32, Network expectedNetwork)
        {
            if (bech32 is null)
            {
                throw new ArgumentNullException(nameof(bech32));
            }
            if (expectedNetwork is null)
            {
                throw new ArgumentNullException(nameof(expectedNetwork));
            }
            bech32 = bech32.ToLowerInvariant();
            if (expectedNetwork.GetBech32Encoder(Bech32Type.TAPROOT_ADDRESS, false) is Bech32Encoder encoder)
            {
                var decoded = encoder.Decode(bech32, out var v);
#if HAS_SPAN
                if (v == 1 && ECXOnlyPubKey.TryCreate(decoded, out var k))
                {
                    return(new TaprootAddress(bech32, new TaprootPubKey(k), expectedNetwork));
                }
                else
                {
                    throw new FormatException("Invalid TaprootAddress");
                }
#else
                if (v == 1 && decoded.Length == 32)
                {
                    return(new TaprootAddress(bech32, new TaprootPubKey(decoded), expectedNetwork));
                }
                else
                {
                    throw new FormatException("Invalid TaprootAddress");
                }
#endif
            }
            else
            {
                throw expectedNetwork.Bech32NotSupported(Bech32Type.TAPROOT_ADDRESS);
            }
        }