A Domain in IXO represents the on-chain identity record (DID Document) of a Digital Entity, providing management capabilities for verification methods, services, and access controls. Each Digital Entity is anchored by its Domain, which forms a core component of its Digital Twin implementation. Managing Domain settings allows you to configure how your Digital Entity interacts with other participants and services on the IXO network.

IID Document Management

The IXO ID (IID) Module provides a comprehensive set of methods for managing a Domain’s properties on IXO blockchains. Each Domain has a unique identifier that resolves to a W3C-standard DID Document following the IXO ID Method specification. IIDs are IXO’s implementation of the W3C DID standard, extending it with specific features for cross-chain identity and interoperability in the Interchain ecosystem while maintaining full compatibility with the DID specification.

Key differences from standard DIDs:

  • Cross-chain resolution through IBC (Inter-Blockchain Communication)
  • Native integration with Cosmos SDK modules
  • Extended verification methods for blockchain-specific operations
  • Built-in support for IXO’s domain-specific digital twin features, such as Linked Resources, Linked Entities, Linked Claims, Accorded Rights, and Accounts

Prerequisites

Before managing Domain settings, ensure you have:

  • An IXO wallet with sufficient tokens for transaction fees
  • The Domain’s IID (identifier)
  • Appropriate signing authority (you must be a controller of the Domain)
  • The IXO SDK installed (if using programmatically)
npm install @ixo/sdk

Domain Management Operations

The following sections outline the key operations you can perform on your Domain’s IID Document.

Domain Management Workflow

Following these steps will help you effectively manage your Domain settings on IXO blockchains.

1

Update Document Structure

Update your Domain’s IID Document structure by:

  • Modifying verification methods
  • Updating service endpoints
  • Adding or removing controllers
  • Managing linked resources
2

Manage Verification

Handle verification methods and relationships:

  • Add new verification methods
  • Set verification relationships
  • Handle method revocation
  • Update verification proofs
3

Service Management

Configure and manage Domain services:

  • Add new service endpoints
  • Update existing services
  • Remove deprecated services
  • Configure service mediators
4

Access Control

Manage Domain access and permissions:

  • Add Domain controllers
  • Grant specific rights
  • Set capability invocations
  • Configure capability delegation

Implementation Guide

Each step in the process above corresponds to specific API calls in the IXO SDK. Expand the accordions above to see the code examples for each operation, or follow the detailed guides below for common domain management tasks.

Common Domain Management Tasks

Example: Creating a Service-Oriented Domain

1

Create the Domain IID Document

First, initialize a basic Domain document with a controller:

// Example of IID Document creation
const domain = await createIidDocument({
  controllers: [myWalletAddress],
  // other initial properties
});
2

Add Service Endpoints

Add service endpoints to make your Domain functional:

await addService(
  domain.id,
  {
    id: `${domain.id}#messaging`,
    type: "MessagingService",
    serviceEndpoint: "https://messaging.example.com"
  }
);
3

Set Up Verification Methods

Add verification methods to enable authentication:

const verificationMethod = {
  id: `${domain.id}#keys-1`,
  type: "Ed25519VerificationKey2020",
  controller: domain.id,
  publicKeyMultibase: "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
};

await addVerificationMethod(
  domain.id,
  verificationMethod,
  ["authentication", "assertionMethod"]
);

Example: Updating Domain Controllers

1

Retrieve Current Controllers

First, get the current list of controllers:

const document = await queryIidDocument(domainId);
const currentControllers = document.controller;
2

Add New Controller

Add a new controller to the Domain:

await addController(
  domainId,
  "did:ixo:123456789abcdefghi"
);
3

Update Verification Relationships

Ensure the new controller has appropriate verification relationships:

await setVerificationRelationships(
  domainId,
  `${domainId}#keys-1`,
  ["authentication", "capabilityInvocation"]
);

Troubleshooting