Poa runs across several blockchains. From a member's perspective this is mostly invisible. You sign in with your passkey. You act inside an org. The right chain handles your transactions. But understanding the layout is useful for treasurers, for founders deciding where to deploy, and for developers integrating with the platform.
This doc covers which chains are involved, what each one does, and how an account on one chain interacts with an organization deployed on another.
Poa is deployed on six chains. Two production, four testnets:
The list of deployed contracts per chain is the source of truth in poa-box/POP. The frontend reads them via poa-app/src/config/networks.js. Future chains can be added without re-deploying members' existing organizations.
This is the most common scenario. A member's account home is Arbitrum, but they are a member of a worker co-op deployed on Gnosis. How does that work?
The answer is that the smart account address derived from a member's passkey is the same on every chain. Because the address is computed deterministically (CREATE2 with a salt derived from the passkey's public key), the same passkey produces the same address on Arbitrum, on Gnosis, on Base, anywhere we deploy infrastructure.
So:
For the mechanics of how the account is the same address across chains, see account abstraction.
Treasury operations happen on the org's home chain (usually Gnosis). When a member wants to cash out USDC earned from an org's treasury, the cashout flow bridges that USDC from the org's chain to Base (where the P2P fiat marketplace lives) and then to the member's payment app.
Bridging is handled by Bungee, which routes through the most efficient bridge available for the route. Most cross-chain USDC moves settle in seconds.
For deposits, anyone can send tokens directly to the treasury's address on the org's deploy chain. Cross-chain deposits are not currently automatic. If you have USDC on Arbitrum and want to deposit to a treasury on Gnosis, you would bridge it yourself (using Bungee directly, or any bridge of your choice) and then send to the treasury address.
In the deployment wizard you will be asked where to deploy. The defaults are:
What is different across chains:
You cannot change an org's home chain after deploy. If your org outgrows the chain it started on, the migration path is to deploy a fresh org on the new chain and migrate membership over. Non-trivial but possible.
Mechanics:
PasskeyAccountFactory contract (source in poa-box/POP) uses CREATE2 with a salt derived from the passkey's credential ID plus public key. Calling getAddress(...) on any chain returns the same address as long as the factory's bytecode and the inputs match.PasskeyAccountFactory being deployed at the same address on every supported chain, or with parameters that produce the same CREATE2 output. The protocol guarantees this. The deployment process verifies it.OrgDeployer, OrgRegistry, PaymasterHub, UniversalAccountRegistry, PasskeyAccountFactory, PoaManager). Their addresses are listed on the protocol dashboard.poa-arb-v-1 for Arbitrum. poa-gnosis-v-1 for Gnosis. The frontend queries the right one based on the org's chain. Cross-chain views query both and merge client-side.