writeFiles method

Future<List<WriteFileResult>> writeFiles({
  1. required List<WalrusFile> files,
  2. required int epochs,
  3. required SuiAccount signer,
  4. required bool deletable,
  5. String? owner,
  6. String? walCoinObjectId,
  7. Map<String, String?>? attributes,
})

Upload multiple WalrusFiles as a quilt in a single call.

Reads bytes, identifiers, and tags from each file, encodes them into a quilt, and uploads as a single Walrus blob.

Returns a list of WriteFileResult with the patch ID for each file.

Mirrors the TS SDK's writeFiles().

Implementation

Future<List<WriteFileResult>> writeFiles({
  required List<WalrusFile> files,
  required int epochs,
  required SuiAccount signer,
  required bool deletable,
  String? owner,
  String? walCoinObjectId,
  Map<String, String?>? attributes,
}) async {
  final blobs = <QuiltBlob>[];
  for (var i = 0; i < files.length; i++) {
    final file = files[i];
    blobs.add(
      QuiltBlob(
        contents: await file.bytes(),
        identifier: await file.getIdentifier() ?? 'file-$i',
        tags: await file.getTags(),
      ),
    );
  }

  final result = await writeQuilt(
    blobs: blobs,
    epochs: epochs,
    signer: signer,
    deletable: deletable,
    owner: owner,
    walCoinObjectId: walCoinObjectId,
    attributes: attributes,
  );

  return result.patches.map((patch) {
    return WriteFileResult(
      id: patch.patchId,
      blobId: result.blobId,
      blobObjectId: result.blobObjectId,
    );
  }).toList();
}