| DALP-4001 | Authority address has no deployed contract code. | The setAuthority function checks that the new authority address contains deployed contract bytecode. The address supplied has no contract code, so the contract rejected the update. | Supply an address where an authority contract is already deployed. Passing a wallet address or an address with no contract at it will always revert. | error | No | AccessManagedInvalidAuthority(address) |
| DALP-4002 | Access managed required delay. | The OpenZeppelin AccessManager enforces a mandatory delay before certain restricted calls can execute. The caller ({{caller}}) triggered a function that requires waiting {{delay}} seconds after scheduling before it may proceed. | Schedule the operation first, wait for the required delay of {{delay}} seconds, then execute it. Use the AccessManager's schedule function and check the operation's execution window before calling. | error | No | AccessManagedRequiredDelay(address,uint32) |
| DALP-4003 | Access manager already deployed. | The factory uses CREATE2 to deploy access managers at deterministic addresses derived from the token's name and symbol alongside the caller address. The predicted address for this combination is already registered as a factory-deployed access manager, so the contract cannot deploy a second one to the same address. | The address is derived from the caller address and the token's name and symbol (plus decimal precision), so each unique combination maps to one access manager. Change the token name or symbol to deploy a new access manager, or retrieve the existing address via predictAccessManagerAddress. | error | No | AccessManagerAlreadyDeployed(address) |
| DALP-4004 | Access manager already scheduled. | The OpenZeppelin AccessManager's schedule function rejected this call because an operation with the same id is already scheduled and its scheduled timepoint has not yet expired. The operation id is derived from the caller and target pair together with the calldata. The contract blocks duplicate scheduling of the same pending operation. | Wait for the existing scheduled operation to either execute or expire before scheduling it again. You can check the current schedule timepoint by calling getSchedule with the operation id, or cancel the existing schedule first. | error | No | AccessManagerAlreadyScheduled(bytes32) |
| DALP-4005 | Access manager bad confirmation. | The OpenZeppelin AccessManager's renounceRole function requires the caller to pass their own address as the callerConfirmation argument. The address supplied does not match the address of the account that sent the transaction. | Call renounceRole again and pass your own wallet address as the callerConfirmation argument. The value must exactly match the address that signs and sends the transaction. | error | No | AccessManagerBadConfirmation() |
| DALP-4006 | Scheduled operation deadline expired. | You submitted the scheduled operation ({{operationId}}) to the AccessManager after its execution window had already closed. Scheduled operations must execute within the allowed time window. | Re-schedule the operation to obtain a fresh execution window, then execute it before the window expires. | error | No | AccessManagerExpired(bytes32) |
| DALP-4007 | AccessManager deployed with a zero initial admin address. | The AccessManager constructor requires a non-zero address for the initial admin. The address supplied was the zero address (0x000...000), so the contract cannot grant the ADMIN_ROLE to any account. | Provide a valid, non-zero wallet or contract address as the initial admin when deploying the AccessManager. The address must be a real account that will hold the ADMIN_ROLE. | error | No | AccessManagerInvalidInitialAdmin(address) |
| DALP-4008 | Access manager locked role. | Role {{roleId}} is a locked administrative role in the AccessManager. The AccessManager protects this role from configuration changes. | Choose a different role ID that the AccessManager allows to be modified, or contact the system administrator if you believe this restriction needs to change at the governance level. | error | No | AccessManagerLockedRole(uint64) |
| DALP-4009 | Access manager not configured. | The token sale contract requires an AccessManager on the subject token before role checks can run. The token's access manager address is zero, meaning no one has set an access manager for it. | Ensure the subject token has an access manager deployed and configured before creating or interacting with a token sale for that token. | error | No | AccessManagerNotConfigured() |
| DALP-4010 | Access manager not ready. | The scheduled operation ({{operationId}}) exists in the AccessManager, but its delay period has not yet elapsed. The AccessManager blocks execution until the scheduled time arrives. | Wait until the scheduled execution window opens for operation {{operationId}}, then retry. Check the AccessManager for the exact scheduled timestamp. | error | No | AccessManagerNotReady(bytes32) |
| DALP-4011 | Access manager not scheduled. | The operation ({{operationId}}) has not been scheduled in the AccessManager. Executing or cancelling a delayed operation requires scheduling it first. | Call schedule on the AccessManager for this operation before attempting to execute or cancel it. | error | No | AccessManagerNotScheduled(bytes32) |
| DALP-4012 | Access manager unauthorized account. | The account ({{msgsender}}) does not hold role {{roleId}} in the AccessManager and is therefore not permitted to call the restricted function. | Request that an AccessManager admin grant role {{roleId}} to your address, or use an address that already holds the required role. | error | No | AccessManagerUnauthorizedAccount(address,uint64) |
| DALP-4013 | Access manager unauthorized call. | The caller ({{caller}}) attempted to call a function on target contract ({{target}}) with selector {{selector}}, but the AccessManager has no permission granting access to that call. | Ensure the AccessManager has a permission configured that allows your address (or role) to call the target function. Contact the system administrator to grant the necessary permission. | error | No | AccessManagerUnauthorizedCall(address,address,bytes4) |
| DALP-4014 | Access manager unauthorized cancel. | The OpenZeppelin AccessManager contract received a cancel request from an account that is not permitted to cancel this scheduled operation. Only the original caller or an account with the appropriate admin role may cancel a pending operation. | Retry the cancel from the account that originally scheduled the operation, or from an account holding the admin role that governs the target function. | error | No | AccessManagerUnauthorizedCancel(address,address,address,bytes4) |
| DALP-4015 | Access manager unauthorized consume. | The OpenZeppelin AccessManager blocked an attempt to consume a scheduled operation because the consuming target does not match the target the operation recorded at scheduling time. | Ensure the contract consuming the scheduled operation is the same target address that the operation recorded when scheduled. | error | No | AccessManagerUnauthorizedConsume(address) |
| DALP-4016 | Account implementation not set. | The directory does not have an account implementation address registered. The account proxy resolves its logic contract from the directory at call time, and found a zero address for the ACCOUNT key. | Register a valid account implementation address in the directory before deploying or calling through an account proxy. | error | No | AccountImplementationNotSet() |
| DALP-4017 | Account unauthorized. | The call reached the account contract from an address that is neither the configured EntryPoint nor the resolved canonical EntryPoint. The account only accepts UserOperation calls from its bound EntryPoint. | Submit this operation through the EntryPoint that is bound to this account. Direct calls to restricted account functions are not permitted. | error | No | AccountUnauthorized(address) |
| DALP-4018 | Accrual already closed. | Yield accrual for this holder address is already in a closed state. The fixed treasury yield feature records a closed flag per holder and blocks a second close on the same holder. | Check the holder's accrual status before calling closeAccrual. Nothing further is required if accrual is already closed. | error | No | AccrualAlreadyClosed(address) |
| DALP-4019 | Addon registry implementation not set. | The system cannot create or operate an addon registry because no logic contract address has been set for it. The system checked the addon registry implementation slot and found a zero address. | Configure a non-zero addon registry implementation address in the system before attempting to bootstrap or use the addon registry. | error | No | AddonRegistryImplementationNotSet() |
| DALP-4020 | Address already deployed. | You requested a CREATE2 deployment for an address that the factory already recorded as a deployed system addon. Each system addon address can only be deployed once. | Verify that the salt and constructor arguments you are supplying have not already produced a deployed system addon. Use a different salt to deploy a distinct instance. | error | No | AddressAlreadyDeployed(address) |
| DALP-4021 | Address already on bypass list. | The address you are adding to the compliance bypass list is already present on that list. The contract enforces uniqueness and rejects duplicate entries. | Check whether the address is already on the bypass list before calling addToBypassList. Nothing further is required if the address is already present. | error | No | AddressAlreadyOnBypassList(address) |
| DALP-4022 | The requested resource could not be found. | The trusted issuer address you are trying to remove was not found in the registry list. The contract scans the list and reverts when no matching entry exists. | Confirm that the trusted issuer registry currently holds this address before you attempt to remove it. | error | No | AddressNotFoundInList(address) |
| DALP-4023 | Address not on bypass list. | The address you are trying to remove from the compliance bypass list is not on that list. The contract requires the address to be present; you cannot remove an address that does not appear on the list. | Verify the address is on the bypass list before calling removeFromBypassList. | error | No | AddressNotOnBypassList(address) |
| DALP-4024 | Already archived. | The registry has already placed the addon or factory registration under this key into the archived state. The registry blocks a second archive call on an entry it already considers archived. | Confirm the current state of the registration before calling archive. No further step is required if the entry already carries the archived state. | error | No | AlreadyArchived(bytes32) |
| DALP-4025 | Already distributed. | The push airdrop contract already recorded a non-zero claimed amount for this index, which means the contract already distributed tokens for it. The contract blocks a second distribution for the same index. | Each airdrop index supports one distribution. Verify the contract has not already processed this index before you submit the distribution request. | error | No | AlreadyDistributed() |
| DALP-4026 | Already initialized. | The contract or feature already completed initialization. This guard prevents a second initialization call from overwriting the configured state. | The contract supports one initialization per deployment. Check whether the contract already ran initialization before calling the initialize function. | error | No | AlreadyInitialized() |
| DALP-4027 | Already matured. | The contract already moved this token into the matured state. Operations that require a pre-maturity state, such as setting the maturity date or triggering maturity a second time, are blocked once the contract sets the matured flag. | Check the token's maturity status before submitting this request. You cannot change maturity-related configuration after the token reaches the matured state. | error | No | AlreadyMatured() |
| DALP-4028 | Key already registered. | The directory already has an entry registered under this key. Token types, compliance modules, and addon types each enforce unique registration keys. | Use a unique registration key. Retrieve the existing entry if you need to reference the already-registered resource. | error | No | AlreadyRegistered(bytes32) |
| DALP-4029 | Ambiguous interest provider. | During conversion, the contract resolved {{providerCount}} interest providers and could not determine which one to use. Configure the conversion feature with an explicit interest provider so that resolution selects exactly one. | Configure the conversion feature with an explicit interest provider so that resolution is unambiguous before triggering conversion. | error | No | AmbiguousInterestProvider(uint256) |
| DALP-4030 | Amount exceeds int256 max. | One of the settlement flow amounts exceeds the maximum value representable as a signed 256-bit integer. The XvP settlement uses signed integers to compute net positions, so all flow amounts must fit within that range. | Reduce the flow amount so that it does not exceed 2^255 - 1 before submitting the settlement. | error | No | AmountExceedsInt256Max() |
| DALP-4031 | And or operation requires two operands. | The identity verification compliance expression contains an AND or OR node that does not have at least two operands on the evaluation stack at that point. The expression has a structural problem at that node. | Correct the expression so that every AND or OR node follows at least two TOPIC or sub-expression nodes. Validate the expression structure before submitting it. | error | No | AndOrOperationRequiresTwoOperands() |
| DALP-4032 | And or operations require two operands. | The identity verification expression passed to IdentityVerificationLib contains an AND or OR operation node that does not have at least two operands on the evaluation stack at that position. | Ensure that at least two TOPIC or sub-expression result nodes appear before each AND or OR node in the expression. Review the expression structure and resubmit. | error | No | AndOrOperationsRequireTwoOperands() |
| DALP-4033 | Approval already exists. | An active, unexpired approval for this exact token, sender identity, recipient identity, and amount already exists; a different approver created it. The contract prevents duplicate approvals from separate approvers for the same transfer parameters. | Check for an existing active approval for these transfer parameters. Either use the existing approval or wait for it to expire before creating a new one from a different approver. | error | No | ApprovalAlreadyExists() |
| DALP-4034 | Approval already used. | A previous transfer already consumed the transfer approval record for this sender-to-recipient pair. Each approval is single-use: once a transfer succeeds, the contract records the approval as used and blocks any further transfer against it. | Request a new transfer approval for this sender-to-recipient pair and token amount, then resubmit the transfer. | error | No | ApprovalAlreadyUsed() |
| DALP-4035 | Transfer approval expired. | The transfer approval record for this sender-to-recipient pair has passed its expiry timestamp. The contract enforces that you consume approvals before their deadline. | Request a fresh transfer approval with a suitable expiry, then resubmit the transfer before that expiry passes. | error | No | ApprovalExpired() |
| DALP-4036 | Approval required. | No transfer approval record exists for this sender-to-recipient pair and token amount. The token's transfer compliance module requires an explicit approval to be on-chain before the transfer can proceed. | Create a transfer approval for the sender identity, recipient identity, and exact token amount, then resubmit the transfer. | error | No | ApprovalRequired() |
| DALP-4037 | Archive not registered. | The registration key you supplied does not correspond to any registered system addon. The contract requires the addon to exist in the registry before you can archive it. | Verify the registration key against the addon registry and resubmit with a key that matches an existing registered addon. | error | No | ArchiveNotRegistered(bytes32) |
| DALP-4038 | Array length mismatch. | Two input arrays passed to this call have different lengths. The contract requires all array parameters to be the same length so each element maps to a corresponding element in the other arrays. | Ensure all array arguments have equal length and resubmit the call. | error | No | ArrayLengthMismatch() |
| DALP-4039 | Array length mismatch. | The names array and the signatures array passed to the topic scheme registry have different lengths. The contract requires these two arrays to be the same length so each topic name maps to exactly one signature. | Provide equal-length names and signatures arrays, then resubmit. The arrays must have {{namesLength}} and {{signaturesLength}} elements respectively. | error | No | ArrayLengthMismatch(uint256,uint256) |
| DALP-4040 | Associated contract not set. | The on-chain identity contract has no associated contract address configured. The issueClaimTo path requires a non-zero associated contract address before you can issue claims on behalf of a contract. | Configure the associated contract address on this identity contract before calling claim issuance operations. | error | No | AssociatedContractNotSet() |
| DALP-4041 | Authorization contract already registered. | The claim authorization contract at the supplied address is already present in the registry. The registry accepts each authorization contract only once. | Remove the existing registration for this contract before re-registering it, or supply a different authorization contract address. | error | No | AuthorizationContractAlreadyRegistered(address) |
| DALP-4042 | Authorization contract not registered. | The claim authorization contract at the supplied address is not present in the registry. The contract requires a registration to exist before you can remove it. | Register the authorization contract before attempting to remove it, or verify the correct contract address. | error | No | AuthorizationContractNotRegistered(address) |
| DALP-4043 | Batch size exceeds limit. | The number of entries in the batch exceeds the airdrop contract's maximum of 100. The contract enforces this ceiling to stay within safe gas bounds. | Split the batch into segments of 100 entries or fewer and submit each segment separately. | error | No | BatchSizeExceedsLimit() |
| DALP-4044 | Below min conversion amount. | The conversion amount you submitted is below the token's minimum conversion threshold. The contract checks that the amount you want to convert meets or exceeds the configured minimum before proceeding. | Increase the conversion amount to at least the minimum required. The current minimum is {{minimum}} and your amount was {{amount}}. | error | No | BelowMinConversionAmount(uint256,uint256) |
| DALP-4045 | Buyer not eligible. | The buyer's wallet does not pass the token's compliance check. The token sale delegates eligibility to the token's on-chain compliance module, which returned false for this buyer and amount. | Verify that the buyer's identity has the required compliance claims and that the purchase amount is within the allowed limits for this buyer, then retry. | error | No | BuyerNotEligible() |
| DALP-4046 | Caller not factory. | Only the factory contract that deployed this XvP settlement contract may call this function. The caller's address does not match the stored factory address. | Route this call through the factory contract that created this settlement, or verify you are calling the correct settlement address. | error | No | CallerNotFactory() |
| DALP-4047 | Cancel not allowed. | The settlement cannot be cancelled in its current state. Cancellation is blocked either because the contract has already recorded a revealed HTLC secret, or because the settlement holds external flows with full approval but has not yet collected unanimous cancel votes. | If the secret remains unrevealed and the settlement has external flows, use proposeCancel to submit a cancel vote. Each local participant must vote before the contract cancels the settlement. | error | No | CancelNotAllowed() |
| DALP-4048 | Cancel vote already cast. | This participant has already submitted a cancel vote for this settlement. The contract records one cancel vote per participant and rejects duplicate votes. | Withdraw the existing cancel vote with withdrawCancelProposal before casting a new one, or proceed without re-voting. | error | No | CancelVoteAlreadyCast(address) |
| DALP-4049 | Cancel vote not cast. | The contract holds no cancel vote from this participant for this settlement. Withdrawing a cancel vote requires that you previously submitted one via proposeCancel. | Submit a cancel vote with proposeCancel before attempting to withdraw it. | error | No | CancelVoteNotCast(address) |
| DALP-4050 | Cannot execute to zero address. | The ERC-734 key manager does not permit on-chain executions targeting the zero address. The target address provided in the execution call is the zero address. | Provide a valid non-zero target address for the execution call. | error | No | CannotExecuteToZeroAddress() |
| DALP-4051 | Cannot initialize logic contract. | You called the initialize function directly on a logic (implementation) contract that the constructor already configured. Only proxy instances may be initialized; the logic contract itself must remain uninitialized. | Call initialize only on the proxy contract, not on the implementation contract directly. | error | No | CannotInitializeLogicContract() |
| DALP-4052 | Cannot recover self. | The token recovery request named the same wallet as both the source and the destination. The contract requires the new wallet to differ from the wallet you are recovering. | Provide a different destination wallet address for the recovery. The new wallet and the lost wallet must not be the same address. | error | No | CannotRecoverSelf() |
| DALP-4053 | Cannot remove default validator. | The module at the supplied address is the account factory's currently configured default validator. The contract does not permit you to remove the default validator while it holds that designation. | Assign a different default validator before removing this module, or remove a different module that is not the default validator. | error | No | CannotRemoveDefaultValidator(address) |
| DALP-4054 | Contract already linked. | The contract's identity registry already holds an on-chain identity for the address you supplied. Each contract address can be linked to exactly one identity, and the contract rejects a second registration attempt to prevent duplicate links. | Retrieve the existing identity for the contract address before submitting. If you genuinely need a new identity, an authorized account must first remove the old link. | error | No | ContractAlreadyLinked(address) |
| DALP-4055 | Conversion id already used. | The conversion identifier computed for this request was already recorded as used. The contract enforces replay protection by rejecting any conversion that produces a previously seen identifier. | Do not resubmit an identical conversion request. Each conversion produces a unique identifier based on token, target, holder, trigger, and an incrementing nonce. Submitting a new conversion with fresh parameters will generate a distinct identifier. | error | No | ConversionIdAlreadyUsed(bytes32) |
| DALP-4056 | Conversion minter missing. | The conversion feature could not locate a conversion minter on the target token. A system manager must register a valid minter contract on the target token before the contract can finalize conversions. | Ensure the target token has a conversion minter installed and configured. Check the token's feature set and register the minter if it is absent. | error | No | ConversionMinterMissing() |
| DALP-4057 | Conversion window closed. | The token's configured conversion window has ended. The current block timestamp is past the window's end time, so the contract no longer accepts conversion requests. | Check the token's conversion window end time. The contract processes conversions only within the configured window. Contact the token issuer if you believe the window should be extended. | error | No | ConversionWindowClosed() |
| DALP-4058 | Conversion window not open. | The token's conversion window has not started yet. The current block timestamp is before the window's start time, so the contract rejects conversion requests until the window opens. | Check the token's conversion window start time and resubmit after the window opens. You can read the configured start timestamp from the token's conversion configuration. | error | No | ConversionWindowNotOpen() |
| DALP-4059 | Create2 empty bytecode. | The deployment bytecode supplied to the CREATE2 factory was empty. The factory requires non-empty bytecode to deploy a contract at a deterministic address. | Verify that the bytecode you pass to the deployment call is complete and non-empty. The contract always rejects an empty bytes value at the deployment step. | error | No | Create2EmptyBytecode() |
| DALP-4060 | Feed update deadline expired. | The signed feed update carries a non-zero deadline that has already passed. The contract rejects updates whose deadline falls before the current block timestamp to prevent replay of stale price data. | Request a fresh signed update with a deadline set in the future and resubmit. The issuer must re-sign the update with an updated deadline and nonce. | error | No | DeadlineExpired() |
| DALP-4061 | Decimal mismatch. | The replacement feed reports a different decimal precision than the feed it is replacing. The directory enforces that scalar feed upgrades preserve the same decimal count to prevent precision mismatches in downstream consumers. | Supply a replacement feed whose decimals() return value matches the existing feed's decimals. Verify both feeds report the same value before submitting the replacement. | error | No | DecimalMismatch(uint8,uint8) |
| DALP-4062 | Default validator not set. | The account factory has no default validator configured. The simple account creation path requires a system manager to register a default validator before you can create wallets without an explicit validator parameter. | Ensure the account factory's default validator is set before creating accounts via the default path. Alternatively, supply an explicit validator address in the account creation parameters. | error | No | DefaultValidatorNotSet() |
| DALP-4063 | Delegate and revert. | The ERC-4337 EntryPoint's delegateAndRevert function always reverts with this error after performing a delegatecall. The function is a diagnostic tool that returns the delegatecall result inside the revert data rather than propagating a real failure. | Decode the success and ret fields from the revert data to inspect the outcome of the delegatecall. The delegateAndRevert diagnostic endpoint intentionally produces this error and it does not represent an on-chain state problem. | error | No | DelegateAndRevert(bool,bytes) |
| DALP-4064 | Denomination mismatch. | The denomination asset recorded in the conversion configuration does not match the denomination asset provided by the trigger or interest rate provider. The conversion feature requires all parties to reference the same denomination currency. | Ensure the trigger or provider you are using carries the same denomination asset as the token's conversion configuration. Check the expected denomination address from the error arguments and compare it with your trigger's denomination. | error | No | DenominationMismatch(address,address) |
| DALP-4065 | Deployment address mismatch. | The identity contract deployed by the factory landed at a different address than the one computed by CREATE2 before deployment. This indicates a mismatch in the salt, constructor arguments, or bytecode used for the address prediction. | Verify that the salt and constructor arguments you supplied for the address prediction exactly match those you passed to the deployment call. The contract encountered an internal consistency error; contact support if the problem persists after confirming your inputs are unchanged. | error | No | DeploymentAddressMismatch() |
| DALP-4066 | Deposit withdrawal failed. | The ERC-4337 stake manager attempted to transfer the deposited ETH to the specified withdrawal address, but the ETH transfer call failed. The error arguments carry the revert reason the failed call returned. | Check that the withdrawal address is able to receive ETH (not a contract that rejects ETH or has an insufficient gas stipend). Inspect the revertReason field in the error for more detail, then retry with a valid withdrawal address. | error | No | DepositWithdrawalFailed(address,address,uint256,bytes) |
| DALP-4067 | Directory already set. | The system contract's directory reference already points to a non-zero address. The contract accepts only one directory assignment and rejects any attempt to overwrite it. | The directory is a one-time configuration. If the current directory address is wrong, the system must undergo redeployment or migration rather than an overwrite via setDirectory. | error | No | DirectoryAlreadySet() |
| DALP-4068 | Directory not set. | The system contract requires a non-zero directory address, but no one has set one yet. Directory-dependent operations will revert until a valid directory address is in place. | Set the directory address on the system contract before calling directory-dependent operations. Use setDirectory or initializeWithDirectory with a valid address. | error | No | DirectoryNotSet() |
| DALP-4069 | Duplicate feature. | The list of features passed to the token configuration contains the same feature contract address more than once. Each feature address must appear at most once in an ordered feature set. | Remove duplicate entries from the features list before resubmitting. Each feature address must be unique within the ordered list supplied to the token configuration call. | error | No | DuplicateFeature(address) |
| DALP-4070 | Duplicate module. | The same compliance module address appears more than once in the initial compliance module set supplied to the token. The contract rejects duplicate modules to prevent redundant or conflicting compliance checks. | Remove the duplicate module address from the compliance module list before resubmitting. Each module address must appear only once in the initial module set. | error | No | DuplicateModule(address) |
| DALP-4071 | Duplicate signature. | You supplied a signature from the same address more than once in a multi-signature verification context. The contract rejects duplicate signers to prevent a single key from counting multiple times toward a threshold. | Ensure that each signer address contributes exactly one signature to the set. Remove the duplicate signature before resubmitting. | error | No | DuplicateSignature(address) |
| DALP-4072 | Duplicate type id. | Two features in the list you submitted share the same type identifier. Each feature type may be installed at most once per token; the contract rejects a second feature that reports the same typeId. | Remove one of the conflicting features from the list so that each typeId appears only once. Check each feature's typeId before assembling the feature list. | error | No | DuplicateTypeId(bytes32) |
| DALP-4073 | ETH not accepted. | The proxy contract does not accept direct ETH transfers. Its receive function exists solely to block accidental ETH sends, which the contract would trap with no way to recover. | Do not send ETH directly to this contract address. If you intend to interact with a payable function, call that function explicitly rather than sending a plain ETH transfer. | error | No | ETHNotAccepted() |
| DALP-4074 | ETH transfers not allowed. | The contract proxy does not accept ETH deposits. Its receive() function reverts unconditionally because the proxy has no withdrawal mechanism, and any ETH sent would be permanently locked inside it. | Do not send ETH directly to this contract address. If your request includes a value field, set it to zero before resubmitting. | error | No | ETHTransfersNotAllowed() |
| DALP-4075 | Eip7702 sender not delegate. | The sender address has deployed code, but its bytecode does not start with the EIP-7702 delegation prefix (0xef0100). The EntryPoint requires the sender to be a valid EIP-7702 delegated account when an EIP-7702 initCode marker is present in the UserOperation. | Authorize the sender account as an EIP-7702 delegate before submitting this UserOperation. Verify the EIP-7702 authorization transaction landed on-chain for the sender address. | error | No | Eip7702SenderNotDelegate(address) |
| DALP-4076 | Eip7702 sender without code. | The sender address has no deployed bytecode. When the UserOperation includes an EIP-7702 initCode marker, the EntryPoint requires code at the sender address before reading its delegation target. | Submit the EIP-7702 authorization to establish the sender's delegation on-chain before sending this UserOperation. The sender must have bytecode present at the time the EntryPoint processes the operation. | error | No | Eip7702SenderWithoutCode(address) |
| DALP-4077 | Empty arrays provided. | You submitted a batch topic-scheme registration with no entries. The contract requires at least one name-and-signature pair in the input arrays. | Include at least one topic scheme in the names and signatures arrays before calling batchRegisterTopicSchemes. | error | No | EmptyArraysProvided() |
| DALP-4078 | Empty expression not allowed. | The module configuration received an empty expression array. This module requires at least one claim-topic node to define its verification logic. | Supply a non-empty array of ExpressionNode entries when configuring this compliance module's scope. | error | No | EmptyExpressionNotAllowed() |
| DALP-4079 | Empty id. | A registration call supplied a zero bytes32 identifier. The directory contract requires every token type, compliance module, or addon to carry a non-zero identifier. | Provide a non-zero bytes32 identifier for the item you are registering. | error | No | EmptyId() |
| DALP-4080 | Empty name. | You submitted a topic scheme registration or update with an empty name string. The registry requires every topic scheme to have a non-empty name, because the name computes the topic identifier. | Provide a non-empty string for the name parameter when registering or updating a topic scheme. | error | No | EmptyName() |
| DALP-4081 | Empty signature. | You submitted a topic scheme registration or update with an empty signature string. The registry requires every topic scheme to carry a non-empty ABI signature that describes the claim data type. | Provide a non-empty ABI type signature string for the signature parameter when registering or updating a topic scheme. | error | No | EmptySignature() |
| DALP-4082 | Exceeded cap. | Minting the requested amount would push the token's total supply above its configured cap. The error returns the would-be supply (newSupply) and the maximum allowed supply (cap) so you can calculate a conforming mint amount. | Reduce the mint amount so that the resulting total supply stays at or below the cap value returned in the error. | error | No | ExceededCap(uint256,uint256) |
| DALP-4083 | Execution already performed. | The contract already carried out the execution request identified by executionId. An ERC-734 execution can only run once; the contract marks it as executed on success and rejects any further approval attempts. | Check the execution state before calling approve. If you need to perform the same call again, create a new execution request with execute() to receive a fresh executionId. | error | No | ExecutionAlreadyPerformed(uint256) |
| DALP-4084 | Execution failed. | A low-level call that the contract expected to succeed returned a failure indicator. The calling contract reverts to surface this failure rather than silently continuing. | Check the target contract address and calldata for correctness. Simulate the call to inspect any revert data before retrying. | error | No | ExecutionFailed() |
| DALP-4085 | The requested resource could not be found. | The executionId you supplied to approve() is greater than or equal to the current execution nonce, so no execution request with that identifier exists on this identity contract. | Retrieve the correct executionId from the ExecutionRequested event that execute() emitted when the execution was first created, then retry with that value. | error | No | ExecutionIdDoesNotExist(uint256) |
| DALP-4086 | Expression stack overflow. | The compliance expression evaluator's internal boolean stack overflowed during postfix evaluation. This occurs when the expression pushes more intermediate results than the stack can hold at once, typically from deeply nested or unbalanced operator sequences. | Simplify the compliance expression by reducing the nesting depth of AND, OR, and NOT operators. Ensure the postfix expression is well-formed and balanced so that at no point during evaluation does the stack depth exceed the number of expression nodes. | error | No | ExpressionStackOverflow() |
| DALP-4087 | Expression too complex. | The compliance expression contains more than 32 nodes (MAX_EXPRESSION_NODES). The contract enforces this limit to bound gas consumption during expression evaluation. | Reduce the expression to 32 nodes or fewer. Consider combining related claim topics at the off-chain level before encoding the expression. | error | No | ExpressionTooComplex() |
| DALP-4088 | Failed deployment. | A contract deployment via CREATE2 or a proxied factory call returned address(0), indicating the deployment did not succeed. OpenZeppelin deployment utilities raise this error when the deployed bytecode is empty. | Verify the deployment bytecode is non-empty and that no constructor is reverting. Check that the CREATE2 salt and factory address are correct, then retry. | error | No | FailedDeployment() |
| DALP-4089 | Failed op. | The ERC-4337 EntryPoint rejected the UserOperation at index opIndex during handleOps. The reason string identifies the failing component: AA1x means factory, AA2x means account, AA3x means paymaster. | Read the reason string to identify which component failed (factory, account, or paymaster) and the specific error code. Run simulateValidation to diagnose the rejection before resubmitting. | error | No | FailedOp(uint256,string) |
| DALP-4090 | Failed op with revert. | The ERC-4337 EntryPoint rejected the UserOperation at index opIndex, and the sub-call provided additional revert data in inner. The reason string identifies the failing component (factory, account, or paymaster) as in FailedOp. | Decode the inner bytes to read the nested revert reason from the sub-call. Use simulateValidation to reproduce the failure and identify the root cause before resubmitting. | error | No | FailedOpWithRevert(uint256,string,bytes) |
| DALP-4091 | Failed send to beneficiary. | After processing UserOperations, the EntryPoint attempted to transfer collected fees to the beneficiary address but the ETH transfer failed. The revertData field contains the inner revert from the beneficiary contract. | Ensure the beneficiary address can accept ETH (it must not revert on receive). Inspect the revertData to diagnose why the beneficiary rejected the transfer. | error | No | FailedSendToBeneficiary(address,uint256,bytes) |
| DALP-4092 | Feature already exists. | A feature of this type is already deployed for the given token address. The token feature factory stores one feature per (token, feature-type) pair and rejects a second creation for the same token. | Query the factory to retrieve the existing feature address for this token before creating a new one. Use replaceFeature instead of createFeature if you need to swap the existing feature. | error | No | FeatureAlreadyExists() |
| DALP-4093 | Feature creation failed. | The contract attempted to deploy a new token feature contract using CREATE2, but the deployment returned the zero address. The bytecode did not deploy to the computed address, likely because the same salt was already in use or the bytecode is empty. | Confirm the feature has not already been deployed for this token and salt combination. If the feature does not yet exist, verify the feature factory implementation is correctly configured before retrying. | error | No | FeatureCreationFailed() |
| DALP-4094 | The requested resource could not be found. | The asset factory could not locate a registered feature factory for the requested feature type. The factory hashes the feature type identifier and looks it up in the addon registry, but the registry returned no entry for that address. | Register a feature factory for this feature type in the addon registry before creating an asset that uses it. Use the feature type name exactly as registered (e.g. "historical-balances"). | error | No | FeatureFactoryNotFound(bytes32) |
| DALP-4095 | Future lookup. | The requested timepoint is ahead of the contract's current clock value. Historical balance and supply queries only accept timepoints at or before the current block, so the contract blocks the call to prevent reads of data that does not yet exist. | Pass a timepoint at or before the current block when querying historical balances or total supply. The error returns both the requested timepoint and the current timepoint so you can correct the value. | error | No | FutureLookup(uint256,uint48) |
| DALP-4096 | Global module already added. | The compliance module at the provided address is already registered as a global module. The registry tracks modules by address and rejects duplicate additions to prevent the same rules from applying twice. | Check the current list of global compliance modules before calling addGlobalComplianceModule. If the module is already present, no further registration is needed. | error | No | GlobalModuleAlreadyAdded(address) |
| DALP-4097 | The requested resource could not be found. | The compliance module at the provided address is not currently registered as a global module. The operation (remove or update parameters) requires the module to exist in the global registry. | Verify the module address is correct and confirm it has been added as a global compliance module before attempting to remove or update it. | error | No | GlobalModuleNotFound(address) |
| DALP-4098 | Governor already cast vote. | The voter address has already submitted a vote for this proposal. The Governor contract records each vote by address per proposal and rejects a second vote from the same address. | Each address may vote only once per proposal. Check whether the address has already voted before submitting a castVote call. | error | No | GovernorAlreadyCastVote(address) |
| DALP-4099 | Governor already queued proposal. | The Governor has already queued this proposal in the timelock. A proposal can only be queued once, and the Governor rejects a second queue request for the same proposalId. | Check the proposal state before calling queue. If the proposal is already in the Queued state, wait for the timelock delay to expire and then execute it directly. | error | No | GovernorAlreadyQueuedProposal(uint256) |
| DALP-4100 | Governor disabled deposit. | The Governor contract has the token deposit mechanism disabled. The contract blocks deposit calls when this feature is turned off at the contract level. | This Governor does not accept token deposits. Review the governance contract configuration to understand which participation method is supported. | 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 vote data with the private key that controls the voter address, making sure to sign the correct proposalId, support, and (if applicable) reason and params values. | 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. | The support field accepts only 0 (Against), 1 (For), or 2 (Abstain) for a full vote, and 255 for a fractional vote. Any other value causes the contract to reject the ballot. | Set support to 0, 1, or 2 for a standard vote. Set support to 255 and provide the required 48-byte params for a fractional vote. | 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 Governor's proposer guard has restricted the proposer address. The contract maintains an allowlist or blocklist of addresses permitted to create proposals. | Confirm that the proposer address is on the Governor's approved proposer list. Contact the governance administrator to request proposer access if needed. | error | No | GovernorRestrictedProposer(address) |
| DALP-4112 | Governor unable to cancel. | The caller does not hold the right to cancel this proposal. The contract permits cancellation only by the original proposer (when their votes have dropped below threshold) or by a designated guardian address. | Only the original proposer or a guardian can cancel this proposal. If the proposer's voting weight has fallen below the proposal threshold, the proposer themselves may cancel it. | 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, executing requires the Queued state, canceling requires Active or Pending, 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. If historical round access is required, redeploy the feed with BOUNDED or FULL history mode enabled. | 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. | Vesting initialization for this airdrop has closed. Contact the token issuer to confirm whether a new airdrop round will be opened. | 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 | Your account does not have enough resources for this operation. | The requested yield claim amount exceeds the interest that has accrued for this holder across all active yield periods. The contract tracks accrued interest per period and rejects claims that exceed the available total. | Reduce the claim amount to at most the available accrued interest, or wait for additional interest to accrue before claiming. | error | No | InsufficientAccruedInterest(uint256,uint256) |
| DALP-4125 | Your account does not have enough resources for this operation. | 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 | Your account does not have enough resources for this operation. | 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 | Your account does not have enough resources for this operation. | 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 | Your account does not have enough resources for this operation. | 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, but no interest provider contract is attached to this token. Without a provider the contract cannot calculate the interest amount to convert. | Attach a valid interest provider to the token before triggering an interest-based conversion. | 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. | This token type has reached its maximum number of registered interfaces. Remove an unused extension or contact the token issuer to request a contract upgrade that supports more interfaces. | 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 | New implementation address is zero. | The XvP settlement factory's updateImplementation function requires a non-zero replacement implementation address. The zero address was supplied. | Provide the address of a deployed XvP settlement implementation contract when calling updateImplementation. | 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 | Subject address is zero. | The trusted issuers meta-registry requires a non-zero subject address when assigning a subject-specific registry. The zero address is not a valid subject. | 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 | Bond denomination asset address is zero. | A bond must be linked to a denomination asset (the currency token used for face-value accounting). The zero address is not a valid asset contract. | Provide the on-chain address of the ERC-20 token that denominates the bond before initializing. | 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() |
| 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, which is a contradiction. | 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 | Push airdrop factory address is zero or does not support the required interface. | The push airdrop proxy validates the factory address by checking that it is non-zero and that the contract at that address implements IDALPPushAirdropFactory via ERC-165. Either check failed. | Supply the address of a deployed IDALPPushAirdropFactory contract that passes ERC-165 interface detection for that type. | error | No | InvalidFactoryAddress() |
| DALP-4156 | Token feature configuration data failed validation. | The token feature factory's validateConfig rejected the provided configuration bytes. This sentinel error is raised when no more specific domain error applies. Common causes include passing non-empty config data to a feature that requires empty config, or config that does not decode to expected parameters. | Check the specific feature factory's validateConfig requirements. Features that take no configuration expect empty bytes; features that take parameters require correctly ABI-encoded config data. | error | No | InvalidFeatureConfig() |
| DALP-4157 | Global trusted issuers registry address must implement the required interface. | During V2 migration, the contract checks that the provided global registry address implements IDALPTrustedIssuersRegistry via ERC-165. The address at the provided location did not return true for that interface ID. | Provide the address of a contract that correctly implements and exposes IDALPTrustedIssuersRegistry through ERC-165 interface detection. | 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 | Token implementation address is the zero address. | The contract requires a non-zero, ERC-165-conforming token implementation address. A zero address was supplied. | 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. | The batch claim operation requires all input arrays (indices, claim amounts, total amounts, merkle proofs) to be the same 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 | The source wallet is not registered as lost or the caller is not its registered 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. | The yield schedule contract requires a non-zero OnchainID contract address when setting the identity. A zero address was provided. | Provide the address of the deployed OnchainID contract associated with this yield schedule. | 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 | A required sale configuration parameter is zero or exceeds the allowed 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 must be greater than zero. | The fixed yield schedule rejects a yield rate of zero basis points. A zero rate would produce no yield distribution. | Provide a non-zero value for the yield rate expressed in basis points. | error | No | InvalidRate() |
| DALP-4186 | Redemption target 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 token sale contract enforces specific lifecycle statuses for each operation. The current status does not match the status the operation requires. | 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. | This error reflects an internal data integrity issue. Contact support if it appears during a normal operation. | error | No | InvalidShortString() |
| DALP-4195 | Signature malformed or verification failed. | The issuer-signed scalar feed rejects signatures that have a structurally malformed EIP-1271 envelope, a zero ECDSA recovery result, a non-contract signer address in the EIP-1271 path, or an s value 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 in the future. | The contract requires the start date to be strictly after the current block timestamp when creating a new yield schedule. A start date at or before the current time is not accepted. | Set the start date to a timestamp that is at least one second after the current block time before submitting. | error | No | InvalidStartDate() |
| DALP-4200 | Airdrop start time is not in the future. | The contract requires the claim window start time to be strictly after the current block timestamp. A start time in the past or equal to the current time is not accepted. | Set the start time to a future timestamp before submitting the airdrop configuration. | error | No | InvalidStartTime() |
| DALP-4201 | Identity registry storage address is zero. | The identity registry contract requires a non-zero address for its storage contract. A zero address was provided. | Supply the address of a deployed identity registry storage contract. | error | No | InvalidStorageAddress() |
| DALP-4202 | Subject address does not match the token's on-chain identity. | The trusted issuers registry on this token only accepts queries where the subject address equals the token's own onchainID(). The provided subject address differs from that value. | Pass the token's on-chain identity address as the subject parameter. | error | No | InvalidSubjectAddress() |
| DALP-4203 | System contract address is zero or missing the required interface. | The proxy requires a non-zero system address that supports the IDALPSystem interface. The provided address is either zero or does not pass the interface check. | Provide the address of a deployed system contract that correctly implements IDALPSystem. | error | No | InvalidSystemAddress() |
| DALP-4204 | Airdrop start and end times do not form a usable claim window. | The combination of start time and end time supplied for this airdrop does not form a valid claim window. The end time must be at least one second after the start time, and the start time must be in the future. | Set a future start time and an end time that is strictly after the start time before submitting. | error | No | InvalidTimeWindow() |
| DALP-4205 | Sale or vesting timestamp conflicts with required time ordering. | The contract enforces that sale start, vesting start, presale end, and sale end times form a valid, non-overlapping sequence. One of the supplied timestamps violates this ordering. | Ensure the sale start is in the future, the vesting start is after the sale end, and the presale end falls within the sale window. | error | No | InvalidTiming() |
| DALP-4206 | Topic ID zero is not allowed in compliance expressions. | The compliance module's expression evaluator requires each topic node to carry a non-zero topic ID. A topic node with value zero was found in the supplied expression. | Replace any topic node with value zero with a valid, non-zero topic ID before submitting the expression. | error | No | InvalidTopicIdZeroNotAllowed() |
| DALP-4207 | Topic scheme registry address is zero. | The feed or feeds directory requires a non-zero address for the topic scheme registry contract. A zero address was supplied during initialization. | Provide the address of a deployed topic scheme registry contract. | error | No | InvalidTopicSchemeRegistry() |
| DALP-4208 | Identity registry topic scheme registry address is zero. | The identity registry contract requires a non-zero address for the topic scheme registry when initializing or updating that reference. A zero address was provided. | Provide the address of a deployed topic scheme registry contract. | error | No | InvalidTopicSchemeRegistryAddress() |
| DALP-4209 | Treasury address is zero. | The maturity redemption factory and the fixed treasury yield feature both require a non-zero treasury address. A zero address was supplied. | Provide the address of a deployed treasury contract before submitting the feature configuration. | error | No | InvalidTreasury() |
| DALP-4210 | Trusted issuers registry address is zero. | The issuer-signed scalar feed requires a non-zero address for the trusted issuers registry contract during initialization. A zero address was provided. | Provide the address of a deployed trusted issuers registry contract. | error | No | InvalidTrustedIssuersRegistry() |
| DALP-4211 | Unstake delay is zero or less than the current delay. | The ERC-4337 stake manager requires the new unstake delay to be greater than zero and at least as large as the previously set delay. The provided value violates one of these constraints. | Supply an unstake delay value that is greater than zero and greater than or equal to the current unstakeDelaySec recorded for this account. | error | No | InvalidUnstakeDelay(uint256,uint256) |
| DALP-4212 | User wallet address is zero. | The identity registry requires a non-zero wallet address when registering, recovering, or updating an identity. A zero address was supplied for the user wallet. | Supply the actual wallet address of the user whose identity is being registered or recovered. | error | No | InvalidUserAddress() |
| DALP-4213 | Withdrawal destination address is zero. | The airdrop contract requires a non-zero address as the destination when executing a token withdrawal. A zero address was passed as the recipient. | Provide a valid non-zero wallet or contract address as the withdrawal destination. | error | No | InvalidWithdrawalAddress() |
| DALP-4214 | Issuer already exists. | The trusted issuers registry already contains an entry for the supplied issuer address. The registry allows each issuer address to appear only once. | Check the current registry contents before adding an issuer. If the issuer's claim topics need updating, use the update function rather than adding a duplicate entry. | error | No | IssuerAlreadyExists(address) |
| DALP-4215 | Issuer cannot be zero address. | You supplied the zero address as the claim issuer when registering a claim. A trusted issuer must be a deployed contract capable of signing claims, and the zero address does not satisfy that requirement. | Supply the address of a deployed claim issuer contract instead of the zero address. | error | No | IssuerCannotBeZeroAddress() |
| DALP-4216 | The requested resource could not be found. | The supplied issuer address does not appear in the trusted issuers registry. The contract allows updates and removals only for issuers that are already registered. | Confirm the issuer address is correct. If the issuer was never registered, add it before attempting to update or remove it. | error | No | IssuerDoesNotExist(address) |
| DALP-4217 | You do not have permission for this operation. | The issuer identity address submitted with the feed update is not listed as a trusted issuer for this feed's topic and subject in the trusted issuers registry. The feed only accepts updates from pre-authorized issuers. | Register the issuer in the trusted issuers registry for this feed's topic and subject before submitting updates, or use a different issuer that is already authorized. | error | No | IssuerNotAuthorized() |
| DALP-4218 | The requested resource could not be found. | The contract attempted to remove the issuer at the given address from the trusted-issuers list for a specific claim topic, but that issuer was never added to that topic's list. The registry tracks which issuers each claim topic authorises, and this combination has no entry. | Verify that you previously added the issuer address to the claim topic's trusted-issuers list before attempting removal. Retrieve the current list for the claim topic and confirm the address is present. | error | No | IssuerNotFoundInTopicList(address,uint256) |
| DALP-4219 | Key already has this purpose. | The on-chain identity key you are adding already holds the requested purpose. The ERC-734 key registry records each purpose only once per key. | Check the key's current purposes with getKey() before calling addKey(). If the purpose is already present, no further step is needed. | error | No | KeyAlreadyHasThisPurpose(bytes32,uint256) |
| DALP-4220 | Key cannot be zero. | You supplied a zero key hash (bytes32(0)) to a key operation. The ERC-734 contract requires a non-zero key identifier for all key registry operations. | Supply a valid non-zero key hash, typically derived as keccak256(abi.encode(address)) for an Ethereum address key. | error | No | KeyCannotBeZero() |
| DALP-4221 | The requested resource could not be found. | The key hash you referenced does not exist in the ERC-734 key registry. The registry only holds keys that a prior addKey() call explicitly added. | Confirm the key hash is registered by calling keyHasPurpose() or getKey() before attempting removal. If the key is missing, add it first with addKey(). | error | No | KeyDoesNotExist(bytes32) |
| DALP-4222 | Key does not have this purpose. | The key exists in the ERC-734 registry, but it does not hold the purpose you are trying to remove. The contract requires you to assign a purpose to a key before you can revoke it. | Call getKey() to inspect the key's current purposes before calling removeKey(). Only attempt to remove a purpose that appears in the key's purposes array. | error | No | KeyDoesNotHaveThisPurpose(bytes32,uint256) |
| DALP-4223 | Kind mismatch. | A replaceFeed() call specified a feed kind that differs from the kind of the feed already registered at that subject-and-topic slot. The registry enforces that a replacement feed must be the same kind as the one it replaces. | Check the existing feed's kind with getFeed() and supply a replacement feed of the same kind. To change the kind, remove the existing feed first, then register a new one. | error | No | KindMismatch(uint8,uint8) |
| DALP-4224 | Length mismatch. | A batch operation received two arrays (recipients and amounts) whose lengths differ. The contract requires one-to-one correspondence between each recipient address and its corresponding amount. | Ensure the toList and amounts arrays you pass to the batch call contain the same number of elements before submitting. | error | No | LengthMismatch() |
| DALP-4225 | Locked amount mismatch. | During XvP settlement execution, the contract tried to release more tokens from escrow than the participant had locked. The escrowed balance for that asset and account is less than the amount the settlement leg requires. | Confirm that the participant's locked balance for the asset covers the full settlement amount before submitting. If the escrow is short, the participant must top up the locked amount first. | error | No | LockedAmountMismatch(address,address,uint256,uint256) |
| DALP-4226 | Max features reached. | The token's feature list already holds the maximum of 32 features, or the incoming list exceeds that limit. The configurable token contract enforces a hard cap of 32 registered features. | Reduce the number of features in the ordered list to 32 or fewer. Remove features that are no longer needed before registering new ones. | error | No | MaxFeaturesReached() |
| DALP-4227 | Maximum allocation exceeded. | The buyer's cumulative token purchase would exceed the per-address maximum allocation configured for the sale, or the presale per-address cap. The sale contract tracks each buyer's total across all purchases and blocks any that push the running total past the limit. | Check the buyer's existing purchase total and the sale's maxPurchase and presale.maxPerAddress limits before submitting. Reduce the token amount so the cumulative total stays within the configured cap. | error | No | MaximumAllocationExceeded() |
| DALP-4228 | Meta registry cannot provide complete answer. | The trusted-issuers meta-registry received a call to an aggregation operation that it cannot satisfy on its own. The meta-registry is a registry-of-registries and certain operations require a direct registry, not the aggregating proxy. | Call the operation directly on the specific subject registry or system registry rather than on the meta-registry. Retrieve the target registry address from getRegistryForSubject() or getSystemRegistry() first. | error | No | MetaRegistryCannotProvideCompleteAnswer() |
| DALP-4229 | Metadata immutable. | The contract marked this metadata key as immutable when it first stored the value. The contract permanently blocks any subsequent update or removal of metadata stored under an immutable key. | Metadata stored under an immutable key cannot change. Use a different key for the updated value, or design the token so immutable keys only hold data that must never change. | error | No | MetadataImmutable() |
| DALP-4230 | Missing type identifier. | The addon implementation contract does not expose a typeId() function or the call reverted. The system addon registry requires every implementation to declare a unique type identifier before the registry can accept it. | Ensure the implementation contract implements IWithTypeIdentifier and returns a non-reverting typeId(). Deploy or supply a corrected implementation before retrying registration. | error | No | MissingTypeIdentifier(address) |
| DALP-4231 | Module already added. | The compliance module at the given address is already registered on this token. The token contract allows each module to appear only once in its active compliance list. | Check the token's current compliance modules before calling addComplianceModule(). If the module is already present, no step is needed. | error | No | ModuleAlreadyAdded() |
| DALP-4233 | Module type already registered. | A module with the same type identifier is already registered in the account factory's module registry. The factory allows only one module per type identifier. | Check the registered modules list and confirm no module with the same typeId is already present before calling registerModule(). To replace an existing module, remove it first with removeModule(). | error | No | ModuleAlreadyRegistered(bytes32,address) |
| DALP-4234 | The requested resource could not be found. | The compliance module at the given address is not present in this token's active compliance list. The token cannot update parameters or remove a module that was never added. | Call the token's module-listing function to verify which modules are active before attempting to update or remove one. If you need the module, add it with addComplianceModule() first. | error | No | ModuleNotFound() |
| DALP-4236 | Module not registered. | The module address does not appear in the account factory's module registry. Operations such as removing a module or setting it as the default validator require prior registration. | Register the module with registerModule() before referencing it in removeModule() or setDefaultValidator(). Confirm the address matches the one originally registered. | error | No | ModuleNotRegistered(address) |
| DALP-4237 | No approval to revoke. | The revokeApproval() call found no active, unconsumed transfer approval for the specified token, sender identity, recipient identity, and amount combination. The approval either never existed, already expired, or was already consumed by a transfer. | Confirm an active approval exists for the exact token, sender identity, recipient identity, and amount before calling revokeApproval(). Use getApproval() or getExactApproval() to check the current state. | error | No | NoApprovalToRevoke() |
| DALP-4238 | No bytecode. | The address supplied to registerModule() has no deployed contract bytecode. The account factory requires every module to be a deployed contract with executable code. | Confirm the module contract deployed successfully to the target address before registering it. Check deployment transaction receipts and confirm the address is correct for the target network. | error | No | NoBytecode(address) |
| DALP-4239 | No checkpoint at timepoint. | The requested timepoint is earlier than the first recorded checkpoint for the account or total supply in the historical-balances extension. When strict mode is on, the contract requires the timepoint to fall within the tracked history range. | Query balanceOfAt() or totalSupplyAt() with strict=false to get a zero result for timepoints before the first checkpoint, or supply a timepoint at or after the first recorded checkpoint. Call the function without strict mode if a pre-history result of zero is acceptable. | error | No | NoCheckpointAtTimepoint(uint256) |
| DALP-4240 | No contribution to refund. | The token sale is in a failed state (soft cap not reached), but the caller's recorded contribution for the specified currency is zero. The contract only allows a refund claim when a positive contribution exists for that currency. | Confirm you used the correct investor address and currency address. If you contributed under a different currency or address, submit the refund request with those values. | error | No | NoContributionToRefund() |
| DALP-4241 | No initial admins. | You called initialization with an empty list of admin addresses. The access manager or yield schedule requires at least one admin address to complete setup. | Provide a non-empty array of admin addresses when deploying or initializing this contract. | error | No | NoInitialAdmins() |
| DALP-4242 | No local flows. | A cross-party value protocol (XvP) settlement requires at least one local sender flow on the current chain. You constructed this settlement with flows that are all external-chain only, leaving no local participants to initiate on-chain transfers. | Include at least one flow where the sender is on the current chain before creating the settlement. | error | No | NoLocalFlows() |
| DALP-4243 | No yield available. | You attempted to claim yield, but no completed accrual periods carry a positive balance for this holder. This occurs when no periods have completed yet, the holder already claimed all completed periods, or the holder held no tokens during any unclaimed period. | Wait for at least one yield period to complete and ensure the account holds tokens during that period before claiming. | error | No | NoYieldAvailable() |
| DALP-4244 | Initialization required. | The contract requires a prior initialization step before this call can proceed. The real estate asset contract checks that initialization stored premint parameters before allowing premint to complete. | Ensure you fully initialized the contract with a non-zero premint amount before calling the premint completion step. | error | No | NotInitialized() |
| DALP-4245 | Contract initialization sequence required. | You called a function decorated with onlyInitializing outside the contract's initialization sequence. This guard is part of OpenZeppelin's Initializable pattern and prevents protected setup functions from running after initialization is complete. | This function runs only during the contract's initialize call chain. Calling it after deployment is complete has no effect and the contract blocks it. | error | No | NotInitializing() |
| DALP-4246 | Module installation required. | The ERC-7579 ECDSA validator module has no owner recorded for the calling smart account. Install the module on the account before updating its owner record. | Install the ECDSA validator module on the smart account first, then retry the owner update. | error | No | NotInstalled() |
| DALP-4247 | Not matured. | The token has a maturity redemption feature, but you requested redemption before the platform set the maturity flag on-chain. The contract requires the token to reach a matured state before it allows redemption. | Wait for the token to reach its maturity date and for the maturity flag to be set on-chain before submitting a redemption. | error | No | NotMatured() |
| DALP-4248 | Not operation requires one operand. | During evaluation of an identity verification expression tree, the evaluator encountered a NOT node with an empty operand stack. A NOT operation consumes exactly one stack value, so the expression must have at least one preceding operand. | Review the compliance expression tree structure. Each NOT node must appear after exactly one operand node. | error | No | NotOperationRequiresOneOperand() |
| DALP-4249 | Not registered. | You asked the global directory to retrieve a token type, compliance module, or addon by ID, but no entry with that ID exists in the registry. Nothing ever registered this ID, or the registry no longer holds it. | Verify the registry ID is correct. List available entries in the global directory to confirm the target appears before retrying. | error | No | NotRegistered(bytes32) |
| DALP-4250 | Not registered feature. | A call to executeFeatureUpdate or executeFeatureApproval on a SMART token came from an address that is not in the token's registered feature set. Only feature contracts explicitly added to the token may trigger internal token updates. | Ensure the token's feature registry includes the caller's feature contract before calling these entry points. | error | No | NotRegisteredFeature(address) |
| DALP-4251 | Not staked. | The ERC-4337 EntryPoint's stake manager requires the paymaster or account to have an active, locked stake before this operation can proceed. The stake is either zero, below the required minimum, or the unstake delay has not elapsed. | Add stake to the EntryPoint for the paymaster account and ensure the unstake delay period has passed before retrying. | error | No | NotStaked(uint256,uint256,bool) |
| DALP-4252 | Observed at too far in future. | The observedAt timestamp in the submitted feed update is further in the future than the feed's configured drift allowance permits. The contract compares observedAt to block.timestamp + driftAllowance and rejects values that exceed this bound. | Reduce the observedAt timestamp so it falls within the feed's drift allowance relative to the current block time. | error | No | ObservedAtTooFarInFuture() |
| DALP-4253 | Onchain id already set. | The XvP settlement's on-chain identity address already holds a non-zero value. The contract blocks any reassignment of the identity address once set. | The on-chain identity for this settlement already has a value. No further call to setOnchainId is needed. | error | No | OnchainIdAlreadySet() |
| DALP-4254 | Out of range access. | A byte-packing read or write operation in OpenZeppelin's Packing library attempted to access a byte range that lies outside the bounds of the packed value. The requested offset and length exceed the 32-byte word size. | Review the byte offset and length parameters passed to the packing call and ensure they fit within the 32-byte boundary. | error | No | OutOfRangeAccess() |
| DALP-4255 | Owner already set. | The ERC-7579 ECDSA validator module already has an owner recorded for the calling smart account. The onInstall function can only set the owner once per account. | The validator is already installed on this account. Use updateOwner to rotate the owner address instead of calling onInstall again. | error | No | OwnerAlreadySet() |
| DALP-4256 | Partial conversion disabled. | The conversion feature on this token has partial conversion disabled. The requested conversion amount is less than the holder's full available principal, which the contract treats as a partial conversion. | Submit the conversion for the full available principal amount, or contact the token issuer to confirm whether this token supports partial conversions. | error | No | PartialConversionDisabled() |
| DALP-4257 | Paymaster unauthorized. | An address other than the configured EntryPoint called the paymaster's validatePaymasterUserOp or postOp entry point. The EntryPoint contract and its canonical resolver are the only callers these functions accept. | Only the ERC-4337 EntryPoint calls these paymaster entry points. Do not call them directly. | error | No | PaymasterUnauthorized(address) |
| DALP-4258 | Paymaster zero entry point. | You initialized or updated the paymaster with a zero address as the EntryPoint. The contract requires a non-zero EntryPoint address for the ERC-4337 validation pipeline to function. | Provide the deployed ERC-4337 EntryPoint contract address when initializing or updating the paymaster. | error | No | PaymasterZeroEntryPoint() |
| DALP-4259 | Paymaster zero signer. | You initialized or updated the paymaster with a zero address as the trusted signer. EIP-712 sponsorship ticket verification requires a non-zero signer address. | Provide a valid non-zero signer address when initializing or rotating the paymaster signer. | error | No | PaymasterZeroSigner() |
| DALP-4260 | Phase not active. | The token sale contract requires an active phase (PRESALE or PUBLIC_SALE) before it accepts purchases. You attempted a purchase while the sale was in SETUP, PAUSED, SUCCESS, or FAILED, where the contract does not accept purchases. | Check the current sale status before submitting a purchase. Wait until the sale operator advances the sale to PRESALE or PUBLIC_SALE, then retry. | error | No | PhaseNotActive() |
| DALP-4261 | Post op reverted. | The ERC-4337 EntryPoint requires each paymaster's post-operation call to succeed after a user operation executes. The paymaster's postOp function reverted, causing the EntryPoint to reject the operation. | Review the returnData included in the error for the specific reason the paymaster's postOp reverted. Ensure the paymaster has sufficient deposit and that its validation logic matches the executed operation. | error | No | PostOpReverted(bytes) |
| DALP-4262 | Premint already completed. | The real-estate token contract's premint step can only be completed once, immediately after deployment. The factory already called completePremint successfully, and you attempted a second call. | Premint completion is a one-time factory step. Do not call completePremint after it has already succeeded. If you need to mint additional tokens, use the standard mint flow instead. | error | No | PremintAlreadyCompleted() |
| DALP-4263 | Proxy creation failed. | The contract factory computed a deterministic deployment address with CREATE2 before deploying, but the deployed contract landed at a different address. This indicates a salt or bytecode mismatch between the prediction and the actual deploy. | Ensure the deployment salt and initialization parameters you pass to the factory match exactly what you used to predict the address. Retry the deployment with consistent inputs. | error | No | ProxyCreationFailed() |
| DALP-4264 | Purchase amount too low. | The token sale contract blocks purchases or token withdrawals when the effective amount is zero or below the configured minimum. This can occur when: the payment amount is zero, the payment is too small to convert to any tokens at the current rate, the withdrawable vested amount is zero, or the first purchase is below the sale's minimum purchase limit. | Ensure the purchase amount converts to at least one token unit at the current rate and meets the sale's minimum purchase requirement. For token withdrawals, check that the vesting schedule has released a non-zero amount before calling withdrawTokens. | error | No | PurchaseAmountTooLow() |
| DALP-4265 | Query before enabled. | The historical balances feature only records checkpoints from the block at which it was enabled. You queried a timepoint ({{requestedTimepoint}}) that is earlier than the enabledAt timepoint ({{enabledAt}}), so no checkpoint data exists for that period. | Query a timepoint at or after the value returned as enabledAt in the error. Historical balance data is not available for blocks before the token activated this feature. | error | No | QueryBeforeEnabled(uint256,uint48) |
| DALP-4266 | Recipient not verified. | The identity verification compliance module checks each recipient against the token's identity registry and required claim-topic expression before allowing a transfer or mint. The recipient's on-chain identity does not hold the required claims (such as KYC or AML) from trusted issuers. | The recipient must complete the required identity verification process and have the necessary claims issued to their on-chain identity. Once the claims are present and the identity registry confirms the recipient as verified, retry the transfer. | error | No | RecipientNotVerified() |
| DALP-4267 | Recover zero address. | The emergency ERC-20 recovery function requires both the token address and the recipient address to be non-zero. You supplied a zero address for one of those parameters. | Provide a valid non-zero token contract address and a valid non-zero recipient address when calling the ERC-20 recovery function. | error | No | RecoverZeroAddress() |
| DALP-4268 | Reentrancy. | The ERC-4337 EntryPoint detected a reentrant call into a protected function. The EntryPoint guards certain operations against reentrancy, and a call attempted to re-enter while a prior call was still executing. | Do not call EntryPoint-protected functions from within a callback triggered by an ongoing EntryPoint execution. Review the call stack to eliminate the reentrant path. | error | No | Reentrancy() |
| DALP-4269 | Reentrant initialization. | The fixed yield schedule contract detected a reentrant call during its initialization sequence. The initialize function must complete before anything calls it again. | The initialization sequence must run to completion before any further calls to the contract are made. Ensure no external callbacks or nested calls re-enter the contract's initialize function. | error | No | ReentrantInitialization() |
| DALP-4270 | Refund grace period active. | When a token sale ends in a FAILED state, the contract preserves the payment pool for investor refunds during a fixed grace period. An attempt was made to withdraw funds from the sale contract before the refund grace period has elapsed. | Wait until the refund grace period expires before withdrawing funds from a failed sale. Investors should claim their refunds using claimRefund during the grace period. After the period ends, the withdrawal call will succeed. | error | No | RefundGracePeriodActive() |
| DALP-4271 | The requested resource could not be found. | You attempted a registry key migration but no implementation is registered under the source key ({{oldKey}}). The registry cannot remap a key that has no existing entry. | Verify that the source type key you pass to the remap call matches an addon or factory implementation that is currently registered. List registered keys first and confirm the correct source key before retrying. | error | No | RemapSourceNotFound(bytes32) |
| DALP-4272 | Remap target already exists. | You attempted a registry key migration but the target key ({{newKey}}) derived from the implementation's typeId is already occupied by another registered implementation. Each type key must map to exactly one implementation. | The new key resolved from the implementation's typeId conflicts with an existing registration. Remove or remap the existing entry at the target key first, or resolve the typeId collision between implementations before retrying. | error | No | RemapTargetAlreadyExists(bytes32) |
| DALP-4273 | Replicated execution already performed. | The on-chain identity contract's approve function checks that an execution has not already been carried out before processing an approval. The contract already performed execution {{executionId}} and will not approve it again. | The contract approves and runs each execution exactly once. Check the execution state before calling approve. If you need to perform the same operation again, submit a new execution request via the execute function. | error | No | ReplicatedExecutionAlreadyPerformed(uint256) |
| DALP-4274 | The requested resource could not be found. | The on-chain identity contract's approve function validates that the execution ID exists before processing. The supplied {{executionId}} is greater than or equal to the current execution nonce, meaning the contract has never created an execution with that ID. | Verify the execution ID by checking the current execution nonce on the identity contract. Only IDs below the nonce represent valid pending executions. Submit a new execution request to obtain a valid ID. | error | No | ReplicatedExecutionIdDoesNotExist(uint256) |
| DALP-4275 | Revocation not allowed after commit. | The XvP settlement has external (cross-chain) flows and all local participants have already approved, committing the settlement to the external counterparty. Once the counterparty chain acts on that commitment, individual parties can no longer revoke their approval. | To cancel a fully-committed external settlement, use the cancel vote mechanism so all parties agree to cancel together rather than attempting an individual revocation. | error | No | RevocationNotAllowedAfterCommit() |
| DALP-4276 | The requested resource could not be found. | The scalar feed operates in bounded-history mode and the ring buffer has evicted the requested round, or the feed never recorded that round ID. The feed retains only a fixed number of past rounds. | Request a round ID that falls within the feed's current retention window. Use the latest round ID if historical data for the requested round is no longer available. | error | No | RoundNotFound(uint80) |
| DALP-4277 | Sale duration must be positive. | The token sale factory requires a positive, non-zero sale duration. A duration of zero would create a sale that ends immediately and can never accept purchases. | Supply a saleDuration value greater than zero when calling createTokenSale. | error | No | SaleDurationMustBePositive() |
| DALP-4278 | Sale ended. | The current block timestamp is at or past the sale's configured end time. The sale's purchase window has closed and the contract no longer accepts purchases. | This token sale no longer accepts purchases. Check the sale's end time and, if a new sale is needed, create a new sale instance. | error | No | SaleEnded() |
| DALP-4279 | Sale never activated. | The finalizeSale call targeted a sale that is still in SETUP status, meaning the sale was configured but never activated. The finalization path requires the sale to have been activated at least once. | The contract cannot finalize a sale that was never activated. To recover the sale token balance, use the appropriate withdrawal path for a non-activated sale, or contact your platform administrator. | error | No | SaleNeverActivated() |
| DALP-4280 | Sale not active. | The requested operation requires the sale to be in PRESALE or PUBLIC_SALE phase, but the sale is currently in a different phase (for example, SETUP, PAUSED, ENDED, or FAILED). Phase-gated operations such as purchasing tokens or pausing can only proceed when the sale is running. | Check the current sale phase. If the sale administrator has paused the sale, they must resume it before purchases can proceed. | error | No | SaleNotActive() |
| DALP-4281 | Sale not ended. | The operation requires the sale to have ended, but the current block timestamp is still before the sale's configured end time and the contract has not moved the sale to ENDED status. Operations such as finalizing the sale or withdrawing unsold tokens are only permitted after the sale window closes. | Wait until the sale's end time has passed, then retry the operation. | error | No | SaleNotEnded() |
| DALP-4282 | Sale not failed. | Refunds are only available when the sale has reached a FAILED final state (the soft cap did not reach its target). The sale is currently in a different final state such as SUCCESS, or the contract has not yet finalized it. | Refunds are only claimable on failed sales. If the sale succeeded, purchased tokens are available to withdraw via the token withdrawal path instead. | error | No | SaleNotFailed() |
| DALP-4283 | Sale not finalized as success. | This sale has a soft cap configured. The contract blocks token withdrawal until the sale administrator finalizes the sale as SUCCESS, confirming the soft cap was met. This prevents buyers from withdrawing tokens while refunds might still apply if the sale ultimately fails. | Wait for the sale administrator to call finalizeSale. Once the contract records the sale as SUCCESS, token withdrawal becomes available. | error | No | SaleNotFinalizedAsSuccess() |
| DALP-4284 | Sale not started. | The current block timestamp is before the sale's configured start time. The purchase window has not yet opened. | Wait until the sale's start time arrives before submitting a purchase. | error | No | SaleNotStarted() |
| DALP-4285 | Sale start must be in future. | The sale start timestamp provided to createTokenSale is earlier than the current block timestamp. The contract requires the sale to start in the future so there is a defined period for setup and activation. | Provide a saleStart value that is greater than the current block timestamp when calling createTokenSale. | error | No | SaleStartMustBeInFuture() |
| DALP-4286 | Salt already taken. | The identity factory uses CREATE2 for deterministic deployment. A previous deployment from this factory already consumed the salt derived from the provided wallet or contract address, so the factory cannot create a second identity at the same deterministic address. | Each wallet or contract address can only have one identity created via this factory. Retrieve the existing identity address using the factory's lookup functions rather than creating a new one. | error | No | SaltAlreadyTaken(string) |
| DALP-4287 | Same address. | The address passed to updateImplementation matches the implementation address already registered in the XvP settlement factory. The contract rejects a no-operation replacement of an implementation with itself. | Provide a different implementation address that has not already been set on this factory. | error | No | SameAddress() |
| DALP-4288 | Schedule not active. | The fixed treasury yield schedule's start date has not yet arrived. Yield accrual begins only on or after the configured startDate, so the contract has no yield to calculate before that point. | Wait until the yield schedule's start date has passed before calling calculateAccruedYield. | error | No | ScheduleNotActive() |
| DALP-4289 | Schema hash mismatch. | The IssuerSignedScalarFeed has a pinned schema hash and the hash computed from the topic's current definition does not match that pinned value. This protects the feed from accepting data formatted for a different schema version. | Build the data update against the same topic schema the feed used at deployment. If the topic schema has changed, a new feed instance is required. | error | No | SchemaHashMismatch() |
| DALP-4290 | Schema hash mismatch. | The feeds directory rejected a replacement feed because its schema hash differs from the schema hash recorded for the existing feed at that topic. The directory enforces schema consistency so consumers can rely on a stable data structure. | Supply a replacement feed compiled against the same schema as the existing feed, or register a new feed under a different topic. | error | No | SchemaHashMismatch(bytes32,bytes32) |
| DALP-4291 | Secret already revealed. | The contract already recorded a secret reveal for this XvP settlement's hashlock. Each hashlock-gated settlement accepts exactly one secret reveal. | The secret is already on-chain. You can proceed directly to execution without revealing the secret again. | error | No | SecretAlreadyRevealed() |
| DALP-4292 | Secret not revealed. | The XvP settlement uses a hashlock gate and you attempted to execute before revealing the secret on-chain. The contract blocks execution until you submit the pre-image of the hashlock. | Call the revealSecret function with the correct pre-image before attempting to execute the settlement. | error | No | SecretNotRevealed() |
| DALP-4293 | Self transfer. | One of the settlement flows specifies the same address as both sender and recipient. A transfer from an address to itself has no net effect and the contract rejects it as a configuration error. | Review the settlement flows and correct any flow where flow.from and flow.to are the same address. | error | No | SelfTransfer() |
| DALP-4294 | Sender address result. | The ERC-4337 EntryPoint's getSenderAddress function always reverts with SenderAddressResult to return the computed counterfactual smart account address. The revert carries the address as data and signals successful address discovery, not a failure. | Read the sender address from the revert data of the getSenderAddress call. Decode the SenderAddressResult(address) error to extract the computed address. | error | No | SenderAddressResult(address) |
| DALP-4295 | Sender's key lacks the required purpose. | The caller's address does not hold an ACTION_KEY purpose on the ERC-734 identity contract. The identity gate checks that the sender's key hash carries ACTION_KEY before allowing the requested call to proceed. | Add the ACTION_KEY purpose to the caller's key on the identity contract, then retry the call. | error | No | SenderLacksActionKey() |
| DALP-4296 | Sender lacks management key. | The caller's address does not hold a MANAGEMENT_KEY purpose on the ERC-734 identity contract. The identity gate checks that the sender's key hash carries MANAGEMENT_KEY before allowing key management or approval calls. | Have an existing MANAGEMENT_KEY holder add the MANAGEMENT_KEY purpose to the caller's key on the identity contract, then retry the call. | error | No | SenderLacksManagementKey() |
| DALP-4297 | Sender not local. | The caller is not registered as a local participant in this XvP settlement. Only addresses designated as local counterparties during settlement setup may perform this step. | Retry the call from an address registered as a local participant in this settlement, or verify the correct settlement contract address. | error | No | SenderNotLocal() |
| DALP-4298 | Signature unchanged. | The topic scheme's signature is already set to the value you submitted. The registry rejects an update when the new signature is byte-for-byte identical to the one currently stored on-chain. | Supply a different signature string when calling the update function, or skip the call if the current signature is already correct. | error | No | SignatureUnchanged(string,string) |
| DALP-4299 | Signature validation failed. | The EIP-4337 EntryPoint could not validate the aggregated signature produced by the aggregator at the address returned in the error. The aggregator's own validation check rejected the bundle's combined signature. | Confirm the aggregator contract at the reported address is correct and that the signatures in the UserOperation bundle match the aggregation scheme. | error | No | SignatureValidationFailed(address) |
| DALP-4300 | Slippage exceeded. | The token amount calculated from your payment is below the minimum you specified. The sale contract enforces slippage protection: if the computed output is less than your stated minimum, the purchase reverts to protect you from an unfavorable price. | Lower your minimum token amount or increase your payment amount, then resubmit the purchase. | error | No | SlippageExceeded(uint256,uint256) |
| DALP-4301 | Soft cap not reached. | A soft cap is configured on this sale and the sale has not yet reached a successful finalization. The contract requires successful finalization before allowing fund withdrawals, to prevent funds from leaving while a failed-sale refund window may still apply. | Wait for the sale to finalize as SUCCESS before withdrawing funds. Check the current sale status and finalize if the soft cap has been met. | error | No | SoftCapNotReached() |
| DALP-4302 | Stake still locked. | The stake's unlock period has not elapsed yet. The EIP-4337 StakeManager records a scheduled withdrawal time and blocks the actual withdrawal until the current block timestamp reaches that time. | Wait until the withdrawal time reported in the error (withdrawTime) has passed, then retry the withdrawal. | error | No | StakeNotUnlocked(uint256,uint256) |
| DALP-4303 | Stake withdrawal failed. | The EIP-4337 StakeManager attempted to transfer the withdrawn stake as native ETH to the destination address, but the transfer call failed. The revert reason from the failed transfer is included in the error. | Verify that the withdrawal address can receive native ETH (it must not revert on plain transfers) and that sufficient gas is available, then retry the withdrawal. | error | No | StakeWithdrawalFailed(address,address,uint256,bytes) |
| DALP-4304 | Stale observation. | The feed update's observedAt timestamp is older than the timestamp of the most recently accepted observation. The issuer-signed scalar feed enforces monotonic ordering to prevent older data from overwriting newer data. | Submit an update whose observedAt value is greater than or equal to the current latest observation timestamp recorded by the feed. | error | No | StaleObservation() |
| DALP-4305 | String too long. | The string value supplied exceeds 31 bytes, which is the maximum length that the OpenZeppelin ShortStrings library can pack into a single storage slot. | Shorten the string to 31 bytes or fewer before submitting the call. | error | No | StringTooLong(string) |
| DALP-4306 | System access manager not set. | The compliance contract requires a system access manager address before this call can proceed, and no address has been configured yet. | Configure the system access manager on the compliance contract before retrying this call. | error | No | SystemAccessManagerNotSet() |
| DALP-4307 | System addon implementation not set. | The system registry attempted to update the implementation address for an addon type whose implementation slot has never been populated. The registry allows updates only to addon types previously registered with an initial implementation. | Register the addon type with an initial implementation address before attempting to update it. Confirm that the addonTypeHash in the error matches the intended addon type. | error | No | SystemAddonImplementationNotSet(bytes32) |
| DALP-4308 | Addon type name already registered. | An addon type with the given name is already registered in the system addon registry (V1, name-based). Each addon type name must be unique across all registrations. | Choose a different type name for the new addon registration, or retrieve the existing addon proxy for the already-registered type name. | error | No | SystemAddonTypeAlreadyRegistered(string) |
| DALP-4309 | Addon type already registered. | An addon type with the given typeId is already registered and currently active in the system addon registry (V2, typeId-based). The registry permits re-registration only for archived addon types. | Use the existing addon proxy for the registered typeId, or archive the existing registration before re-registering with the same typeId. | error | No | SystemAddonTypeAlreadyRegisteredV2(bytes32) |
| DALP-4310 | System already bootstrapped. | The system bootstrap function has already run and completed. The system accepts bootstrap only once; calling bootstrap again on an already-initialized system is blocked. | Do not call bootstrap again on this system. If you need to update individual subsystem implementations, use the dedicated setter functions on the system contract. | error | No | SystemAlreadyBootstrapped() |
| DALP-4311 | System trusted issuers registry implementation not set. | The system bootstrap or setter call requires a non-zero trusted issuers registry implementation address, but the provided address is zero. The system validates this address before deploying or updating the registry proxy. | Provide a valid, deployed trusted issuers registry implementation address when calling the system bootstrap or the setSystemTrustedIssuersRegistryImplementation function. | error | No | SystemTrustedIssuersRegistryImplementationNotSet() |
| DALP-4312 | Terms already set. | The sale's terms hash can only be set while the sale is in SETUP status. The sale has already been activated, so the terms hash is now locked. | The terms hash for this sale cannot change after activation. To use different terms, deploy a new sale contract with the correct terms hash before activation. | error | No | TermsAlreadySet() |
| DALP-4313 | Terms not accepted. | A terms hash is set on this sale and the buyer has not yet accepted it. The sale contract requires each buyer to call acknowledgeTerms before the contract processes their purchase. | Call acknowledgeTerms on the sale contract from the buyer's address before submitting the purchase. | error | No | TermsNotAccepted() |
| DALP-4314 | Terms not set. | The acknowledgeTerms call requires a terms hash configured on the sale, but the sale admin has not set one yet. Buyers cannot acknowledge terms until the admin publishes them. | Have the sale admin call setTermsHash with the correct terms hash before buyers attempt to acknowledge terms. | error | No | TermsNotSet() |
| DALP-4315 | Payment currency limit exceeded. | The token sale contract enforces a maximum of 10 accepted payment currencies to prevent unbounded iteration during refund processing. Adding this currency would exceed that limit. | Remove an existing payment currency before adding a new one, or reduce the number of accepted currencies to stay within the 10-currency limit. | error | No | TooManyPaymentCurrencies() |
| DALP-4316 | The requested resource could not be found. | The topic scheme registry could not locate the topic ID in its internal enumeration array during a removal. The topic ID has an index of zero, meaning it was never recorded in the array. | Confirm the topic ID exists in the registry before attempting to remove it. Use the registry's lookup functions to verify the topic is registered. | error | No | TopicIdNotFoundInArray(uint256) |
| DALP-4317 | Topic mismatch. | The feed update's topic ID does not match the topic ID this feed contract was configured for. Each issuer-signed scalar feed is pinned to exactly one topic at deployment. | Submit the update to the feed contract whose pinned topic ID matches the topic ID in your update payload. | error | No | TopicMismatch() |
| DALP-4318 | Topic not registered. | The feeds directory requires a registered topic scheme for every topic ID before a feed can be registered or updated. No scheme has been registered for this topic ID in the topic scheme registry. | Register a topic scheme for this topic ID in the topic scheme registry, then retry the feed registration. | error | No | TopicNotRegistered(uint256) |
| DALP-4319 | Topic scheme already exists. | A topic scheme with this name already exists in the registry. The name is hashed to derive the topic ID, and that ID is already occupied. | Choose a unique name for the new topic scheme. To update an existing scheme's signature, use the update function rather than the registration function. | error | No | TopicSchemeAlreadyExists(string) |
| DALP-4320 | The requested resource could not be found. | No topic scheme is registered for this topic ID, either locally or via the parent chain. The registry requires a scheme to exist before you can query or use it. | Register a topic scheme for this topic ID before performing this operation. Verify the topic ID is correct and that it matches a scheme in the registry. | error | No | TopicSchemeDoesNotExist(uint256) |
| DALP-4321 | The requested resource could not be found. | No topic scheme is registered under this name. The registry cannot resolve the name to a topic ID with an associated scheme. | Verify the name matches a scheme registered in the topic scheme registry. Names are case-sensitive and must match exactly. | error | No | TopicSchemeDoesNotExistByName(string) |
| DALP-4322 | Topic scheme registry implementation not set. | The system contract has no topic scheme registry implementation address configured. This address must be set before the system can bootstrap or perform operations that require the registry. | Set the topic scheme registry implementation address on the system contract using the appropriate system manager function before proceeding. | error | No | TopicSchemeRegistryImplementationNotSet() |
| DALP-4323 | Trigger already exists. | The contract already holds a conversion trigger with this ID. Triggers are identified by their ID, and each ID must be unique. | Use a different trigger ID, or disable the existing trigger before publishing a new one with the same ID. | error | No | TriggerAlreadyExists(bytes32) |
| DALP-4324 | Trigger expired. | The conversion trigger has passed its expiry timestamp. The contract checks that the current block timestamp does not exceed the trigger's configured expiry. | Publish a new conversion trigger with an updated expiry timestamp in the future, then retry the conversion. | error | No | TriggerExpired(bytes32) |
| DALP-4325 | Trigger not active. | The referenced conversion trigger exists but the contract deactivated it. Only triggers with their active flag set can be used for conversions. | Publish a new conversion trigger or reactivate the existing one through the appropriate trigger management call before retrying. | error | No | TriggerNotActive(bytes32) |
| DALP-4326 | The requested resource could not be found. | No conversion trigger exists for this trigger ID. The contract checks that the trigger's publishedAt field is non-zero before allowing a conversion. | Publish a conversion trigger with the expected trigger ID before attempting the conversion. | error | No | TriggerNotFound(bytes32) |
| DALP-4327 | Trusted issuers meta registry implementation not set. | The system contract requires a trusted issuers meta registry implementation address before it can bootstrap or deploy identity infrastructure. No address is set. | Set the trusted issuers meta registry implementation address on the system contract using the system manager function before proceeding. | error | No | TrustedIssuersMetaRegistryImplementationNotSet() |
| DALP-4328 | The requested resource could not be found. | The referenced multisig transaction does not exist at the requested index. The transaction index is out of range for the contract's transaction list. | Verify the transaction index is correct and within the range of recorded transactions before submitting the request. | error | No | TxDoesNotExist(uint256,uint256) |
| DALP-4329 | Tx executed. | The multisig contract already executed the transaction at this index. Each transaction can run only once. | Check the transaction status before submitting an execution request. The contract executes each transaction exactly once. | error | No | TxExecuted(uint256) |
| DALP-4330 | You do not have permission for this operation. | The caller's address does not match the address the contract requires for this operation. This contract restricts certain calls to a specific address, such as the factory that deployed it. | Ensure the call originates from the authorized address for this operation. Check the contract's deployment configuration to identify the required caller. | error | No | Unauthorized() |
| DALP-4331 | You do not have permission for this operation. | The caller does not hold any of the token roles required to perform this operation on the bound token contract. The feature logic enforces role-based access for every guarded call. | Grant the required token role to the caller on the token contract, then retry the operation. | error | No | UnauthorizedCaller() |
| DALP-4332 | You do not have permission for this operation. | An address other than the bound token contract called a compliance hook (transferred, created, or destroyed). The compliance contract enforces that only the registered token may invoke these hooks. | Ensure these compliance hooks are invoked only by the token contract associated with this compliance instance. The contract rejects direct calls from other addresses. | error | No | UnauthorizedCaller(address,address) |
| DALP-4333 | You do not have permission for this operation. | An address other than the associated contract submitted a claim to this on-chain contract identity. This identity contract only allows its associated contract address to issue claims on its behalf. | Trigger claim issuance through the associated contract rather than calling the identity directly from a different address. | error | No | UnauthorizedContractOperation(address) |
| DALP-4334 | You do not have permission for this operation. | The caller is not registered as an authorized converter for this token. The conversion minter checks the authorizedConverters mapping before allowing a conversion mint. | Add the caller's address to the authorized converters list on the token contract. Then retry the conversion mint. | error | No | UnauthorizedConverter(address) |
| DALP-4335 | You do not have permission for this operation. | The token feature factory checks the caller's role before creating or replacing a feature. The call needs TOKEN_FACTORY_MODULE_ROLE at the system level or GOVERNANCE_ROLE on the subject token, and the calling address held neither. | Ensure the caller holds TOKEN_FACTORY_MODULE_ROLE in the system, or holds GOVERNANCE_ROLE on the token whose feature is being created. Then resubmit the request. | error | No | UnauthorizedFeatureCreation() |
| DALP-4336 | You do not have permission for this operation. | The token contract, its configured compliance contract, or the system compliance contract must call compliance module hooks (transferred, created, destroyed). The address in the error did not match any of these permitted callers. | Route compliance hook calls through the token or its compliance contract. Direct calls to compliance module hooks from other addresses are not permitted. | error | No | UnauthorizedHookCaller(address) |
| DALP-4337 | You do not have permission for this operation. | The owning contract's permission check (canAddClaim or canRemoveClaim) returned false for the calling address. Contract identities delegate claim management authorization to their owning contract, and the caller was not approved. | Obtain approval from the owning contract for this address before calling addClaim, removeClaim, registerClaimAuthorizationContract, or removeClaimAuthorizationContract on the contract identity. | error | No | UnauthorizedOperation(address) |
| DALP-4338 | You do not have permission for this operation. | The multi-signature contract verified that the submitted signer address does not hold SIGNER_ROLE. Only registered signers may participate in or update multi-sig operations. | Verify that the signer address holds SIGNER_ROLE on the multi-sig contract. Add the address to the signer set before submitting a transaction or weight update that references it. | error | No | UnauthorizedSigner(address) |
| DALP-4339 | You do not have permission for this operation. | An address other than the associated token contract called the voting power feature's internal voting-units function. The feature restricts this query to the token itself. | Query voting units through the token contract or the feature's public getVotingUnits view function rather than calling the internal hook directly. | error | No | UnauthorizedVotingUnitsQuery() |
| DALP-4340 | Unknown expression type. | The on-chain RPN expression evaluator in the identity verification library encountered a node whose type does not match any known ExpressionType (TOPIC, AND, OR). The expression tree stored in the compliance rule contains an unrecognized node. | Reconstruct the compliance expression using only supported node types (TOPIC, AND, OR) and redeploy it. If the platform produced the expression, contact support and report the error. | error | No | UnknownExpressionType() |
| DALP-4341 | Unregistered key. | The directory contract requires you to register a key before you can set its implementation or instance. The key passed to setImplementation or setInstance carried no registered interface, so the contract rejected the call. | Register the directory key first by calling registerImplementation or registerInstance with the key and its expected interface. Once registered, setImplementation or setInstance will accept the call. | error | No | UnregisteredKey(bytes32) |
| DALP-4342 | Unsupported attribute. | The ERC-7786 cross-chain gateway source contract received a message attribute with a 4-byte selector that is not recognized by this gateway implementation. The gateway cannot forward messages that carry unsupported attributes. | Remove the unsupported attribute from the cross-chain message before sending, or use a gateway implementation that declares support for the attribute selector returned in the error. | error | No | UnsupportedAttribute(bytes4) |
| DALP-4343 | Unsupported execution operation. | Contract identities do not support ERC-734 execution operations (approve, execute). These functions always revert because contract-owned identities manage authorization through their owning contract, not through the ERC-734 execution queue. | Use the owning contract's authorization mechanisms instead of calling ERC-734 approve or execute on a contract identity. User wallet identities support these operations if needed. | error | No | UnsupportedExecutionOperation() |
| DALP-4344 | Unsupported key operation. | Contract identities block ERC-734 key management operations (addKey, removeKey). Contract-owned identities do not maintain a key registry; the owning contract controls access. | Manage access through the owning contract's permission model rather than calling ERC-734 addKey or removeKey on a contract identity. Use a user wallet identity if key-based access control is required. | error | No | UnsupportedKeyOperation() |
| DALP-4345 | Unsupported payment currency. | The token sale contract requires you to register payment currencies before accepting purchases. You have not added the currency address used in the buy call to the sale's accepted payment currencies list. | Use a payment currency that you have registered for this sale. Call paymentCurrencies on the sale contract to see which currencies the sale accepts, then resubmit with a supported currency address. | error | No | UnsupportedPaymentCurrency() |
| DALP-4346 | Value not positive. | The issuer-signed scalar feed has requirePositive enabled, and the submitted value was zero or negative. The feed enforces that all accepted values must be strictly positive when this flag is set. | Submit a value greater than zero. If the data source produces zero or negative values for this feed, disable the requirePositive flag when configuring the feed, or filter the update before submission. | error | No | ValueNotPositive() |
| DALP-4347 | Delegation signature expired. | The ERC-5805 delegateBySig call presented a signature whose expiry timestamp has passed. The Votes contract rejects expired signatures to prevent replay of stale delegation authorizations. | Generate a new delegateBySig signature with an expiry timestamp in the future and resubmit. The expiry argument in the error shows the timestamp the contract found to be expired. | error | No | VotesExpiredSignature(uint256) |
| DALP-4348 | Wallet already linked. | The identity factory already maps this wallet address to an existing identity contract. Each wallet address can link to at most one identity in the factory. | Check the existing identity for this wallet using the factory's lookup before attempting creation. If you genuinely need a new identity, remove the wallet from its current identity first. | error | No | WalletAlreadyLinked(address) |
| DALP-4349 | Wallet already marked as lost. | The identity registry has already recorded this wallet address as lost in the pending or accepted identity layer. The registry blocks recording a wallet as lost a second time, and a lost wallet cannot be the replacement wallet in a recovery. | Check the wallet's current status in the identity registry before initiating recovery. Use a different replacement wallet address, or contact the identity manager if the lost status was set in error. | error | No | WalletAlreadyMarkedAsLost(address) |
| DALP-4350 | Wallet in management keys. | The identity factory detected that the wallet address being registered also appears in the management keys list supplied during creation. A wallet's own address cannot serve as an explicit management key because the contract rejects redundant key entries to prevent configuration errors. | Remove the wallet address from the managementKeys array before submitting the identity creation request. The wallet already receives management access through its account registration. | error | No | WalletInManagementKeys() |
| DALP-4351 | Withdrawal already scheduled. | The airdrop contract already has a withdrawal scheduled and waiting for its timelock to elapse. Only one withdrawal can be pending at a time. | Wait for the existing scheduled withdrawal to complete or cancel it before scheduling a new one. Call executeWithdrawal after the timelock elapses, or cancelWithdrawal to clear the pending state. | error | No | WithdrawalAlreadyScheduled() |
| DALP-4352 | Withdrawal not due. | The ERC-4337 EntryPoint stake manager requires callers to wait for the full unstake delay after calling unlockStake before withdrawing. The current block timestamp has not yet reached the scheduled withdrawal time returned in the error. | Wait until the block timestamp reaches the withdrawTime value returned in the error, then resubmit the withdrawStake call. The error includes both the eligible withdrawal time and the current block timestamp. | error | No | WithdrawalNotDue(uint256,uint256) |
| DALP-4353 | Withdrawal not ready. | The airdrop contract has a withdrawal scheduled, but the timelock delay period has not yet elapsed. The contract requires a waiting period between scheduling and executing a withdrawal. | Wait until the timelock period has fully elapsed after the scheduleWithdrawal call, then resubmit executeWithdrawal. | error | No | WithdrawalNotReady() |
| DALP-4354 | Withdrawal not scheduled. | You called executeWithdrawal or withdrawTokens without a prior scheduleWithdrawal call. The two-step withdrawal process requires you to schedule a withdrawal before the contract executes it. | Call scheduleWithdrawal first to start the timelock period. After the delay has elapsed, call executeWithdrawal. | error | No | WithdrawalNotScheduled() |
| DALP-4355 | Wrapped error. | The ERC-4337 EntryPoint caught a revert from an inner call, such as a paymaster or account execution, and re-emits it as this error. The error carries the target address, the called function selector, the raw revert reason, and any extra detail bytes. The original failure originates inside the inner contract, not in the EntryPoint itself. | Decode the nested reason bytes to find the root revert. The target and selector fields identify which contract and function reverted. Resolve the inner error using those details. | error | No | WrappedError(address,bytes4,bytes,bytes) |
| DALP-4356 | Yield schedule active. | The token's yield schedule has already started: its start date is at or before the current block timestamp. The contract blocks minting after the yield schedule becomes active to preserve the fairness of yield distribution. | The contract closes minting once the yield schedule becomes active. Check the yield schedule's start date before attempting to mint, or contact the token issuer to confirm the minting window. | error | No | YieldScheduleActive() |
| DALP-4357 | Yield schedule already set. | A yield schedule is already associated with this token. The contract permits only one yield schedule per token and reverts if you attempt to set a second one. | Read the current yieldSchedule address on the token before calling set. If the token already has a schedule, the contract blocks assigning another one. | error | No | YieldScheduleAlreadySet() |
| DALP-4358 | A required value cannot be zero. | A required address parameter was the zero address. The contract requires a non-zero address at this position. | Supply a valid, deployed contract address for the parameter that triggered this error. Check each address argument in your call for the zero value. | error | No | ZeroAddress() |
| DALP-4359 | A required value cannot be zero. | The address parameter named in the field argument was the zero address. The contract requires a non-zero address for that field. | Provide a valid, deployed contract or wallet address for the field identified in the error. The field value in the error data names the specific parameter that was zero. | error | No | ZeroAddress(string) |
| DALP-4360 | A required value cannot be zero. | An address argument that must be non-zero was the zero address. The contract enforces this guard before performing the operation. | Provide a valid, deployed contract address for the parameter that was zero. | error | No | ZeroAddressNotAllowed() |
| DALP-4361 | A required value cannot be zero. | The owner address provided during ECDSA validator installation or update was the zero address. The validator requires a real key-holding address as the account owner. | Provide a non-zero EOA or contract address as the owner when installing or updating the ECDSA validator module. | error | No | ZeroAddressOwner() |
| DALP-4362 | A required value cannot be zero. | A token amount argument was zero where the contract requires a positive value. The operation requires a non-zero quantity to proceed. | Provide a positive, non-zero token amount. For conversion minting, this is the targetAmount to mint; verify the conversion calculation produces a value greater than zero. | error | No | ZeroAmount() |
| DALP-4363 | A required value cannot be zero. | You called distribute or batchDistribute with an amount of zero. The contract requires each distribution entry to transfer at least one token unit. | Ensure every distribution amount in your distribute or batchDistribute call is greater than zero. Remove or correct any zero-amount entries before submitting. | error | No | ZeroAmountToDistribute() |
| DALP-4364 | A required value cannot be zero. | The vesting airdrop claim calculated zero claimable tokens for this index. The vesting schedule has not released any additional tokens since the last claim, so the transfer amount is zero. | Wait until more tokens have vested before claiming. Check the vesting strategy's schedule to determine when the next release occurs. | error | No | ZeroAmountToTransfer() |
| DALP-4365 | A required value cannot be zero. | The denomination asset address provided to the maturity redemption feature was the zero address. The feature requires a deployed ERC-20 contract as the payout currency. | Provide a valid, deployed ERC-20 token address as the denomination asset when configuring the maturity redemption feature. | error | No | ZeroDenominationAsset() |
| DALP-4366 | A required value cannot be zero. | The conversion pricing calculation produced an effective price of zero. This can happen when the configured discount is so high that the round price rounds down to zero after applying basis-point arithmetic. | Reduce the discount percentage so that the effective price remains above zero, or increase the round price per share. Verify the discount and cap configuration for this conversion trigger. | error | No | ZeroEffectivePrice() |
| DALP-4367 | A required value cannot be zero. | You deployed the EntryPoint wrapper with a zero-address canonical EntryPoint. The wrapper has no target to forward calls to and cannot operate. | Deploy the EntryPoint wrapper with the correct canonical ERC-4337 EntryPoint address. Confirm the address is a deployed contract before passing it to the constructor. | error | No | ZeroEntryPoint() |
| DALP-4368 | A required value cannot be zero. | The face value parameter for the maturity redemption feature was zero. The face value determines the redemption payout per token unit, so it must be a positive amount. | Provide a positive face value (in the smallest unit of the denomination asset) when initializing the maturity redemption feature. | error | No | ZeroFaceValue() |
| DALP-4369 | A required value cannot be zero. | The recipient address for the conversion minting call was the zero address. The contract requires a real wallet or contract address to receive the minted target tokens. | Provide a valid, non-zero recipient address in the conversion minting call. | error | No | ZeroRecipient() |
| DALP-4370 | A required value cannot be zero. | The conversion calculation computed a target amount of zero. The principal or interest, after the contract applies the effective price and token decimals, rounds down to zero tokens of the target asset. | Increase the principal amount you are converting, or adjust the effective price configuration so that the resulting target amount is at least one token unit of the target asset. | error | No | ZeroTargetAmount() |
| DALP-4371 | A required value cannot be zero. | The treasury address provided to the maturity redemption feature was the zero address. The treasury holds the denomination asset used for redemption payouts and must be a valid deployed address. | Provide a valid, non-zero treasury address when initializing or reconfiguring the maturity redemption feature. | error | No | ZeroTreasuryAddress() |
| DALP-4372 | Cannot remove last validator. | Removing this validator module would leave the account with no validators. An account with no validators cannot validate UserOperations and becomes permanently inoperable. | Install a replacement validator module before removing the current one, so the account always retains at least one active validator. | error | No | CannotRemoveLastValidator() |
| DALP-4373 | Validator module limit exceeded. | Installing this validator module would exceed the account's maximum of {{maxValidators}} validator modules. The contract enforces this limit to keep UserOp validation gas costs bounded. | Remove an existing validator module before installing a new one, keeping the total at or below {{maxValidators}}. | error | No | TooManyValidators(uint256) |
| DALP-4374 | Operation unavailable on this contract. | The contract function you called has no implementation. The contract reached the selector but the body is a stub that always reverts. | This function is not available on this contract version. Check the API reference to confirm the correct method name and contract version, then retry with a supported call. | error | No | NotImplemented() |
| DALP-4375 | Paymaster not deployed. | The ERC-4337 EntryPoint simulation found that the paymaster address you supplied has no deployed bytecode. The EntryPoint rejects the user operation because it cannot call a contract that does not exist at that address. | Confirm the paymaster contract has deployed bytecode on the target network, then provide its correct address before resubmitting the user operation. | error | No | PaymasterNotDeployed(address) |
| DALP-4376 | Max staleness value is zero. | The price resolver requires a max staleness threshold that is greater than zero seconds. A value of zero would disable the staleness check entirely, which the contract does not permit. | Provide a positive number of seconds for the max staleness threshold. | error | No | InvalidMaxStaleness() |
| DALP-4377 | Paymaster entry point not contract. | Someone updated the paymaster's stored EntryPoint address to a value that has no deployed bytecode at that location. The contract requires the EntryPoint to be a live contract so it can call into it during validation. | Supply the address of the currently deployed EntryPoint contract. Confirm the address has code on the target network before calling setEntryPoint. | error | No | PaymasterEntryPointNotContract(address) |
| DALP-4378 | Asset type name required. | The asset factory requires every DALP asset deployment to include a non-empty asset type name, because the name is part of the CREATE2 salt. Without it, the predicted deployment address is ambiguous and the factory cannot proceed. | Call predictAccessManagerAddressForAssetType rather than the generic predictor. Supply a non-empty assetTypeName string that identifies the concrete asset type. | error | No | AssetTypeNameRequired() |
| DALP-4379 | Parent registry address is self-referencing, unsupported, or creates a cycle. | The chained registry requires a parent that is a distinct address implementing the required registry interface and absent from this contract's own chain. The provided address fails at least one of these conditions. | Provide the address of a different, already-deployed registry contract whose parent chain excludes this contract entirely. | error | No | InvalidParentAddress(address) |
| DALP-4380 | Implementation not registered. | The compliance module registry has no registered entry for the requested typeId. Either the typeId was never registered, or it refers to a different registry. The registry blocks the call to prevent deploying or upgrading with an unknown module type. | Verify that the typeId you are using matches a module type previously registered in this compliance module registry. Use the registry's enumeration to list registered types and confirm your typeId. | error | No | ImplementationNotRegistered(bytes32) |
| DALP-4381 | Instance deployment failed. | The CREATE2 deployment of the compliance module instance returned address zero, meaning the EVM assembly creation call did not produce a contract. This typically occurs when the same salt already has a deployment at that address or the bytecode is malformed. | Check whether a module instance for this engine and typeId was already deployed at the predicted address. If so, use the existing instance rather than redeploying. | error | No | InstanceDeploymentFailed() |
| DALP-4382 | Compliance module configuration contains a constraint violation. | The compliance module rejected the supplied configuration. The error includes a reason string describing the specific constraint that failed, such as a zero value where a positive one is required, a duplicate entry, or an address that exceeds an allowed limit. | Correct the configuration field identified in the error reason and resubmit. Consult the error reason string for the exact constraint. | error | No | InvalidConfig(string) |
| DALP-4383 | Not module admin. | The compliance module's updateConfig call requires the caller to be either the compliance engine that owns the module or an address the engine has granted module admin status. The caller held neither role. | Use an address that is the compliance engine for this module, or one that the engine's isModuleAdmin check returns true for. Contact the platform operator to have the correct address granted module admin status. | error | No | NotModuleAdmin() |
| DALP-4384 | Registry not available. | The compliance engine tried to resolve the compliance module registry through the system contract, but the system contract's registry address is zero. The registry address must be set on the DALPSystem proxy before compliance operations can proceed. | Confirm that the DALPSystem proxy has a non-zero complianceModuleRegistry address configured. Platform setup requires this; contact the operator if the registry address is absent. | error | No | RegistryNotAvailable() |
| DALP-4389 | Module family mismatch. | An attempt was made to upgrade a compliance module implementation to a contract from a different V1/V2 family than the one originally registered. Changing the family would break all existing per-engine proxy instances that delegate to the current implementation. | Supply a replacement implementation from the same module family (V1 or V2) as the originally registered type. To switch families, uninstall the existing module type and register a new one. | error | No | ModuleFamilyMismatch(bool,bool) |
| DALP-4390 | Type id mismatch. | The new compliance module implementation reports a typeId that does not match the typeId you are registering it under. The registry enforces this to prevent a module from replacing one of a different type. | Ensure the implementation contract's typeId() return value matches the typeId key you are registering it under. Check the implementation contract to confirm its declared type. | error | No | TypeIdMismatch(bytes32,bytes32) |
| DALP-4392 | Max chain depth exceeded. | A chained registry (topic scheme or trusted issuers) attempted to set a parent that would create a parent chain longer than 3 levels. The contract enforces this depth limit to prevent unbounded traversal during lookups. | Restructure the registry hierarchy so that no chain from a child registry to a root registry exceeds 3 hops. Remove an intermediate level or flatten the hierarchy before setting the parent. | error | No | MaxChainDepthExceeded() |
| DALP-4393 | Not a validator module. | The address passed as a validator module during account creation does not satisfy the ERC-7579 validator interface. The account factory verifies this before creating the smart account to prevent creating accounts with non-functional validators. | Use a module address registered in the account factory that implements the ERC-7579 Module interface with module type VALIDATOR. Confirm the module contract reports the correct module type before submitting. | error | No | NotAValidatorModule(address) |
| DALP-4394 | System registry not available. | The token identity registry factory requires one or more system registries to be set on the DALPSystem proxy before a token identity registry can deploy. The named registry address resolves to zero. | Confirm all required system registries are configured on the DALPSystem proxy. The registryName field in the error identifies the missing registry. Contact the platform operator to complete system setup. | error | No | SystemRegistryNotAvailable(string) |
| DALP-4396 | V1 hook must bypass adapter. | You called a state-changing compliance hook (transferred, created, or destroyed) directly on the V1 compliance module adapter. The adapter does not handle these hooks because V1 modules require the engine to be msg.sender, so the engine must call the wrapped V1 module directly. | Do not call state-changing hooks on the adapter contract. Read the v1Module() and config() from the adapter, then call the hook on the V1 module directly from the compliance engine. | error | No | V1HookMustBypassAdapter() |
| DALP-4400 | The account {{account}} does not have the required role to perform this operation. | The contract verified that account {{account}} does not hold the required role in the on-chain access manager. Each protected function consults the token's access manager contract, which stores role assignments. The access manager blocks the call when it finds no matching grant for that account. | Contact your administrator to request the necessary permissions. | error | No | AccessControlUnauthorizedAccount(address,bytes32) |
| DALP-4401 | Only the owner of this resource can perform this operation. | The function is restricted to the contract owner, and the calling address is not the current owner recorded on-chain. Ownership is a single address stored in the contract. The contract blocks every other address from owner-only calls. | Contact the owner or administrator for assistance. | error | No | OwnableUnauthorizedAccount(address) |
| DALP-4402 | The calling address is not permitted to perform this operation. | The contract delegates authorization to an external access manager, and that manager has determined the calling address is not permitted to call this function. The restriction is set at the access manager level, not within the token contract itself. | Contact your administrator to request access. | error | No | AccessManagedUnauthorized(address) |
| DALP-4404 | System already set. | The contract already has a non-zero DALPSystem proxy address stored. The contract permits this reference only once to prevent silent redirection. | The system reference is write-once after initial setup. If you need to point to a different system, re-deploy the compliance contract. Verify the currently configured system address before attempting to set it again. | error | No | SystemAlreadySet() |
| DALP-4405 | System not set. | The compliance contract tried to resolve the compliance module registry, but no DALPSystem proxy address has been configured yet. The registry address flows through the system proxy and the contract cannot resolve it without one. | Call setSystem on the compliance contract with the DALPSystem proxy address before attempting registry-dependent operations. Perform this one-time initialization during platform setup. | error | No | SystemNotSet() |
| DALP-4406 | Scope expression too complex. | The compliance module scope being set contains at least one expression array that exceeds 32 nodes, or a country list that exceeds 250 entries. The contract enforces these limits to keep on-chain evaluation within gas bounds. | Reduce each expression array in the module scope to 32 nodes or fewer and each country inclusion or exclusion list to 250 entries or fewer. Split into multiple scopes if you need more granularity. | error | No | ScopeExpressionTooComplex() |
| DALP-4407 | Management keys not supported. | The identity implementation deployed at this proxy does not support the V2 interface required for management keys. Management keys can only be set on identities backed by a V2-compatible implementation. | Deploy the identity proxy without management keys when using a V1 implementation, or upgrade to an implementation that supports the IDALPContractIdentityV2 interface before providing management keys. | error | No | ManagementKeysNotSupported() |
| DALP-4408 | Config immutable. | The CapitalRaiseLimit compliance module already has a configuration set from its first initialization, and the module policy locks that configuration permanently. The contract blocks any subsequent updateConfig call. | The CapitalRaiseLimit module configuration locks at initialization and the contract does not allow changes afterwards. To use different parameters, deploy a new module instance with the desired configuration. | error | No | ConfigImmutable() |
| DALP-4409 | Binding already active. | The compliance module binding for the given instance address is already in the active state. The contract prevents a no-op re-enable from silently succeeding, which would mask double-submission bugs. | Check the current binding state before calling enable. No further call is needed if the binding is already active. | error | No | BindingAlreadyActive(address) |
| DALP-4410 | Binding already inactive. | The compliance module binding for the given instance address is already in the inactive state. The contract prevents a no-op disable from silently succeeding, which would mask double-submission bugs. | Check the current binding state before calling disable. No further call is needed if the binding is already inactive. | error | No | BindingAlreadyInactive(address) |
| DALP-4411 | Binding not active. | The compliance module binding for the given instance address exists in the registry but has a disabled state. Operations such as reconfiguring the module or updating its scope require an active binding, so the contract blocks the call until you re-enable it. | Re-enable the compliance module binding for the instance address before retrying. Call the enable binding operation with the same instance address to restore it to active status. | error | No | BindingNotActive(address) |
| DALP-4412 | The requested resource could not be found. | The compliance module registry holds no record for the given instance address. The contract looks up the binding by address and finds no type identifier, meaning you never installed this module or it has already been fully uninstalled. | Verify that the instance address is correct and that the compliance module has been installed on the token. Install the module first if you have not registered it. | error | No | BindingNotFound(address) |
| DALP-4413 | You do not have permission for this operation. | The caller of setOnchainID does not satisfy authorization from any validator installed on the account. Single-owner validators require the recorded EOA owner to call directly. Threshold validators require the call to arrive as a UserOp self-call so a quorum check runs first. | Call setOnchainID from the authorized owner address, or route the call through a UserOp self-call if the account uses a threshold validator. Confirm which validator is installed on the account and satisfy its canManage check. | error | No | UnauthorizedOnchainIDSetter(address) |
| DALP-4414 | Caller {{caller}} is not authorized to create management keys for contract {{contractAddress}}. | The caller ({{caller}}) does not hold the authorization required to create management keys for the contract identity at {{contractAddress}}. Contract identity creation with management keys requires an authorized signer. | Use an authorized contract-management signer or ask an administrator to create the contract identity. | error | No | UnauthorizedContractManagementKeys(address,address) |
| DALP-4415 | Caller {{caller}} is not authorized to create an identity for wallet {{wallet}}. | The identity factory requires that the wallet creates its own on-chain identity by calling as itself. Caller {{caller}} attempted to create the identity for wallet {{wallet}}, but the factory accepts direct creation only when the caller and the wallet address match. This prevents any third party from pre-claiming a wallet's CREATE2 identity slot. | Call createIdentity as the wallet itself, or have the wallet owner sign createIdentityWithManagementKeyAuthorization before a relayer submits (required when seeding management keys or claim authorizers). | error | No | UnauthorizedWalletManagementKeys(address,address) |
| DALP-4416 | Account onchain id mismatch. | The account at the computed address already stores an ONCHAINID that does not match the expectedOnchainID you supplied in the creation parameters. The factory validates this when you supply a non-zero expectedOnchainID. | Supply the correct expectedOnchainID that matches the ONCHAINID already recorded on the existing account, or omit expectedOnchainID if you do not need to enforce an identity match. | error | No | AccountOnchainIDMismatch(address,address,address) |
| DALP-4417 | Account creation authorization deadline expired. | The authorization you supplied carries a deadline that has already passed. The factory checks block.timestamp against the deadline encoded in the authorization parameters and rejects the call when the deadline is in the past. | Request a new account creation authorization signed with a future deadline, then resubmit the call before that deadline passes. | error | No | ExpiredAccountCreationAuthorization(uint256) |
| DALP-4418 | Account creation authorization signature does not recover the required owner. | The account factory verified the EIP-712 authorization signature and recovered a signer address that does not match the required owner address. The signature is from a different key than expected. | Have the correct owner sign a fresh account creation authorization and resubmit. | error | No | InvalidAccountCreationAuthorization(address,address) |
| DALP-4419 | Unexpected validator init data. | You submitted account creation with non-empty validatorInitData but provided no explicit validator address. When you use the default validator, the factory sets the init data automatically and does not accept caller-supplied init data. | Remove the validatorInitData from the request when creating an account with the default validator, or supply an explicit validator address that accepts the provided init data. | error | No | UnexpectedValidatorInitData() |
| DALP-4420 | Empty batch. | You submitted batchCreate with an empty entries array. The feed factory requires at least one entry to process and rejects a call with nothing to do. | Include at least one entry in the batch before submitting. Each entry must be a fully specified feed creation request. | error | No | EmptyBatch() |
| DALP-4421 | Conversion trigger expiry timestamp is in the past. | When a non-zero expiry is provided, the contract requires it to be strictly in the future. The supplied expiresAt value refers to a time that has already passed. | Set expiresAt to a future timestamp, or pass zero to create a trigger that never expires. | error | Yes | InvalidExpiry(uint256) |
| DALP-4422 | The authorized converter must be a conversion feature. | When authorizing a converter address on the minter feature, the contract verifies via ERC-165 introspection that the address implements the IConversionFeature interface. The address at {{converter}} did not return a positive response to the interface check, so the contract rejected the authorization. | Select a loan token conversion feature address that supports IConversionFeature, then retry. | error | No | NotAConversionFeature(address) |
| DALP-4423 | Your account does not have enough resources for this operation. | The transfer approval record for the sender-recipient pair has a remaining allowance that is smaller than the requested transfer amount. The contract enforces that the approval covers the full amount before permitting the transfer. | Request a new transfer approval for an amount at least as large as the transfer you intend to make, or reduce the transfer amount to fit within the existing approval balance. | error | No | InsufficientApproval() |
| DALP-4424 | Basis per unit zero. | The fixed treasury yield feature configuration sets basisPerUnit to zero. The contract requires a non-zero value because yield calculations divide by basisPerUnit to compute payouts. | Set basisPerUnit to a positive non-zero value in the feature configuration before creating the fixed treasury yield feature. | error | No | BasisPerUnitZero() |
| DALP-4425 | Config data must be empty. | The token feature factory for this feature type does not accept configuration data. The default validateConfig implementation rejects any non-empty configData because this feature has no configurable parameters. | Submit the createFeature or replaceFeature call with an empty configData byte array for this feature type. | error | No | ConfigDataMustBeEmpty() |
| DALP-4426 | Config data required. | The token feature factory requires non-empty configuration data for this feature type, but the call arrived with an empty configData byte array. Features such as maturity redemption and fixed treasury yield encode their parameters in configData. | Provide the ABI-encoded configuration parameters for this feature type in configData. Consult the feature factory's validateConfig signature for the expected encoding. | error | No | ConfigDataRequired() |
| DALP-4427 | Discount too high. | The discountBps value in the conversion feature configuration exceeds 9999 basis points (99.99%). The contract enforces this limit so the effective conversion price remains non-zero: effectivePrice = roundPrice * (10000 - discountBps) / 10000. | Set discountBps to a value between 0 and 9999 inclusive in the conversion feature configuration. | error | No | DiscountTooHigh(uint256) |
| DALP-4428 | Duplicate converter address. | The initialConverters list you provided to the conversion minter feature contains the same converter address more than once. The factory checks for duplicates to ensure each converter appears exactly once. | Remove duplicate entries from the initialConverters array so every address appears exactly once before submitting the feature creation request. | error | No | DuplicateConverterAddress(address) |
| DALP-4429 | End date not after start date. | The endDate in the fixed treasury yield configuration is less than or equal to the startDate. The contract requires endDate to be strictly after startDate for the yield schedule to be valid. | Set endDate to a Unix timestamp that is strictly greater than startDate in the feature configuration. | error | No | EndDateNotAfterStartDate(uint256,uint256) |
| DALP-4430 | End date zero. | The endDate in the fixed treasury yield configuration is zero. The contract requires a non-zero endDate to define when yield accrual stops. | Set endDate to a non-zero Unix timestamp in the feature configuration before creating the fixed treasury yield feature. | error | No | EndDateZero() |
| DALP-4431 | Escrow required for lock method. | The conversion feature uses the Lock debt reduction method, which requires an escrow contract address to hold locked tokens, but you did not provide one. The contract enforces this dependency at configuration time. | Supply a non-zero escrow contract address in the conversion feature configuration when using the Lock debt reduction method. | error | No | EscrowRequiredForLockMethod() |
| DALP-4432 | Face value zero. | The faceValue in the maturity redemption feature configuration is zero. The contract requires a non-zero face value to calculate redemption payouts per token unit at maturity. | Set faceValue to a positive non-zero value in the maturity redemption feature configuration before creating the feature. | error | No | FaceValueZero() |
| DALP-4433 | Implementation address zero. | The implementation address provided to the token feature factory upgrade call is the zero address. The contract requires a deployed contract address for the new implementation. | Provide the address of the deployed feature implementation contract when calling validateImplementation or the upgrade path on the feature factory. | error | No | ImplementationAddressZero() |
| DALP-4435 | Interval zero. | The interval parameter in the fixed treasury yield feature configuration is zero. The contract requires a non-zero interval to define the time step between yield accrual periods. | Set interval to a positive non-zero duration in seconds in the feature configuration before creating the fixed treasury yield feature. | error | No | IntervalZero() |
| DALP-4436 | Conversion window start is after the end timestamp. | The contract requires conversionWindowStart to be at or before conversionWindowEnd when an end is set. A start timestamp later than the end produces a window that can never open. | Set conversionWindowStart to a timestamp that is equal to or earlier than conversionWindowEnd, then resubmit the configuration. | error | No | InvalidConversionWindow() |
| DALP-4437 | Converter address at position {{index}} is the zero address. | Each address in the initial converters list must be a non-zero address. The contract found the zero address at list position {{index}}. | Replace the zero address at index {{index}} with the intended converter address and resubmit. | error | No | InvalidConverterAddress(uint256) |
| DALP-4438 | Treasury address is the zero address. | The fixed treasury yield feature requires a non-zero treasury address to receive yield distributions. A zero address was supplied. | Supply the address of the treasury contract that will receive yield payments. | error | No | InvalidTreasuryAddress() |
| DALP-4439 | No feature to replace. | You called replaceFeature for a token that has no feature currently registered in this factory. The factory requires an existing feature before it can replace one. | Call createFeature first to register a feature for this token, then use replaceFeature to update it. | error | No | NoFeatureToReplace() |
| DALP-4440 | Rate zero. | The fixed treasury yield feature requires a non-zero yield rate. The rate field in the configuration data resolved to zero, so the factory rejected the deployment. | Supply a positive integer for the yield rate field in the feature configuration and resubmit. | error | No | RateZero() |
| DALP-4441 | Replacement not supported. | The permit feature factory does not support in-place replacement. Its configuration is always empty, so every predicted address for a given token is identical to the one already deployed. | To change permit behavior, remove the existing permit feature and deploy a new one. The replaceFeature path is not available for this factory type. | error | No | ReplacementNotSupported() |
| DALP-4442 | Replacement would collide. | The new configuration produces the same CREATE2 address as the feature already registered for this token. This happens when the replacement configuration is identical to the configuration used to deploy the current feature. | Change at least one configuration parameter so the replacement resolves to a different address, then resubmit the replaceFeature call. | error | No | ReplacementWouldCollide() |
| DALP-4443 | Start date zero. | The fixed treasury yield feature requires a non-zero start date timestamp. The startDate field in the configuration data resolved to zero, so the factory rejected the deployment. | Supply a valid Unix timestamp for the startDate field in the feature configuration and resubmit. | error | No | StartDateZero() |
| DALP-4444 | Implementation interface check failed. | The contract probed the proposed implementation address for ERC-165 support and the call reverted rather than returning a boolean. The implementation contract does not respond correctly to interface introspection. | Verify that the implementation address is a deployed contract that correctly implements ERC-165 supportsInterface without reverting, then resubmit the implementation registration. | error | No | ImplementationInterfaceCheckFailed() |
| DALP-4445 | Implementation missing interface. | The proposed implementation contract returned false when queried for ERC-165 interface support for the required feature interface (interfaceId). The contract exists but does not expose the expected capability. | Ensure the implementation contract declares support for the required feature interface via supportsInterface, then resubmit the implementation registration. | error | No | ImplementationMissingInterface(bytes4) |
| DALP-4446 | Not deployer. | Only the original deployer of the DALPDirectoryDeferredProxy can call initializeProxy. The caller's address does not match the deployer address recorded at construction. | Call initializeProxy from the same account that deployed the proxy contract. | error | No | NotDeployer() |
| DALP-4447 | Proxy already initialized. | The DALPDirectoryDeferredProxy has already run initializeProxy. The contract records a proxy-initialized storage flag on first call, and the contract blocks any further initialization attempt. | The proxy is ready for use and needs no further initialization. If you intended to upgrade, use the UUPS upgrade path instead. | error | No | ProxyAlreadyInitialized() |
| DALP-4448 | Proxy uninitialized. | The DALPDirectoryDeferredProxy has not yet run initializeProxy. The ERC1967 implementation slot holds no address, so the proxy cannot forward calls. | Call initializeProxy on the proxy contract before making any other calls through it. | error | No | ProxyUninitialized() |
| DALP-4449 | Bundler call failed. | The paymaster refund splitter tried to forward the bundler portion of a refund to the configured bundler address, but the native ETH transfer reverted. | Verify that the configured bundler address is able to receive native ETH (not a contract that rejects transfers), then retry the refund routing. | error | No | BundlerCallFailed() |
| DALP-4450 | Bundler share in basis points exceeds 10000. | The paymaster refund splitter requires the bundler share bps to be at most 10000 (100%). The supplied value {{bps}} is higher than that limit. | Provide a bps value between 0 and 10000 inclusive, where 10000 represents 100% of the refund going to the bundler. | error | No | InvalidBps(uint16) |
| DALP-4451 | Bundler address is the zero address. | The paymaster refund splitter requires a non-zero bundler address to route the bundler share of refunds. A zero address was supplied during initialization. | Supply the address of the bundler that will receive its share of EntryPoint refunds. | error | No | InvalidBundler() |
| DALP-4453 | Paymaster address does not point to a deployed paymaster contract. | The refund splitter requires the paymaster to be a deployed contract that implements depositEntryPoint() and returns a valid, deployed EntryPoint address. The supplied address is either zero, has no deployed code, or its depositEntryPoint call failed or returned a zero/undeployed address. | Supply the address of a deployed paymaster contract that implements depositEntryPoint() and whose depositEntryPoint resolves to a live EntryPoint contract. | error | No | InvalidPaymaster() |
| DALP-4454 | Paymaster call failed. | The paymaster refund splitter tried to deposit the paymaster portion of a refund to the paymaster's EntryPoint, but the deposit call reverted. | Verify that the paymaster's canonical EntryPoint is operational and accepts deposits, then retry the refund routing. | error | No | PaymasterCallFailed() |
| DALP-4455 | A required value cannot be zero. | The Multicall3Reference wrapper requires a valid underlying Multicall3 contract address. The address provided to the constructor was the zero address. | Provide the address of a deployed Multicall3 contract when constructing the Multicall3Reference wrapper. | error | No | ZeroMulticall3() |
| DALP-4456 | Not refundable. | The XvP settlement does not currently owe funds back to you. The refund path opens only when the settlement is cancelled or the cutoff date has passed, and your approval has not been executed. | Check the settlement status. If the settlement executed, use the delivery claim path instead. If the cutoff passed or the settlement was cancelled by the counterparty, confirm your approval state and retry the refund claim. | error | No | NotRefundable() |
| DALP-4457 | Stake management must call the canonical EntryPoint directly. | The EntryPointReference wrapper intentionally blocks stake management calls (addStake, unlockStake, withdrawStake). The canonical ERC-4337 EntryPoint records stake keyed by msg.sender, so forwarding through the wrapper would credit stake to the wrapper address rather than your contract. | On canonical-entrypoint chains, route paymaster stake operations (addStake, unlockStake, withdrawStake) and deposits through the canonical EntryPoint rather than the EntryPointReference wrapper. | error | No | StakeManagementMustCallCanonical() |