SettleMint
ArchitectureSecurity

From External Mint Instruction to On-Chain Transaction

How DALP protects EVM mint instructions from duplicate client retries, replayed requests, nonce conflicts, and unauthorized supply changes.

DALP minting becomes a signed EVM instruction to an asset contract. Replay protection has to answer three separate questions:

  1. Is this API request a retry of the same client instruction?
  2. Is this blockchain transaction already queued, pending, completed, failed, or cancelled?
  3. Is the caller authorized to change supply on this specific asset?

What this is

Use this control map before automating DALP minting. It shows how client retries, transaction status checks, custody approvals, and supply controls fit together. It is not an API reference or a legal approval model.

Who this is for

ReaderDecision this page supports
Operations leadDecide how retries, approvals, and transaction status should be handled in a mint runbook
Compliance or risk reviewerConfirm which controls prevent duplicate or unauthorized supply changes
API integratorChoose idempotency keys, retry behavior, and reconciliation checks for mint automation
Asset issuerUnderstand which responsibilities stay with DALP and which stay with the institution

Control model

Replay protection is layered. No single layer is the whole control.

Rendering diagram...
LayerWhat it protectsPrimary controlWhat it does not prove
API idempotencyDuplicate HTTP retriesIdempotency-Key tied to method, path, and request bodyFinal on-chain state
Transaction queueDuplicate blockchain submissionSender wallet + chain ID + operation-scoped idempotency keyLegal approval outside the platform
Nonce coordinationConcurrent transaction conflictsOrdered nonce assignment per signing address and chainThat the business instruction is approved
AuthorizationUnauthorized supply changesPer-asset Supply Management role and wallet verificationThat the recipient can receive tokens
Custody policySigning without operational approvalConfigured signer, custody provider, or HSM policyOn-chain compliance success
Asset contractInvalid mint executionEVM role checks and compliance modulesOff-chain reserve or legal sufficiency unless represented by configured controls
ReconciliationOutcome visibilityTransaction status, indexer updates, and subscribed webhook eventsThat a cached API response is the authoritative final on-chain outcome

Mint instruction flow

A mint instruction follows this sequence for single-recipient and batch minting.

Rendering diagram...

If the caller sends the same Idempotency-Key with the same request body, DALP treats it as the same client instruction during the idempotency window. If the caller sends the same key with a different body, path, or method, DALP rejects it as key reuse.

For blockchain execution, DALP scopes the queued transaction by sender wallet, chain ID, and operation kind. A retry with the same key reattaches to the existing transaction request instead of submitting a second mint. A retry that tries to change wallet routing under the same key is rejected.

Nonce management sits below the client idempotency key. After the mint instruction is accepted into the queue, DALP coordinates nonce assignment per signing address and chain so concurrent mints from the same wallet are ordered instead of racing the network. Retries reuse the tracked transaction request and its nonce path; stuck or conflicting transactions are handled through transaction status, retry, replacement, or operator recovery flows rather than by issuing a second business mint instruction.

What the client must do

Client responsibilityRequired practice
Generate a stable keyUse one Idempotency-Key per business mint instruction. Keep it stable across network retries.
Do not reuse keys across instructionsA second mint, even to the same recipient and amount, needs a new key.
Keep the request body stableChanging recipients, amounts, token address, executor route, or wallet route means it is a different instruction. Use a new key.
Store the key with the business recordPersist the key with the ticket, trade, subscription, or operations record that authorized the mint.
Reconcile by transaction statusTreat the HTTP response as acceptance or completion of the API operation, then reconcile the transaction and indexed asset state.
Use subscribed webhooks for downstream systemsDo not let a cached retry response become the only proof that downstream ledgers use.

When a mutation request is sent without an explicit Idempotency-Key, DALP can still process it, but the client has no stable key to use for a safe retry. Production integrations should send the header themselves.

Mint authorization and supply controls

Minting is controlled at the API layer and again on-chain.

ControlEnforced before signingEnforced on-chainOwner
User authentication and organization scopeYesNoInstitution / DALP deployment
API key access scopeYesNoInstitution
Per-asset Supply Management roleYesYesAsset administrator
Wallet verificationYesNoInstitution
Custody or HSM approval policyDuring signingNoInstitution / custody provider
Paused asset stateYesYesEmergency role
Recipient identity and complianceValidated before execution where availableYes, by configured compliance modulesCompliance manager
Supply cap and collateral modulesSurfaced through simulation or revert handlingYesGovernance / compliance manager

Single-recipient minting calls the asset contract's mint function. Batch minting calls batchMint. DALP asset contracts restrict both paths to the per-asset SUPPLY_MANAGEMENT_ROLE.

Supply controls depend on the asset configuration:

ControlEffect on minting
Supply capPrevents mints that would exceed the configured circulating supply cap
Collateral requirementPrevents mints when the configured collateral claim is missing, expired, or insufficient
Recipient compliancePrevents issuance to a recipient that does not satisfy configured identity or eligibility rules
Paused stateBlocks minting until the asset is unpaused

Retry and outcome rules

SituationExpected behavior
Same key, same request, original still runningDALP reports the existing in-flight operation or waits for the same queued transaction
Same key, same request, original completedDALP returns the existing transaction result or reads current state after indexing
Same key, different request bodyDALP rejects the request as idempotency-key reuse
Same key, different wallet routeDALP rejects the retry because it no longer targets the same execution route
Previous transaction failed or was cancelledRetry with a new idempotency key after the cause is resolved
Client did not receive the HTTP responseRetry with the same key, then check transaction status and indexed asset state
HTTP response was served from cacheTreat it as the same API response, not as fresh chain finality

The idempotency window is 24 hours. After that window, use a new key and reconcile the earlier transaction before issuing another mint instruction.

What DALP does not decide

DALP's replay and idempotency controls do not replace institutional approval policy.

Not covered by idempotencyRequired owner
Whether a mint is legally approvedInstitution and its counsel
Whether off-chain cash, collateral, or subscription documents are sufficient unless represented by configured DALP controlsInstitution
Whether an external ledger has posted the mint correctlyIntegration owner
Whether a custody provider's approval matrix is appropriateInstitution / custody provider
Whether an EVM transaction remains canonical before the configured finality process completesChain operations and reconciliation process

DALP is EVM-only. These controls describe DALP's EVM transaction path and do not imply support for non-EVM chains, bridge settlement, or cross-chain replay protection.

Operational checklist

Before mintingDuring retryAfter completion
Confirm token address, chain, recipient list, amounts, and decimalsReuse the same idempotency key only for the same instructionRecord transaction hash, transaction status, and indexed total supply
Confirm Supply Management role and wallet verification methodDo not change executor or wallet route under the same keyReconcile webhooks or transaction status with the business record
Confirm cap, collateral, pause, and recipient eligibility controlsIf the request is still in flight, wait or poll status instead of issuing a new keyInvestigate cached responses separately from final chain outcome

Where to go next

On this page