decode static method

List<int> decode(
  1. String data, [
  2. Base58Alphabets base58alphabets = Base58Alphabets.bitcoin
])

Decode the provided Base58 encoded data into a List of data bytes using the specified base58alphabets.

Parameters:

  • data: The Base58 encoded string to be decoded.
  • base58alphabets: Optional Base58Alphabets enum to choose the alphabet (default is Base58Alphabets.bitcoin).

Returns: A List containing the decoded data bytes.

Implementation

static List<int> decode(
  String data, [
  Base58Alphabets base58alphabets = Base58Alphabets.bitcoin,
]) {
  final alphabet = base58alphabets.alphabet;
  var val = BigInt.zero;

  for (int i = 0; i < data.length; i++) {
    final c = data[data.length - 1 - i];
    final charIndex = alphabet.indexOf(c);
    if (charIndex == -1) {
      throw ArgumentException.invalidOperationArguments(
        "decode",
        name: "data",
        reason: "Invalid Base58 string.",
      );
    }
    val += BigInt.from(charIndex) * BigInt.from(Base58Const.radix).pow(i);
  }
  List<int> bytes = [];
  if (val != BigInt.zero) {
    bytes = BigintUtils.toBytes(val);
  }

  // Remove leading zeros from bytes
  var padLen = 0;
  for (var i = 0; i < data.length; i++) {
    if (data[i] == alphabet[0]) {
      padLen++;
    } else {
      break;
    }
  }

  return [...List<int>.filled(padLen, 0), ...bytes];
}