Use when implementing decentralized storage for NFTs, media files, or large blobs on SUI. Triggers on Walrus blob upload, content-addressable storage needs, or permanent file hosting requirements.
From sui-dev-agentsnpx claudepluginhub first-mover-tw/sui-dev-agents --plugin sui-dev-agentsThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Decentralized blob storage for NFTs, media, and large files.
Walrus provides:
# Install Walrus CLI
cargo install walrus-cli
# Configure network
walrus config --network testnet
# Upload file to Walrus
walrus upload myimage.png
# Returns blob ID: bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
module nft::metadata {
use sui::object::{Self, UID};
use std::string::String;
public struct NFT has key, store {
id: UID,
name: String,
walrus_blob_id: vector<u8>, // Store blob ID
}
public fun create_nft(
name: String,
walrus_blob_id: vector<u8>,
ctx: &mut TxContext
): NFT {
NFT {
id: object::new(ctx),
name,
walrus_blob_id,
}
}
public fun metadata_url(nft: &NFT): String {
// Construct Walrus URL
string::utf8(b"walrus://")
.append(string::utf8(nft.walrus_blob_id))
}
}
import { WalrusClient } from '@walrus-sdk/client';
const client = new WalrusClient({ network: 'testnet' });
async function uploadNFTMetadata(file: File) {
// Upload to Walrus
const blobId = await client.upload(file);
// Store in Move contract
const tx = new Transaction();
tx.moveCall({
target: `${PACKAGE_ID}::nft::create_nft`,
arguments: [
tx.pure('My NFT'),
tx.pure(Array.from(Buffer.from(blobId, 'hex')))
]
});
return blobId;
}
function NFTImage({ blobId }: { blobId: string }) {
const url = `https://walrus-testnet.storage/${blobId}`;
return <img src={url} alt="NFT" />;
}
❌ Storing full URL in Move contract
❌ No retry logic on upload failure
❌ Uploading without checksum verification
❌ Hardcoding Walrus gateway URLs
❌ Not handling large file uploads
Query latest Walrus docs:
const walrusInfo = await sui_docs_query({
type: "docs",
target: "walrus",
query: "blob upload API and storage patterns"
});
Decentralized, permanent storage for your SUI NFTs and dApps!