Skip to main content
is the ERC-721 that represents a machine on peaq. It anchors a machine’s identity and links to its credit history.

Economics 2.0: one NFT, one ID

Machines activated since 2026-09-01 under Economics 2.0 get one ERC-721 in MachineRegistry, minted inside the same activateMachine transaction that stores the DID document and bonds the tier. The token ID is the machine ID: uint256(keccak256(abi.encode(machineType, credentialSubject))), a full-width value, and the DID is did:peaq:<that id>. There is no separate Identity NFT, no mintNft call, and no tokenIdOf lookup. Transferring the NFT moves ownership of the machine (the account that can rotate the DID controller and transfer again) and leaves the controller in place. Cross-chain movement of a 2.0 machine is a whole-record relocation through MachineBridgeAdapter, which is disabled on chain today. Everything below this line describes the Tokenomics 1.0 model that machines onboarded before 2026-09-01 still use, and whose LayerZero V2 ONFT bridge to Base and Solana is live.

What the Machine NFT represents (Tokenomics 1.0)

The Machine NFT is a financial digital twin, separate from the that IdentityRegistry mints at registration. It carries revenue history, , documentation links, and in its metadata. The two tokens live in different token spaces and are linked by the machineId: Selling or the Machine NFT does not affect the machine’s , rights, or protocol authorization.
Machine ID ≠ Machine NFT token ID. The registerMachine SDK method (register() on IdentityRegistry) and registerFor SDK method (registerFor(machineAddress) on IdentityRegistry) both return a machineId. The mintNft(machineId, recipient) SDK method (mint(machineId, recipient) on MachineNFT) results in a different . MachineNFT has its own auto-incrementing tokenId sequence. Read the Machine NFT token ID back with tokenIdOf(machineId).

Machine Card

The Machine Card is a peaqOS registration document that follows the ERC-8004 registration file pattern and is served by the at /machines/{machine_id}:
For the full MCR score and revenue summary, use GET /machine/ or GET /mcr/; both are computed live by the MCR API on each request.

Ownership semantics

Unlike the Identity NFT, the Machine NFT is not automatically during . It’s a two-step flow owned by the or machine:
1

Register

The or machine calls IdentityRegistry’s register() (proxy uses registerFor(machineAddress)) and receives a machineId. IdentityRegistry simultaneously mints the Identity NFT to machineAddress with tokenId == machineId. SDK helpers: registerMachine / registerFor.
2

Mint Machine NFT

The operator or machine then calls MachineNFT’s mint(machineId, recipient). MachineNFT assigns a new, independent tokenId. Read the assigned token ID back with tokenIdOf(machineId). SDK helper: mintNft.
3

Link DID

Call writeMachineDIDAttributes to store machineId and nftTokenId on the machine’s DID, binding the identity to its financial twin. These attribute writes must be signed by the machine’s own key (the DID subject); the proxy can’t write them on the machine’s behalf. Registration does not write them for you.

Metadata flow

tokenURI() returns a URL pointing to the MCR API. The API reads onchain events and , computes the current MCR score, and returns the full machine profile JSON.
1

Query tokenURI

A consumer or marketplace calls tokenURI(tokenId) on the MachineNFT contract and receives the metadata URL.
2

Fetch metadata

The consumer calls GET /metadata/{token_id} on the MCR API.
3

Compute and return

The API reads onchain events and DID attributes, computes the current MCR score, and returns the same shape as GET /machine/{did}: the full machine profile.
The baseURI is updatable by the protocol admin. If the API domain changes, only the contract’s baseURI is updated. No token migration needed. The lighter Machine Card (ERC-8004 registration document) lives at a separate endpoint: GET /machines/{machine_id}.

Cross-chain portability

Supported routes: peaq ↔ Base (SDK and CLI) and peaq ↔ Solana (live on chain since 2026-08-21, operated with peaq’s tooling; the SDKs accept only "base" as a destination today). Bridging is -only: LayerZero V2 has no DVN routes from agung, so bridgeNft / bridge_nft cannot be exercised against the testnet.
The Machine NFT implements the LayerZero V2 ONFT standard. peaq is the home chain: its NFT supply is canonical and uses a lock/unlock adapter (MachineNFTAdapter); destination chains use the standard burn/mint pattern. A token is either transferable on peaq or represented by exactly one live twin on one spoke, never both.

peaq (home)

Canonical Machine NFT contract. Minting and DID linking happen here. Bridging out locks the NFT in MachineNFTAdapter; bridging back unlocks it.

Base

Bridged destination via LayerZero V2 ONFT (EID 30184). Bridging in mints; bridging back to peaq burns.

Solana

Bridged destination via LayerZero V2 (EID 30168). The twin is a Metaplex Core asset in collection 4Xa1sDAHNWJ4WMkV9ZYvycbinkf8iwwdwNmYRxqZDPtz, not an SPL token; its address changes on every crossing, so key on the peaq token ID. Return legs need a v0 transaction with an address lookup table.
peaq is the home chain. peaq → spoke locks on peaq + mints on the spoke; spoke → peaq burns on the spoke + unlocks on peaq.
Key properties:
  • Home chain: peaq. Minting happens on peaq after machine onboarding.
  • Cross-chain: LayerZero V2 bridges peaq ↔ Base and peaq ↔ Solana via the MachineNFTAdapter lock/unlock pattern on peaq paired with burn/mint on the destination. The Solana program is HraxgdzfcAi3AnxRP5sGSrXGAb9ZT1tZTMNuh9vQLxTu; its tokenURI equivalent points at the same MCR API metadata.
  • Metadata: tokenURI() resolves to the same MCR API URL regardless of which chain holds the NFT.
  • Identity independence: The machine’s peaqID, DID attributes, and event submission stay on peaq regardless of where the NFT sits.
  • peaqID is the DID linked to the Machine NFT via the nftTokenId attribute
  • GET /metadata/ returns the full NFT metadata JSON
  • Activate function handles the minting flow during onboarding