Architecture, addresses, and responsibilities of every peaqOS contract.
peaqOS runs on four layers. The core registry and staking contracts live on as UUPS upgradeable proxies; is LayerZero V2 ONFT; follow ERC-4337; and low-level , batch, and WPEAQ operations are peaq chain .
MCR API server (negative-flag reads + admin trust overrides)
Bridging cannot be exercised on agung.MachineNFTAdapter is deployed, but LayerZero V2 has no DVN routes between agung and Base. bridgeNft / bridge_nft calls will not relay end-to-end. Exercise the bridge on peaq mainnet ↔ Base mainnet only.
Central machine identity registry. Mints an ERC-721 Identity NFT to each machine on and orchestrates through IdentityStaking.stakeFor(). Implements ERC-8004 so that each Identity NFT’s tokenURI resolves to the machine’s DID-anchored Machine Card. themselves live on the peaq DID precompile (W3C DID), written by the SDK via writeMachineDIDAttributes and read by the MCR API. Tracks per-machine status (None → Pending → Verified / Rejected / Deactivated). Supports self-registration and proxy registration.SDK methods:registerMachine, registerForKey state:minBond (currently 1 PEAQ), nextMachineId, operatorOf, machineStatus
Bond token storage. Tokens are staked at registration time via stakeFor() and held permanently; no withdrawal path is exposed. Only authorized callers (IdentityRegistry) can initiate stakes. Supports pause / unpause by owner.SDK interaction: Indirect. registerMachine / registerFor route the bond through here automatically.
On-chain store for revenue (type 0) and activity (type 1) . Gates event submission on (a) the machine being registered in IdentityRegistry, and (b) the machine being bonded in IdentityStaking. Authorization rule: msg.sender must be the machine or the . Stores a keccak256 of the raw data; payloads stay off-chain.SDK methods:submitEvent, batchSubmitEventsConcept:Events
LayerZero V2 ONFT representing a machine’s financial profile. Minted in a separate mintNft call after registration: the Machine NFT tokenId is independent from the Identity NFT tokenId. tokenURI resolves to the MCR API’s /metadata/{token_id} endpoint, which returns the Machine Card.SDK methods:mintNft, tokenIdOfConcept:Machine NFT
Wraps MachineNFT for LayerZero V2 bridging. Lock/unlock pattern: locks the on peaq while the mirror exists on the destination chain. Needed only when bridging from peaq.SDK methods:bridgeNft / bridge_nft when source is "peaq"
Standard ONFT721 on Base. Burn/mint pattern: NFT is burned when bridged back to peaq. Needed when bridging from Base.SDK methods:bridgeNft / bridge_nft when source is "base" (pass the address as baseNftAddress / base_nft_address)
CREATE2 factory for deploying MachineSmartAccount BeaconProxy instances. Standard ERC-4337 flow: smart accounts run through the canonical EntryPoint at 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 (same address across all networks).SDK methods:deploySmartAccount / deploy_smart_account, getSmartAccountAddress / get_smart_account_address
The shared BeaconProxy implementation behind deployed smart accounts. Handles owner/machine RBAC and broad machine execution authority. Users never interact with the implementation directly; calls go to the deployed proxy.
Optional peaq-chain contract read by the MCR API server (not the SDK). Holds admin-set flags that modify responses: per-machine negative_flags and trust-level overrides. MCR consumers see the adjusted score in their API response.When the contract isn’t configured, contracts.admin_flags on GET /ready returns false and the service serves unmodified MCR. See API overview.
All core contracts (IdentityRegistry, IdentityStaking, EventRegistry, MachineNFT) use OpenZeppelin UUPS upgradeable proxies with ERC-7201 namespaced storage. Implementation slots are kept distinct by namespace, so future upgrades won’t collide with existing state.MachineSmartAccount uses a BeaconProxy pattern: a single implementation upgrade simultaneously applies to every deployed smart account.