Portuna Sweep
Testnet live · mainnet soonSweep deposits to your hot wallet without gas top-ups
Each deposit address authorizes your own sweep contract once, via EIP-7702. The contract has no owner and no upgrades, and can send only to the hot wallet written into its code. We batch up to 300 deposits per transaction, paid from your own gas wallet. Keys never leave your custody.
Ethereum
−30%
- Classic: top up, then transfer
- 62,297
- With Portuna Sweep
- 43,608
BSC no service fee
−74%
- Classic: top up, then transfer
- 50,667
- With Portuna Sweep
- 13,257
The “With Portuna Sweep” figure is the sweep's gas plus our fee, counted in gas units; BSC has no fee. Repeat sweep in a batch of 50 on Ethereum and 200 on BSC, gas measured on forks of mainnet.
The problem
Every token deposit costs two transactions and leaves dust behind
-
A gas top-up for every address
An address holding only USDT can't move it until someone sends it ETH or BNB. That is a second wallet to fund, a second transaction to sign and a second thing to watch — for every deposit.
-
Dust you will never collect
Top-ups never match the gas exactly. The leftover native coin stays stranded on thousands of addresses, and collecting it costs more than it is worth.
-
Two transactions per deposit
Top up, wait, transfer. At thousands of deposits a day, that is thousands of transactions to broadcast, track, speed up and retry.
How it works
Authorize once. Sweep in batches.
- 01
Authorize once
Each deposit address signs an EIP-7702 authorization for your own sweep delegate — a signature from your HSM, KMS or MPC, nothing sent on-chain. It travels with the address's first sweep.
- 02
We batch
Your backend asks the API to sweep a set of addresses. We pack up to 300 of them into one transaction sent from your gas wallet. An address that fails is skipped, the batch goes through.
- 03
Funds land in your hot wallet
The delegate can only send to the hot wallet written into its code. A signed webhook reports what was swept, what it cost, and why anything failed.
- 0x4f2c…9a1e 7702
- 0x81d0…37bb 7702
- 0xc6a9…02f4 7702
- 0x1be7…d85c 7702
- 0x9a03…6e17 7702
no ETH or BNB needed
1 tx
Batch transaction
- gas paid by your gas wallet
- up to 300 deposits
Your hot wallet
the only possible destination
Savings
What a sweep costs, measured
We benchmarked the classic sweep — top up the deposit with gas, then transfer — against our batched sweep on forks of Ethereum and BSC mainnet. The same benchmark table prices your fee.
- Ethereum
- −30% on every USDT and USDC sweep on Ethereum: you pay at most 70% of the classic cost, gas included
- BSC
- up to −75% on repeat sweeps on BSC, with no service fee: you pay network gas only
- Transactions a month
- 1 transaction per batch of up to 300 deposits, instead of two per deposit
Cost per deposit, in gas units
| Network and asset | Classictop-up + transfer | First sweep | Repeat sweep |
|---|---|---|---|
| Ethereum | |||
| USDT | 62,297 | 43,608 −30% | 43,608 −30% |
| USDC | 61,348 | 42,944 −30% | 42,944 −30% |
| ETH | 21,000 | 29,563 +41% | 15,826 −25% |
| BSC | |||
| USDT | 50,667 | 31,257 −38% | 13,257 −74% |
| USDC | 57,935 | 32,535 −44% | 14,535 −75% |
| BNB | 21,000 | 29,157 +39% | 13,981 −33% |
Batch of 50 on Ethereum and 200 on BSC, the sizes the service sends on mainnet. A first sweep carries the address's one-time authorization; a repeat sweep is every later deposit to the same address. Both include our fee, counted in gas units.
A first sweep of the native coin costs more than a plain transfer from the deposit, so sweep ETH and BNB from addresses already authorized for tokens.
At today's prices
10,000 USDT deposits a day on Ethereum: $3,266 a month the classic way, $2,286 with Portuna Sweep — $11,760 saved a year.
The same volume on BSC: $570 → $190 a month.
Gas 0.07 gwei, ETH $2,505; prices of Oct 10, 2026, 20:42 UTC.
Run your own numbersGlamsterdam
Ethereum's next upgrade, already live on Sepolia, makes creating on-chain state far dearer for everyone. Repeat sweeps still save 30%; the first sweep of an address that holds only tokens costs about as much as the classic way (+2.7%, gas only, no fee). Permanent deposit addresses gain the most.
Security
Non-custodial by construction
You don't have to trust us with where the money goes. The code on your deposit addresses can do exactly one thing.
Read the security model-
Your keys stay yours
Deposit keys never leave your custody. You sign one authorization per address and can still send from it, or revoke the delegation, at any time.
-
One destination, hard-coded
The delegate sends funds only to your hot wallet, written into its bytecode. A different hot wallet means a different contract and new signatures from you.
-
Only your batches
The delegate obeys only your batcher, and the batcher only your gas wallet. Nobody else, other partners included, can trigger, redirect or block your sweeps.
-
No admin keys, no upgrades
The contracts are immutable and have no owner: there is no role to steal and no switch to flip.
-
Check before you sign
Contract addresses derive from open bytecode.
verify-delegaterecomputes your delegate and checks it on-chain before a single authorization is signed.
Networks
Ethereum, with BSC included
- ETH
Ethereum
USDT, USDC and ETH. Standard rate: at most 70% of the classic cost, gas included.
- Testnet
- Sepolia · live
- Mainnet
- coming soon
- BNB
BSC
No service feeUSDT, USDC and BNB. You pay network gas and nothing else — two networks for the price of one.
- Testnet
- BSC testnet · live
- Mainnet
- coming soon
Pricing
Pay per successful transfer. Never more than classic.
-
Usage-based
Gas plus a fee for each successful transfer, deducted from your prepaid gas wallet. No subscription.
-
Capped at 70%
On Ethereum a token sweep costs at most 70% of the classic way, gas included. Our fee never takes a sweep above the classic cost.
-
BSC without a fee
On BSC you pay the network gas and nothing else.
Large volumes? Terms are negotiable. sales@portuna.example
For developers
One API call per deposit
A REST API described in OpenAPI 3.1, SDKs for Go and TypeScript, and signed webhooks.
- Authorizations from HSM, KMS or MPC. The SDKs turn a raw DER or r‖s signature into a valid EIP-7702 authorization and check it against the deposit address.
- Idempotent by your IDs. Repeat a request with the same
external_idand get the same sweep back. - Signed webhooks with retries. Swept, failed or rejected — with the exact gas and fee of every transfer.
- Test and live keys.
ptn_test_keys work on testnets,ptn_live_on mainnet.
API=https://api-testnet.portuna.io # testnet
# Register a hot wallet; the service deploys its delegate
curl $API/v1/hot-wallets -H "Authorization: Bearer $API_KEY" \
--json '{"chain_id": 11155111, "address": "0xYourHotWallet"}'
# → {"delegate": "0x…", "status": "pending", …}
# Sweep a deposit; the authorization is needed only for its first sweep
curl $API/v1/sweeps -H "Authorization: Bearer $API_KEY" --json '{
"external_id": "dep-42",
"chain_id": 11155111,
"hot_wallet": "0xYourHotWallet",
"account": "0xDepositAddress",
"token": "USDT",
"authorization": {"chain_id": 11155111, "address": "0xDelegate",
"nonce": 0, "y_parity": 1, "r": "0x…", "s": "0x…"}
}'
# → 202 {"id": "…", "status": "queued", …}
# queued; the result comes by webhook import { Client, authorizationDigest, authorizationFromSignature } from '@portuna/sdk'
const client = new Client({ baseUrl: API, apiKey })
// Register a hot wallet; the service deploys its delegate
const hot = await client.createHotWallet({ chain_id: 11155111, address: hotWallet })
// Sign the authorization digest with the deposit's key in your HSM, KMS or MPC
const digest = authorizationDigest({ chainId: 11155111, address: hot.delegate, nonce })
const signature = await kmsSign(digest) // DER or r‖s
const authorization = await authorizationFromSignature({
chainId: 11155111, address: hot.delegate, nonce, deposit, signature,
})
// Sweep a deposit; the authorization is needed only for its first sweep
const { sweep } = await client.createSweep({
external_id: 'dep-42', chain_id: 11155111, hot_wallet: hotWallet,
account: deposit, token: 'USDT', authorization,
}) FAQ
Questions processing teams ask
Do you hold our funds or keys?
No. Deposit keys stay in your custody, and funds move from deposit addresses straight to your hot wallet in the same transaction. The only money we handle is the native coin you prepay to your gas wallet to pay for gas.
What exactly does a deposit address sign?
An EIP-7702 authorization: “on chain N, my address runs the code of delegate D”, with the address's current nonce. It is valid on one chain only. D is your own delegate, returned by the API and verifiable from open bytecode.
Could you redirect our funds?
No. Your hot wallet is written into the delegate's bytecode, and the contracts have no owner and cannot be upgraded. Even someone holding your gas wallet's key could only sweep your deposits early — into your own hot wallet.
What happens if your service is down?
Nothing gets stuck. Deposit keys keep working: you can move funds from any address yourself, as before, and you can revoke the delegation to turn it back into a plain address.
Will our users notice anything?
No, they deposit to the same addresses as before. One exception: a sender that pays native coin with a hard 21,000 gas limit cannot pay an address that has code. Don't authorize addresses that receive such transfers, or revoke them.
How is the fee calculated?
For tokens, fee = max(0, 70% × classic benchmark − actual gas): you pay the larger of the gas and 70% of the classic cost. On BSC the rate is 0. Every sweep reports its gas, benchmark, rate and fee, so you can check each one.
Why does a first sweep differ from a repeat one?
The first sweep of an address carries its EIP-7702 authorization, which costs extra gas once. Every later deposit to the same address is a cheaper repeat sweep, so addresses that receive deposits again and again save the most.
Which networks and tokens?
Ethereum and BSC: USDT, USDC and the native coin. Testnets — Sepolia and BSC testnet — are live now; mainnet is coming soon.
How do we start?
Sign up in the console, issue a test API key, fund your gas wallet from a faucet, register a hot wallet and send your first sweep. No call with us needed.
Try it on testnet today
Self-serve on Sepolia and BSC testnet. Mainnet access opens soon — tell us about your volumes and we'll get you ready.