Fund deployment
How funds are created: the KpkOivFactory deploys the whole Safe + shares stack in one transaction, with deterministic addresses across chains.
Funds are not deployed by hand. A single onchain factory, KpkOivFactory, assembles the entire contract stack — Safes, Roles Modifiers, and the shares token — in one transaction, fully wired and with ownership already transferred to the right parties.
deployOiv call produces all seven contracts of a fund.The factory
KpkOivFactory is already deployed at the same address on every supported chain. It has two permissionless entry points; only its infrastructure setters are restricted to the factory owner.
deployStack(StackConfig)
The 5-contract operational stack: Portfolio Safe, Manager Safe, and the three Roles Modifiers.
Sidechains — extending an existing fund to another chain.
deployOiv(OivConfig)
The same 5-contract stack plus a per-fund kpkShares implementation and its ERC-1967 UUPS proxy (7 contracts total).
The chain where the shares token lives (typically mainnet).
What deployOiv produces
Portfolio Safe — holds fund assets; sole owner is the Empty contract, so it can only be driven through the Roles Modifiers.
Manager Safe — operators' multisig; granted the OPERATOR role on the shares token.
Exec / Sub / Manager Roles Modifiers — the permission layer (see Roles and operators). The exec modifier is owned by admin; the sub and manager modifiers are owned by the Manager Safe.
kpkShares implementation — deployed fresh for this fund so its upgrade surface is isolated.
kpkShares proxy — the fund's ERC-20 shares token. Investors hold this. The factory initializes it, registers any additional assets, grants the Portfolio Safe → proxy allowances needed for redemptions, wires the Manager Safe as OPERATOR, hands DEFAULT_ADMIN_ROLE to admin, and renounces its own roles.
The deploying account retains no privileged role afterward — all authority sits with admin and the Manager Safe configured at deploy time.
Deterministic, cross-chain addresses
A single salt drives every CREATE2 deployment, with the caller's address mixed in to prevent salt-squatting. The consequence is the cross-chain invariant:
For the same
(caller, salt)on the same factory,deployStackanddeployOivproduce identical Portfolio Safe, Manager Safe, and Roles Modifier addresses on every chain.
That is what lets a fund run deployOiv on mainnet and deployStack on each sidechain while keeping a single Portfolio Safe address everywhere. Two view functions return the addresses a deployment would produce, without sending a transaction:
predictStackAddresses(StackConfig, caller)→ the 5 stack addresses.predictOivAddresses(OivConfig, caller)→ all 7 addresses.
The same deployer account must be used across all chains to keep addresses identical.
Running deployStack on each sidechain by hand is optional: the CcipOivDeployer orchestrator does the whole fan-out from a single mainnet transaction over Chainlink CCIP, keeping the same addresses everywhere. See Cross-chain deployment (CCIP).
Configuration
deployOiv takes an OivConfig. The shares parameters mirror the fund's economic settings (see Fees and Subscriptions); fee rates are in basis points (100 bps = 1%), TTLs in seconds.
The factory validates the config before deploying (non-empty/duplicate-free Manager Safe owners, valid threshold, non-zero admin and base asset, no duplicate additional assets, required shares params set).
Addresses
KpkOivFactory, KpkSharesDeployer, the CcipOivDeployer orchestrator, and the Empty contract are deployed at the same address on every supported chain (19 chains):
KpkOivFactory
0xbafbca1804B6e46D4c54Cac0A0273F5B2A8F677F
KpkSharesDeployer
0xea084E763F8535CBe28759b990F963BeDf60be9a
CcipOivDeployer
0x6F2A3D35Ff275d6B76dB47eFB0Da1b2358daf11b
Empty (Portfolio Safe owner)
0xA4703438f8cc4fc2C2503a7e43935Da16BA74652
The full list of chains and ownership is on the Deployment addresses page. Per-fund addresses are listed on each fund's Policies and addresses page (for example, USD Alpha).
Trust assumptions. The factory owner controls all infrastructure setters (Safe singleton, Zodiac mastercopy, shares deployer, …) with no timelock, so it must be a governance multisig or TimelockController — never an EOA. For a given fund, the Manager Safe owners receive ownership of the sub and manager Roles Modifiers, so they must be trusted at the same operational level as admin; the exec Roles Modifier (owned by admin) remains the authoritative gatekeeper of Portfolio Safe execution.
Last updated