Tools
Collect without us
Every payment address is a tiny forwarder contract with your wallet baked in. Anyone can trigger the collection, and the money can only go to your wallet. If Axiomis Pay is down, you collect yourself — no keys, no permission, no support ticket.
Why this works
A payment address is created by the factory contract with CREATE2 from two numbers: your wallet (the receiver) and the address index. The factory function flush(receiver, indices, token, amounts) is open to everyone. For each index it deploys the forwarder if needed and moves the balance to receiver — the same receiver the address was computed from. Change the receiver and you get a different, empty address. So the caller pays gas and nothing else; there is nothing to steal.
Save the file now, while everything works: Dashboard → Money → If Axiomis Pay is down → Download addresses and factories. It lists every payment address with its index and receiver, the factory of each network and the token contracts. It holds no secrets.
With the script
The script is in the open repository: scripts/oss/self-flush.mjs. It checks that its address math matches the factory on chain, reads balances, and either prints the exact call or signs and sends it with any wallet that has gas.
# in a checkout of the Axiomis Pay open-source repository
npm install && npm run build -w @axiomis-pay/chains
# 1. see what is there and what to send
node scripts/oss/self-flush.mjs --export axiomis-pay-self-flush-you-live.json \
--network bsc --rpc https://bsc-rpc.publicnode.com --token usdt
# 2. sign and broadcast from here (the key only pays gas)
SELF_FLUSH_KEY=0x… node scripts/oss/self-flush.mjs --export axiomis-pay-self-flush-you-live.json \
--network bsc --rpc https://bsc-rpc.publicnode.com --token usdt --send| Option | Meaning |
|---|---|
--network | A network from the file: bsc, base, arbitrum, polygon, tron or a testnet. |
--rpc | Any public JSON-RPC node of that network. |
--token | usdt, usdc, native or a token contract. Run once per token. |
--send | Sign and broadcast with SELF_FLUSH_KEY. Without it the script only prints the call. |
--batch | Addresses per transaction, 20 by default. |
By hand
Without the script: open the factory in the network explorer (BscScan, BaseScan, Arbiscan, PolygonScan, Tronscan) → Contract → Write contract, connect any wallet and call flush with your receiver, the indices from the file, the token contract (0x0000000000000000000000000000000000000000 for the native coin) and an amount of 0 per index — zero means the whole balance. For TRON the script prints exactly these fields; signing goes through TronLink.
After collection
On EVM networks the forwarder is removed in the same transaction, the leftover native coin goes to your wallet as well. On TRON the forwarder stays and can be collected again. When Axiomis Pay is back, the gateway sees the balances as already collected — nothing to reconcile. Tested on BSC testnet: one call moved test USDT to the receiver with the gateway stopped (102 014 gas for one address).