writeQuilt method

Future<WriteQuiltResult> writeQuilt({
  1. required List<QuiltBlob> blobs,
  2. required int epochs,
  3. required SuiAccount signer,
  4. required bool deletable,
  5. String? owner,
  6. String? walCoinObjectId,
  7. Map<String, String?>? attributes,
})

Upload a quilt (multi-file blob) in a single call.

Encodes all blobs into a quilt, uploads as a single Walrus blob, and sets the _walrusBlobType: 'quilt' attribute.

Returns the blob ID, blob object ID, certify digest, and quilt index with patch IDs.

Mirrors the TS SDK's writeQuilt().

Implementation

Future<WriteQuiltResult> writeQuilt({
  required List<QuiltBlob> blobs,
  required int epochs,
  required SuiAccount signer,
  required bool deletable,
  String? owner,
  String? walCoinObjectId,
  Map<String, String?>? attributes,
}) async {
  final encoded = await encodeQuiltBlobs(blobs: blobs);
  final result = await writeBlob(
    blob: encoded.quilt,
    epochs: epochs,
    signer: signer,
    deletable: deletable,
    owner: owner,
    walCoinObjectId: walCoinObjectId,
    attributes: <String, String?>{'_walrusBlobType': 'quilt', ...?attributes},
  );

  // Compute patch IDs for each entry in the quilt index.
  final patchesWithIds = encoded.index.patches.map((patch) {
    return QuiltPatchResult(
      startIndex: patch.startIndex,
      endIndex: patch.endIndex,
      identifier: patch.identifier,
      tags: patch.tags,
      patchId: encodeQuiltPatchId(
        quiltBlobId: result.blobId,
        version: 1,
        startIndex: patch.startIndex,
        endIndex: patch.endIndex,
      ),
    );
  }).toList();

  return WriteQuiltResult(
    blobId: result.blobId,
    blobObjectId: result.blobObjectId,
    certifyDigest: result.certifyDigest,
    patches: patchesWithIds,
  );
}