React SDK
useUploadBlobs
Upload blobs to the Shelby network
This mutation handles the complete blob upload process including encoding blobs with erasure coding, registering commitments on-chain (if not already registered), and uploading blob data to the RPC endpoint.
It supports both account signers and wallet adapter signers, and includes logic to skip registration for blobs that already exist.
Examples
Account Signer
import { Account } from "@aptos-labs/ts-sdk";
import { useUploadBlobs } from "@shelby-protocol/react";
function UploadBlob() {
const uploadBlobs = useUploadBlobs({
onSuccess: () => {
console.log("Upload complete!");
},
});
const handleUpload = async () => {
const signer = Account.generate();
const fileData = new Uint8Array([/* your file data */]);
uploadBlobs.mutate({
signer,
blobs: [{ blobName: "example.txt", blobData: fileData }],
expirationMicros: Date.now() * 1000 + 86400000000, // 1 day
});
};
return (
<button onClick={handleUpload} disabled={uploadBlobs.isPending}>
{uploadBlobs.isPending ? "Uploading..." : "Upload Blob"}
</button>
);
}Wallet Adapter
import { useUploadBlobs } from "@shelby-protocol/react";
import { useWallet } from "@aptos-labs/wallet-adapter-react";
function UploadBlobWithWallet() {
const { account, signAndSubmitTransaction } = useWallet();
const uploadBlobs = useUploadBlobs();
const handleUpload = async () => {
if (!account || !signAndSubmitTransaction) {
alert("Please connect your wallet");
return;
}
const fileData = new Uint8Array([/* your file data */]);
uploadBlobs.mutate({
signer: { account: account.accountAddress, signAndSubmitTransaction },
blobs: [{ blobName: "example.txt", blobData: fileData }],
expirationMicros: Date.now() * 1000 + 86400000000,
});
};
return (
<button onClick={handleUpload} disabled={uploadBlobs.isPending}>
{uploadBlobs.isPending ? "Uploading..." : "Upload Blob"}
</button>
);
}Parameters
Prop
Type
React Query Options
Prop
Type
Mutation Variables
Prop
Type
Return Value
Prop
Type