# Contract Account L2 flow
# Summary
[The phase one of ENS & Layer 2’s: Our Roadmap ](https://hackmd.io/BVlZm60nQ3iaaP0TdFYOSQ#Phase-1-Bringing-Your-Ethereum-Mainnet-ENS-names-to-L2) is built on the assumption that the name owner is the same across different chain. When setting l2 records for contract accounts(CA), the name itself needs to be owned by an EOA account and EOA account sets forward record on behalf of the CA, while primary names need to be set by CA
## Pre requisite
- User A has EOA account on Mainnet as 0x1
- AND 0x1 owns a ENS name called `safe.eth`
- AND A has a Contract account on $OP as 0x2
- AND A has a Contract account on $BASE as 0x3
- And A chooses to use $OP as primary storage
## The flow
WHEN
ON MAINNET
- A connects as `0x1`
- A sets a resolver of `safe.eth` to OP Resolver on Mainnet
ON OP
- A connects as `0x1`
- A sets OP cointype record to `0x2`
- A sets BASE cointype record to `0x3`
- A sets text record avatar as `CryptoPunks`
- A connects as `0x2`
- A sets primary record to `safe.eth`
ON BASE
- A connects as `0x3`
- A sets primary record to `safe.eth`
THEN
FORWARD LOOKUP
- When A lookup `safe.eth:ETH cointype` on Mainnet, returns nothing
- When A lookup `safe.eth:avatar textrecord` on Mainnet, returns `CryptoPunks`
- When A lookup `safe.eth:OP cointype` on Mainnet, returns `0x2`
- When A lookup `safe.eth:BASE cointype` on Mainnet, returns `0x3`
PRIMARY NAME LOOKUP
- When A lookup `0x02.op.addr.reverse` on Mainnet, returns `safe.eth`
- When A lookup `0x03.base.addr.reverse` on Mainnet, returns `safe.eth`