Use this file to discover all available pages before exploring further.
peaqOS runs on four on-chain layers. The core registry and staking contracts live on peaq chain as UUPS upgradeable proxies; bridging is LayerZero V2 ONFT; smart accounts follow ERC-4337; and low-level DID, batch, and WPEAQ operations are peaq chain precompiles.
Core contracts use UUPS upgradeable proxies (OpenZeppelin 5.x) with ERC-7201 namespaced storage. Future upgrades preserve state.
Identity NFT (minted by IdentityRegistry) and Machine NFT (minted by MachineNFT) are separate ERC-721 spaces with independent tokenId sequences linked by machineId. See Machine NFT.
IdentityRegistry implements ERC-8004 for DID-anchored machine metadata; the JSON Machine Card is served by the MCR API.
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 registration and orchestrates bonding through IdentityStaking.stakeFor(). Implements ERC-8004 so that each Identity NFT’s tokenURI resolves to the machine’s DID-anchored Machine Card. DID attributes 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) events. 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 wallet or the operator. Stores a keccak256 hash 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 NFT 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 EVM 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 address 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 MCR 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.