Seventeen token features add behaviour to a token, such as paying a coupon, charging a fee, or converting a loan into equity, and this catalogue documents sixteen of them. A feature reaches a token through an instrument template or, after issuance, through a governance action. This page covers that route, how to choose a feature, and why an operation is rejected. Five reference pages hold one entry per feature, with its parameters, units and the roles that operate it. Instrument templates covers the template workflow, and composable token explains why a token's behaviour is built from features. The Platform API manages the same features programmatically.
An instrument template is a set of token features with their defaults, plus metadata fields and a compliance policy. You select a feature on the template's “Features” step, and issuing from that template installs it. After issuance, an account that holds the governance role attaches, detaches, rotates, or updates it. A token holds an ordered list of at most 32 features and runs them in list order: the template's order at issuance, and the end of the list for a feature attached later. The platform never sorts the list.
After issuance, the Console attaches twelve features from the “Attach a feature” list on a token's Features tab. Hold, voting power, permit, and supply delegate take no settings. Register lines, the feature behind Booked movements, is the one feature this catalogue does not document. It needs hold attached first and asks which moves an investor may request. Maturity redemption, dividend yield, interest yield, management fee, transaction fee, transaction fee accounting, and external transaction fee ask for their settings, which the sheet shows for review before the wallet step. The list leaves out a feature that is already attached, and interest yield on an asset type other than deposit or fund. Fixed treasury yield attaches from “Set yield schedule” on the token's yield page, and voting power also from the Governance wizard, which offers an inline attach when the token lacks it.
The menu on a feature's section on the same tab detaches every feature except conversion and the distribution waterfall, and replaces a feature that has settings. Conversion and the distribution waterfall reach a token through the platform only from a template at issuance, and neither the Console nor the Platform API attaches, detaches or rotates them. The Platform API attaches every other feature. On chain, the token's governance role can still replace the whole feature list, those two included. Each feature entry names the actions that exist after issuance and the role each one needs.
Every form that configures a feature, in the template's “Features” step, in structures, and at issuance, shows each parameter under its name and a sentence on what to enter, and opens the feature with its own summary line, the same sentence the feature's detail screen shows. The tables give the platform identifier wherever an API call takes it. The four fee features, fixed treasury yield, conversion, and the conversion minter have a second generation, a newer implementation of the feature contract, and their entries say how it differs. Each feature instance runs the implementation its feature factory points to, and the Console shows no generation badge.
A template fixes the starting feature list, and after issuance only governance actions change the token's own list.
Feature reference pages
Each page covers one group of features and states, for every feature in it, the parameters, the units, and the actions after issuance.
- Income features: dividend yield, interest yield, fixed treasury yield, maturity redemption, and the distribution waterfall.
- Fee features: management fee, transaction fee, transaction fee accounting, and external transaction fee.
- Conversion features: conversion and the conversion minter.
- Permit: the permit feature and the Platform API routes that sign and relay a permit.
- Balance, voting, hold and supply features: historical balances, voting power, hold, and supply delegate.
Choose the feature by what it does
Group the sixteen features by the job they do, then pick the one in that row that matches your requirement.
Within the income row, the choice is how the amount is decided. Dividend yield pays an amount per share that the issuer declares each time, fixed from balances on a record date. Interest yield pays a rate that accrues on balances as time passes. Fixed treasury yield pays a fixed coupon for each period, on the balance held at the end of that period. Maturity redemption pays face value once, after maturity, in exchange for the token. The distribution waterfall decides no amount. It splits one pool across the share classes of an instrument, and each class's dividend yield then pays from its own part.
Within the fee row, the choice is who pays and what moves. One 100-token transfer shows the four behaviours side by side. The example uses a transaction fee of 2.5%, which is 250 basis points,, a flat external fee of 2.5 units of a second token, and a 1% yearly management fee that is collected separately.
The next table shows what each feature needs before it works, what it cannot sit beside, and whether it needs a token before issuance. A feature that needs a token before issuance makes the template row show “Needs a denomination asset” or “Needs a target token” on Issue asset until the tenant has that token. The Features step enforces the dependencies and the conflicts as you toggle: “Select Historical Balances first.” and “Conflicts with Transaction Fee Accounting.” are the messages it shows.
When an operation is rejected
A rejection comes from one of three places: the template, the attach and detach API, or the token itself while it runs. A rejection reflects the rule and the state at that moment, so repeating the same call fails again until the condition changes.
The template's “Features” step blocks a feature that misses a dependency or conflicts with another one. Publishing checks both again, and issuing a token with the conflicting pair is rejected with DALP-0605.
An attach, detach, or rotate through the Platform API can be rejected for these reasons.
At run time, a token or a feature reverts with an error that names the rule. These are the ones you meet most often.
Troubleshooting
A feature card says Select X first or Conflicts with X
The Features step shows “Select Historical Balances first.” when a feature needs another one, and “Conflicts with Transaction Fee Accounting.” when two selected features cannot sit on one token. Enable the named feature first. Turning a feature off also turns off every feature that depends on it, so the confirmation can remove more than the card you clicked.
A template shows Needs a denomination asset
Seven features need a token that already exists in the tenant: external transaction fee, maturity redemption, fixed treasury yield, dividend yield, interest yield, the distribution waterfall, and conversion. Any token satisfies the check, and conversion also needs a target token that has the conversion minter. Open the template's detail panel and issue the token it needs, or register an existing one, for example with “Issue a stablecoin” or “Register an existing stablecoin”, then return to Issue asset.
A coupon pays more than expected
The contract pays its stored rate once for each payment period. A schedule created through the Platform API with
rateBasis set to per_period, or with no basis from either the request or its template, stores the rate as given,
so 500 basis points with a daily interval pays 5% of face value every day. Also check the schedule length: with a
per-period rate, a span that is not a whole number of intervals ends with a shorter period that still pays a full
coupon. Fix the rate and the dates by detaching the feature and attaching a new schedule.
A transfer fails after maturity
After maturity every mint and every regular transfer reverts with Transfer. The matured state
cannot be reset, and the block lasts while maturity redemption stays attached. Burns pass, so holders redeem. A
custodian can still run a forced transfer, and an attached feature can still move units. Redeem the position, because
retrying the transfer fails again.
A transfer fails on held units
A venue has reserved some of the holder's units, so the transfer is above the available balance and reverts with
AmountExceedsAvailable. Units the custodian froze count the same way. Cancel the resting order on the venue to
release the hold, or transfer no more than the available balance.
A waterfall class receives nothing
Check four causes. Distinct ordinary ranks are winner-take-all, so a class at a higher rank gets nothing in ordinary
mode. The pool may not reach the class, and the preview then shows “Not reached”. A class with a leg but no supply on
the record date, or a per-share rate that rounds to zero, gets no dividend, and its leg stays in the waterfall. Last,
fund reverts with ClassNotBound until every class has a token.
An operation reverts on the fee token's allowance
An external transaction fee pulls the fee from the payer with an ERC-20 transfer, so the payer needs fee-token balance and an allowance for the feature contract. The payer is the account that receives a mint, or the sender of a transfer or a burn. The fee recipient is not exempt, so it needs the allowance when it pays.
A detached feature leaves a gap in its history
Historical balances records nothing while it is detached. A lookup for that period returns the last checkpoint written before the detach, so a dividend with a record date in the gap reads stale balances. The platform blocks the detach if the token has fixed treasury yield, dividend yield, interest yield, or the distribution waterfall. Remove dependent features before detaching historical balances.
Frequently asked questions
Can I add or remove a feature after issuance?
Yes for most features, with the governance role. Holders do not approve these changes: governance can attach a management fee that dilutes every holder, or a transaction fee on every transfer, to a token already in circulation. The Console attaches twelve features from the “Attach a feature” list on the Features tab: hold, voting power, permit, supply delegate, register lines, maturity redemption, dividend yield, interest yield, management fee, transaction fee, transaction fee accounting, and external transaction fee. It attaches fixed treasury yield from “Set yield schedule” on the yield page, which “View yield details” on the Features tab opens. The Platform API attaches those features, historical balances, and the conversion minter. Through the platform, conversion and the distribution waterfall reach a token only at issuance, and neither the Console nor the Platform API detaches them. A detach is blocked while another feature depends on the feature, while declared dividends are unclaimed, and, for voting power, while governance proposals are open. These settings change in place: fee rates and recipients, the fixed treasury yield and maturity redemption treasuries, the interest rate, and the conversion window. Any other setting needs a rotate, which replaces the feature with a new contract at the end of the list. The Console offers it as “Replace” in the section menu of a feature that has settings.
Does the order of features matter?
Yes, and the platform does not enforce an order. Features run in list order, so a mis-ordered list can change compliance, fee, and rewrite behaviour. The list follows the template at issuance. A feature attached later goes to the end, and a rotated feature moves to the end. The recommended order puts hold first, then restrictions, fees, external fee hooks and analytics, and the DALP Library places hold first on every template except Share-Class Mirror. Read the order from the token's getFeatures() list, since the API lists features alphabetically.
Is the fixed treasury yield rate annual?
In the Console's issuance form and its “Set yield schedule” action for this feature, yes. An asset on the standalone yield schedule takes its rate per period. You enter the rate per year and DALP converts it to the rate each period pays: 500 basis points a year on a semi-annual schedule pays 246.575 basis points every 180 days, and a shorter final period pays that prorated to its length. Through the Platform API, set rateBasis to annual for the same conversion. A request that leaves it out takes the basis its template states, which is annual for the DALP Library's fixed-income templates. With per_period, or with no basis stated anywhere, the API treats rate as the per-period rate, so 500 basis points on a daily schedule pays 5% of face value every day.
Do unclaimed dividends expire?
No. The claim deadline does not stop a claim. A holder can claim after the deadline until governance reclaims the dividend. Reclaiming releases the feature's liability, closes the dividend and moves no tokens, and a holder can no longer claim it after that. In a waterfall, the unclaimed amount stays in that class's leg. Once governance has reclaimed the dividend, an account with the governance role can release the leg, which returns the amount to the wallet that funded the distribution.
Does a template edit change issued tokens?
No. A template edit changes future issuance only. The token's own feature list lives on chain, and only governance actions on the token change it.