A domain is the full presence of something on IXO: an organisation, a project, an asset, a deed or a device. Each domain is anchored by a Decentralized Identifier (DID), governed by one or more controllers, and extended with services, resources, accorded rights, linked claims, relationships and accounts. At its core is an entity, an NFT that can be owned. The entity is one part of the domain, not another name for it.
This page is a map. It covers the whole domain and says which page documents each part, so that you can go straight to the one you need. It does not repeat what those pages say. Manage entities covers the entity alone: creating it, transferring it and managing its accounts.
Where each detail lives
| You want to | Read this |
|---|---|
| Understand the parts of a domain | Core concepts |
| Understand the data model and lifecycle | Domain configuration |
| Understand the digital-twin model | Digital twins |
| Register a new domain | Register a domain |
| Create, transfer or verify the entity at a domain's core | Manage entities |
| Change controllers, services, resources and rights in the on-chain record | Update a domain's on-chain record |
| Decide what to keep on the protocol and what to keep in IXO Matrix | Design privacy for a domain's data |
| Build with the SDK | IXO MultiClient SDK and the @ixo/impactxclient-sdk README |
| Query domains and related state | Blocksync GraphQL API |
| Inspect raw entity messages and queries | gRPC gateway API |
The shape of an entity message
Entity messages follow the same three steps as every IXO Protocol module: create a query or signing
client, compose a message, then sign and broadcast it. The @ixo/impactxclient-sdk package exposes
proto-derived message factories under ixo.*.
Illustrative example. The snippet below shows the structure of the call and is not a tested project. For installation, signer setup and broadcast patterns, see the IXO MultiClient SDK README and the step-by-step patterns in Developer workflows. Build against a test network, never against mainnet.
import { ixo, createSigningClient } from "@ixo/impactxclient-sdk";
const signingClient = await createSigningClient(RPC_ENDPOINT, offlineSigner);
const message = {
typeUrl: "/ixo.entity.v1beta1.MsgCreateEntity",
value: ixo.entity.v1beta1.MsgCreateEntity.fromPartial({
// See the entity proto for the full field set:
// https://github.com/ixofoundation/ixo-blockchain/tree/main/proto/ixo/entity/v1beta1
ownerAddress: SIGNER_ADDRESS,
entityType: "asset",
context: [],
verification: [],
controller: [],
service: [],
linkedResource: [],
accordedRight: [],
linkedEntity: [],
linkedClaim: [],
}),
};
const fee = "auto";
const response = await signingClient.signAndBroadcast(SIGNER_ADDRESS, [message], fee);The full set of entity messages is MsgCreateEntity, MsgUpdateEntity, MsgUpdateEntityVerified,
MsgTransferEntity, MsgCreateEntityAccount, MsgGrantEntityAccountAuthz and
MsgRevokeEntityAccountAuthz. They are generated from the
x/entity proto definitions
and exposed under ixo.entity.v1beta1.* on the SDK.
Next steps
The data model behind every domain.
Update a domain's on-chain recordChange controllers, services, linked resources and accorded rights.
Design privacy for a domain's dataWhat to keep on the protocol and what to keep in IXO Matrix.
IXO MultiClient SDKThe TypeScript SDK that exposes the entity messages.