# DALP-1050 to DALP-1099

Source: https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-1050-1099
Cause, fix and retry flag for every on-chain contract error with a code from DALP-1050 to DALP-1099.

This page lists the 50 errors in the contract error reference with a code from DALP-1050 to DALP-1099. Match the error's `id`, or its `dalpCode` on a contract error or a failed deployment step, for example `DALP-1050`, to the DALP Code column, then read Retryable and Suggested Fix. The [contract error reference](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference#how-to-use-this-reference) explains each column, including Severity, and the [DALP error index](https://docs.settlemint.com/docs/api-reference/errors) lists the page for every code range.

| DALP Code | Message | Why | Suggested Fix | Severity | Retryable | Solidity Error |
| --- | --- | --- | --- | --- | --- | --- |
| DALP-1050 | Fee token must not be the token contract itself. | The external transaction fee feature does not allow the fee token to be the same contract as the token being transferred or this contract's own address. Using the same token for fees would create circular dependency in transfers. | Supply a different ERC-20 token address as the fee token. The zero address disables external transaction fee collection. | error | No | `InvalidFeeToken()` |
| DALP-1051 | Feed address must be a non-zero contract address. | The feeds directory rejects a zero address when registering or updating a feed. A valid feed must be deployed at a real contract address. | Supply the deployed address of a feed contract before submitting the registration or update request. | error | No | `InvalidFeedAddress()` |
| DALP-1052 | Feed contract must implement the required price feed interface. | The feeds directory calls `decimals()` and `latestRoundData()` on the provided feed address to verify it conforms to the expected price feed interface. The contract at the supplied address did not respond correctly to one or both of those calls. | Supply the address of a feed contract that fully implements the required price feed interface, including `decimals()` returning a 32-byte value and `latestRoundData()` returning 160 bytes. | error | No | `InvalidFeedInterface(address)` |
| DALP-1053 | Identity contract must implement the IIdentity interface. | The identity registry checks via ERC-165 that the supplied contract implements `IIdentity`. The contract at the provided address either does not support ERC-165 or explicitly returns false for the `IIdentity` interface ID. | Supply the address of an on-chain identity contract that implements `IIdentity` and returns true from `supportsInterface` for that interface ID. | error | No | `InvalidIdentityContract()` |
| DALP-1054 | Identity factory address must be a non-zero address that implements the factory interface. | The identity proxy constructor rejects a zero address and also rejects any address that does not report support for the `IDALPIdentityFactory` interface via ERC-165. | Supply the deployed address of a contract that implements `IDALPIdentityFactory` and returns true from `supportsInterface` for that interface ID. | error | No | `InvalidIdentityFactoryAddress()` |
| DALP-1055 | Identity implementation does not support the IDALPIdentity interface. | The identity factory checks via ERC-165 that the provided implementation address returns true for the `IDALPIdentity` interface ID. The supplied address does not pass this check. | Supply the address of a deployed identity implementation contract that fully implements `IDALPIdentity` and returns true from `supportsInterface`. | error | No | `InvalidIdentityImplementation()` |
| DALP-1056 | Identity registry address must be a non-zero address. | The identity registry storage rejects a zero address when binding an identity registry. Only a real, deployed registry contract address is accepted. | Supply a non-zero address of a deployed identity registry contract before calling `bindIdentityRegistry`. | error | No | `InvalidIdentityRegistryAddress()` |
| DALP-1057 | Wallet address must be a non-zero address. | The identity registry storage rejects a zero wallet address when adding, updating, or recovering identity records. Every identity record must be linked to a valid, non-zero wallet address. | Supply a non-zero Ethereum wallet address for the user whose identity record is being created or modified. | error | No | `InvalidIdentityWalletAddress()` |
| DALP-1058 | Redemption amount must be greater than zero. | The bond contract rejects a redemption call where the token amount is zero. A redemption must burn at least one token to release denomination assets. | Supply a positive token amount to redeem. The bond must also have reached maturity before redemption is possible. | error | No | `InvalidRedemptionAmount()` |
| DALP-1059 | Target identity address must be a non-zero address. | The system contract rejects a claim issuance request where the target identity address is the zero address. A claim can only be issued to a deployed on-chain identity contract. | Supply the address of the on-chain identity contract for the intended claim recipient. | error | No | `InvalidTargetIdentity()` |
| DALP-1060 | Token address must be a non-zero address. | The token sale factory and airdrop factory both reject a zero address when a token address is required. A zero address indicates the token has not been deployed or was not provided. | Supply the deployed address of the token contract for which the sale or airdrop is being created. | error | No | `InvalidTokenAddress()` |
| DALP-1061 | Token factory address must be a non-zero address. | The token factory registry rejects a zero address when registering or updating a factory implementation, and an update for a factory type that has no registered factory. A token proxy also rejects a factory address that is zero or does not implement `IDALPTokenFactory`. | Supply the deployed address of a token factory contract that implements `IDALPTokenFactory`. | error | No | `InvalidTokenFactoryAddress()` |
| DALP-1062 | Token implementation address must be a non-zero address. | When registering a token factory, the registry also requires a non-zero token implementation address. A zero address indicates the implementation contract has not been provided. | Supply the deployed address of a token implementation contract alongside the factory address. | error | No | `InvalidTokenImplementationAddress()` |
| DALP-1063 | Token implementation is not accepted by the factory's interface validation. | The token factory registry calls `isValidTokenImplementation` on the factory to verify the implementation is compatible. The factory returned false, meaning the implementation does not satisfy the factory's required interface or type constraints. | Supply a token implementation address that the associated factory's `isValidTokenImplementation` check accepts. | error | No | `InvalidTokenImplementationInterface()` |
| DALP-1064 | Issuer identity setup required. | The system's issuer identity contract does not exist yet. Operations that issue claims on behalf of the platform require the organisation identity to be deployed and registered during system bootstrap. | Complete system bootstrap, which deploys the organisation identity, before attempting claim issuance or other operations that depend on the issuer identity. | error | No | `IssuerIdentityNotInitialized()` |
| DALP-1065 | Maturity date in past. | The maturity date `{{provided}}` is in the past relative to the current block timestamp `{{current}}`. The contract requires the maturity date to be strictly in the future at the time of deployment or initialization to ensure redemptions become available at a future point. | Provide a maturity date that is strictly greater than the current block timestamp. Check the current on-chain timestamp before submitting the deployment parameters. | error | No | `MaturityDateInPast(uint256,uint256)` |
| DALP-1066 | Maturity date not reached. | You called `mature()` before the bond's configured maturity date arrived. The contract reads `maturityDate` from storage and compares it to the current block timestamp; when the timestamp is still earlier than `maturityDate`, the revert fires and returns both values. | Wait until `block.timestamp >= maturityDate` before calling `mature()`. The `maturityDate` value returned with this error (or readable from the bond contract) tells you the earliest timestamp at which the call will succeed. | error | Yes | `MaturityDateNotReached(uint256,uint256)` |
| DALP-1067 | Minting failed. | During a token conversion, the step that mints target tokens to the holder did not complete successfully. The conversion feature calls the target token's minter contract; if that call fails or the minter is misconfigured, the contract reverts to prevent issuing partial conversions. | Verify that the target token's conversion minter feature is correctly deployed and that the token's minter contract has authorized it. If the configuration looks correct, contact the token issuer to inspect the minter contract's state before retrying the conversion. | error | No | `MintingFailed()` |
| DALP-1068 | Net balance invariant violation. | After executing an XvP settlement, the contract checked that each asset's net positions across all participants sum to zero. At least one asset's net balance was not zero. | Construct the settlement flows so that every asset's total outflows equal its total inflows across all participants. Review the flow definitions for the asset address returned in this error and correct the amounts before resubmitting the settlement. | error | No | `NetBalanceInvariantViolation(address)` |
| DALP-1069 | No denomination asset balance. | You attempted to withdraw denomination asset from a fixed yield schedule, but the schedule contract holds no denomination asset balance. The contract checks the ERC-20 balance of the denomination asset before transferring and reverts when the balance is zero. | Fund the yield schedule with the denomination asset, then withdraw. | error | No | `NoDenominationAssetBalance()` |
| DALP-1070 | No fees to reconcile. | You called `reconcileFees()` on the transaction fee accounting feature, but the contract's `totalAccruedFees` counter is currently zero. The feature processes a reconciliation only when fee amounts have accumulated since the last reconciliation. | Reconciliation is only possible after at least one fee-bearing transfer, mint, or burn has occurred. Verify that fee-generating operations have taken place and that the accrued total is greater than zero before calling `reconcileFees()`. | error | No | `NoFeesToReconcile()` |
| DALP-1071 | No historical balances provider. | A query requiring historical balance data was made against a token that has no historical balances provider configured. The resolver checks both the ISMARTHistoricalBalances extension on the token itself and any registered IHistoricalBalancesFeature; neither was found for the token address returned in this error. | The token requires a historical balances extension or a historical balances feature before historical balance queries can succeed. Contact the token issuer to verify that the historical balances capability is configured on the token. | error | No | `NoHistoricalBalancesProvider(address)` |
| DALP-1072 | No tokens to recover. | You attempted to recover a token from an address that holds a zero balance of the target ERC-20. The contract checks the token balance before initiating recovery and reverts when there is nothing to recover. | Verify that the target address holds a non-zero balance of the token you are attempting to recover. Query the token balance on-chain before calling the recovery function. | error | No | `NoTokensToRecover()` |
| DALP-1073 | Not whitelisted. | The caller attempted to participate in a presale token purchase, but their address is not on the presale whitelist. The token sale contract enforces a whitelist during the presale phase; only addresses added by the sale operator can purchase during this period. | Contact the token sale operator to request inclusion on the presale whitelist. Once the operator adds your address, you can retry the purchase. Alternatively, wait for the presale to end and the public sale to begin, at which point the whitelist restriction is lifted. | error | No | `NotWhitelisted()` |
| DALP-1074 | Recipient address frozen. | A custodian froze the recipient's whole address on this token, so the token refused to deliver tokens to it. A mint or an ordinary transfer to a frozen address raises this error on every token contract. The DALP 3.2 token contract also raises it for a custodian's forced transfer into a frozen address, which every other token contract delivers. Recovering a lost wallet onto a frozen replacement wallet is not refused, and the freeze stays in place. | An authorized custodian must unfreeze the recipient's address before tokens can be delivered to it. Contact the token custodian or issuer to request that the recipient address be unfrozen. | error | No | `RecipientAddressFrozen()` |
| DALP-1075 | Recover insufficient balance. | An ERC-20 recovery call requested an amount larger than the contract's current balance of that token. The recovery function checks the contract balance before transferring and reverts when the balance is lower than the requested amount. | Reduce the recovery amount to at most the contract's current token balance, or split the recovery into smaller amounts. Query the contract's token balance first to determine the maximum recoverable amount. | error | No | `RecoverInsufficientBalance()` |
| DALP-1076 | Sender address frozen. | A custodian froze this address as a whole, so the token refused to move tokens out of it. A transfer from a frozen address raises this error on every token contract. The DALP 3.2 token contract also raises it for a burn from that address, whether a supply manager or a token feature burns. | Ask a custodian to unfreeze the address. To burn the units and keep the freeze, move them to an eligible wallet with a forced transfer and burn them there. | error | No | `SenderAddressFrozen()` |
| DALP-1077 | Token access manager implementation not set. | The system deployment step requires a token access manager implementation address, but none has been set in the system registry. The system contract checks this implementation slot before deploying or bootstrapping tokens and reverts when the slot is empty. An update that sets the address to zero is refused with the same error. | Set the token access manager implementation address in the system registry before retrying the deployment or bootstrap step. A holder of the SYSTEM_MANAGER_ROLE must complete this system configuration step. | error | No | `TokenAccessManagerImplementationNotSet()` |
| DALP-1078 | Token already bound. | The token is already bound. The system compliance contract refuses to bind a bound token again, and a token compliance contract refuses a second token while one is bound. | Call `isTokenBound(tokenAddress)` on the system compliance contract to check whether the token is already bound before attempting to bind it again. If it is already bound, no further step is needed. | error | No | `TokenAlreadyBound(address)` |
| DALP-1079 | Token already registered. | You submitted a token address to the external token registry's `registerToken` function, but the contract already records that address in its `_isRegistered` mapping. Each external token can only be registered once. | Check whether the token is already registered by calling `isRegistered(tokenAddress)` on the external token registry before attempting to register it again. If already registered and the type is wrong, use `updateTokenType` instead. | error | No | `TokenAlreadyRegistered(address)` |
| DALP-1080 | Token compliance already exists. | The token compliance factory received a `createTokenCompliance` call for a token address that already has a compliance contract recorded in its `_tokenCompliances` mapping. A token can only have one compliance contract created through this factory. | Retrieve the existing compliance contract address by calling `predictTokenComplianceAddress(tokenAddress)` on the compliance factory, or look up the address stored in the factory's mapping. Use the existing compliance contract rather than creating another. | error | No | `TokenComplianceAlreadyExists(address)` |
| DALP-1081 | Token compliance factory not available. | The V2 token factory's `_createTokenCompliance` helper resolved the token compliance factory proxy address from the system registry and found a zero address. The token compliance factory must be deployed and registered before V2 tokens can be created. | Deploy and register the token compliance factory in the system registry before deploying V2 tokens. A holder of the SYSTEM_MANAGER_ROLE must complete this system setup step. | error | No | `TokenComplianceFactoryNotAvailable()` |
| DALP-1082 | Token decimals too high. | The conversion feature factory checked the ERC-20 `decimals()` of the loan token or the target token and found a value greater than 18. The conversion's WAD-based pricing math requires both tokens to have at most 18 decimal places. | The token returned in this error has more than 18 decimals, which is incompatible with the conversion feature. Use a token with 18 or fewer decimals as either the loan token or the target token in the conversion configuration. | error | No | `TokenDecimalsTooHigh(address,uint8)` |
| DALP-1083 | Token factory registry implementation not set. | A system operation required the token factory registry implementation address, but the slot in the system registry is empty. The system contract checks this implementation slot during setup and bootstrap steps. An update that sets the address to zero is refused with the same error. | Set the token factory registry implementation address in the system registry before retrying the setup step. A holder of the SYSTEM_MANAGER_ROLE must complete this system configuration step. | error | No | `TokenFactoryRegistryImplementationNotSet()` |
| DALP-1084 | Token factory type name already registered. | A token factory type with the same name was already registered in the factory registry. The V1 registry uses a keccak256 hash of the type name as its key; if that key is already occupied, a second registration for the same name reverts. | Each token factory type name must be unique in the registry. Check the registered factory types before attempting to register, and use a distinct name if you are registering a new factory type. | error | No | `TokenFactoryTypeAlreadyRegistered(string)` |
| DALP-1085 | Token factory type ID already registered. | A token factory type with the same `typeId` (bytes32) was already registered in the V2 factory registry and is not in an archived state. The V2 registry allows unarchiving an archived entry under the same key but rejects a fully active duplicate registration. | Each token factory type identifier must be unique in the V2 registry. If you are trying to upgrade an existing factory, archive the old registration first. If you are registering a new type, use a distinct `typeId`. | error | No | `TokenFactoryTypeAlreadyRegisteredV2(bytes32)` |
| DALP-1086 | Token identity address mismatch. | During token deployment the factory computes a deterministic CREATE2 address for the token identity contract and then verifies the deployed address matches. The deployed identity address (deployedTokenIdentityAddress) does not match the predicted address (tokenIdentityAddress), meaning the factory's internal consistency check failed. | Adjusting request parameters cannot resolve this system-level deployment failure. Contact support with the deployedTokenIdentityAddress and tokenIdentityAddress values from the error. | error | No | `TokenIdentityAddressMismatch(address,address)` |
| DALP-1087 | Token implementation not set. | The token factory that deployed this token has no token implementation set, so the token proxy has nothing to forward calls to. | Set the token implementation on this token's factory with `updateTokenImplementation`. This takes the system manager role. | error | No | `TokenImplementationNotSet()` |
| DALP-1088 | Token does not support access management. | Token sales and airdrops read roles from the token, so the token must implement `ISMARTTokenAccessManaged`. ERC-165 reports that it does not. | Token sales and airdrops are only supported for tokens that implement the ISMARTTokenAccessManaged interface. Verify you are using the correct token address and that the token was deployed with access-management support enabled. | error | No | `TokenMustSupportAccessManaged()` |
| DALP-1089 | Token compliance contract has no bound token. | The per-token compliance contract has no token address bound to it. The compliance contract requires a bound token before it can process transfer checks or other operations. | The token compliance contract must be bound to a token address before use. The token factory performs this binding during deployment. If you see this error outside of a factory flow, contact support. | error | No | `TokenNotBound()` |
| DALP-1090 | Token is not bound to the system compliance contract. | The system compliance contract has no binding recorded for the token address provided. Transfer hooks and burn hooks require the token to be registered with the system compliance layer before the contract can process them. | The token must be bound to the system compliance contract first. For newly deployed tokens this happens during factory setup. For pre-existing tokens, use the batch binding migration path. Contact your platform operator if the binding is missing. | error | No | `TokenNotBound(address)` |
| DALP-1091 | Token not registered. | The external token registry does not contain the token address. Operations that read or update the token type require you to register the token first. | Register the token address in the external token registry before calling operations that require it. A TOKEN_MANAGER_ROLE holder can register the token via the registry's registration function. | error | No | `TokenNotRegistered(address)` |
| DALP-1092 | Transfer blocked after maturity. | The token matured. After maturity it refuses all mints and ordinary transfers. Burns, forced custodian transfers and fee movements still run. | Redeem the tokens, or move them with a forced custodian transfer. Minting is closed after maturity. | error | No | `TransferBlockedAfterMaturity(address,address)` |
| DALP-1093 | Caller is not a transfer approval authority. | The caller's on-chain identity is not in the list of configured approval authorities for this transfer approval compliance module. Only registered approval authorities can create, revoke, or consume transfer approvals. | Request that a system administrator add your identity as an approval authority for this module, then retry the operation. | error | No | `UnauthorizedApprover()` |
| DALP-1094 | Caller cannot create a feed for this subject. | Creating a feed requires FEEDS_MANAGER_ROLE, or GOVERNANCE_ROLE on the subject token for a token-scoped feed. A global feed accepts FEEDS_MANAGER_ROLE only. | Ask a feeds manager to create the feed, or get GOVERNANCE_ROLE on the subject token. | error | No | `UnauthorizedFeedCreation()` |
| DALP-1095 | Caller cannot create token sales. | Creating a token sale requires either the TOKEN_FACTORY_MODULE_ROLE at the system level or the GOVERNANCE_ROLE on the specific subject token. The caller holds neither role, so the factory rejects the request. | Obtain the GOVERNANCE_ROLE on the subject token or have a system administrator with TOKEN_FACTORY_MODULE_ROLE create the sale on your behalf. | error | No | `UnauthorizedTokenSaleCreation()` |
| DALP-1096 | The compliance rules blocked this transfer: the sender or recipient does not meet the token's requirements. | One of the token's compliance rules blocked the transfer. | Check both parties' identity registration and claims, then retry. | error | No | `TransferNotCompliant()` |
| DALP-1097 | Wallet not registered to this identity. | The identity recovery process verifies that the wallet you are reporting as lost is linked to the specified identity contract. The registry does not record that wallet address as belonging to that identity contract, so the recovery request cannot proceed. | Confirm the correct identity contract address for the wallet. Retrieve the wallet's registered identity from the identity registry and retry the recovery request with the matching identity contract address. | error | No | `WalletNotRegisteredToThisIdentity(address,address)` |
| DALP-1098 | Redemption amount or payout is zero. | The amount is zero, or after the transfer fee and the remaining payout budget the redemption pays nothing. `redeemForBatch` also raises it when `holders` and `amounts` differ in length or name more than 100 holders. | Redeem a positive amount that yields a payout. For a batch, pass arrays of equal length with at most 100 holders. | error | No | `ZeroRedemptionAmount()` |
| DALP-1099 | Feeds directory address is zero. | The price resolver contract requires a non-zero feeds directory address during initialization. The address passed to `initialize` was the zero address. | Supply the deployed feeds directory contract address when calling `initialize`. | error | No | `InvalidFeedsDirectory()` |

The previous page is [DALP-1000 to DALP-1049](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-1000-1049). The next page is [DALP-1100 to DALP-1199](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-1100-1199).
