Use this file to discover all available pages before exploring further.
Pacto’s on-chain contracts are tracked in a single JSON file — src/lib/evm/pacto-protocol-addresses.json — that serves as the canonical address book for both the Rust backend and the TypeScript frontend. The backend embeds the file at compile time; the frontend imports it via src/lib/evm/pacto-protocol-addresses.ts. This single-source approach prevents the address skew that arises when contract addresses are duplicated across environment files, components, and configuration layers.
Resolution order for each field: PACTO_* env override → JSON address book → error (required fields) or safe-global defaults (Safe factory only).
Because the address book is embedded at compile time with include_str!, any
change to pacto-protocol-addresses.json requires a rebuild of the Tauri
backend (cargo check or cargo build in src-tauri/) before the new
addresses are active. Runtime PACTO_* env overrides are the exception —
they take effect without a rebuild.
The file ships with the covenant-gov Sepolia deployment (chain ID 11155111). Below is the full current content of pacto-protocol-addresses.json as a concrete reference:
pacto-gov implements the Nave Pirata governance framework: modular voting, SquadAdmin executor roles, and hat-governed permissions. Sources are not vendored in this repo.
When upstream interfaces change, update the hand-maintained sol! bindings in evm/contracts/pacto_gov/ against the reviewed commit on GitHub. An optional pacto_gov_revision field on governance rows records the upstream git commit SHA as an audit trail without requiring a submodule pin.
pacto-squad-sponsor — ERC-4337 gas sponsorship factory
pacto-squad-sponsor provides a per-squad paymaster clone factory built on ERC-4337. Each squad gets its own paymaster clone; gas sponsorship is scoped to the squad that funds it.
Shared with pactoGov — links sponsor to governance registry
Squad ID derivation:The on-chain squad key is derived deterministically from the app-level squad identifier:
squadId = keccak256(utf8(parent_id))
where parent_id is the squad or network root ID used within the Pacto app.First-ship path:ISquadSponsorFactory.createSquadSponsorExt(squadId) — deploys an address-list Ext clone with no hat-tree dependency.
For networks not explicitly listed in the JSON, safe_factory_addresses() falls back to canonical safe-global defaults. These are the only fields with a built-in fallback; all pactoGov and squadSponsor fields are required.
Hats Protocol provides on-chain role NFTs used for SquadAdmin permissions and executor gates in the pacto-gov system.
Detail
Value
Alloy bindings
src-tauri/src/evm/contracts/hats/mod.rs
Address in JSON
pactoGov.hats (per network)
Used for
SquadAdmin role enforcement, executor gates, hat-governed permissions
The hats address lives inside the pactoGov block because it is deployed as part of the pacto-gov bundle. The same address is referenced by roleHatClonesFactory and roleHatUpgrader.
Token addresses are not part of pacto-protocol-addresses.json. They are defined in src/lib/wallet/wallet-assets.json, which is the canonical source for per-network token contract addresses, decimals, and display metadata. The Rust backend mirrors this via src-tauri/src/evm/wallet_chain_config.rs (embedded with include_str!).
Do not duplicate token addresses in components. Use the WALLET_ASSETS helpers from assets.ts on the frontend and the wallet_chain_config asset table in Rust.
Production default. Recommended for all squad governance and wallet operations. Set ALCHEMY_RPC_KEY for reliable access.
Ethereum Mainnet
Supported for treasury operations. Arbitrum is preferred for lower gas costs.
Optimism
Supported network. RPC via Alchemy opt-mainnet host.
Gnosis Chain
Supported network. RPC via Alchemy gnosis-mainnet host.
Sepolia Testnet
Used for operator smoke testing. The shipped pacto-protocol-addresses.json contains Sepolia addresses from the covenant-gov deploy bundle.
Local Anvil (dev only)
Chain ID 31337. Dev builds only — gated by #[cfg(debug_assertions)] in Rust. Requires manual contract deployment and local JSON block.
Sepolia addresses differ from every other network. The app routes contract calls through network-keyed entries in the JSON address book. Deploying governance contracts using Sepolia addresses on mainnet (or vice versa) will fail or produce unintended behaviour. Always verify the chainId field in each network block matches the chain you are targeting.
Follow these steps when deploying upgraded contracts or adding a new network:
Edit the JSON file — Add or update the relevant network block in src/lib/evm/pacto-protocol-addresses.json. Match the network key (mainnet, arbitrum, optimism, gnosis, sepolia) to the keys used in wallet-assets.json.
Validate the Rust embed — Run cargo check in src-tauri/ to exercise the compile-time JSON parse. A malformed or missing required field will produce a Rust compile error, not a silent runtime failure.
cd src-tauricargo check
Run the TypeScript tests — Verify the frontend address module still resolves correctly:
npm test -- pacto-protocol-addresses
Update deployment environment variables — If you are using PACTO_* env overrides in any deployment environment, update those values to match the new addresses.
Record the upstream revision — Optionally include the upstream git commit SHA as an audit trail, either in the JSON $comment field or in the commit message.
For local experiments where you do not want to edit the JSON, you can export
PACTO_* env vars before starting the Tauri app. See
Environment Variables — PACTO_* overrides
for the full list of override variable names.