decode static method
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];
}