Starkwall runs on Starknet Sepolia and combines:
- Dojo world contracts (
di-actions) - Cartridge wallet/session UX
- Torii indexer
- Starkzap staking UX
- AVNU swap and staking APIs
- Garaga-backed sealed-bid verification
- App:
https://www.starkwall.com - Network: Starknet Sepolia
- YouTube demo: Watch Starkwall Demo
Source of truth: contracts/manifest_sepolia.json
- World address:
0x1fdf743008029a33c60d69b4bd3bc21a8f9ac282bdc6108e3066f6d1e6da151View on Voyager - World class hash:
0x57994b6a75fad550ca18b41ee82e2110e158c59028c4478109a67965a0e5b1e di-actionscontract address:0x9b693df0de1b9217493ea72b159beaea15c4299130a1a31279fd7a64adcb8dView on Voyagerdi-actionsclass hash:0x38dcfd60ea9946ddb696aac88b08e87d998e680313c939f349c4cd8176f25c4
Important: in Sepolia manifest there is one deployed app contract in contracts[] (di-actions).
The other di-* entries are model class hashes (schema), not extra deployed app contract addresses.
Source of truth: client/config.js and contracts/src/systems/actions.cairo
- STRK token (Sepolia):
0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938dView on Voyager - WBTC token (staking pool token):
0x00452bd5c0512a61df7c7be8cfea5e4f893cb40e126bdc40aee6054db955129eView on Voyager - WBTC swap route token (AVNU swaps):
0x020d208b9e57a7f92bfa9f61135446e0961afc340378be97dbd317453c0950aeView on Voyager - ETH token constant (Sepolia):
0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7View on Voyager - Sealed-bid verifier default:
0x03a3af693e4aa3dab8c38ea47b2757443837d5d5fcb6f23263cad63964611624View on Voyager
- RPC default:
https://api.cartridge.gg/x/starknet/sepolia - Torii default:
https://starkwall-torii.fly.dev - AVNU official Sepolia API:
https://sepolia.api.avnu.fi
- Free post: regular onchain post creation.
- Paid post: paid creation flow with size-based pricing and onchain ownership.
- Auction post (3x3): center post + 8 auction slots.
- Sealed auction mode: commit/reveal/finalize pipeline with verifier-backed proofs.
- User profile usernames (onchain index).
- Follow / unfollow and social counters.
- Post sale listing and buying (
set_post_price/buy_post). - Owner feed navigation and profile interactions.
- STRK transfer helper UI.
- STRK <-> WBTC swaps via AVNU.
- Staking for STRK and WBTC paths with stake/unstake/claim UX.
- Per-slot verification modal with relay stage status.
- Onchain tx links to Sepolia Voyager.
View Proof Bundleshows proof trace, hashes, and persisted raw artifacts when available.Re-verify On-chain Nowalways returns a deterministic outcome:VALID(cryptographic): verifier call succeeded with stored/recoveredproofCalldata.INVALID: verifier call returned false.VALID (attested): onchain settlement is confirmed, but cryptographic replay of historical artifacts is not possible.
- Commit phase
- bidder sends
commit_bidwith escrow. - bid amount stays private.
- bidder sends
- Reveal/settlement phase
- relayer generates proof and submits
reveal_bid. - contract verifies through sealed verifier.
- relayer generates proof and submits
- Finalize phase
- relayer submits
finalize_auction_slot. - winner ownership is locked in, and slot moves to publish stage.
- relayer submits
- Refund phase
- non-winning commits are refunded by relayer (
claim_commit_refund).
- non-winning commits are refunded by relayer (
- Noir witness built from
(slot, group, bidder, bid_amount, salt). bbgeneratesvk,proof,public_inputs.- Garaga converts artifacts to Starknet calldata felts.
- Relayer sends
reveal_bid(...proofFelts).
For each sealed job, Starkwall now persists:
- pipeline hashes (
witnessHash,proofHash,vkHash,publicInputsHash); proofCalldatawhen parse succeeds;- raw proof artifacts (
witness,vk,proof,publicInputs) in artifact bundles; - reverify debug steps and recovery attempts.
Endpoints:
GET /sealed/jobsGET /sealed/proof-bundleGET /sealed/proof-artifactsGET /sealed/artifacts/<path>POST /sealed/reverify-now
- If
proofCalldatais missing, relayer tries:- regenerate from current inputs,
- recover from persisted raw artifacts,
- recover from onchain
reveal_bidtransaction scan.
- If none can produce usable calldata but slot is clearly settled onchain, verdict becomes:
VALID (attested by onchain settlement)with explicit reason.
Some historical artifacts can hit bb -> garaga legacy encoding mismatch and fail deterministic replay.
In those cases:
- settlement remains correct onchain,
- UX still converges,
- full raw artifacts are available for audit,
- cryptographic replay may not be reconstructible with current parser/toolchain pair.
Current supported protocol modes:
classic(default)dranddrand_mpcsealed_tree_v1
Starkwall's target direction is to use Taceo-backed co-SNARK/MPC proving for stronger trust assumptions:
- no single prover seeing all sensitive bid context,
- stronger multi-party attestations for settlement proofs,
- eventual move from
shadowmode tostrictmode when blueprint + artifact compatibility is production-stable.
- wiring and worker hooks are integrated;
- can run local/shadow/strict behavior by env;
- remote proving depends on valid blueprint credentials and compatible artifact format.
Key env flags:
SEALED_RELAY_TACEO_MODE=off | shadow | strictTACEO_ENABLE_REMOTE,TACEO_BASE_URL,TACEO_API_KEY,TACEO_BLUEPRINT_IDTACEO_NOIR_PUBLIC_INPUTS,TACEO_WS_URL, optionalTACEO_VOUCHER
Roadmap intent:
- keep sealed flow reliable today with deterministic fallback + full traceability,
- progressively increase Taceo usage in shadow mode,
- cut over specific groups/protocols to strict remote proving when compatibility is proven.
- The contract stores
image_urlas aByteArray(a URL or data string reference), not raw image binary blobs. - Recommended production path: upload image off-chain and store only URL onchain.
- Current upload options supported by relay backend:
- IPFS via Pinata (
SEALED_RELAY_MEDIA_PROVIDER=ipfs_pinata) - Cloudflare Images (
SEALED_RELAY_MEDIA_PROVIDER=cloudflare_images) - Local file storage for dev (
SEALED_RELAY_MEDIA_PROVIDER=local)
- IPFS via Pinata (
- Frontend can send media to
VITE_MEDIA_UPLOAD_URL(or${VITE_SEALED_RELAY_URL}/media/upload) and then write returned URL to onchain post data.
- Primary manager:
client/starkzapManager.js - Method flow:
- stake:
wallet.stake(pool, amount) - claim:
wallet.claimPoolRewards(pool) - unstake:
wallet.exitPoolIntent(pool, amount)thenwallet.exitPool(pool)
- stake:
- Pool resolution uses discovery (
getStakerPools) and symbol/token matching.
- Primary manager:
client/starkzapManager.js - Same Starkzap method family as above.
- If token mismatch exists between wallet-held WBTC token and selected staking pool token, the app bridges through AVNU swap route first, then stakes.
- Manager:
client/dojoManager.js - AVNU SDK calls:
- quote:
getQuotes(...) - swap execute:
executeSwap(...)
- quote:
- Uses official AVNU base URL (
SEPOLIA_BASE_URL) on Sepolia.
- AVNU endpoint is official (
SEPOLIA_BASE_URL->https://sepolia.api.avnu.fi). - Starkzap pools are dynamically discovered (no fixed manual pool hardcoding in manager logic).
- Token constants are aligned between frontend config and contract logic.
- If needed, runtime overrides can be supplied by env vars (
VITE_SWAP_WBTC_TOKEN,VITE_STRK_TOKEN,VITE_SEALED_BID_VERIFIER_ADDRESS, etc.).
Run:
cd contracts
scarb testIncludes guard tests for yield pool behavior and BTC token wiring in actions.cairo.
Run:
cd client
npm testIncludes integration-style tests for:
client/tests/starkzapManager.integration.test.jsclient/tests/dojoManager.swap.integration.test.js
- AVNU staking info endpoint: responsive on Sepolia.
- AVNU quotes endpoint: responsive in both directions:
- STRK -> WBTC
- WBTC -> STRK
cd client
npm run build- Full onchain E2E for WBTC stake/unstake/claim requires funded Sepolia wallets and available route liquidity.
- AVNU staking pool availability can vary by token/pool configuration at runtime.
