decodeFromBytes static method

ChangeKeySignedOperation decodeFromBytes(
  1. Uint8List bytes
)

Decode this operation from raw bytes

Implementation

static ChangeKeySignedOperation decodeFromBytes(Uint8List bytes) {
  // Decode byte-by-byte
  int offset = 0;
  // Signer
  AccountNumberCoder acctNumCoder = AccountNumberCoder();
  Uint8List signerBytes = bytes.sublist(offset, offset + 4);
  AccountNumber signer = acctNumCoder.decodeFromBytes(signerBytes);
  offset += 4;
  // Target
  Uint8List targetBytes = bytes.sublist(offset, offset + 4);
  AccountNumber target = acctNumCoder.decodeFromBytes(targetBytes);
  offset += 4;
  // nOp
  Uint8List nOperationBytes = bytes.sublist(offset, offset + 4);
  int nOperation = Int32.decodeFromBytes(nOperationBytes);
  offset += 4;
  // Fee
  Uint8List feeBytes = bytes.sublist(offset, offset + 8);
  Currency fee = CurrencyCoder().decodeFromBytes(feeBytes);
  offset += 8;
  // Payload
  int payloadLength = PDUtil.decodeLength(bytes.sublist(offset, offset + 2));
  offset += 2;
  Uint8List payload = bytes.sublist(offset, offset + payloadLength);
  offset += payloadLength;
  // Skip curve bytes
  // 6 zero-bytes are always here
  offset += 6;
  // New public key
  int newPublicKeyLength =
      PDUtil.decodeLength(bytes.sublist(offset, offset + 2));
  offset += 2;
  Uint8List newPublicKeyBytes =
      bytes.sublist(offset, offset + newPublicKeyLength);
  PublicKey newPublicKey =
      PublicKeyCoder().decodeFromBytes(newPublicKeyBytes);
  offset += newPublicKeyLength;
  // Signature
  int rLength = PDUtil.decodeLength(bytes.sublist(offset, offset + 2));
  offset += 2;
  BigInt r = PDUtil.decodeBigInt(bytes.sublist(offset, offset + rLength));
  offset += rLength;
  int sLength = PDUtil.decodeLength(bytes.sublist(offset, offset + 2));
  offset += 2;
  BigInt s = PDUtil.decodeBigInt(bytes.sublist(offset, offset + sLength));
  Signature signature = Signature(r: r, s: s);

  // Return op
  return ChangeKeySignedOperation(
      signer: signer, target: target, newPublicKey: newPublicKey)
    ..withNOperation(nOperation)
    ..withFee(fee)
    ..withPayload(payload)
    ..withSignature(signature);
}