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