π― CREATE2 DEPLOYMENT GUIDE (Canonical)
β Why CREATE2 matters hereβ
CREATE2 gives you predictable addresses for the per-creator vault stack, which is essential for:
- cross-chain share tokens (LayerZero OFT)
- consistent integrations (βofficial vault addressβ)
- better UX (preview addresses before deploy)
β How this repo achieves determinismβ
We deploy the stack via an Account Abstraction batch that uses a CREATE2 deployer and versioned salts.
Primary implementation:
frontend/src/components/DeployVaultAA.tsx
Supporting helpers:
contracts/helpers/Create2Deployer.solcontracts/helpers/OFTBootstrapRegistry.sol
Versioned saltsβ
Salts are derived from (at minimum):
- creator token address
- owner address
- chainId
deploymentVersion(so you can do a one-time βv2β without breaking v1)
β What is deterministic vs notβ
- Deterministic (CREATE2): vault, wrapper, shareOFT and other CREATE2-deployed components in the AA flow
- Not necessarily deterministic: anything intentionally chain-specific or deployed via plain CREATE in scripts
π Where to run / inspectβ
- AA deploy (one signature):
frontend/src/components/DeployVaultAA.tsx - AA script runner:
script/deploy-with-aa.ts - Onchain record of deployments:
contracts/factories/CreatorOVaultFactory.sol