--- title: DDO slug: /developers/ddo/ section: developers description: >- Specification of decentralized identifiers for assets in Ocean Protocol using the DDO standard. --- # DDO Specification ### DDO Schema - High Level The below diagram shows the high-level DDO schema depicting the content of each data structure and the relations between them. Please note that some data structures apply only on certain types of services or assets. ```mermaid --- title: DDO High Level Diagram --- classDiagram class DDO{ } class Metadata{ } class Credentials{ } class AlgorithmMetadata["AlgorithmMetadata\n(for algorithm type)"] { } class Container{ } class Service{ } class ConsumerParameters["Consumer\nParameters"]{ } class Compute{ } DDO "1" --> "1" Metadata DDO "1" --> "0..n" Credentials DDO "1" --> "1..*" Service Metadata "1" --> "0..1" AlgorithmMetadata AlgorithmMetadata "1" --> "1..*" Container AlgorithmMetadata "1" --> "1..*" ConsumerParameters Service "1" --> "0..n" Compute Service "1" --> "0..n" ConsumerParameters ``` ### Required Attributes A DDO in Ocean has these required attributes:
Attribute | Type | Description |
---|---|---|
@context | Array of string | Contexts used for validation. |
id | string | Computed as sha256(address of ERC721 contract + chainId) . |
version | string | Version information in SemVer notation referring to this DDO spec version, like 4.1.0 . |
chainId | number | Stores the chainId of the network the DDO was published to. |
nftAddress | string | NFT contract linked to this asset |
metadata | Metadata | Stores an object describing the asset. |
services | Services | Stores an array of services defining access to the asset. |
credentials | Credentials | Describes the credentials needed to access a dataset in addition to the services definition. |
Attribute | Type | Description |
---|---|---|
created | ISO date/time string | Contains the date of the creation of the dataset content in ISO 8601 format preferably with timezone designators, e.g. 2000-10-31T01:30:00Z . |
updated | ISO date/time string | Contains the date of last update of the dataset content in ISO 8601 format preferably with timezone designators, e.g. 2000-10-31T01:30:00Z . |
description * | string | Details of what the resource is. For a dataset, this attribute explains what the data represents and what it can be used for. |
copyrightHolder | string | The party holding the legal copyright. Empty by default. |
name * | string | Descriptive name or title of the asset. |
type * | string | Asset type. Includes "dataset" (e.g. csv file), "algorithm" (e.g. Python script). Each type needs a different subset of metadata attributes. |
author * | string | Name of the entity generating this data (e.g. Tfl, Disney Corp, etc.). |
license * | string | Short name referencing the license of the asset (e.g. Public Domain, CC-0, CC-BY, No License Specified, etc. ). If it's not specified, the following value will be added: "No License Specified". |
links | Array of string | Mapping of URL strings for data samples, or links to find out more information. Links may be to either a URL or another asset. |
contentLanguage | string | The language of the content. Use one of the language codes from the IETF BCP 47 standard |
tags | Array of string | Array of keywords or tags used to describe this content. Empty by default. |
categories | Array of string | Array of categories associated to the asset. Note: recommended to use tags instead of this. |
additionalInformation | Object | Stores additional information, this is customizable by publisher |
algorithm ** | Algorithm Metadata | Information about asset of type algorithm |
Attribute | Type | Description |
---|---|---|
id * | string | Unique ID |
type * | string | Type of service access , compute , wss etc. |
name | string | Service friendly name |
description | string | Service description |
datatokenAddress * | string | Datatoken |
serviceEndpoint * | string | Provider URL (schema + host) |
files * | Files | Encrypted file. |
timeout * | number | Describing how long the service can be used after consumption is initiated. A timeout of 0 represents no time limit. Expressed in seconds. |
compute ** | Compute | If service is of type compute , holds information about the compute-related privacy settings & resources. |
consumerParameters | Consumer Parameters | An object the defines required consumer input before consuming the asset |
additionalInformation | Object | Stores additional information, this is customizable by publisher |
State | Description | Discoverable in Ocean Market | Ordering allowed | Listed under profile |
---|---|---|---|---|
0 | Active | Yes | Yes | Yes |
1 | End-of-life | Yes | No | No |
2 | Deprecated (by another asset) | No | No | No |
3 | Revoked by publisher | No | No | No |
4 | Ordering is temporary disabled | Yes | No | Yes |
5 | Asset unlisted. | No | Yes | Yes |
Attribute | Type | Description |
---|---|---|
address | string | Contract address of the deployed ERC721 NFT contract. |
name | string | Name of NFT set in contract. |
symbol | string | Symbol of NFT set in contract. |
owner | string | ETH account address of the NFT owner. |
state | number | State of the asset reflecting the NFT contract value. See State |
created | ISO date/time string | Contains the date of NFT creation. |
tokenURI | string | tokenURI |
Attribute | Type | Description |
---|---|---|
address | string | Contract address of the deployed ERC20 contract. |
name | string | Name of NFT set in contract. |
symbol | string | Symbol of NFT set in contract. |
serviceId | string | ID of the service the datatoken is attached to. |
Attribute | Type | Description |
---|---|---|
state | boolean | If true , asset is in purgatory. |
reason | string | If asset is in purgatory, contains the reason for being there as defined in list-purgatory . |
Attribute | Type | Description |
---|---|---|
orders | number | How often an asset was ordered, meaning how often it was either downloaded or used as part of a compute job. |