addressToOutputScript static method

Uint8List? addressToOutputScript(
  1. String address, [
  2. NetworkType? nw
])

Implementation

static Uint8List? addressToOutputScript(String address, [NetworkType? nw]) {
  final network = nw ?? bitcoin;
  bool flag = false;
  final parts = address.split(':');
  if(parts.length == 2 && parts[0] == 'bitcoincash'){
    final reAddress = bchToLegacy(address);
    address = reAddress;
  }

  try {
    final decodeBase58 = bs58check.decode(address);
    if (decodeBase58[0] == network.pubKeyHash) return P2PKH(data: PaymentData(address: address), network: network).data.output;
    if (decodeBase58[0] == network.scriptHash) return P2SH(data: PaymentData(address: address), network: network).data.output;

    throw ArgumentError('Invalid version or Network mismatch');
  } catch (e) {
    flag = true;
  }

  try {
    final decodeBech32 = bech32.decode(address);
    if (network.bech32 != decodeBech32.hrp) throw ArgumentError('Invalid prefix or Network mismatch');

    final p2wpkh = P2WPKH(data: PaymentData(address: address), network: network);
    return p2wpkh.data.output;
  } catch (e) {
    flag = true;
  }

  try {
    final decodeBech32m = bech32.decode(address, encoding: 'bech32m');
    if (network.bech32 != decodeBech32m.hrp) throw ArgumentError('Invalid prefix or Network mismatch');

    final hash = Uint8List.fromList(convertBits(decodeBech32m.data.sublist(1), 5, 8, strictMode: true));
    return compile([OPS['OP_1'], hash]);
  } catch (e) {
    flag = true;
  }

  if(flag) throw ArgumentError('$address has no matching Script');
}