Skip to main content

Data feeds

Register and maintain trusted on-chain data feeds for subjects and topics.
Open it fromInfrastructureData feedsFeedsRole:Feeds managerConsole address: /org-settings/data-feeds/feeds

Data feeds registers the trusted on-chain values the organisation's tokens read by subject and topic. A published value and its staleness window here are the same data a token's Price feeds section shows and the same window the on-chain price resolver checks before it accepts a value.

Reach for this page when a token needs a trusted value, a price or another on-chain reference figure, that the platform does not already supply. A feed does not have to be fed by hand: the Sources tab connects a price provider to a token's price feed, as Price sources describes.

The “Feeds” tab of “Data feeds”, with the staleness setting and “Change” under the title.

The table lists each feed with its “Feed” name and address, “Topic”, “Latest value”, “Updated”, “Status” and “Source”, and each row has “Publish update”. Create feed sits at the top of the page.

Steps

Select Create feed

On the “Feeds” tab, select Create feed. The “Create data feed” sheet opens with the description “Register a new data feed in the directory.” It has two steps, “Details” and a review.

The “Create data feed” sheet opened from “Create feed”, on its “Details” step.

The step asks for “Scope”, “Data format”, “Topic name”, “Source type” and “Decimals”, with “Cancel” and Review at the bottom.

Fill the Details step

  1. Choose a Scope: “Global”, “Asset-scoped” or “Identity-scoped”. For a scoped feed, enter the “Subject address” the feed belongs to. A subject and topic pair can hold only one feed.
  2. Choose a Data format. “Numeric (Scalar)” stores one signed integer per update. “Document (Bytes)” is listed but cannot be selected.
  3. Choose a Topic name from “Select a topic”. Only topics with an int256 value schema are listed, and a topic that already has a feed for this scope is marked “Already has a feed” and cannot be chosen. If no topic exists, “Create one in Verification topics.”
  4. Choose a Source type. With “Issuer-signed”, a trusted issuer signs each value and publishes it here, and the sheet asks for “Decimals”, a whole number from 0 to 18. With “Chainlink (external)”, you register an existing Chainlink-compatible feed contract, and the sheet asks for its “Feed address”. DALP reads the decimals from that contract, which must answer decimals() and latestRoundData(), or registration fails.
  5. Write a Description. A description in the form BASE / QUOTE, such as EUR / USD, follows the Chainlink convention.

“Scope”, “Data format”, “Decimals” and “Description” are fixed when the feed is created. A replacement feed must keep the same topic and decimals.

Review and create

Select “Review”, check the values, then select Create feed. Select “Cancel” to close the sheet without registering anything. The feed appears in the table.

An issuer-signed feed created here keeps only its latest round on-chain and accepts only values greater than zero. You cannot configure it to keep bounded or full on-chain history, or use it for a value that can be zero or negative, such as an interest rate or an exchange-rate movement. The indexed API can still serve past accepted observations. An external feed is an existing contract registered in the directory. Its own contract determines its value and history rules.

Publish an update

In a feed's row, open the actions menu and choose “Publish update”, or open the feed's detail page and select “Publish update” in its header. The “Publish update” sheet shows the feed's “Topic”, “Scope”, “Current value” and “Decimals”. Enter a “Value”, which must be greater than zero, and select Publish update. The value is stored on-chain as a fixed-point number at the feed's decimals and is submitted under your issuer identity, which must be trusted for the feed's topic. For anyone else the action is disabled and reads “Only a trusted issuer for this topic can publish updates.” A feed that a price source feeds still takes a value you publish by hand.

Change the staleness window

Under the page title, the line Feeds go stale after followed by a duration, or “Feeds never go stale”, shows the global window. It applies to every feed without its own window.

To change the global window, select “Change”. In “Set global staleness window”, choose a “Window”, “Custom window” or “Never expires”, set the “Maximum age” in seconds for a custom window, and select Save global window.

To set one feed's window, click its row to open the feed's detail page, then choose “Actions” › “Set staleness window”. In the “Set staleness window” sheet, choose “Custom window”, “Never expires” or “Use the global default”, and select Save window. A window set here overrides the global default for this feed only, and choosing “Use the global default” removes the override. The detail page's “Staleness window” card shows whether the window is “Set on this feed”, the “Global default” or “Never”.

Create a stable adapter

In the feed list, open the row's actions menu and choose Create adapter. The “Create stable adapter” sheet shows the feed's “Feed address”, “Scope” and “Topic”. It creates a stable AggregatorV3-compatible address that resolves the feed through the directory. You need the Feeds manager role. The sheet notes that this is often unnecessary for a Chainlink feed, because Chainlink feeds already have stable addresses. Once an adapter exists, the row offers “Copy adapter address” instead, and the detail page's “Configuration” card shows the adapter. Stable adapters explains what the adapter fixes.

A stable adapter gives consumers a new address to read and leaves the feed itself unchanged. After you create an adapter for an issuer-signed feed, its row and detail page still offer “Publish update”, the “Configuration” card still shows its “Rules”, and the “Source” column still reads “Issuer-signed”. In the Source filter, “Adapter” means a feed not created here that has an adapter, and “External” means a feed not created here that has none.

Replace a feed

On the feed's detail page, choose “Actions” › “Replace feed”. The “Replace feed” sheet shows the “Current feed address”. Enter the “New feed address” and a “Description”, then select Replace feed. The sheet warns “Replacing this feed may impact valuations and compliance calculations that depend on it.” The new feed must use the same topic and decimals as the current one, or the replacement fails. The switch is immediate, and the latest value is cleared until the new feed reports one.

Remove a feed

On the feed's detail page, choose “Actions” › “Remove feed”. The “Remove feed” dialog reads that removing the feed unregisters it from the directory, and shows its “Feed address” and “Scope”. Select Remove feed to confirm, or “Keep feed” to leave it registered. A removed feed's detail page reads that it was removed from the feeds directory and can no longer be replaced or removed.

Staleness window

A staleness window is the maximum age of a published value. The on-chain price resolver refuses a value older than the window. A token whose compliance includes the capital raise limit values each mint through the resolver, so its mints fail until a fresh price is published. Never expires rejects no price for its age. The global default is 86,400 seconds, which is 24 hours.

Set the window to the maximum age your operation accepts. A shorter window requires more frequent publication. A longer window permits older values and must still meet the asset's pricing requirements. A token's own governance holder can set that token's feed staleness without the Feeds manager role. Only the platform-wide global window requires it.

Stable adapters

A stable adapter gives consumers a fixed address for directory reads. Replacing a feed swaps the address the directory resolves for that subject and topic to a new feed contract, so an integration that stores the old feed address continues to read the old contract. An integration that hard-codes the adapter's address once keeps reading the current feed, because the adapter looks the feed up through the directory on every read. Check that the new feed still provides the data and precision the consumer expects.

A stable adapter resolves the current feed through the feeds directory.A DeFi integration stores the stable adapter's address once. On every read, the adapter asks the feeds directory for the feed registered under its subject and topic, and reads the current feed. After a replace, the same directory entry points to the replacement feed, so the integration reaches it through the same adapter address.A stable adapter resolves the current feed through the feeds directory.A DeFi integration stores the stable adapter's address once. On every read, the adapter asks the feeds directory for the feed registered under its subject and topic, and reads the current feed. After a replace, the same directory entry points to the replacement feed, so the integration reaches it through the same adapter address.

A stable adapter looks up the current feed through the feeds directory on every read, so a replaced feed reaches the integration at the same address.

Troubleshooting

Data feeds reads Not available

The system has no feeds directory, or you lack the Feeds manager role. The feeds directory comes with a system update, so check System updates first.

A published value is rejected downstream

Check the staleness window. The on-chain price resolver only accepts a value inside the window you set. A value older than that window fails even though the publish itself succeeded here.

Mints keep failing even though the feed looks healthy

Compare the observation time with the permitted age and check the publisher. Publish a fresh value when the current one is stale. Change the window only if the asset's pricing requirements permit older values. A failed mint does not by itself justify accepting stale data.

Frequently asked questions

Replacing a feed instead of creating a new one

Replace keeps the existing directory entry and its downstream references, only swapping the underlying value source, so directory consumers resolve the replacement contract. Check its units, decimals, and topic before switching. Create a new feed instead for a new subject or topic. Replacing an unrelated feed to reuse its address risks pricing consumers against the wrong figure.

Was this page helpful?