This page lists the 49 errors in the contract error reference with a code from DALP-1000 to DALP-1049. Match the error's id, or its dalpCode on a contract error or a failed deployment step, for example DALP-1001, to the DALP Code column, then read Retryable and Suggested Fix. The contract error reference explains each column, including Severity, and the DALP error index lists the page for every code range.
DALP Code | Message | Why | Suggested Fix | Severity | Retryable | Solidity Error |
|---|---|---|---|---|---|---|
DALP-1001 | Bond already matured. | The contract already matured this bond. It blocks a second call to mature() and also blocks any non-forced transfer to a non-zero address once the bond reaches the matured state, because tokens can only be redeemed at that point. | Read the isMatured flag on the bond before calling mature(). If the bond is already matured, redeem tokens directly instead of calling mature() again. | error | No | BondAlreadyMatured() |
DALP-1002 | Bond maturity date must be in the future. | The contract checks that the supplied maturity date is strictly greater than the current block timestamp at initialization. A maturity date at or before the current block timestamp causes the contract to revert. | Supply a maturity date that is at least one second ahead of the expected block timestamp when the transaction confirms. Check the current on-chain timestamp before constructing the bond parameters. | error | No | Bond |
DALP-1003 | Bond has not matured. | mature() was called before the bond's maturity date, or a redemption was attempted before the bond was matured. Passing the maturity date does not mature the bond. A holder of the governance role must call mature(). | Before the maturity date, wait for it. After it, ask a governance-role holder to call mature(), then redeem. | error | No | Bond |
DALP-1004 | Bytes feeds not supported. | The registration passes feed kind BYTES. The feeds directory registers SCALAR feeds only. | Register the feed with kind SCALAR. | error | No | BytesFeedsNotSupported() |
DALP-1005 | Caller must have identity. | The caller's wallet address has no identity contract registered in the identity registry for this token. The transfer-approval compliance module requires the caller to hold a registered on-chain identity before granting or revoking approvals. | Register an on-chain identity for the caller's wallet through the identity registry before attempting to create or revoke a transfer approval. | error | No | CallerMustHaveIdentity() |
DALP-1006 | Caller not identity owner. | Self-service registration binds an identity to the caller's own wallet. The wallet being registered is not the caller, or it holds no MANAGEMENT_KEY on the identity contract. | Register from the wallet itself, or use the signed registration, and give that wallet a MANAGEMENT_KEY on the identity contract. | error | No | CallerNotIdentityOwner() |
DALP-1007 | Cannot transfer converted tokens. | The token uses the MarkConverted debt-reduction method, which keeps source tokens on the holder's balance after conversion but marks them as encumbered. The contract tracks the holder's converted token count and blocks any transfer or burn that would move tokens beyond the unconverted portion. | Reduce the transfer or burn amount to at most the holder's unconverted balance. The unconverted balance equals the holder's total token balance minus the amount already converted. Check the current converted total on-chain before resubmitting. | error | No | Cannot |
DALP-1008 | Cannot withdraw sale token. | The token sale contract restricts fund withdrawal to accepted payment currencies only. The sale token itself cannot pass through this path because withdrawing it would drain the pool of tokens held for distribution to investors. | To recover unsold sale tokens after the sale ends, use the dedicated unsold-token withdrawal call rather than withdrawFunds. Pass a payment currency address, not the sale token address, to withdrawFunds. | error | No | Cannot |
DALP-1009 | Compliance check failed: {{reason}}. | A V1 compliance module's pre-transfer check ran and found the proposed operation does not satisfy its rules. The module reverted with a descriptive reason, which the platform captures as the compliance reason. Each compliance module enforces its own rule set, so this reason describes the specific constraint. | Read the compliance reason to identify which compliance rule the module applied. Resolve the underlying condition (for example, ensure the party has the required identity claims or is not on a block list), then resubmit. | error | No | Compliance |
DALP-1010 | Compliance implementation not set. | The system's compliance implementation address is zero. System initialisation and bootstrap need it, and set refuses the zero address. | Call set with a non-zero compliance implementation address, then retry. | error | No | Compliance |
DALP-1011 | Compliance module already registered. | A compliance module with the same type identifier (derived from its name) already exists in the compliance module registry. Each compliance module type must have a unique registration. | Check the existing registry for a module with the same name before registering. To update an existing module, use the update path rather than registering again. | error | No | Compliance |
DALP-1012 | Compliance module registry implementation not set. | The compliance module registry logic contract address is absent from the system configuration. Operations that require the registry revert until the system stores this address. | Set the compliance module registry implementation address in the system configuration before bootstrapping or operating on compliance modules. | error | No | Compliance |
DALP-1013 | Contract identity topic id not set. | The contract identity topic ID passed to ensureContractIdentityClaimIsSet is zero. The topic ID must be a non-zero value from the topic scheme registry to issue a CONTRACT_IDENTITY claim. | Retrieve the correct CONTRACT_IDENTITY topic ID from the topic scheme registry and pass it as the contractIdentityTopicId argument. | error | No | Contract |
DALP-1014 | Contract missing identity interface. | The contract address passed to createContractIdentityFor lacks the IContractWithIdentity interface. The factory checks this via ERC165 supportsInterface before creating an identity. | Ensure the target contract implements IContractWithIdentity and registers its interface ID via ERC165. Confirm the contract address is correct before calling. | error | No | Contract |
DALP-1015 | Empty token type. | The tokenType string provided to the external token registry is empty. The registry requires a non-empty type string for every token registration or type update. | Provide a non-empty tokenType string that describes the category of the external token you are registering or updating. | error | No | EmptyTokenType() |
DALP-1016 | Exceeds unconverted balance. | The conversion amount exceeds the holder's remaining unconverted principal balance. Under the MarkConverted debt method the contract tracks how much principal the holder already converted, and the requested amount exceeds what remains. | Read the holder's unconverted balance before converting. Pass an amount no greater than the unconverted remainder, or pass 0 to convert the full remaining unconverted balance in one call. | error | No | Exceeds |
DALP-1017 | External token registry implementation not set. | The external token registry logic contract address is absent from the system configuration. The system needs this address before the external token registry can bootstrap. An update that sets the address to zero is refused with the same error. | Set the external token registry implementation address in the system configuration before bootstrapping or using the external token registry. | error | No | External |
DALP-1018 | Feature token mismatch. | The feature contract's token() returns an address different from the token under configuration. Each feature contract is deployed and bound to a specific token, and the contract rejects features bound to a different token. | Deploy a feature contract pointing to this specific token address, or verify that the feature address you are passing targets this token and not a different one. | error | No | Feature |
DALP-1019 | Fee rate frozen. | A governance call to freezeFeeRate() froze the AUM fee rate and fee recipient on this fee feature. The freeze cannot be lifted on this feature. | Replace the feature with a new one through the token's governance role. | error | No | FeeRateIsFrozen() |
DALP-1020 | Fee rates frozen. | A governance call to freezeFeeRates() froze the fee rates on this fee feature. A transaction fee keeps its recipient configurable. An accounting fee locks its recipient with the rates. | Change only a transaction fee's recipient on this feature, or replace the feature with a new one through the token's governance role. | error | No | FeeRatesAreFrozen() |
DALP-1021 | Feed already exists. | A feed is already registered for the given subject address and topicId combination. The feeds directory prevents duplicate feed registrations for the same subject and topic. | Call replaceFeed from an account that holds FEEDS_MANAGER_ROLE to swap the existing feed, or register under a different subject or topic ID. | error | No | Feed |
DALP-1022 | No feed exists for this subject and topic. | The feeds directory holds no feed for the given subject address and topicId combination. The operation requires an existing feed entry at that location. | Register a feed for this subject and topicId first, then retry the update or lookup. Confirm the subject address and topicId are correct. | error | No | Feed |
DALP-1023 | Feeds directory implementation not set. | The feeds directory implementation address was absent from the system when bootstrapFeedsDirectory ran. The system needs a non-zero implementation address before it can deploy the feeds directory proxy. | Set the feeds directory implementation with setImplementation for FEEDS_DIRECTORY from an account that holds SYSTEM_MANAGER_ROLE, then call bootstrapFeedsDirectory again. | error | No | Feeds |
DALP-1024 | Fees frozen. | A governance call to freezeFees() froze the external transaction fee configuration on this fee feature. The fee amounts, fee recipient and fee token cannot change on this feature. | Replace the feature with a new one through the token's governance role. | error | No | FeesAreFrozen() |
DALP-1025 | Freeze amount exceeds available balance. | The requested freeze amount is larger than the holder's available (unfrozen) token balance. The custodian calculates available balance as total balance minus already-frozen tokens, and the requested amount exceeds that. | Read the holder's current balance and frozen amount before freezing. The freeze amount must be no greater than (totalBalance - alreadyFrozen). Reduce the requested freeze amount accordingly. | error | No | Freeze |
DALP-1026 | Global compliance not available. | The system's global compliance contract address is absent from the configuration. Token compliance creation requires a deployed global compliance contract in the system before the platform can create any per-token compliance proxy. | Confirm that the system completed full bootstrap with a global compliance implementation before creating token compliance. Contact your platform administrator to verify the system configuration. | error | No | Global |
DALP-1027 | Historical balances not available. | Dividend and fixed treasury yield need the token's historical balances, either built into the token or from an attached historical-balances feature. This token has neither. | Attach the historical-balances feature to the token, then attach the yield feature. | error | No | Historical |
DALP-1028 | Identity already accepted. | The address {{userAddress}} already holds an identity in accepted (fully registered) state. The contract applies the accept step only to identities currently in the pending state, and {{userAddress}} has already passed that step. | Query the identity registry to confirm the current registration status for {{userAddress}}. The contract requires no further acceptance step for this address. | error | No | Identity |
DALP-1029 | Identity already exists. | The identity storage contract already holds an identity contract for the address {{userAddress}}. The registry stores each address only once. | Use the address lookup API to retrieve the existing identity for {{userAddress}} rather than attempting a second registration. | error | No | Identity |
DALP-1030 | Identity already registered. | The address {{userAddress}} already has an identity association in the registry, either in pending or accepted state. The registry prevents duplicate registrations across both states to maintain a one-identity-per-address invariant. | Use the identity registry read API to check the current state for {{userAddress}} before attempting registration. If a pending identity exists and you hold the appropriate role, you can accept it rather than re-registering. | error | No | Identity |
DALP-1031 | Identity already set. | The token sale contract already has an on-chain identity address set and enforces a write-once policy. The contract blocks any attempt to assign a different identity after the first assignment. | Read the current on-chain identity address from the token sale contract. If the contract already holds the correct identity, no further step is required. | error | No | IdentityAlreadySet() |
DALP-1032 | Identity factory implementation not set. | The system holds no identity factory implementation address. The system requires a deployed identity factory logic contract before creating identity proxies during bootstrap or token deployment. | Register the identity factory implementation address in the system before retrying. A platform administrator must complete this configuration step during system setup. | error | No | Identity |
DALP-1033 | Identity implementation not set. | The identity logic contract address has not been set in the identity factory. Proxy creation requires the factory to hold a reference to a deployed identity implementation contract. | Set the identity implementation address in the identity factory before creating identity proxies. A platform administrator must complete this configuration step during platform setup. | error | No | Identity |
DALP-1034 | Identity not pending. | The address {{userAddress}} does not have an identity in the pending state, so the contract cannot accept it. The address either has no identity associated with it at all, or the contract already accepted it previously. | Register a pending identity for {{userAddress}} first using the pending registration call, then retry the accept step. Use the identity registry read API to confirm the current state. | error | No | Identity |
DALP-1035 | Identity not registered. | The address {{userAddress}} has no accepted (fully registered) identity in the registry. The operation requires the address to be present in the accepted identity storage layer. | Register and accept an identity for {{userAddress}} before retrying this operation. Use the identity registry read API to confirm the registration state. | error | No | Identity |
DALP-1036 | Identity registry already bound. | The registry at {{registryAddress}} is already bound to the identity registry storage contract. Each identity registry can be bound only once to prevent duplicate bindings. | Use the bound registries read API to verify the current binding state for {{registryAddress}}. No further step is required if the binding is already correct. | error | No | Identity |
DALP-1037 | Identity registry implementation not set. | The system holds no identity registry logic contract address. The system cannot deploy or reference an identity registry until an administrator registers an implementation address. An update that sets the address to zero is refused with the same error. | Register the identity registry implementation address in the system configuration before retrying. Completing this step requires platform administrator access. | error | No | Identity |
DALP-1038 | Identity registry not bound. | The registry at {{registryAddress}} is not currently bound to the identity registry storage contract. The unbind operation requires the registry to have been bound previously. | Verify that {{registryAddress}} was successfully bound before attempting to unbind it. Use the bound registries read API to confirm the current state. | error | No | Identity |
DALP-1039 | Identity registry storage implementation not set. | The system holds no identity registry storage logic contract address. The system requires an identity registry storage implementation before deploying the registry storage proxy. An update that sets the address to zero is refused with the same error. | Register the identity registry storage implementation address in the system configuration before bootstrapping. Completing this step requires platform administrator access. | error | No | Identity |
DALP-1040 | The token's collateral does not cover this mint. | The token's collateral claim covers {{available}} units but minting this amount would require {{required}} units of collateral backing. The contract enforces a configured collateral ratio against the post-mint total supply before each mint. | Obtain a new or updated collateral claim from a trusted issuer that covers at least {{required}} units, then retry the mint. Reduce the mint amount so that the post-mint total supply stays within the coverage of the existing claim. | error | No | Insufficient |
DALP-1041 | The contract does not hold enough of the denomination asset. | The contract holds {{currentBalance}} of the denomination asset but the operation needs {{requiredBalance}}. Bond maturity, bond redemption and a yield schedule withdrawal each check the contract's own balance. | Transfer denomination asset to the contract until it holds {{requiredBalance}}, or withdraw less from the schedule, then retry. | error | No | Insufficient |
DALP-1042 | The contract does not hold enough tokens for this operation. | The contract's token balance is below what the operation needs. An offering must hold its full hard cap before activation, and a token recovery cannot move more than the contract holds. | For an offering, transfer tokens to its contract until the balance reaches the hard cap. For a recovery, reduce the amount to what the contract holds. Then retry. | error | No | Insufficient |
DALP-1043 | The treasury does not hold enough to cover the redemption payout. | The treasury holds {{available}} of the denomination asset but needs {{required}}. mature() checks the payout for the whole supply. redeem checks the payout for this redemption. | Fund the treasury with at least {{required}} of the denomination asset, then retry. | error | No | Insufficient |
DALP-1044 | Collateral ratio exceeds the 200% ceiling. | The contract requires ratioBps to be at most 20,000 (200%). The value supplied is above that limit. | Supply a collateral ratio in basis points between 0 and 20,000 inclusive. A value of 0 disables collateral enforcement; 10,000 equals 100%. | error | No | Invalid |
DALP-1045 | Collateral proof topic ID must be non-zero. | The contract treats topic ID 0 as unset and rejects it. A collateral proof topic must reference a real claim topic registered on-chain. | Supply a non-zero uint256 topic ID that corresponds to a valid collateral proof claim topic. | error | No | Invalid |
DALP-1046 | Compliance module address must be a non-zero contract address. | The compliance module registry rejects a zero address when a module is registered. A zero address indicates the module contract has not been deployed or was not provided. | Supply the deployed address of a compliance module contract. | error | No | Invalid |
DALP-1047 | Contract identity implementation does not support the required interface. | The identity factory validates that the contract identity implementation reports support for the IDALPContractIdentity interface via ERC-165. The provided address does not pass that check. | Supply the address of a deployed contract identity implementation that correctly implements IDALPContractIdentity and returns true from supportsInterface. | error | No | Invalid |
DALP-1048 | Fee rate exceeds the 100% maximum (10,000 basis points). | The AUM fee rate and the mint, burn and transfer fee rates cannot exceed 10,000 basis points (100%). One or more of the supplied rates is above that limit. | Supply fee rates in basis points where each value is between 0 and 10,000 inclusive. For example, 250 equals 2.5%. | error | No | InvalidFeeRate() |
DALP-1049 | Fee recipient address must be a non-zero address. | The fee feature requires a valid recipient address to hold accrued fees. A zero address is rejected because fees cannot be sent to the null address. | Supply a non-zero Ethereum address that will receive collected fees. | error | No | InvalidFeeRecipient() |
The next page is DALP-1050 to DALP-1099.