SettleMint
ArchitectureComponentsToken Features

Transaction Fee Accounting

Tracks per-transaction fees for off-chain reconciliation without collecting them on-chain. Emits events for invoicing and reporting workflows. No holder economic impact.

Transaction Fee Accounting records fee obligations for mint, burn, transfer, and redemption operations without collecting tokens on-chain. Platforms use the emitted accounting events to invoice, report, or settle those obligations outside the token contract. Governance users can set account exemptions from the transaction fee accounting capability card when an address should be excluded from fee tracking.

Related pages:

Interface

Unlike Transaction Fee, Transaction Fee Accounting tracks fee obligations without moving or withholding tokens.

CapabilityWho can callInputsOn-chain effectEmitsNotes
Record fee on operationAutomatic (hook)Triggered on mint, burn, transfer, redemptionIncrements accrued counter; no token movementFeeAccruedDoes not rewrite amounts
Reconcile accrued feesGOVERNANCE_ROLENoneResets accrued counter; closes accounting periodFeesReconciledOff-chain settlement trigger
Set fee ratesGOVERNANCE_ROLEMint, burn, and transfer rates in bpsUpdates fee rate configurationFeeRatesUpdatedRedemptions use the burn fee rate; blocked after freeze
Set fee recipientGOVERNANCE_ROLERecipient addressRedirects future reconciliation targetFeeRecipientUpdatedEffective immediately
Set fee exemptionGOVERNANCE_ROLEAccount address + exempt flagMarks address as exempt from trackingFeeExemptionSetAvailable from the dapp capability card and API
Freeze fee ratesGOVERNANCE_ROLENonePermanently locks all ratesFeeRatesFrozenIrreversible

Business impact

  • Holders: No on-chain economic impact. Fees are tracked, not collected, and token amounts are not rewritten.
  • Issuer / platform: Fee obligations accumulate off-chain; platform must run a reconciliation workflow to actually collect.
  • Economics: Decouples fee obligation recording from settlement. Enables periodic bulk invoicing rather than per-transaction collection.

Risks & abuse cases

  • Reconciliation drift: If reconcileFees() is not called on schedule, accrued fee obligations grow without bound in accounting records. Platforms must maintain a disciplined reconciliation cadence.
  • Exemption scope creep: setFeeExemption() can exempt specific addresses from fee tracking. If over-used, fee accounting becomes incomplete. Exempting the zero address is valid and excludes mint-side or burn-side fee tracking because mint and burn operations use the zero address on one side of the token movement.
  • No on-chain enforcement: Fee obligations are advisory. Off-chain systems must act on emitted events to collect. There is no automatic enforcement mechanism.

Controls & guardrails

RoleActionsRecommended guardrail
GOVERNANCE_ROLEsetFeeRates() - set mint, burn, and transfer ratesDocument changes and freeze rates when they should no longer move
GOVERNANCE_ROLEreconcileFees() - mark accrued fees as reconciled for a periodAutomate via scheduled off-chain job
GOVERNANCE_ROLEsetFeeExemption(address, exempt) - exempt a holder, system address, or the zero address for mint/burn accounting pathsAudit exemption list; keep exemptions narrow and time-bound
GOVERNANCE_ROLEfreezeFeeRates() - permanently lock the configured ratesTreat as irreversible

Failure modes & edge cases

  • Accounting without collection: Recorded obligations that are never settled create audit discrepancies. Establish a settlement SLA.
  • Concurrent fee events: Fee accruals are added to the existing indexed total. Reconciliation resets the accrued total and adds the reconciled amount to the reconciled total, so reporting jobs should treat FeeAccrued and FeesReconciled as period events rather than overwriting earlier events.
  • Rate changes mid-period: If fee rates change during a billing period, events reflect the rate at the time of the transaction. Off-chain systems must handle rate changes in reconciliation logic.
  • High event volume: High-frequency tokens produce large event logs. Ensure off-chain indexing infrastructure handles the volume.

Auditability & operational signals

  • FeeAccrued(payer, from, to, feeType, operationAmount, feeBps, feeAmount, timestamp) - emitted per tracked operation. Use feeAmount for the accrued obligation and feeType to distinguish mint, burn, transfer, and redemption operations.
  • FeesReconciled(caller, recipient, amount, periodEnd) - emitted when accrued fees are reconciled. After reconciliation, the accrued total returns to zero and the reconciled total increases by the reconciled amount.
  • FeeRatesUpdated(sender, oldRates, newRates) - emitted when fee rates change.
  • FeeRecipientUpdated(sender, oldRecipient, newRecipient) - emitted when the recipient changes.
  • FeeRatesFrozen(sender) - emitted when rate changes are permanently locked.
  • FeeExemptionSet(sender, account, exempt) - emitted when exemption status changes.

Dependencies

  • No external ERC-20 required.
  • No other features required.
  • Off-chain reconciliation infrastructure required (indexer, invoicing system, or subgraph).

Compatibility & ordering notes

  • supportsRewriting = false - does not modify transfer amounts. Safe to run at any position.
  • Mutually exclusive with Transaction Fee in asset templates and token creation requests. Use Transaction Fee for on-chain collection, or Transaction Fee Accounting for off-chain settlement records.
  • Compatible with all other features. There are no ordering constraints.

Change impact

  • Enable after launch: Historical transactions before activation are not retroactively tracked.
  • Disable: In-progress uncollected obligations remain in off-chain records. Reconcile before disabling.
  • Rate change: Effective immediately. Off-chain systems must handle rate history for correct reconciliation.

See also

On this page