executeCertifyBlobTransaction method

Future<String> executeCertifyBlobTransaction({
  1. required String blobId,
  2. required String blobObjectId,
  3. required bool deletable,
  4. ProtocolMessageCertificate? certificate,
  5. required SuiAccount signer,
  6. int? committeeSize,
})

Execute a transaction that certifies a blob on-chain.

Requires the certificate from the upload relay or aggregated from individual storage node confirmations.

Returns the transaction digest.

Mirrors the TS SDK's executeCertifyBlobTransaction().

Implementation

Future<String> executeCertifyBlobTransaction({
  required String blobId,
  required String blobObjectId,
  required bool deletable,
  ProtocolMessageCertificate? certificate,
  required SuiAccount signer,
  int? committeeSize,
}) async {
  if (certificate == null) {
    throw ArgumentError(
      'A ProtocolMessageCertificate is required for certification. '
      'Obtain one from the upload relay or aggregate storage node '
      'confirmations.',
    );
  }

  // Resolve committee size: explicit > committee info > infer from signers.
  final resolvedCommitteeSize =
      committeeSize ??
      _committee?.nodes.length ??
      (certificate.signers.isEmpty
          ? 0
          : certificate.signers.reduce((a, b) => a > b ? a : b) + 1);

  final txBuilder = await _ensureTxBuilder();
  final tx = txBuilder.certifyBlobTransaction(
    CertifyBlobOptions(
      blobId: blobId,
      blobObjectId: blobObjectId,
      deletable: deletable,
      certificate: certificate,
      committeeSize: resolvedCommitteeSize,
    ),
  );
  tx.setSender(signer.getAddress());

  final result = await suiClient.signAndExecuteTransactionBlock(
    signer,
    tx,
    responseOptions: SuiTransactionBlockResponseOptions(showEffects: true),
  );

  return result.digest;
}