Builder Guide
App Release and Deployment
Publishing a new app means deploying new logic, passing the global gate, and letting users opt in locally.
2 sectionsrelease-and-deployment
01
Implementation requirements
- Use a unique ERC-7201 namespace for all persistent state.
- Assume delegatecall: address(this), storage, and balances belong to the wallet.
- Use only-self or ERC-1271 for owner-sensitive actions; do not trust arbitrary msg.sender.
- Do not recreate app allowlists, account signatures, or persistent token-allowance systems.
- Define explicit boundaries for external calls, transfers, replay, expiry, and reentrancy.
02
Release flow
Step 1
Test
Cover real-runtime delegatecall, asset pulls, signatures, and failure paths in Foundry.
Step 2
Deploy deterministically
Use the shared Safe singleton factory + CREATE2 scripts to preserve cross-chain addresses.
Step 3
Allow in Registry
The owner calls setAppStatus(logic, true); the Registry verifies that bytecode exists.
Step 4
Sync metadata
Update packages/deployments, ABIs, frontend ENV_CONFIG, and docs.
Step 5
Block old version
When needed, call setAppStatus(oldLogic, false). Users must opt in to the new address.