WalrusDirectClient class

Wallet-integrated Walrus client.

Usage (one-shot upload with upload relay):

final client = WalrusDirectClient(
  network: WalrusNetwork.testnet,
  suiClient: SuiClient(SuiUrls.testnet),
  walrusPackageId: '<package-id>',
  uploadRelay: UploadRelayConfig(
    host: 'https://upload-relay.testnet.walrus.space',
  ),
);

final result = await client.writeBlob(
  blob: rawData,
  metadata: preComputedMetadata,
  epochs: 3,
  signer: myAccount,
  deletable: true,
);

Usage (direct mode, no relay):

final client = WalrusDirectClient(
  network: WalrusNetwork.testnet,
  suiClient: SuiClient(SuiUrls.testnet),
  walrusPackageId: '<package-id>',
  encoder: WalrusBlobEncoder(),
);
client.setCommittee(committeeInfo);

final result = await client.writeBlob(
  blob: rawData,
  epochs: 3,
  signer: myAccount,
  deletable: true,
);

Usage (multi-step flow for dApp wallet):

final flow = client.writeBlobFlow(
  blob: rawData,
  metadata: preComputedMetadata,
);

await flow.encode();
final registerTx = flow.register(...);
// Sign registerTx with dApp wallet
await flow.upload(WriteBlobFlowUploadOptions(digest: txDigest));
final certifyTx = flow.certify();
// Sign certifyTx with dApp wallet
final result = await flow.getBlob();

Constructors

WalrusDirectClient({WalrusNetwork? network, WalrusPackageConfig? packageConfig, String? walrusPackageId, required SuiClient suiClient, UploadRelayConfig? uploadRelayConfig, BlobEncoder? encoder, BlsProvider? blsProvider, WalrusLogLevel logLevel = WalrusLogLevel.none, WalrusLogHandler? onLog})
WalrusDirectClient.fromNetwork({required WalrusNetwork network, String? walrusPackageId, SuiClient? suiClient, UploadRelayConfig? uploadRelay, BlobEncoder? encoder, BlsProvider? blsProvider, WalrusLogLevel logLevel = WalrusLogLevel.none, WalrusLogHandler? onLog})
Convenience constructor using a WalrusNetwork preset.
factory

Properties

blsProvider → BlsProvider?
Optional BLS12-381 provider for signature aggregation.
final
committee → CommitteeInfo?
Get the current committee info (returns null if not yet resolved).
no setter
committeeResolver → CommitteeResolver
Access the committee resolver.
no setter
encoder → BlobEncoder?
Optional blob encoder for computing metadata client-side.
final
hashCode → int
The hash code for this object.
no setterinherited
logger → WalrusLogger
Logger for this client. Configure WalrusLogger.level or WalrusLogger.onRecord to control output.
final
network → WalrusNetwork?
The target Walrus network.
final
packageConfig → WalrusPackageConfig
On-chain Walrus system config.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
stateReader → SystemStateReader
Access the system state reader for pricing and state queries.
no setter
suiClient → SuiClient
Sui RPC client for reading chain state and executing transactions.
final
uploadRelayConfig → UploadRelayConfig?
Upload relay configuration (if using relay mode).
final

Methods

certifyBlobTransaction(CertifyBlobOptions options) → Future<Transaction>
Build a certify blob transaction.
close() → void
Close cached storage node connections. Call when done with this client.
deleteBlobTransaction({required String blobObjectId}) → Future<Transaction>
Build a delete blob transaction.
encodeQuiltBlobs({required List<QuiltBlob> blobs}) → Future<EncodeQuiltResult>
Encode multiple blobs into a quilt.
exchangeAllForSui({required String walCoinObjectId, required SuiAccount signer, String? exchangeObjectId}) → Future<String>
Exchange all WAL in a coin for SUI tokens.
exchangeAllForWal({required String suiCoinObjectId, required SuiAccount signer, String? exchangeObjectId}) → Future<String>
Exchange all SUI in a coin for WAL tokens.
exchangeForSui({required String walCoinObjectId, required BigInt amountWal, required SuiAccount signer, String? exchangeObjectId}) → Future<String>
Exchange a specific amount of WAL for SUI tokens.
exchangeForWal({required String suiCoinObjectId, required BigInt amountSui, required SuiAccount signer, String? exchangeObjectId}) → Future<String>
Exchange a specific amount of SUI for WAL tokens.
executeCertifyBlobTransaction({required String blobId, required String blobObjectId, required bool deletable, ProtocolMessageCertificate? certificate, required SuiAccount signer, int? committeeSize}) → Future<String>
Execute a transaction that certifies a blob on-chain.
executeCreateStorageTransaction({required int size, required int epochs, required SuiAccount signer, String? walCoinObjectId, String? owner}) → Future<({String digest, String storageObjectId})>
Execute a transaction that creates a storage reservation.
executeDeleteBlobTransaction({required String blobObjectId, required SuiAccount signer}) → Future<String>
Execute a transaction that deletes a deletable blob.
executeExtendBlobTransaction({required String blobObjectId, required int epochs, required SuiAccount signer, String? walCoinObjectId}) → Future<String>
Execute a transaction that extends a blob's validity period.
executeRegisterBlobTransaction({required int size, required int epochs, required String blobId, required Uint8List rootHash, required bool deletable, required SuiAccount signer, String? owner, String? walCoinObjectId, Map<String, String?>? attributes}) → Future<({String blobObjectId, String digest})>
Execute a transaction that registers a blob on-chain.
executeWriteBlobAttributesTransaction({required String blobObjectId, required Map<String, String?> attributes, required SuiAccount signer}) → Future<String>
Execute a transaction that writes attributes to a blob.
extendBlobTransaction({required String blobObjectId, required int epochs, String? walCoinObjectId, BigInt? extensionCost}) → Future<Transaction>
Build an extend blob transaction.
findWalCoin(String ownerAddress, BigInt requiredAmount, {bool merge = false}) → Future<String?>
Find a WAL coin with sufficient balance for the given amount.
getBlob({required String blobId}) → Future<WalrusBlob>
Get a WalrusBlob by blob ID for lazy reading.
getBlobIdFromObjectId({required String objectId}) → Future<String?>
Look up the base64 blob ID for a Sui Blob object given its object ID.
getBlobMetadata({required String blobId, int concurrencyLimit = 3}) → Future<Uint8List>
Get blob metadata from storage nodes.
getBlobObjectInfo({required String objectId}) → Future<Map<String, dynamic>?>
Read full on-chain info for a Walrus Blob object.
getBlobType() → Future<String>
Get the Sui Move type for Walrus Blob objects.
getCommittee() → Future<CommitteeInfo>
Get the current committee info, auto-resolving from chain if needed.
getFiles({required List<String> ids}) → Future<List<WalrusFile>>
Get WalrusFile instances for a list of blob IDs or quilt patch IDs.
getOwnedBlobs({required String owner, int limit = 50}) → Future<List<Map<String, dynamic>>>
Query all Walrus Blob objects owned by owner.
getSecondarySliver({required String blobId, required int sliverIndex}) → Future<Uint8List>
Read a single secondary sliver for a blob from the appropriate node.
getSlivers({required String blobId}) → Future<List<SliverData>>
Read primary slivers from storage nodes for blob reconstruction.
getVerifiedBlobStatus({required String blobId}) → Future<BlobStatus>
Get the verified blob status from multiple storage nodes.
getWalExchangePackageId() → Future<String>
Resolve the WAL exchange package ID from the first exchange object.
getWalType() → Future<String>
Resolve WAL coin type from on-chain staking module.
lookupBlobObjectId({required String blobId, required String owner}) → Future<String?>
Look up the Sui object ID for a blob given its blob ID (base64) and owner address.
mergeWalCoins(String ownerAddress, SuiAccount signer) → Future<String>
Merge all WAL coins for an address into a single coin.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
readBlob({required String blobId}) → Future<Uint8List>
Read a full blob from storage nodes by fetching slivers and decoding.
readBlobAttributes({required String blobObjectId}) → Future<Map<String, String>?>
Read the on-chain attributes (metadata key-value pairs) for a blob.
registerBlobTransaction(RegisterBlobOptions options, {required String walCoinObjectId, required BigInt storageCost, required BigInt writeCost}) → Future<Transaction>
Build a register blob transaction with proper WAL payment.
reset() → void
Clear all cached values. Call after epoch changes.
resolveBlobId(String id) → Future<String>
Resolve an input that may be either a base64 blob ID or a Sui object ID (0x...) into a base64 blob ID.
retryOnPossibleEpochChange<T>(Future<T> fn()) → Future<T>
Retry a function once if it throws RetryableWalrusClientError.
setCommittee(CommitteeInfo committee) → void
Set the committee info for direct mode operations.
stakingState() → Future<WalrusStakingState>
Read the staking state (epoch, committee, epoch state).
storageCost(int size, int epochs) → Future<StorageCostInfo>
Calculate storage cost for a blob.
systemState() → Future<WalrusSystemState>
Read current system state (pricing, epoch, shards).
toString() → String
A string representation of this object.
inherited
writeBlob({required Uint8List blob, BlobMetadata? metadata, required int epochs, required SuiAccount signer, required bool deletable, String? owner, String? walCoinObjectId, Map<String, String?>? attributes}) → Future<WriteBlobResult>
Upload a blob in a single call (registers, uploads, certifies).
writeBlobAttributesTransaction({required String blobObjectId, required Map<String, String?> attributes, Transaction? transaction}) → Future<Transaction>
Build a transaction that writes attributes to a blob.
writeBlobFlow({required Uint8List blob, BlobMetadata? metadata}) → Future<WriteBlobFlow>
Create a multi-step write blob flow for dApp wallet integration.
writeEncodedBlobToNodes({required EncodedBlob encodedBlob, required CommitteeInfo committee, required bool deletable, required String blobObjectId, Duration nodeTimeout = const Duration(seconds: 30), int maxConcurrency = 20}) → Future<Map<int, StorageConfirmation?>>
Write encoded slivers to all storage nodes in the committee.
writeFiles({required List<WalrusFile> files, required int epochs, required SuiAccount signer, required bool deletable, String? owner, String? walCoinObjectId, Map<String, String?>? attributes}) → Future<List<WriteFileResult>>
Upload multiple WalrusFiles as a quilt in a single call.
writeFilesFlow({required List<WalrusFile> files}) → Future<WriteFilesFlow>
Create a multi-step write files flow for dApp wallet integration.
writeQuilt({required List<QuiltBlob> blobs, required int epochs, required SuiAccount signer, required bool deletable, String? owner, String? walCoinObjectId, Map<String, String?>? attributes}) → Future<WriteQuiltResult>
Upload a quilt (multi-file blob) in a single call.

Operators

operator ==(Object other) → bool
The equality operator.
inherited