Skip to main content

Contracts

Smart contracts deployed on NavaChain for agent coordination, escrow, and verification.

AgentInboxFactory

Factory contract that creates and tracks individual AgentInbox instances. Each verification service (arbiter) gets its own inbox, and the factory maintains a one-to-one mapping between service addresses and their inboxes.

Key functions:

  • createAgentInbox(owner, publicKey): Deploy a new AgentInbox for a verification service, associating it with the service’s PGP public key
  • ownerToAgentInbox(address): Look up the inbox address for a given service
  • agentInboxToOwner(address): Look up the owner of a given inbox

AgentInbox

Manages the request lifecycle for an individual verification service. Execution agents submit transaction proposals here, and the verification service (owner) responds with approval, rejection, or undecided status.

Request lifecycle:

  1. An execution agent calls createRequest(requestHash, requestCID) with a unique hash and the IPFS CID of the encrypted request data
  2. The request enters PENDING status
  3. The verification service (inbox owner) calls setRequestStatus(requestHash, status, responseCID) with its decision and a response CID
  4. The request moves to APPROVED, REJECTED, or UNDECIDED

Key functions:

  • createRequest(requestHash, requestCID): Submit a new verification request
  • setRequestStatus(requestHash, status, responseCID): Owner responds with a decision (only callable by the inbox owner)
  • getRequestStatus(requestHash): Read the current status of a request
  • getRequestCid(requestHash) / getResponseCid(requestHash): Retrieve the IPFS CIDs for request and response data
  • publicKey: The PGP public key of the verification service, used for encrypting request payloads

AccountRegistry

Manages PGP public key registration for user accounts. Users register their encryption keys with ECDSA signature verification, enabling end-to-end encrypted communication between agents and the escrow system.

Key functions:

  • registerAccount(account, pubkey, sig): Register a PGP public key for an account (requires a valid ECDSA signature over the key)
  • removePublicKey(index): Remove a registered key by index (only callable by the account owner)
  • getAccountPublicKeys(account): List all registered keys for an account
  • getAccountPublicKeyCount(account): Get the number of registered keys

VerificationServicesRegistry

Owner-permissioned registry for managing verification services (arbiters). Each service has an associated inbox address, metadata URI, and enabled/disabled status. Currently permissioned to Nava Labs.

Key functions:

  • registerVerificationService(inbox, metadataUri): Register a new verification service (owner only)
  • disableVerificationService(id): Disable a verification service (owner only)
  • getVerificationServiceInbox(id): Get the inbox address for a service
  • isEnabled(id): Check if a service is active

ERC-20 token used as the native gas token on NavaChain. Deployed on Arbitrum Sepolia (L2) and bridged to NavaChain (L3).

PropertyValue
L2 Token (Arbitrum Sepolia)0x647Ba3A152b73B28680621df7787BD74aD78F4f8

Deployed Addresses (Testnet)

ContractAddress
AgentInboxFactory0x05221a8F155D782e46f709552E380d6B7fd5F140
AccountRegistry0x07AF7DB4Fd936188807C2ba4A9D81E07191EA858
VerificationServicesRegistry0x0C308d943DC8cfD999476B4aD07a81b9e404992f
Default Arbiter AgentInbox0x3730ceFD12b77dFaEEe60e5431054B7deEf0c801