Skip to content
PortunaPortunaPortunaDocsTestnet

Fees and tariffs

You pay per successful sweep: its gas plus a fee, both in the chain’s native coin, from your gas wallet. There is no subscription. Your exact rates are in your tariff, GET /v1/tariff.

For a token, you pay the larger of two amounts: the gas of the sweep, or X of what the same sweep would cost the classic way. The fee is the difference:

fee = max(0; X × classic benchmark − gas of the sweep)

  • X is your rate on the chain, rate_bps in the tariff: the standard is 70% (7000). BSC has no service fee: there X is 0 and you pay only the gas.
  • The classic benchmark is the gas the same sweep takes the classic way: send the deposit address gas, then transfer the token from it. It depends on the chain, the token and the kind of sweep.
  • The gas of the sweep is its share of the batch transaction (below).
  • Everything is counted in gas and multiplied by the batch’s gas price, so no exchange rate is involved.

If our gas is below X of the classic cost, you pay exactly X of the classic cost. If it is not, you pay only the gas, with no fee. The fee never makes a sweep cost more than the classic way.

The classic way needs no top-up to move ETH or BNB: the deposit address pays the gas with the coin itself, and a plain transfer takes 21,000 gas. So a native coin sweep costs its gas plus a markup M, native_markup_bps, and never more than that plain transfer:

fee = min(M × gas; max(0; 21,000 − gas))

A batch is one transaction, and the chain does not report the gas of each address in it. The batch gas is shared out like this:

  • the first sweep of an address carries the cost of setting its delegate, by the table in extra_gas of the tariff;
  • the rest is split evenly between all the addresses of the batch.

The shares add up to the gas of the transaction. A sweep that failed on chain bears its share but no fee; a sweep rejected before sending bears nothing. Revocations cost only their gas, with no fee.

Sepolia, X = 70%. A batch of 50 addresses: 10 first sweeps of addresses that held only tokens (first_new) and 40 repeat sweeps.

Gas of the sweepBenchmark70% of itFeeYou pay
first_new243,687237,233166,0630243,687
repeat18,07853,63337,54319,46537,543

For the whole batch you pay 3,938,590 gas against 4,517,650 the classic way, 13% less. Each repeat sweep costs 30% less than the classic way.

Each swept sweep, in GET /v1/sweeps/{id} and in its webhook, carries what its fee was computed with:

FieldMeaning
kindrepeat, first or first_new
gasthe sweep’s share of the batch gas
classic_gasthe benchmark
rate_bpsthe rate: X, or M for the native coin (7000 = 70%)
gas_cost, feegas and fee in wei

The gas price is that of the transaction tx_hash. For a token:

fee = max(0; rate_bps × classic_gas / 10,000 − gas) × gas price

and for the native coin:

fee = min(rate_bps × gas / 10,000; max(0; classic_gas − gas)) × gas price

Fees accrue on your gas wallet as fees_due in GET /v1/balance, and are withdrawn from it periodically. Until then they stay in reserve and are not spent on gas: available is the balance minus fees_due, what is left for gas. If the gas wallet holds little beyond the fees due, sweeps wait for a top-up.

GET /v1/tariff shows, for each chain:

  • rate_bps and rate: X for tokens;
  • native_markup_bps and native_markup: M for the native coin;
  • classic_gas: the benchmark of each asset, new for an address without an account on the chain and existing for one with an account;
  • extra_gas: what a first sweep adds, for the delegation and for creating the account.

Benchmarks are measured per chain and revised when a hard fork changes gas costs. The rates of your account are agreed with us; the testnets charge them in test coins.