# DALP-4500 to DALP-4999

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

This page lists the 34 errors in the contract error reference with a code from DALP-4500 to DALP-4999. Match the error's `id`, or its `dalpCode` on a contract error or a failed deployment step, for example `DALP-4500`, 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-4500 | Delegate cannot vouch for callers. | The address was registered as a vouching delegate, but it is not a contract that answers which callers it vouches for. | Register a contract that answers the supply delegate question, such as a vouching add-on factory, or register the address as a plain delegate. | error | No | `NotASupplyAuthority(address)` |
| DALP-4501 | Too many supply delegates. | The token already has the largest number of supply delegates it accepts. | Remove a delegate the token no longer needs, then add the new one. | error | No | `TooManyDelegates(uint256)` |
| DALP-4502 | Mint cap reached. | The mint would take the supply delegate's outstanding units, its mints minus its own burns, past the cap governance set. | Mint a smaller amount, burn units first, or ask governance to raise the delegate's cap. | error | No | `MintCapExceeded(address,uint256,uint256,uint256)` |
| DALP-4503 | Settlement not executed. | A settled delivery can only be claimed after the XvP settlement executed, and this settlement has not executed yet. Before execution, a parked amount is a refund of your own escrow. | Claim the parked amount as a refund, or wait until the settlement executes and claim the settled delivery then. | error | No | `SettlementNotExecuted()` |
| DALP-4504 | Applications are not enabled for this sale. | The token sale only takes applications, allocation and settlement when the sale admin switched on application mode while the sale was in setup. This sale did not. | Use the regular purchase flow for this sale. To allocate an oversubscribed offering, create a new sale and enable application mode before activating it. | error | No | `ApplicationModeNotEnabled()` |
| DALP-4505 | This sale takes applications, not purchases. | The sale is in application mode. Investors escrow payment with an application, and the issuer allocates the offering and settles it after the sale closes. A direct purchase would skip the allocation. | Submit an application with the payment currency and amount instead of buying tokens. | error | No | `ApplicationModeActive()` |
| DALP-4506 | Application mode is already on. | Application mode is set once per sale, and its allocation basis cannot change afterwards. | Keep the existing basis. Read it from the sale's application book. | error | No | `ApplicationModeAlreadySet()` |
| DALP-4507 | Application mode cannot be combined with a presale. | A presale prices and limits purchases per address before the public sale. Applications are allocated together after the sale closes, so the two cannot share a sale. | Remove the presale, or run the presale and the application round as two separate sales. | error | No | `ApplicationModeExcludesPresale()` |
| DALP-4508 | Application mode cannot be combined with vesting. | Settlement credits every allocation to the investors in one run. A vesting schedule would release the shares later, so the sale refuses it. | Remove the vesting schedule from the sale. Apply vesting to the shares after settlement if the offering needs it. | error | No | `ApplicationModeExcludesVesting()` |
| DALP-4509 | The applications changed after they were approved. | The allocation runs against the exact set of applications the approver reviewed. A new application arrived after that, so the book hash is now `{{currentBookHash}}`. | Review the new set of applications and the allocation preview, then approve the allocation again. | error | No | `BookChanged(bytes32)` |
| DALP-4510 | The allocation is not complete. | The sale can only be finalized and settled after every application has been allocated. | Continue the allocation until it reports complete, then retry. | error | No | `AllocationIncomplete()` |
| DALP-4511 | The allocation is already complete. | Every application of this sale has been allocated, so there is nothing left to allocate. | Finalize the sale and run the settlement. | error | No | `AllocationAlreadyComplete()` |
| DALP-4512 | The allocation has already started. | Escrow can be reclaimed only while the allocation has not started. Once it starts, the settlement returns every refund. | Wait for the settlement. Each applicant receives their shares and refund in that run. | error | No | `AllocationAlreadyStarted()` |
| DALP-4513 | The allocation window has closed. | The allocation has to start within 30 days after the sale ends. That period has passed, so applicants can reclaim their escrow. | Ask each applicant to reclaim their escrow, then open a new sale if the offering should continue. | error | No | `AllocationWindowExpired()` |
| DALP-4514 | Escrow cannot be reclaimed yet. | The issuer has 30 days after the sale ends to start the allocation. Applicants can reclaim their escrow only after that period. | Wait until the period ends. If the issuer starts the allocation before then, the settlement refunds the excess payment instead. | error | No | `AllocationGracePeriodActive()` |
| DALP-4515 | The settlement is not complete. | The shares nobody received stay in the sale until every applicant has been settled, so the issuer cannot withdraw them yet. | Continue the settlement until it reports complete, then withdraw the unsold shares. | error | No | `SettlementIncomplete()` |
| DALP-4516 | The settlement is already complete. | Every applicant has been settled: shares delivered, refunds paid and the retained payment sent to the recipient. | Withdraw the unsold shares if any remain. | error | No | `SettlementAlreadyComplete()` |
| DALP-4517 | Not enough gas left to pay a refund. | The payment currency refused a refund after it started with less than about 1,050,000 gas, so the refusal may come from the gas limit and not from the currency. The platform sizes a settlement's gas by simulating it, so this most likely means the sale or the currency changed after the settlement was priced. The batch stopped without changing anything. | Start the allocation run again; it needs a second approver's approval again. It continues from the first unsettled applicant and is priced from the current state, so a refund the currency still refuses is recorded as owed. | error | Yes | `RefundCallStarved()` |
| DALP-4518 | This sale cannot mint the shares it issues. | An application-mode sale in this contract version issues its shares when the settlement delivers them, instead of holding the offering in tokens. It can only do that with the supply management role on the sold token, held by the sale's own address, and it does not hold it. | Grant the sale's address the supply management role on the sold token, then activate the sale again. The role shows on the token's permissions page. | error | No | `SaleCannotMint()` |
| DALP-4520 | This greenshoe is not exercised by hand. | Only a discretionary greenshoe is exercised by the sale admin. This sale has an automatic greenshoe, which the allocation decides itself, or no greenshoe at all. | Configure a discretionary greenshoe while the sale is in setup if the sale admin should decide how much of it is used. | error | No | `GreenshoeNotDiscretionary()` |
| DALP-4521 | The greenshoe was already exercised. | A discretionary greenshoe is exercised once, and its amount is part of the book the allocation runs on. | Continue with the allocation. The exercised amount cannot be changed. | error | No | `GreenshoeAlreadyExercised()` |
| DALP-4522 | That greenshoe amount is not available. | The greenshoe adds at most its capacity and at most the demand above the hard cap, in whole tokens. At most `{{available}}` base units can be added now, and the request was zero, larger than that, or not a whole number of tokens. | Exercise a whole number of tokens that does not exceed the available amount. | error | No | `GreenshoeExceedsAvailable(uint256)` |
| DALP-4523 | Too many lock-up categories. | A settlement checks every lock-up category for each applicant, so a sale takes at most eight categories. | Merge categories until there are eight or fewer. | error | No | `TooManyLockupTiers()` |
| DALP-4524 | A lock-up category needs its own claim topic. | Each lock-up category is chosen by a claim topic the investor is verified for. The topic `{{claimTopic}}` is zero or appears in more than one category. | Give every category a distinct, non-zero claim topic. | error | No | `InvalidLockupTopic(uint256)` |
| DALP-4525 | The lock-up is longer than five years. | A lock-up lasts at most five years from the first delivery. The request asked for `{{duration}}` seconds. | Use a lock-up of five years or less. | error | No | `LockupTooLong(uint64)` |
| DALP-4526 | The token has no active lock-up rule. | A sale with lock-ups writes each allocation as a holder lock in the token's lock-up rule. The token has no active lock-up rule, or it was disabled before the sale could lock an allocation. | Install and enable the lock-up rule on the token, then activate or settle the sale again. | error | No | `LockupRuleMissing()` |
| DALP-4527 | This sale cannot lock the shares it issues. | Writing a holder lock in the token's lock-up rule needs the governance role on the token, and the sale does not hold it. | Grant the sale's address the governance role on the sold token, then activate the sale again. The role shows on the token's permissions page. | error | No | `SaleCannotLock()` |
| DALP-4528 | The unlock schedule is invalid. | A schedule holds up to four unlock steps whose shares add up to the whole allocation, each unlocking after the one before it. This schedule breaks one of those rules. | Give every step a positive share, order the steps by their wait from the first delivery, and make the shares add up to 10,000 basis points. | error | No | `InvalidVestingSchedule()` |
| DALP-4529 | The token's lock-up rule cannot store unlock steps. | A sale with more than one unlock step writes each step as a tranche in the token's lock-up rule. The rule installed on the token stores one lock per holder, not tranches. | Install the current lock-up rule on the token, then activate the sale again. A single step that releases the whole allocation works with either rule. | error | No | `LockupTranchesUnsupported()` |
| DALP-4530 | The holder has too many unlock steps. | A holder identity stores at most eight unlock steps on a token, across every allocation that wrote them. This delivery would pass that count with `{{count}}`. | Settle the remaining allocations of this holder in a sale whose schedule adds no more steps, or clear the holder's expired steps on the token first. | error | No | `TooManyHolderTranches(uint256)` |
| DALP-4531 | This wallet was recovered, so it can no longer claim. | Identity recovery replaced this wallet with another one. Refunds, yield and interest that belong to the investor are paid to the replacement wallet, not to the lost key. | Claim with the replacement wallet. If the replacement wallet cannot claim for itself, anyone can ask for the payout to the replacement wallet through the claim for a recovered wallet. | error | No | `ClaimantWalletLost(address)` |
| DALP-4532 | This wallet has no replacement wallet to pay. | A claim for a recovered wallet pays the wallet that identity recovery replaced it with. This wallet is not marked lost, or its recovery chain does not end in a usable wallet, so there is nowhere to send the payout. | Check that identity recovery completed for this wallet. A wallet that is not lost claims for itself. | error | No | `ClaimForNotRecoverable(address)` |
| DALP-4533 | A corporate action is holding this contract's records. | A corporate action on this token froze the contract's records from its record date until the step that re-sizes them lands. The contract refuses deposits, purchases, claims, withdrawals, refunds and releases of the token in that window, so its records stay what the action counted. | Wait until the corporate action finishes, then send the request again. An action that ended while a contract still holds its freeze stays in the status Releasing custody: ask a token manager with the supply management role to choose Release frozen custody on the action's page. The freeze lifts once that release lands, and the request then goes through. | error | No | `CorporateActionInProgress(address,bytes32)` |
| DALP-4539 | Custody gateway holds not yet moved to the recovered wallet. | A custody gateway can rebind to a recovered wallet only once the receipts it holds for custody sit in that wallet. The issuer's forced token recovery moves those receipts and their holds; until it has, the lost wallet still carries them. | Finish the issuer's token recovery for the lost wallet, then execute the identity recovery again. The workflow looks the gateway up again and rebinds it. | error | No | `CustodyGatewayHoldNotMovable(address,address,address)` |

The previous page is [DALP-4400 to DALP-4499](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-4400-4499). The next page is [DALP-9000 to DALP-9099](https://docs.settlemint.com/docs/api-reference/errors/error-code-reference/dalp-9000-9099).
