# DALP-4100 to DALP-4149

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

This page lists the 50 errors in the contract error reference with a code from DALP-4100 to DALP-4149. Match the error's `id`, or its `dalpCode` on a contract error or a failed deployment step, for example `DALP-4100`, 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-4100 | Governor disabled deposit. | The governor refuses ETH, ERC-721 and ERC-1155 transfers because its timelock holds the treasury. | Send the funds or tokens to the governance timelock instead. | error | No | `GovernorDisabledDeposit()` |
| DALP-4101 | Governor insufficient proposer votes. | The proposer's current voting weight is below the proposal threshold required by the Governor. The contract compares the proposer's votes at the current block against the configured threshold and blocks proposals that do not meet it. | The error returns the proposer address, current votes, and the required threshold. Increase the proposer's delegated voting weight to at least the threshold value before submitting a proposal. | error | No | `GovernorInsufficientProposerVotes(address,uint256,uint256)` |
| DALP-4102 | Proposal arrays have mismatched or zero length. | The `propose` call requires the `targets`, `values`, and `calldatas` arrays to be the same length and to contain at least one entry. The contract received arrays whose lengths differ or all three are empty. | Ensure `targets`, `values`, and `calldatas` each contain the same number of entries and that the proposal includes at least one call before submitting. | error | No | `GovernorInvalidProposalLength(uint256,uint256,uint256)` |
| DALP-4103 | Vote signature does not match the stated voter. | The signature supplied to `castVoteBySig` or `castVoteWithReasonAndParamsBySig` did not recover to the voter address. The contract verifies the EIP-712 signature before recording the vote. | Re-sign the ballot with the voter's key over `proposalId`, `support`, `voter` and the voter's current `nonces(voter)` value. For the extended call, sign `reason` and `params` too. | error | No | `GovernorInvalidSignature(address)` |
| DALP-4104 | Vote params have the wrong length for the chosen vote type. | When casting a full vote (`support` 0, 1, or 2), the `params` field must be empty. When casting a fractional vote (`support` 255), `params` must be exactly 48 bytes encoding three packed `uint128` values (againstVotes, forVotes, abstainVotes). | Pass an empty `params` for a full vote, or pass exactly 48 bytes encoded as `abi.encodePacked(uint128, uint128, uint128)` for a fractional vote. | error | No | `GovernorInvalidVoteParams()` |
| DALP-4105 | Vote support value is outside the accepted range. | In a For/Against/Abstain proposal, `support` accepts only 0 (Against), 1 (For) or 2 (Abstain). | Set `support` to 0, 1 or 2. | error | No | `GovernorInvalidVoteType()` |
| DALP-4106 | Voting period must be at least one block. | The Governor contract requires the voting period to be a positive value. A voting period of zero would open and immediately close every proposal, so the contract rejects it. | Set the voting period to a value greater than zero when calling `setVotingPeriod` or during Governor initialization. | error | No | `GovernorInvalidVotingPeriod(uint256)` |
| DALP-4107 | Governor nonexistent proposal. | No proposal exists with the given proposalId. The Governor derives proposal IDs deterministically from the proposal parameters; an ID that was never created returns no record. | Verify the proposalId by recomputing it from the original proposal parameters (targets, values, calldatas, description hash) or by reading it from the ProposalCreated event the contract emitted when you submitted the proposal. | error | No | `GovernorNonexistentProposal(uint256)` |
| DALP-4108 | Governor not queued proposal. | The proposal is not in the Queued state. Executing a proposal through a timelock-backed Governor requires you to queue the proposal first and wait for the timelock delay to elapse. | Check the proposal state. If it is in the Succeeded state, call queue first. If it is already Queued, wait for the timelock delay to pass before calling execute. | error | No | `GovernorNotQueuedProposal(uint256)` |
| DALP-4109 | Governor only executor. | An address other than the Governor's designated executor (typically the timelock contract) sent this call. Governor operations like relay require the executor itself to send the message. | Route this call through the governance execution path rather than sending it directly. Submit the operation as a governance proposal and let the timelock execute it. | error | No | `GovernorOnlyExecutor(address)` |
| DALP-4110 | Governor queue unavailable on this contract. | You called queue on a Governor that has no timelock or queue module. This Governor executes proposals directly without a queuing phase. | Do not call queue on this Governor. After a proposal reaches the Succeeded state, call execute directly. | error | No | `GovernorQueueNotImplemented()` |
| DALP-4111 | Governor restricted proposer. | The proposal description ends with `#proposer=<address>`, which reserves the proposal for that address. A different address submitted it. | Submit from the address named in the description, or drop the `#proposer=` suffix. | error | No | `GovernorRestrictedProposer(address)` |
| DALP-4112 | Governor unable to cancel. | A proposal can be cancelled only while it is Pending or Queued. Only an account that holds the token's governance role can cancel it. | Cancel from an account with the token's governance role, before voting starts or while the proposal waits in the timelock. | error | No | `GovernorUnableToCancel(uint256,address)` |
| DALP-4113 | Governor unexpected proposal state. | The proposal is in a lifecycle state that does not permit the requested operation. For example, queuing requires Succeeded, executing requires Succeeded or Queued, and voting requires Active. The error carries the current state and a bitmask of acceptable states. | Read the proposal state before performing governance operations. The error returns the current state and the expected states bitmask so you can determine what step to take next in the proposal lifecycle. | error | No | `GovernorUnexpectedProposalState(uint256,uint8,bytes32)` |
| DALP-4114 | Hard cap exceeded. | The requested token purchase would push the total amount sold past the sale's hard cap. The contract tracks cumulative tokens sold and rejects any purchase that would exceed the configured maximum supply for this sale. | Reduce the purchase amount so that the total sold does not exceed the hard cap. You can query totalSold and hardCap on the token sale contract to determine the remaining capacity. | error | No | `HardCapExceeded()` |
| DALP-4115 | Hard cap must be positive. | You submitted a token sale creation request with a hard cap of zero. The factory requires a positive hard cap to define the maximum number of tokens available for sale. | Provide a hardCap value greater than zero when calling createTokenSale. | error | No | `HardCapMustBePositive()` |
| DALP-4116 | Hashlock reveal not required. | You called revealSecret on an XvP settlement that has no external cross-chain flows. Hashlock secret revelation applies only to settlements that involve external flows; settlements with only local flows do not use a hashlock. | Check the settlement's hasExternalFlows flag before calling revealSecret. For settlements with only local flows, proceed directly to execution without revealing a secret. | error | No | `HashlockRevealNotRequired()` |
| DALP-4117 | History not supported. | The price feed runs in LATEST_ONLY mode, which retains only the most recent observation. The Chainlink-compatible getRoundData function requires historical round storage, which this feed does not maintain. | Use latestRoundData to retrieve the most recent value from this feed, or use the indexed API for past accepted observations. For historical reads directly from a contract, register a separately deployed compatible feed that retains history. | error | No | `HistoryNotSupported()` |
| DALP-4118 | Identities required. | The transfer-approval compliance module checks that both the sender and the recipient have a registered on-chain identity. When either party's identity address resolves to zero, the contract cannot look up a valid approval record and blocks the transfer. | Ensure both the sending and receiving wallet addresses have an on-chain identity registered in the identity registry before submitting this transfer. | error | No | `IdentitiesRequired()` |
| DALP-4119 | Implementation not set in factory. | The proxy contract queries the factory for its logic implementation address at deployment time. The factory holds no implementation address yet, so the returned address is zero and the proxy cannot initialize. | Set a valid implementation address on the factory before deploying or upgrading this proxy. | error | No | `ImplementationNotSetInFactory()` |
| DALP-4120 | Index out of bounds. | The index you supplied is greater than or equal to the total number of deployed systems recorded in the factory. The contract cannot return a system at a position that does not exist. | Call getSystemCount() first to check the valid range, then supply an index between 0 and getSystemCount() minus 1. | error | No | `IndexOutOfBounds(uint256,uint256)` |
| DALP-4121 | Initial key already setup. | The ERC-734 identity contract already has a management key set during initialization. The contract rejects a second initialization call to prevent overwriting the existing key set. | The identity contract is already fully initialized. No further key setup call is needed. To change keys, use the key-management functions on the live identity instead. | error | No | `InitialKeyAlreadySetup()` |
| DALP-4122 | Initialization deadline passed. | The vesting airdrop contract requires claimants to initialize their vesting schedule before a fixed deadline. The current block timestamp is past that deadline, so new vesting initializations are no longer accepted. | Contact the token issuer to ask whether a new airdrop round will open. | error | No | `InitializationDeadlinePassed()` |
| DALP-4123 | Initialization with zero address. | You supplied a zero address as the implementation for this proxy to delegate to. A proxy cannot forward calls to the zero address, so initialization is rejected. | Supply a valid, non-zero implementation contract address when deploying or initializing this proxy. | error | No | `InitializationWithZeroAddress()` |
| DALP-4124 | This amount is more than the interest accrued. | The requested amount exceeds the interest this holder has accrued and has not claimed or converted. | Reduce the amount to at most the accrued interest, or wait for more interest to accrue, then retry. | error | No | `InsufficientAccruedInterest(uint256,uint256)` |
| DALP-4125 | This withdrawal is more than the deposit held in the EntryPoint. | The ERC-4337 EntryPoint rejected a deposit withdrawal because the requested withdrawal amount exceeds the account's or paymaster's current deposit balance held in the EntryPoint. | Reduce the withdrawal amount to at most the current deposited balance shown in the EntryPoint for this account or paymaster. | error | No | `InsufficientDeposit(uint256,uint256)` |
| DALP-4126 | Conversion amount exceeds the holder's token balance. | The conversion requested a principal amount that exceeds the holder's current token balance. The contract validates the available balance before executing any conversion. | Reduce the principal conversion amount to at most the holder's current token balance, or pass zero to convert the full available balance. | error | No | `InsufficientPrincipal(uint256,uint256)` |
| DALP-4127 | This transaction does not have enough signer confirmations. | The DALPVault multisig transaction requires a minimum number of valid signer confirmations before execution. The number of signatures provided is below that required threshold. | Collect the remaining required signatures from authorized vault signers and resubmit the transaction. | error | No | `InsufficientSignatures(uint256,uint256)` |
| DALP-4128 | The signers' combined weight is below the required threshold. | The DALPVault multisig uses weighted signatures and requires the combined weight of all provided signers to meet or exceed a configured threshold. The total weight of the submitted signatures is below that threshold. | Add signatures from higher-weight signers or collect more signer confirmations until the combined weight meets the required threshold. | error | No | `InsufficientWeight(uint256,uint256)` |
| DALP-4129 | Interest provider missing. | The conversion feature targets accrued interest, and it needs exactly one interest provider. The configuration names none, and the token has none attached or more than one. | Attach one interest provider to the token, or set it explicitly in the conversion configuration. | error | No | `InterestProviderMissing()` |
| DALP-4130 | Interface registration limit reached. | Each SMART token extension can register a fixed maximum number of ERC-165 interface identifiers. The contract has filled all available slots in the interface registry, so it cannot accept another interface. | Contact support with the token address and the `requestId` from the error. | error | No | `InterfaceRegistrationLimitReached()` |
| DALP-4131 | Internal function. | The ERC-4337 EntryPoint rejected a direct external call to a function that only the EntryPoint itself may call as part of its internal user-operation processing loop. | This function is part of the EntryPoint's internal execution flow. Submit the operation through the standard ERC-4337 user-operation submission path instead of calling this function directly. | error | No | `InternalFunction()` |
| DALP-4132 | Interoperable address empty reference and address. | When formatting an ERC-7930 interoperable address, both the chain reference and the address components were empty. At least one of the two components must contain data for the encoding to be valid. | Provide either a non-empty chain reference, a non-empty address component, or both when constructing the interoperable address. | error | No | `InteroperableAddressEmptyReferenceAndAddress()` |
| DALP-4133 | Interoperable address parsing error. | The byte sequence supplied does not conform to the ERC-7930 version-1 interoperable address encoding. The parser could not extract a valid version header, chain type, chain reference, or address from the input. | Verify that a conforming ERC-7930 v1 encoder produced the interoperable address bytes and that no bytes were truncated or corrupted before submitting. | error | No | `InteroperableAddressParsingError(bytes)` |
| DALP-4134 | Access manager must implement the required interface. | The contract initialization checks that the access manager address supports the `IDALPSystemAccessManager` interface via ERC-165. The provided address failed that check. | Pass the address of a deployed `IDALPSystemAccessManager`-compliant contract to the initializer. | error | No | `InvalidAccessManager()` |
| DALP-4135 | Nonce does not match the account's current nonce. | The contract uses OpenZeppelin's `Nonces` utility to prevent replay attacks. The nonce supplied with the signed message does not equal the account's stored current nonce. | Fetch the account's current nonce from the contract before signing, and include that value in the message. | error | No | `InvalidAccountNonce(address,uint256)` |
| DALP-4136 | Addon implementation address is zero. | The system addon registry requires a non-zero implementation address when registering a new addon. The `implementation_` argument passed to `registerSystemAddon` was the zero address. | Deploy the addon implementation contract and pass its address to `registerSystemAddon`. | error | No | `InvalidAddonAddress()` |
| DALP-4137 | Address is zero or not usable. | An address argument is the zero address, or the contract it names lacks the interface the call needs. | Pass a non-zero address of the right contract type. | error | No | `InvalidAddress()` |
| DALP-4138 | Withdrawal amount is zero. | The fixed yield schedule contract requires a non-zero denomination asset amount when withdrawing. A withdrawal of zero tokens is not a valid operation. | Specify a non-zero amount of denomination asset tokens to withdraw. | error | No | `InvalidAmount()` |
| DALP-4139 | Claim authorization contract address is zero or missing the required interface. | The contract validates each authorization contract by calling `supportsInterface` for `IClaimAuthorizer`. The provided address is either the zero address or a contract that did not return true for that interface check. | Supply the address of a deployed contract that correctly implements `IClaimAuthorizer` and passes ERC-165 interface detection. | error | No | `InvalidAuthorizationContract(address)` |
| DALP-4140 | Yield basis-per-unit is zero. | The fixed treasury yield schedule requires a non-zero `basisPerUnit` value. A value of zero produces no yield and is treated as a configuration error. | Set `basisPerUnit` to a positive integer equal to the yield amount per token unit before submitting the schedule. | error | No | `InvalidBasisPerUnit()` |
| DALP-4141 | Fee beneficiary address is zero. | The EIP-4337 EntryPoint requires the beneficiary address passed to `handleOps` to be a non-zero address. A zero address cannot receive the gas-cost refund. | Pass a valid, non-zero address as the `beneficiary` argument when calling `handleOps`. | error | No | `InvalidBeneficiary(address)` |
| DALP-4142 | Token supply cap is zero or below the current total supply. | The contract enforces a cap that must be greater than zero and, when updated, must be at least as large as the current total supply. A cap of zero would make minting impossible, and a cap below current supply would be inconsistent. | Provide a cap value that is greater than zero and greater than or equal to the current token total supply. | error | No | `InvalidCap(uint256)` |
| DALP-4143 | Contract address is zero or not supported. | The call needs a non-zero contract address: a subject for the trusted issuers meta-registry, an owning contract that implements `IContractWithIdentity` for a contract identity, or each extra management key of a contract identity. | Provide the actual on-chain address of the subject whose registry entry is being configured. | error | No | `InvalidContractAddress()` |
| DALP-4144 | Conversion window end is at or before the start, or already past. | The contract checks two conditions: the window end must be after the window start, and the window end minus one must be at or after the current block timestamp. The provided window fails at least one of these checks. | Set the window start to a time before the window end, and set the end to a future timestamp (at least one second ahead of the current block time). | error | No | `InvalidConversionWindow(uint256,uint256)` |
| DALP-4145 | Token decimal precision exceeds the maximum of 18. | The SMART token core enforces a maximum of 18 decimal places to remain compatible with WAD-based fixed-point arithmetic. A decimals value above 18 is out of range. | Set the `decimals` parameter to a value between 0 and 18 inclusive. | error | No | `InvalidDecimals(uint8)` |
| DALP-4146 | Denomination asset is not valid. | The denomination asset is the zero address or the token itself, or, for a bond, a contract that does not answer `totalSupply()`. Bonds, maturity redemption, conversion and the yield features check it at setup. A fixed yield schedule also raises it when a withdrawal names the zero address as recipient. | Supply the address of a deployed ERC-20 that is not this token. For a schedule withdrawal, name a non-zero recipient. | error | No | `InvalidDenominationAsset()` |
| DALP-4147 | Feeds directory address is zero. | The scalar feed aggregator adapter stores the directory address as an immutable at construction time. A zero address cannot be used as a feeds directory. | Pass the address of the deployed `IFeedsDirectory` contract when constructing the adapter. | error | No | `InvalidDirectory()` |
| DALP-4148 | Directory address is zero. | Several contracts (the system factory, the global trusted issuers registry, and the topic scheme registry) require a non-zero directory address during initialization. Without a valid directory the contract cannot resolve implementation addresses. | Provide the address of the deployed `IDALPDirectory` contract during construction or initialization. | error | No | `InvalidDirectoryAddress()` |
| DALP-4149 | Yield end date is not after the start date. | The fixed treasury yield schedule requires the end date to be strictly greater than the start date. Providing an end date equal to or before the start date produces a zero-length or reversed schedule. | Set the end date to a timestamp that is at least one second after the start date. | error | No | `InvalidEndDate()` |

The previous page is [DALP-4050 to DALP-4099](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-4050-4099). The next page is [DALP-4150 to DALP-4199](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-4150-4199).
