Appearance
Fees & economics
Blazpay charges in three places, and only three. Everything else a user pays is network gas or a third-party provider's own spread.
| Where | Rate | Mechanism | Configurable by |
|---|---|---|---|
| Swap & bridge settlement | 0.1% of input amount | BlazpayRelayer.inPercentFee = 10 (denominator 10_000) | Contract owner, per chain |
| Autopilot trades | 20 bps (0.2%) of output amount | BlazpayAutopilotV1.feeBps = 20 | Contract owner |
| CSIP auto-claim | 0.00003 ETH per claim | BlazpayDcaV2.autoClaimFeePerClaim | Contract owner |
Swap and bridge — 0.1% flat
The fee is computed inside executeMetaTransactionSwap before any funds move:
solidity
uint256 fee = 0;
if (enableFees) {
if (_metaTx.isNative) {
fee = feeAmount != 0 ? feeAmount : (_metaTx.amount * inPercentFee) / 10_000;
} else if (inPercentFee != 0) {
fee = (_metaTx.amount * inPercentFee) / 10_000;
}
}Two knobs, and setFees enforces that only one can be non-zero at a time:
inPercentFee— basis points against10_000. All 22 deployed chains runinPercentFee = 10, i.e. 0.10%.feeAmount— a flat per-transaction amount, only honoured on native-input swaps. Currently zero everywhere.
For an ERC-20 input the fee is pulled as a second transferFrom on top of the swap amount, so the user's approval must cover amount + fee. That is why TradeManager.getAllowance reads inPercentFee and enableFees off the relayer before comparing the allowance — see quote → settle pipeline.
For a native-input swap the requirement is msg.value >= nativeValue + fee.
No hidden spread
Blazpay does not mark up the quote it receives from a provider. The number the user sees in the UI is the provider's own output estimate; the 0.1% is taken from the input side and shown separately. Whatever spread exists inside a given aggregator's route is that aggregator's, and comparing 21 of them is precisely how it gets competed down.
Where the fees accumulate
Fees stay in the relayer contract on each chain until an owner calls withdrawEth() or withdrawToken(token). GET /api/defi/fees/summary walks the deployment record, reads native and known-token balances per chain over RPC, prices them via CoinGecko and returns a USD total. It caches for five minutes; ?force=1 bypasses.
Only tokens with a known coingeckoId in the Token collection are checked — long-tail and spam tokens never accumulate as relayer fees, and skipping them keeps the RPC fan-out inside the timeout on big-catalogue chains.
Autopilot — 20 bps on output
Autopilot charges on the measured output of each trade, not the input:
amountOut_measured → fee = amountOut * feeBps / 10_000
credited_to_agent = amountOut - feeMeasuring the delta rather than trusting an executor-supplied number is a deliberate design decision inherited from a DCA V1 bug — see autopilot vault. Platform earnings accrue inside the vault and are swept with withdrawEarnings.
The 20 bps figure and the output-side basis are both locked decisions for v1; changing either is a product call, not an implementation detail.
CSIP auto-claim — a gas-margin fee
CSIP itself takes no percentage. Its only charge is optional: if a user enables auto-claim, the platform's executor delivers each filled buy to their wallet automatically instead of making them send a claim transaction.
- Fee:
0.00003 ETHper claim, roughly 3× the actual gas cost on Arbitrum — the margin is the platform's. - It is escrowed up front: at position creation the frontend passes
fee × ordersas excessmsg.value, andCreatePositionAutoBuytreats the excess as auto-claim escrow. That makes create-plus-opt-in a single signature. disableAutoClaimrefunds the unused escrow.- Earnings accrue to
platformEarningsand are swept withwithdrawEarnings.
CSIP also has a $1 minimum per order, validated server-side in create-position.
What Blazpay does not charge for
| Feature | Cost to user |
|---|---|
| BlazAI chat | Free. Quota only on the contract auditor (default 3 audits per wallet, SystemSetting.audit_free_limit_per_wallet) |
| Contract audit, rug check, wallet card, approval scan | Free |
| Limit orders | No Blazpay fee; iZiSwap's own mechanics apply |
| Portfolio, history, price alerts | Free |
| Fiat on/off-ramp | No Blazpay fee. Each provider (OnRamp.money, Changelly, AlchemyPay, Transak, MoonPay) charges its own spread, and the UI compares them side by side |
| Perpetuals | Orderly Network's fee schedule applies |
| dApp builder | Iteration quota per project; paid tiers via dappSubscriptionModel |
Gas: who pays
| Flow | Gas payer |
|---|---|
| Swap / bridge | The user. They send executeMetaTransactionSwap themselves — the "meta-transaction" here is about signature provenance, not gas abstraction |
| CSIP scheduled buy | The platform's executor wallet |
| CSIP claim (manual) | The user |
| CSIP claim (auto) | The platform's executor, recovered via the 0.00003 ETH fee |
| Autopilot trade | The platform's executor |
| Approval revoke | The user |
| dApp contract deploy | The project's ZeroDev smart account, funded by the user |
The executor wallet needs a gas top-up schedule
Both CSIP and Autopilot execution depend on PRIVATE_KEY_EXECUTOR (0x5935745431D1385ae1a9CE2644fb5f5d1f140459) holding native gas on each automation chain. When it empties, scheduled buys silently stop retrying. Arbitrum consumption is roughly 0.00002 ETH per batch. See monitoring.
Revenue surfaces summary
The ecosystem layer (marketplace commissions, presale, BlazPoints sinks) has its own economics documented under marketplace and rewards.