# DALP-4150 to DALP-4199

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

This page lists the 50 errors in the contract error reference with a code from DALP-4150 to DALP-4199. Match the error's `id`, or its `dalpCode` on a contract error or a failed deployment step, for example `DALP-4150`, 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-4150 | Airdrop end time is not after the start time. | The time-bound airdrop requires its end time to be strictly greater than the start time. An end time equal to or before the start time creates a zero-length or reversed claim window. | Set the end time to a timestamp at least one second after the start time. | error | No | `InvalidEndTime()` |
| DALP-4151 | Compliance expression does not reduce to exactly one result. | The identity-verification compliance module evaluates a postfix boolean expression. After processing all operands and operators the evaluation stack must contain exactly one value. A stack count other than one means the expression is structurally malformed. | Correct the compliance expression so every operator consumes the right number of operands and the final stack holds exactly one boolean result. | error | No | `InvalidExpressionMustEvaluateToOneResult()` |
| DALP-4152 | Identity verification expression stack did not resolve to a single result. | After evaluating the postfix claim expression in `IdentityVerificationLib`, the internal stack index must equal 1. A stack index other than 1 indicates unbalanced operators or extra operands remain. | Review the postfix expression for unbalanced operators or extra operands, then resubmit with a well-formed expression that leaves exactly one value on the stack. | error | No | `InvalidExpressionStackResult()` |
| DALP-4153 | XvP flow external chain ID matches the current chain. | An XvP settlement flow marked as external must reference a different blockchain. The provided `externalChainId` equals the chain ID of the contract's own network. | Set `externalChainId` to the chain ID of the remote network involved in the cross-chain leg, not the chain where this contract is deployed. | error | No | `InvalidExternalChainId(uint64)` |
| DALP-4154 | Bond face value is zero. | A bond's face value is the principal amount and must be a positive integer. A face value of zero makes the bond economically meaningless and is rejected at initialization. | Set `faceValue` to the intended positive principal amount before initializing the bond. | error | No | `InvalidFaceValue()` |
| DALP-4155 | Factory address is zero or not a matching factory. | The proxy checks that its factory address is non-zero and supports the factory interface through ERC-165. The address failed one of these checks. | Supply the address of the deployed factory for this proxy type, one that reports its factory interface through ERC-165. | error | No | `InvalidFactoryAddress()` |
| DALP-4156 | Token feature configuration data failed validation. | The Booked movements feature takes exactly one 32-byte word of configuration: the set of request kinds holders may open. The configuration had a different length. | Encode the requestable kinds as one `uint256`. | error | No | `InvalidFeatureConfig()` |
| DALP-4157 | Global trusted issuers registry lacks the required interface. | Migrating to V2 or setting the global registry checks through ERC-165 that the address implements `IDALPTrustedIssuersRegistry`. It does not. | Provide the address of a contract that implements `IDALPTrustedIssuersRegistry` and reports it through ERC-165. | error | No | `InvalidGlobalRegistryAddress(address)` |
| DALP-4158 | Feed history size is zero in BOUNDED mode. | When the issuer-signed scalar feed is configured in BOUNDED history mode, it must retain at least one historical entry. A `historySize` of zero is not permitted in this mode. | Set `historySize` to a positive integer equal to the number of historical entries the feed should retain. Switch to UNBOUNDED mode if a fixed history size is not needed. | error | No | `InvalidHistorySize()` |
| DALP-4159 | Proposed implementation does not support the required contract interface. | The contract requires any registered implementation to pass an ERC-165 interface check before it is accepted. The address provided does not advertise the expected interface. | Supply an implementation contract that correctly implements and advertises the required interface via ERC-165 `supportsInterface`. | error | No | `InvalidImplementation()` |
| DALP-4160 | Implementation address is not valid. | A token factory rejects a token implementation that is the zero address, does not support the SMART token interface, or does not fit the factory. The compliance module registry rejects a zero implementation address. | Provide the address of a deployed token implementation contract that supports the required SMART token interface. | error | No | `InvalidImplementationAddress()` |
| DALP-4161 | Implementation contract does not support the expected module interface. | The contract checks via ERC-165 that the supplied implementation address supports a specific interface (identified by `interfaceId`). The address must implement ERC-165 and advertise support for that interface. | Supply the address of an implementation contract that supports the interface identified by the `interfaceId` field returned in the error. | error | No | `InvalidImplementationInterface(address,bytes4)` |
| DALP-4162 | Initial management key address is the zero address. | ERC-734 identity setup requires a non-zero management key to seed the key store. A zero address was provided. | Provide a valid, non-zero wallet address as the initial management key. | error | No | `InvalidInitialManagementKey()` |
| DALP-4163 | Contract already initialized. | OpenZeppelin's `Initializable` guard prevents a contract from being initialized more than once. The contract's initialization slot is already consumed. | Call `initialize` only once, at deployment time. If an upgrade is needed, use the appropriate reinitializer function for the new version. | error | No | `InvalidInitialization()` |
| DALP-4164 | Initialization deadline must be at least one second in the future. | The vesting airdrop contract requires `initializationDeadline` to be strictly greater than the current block timestamp. A value at or before the current time was supplied. | Set the initialization deadline to a timestamp that is at least one second after the current block time. | error | No | `InvalidInitializationDeadline()` |
| DALP-4165 | Batch input arrays have mismatched lengths. | A batch claim, distribution or vesting call needs input arrays of equal length. The arrays provided have different lengths. | Ensure all arrays passed to the batch call contain the same number of elements. | error | No | `InvalidInputArrayLengths()` |
| DALP-4166 | Yield distribution interval must be greater than zero. | The yield schedule configuration requires a non-zero distribution interval (in seconds). A value of zero was supplied. | Set the distribution interval to a positive number of seconds representing how often yield is distributed. | error | No | `InvalidInterval()` |
| DALP-4167 | Trusted issuer address is the zero address. | Registering a trusted issuer requires a non-zero contract address. A zero address was provided. | Provide the address of a deployed claim issuer contract as the trusted issuer. | error | No | `InvalidIssuerAddress()` |
| DALP-4168 | Source wallet is not lost or caller is not its replacement. | Token recovery requires the source wallet to be marked as lost in the identity registry, and the caller's new wallet must match the registry's recorded replacement for that source. One of these conditions was not met. | Confirm that the wallet to recover from is marked as lost in the identity registry and that the recovery is initiated from the wallet designated as its replacement. | error | No | `InvalidLostWallet()` |
| DALP-4169 | Address is not a recognized compliance module. | The compliance contract requires each module address to be non-zero and to declare support for `ISMARTComplianceModule` via ERC-165. The address provided failed this check. | Supply the address of a deployed contract that correctly implements and advertises `ISMARTComplianceModule`. | error | No | `InvalidModule()` |
| DALP-4170 | Feed update nonce is out of sequence. | The issuer-signed scalar feed requires each update's nonce to be exactly one greater than the issuer's last accepted nonce. The nonce in the submitted update does not match this expected value. | Fetch the current nonce for the issuer from the feed contract and submit the update with a nonce equal to that value plus one. | error | No | `InvalidNonce()` |
| DALP-4171 | Feed update observedAt timestamp is zero. | The issuer-signed scalar feed requires a non-zero `observedAt` timestamp in every update. A zero value was submitted. | Set `observedAt` to the Unix timestamp (in seconds) at which the data value was observed. | error | No | `InvalidObservedAt()` |
| DALP-4172 | OnchainID address is the zero address. | `setOnchainId` on a yield schedule or a smart account received the zero address. | Provide the address of the deployed OnchainID contract. | error | No | `InvalidOnchainID()` |
| DALP-4173 | OnchainID address is the zero address. | The XvP settlement contract requires a non-zero OnchainID address when the factory calls `setOnchainId`. A zero address was provided. | Provide the address of the deployed OnchainID contract for this settlement instance. | error | No | `InvalidOnchainId()` |
| DALP-4174 | Sale parameter is zero or out of range. | The token sale contract validates each numeric configuration parameter (sale duration, hard cap, token decimals, price ratio, soft cap, presale settings, extension duration). A value of zero or an out-of-range value was supplied for one of these. | Review the sale configuration and ensure all numeric parameters are non-zero and within accepted bounds. Token decimals must not exceed 24. | error | No | `InvalidParameter()` |
| DALP-4175 | Asset configuration has an empty required field. | The asset factory requires non-empty `name`, `symbol`, and `assetTypeName` strings in the configuration. At least one of these fields was an empty string. | Provide non-empty values for `name`, `symbol`, and `assetTypeName` in the asset configuration. | error | No | `InvalidParameters()` |
| DALP-4176 | Compliance module configuration parameters are not accepted. | A compliance module's `validateParameters` function rejected the provided configuration bytes. The error includes a reason string describing the specific constraint that was violated (for example, empty parameters, a zero hold period, or a duplicate entry). | Consult the reason string in the error and correct the module configuration to satisfy that constraint before resubmitting. | error | No | `InvalidParameters(string)` |
| DALP-4177 | Paymaster field in the user operation decodes to the zero address. | The EIP-4337 EntryPoint unpacks the `paymasterAndData` field of the user operation and requires the extracted paymaster address to be non-zero. The decoded address was the zero address. | Supply a valid, non-zero paymaster contract address in the `paymasterAndData` field, or omit `paymasterAndData` entirely to use no paymaster. | error | No | `InvalidPaymaster(address)` |
| DALP-4178 | The paymasterAndData field is shorter than the minimum required length. | The EIP-4337 EntryPoint requires `paymasterAndData`, when present, to be at least `PAYMASTER_DATA_OFFSET` bytes long so it can unpack the paymaster address and gas limits. The field provided is shorter than this minimum. | Encode `paymasterAndData` with the full required structure: paymaster address (20 bytes) followed by verification gas limit and post-op gas limit (each packed as uint128), then any additional paymaster-specific data. | error | No | `InvalidPaymasterData(uint256)` |
| DALP-4179 | Paymaster signature length exceeds available paymaster data. | The ERC-4337 entry point decoded a `pmSignatureLength` value from the paymaster-and-data field that would extend before the start of the paymaster data. The encoded length must fit within the data that follows the fixed paymaster header. | Reconstruct the paymaster-and-data payload so that the appended signature length value does not exceed `dataLength` minus the minimum paymaster data size with suffix. | error | No | `InvalidPaymasterSignatureLength(uint256,uint256)` |
| DALP-4180 | Payment currency rejected for this token sale. | The contract rejects a payment currency that is the sale token itself, any ERC20 token whose `decimals()` call reverts, or any token with more than 24 decimal places. All three conditions prevent safe price conversion. | Use a different ERC20 token as the payment currency. Confirm the token is not the sale token, that its `decimals()` function returns successfully, and that the returned value is 24 or below. | error | No | `InvalidPaymentCurrency()` |
| DALP-4181 | Period number is outside the range of configured yield periods. | The fixed yield schedule reverts when the requested period is zero or greater than the total number of periods calculated from the schedule configuration. | Supply a period number between 1 and the value returned by the schedule's total-periods query. | error | No | `InvalidPeriod()` |
| DALP-4182 | Sale phase cannot transition to public sale from the current status. | The `transitionToPublicSale` function requires the sale to be in the `PRESALE` phase. Calling it from any other status, including `SETUP` or `PUBLIC_SALE`, causes a revert. | Activate the pre-sale phase first. Once the sale is in `PRESALE` status, call `transitionToPublicSale` to advance it. | error | No | `InvalidPhaseTransition()` |
| DALP-4183 | Token sale price calculation produced an unusable result. | A price computation within the token sale contract encountered parameters that would produce an overflow, division by zero, or otherwise unresolvable result. | Review the price ratio and token decimal configuration. Ensure the base price and payment currency ratio are both non-zero and that the resulting amount fits within the expected numeric range. | error | No | `InvalidPriceCalculation()` |
| DALP-4184 | Vesting or purchase range parameters are in the wrong order. | The contract enforces that `vestingCliff` does not exceed `vestingDuration`, and that `minPurchase` does not exceed `maxPurchase`. Either pairing is out of order. | Set the cliff to be less than or equal to the total vesting duration. Set the minimum purchase amount to be less than or equal to the maximum purchase amount. | error | No | `InvalidRange()` |
| DALP-4185 | Yield rate is zero or over the maximum. | A yield schedule needs a rate greater than zero. An interest schedule also caps the rate at 20,000 basis points, which is 200%. | Use a rate from 1 to 20,000 basis points. | error | No | `InvalidRate()` |
| DALP-4186 | Redemption owner address is the zero address. | The redeemable token extension requires a non-zero owner address when processing a redemption. Passing the zero address is rejected before any token movement occurs. | Supply the address of the account whose tokens are being redeemed. The address must be a valid, non-zero Ethereum address. | error | No | `InvalidRedeemAddress()` |
| DALP-4187 | Redemption amount must be greater than zero. | The redeemable token extension rejects a redemption call where the token amount is zero. Redeeming zero tokens has no effect and is treated as an error. | Provide a redemption amount that is at least 1 token unit. | error | No | `InvalidRedeemAmount()` |
| DALP-4188 | Registry address is the zero address. | The identity registry contract requires a non-zero address when setting a trusted issuers registry. The zero address cannot refer to a deployed contract. | Provide the address of a deployed trusted issuers registry contract. | error | No | `InvalidRegistryAddress()` |
| DALP-4189 | Registry address does not refer to a usable registry contract. | The contract encodes the provided address in the error and reverts because the address is not a valid registry. Zero addresses and addresses that fail the required interface check are both rejected. | Replace the registry address with the address of a correctly deployed and compatible registry contract. | error | No | `InvalidRegistryAddress(address)` |
| DALP-4190 | Required confirmation count exceeds the number of signers. | A multisig contract rejects any configuration where the number of required confirmations is greater than the total number of registered signers. Such a threshold can never be reached. | Set the required confirmation count to a value that is less than or equal to the current number of signers. | error | No | `InvalidRequirement(uint256,uint256)` |
| DALP-4191 | This operation cannot run while the sale is in its current status. | The operation needs a different sale status than the current one. | Check the current sale status and complete any prerequisite steps, such as activation or finalization, before retrying. | error | No | `InvalidSaleStatus()` |
| DALP-4192 | Feed topic schema hash does not match the required scalar schema. | The feeds directory only accepts topics whose schema hash equals `SCALAR_SCHEMA_HASH`. The topic's registered signature produced a different hash, meaning the topic is not typed as a scalar feed. | Register the feed under a topic whose schema signature matches the scalar schema, or register the topic with the correct scalar type signature before adding the feed. | error | No | `InvalidScalarSchemaHash(bytes32,bytes32)` |
| DALP-4193 | Secret preimage does not match the settlement hashlock. | The XvP settlement contract checks that `keccak256(secret)` equals the stored hashlock. The value provided does not produce the expected hash. | Provide the exact secret bytes whose keccak256 hash matches the hashlock stored in this settlement. | error | No | `InvalidSecret()` |
| DALP-4194 | ShortString storage encoding is corrupt. | The OpenZeppelin `ShortStrings` library encodes string length in the low byte of a `bytes32` slot. A value greater than 31 in that byte indicates a corrupt or miswritten short-string value. | Contact support with the `requestId` from the error. | error | No | `InvalidShortString()` |
| DALP-4195 | Signature malformed or verification failed. | The issuer-signed scalar feed rejected the signature. Its EIP-1271 envelope is malformed, ECDSA recovery returned the zero address, the EIP-1271 signer has no contract code or rejected the signature, or the `s` value is in the upper half of the curve order (malleable signature). | Re-sign the payload using the authorized issuer key. Ensure the signature uses the correct encoding for either the ECDSA path (65 bytes, canonical `s`) or the EIP-1271 path (abi-encoded signer address and inner signature). | error | No | `InvalidSignature()` |
| DALP-4196 | ECDSA signature must be exactly 65 bytes. | The issuer-signed scalar feed's ECDSA verification path requires a signature of exactly 65 bytes (32 bytes `r`, 32 bytes `s`, 1 byte `v`). A shorter or longer byte string cannot be decoded. | Provide a standard 65-byte ECDSA signature. If using a smart-wallet signer, use the EIP-1271 envelope path instead. | error | No | `InvalidSignatureLength()` |
| DALP-4197 | Recovered signer does not hold a CLAIM key on the issuer identity. | The issuer-signed scalar feed validates that the address that signed the payload holds key purpose 3 (CLAIM) on the issuer's on-chain identity contract. The recovered address does not satisfy this check. | Sign the payload with a key that is registered on the issuer identity contract with CLAIM purpose (purpose 3). Contact the issuer to add the signing key if needed. | error | No | `InvalidSigner()` |
| DALP-4198 | Stake amount is zero or exceeds the maximum allowed. | The ERC-4337 stake manager rejects a stake deposit when the resulting total stake is zero or exceeds `type(uint112).max`. Either no value was sent, or the cumulative stake would overflow the storage slot. | Send a non-zero ETH amount with the stake call. If the account already has a large existing stake, ensure the sum of the existing stake and the new deposit stays within the `uint112` maximum. | error | No | `InvalidStake(uint256,uint256)` |
| DALP-4199 | Yield schedule start date is not valid. | A fixed treasury schedule must start after the current block time. An interest schedule must start at or before it, and an ACT/360 interest schedule must start at UTC midnight. | Set a future start date for a fixed treasury schedule. For an interest schedule, set a start date at or before now. For ACT/360, set it at UTC midnight. | error | No | `InvalidStartDate()` |

The previous page is [DALP-4100 to DALP-4149](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-4100-4149). The next page is [DALP-4200 to DALP-4249](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-4200-4249).
