PartialTxV2.fromBytes constructor

PartialTxV2.fromBytes(
  1. Uint8List bytes
)

Implementation

factory PartialTxV2.fromBytes(Uint8List bytes) {
  final sections = PsbtCodec.decode(bytes);
  if (sections.isEmpty) {
    throw FormatException('Invalid PSBT v2: no global section');
  }

  final global = sections[0];
  int txVersion = 2;
  int locktime = 0;
  int inputCount = 0;
  int outputCount = 0;

  for (final kv in global) {
    if (kv.key.isEmpty) continue;
    final keyType = kv.key[0];
    if (keyType == PsbtGlobal.txVersion.keyType && kv.value.length >= 4) {
      txVersion = kv.value[0] |
          (kv.value[1] << 8) |
          (kv.value[2] << 16) |
          (kv.value[3] << 24);
    } else if (keyType == PsbtGlobal.fallbackLocktime.keyType &&
        kv.value.length >= 4) {
      locktime = kv.value[0] |
          (kv.value[1] << 8) |
          (kv.value[2] << 16) |
          (kv.value[3] << 24);
    } else if (keyType == PsbtGlobal.inputCount.keyType) {
      inputCount = _readCompactSize(kv.value);
    } else if (keyType == PsbtGlobal.outputCount.keyType) {
      outputCount = _readCompactSize(kv.value);
    }
  }

  final result = PartialTxV2(txVersion: txVersion, locktime: locktime);
  result._inputCount = inputCount;
  result._outputCount = outputCount;
  result._sections = sections;
  return result;
}