Fees
What Warrant charges today: nothing, and the code agrees.
Warrant does not charge a fee. No fee model has been decided, and nothing in the codebase computes, deducts or records one.
$ grep -rniE "\bfees?\b" packages/db/src packages/chain/src apps/api/src
(no matches)This page describes an absence
Every other page in Concepts documents something that is built. This one documents something that is not. It exists because "what does this cost?" is a question anyone integrating a payments product asks immediately, and an unanswered question is worse than an honest gap.
What the ledger actually does
Money moves between four accounts, and the entries for a settlement net to zero across exactly two of them:
| Account | Holds |
|---|---|
available | An organisation's unheld balance. |
held | Committed to open warrants. |
payee | Paid out. |
external | Deposits in, withdrawals out. |
Every movement is grouped by a tx_ref, and every tx_ref must net to zero.
There is no fee account and no leg that could carry one, so a fee cannot be
taken today without a schema change that would be visible in a migration.
You can verify this yourself. Release a warrant for 8400000 in the sandbox and
sum the ledger entries: the payee is credited 8400000 and the organisation's
held balance falls by 8400000. The figures match exactly, because nothing sits
between them.
What a partial release does with the remainder
On a partially_released warrant, the share set by released_bps goes to the
payee and the entire remainder returns to the organisation's available
balance. It is not retained, and there is nothing for it to be retained by.
amount "8400000"
released_bps 5000
→ payee 4200000
→ available 4200000What is not decided
To be explicit about the shape of the gap, none of the following exist as a decision, a number, or a line of code:
- whether pricing is per warrant, per settled amount, a subscription, or none of those
- whether a fee would apply to refunds, partial releases, or expiries
- who bears a network fee once settlement is genuinely onchain
- any figure, rate, tier or minimum
If you are modelling costs for an integration, model Warrant's own charge as zero and revisit it when this page says something different. Do not infer a rate from anything else in these docs, because there is nothing to infer it from.
Amounts, when there is something to charge
When a fee model does exist, it will follow the same convention as every other
amount here: an integer string of the asset's smallest unit, validated against
^[0-9]+$.
"8400000" 8.40 USDC
8400000 rejected — a JSON number
"8.40" rejected — not the smallest unitA rate, if there is ever one, will be basis points as an integer — the same form
released_bps already uses — for the same reason: a percentage stored as a float
is a percentage two systems can disagree about.