SettleMint
Data feeds

Data feeds overview

Understand issuer-signed scalar data feeds, their architecture, required permissions, and configuration properties.

On-chain scalar feeds deliver signed numeric data for asset prices, FX rates, NAV inputs, collateral ratios, yield inputs, and other metrics. As a platform administrator, you configure feeds. Feed operators publish values, your developers read resolved prices, and auditors review who controls each part of the setup.

A feed setup answers four questions before the platform accepts any value:

  1. What data is allowed? A verification topic defines the schema. Issuer-signed scalar feeds use the fixed signature (int256 value).
  2. What entity does the data describe? A feed scope points the value at a global market pair, an asset, or an identity.
  3. Who may publish the value? A trusted issuer must hold authorization for the topic. Publishing also requires an EIP-712 signature from that issuer.
  4. Who consumes the value? Smart contracts, portfolio views, asset reporting, and the token price API read the latest indexed or on-chain feed data according to their own pricing rules.

DALP records feed authorization, signed submissions, feed contract state, and indexed price reads. Off-chain pricing policy, data provider SLAs, economic validation of submitted values, and non-scalar oracle designs stay outside this user flow except for the Chainlink-compatible feed registration option.

Before a numeric value can affect an on-chain asset calculation, the platform must know the topic, feed scope, trusted issuer, and submitted value. Price APIs, reporting screens, and portfolio views also need the Ledger Index to process the submission. The decision table under "Decide what to configure next" identifies the right starting point.

Feed mental model

A data feed combines three on-chain concepts:

  1. Verification topic - Defines the data schema. Scalar feed topics use the fixed signature (int256 value).
  2. Feed contract - Stores configuration such as decimals, history mode, drift allowance, and submitted values.
  3. Trusted issuer - An identity authorized to publish updates to feeds using a given topic.
Rendering diagram...

The topic sets the shape of the value. The feed determines where it belongs and how submissions are stored. The trusted issuer controls who can publish updates. Separating these concerns lets you grant schema authority to one role, feed registration to another, and publish access to a market data operator, without giving that operator administration rights.

Feed state lifecycle

A feed value becomes usable only after each dependency is visible to the platform:

StageWhat must be trueWhat can read it
Topic registeredThe scalar feed topic exists with the (int256 value) schema.Feed creation can select the topic.
Feed registeredThe platform links the feed contract to a scope, subject address, source type, decimals, and history mode.Organisation settings and feed lists can show the feed once indexed.
Issuer trustedThe compliance administrator has authorized the publisher identity for the feed topic.Publishing can submit signed values for that topic.
Value submittedThe issuer signs the value, timestamp, feed address, nonce, and deadline, and the feed accepts the update.Smart contracts can read on-chain feed state.
Value indexedThe indexer has processed the feed update event.Price APIs, reporting screens, and portfolio views can resolve the latest indexed value.

This lifecycle explains why a newly created feed can appear before its first value reaches a price API. Each stage completes independently: registration, signing, on-chain submission, and indexing.

Who owns each part

PartOwnerWhat they controlWhat they do not control
Verification topicVerification policy managerTopic name and scalar feed kindFeed deployment, feed values, or trusted issuer assignments
Feed registrationFeeds managerScope, subject address, source type, decimals, history mode, positivity rule, and drift allowanceWhether a publisher is trusted for the topic
Trusted issuer assignmentCompliance or verification administratorWhich identity may issue updates for the topicFeed configuration or submitted values
Feed updateTrusted issuer and its signerThe signed numeric value submitted to the feedTopic schema, feed scope, or immutable feed properties
Price and reporting consumptionPlatform services and smart contractsHow platform services resolve active feed data for prices, reporting, and calculationsThe economic correctness of an off-chain value before the issuer signs it

Decide what to configure next

If you need to...Configure this firstThen read
Define a new category of numeric data, such as a price, rate, or scoreScalar feed topicCreate a topic
Attach data to a market pair, token, or identityFeed scope and feed propertiesCreate a feed
Allow an identity to publish updatesTrusted issuer for the feed topicConfigure trusted issuers
Submit the latest valueSigned feed updatePublish a feed update
Change or stop resolving an existing feedDirectory registrationReplace or remove a feed
Read token prices or FX conversion paths from an integrationIndexed token price endpointToken price resolution API

Required permissions

Each operation requires a specific platform role. Assign roles on the Admins & roles page in Organisation settings.

OperationRequired roleUI label
Create / delete / update verification topicsclaimPolicyManagerVerification policy manager
Register / replace / remove feedsfeedsManagerFeeds manager
Publish feed updatesNo platform role requiredAny user with an associated identity, but the identity must hold trusted issuer status for the feed's topic

Changing roles on the System Access Manager

Feed scopes

Each feed you register targets a subject address that determines what entity the data describes.

ScopeSubject addressUse case
GlobalZero address (0x000...000)Market-wide data such as BTC/USD or ETH/USD exchange rates
Asset-scopedToken contract addressAsset-specific data such as a bond's NAV or a deposit's interest rate
Identity-scopedIdentity contract addressEntity-specific data such as a credit score or risk rating

Choose the narrowest scope that matches your data. A global feed handles market data shared across assets, such as an FX pair. An asset-scoped feed targets data that belongs to one token, such as a base price or NAV input. An identity-scoped feed tracks data tied to a specific identity.

Pricing feed consumers

Pricing flows usually combine an asset-scoped base-price feed with FX feeds covering global market pairs. The asset-scoped feed gives DALP the token's base price. FX feeds connect that source currency to the organization's reporting currencies, or to the currency an API client requests.

ConsumerFeed data usedWhat it helps explain
Token price APIAsset-scoped base-price feed plus global FX feeds when conversion is neededReturned price, target currency, source currency, and conversion path
Portfolio and asset reportingExchange-rate feeds for the currencies enabled for the organizationReporting currencies available to the organization
Asset-specific calculationsAsset-scoped feeds for NAV, collateral ratios, yield inputs, or other configured metricsExternal numeric input used by the asset calculation

When a direct FX pair is unavailable, the token price API resolves the shortest indexed conversion path across available FX feeds. The API also uses inverse edges when the reverse pair exists. If no path falls within the allowed hop limit, the API returns an unresolved conversion rather than inventing a rate.

Your integration can inspect the resolved price, source currency, and conversion path through the token price resolution API.

Exchange-rate target currencies

DALP uses exchange-rate feeds to convert portfolio and asset values into the currencies your organization supports for reporting. During setup, you must include the base currency in the selected list; at least one other currency must differ from it.

Setup normally uses the exchange-rate provider's supported-currency snapshot. When that snapshot is not yet available, DALP starts from the standard targets EUR, SGD, AED, and JPY. The setup workflow creates feeds for the selected non-base currencies, so choosing EUR as the base currency produces initial target feeds for SGD, AED, and JPY.

After setup, administrators review enabled currencies from Organisation settings > Exchange rates and can add new supported currencies from that page. The platform cannot remove existing currencies. Their feeds are registered on-chain and may already back historical valuations, NAV reporting, and portfolio views. The on-chain feed record persists even if a currency becomes inactive. For the step-by-step task, see Add a reporting currency.

When you add a supported currency, DALP creates the corresponding issuer-signed scalar feed for that pair. The exchange-rate refresh cycle then populates the feed, so a newly added currency may appear in the list before its first refreshed value arrives.

Infrastructure readiness

System and organization setup prepare the shared feed infrastructure so the platform can create exchange-rate feeds. DALP registers the shared price topic, resolves the issuer-signed scalar feed factory, and waits until the indexer can see the required feed events to continue.

Feed creation and value seeding are separate steps. Creating exchange-rate feed contracts requires the feeds manager role. During organization setup, DALP checks the administrator wallet before creating the initial exchange-rate feeds and restores that role when needed. Seeding the first values requires an issuer identity authorized for the price topic, plus a signer that identity has approved. When the trust state is not yet visible, DALP creates the feed contracts and allows the refresh cycle to publish values once trust state becomes ready.

These setup steps are repeat-safe. When the topic or factory already exists, DALP uses the existing on-chain configuration rather than creating a duplicate. Temporary RPC, transport, or indexer visibility issues are safe to retry; setup continues once the dependency catches up.

For architecture details, see Feeds system.

Feed properties reference

The platform sets these properties when you create a feed and does not allow changes after deployment.

PropertyValuesDescription
Data formatNumeric (Scalar)The data type stored by the feed. Currently only scalar (int256) is supported.
Topic nameSelected from registered topicsThe verification topic that defines the feed's data schema. Only topics with the (int256 value) signature are available for scalar feeds.
Source typeIssuer-signed, ChainlinkHow values reach the feed. Issuer-signed uses EIP-712 signatures; Chainlink reads from an external oracle contract.
Decimals0 - 18The number of decimal places for the stored value. For example, a USD price with 8 decimals stores 100000000 to represent 1.00.
DescriptionFree textA human-readable description of what the feed measures. Required for issuer-signed feeds.
History modeLatest only, Bounded, FullControls how many past values the feed retains.
History sizeInteger >= 1Only used with Bounded history mode. Sets the maximum number of historical values to keep in a circular buffer.
Require positiveOn / OffWhen enabled, the feed contract rejects any submitted value that is zero or negative.
Drift allowanceInteger (seconds)Maximum allowed time difference between the observedAt timestamp in a submission and the current block timestamp. Set to 0 to disable drift checking.

History modes explained

  • Latest only: The feed stores only the most recent value; the platform overwrites previous values. Use this mode when you only need the current price.
  • Bounded: The feed keeps a fixed-size circular buffer of past values set by the History size property. When the buffer is full, the platform drops the oldest value. Use this mode when you need moving averages or volatility calculations.
  • Full: The feed stores every submitted value permanently. Choose this mode when you need a complete audit trail; it uses more on-chain storage.

Data feeds power real-time asset analytics and pricing

Setup workflow

Setting up a data feed requires four steps in sequence. Each step depends on the previous. The feed contract needs the topic to exist. Publishing needs a registered trusted issuer. Value indexing requires the feed contract to be deployed before you submit the first value.

Create a scalar feed topic

Register a verification topic with the feedScalar kind. This step sets the data schema that all feeds of this type share. For detailed instructions, see Create a topic.

Register a trusted issuer

Add the identity that will publish feed updates as a trusted issuer for the topic. The feed adapter contract rejects submissions from identities that do not hold this status. For setup instructions, see Configure trusted issuers.

Create the feed

Register a new feed contract. Choose the scope and topic, then set the remaining configuration properties. See Create a feed.

Publish updates

Submit signed values to the feed. See Publish a feed update.

Limits and operating scope

Scope itemWhat it means
Scalar data onlyThe user flow creates scalar feeds with the (int256 value) signature. Bytes feed topics are not selectable in this workflow.
Immutable feed propertiesThe platform sets scope, source type, decimals, history mode, positivity rule, and drift allowance at registration. Create a replacement feed when those properties need to change.
Trusted issuer enforcementA platform role is not enough to publish. The submitting identity must hold trusted issuer status for the feed topic, and the signed update must pass feed validation.
Price and reporting readsThe token price API and reporting views read indexed feed data. The Ledger Index must process newly created feeds or newly published values before API clients see them.
Submit retry safetyFeed update submission runs through the transaction queue. Use an idempotency key on API retries so duplicate requests resolve to the same queued submission result.
External value qualityDALP validates authorization, signature, positivity, and drift rules. The platform does not decide whether the signed market price or metric is economically correct.

On this page