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); } }
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); } }
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); } }