1 · How to get your money out of a bot, yourself
Works when The Desk is up. Works when The Desk is down. Works if The Desk never comes back.
Your bot's money sits inside a smart contract on Robinhood Chain. A smart contract is a program on the blockchain that nobody — not us, not anyone — can edit or override once it is deployed. When you opened the bot, the contract recorded your wallet address as the bot's owner (in the code it is called the maker).
Every one of these contracts contains a function that does one thing: send everything in this bot back to the wallet that owns it, immediately, without selling anything. The contract will only run it if the person calling is you. We cannot call it for you, we cannot call it on your funds, and we cannot stop you calling it.
0x… string — section 2 finds it for you), and about 0.0002 ETH for gas.
That is roughly a hundred times more than a withdrawal actually costs on this chain.The five steps
-
Get your bot id
Every bot has an id: a 66-character string starting with
0x. If The Desk is online, it is shown on the bot's detail page. If it is offline, use the finder in section 2 — it reads the blockchain directly and lists every bot your wallet owns, or follow the manual Blockscout method described there. -
Open your bot's contract on Blockscout
Blockscout is the public block explorer for Robinhood Chain. It is not run by us. Find your bot type in the cards below and press Open write form — it takes you straight to the page where you can run contract functions.
https://robinhoodchain.blockscout.com/address/<contract>?tab=write_contract
-
Connect your wallet on that page
Near the top of the "Write contract" tab there is a Connect wallet button. Press it and approve in MetaMask (or whichever wallet you use). Make sure the wallet is on Robinhood Chain (chain id 4663) and that it is the same wallet that opened the bot — any other wallet will be rejected by the contract.
-
Find the function and fill in the fields
Scroll the list of functions to the one named in your bot's card below —
stop,withdraworcancel. Expand it and paste your bot id into theidfield. Some functions have extra fields; the cards give you the exact value to type into each one. They are always the same three values, so you can copy them blind:0x,0,false.5. stopid (bytes32)0xf1dd7569911dac84b29e4446d373fac1195ee64df24601fa42ea55b703a03160← your bot id goes hereroute (bytes)0x← literally the two characters 0xminOut (uint256)0sellAll (bool)false← false = give me my tokens back, do not sell themWriteDo not put anything in the "Send native ETH" / value box. Withdrawing costs only gas. If a field asks for an amount to send, leave it at 0. -
Press Write and confirm in your wallet
Your wallet pops up with the transaction. Confirm it. A few seconds later the transaction is mined and everything the bot was holding is in your wallet — the ETH arrives as normal native ETH, and any tokens the bot had bought arrive as those tokens. The bot is now closed and can never be restarted; open a new one if you want to keep trading.
You can check it landed by opening your own address on Blockscout and looking at the newest transaction.
Your bot type, exactly
Find your bot below. The address is the contract holding your money, the function is what you run, and the table is what to type into each field.
Some bot types have several contract versions live at once. The one tagged
current is what new bots use (Infinity Grid and Spot Grid moved to v3 on
Aug 23, 2026 — the version with Add funds); the ones tagged legacy still hold the
bots created before that, and each card says which dates it covers. The withdrawal call is identical on
every version. If you are not sure which one your bot is on, use the finder in section 2 — it checks all
of them — or simply try the current one first: if the id is not there, the transaction fails harmlessly
with NotMaker and costs you a fraction of a cent.
If the transaction fails
Blockscout will show a red error with a short name. Here is what each one means and what to do.
| Error | What it means | What to do |
|---|---|---|
NotMaker | The connected wallet is not the wallet that opened this bot — or this bot id does not exist on this contract. | Switch to the wallet that created the bot. If it is the right wallet, you are on the wrong contract version — try the other ones (v1 / v2 / v3) or another bot type. |
NotOpen | This bot is already closed. Its money has already been sent back. | Nothing to do — check your wallet history, the funds are already there. |
NothingToRefund | The bot is open but holds nothing (fully spent or fully delivered). | Nothing to withdraw. Leave it or let it expire. |
NotExpired | You called refundExpired, but the bot has not reached its expiry date yet. | Use the normal function instead — stop / withdraw / cancel. Those work at any time. refundExpired is only the backup for third parties. |
BadRouteHash | You set sellAll to true, which asks the contract to sell your tokens through a specific trading route. | Set sellAll to false, route to 0x and minOut to 0. You get your tokens back in kind and can sell them yourself, anywhere. |
IsPaused | You are calling a function reserved for the bot engine. | You are on the wrong function. Withdrawals are never blocked by pausing — go back to the card above and use the exact function named there. |
| "insufficient funds for gas" | Your wallet has no ETH to pay the network fee. | Send about 0.0002 ETH to the wallet and retry. |
The backup path: someone else can push your funds home
Every bot has an expiry date set when you created it. Once it passes,
refundExpired becomes callable by anybody — and the contract still sends the money
to you, never to whoever called it. There is no way for a caller to redirect it.
That matters in one scenario: you can no longer send transactions yourself, but someone can help you.
They pay the gas, you receive the funds. For the grid bots the function is
refundExpired(id, 0x); for all the others it is just refundExpired(id).
withdrawEth() on the same contract (no fields to fill in) and it
pays out. Check the amount first with the read function pendingEth(<your address>).2 · Find your bot ids
Two ways, both of which work with The Desk switched off.
Option A — the finder on this page
This tool talks straight to a public Robinhood Chain node. It does not touch any Desk server. Paste your wallet address (or connect your wallet) and it lists every bot that address has ever owned, marks the ones still holding money, and hands you the exact withdrawal link for each.
Bot finder
Reads the blockchain directly via rpc.mainnet.chain.robinhood.com. Nothing is
sent anywhere else, and no transaction is signed — this is read-only.
Option B — read it off Blockscout by hand
If the finder cannot reach a node, you can get the same id out of the explorer in under a minute. The id is recorded in the transaction that created the bot.
-
Open your own address on Blockscout
https://robinhoodchain.blockscout.com/address/<your wallet address> -
Find the transaction that created the bot
In the Transactions tab, look for the one sent to your bot's contract address (from the cards in section 1) around the date you created the bot. Its method will be named
openWithEth,openWithBase,open,openSLorcreateLadder. Click it. -
Open the Logs tab
Look for the event called
GridOpened,DcaOpened,CycleOpened,TwapOpenedorLadderCreateddepending on the bot type. -
Copy the first indexed value
The event's first indexed parameter is called
idand is a 66-character0x…value. That is your bot id. The second indexed parameter is your own wallet address — a useful sanity check that you have the right event.GridOpened[topic0] event signature0x695d3b1a859592b997383d9c9d76a025cbd1299207d61bebe4ba9173936a2265[topic1] id ← this one0xf1dd7569911dac84b29e4446d373fac1195ee64df24601fa42ea55b703a03160[topic2] maker0x…your wallet address, confirming this bot is yours
isOpen with your id. true means there is still money in it.
false means it is already closed and the funds have been returned. You can also call
grid / plan / cycle / order / ladder with
your id to see the exact amounts the contract is holding for you — no wallet connection needed to read.3 · How the bots work
Three moving parts, and only one of them is us.
The escrow
When you create a bot, your ETH goes into the bot's contract and is booked against your wallet address
and that bot's id. It is not pooled with anyone else's money in a way that lets it be spent on anyone
else's bot — each contract tracks a total called escrowed, and every user's share of it is
ring-fenced to their own bot record.
As the bot trades, the composition changes — some ETH becomes tokens, tokens become ETH again — but it all stays inside that same record, under your address, until either the bot's rules send you a payout or you withdraw.
The keeper
Blockchains do not have alarm clocks: a contract cannot wake itself up when a price moves. So a program of ours — the keeper — watches the market and pokes the contract when one of your bot's conditions is met.
The keeper's power is deliberately tiny. It can only ask the contract to do the specific action your bot already authorised, and the contract independently re-checks the price and the amounts before doing anything. The keeper cannot choose a different price, cannot move funds to any address other than yours, cannot close your bot and cannot withdraw anything. If the keeper goes offline, your bot stops trading and simply sits there, holding your money, until you withdraw it. Nothing is lost.
What the contract enforces, not us
- Who owns the money. Withdrawals always go to the stored maker address, which is set once when the bot is created and can never be changed.
- The price you get. Every fill must satisfy a minimum output calculated on-chain from your own parameters. A bad or manipulated trade reverts instead of executing.
- The trading route. The pool your bot trades through is fixed at creation by a hash. The keeper cannot reroute your trade through a pool of its choosing.
- The profit floor on grids. A grid sell is rejected unless it clears the spacing you configured, already net of fees. The keeper only picks the moment, never the terms.
- Your right to leave. The withdrawal functions carry no pause check and no time lock.
What we can and cannot do
| The Desk can | The Desk cannot |
|---|---|
| Run the keeper that triggers your bot's actions | Move, spend or withdraw money in your bot |
| Pause new trading activity on a contract | Block, delay or pause your withdrawal |
| Collect the trading fee on each executed trade | Change the fee on a bot that is already open — it is fixed at creation |
| Sweep tokens sent to a contract by mistake, above what users escrowed | Touch a single unit of escrowed user funds — the code reverts if it would |
| Stop running the website and the API | Take the contracts down — they are immutable and have no upgrade switch |
That last row is the whole point. The contracts are permanent deployments with no proxy and no upgrade path. Nobody, including us, can change their code, change where the money goes, or delete them.
Fees
- 1% per executed trade (0.9% if you came through a referral), taken by the router at the moment of the trade. A grid that buys and later sells pays it on each leg.
- 0% performance fee. We do not take a cut of your profit.
- 0% to open, 0% to withdraw. Closing a bot costs only the network gas — a fraction of a cent on this chain.
- Network gas is roughly $0.007 per transaction on Robinhood Chain.
4 · What each bot does
Plain-language version. Each one names the withdrawal function you would use.
Infinity Grid
Buys a bit lower, sells a bit higher, forever, with no upper or lower boundary. It keeps a target value of the token and rebalances toward it in steps: every time the price falls one step it buys, every time it rises one step it sells, banking the difference. Designed for a token you are happy to hold while it chops sideways. You can set a floor price to stop buying below, and a take-profit to close it out.
Add funds (v3 grids, created from Aug 23, 2026): an open grid can take more ETH
without being restarted — topUp(id, route, seedMinOut), called by you through the
Add funds button. Half of what you add buys the token at market and joins the position, the
other half goes into the reserve that funds the buys below. It counts as added investment, not profit,
and the money lands in the very same bot record, so the withdrawal below returns it too. Grids on the
older v1/v2 contracts cannot be topped up — open a new bot with the extra amount instead.
Withdraw with stop(id, 0x, 0, false) — you get the tokens it is currently
holding plus all the unspent ETH, including grid profit already banked. Same call on v1, v2 and v3.
Spot Grid
The same buy-low/sell-high idea, but inside a range you choose, split into a fixed number of levels. Each level buys at its own price and sells at the next one up. It is more predictable than Infinity Grid and better when you have a clear view on the range. The spacing is enforced on-chain to be profitable after fees, so a level cannot be sold at a loss by the keeper.
Add funds (v3 grids, created from Aug 23, 2026): Add funds on an open Spot
Grid spreads the extra ETH evenly across your levels — the levels currently holding the token get more of
it bought at market, the buy levels get more ETH waiting on them — with the same profit floor per level.
Same contract call as Infinity Grid, topUp(id, route, seedMinOut), and the added money sits
in the same bot record. v1 grids cannot be topped up.
Withdraw with stop(id, 0x, 0, false) — same call on v1 and v3.
Martingale
Buys a first amount, and if the price drops by a set step it buys again — bigger. It repeats for as many levels as you configure, lowering the average entry each time, then sells the whole position when it is up by your target percentage. Optionally it restarts and does it again.
Withdraw with withdraw(id) — you get the tokens bought so far plus the ETH
still reserved for the levels that never triggered, without selling anything.
DCA (dollar-cost averaging)
Splits an amount of ETH into equal purchases spaced over time — every hour, day, week, whatever you set — so your entry is an average instead of a single bet on one moment. It can either deliver each purchase straight to your wallet or hold the position and take profit at a target.
Withdraw with stop(id, 0x, 0, false) — you get any tokens it is holding plus
every unspent instalment.
TWAP
One large order chopped into small slices executed at intervals, so you do not move the price against yourself. Unlike DCA it is a single order you want completed, not an ongoing savings plan.
Withdraw with stop(id) — you get back everything not yet executed. Slices
already executed were delivered to your wallet as they happened.
Ladder
Several buy orders stacked at descending prices. Each rung fills only if the price reaches it. Useful when you want exposure on a dip without watching the chart.
Withdraw with cancel(id) — you get back the ETH behind every rung that has
not filled. Filled rungs already delivered their tokens to you.
Limit orders
Different by design: your money never leaves your wallet. You sign an order, and it can only ever be executed on the exact terms you signed, using a standard called Permit2. Nothing is escrowed, so there is nothing to withdraw — if The Desk vanishes, an unfilled order simply never fills.
To be extra safe you can cancel on-chain, or invalidate the signature permanently by calling
invalidateUnorderedNonces on Permit2 yourself. Revoking your Permit2 allowance for the token
also kills any pending order instantly.
Predict
Short up/down rounds on a price. You stake on a side, the round locks, and after it settles the winning side splits the pot. It is not an escrow bot: once a round is locked your stake is committed until it resolves.
Collect with claim([epoch, epoch, …]). If a round could not be settled — for
example the oracle stopped — it is cancelled and every stake in it becomes fully refundable through the
same claim call. Use the read functions getUserRounds,
claimable and refundable to see what you are owed.
5 · Risks, honestly
The withdrawal guarantee protects your access to your funds. It does not protect their value.
| Bot | The specific way it hurts |
|---|---|
| Infinity Grid | A one-way fall keeps triggering buys all the way down. You end up holding the token with no rebound to sell into. Set a floor price. |
| Spot Grid | Price leaves your range and never comes back — above it you sold everything early, below it you are fully invested and idle. |
| Martingale | The worst of the family. Each level is larger than the last, so a sustained fall spends your whole budget near the top of the decline. A token that never recovers turns the whole budget into a loss. |
| DCA | Averaging into something in structural decline just buys more of a losing position, more slowly. |
| TWAP | Slow execution means the price can run away from you mid-order. Set the limit price. |
| Ladder | Rungs fill on the way down and nothing forces a recovery. Placing rungs too close together fills them all in one candle. |
| Limit orders | No escrow risk, but no execution guarantee either — an order can sit unfilled forever, and it fills only if a keeper submits it. |
| Predict | Negative expectation for the average participant after the fee. Treat it as entertainment sizing, not investing. |
Risks that are not about price
- The token itself. Most tokens on any chain go to zero, and a token contract can have a transfer tax, a blacklist or a mint switch. The bot contract cannot protect you from a hostile token. Check the deployer's record before you commit.
- Thin liquidity. If the pool is small, a fill can move the price against you inside your own trade. The on-chain minimum-output check stops the extreme cases by reverting, which means your bot silently does nothing instead.
- Keeper downtime. Your bot pauses. Money is safe, opportunity is not: a take-profit might not fire, a stop-loss might not fire. If the keeper stays down, withdraw and manage manually.
- Smart contract risk. These contracts are unaudited by a third party. They are verified and readable on Blockscout, and the withdrawal paths in this guide have been tested with real money on mainnet, but "no bug found" is never "no bug".
- Your keys. Nobody can recover the bot for you if you lose your wallet. The maker address is permanent.
6 · FAQ
The questions people actually ask.
What happens to my money if The Desk shuts down permanently?
Nothing happens to it — it stays exactly where it is, inside the contract, booked to your address. The bot stops trading because the keeper is gone, but the money is untouched and you withdraw it with the steps in section 1. The contracts do not depend on our servers to exist, and there is no expiry after which funds are forfeited or swept.
Bookmark or save this page now. It is a single file with no dependency on our API — save it to your device with Ctrl+S / Cmd+S and it still works offline, since the finder talks to a public node directly. There is also a copy hosted outside our servers, on GitHub, in case this domain itself goes away: elarquitecto65.github.io/nlyra-desk-rescue.
What if the keeper is down but the website still works?
Your bot is frozen mid-strategy: no new buys, no new sells, no stop-loss, no take-profit. That is a real risk if you were relying on a stop. Either wait for it to come back or withdraw and manage the position yourself. Withdrawing does not need the keeper.
My bot expired. Did I lose the money?
No. Expiry only stops the bot from trading; it never forfeits anything. After expiry
you still withdraw with the normal function (stop / withdraw /
cancel) exactly as described — those functions do not care about the date. As a bonus,
after expiry refundExpired also becomes available, and anybody can call it to send the
funds to you.
I lost my bot id. Can I still withdraw?
Yes — the id is public information permanently recorded on the blockchain, not a secret you can lose. Use the finder in section 2, which reconstructs the full list from your wallet address alone, or read it off the creation transaction on Blockscout as shown in Option B. As long as you have the wallet, you can always recover the id.
How much gas do I need?
A withdrawal costs between 71,000 and 103,000 gas depending on the bot type, which on Robinhood Chain is roughly 0.000002 ETH. Keeping 0.0002 ETH in the wallet covers dozens of withdrawals with room to spare. If you have zero ETH, you must send a small amount in first — the contract cannot pay your gas for you.
Will withdrawing sell my tokens at a bad price?
No, and this is deliberate. The withdrawal described here never sells anything: it
hands you the tokens exactly as the bot holds them plus any unspent ETH. You then sell where and when
you like, or not at all. That is why sellAll must be false — the
true path asks the contract to sell for you and needs live routing data, which is exactly
the dependency a rescue should not have.
Can you freeze my funds, or take them?
No. There is no admin function that can move escrowed user funds — the only sweep function is arithmetically limited to the surplus above what users escrowed and reverts if it would ever dip below. Withdrawals go to the maker address recorded at creation, which no one can change. The pause switch only stops the keeper's trading actions; it has no effect on withdrawals. And the contracts have no upgrade mechanism, so this cannot be changed later.
You do not have to take our word for any of that: the contracts are verified on Blockscout, so you can read the source on the Contract tab of any address in section 1.
The Blockscout write form will not connect to my wallet.
Check that your wallet is on Robinhood Chain (chain id 4663) and refresh the page before pressing Connect. On mobile, open the Blockscout link inside your wallet app's built-in browser rather than in Safari or Chrome. If Blockscout itself is down, any tool that can send a raw transaction works — the function selectors and arguments are standard, and the finder in section 2 shows the exact calldata for each of your bots so you can paste it into your wallet's advanced/hex field.
Do I have to withdraw one bot at a time?
Yes. Each bot is a separate record and needs its own transaction. At a fraction of a cent each this is a non-issue in cost, just repetition. Run the finder, work down the list.
Where is the 1% fee taken, and can it change on my open bot?
It is taken by the router at the instant of each executed trade — not on your deposit and not on your withdrawal. The rate is written into your bot's record when you create it, so it cannot be raised on a bot that is already running. There is no performance fee.