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.