PSBT.parse constructor
PSBT.parse(
- String psbtBase64
Parse a PSBT from a base64 string.
Implementation
factory PSBT.parse(String psbtBase64) {
int offset = 0;
Uint8List psbtBytes = psbtToBytes(psbtBase64);
offset += 5;
Map<String, dynamic> psbtData = {"global": {}, "inputs": [], "outputs": []};
// Global
Map<String, String> globalMap = {};
while (true) {
int keyLen = Varints.read(psbtBytes, offset);
offset += _getOffset(psbtBytes[offset]);
if (keyLen == 0) {
break;
}
Uint8List key = psbtBytes.sublist(offset, offset + keyLen);
offset += keyLen;
int valueLen = Varints.read(psbtBytes, offset);
offset += _getOffset(psbtBytes[offset]);
Uint8List value = psbtBytes.sublist(offset, offset + valueLen);
offset += valueLen;
globalMap[Converter.bytesToHex(key)] = Converter.bytesToHex(value);
}
psbtData["global"] = globalMap;
// Inputs
if (psbtData["global"]["00"] == null) {
throw Exception('Invalid PSBT');
}
Transaction globalTx =
Transaction.parsePsbtTransaction(psbtData["global"]["00"]);
for (int i = 0; i < globalTx.inputs.length; i++) {
Map<String, String> inputData = {};
while (true) {
int keyLen = Varints.read(psbtBytes, offset);
offset += _getOffset(psbtBytes[offset]);
if (keyLen == 0) {
break;
}
Uint8List key = psbtBytes.sublist(offset, offset + keyLen);
offset += keyLen;
int valueLen = Varints.read(psbtBytes, offset);
offset += _getOffset(psbtBytes[offset]);
Uint8List value = psbtBytes.sublist(offset, offset + valueLen);
offset += valueLen;
inputData[Converter.bytesToHex(key)] = Converter.bytesToHex(value);
}
psbtData["inputs"].add(inputData);
}
// Outputs
for (int i = 0; i < globalTx.outputs.length; i++) {
Map<String, String> outputData = {};
while (true) {
int keyLen = Varints.read(psbtBytes, offset);
offset += _getOffset(psbtBytes[offset]);
if (keyLen == 0) {
break;
}
Uint8List key = psbtBytes.sublist(offset, offset + keyLen);
offset += keyLen;
int valueLen = Varints.read(psbtBytes, offset);
offset += _getOffset(psbtBytes[offset]);
Uint8List value = psbtBytes.sublist(offset, offset + valueLen);
offset += valueLen;
outputData[Converter.bytesToHex(key)] = Converter.bytesToHex(value);
}
psbtData["outputs"].add(outputData);
}
return PSBT(psbtData);
}