Architecture
- Which set a client talks to is a configuration choice: the SDKs enter Tokenomics 2.0 mode when you pass
tokenomics20: { deploymentId }(JS) ortokenomics20=Tokenomics20Config(deployment_id=...)(Python); the CLI readsTOKENOMICS_DEPLOYMENT_ID. Economics 2.0 addresses are never environment variables: they ship inside the SDK’s deployment record and are verified againstInfoDesk.peer(role)before every write. - Core contracts use UUPS upgradeable proxies (OpenZeppelin 5.x) with ERC-7201 namespaced storage. Future upgrades preserve state.
- ( by IdentityRegistry) and (minted by MachineNFT) are separate ERC-721 spaces with independent
tokenIdsequences linked bymachineId. See Machine NFT. - IdentityRegistry implements ERC-8004 for DID-anchored machine metadata; the JSON Machine Card is served by the .
peaq mainnet addresses
Economics 2.0 (peaq mainnet)
Deployment recordpeaq-mainnet (chain ID 3338), deployed 2026-09-01 at block 11,446,386. All are ERC-1967 proxies: MachineBridgeAdapter started as a plain deployment and was re-pointed by InfoDesk to a proxy on 2026-09-08 at block 11,541,867. @peaqos/peaq-os-sdk 0.7.0 and peaq-os-sdk 0.7.1 carry the new address; earlier releases fail Economics 2.0 writes at preflight with PEER_MISMATCH. The implementations behind InfoDesk, MachineStateAndSync, MachineBridgeAdapter and CrossChainMirror were upgraded on 2026-09-09; the proxy addresses below did not change. The seven marked SDK are the roles the SDK snapshot carries and verifies against InfoDesk.peer(role); the other six are read by peaq’s own services. Not environment variables.
The PEAQ token the bond is paid in is not a deployed contract:
InfoDesk.peaqToken() resolves to the native-balance precompile 0x0000000000000000000000000000000000000809.
Tokenomics 1.0 (peaq mainnet)
Set these in your environment. The reads them fromfromEnv() / from_env(). The SDK constructor still requires them in Tokenomics 2.0 mode, although activation reads none of them.
Core
Precompiles
Optional
Base mainnet addresses
Needed when bridging into peaq from . Pass asbaseNftAddress / base_nft_address to bridgeNft / bridge_nft.
Solana mainnet addresses
Economics 2.0 (Solana mainnet)
First five programs deployed 2026-09-09, upgraded in place and joined by four more on 2026-09-11 (program IDs unchanged). Protocol chain ID 5, LayerZero EID 30168. Nine Anchor programs mirror the peaq contracts of the same name; all keep the deployment wallet as upgrade authority and as administrator of each program’s root account.
Configuration at deployment: tier fees 0.20 / $40 as on peaq (a fourth tier exists in the config and is disabled), native SOL whitelisted as currency, bridging and relocation flags false. On the peaq side
MachineBridgeAdapter has the Solana store PDA registered as its LayerZero peer (receive gas 400,000, maximum message size 10,000) and holds a 105 PEAQ fee reserve.
Nothing in this table is reachable through the SDKs or the CLI yet, and the 2.0 MCR server does not read the Solana EventRegistry yet, so a Solana machine has no rating. Activating a machine on Solana needs PEAQ bonding for Solana machines, which is in development; see Omni-chain for the status of each capability.
Agung testnet addresses
Economics 2.0 (agung testnet)
Deployment recordagung-2026-08-28 (chain ID 9990). Same seven SDK roles as mainnet. Agung has no paired 2.0 MCR, so monetization calls fail with DEPLOYMENT_UNAVAILABLE there.
Tokenomics 1.0 (agung testnet)
Use these for development on . The contract surface matches mainnet; only the deployed addresses differ.Core
Precompiles
Identical to mainnet: same fixed addresses on every peaq runtime.Optional
Economics 2.0 contracts
MachineRegistry
The 2.0 machine registry: one ERC-721 per machine where the token ID is the machine ID (uint256(keccak256(abi.encode(machineType, credentialSubject)))), plus the machine’s DID document (controller, verification methods, authentication, service endpoints). Standard ERC-721 transfers and approvals are how a machine changes owner. Minting happens only inside MachineStateAndSync.activateMachine; there is no public mint.
SDK methods: getMachineOwner, computeMachineId, transferMachine, safeTransferMachine, approveMachine, setMachineApprovalForAll, setMachineController, setMachineVerificationMethods, setMachineAuthentication, setMachineServiceEndpoints
MachineStateAndSync
Orchestrates the one-transaction activation (activateMachine, activateMachineWithUsdt), voluntary suspend and resume, per-machine and protocol-wide pause flags, and relocation. Never holds tokens.
SDK methods: activateMachine, activateMachineWithUsdt, previewMachineActivation, suspendMachine, resumeMachine, getMachineActivationState, getMachineAvailability
MachineSubscription
Prices and collects the tier bond (requiredPeaqAmount(tier)), stores each machine’s subscription (tier, period, bonded amount), applies grace and runoff, and tracks bonding reward and voucher credits. The allowance spender for PEAQ bonds. Settlement functions are called by the trust validator node.
SDK methods: activateExistingMachine, renewMachine, previewMachineRenewal, getMachineSubscription
InfoDesk
Owner-set protocol parameters (tier prices in USD, grace and runoff durations, epoch length, fee rates, burn and treasury addresses), the peer registry the SDK verifies against, the trust validator allowlist, andpeaqToken().
PriceOracle
Daily currency prices committed by trust validator nodes (commitPrices), read by MachineSubscription to convert USD tier prices to PEAQ. Public read: getLatestPrice(bytes32 currency).
CrossChainMirror and MachineBridgeAdapter
Record the machine’s home chain and carry relocation messages over LayerZero V2. Relocation is disabled (InfoDesk.isBridgingEnabled() false) and the SDKs expose status reads only.
SDK methods: getMachineRelocationStatus
SubscriptionTokenProvisionPool
Converts USDT into the PEAQ bond when a caller settles with--payment usdt / activateMachineWithUsdt / renewMachineWithUsdt. The allowance spender for USDT.
TrustValidatorStaking, CoordinationFeeCollector, ExecutionCostReserve, EventRegistry (2.0), MachineMigrationHub
Live on mainnet, operated by peaq or reserved for later releases; none is exposed in the SDKs or the CLI today. See Economics 2.0.Tokenomics 1.0 contracts
These serve machines onboarded before 2026-09-01. New activations do not use them.IdentityRegistry
Central machine identity registry of Tokenomics 1.0. Mints an ERC-721 Identity NFT to each machine on and orchestrates throughIdentityStaking.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, registerFor
Key state: minBond (currently 1 PEAQ), nextMachineId, operatorOf, machineStatus
IdentityStaking
Bond token storage. Tokens are staked at registration time viastakeFor() 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.
EventRegistry
On-chain store for revenue (type0) 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, batchSubmitEvents
Concept: Events
MachineNFT
LayerZero V2 ONFT representing a machine’s financial profile. Minted in a separatemintNft 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, tokenIdOf
Concept: Machine NFT
Cross-chain contracts
These are the Tokenomics 1.0 Machine NFT bridge. Economics 2.0 machines relocate throughMachineBridgeAdapter and CrossChainMirror instead, which is disabled today.
MachineNFTAdapter (peaq)
WrapsMachineNFT 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. Peers: Base (EID 30184) and Solana (EID 30168, program HraxgdzfcAi3AnxRP5sGSrXGAb9ZT1tZTMNuh9vQLxTu). The Solana lane is live on mainnet since 2026-08-21 and operated with peaq’s tooling; the SDKs accept only "base" as a destination today. See Omni-chain: Solana.
SDK methods: bridgeNft / bridge_nft when source is "peaq"
MachineNFTBase (Base)
StandardONFT721 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)
ERC-4337 smart accounts
MachineAccountFactory
CREATE2 factory for deployingMachineSmartAccount 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
MachineSmartAccount
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.AdminFlags
Optional peaq-chain contract read by the MCR API server (not the SDK). Holds admin-set flags that modify responses: per-machinenegative_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.
Precompiles (peaq chain)
LayerZero endpoints
Used by the bridge adapters. You don’t set these directly; the SDK handles them.
The SDK exports the EIDs as
LAYER_ZERO_EIDS (JS) / LAYERZERO_EIDS (Python) for reference.
Upgrade pattern
All Economics 2.0 contracts (MachineBridgeAdapter since its 2026-09-08 re-point), and all Tokenomics 1.0 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.
See also
Install
Wire the contract addresses into
.env for the SDK.SDK reference
Every method that reads or writes these contracts.
API reference
Off-chain reads derived from the on-chain state.

