Skip to main content

Sui Wallet Exploration

How do safety standards actually get written?

Not from committees. From the workshop floor, after someone gets hurt.

The Incident

On January 2, 2026, an official Solana Mobile notification deleted a seed phrase without warning. ~$10K gone. No confirmation dialog, no balance check, no recovery path. Support ran 33 days without resolution.

In a factory, that's a near-miss report. It becomes a procedure. The procedure becomes a standard. The standard prevents it from happening to anyone else.

The Standard

The response was not a complaint. It was architecture — five safety patterns built for Solana, now adapted for Sui. Not a port. A rethink. Because Sui's object model and Move language prevent entire categories of failure at the language level.

This is the knowledge stack in action:

StageWhat HappenedWhat It Becomes
PainSeed phrase deleted, $10K lostThe observation that reveals the gap
ProtocolFive safety patterns built for SolanaSpecific rules that prevent the failure
StandardSame patterns proven across Sui + SolanaChain-agnostic principles any wallet can adopt
PlatformOpen components, shared across venturesInfrastructure that compounds

Every safety procedure in a factory started the same way. Someone got hurt. Someone wrote it down. The write-up became the standard. The standard transformed the industry.


The Safety Thesis

Four failures from the incident. Each maps to an architectural fix:

FailureWhat HappenedSolana Fix (Built)Sui Fix (This PRD)
Silent destructionSeed deleted without warningNuclearWarningDialog — multi-step confirmation with countdownMove linear types — resources cannot be accidentally destroyed
No balance checkDestructive op ignored existing assetsBalanceAwareGuard — checks all token accountsObject ownership — assets are explicit objects, not hidden account balances
No simulationUser couldn't preview consequencesTransactionSimulator — dry-run before signPTB inspection — preview all effects of programmable transaction block
Key exposureApp touched seed phrase directlyWallet adapter pattern — app never sees keyszkLogin — Web2 credentials sign via ZKP

The principle: Safety is an architectural constraint, not a feature. The best safety code is code that doesn't need to exist because the platform prevents the failure.


Patterns

1. Connection

Solana: Wallet adapter connects, app receives only public key.

Sui: Same principle, better primitives.

ComponentWhat It DoesSui Advantage
SuiWalletConnectConnect via Sui dApp KitNative hooks, typed responses
ZkLoginConnectSign in with Google/Apple/TwitchNo wallet install — zkLogin
SponsoredSessionApp covers gas costsSponsored transactions — zero friction
ConnectionGuardVerify network + wallet stateObject-level checks, not account-level

zkLogin changes the game: Most wallet UX problems stem from the wallet itself — install friction, seed phrase management, network switching. zkLogin eliminates the wallet as a user-facing concept. Sign in with Google. Sui handles the rest.

2. Transaction Safety

Solana: TransactionSimulator dry-runs transactions and shows balance impact before signing.

Sui: PTBs make this more powerful — up to 1024 operations in one transaction, all previewable.

ComponentWhat It DoesSui Advantage
PtbInspectorVisualize all operations in a PTB before executionOne transaction, full visibility
ObjectDiffPreviewShow which objects change and howExplicit mutations, not opaque balance shifts
GasEstimatorPredict gas cost before signingPredictable fees even under load
EffectsSimulatorDry-run against current stateDev Inspect — native

The object difference: On Solana, simulation shows "your SOL goes from X to Y." On Sui, it shows "Object A (your NFT) transfers to Address B, Object C (coin) splits into Object D (payment) + Object E (change)." Explicit objects make consequences visible.

3. Destructive Operations

Solana: NuclearWarningDialog — multi-step confirmation with countdown for irreversible actions.

Sui: Move's type system adds a layer Solana can't have.

ComponentWhat It DoesSui Advantage
DestructiveOpGateMulti-step confirmation for key/object deletionDefense in depth
ObjectOwnershipCheckVerify caller owns the object before destructive actionMove has key — ownership in the type system
CooldownTransferTime-locked transfers for high-value objectsClock module — on-chain time
MoveResourceGuardDisplay: "This object cannot be accidentally destroyed"Move linear types — compile-time, not runtime

Move's structural safety: A resource with the key ability can only be transferred or stored — never silently dropped. The Solana Seed Vault incident was a "resource accidentally dropped" bug. Move makes that a compile-time error.

// A Coin<SUI> cannot be silently destroyed.
// The compiler enforces it. No UI warning needed.
public fun transfer_safely(coin: Coin<SUI>, recipient: address) {
// coin MUST go somewhere — transfer, merge, or split
// letting it drop = compile error
transfer::public_transfer(coin, recipient);
}

4. Balance Guard

Solana: BalanceAwareGuard — checks all token accounts before destructive operations.

Sui: Objects make this simpler and more complete.

ComponentWhat It DoesSui Advantage
OwnedObjectsAuditList ALL objects owned by addressOne call — suix_getOwnedObjects
ValueAtRiskCalculate total value of owned objectsNo hidden token accounts to miss
PreDestructionInventoryFull inventory before any key/account actionObjects enumerable by design

The Solana problem was hidden state. Token accounts exist but aren't visible unless you know to look. On Sui, every asset is an explicit owned object. getOwnedObjects returns everything. Nothing hides.

5. Asset Operations

Solana: Separate patterns for SPL tokens vs SOL vs NFTs.

Sui: Everything is an object. One pattern.

ComponentWhat It DoesSui Advantage
ObjectTransferTransfer any owned objectOne function: transfer::public_transfer
CoinSplitMergeSplit/merge coin objects for exact paymentsNative coin operations
NftManagerDisplay, transfer, list NFTsNFTs are objects — same as coins
KioskIntegrationList/buy/delist on marketplaceKiosk standard

Cross-Chain Comparison

Build both, learn from both:

DimensionSolanaSuiImplication
Data modelAccounts + token accountsObjects with explicit ownersSui: nothing hides. Solana: must discover accounts
SafetyRuntime checks (UI code)Compile-time (Move type system)Sui: fewer bugs possible
OnboardingWallet requiredzkLogin (no wallet)Sui: mainstream-ready
GasUser paysSponsored transactions nativeSui: app covers gas
ComposabilityCPI calls between programsPTBs (1024 ops in one tx)Sui: complex flows atomic
Speed~400ms~390msComparable
EcosystemMature, deep DeFiGrowing, strong gaming/NFTSolana: proven. Sui: higher ceiling

Architecture

Stack

┌─────────────────────────────────────────────────┐
│ SAFETY PATTERNS (UI) │
│ Connect │ Simulate │ Guard │ Balance │ Assets │
├─────────────────────────────────────────────────┤
│ SUI DAPP KIT │
│ Hooks │ Components │ Wallet Connect │ RPC │
├─────────────────────────────────────────────────┤
│ MOVE CONTRACTS │
│ Identity │ Links │ Loyalty │ Device Registry │
├─────────────────────────────────────────────────┤
│ SUI CORE │
│ Objects │ PTBs │ zkLogin │ Mysticeti (~390ms) │
└─────────────────────────────────────────────────┘

Existing Move Contracts

Already built in Stackmates:

ModuleWhat It DoesWallet Relevance
identityOn-chain identity objectsUser profile, reputation
linksObject relationship chainsAttribution, provenance
loyaltyPoints/rewards systemDisplay loyalty objects
collisionCross-domain interactionsThird-space object creation
device-registryDePIN device managementHardware wallet integration
governanceVoting and proposalsDAO participation from wallet

Each has a TypeScript client. The wallet UI wires to these.


Why This Matters

Crypto products are unfriendly to non-experts. Hiding what's going on undermines the trust the technology ensures. Every wallet team navigates this tension independently. There is no shared standard.

Compare that to factory engineering. NIST, ISO, OWASP — every safety-critical industry has extractable standards that prevent known failure modes. Crypto wallets don't. Each team learns the hard way.

This PRD is the beginning of a wallet safety standard:

What factories haveWhat wallets don'tThis PRD provides
Near-miss reportingIncidents buried in support ticketsPublic documentation of failure modes
Safety proceduresEach team invents their ownFive extractable patterns with rationale
Cross-site adoptionPatterns locked inside companiesChain-agnostic principles proven on Sui + Solana
Commissioning gatesShip and hopeProgressive verification per component

The Dream-Engineering handoff: the dream is wallets that don't destroy people's assets. The standard is the spec. The engineering is building it in the open.


Commissioning

Each component progresses through the factory model:

ComponentSchemaClientUITestsStatus
SuiWalletConnectPendingPendingPendingPending0%
ZkLoginConnectPendingPendingPendingPending0%
PtbInspectorPendingPendingPendingPending0%
ObjectDiffPreviewPendingPendingPendingPending0%
DestructiveOpGatePendingPendingPendingPending0%
OwnedObjectsAuditPendingPendingPendingPending0%
ObjectTransferPendingPendingPendingPending0%
KioskIntegrationPendingPendingPendingPending0%

Pre-existing: 12 Move modules deployed to testnet. 5 TypeScript clients built. Wallet UI is the gap.


Next Steps

1. Port TransactionSimulator → PtbInspector (highest learning)
2. Implement ZkLoginConnect (biggest UX unlock)
3. Build ObjectDiffPreview (Sui's unique advantage)
4. Wire to existing Move contracts
5. Deploy alongside Solana version for comparison

Smallest move: One component. Both chains. Compare. The feedback loop validates the thesis.

Context