The Desk

Your money is in the contract.
Only your wallet can move it.

This page explains how The Desk's trading bots hold your funds, and — first and most importantly — the exact steps to take your money out yourself, straight from the smart contract, using nothing but your wallet and a public block explorer.

If The Desk disappears tomorrow — the website, the API, the bot engine, all of it — your money is still yours and still reachable. Every bot contract has a withdrawal function that only you, the wallet that opened the bot, can call. It needs no permission from us, no server of ours, and it keeps working even if we shut everything down. This guide shows you exactly how to use it.
The important part

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.

You need three things: your wallet (the same one that created the bot), your bot's id (a long 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

  1. 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.

  2. 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

  3. 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.

  4. Find the function and fill in the fields

    Scroll the list of functions to the one named in your bot's card below — stop, withdraw or cancel. Expand it and paste your bot id into the id field. 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.

    robinhoodchain.blockscout.com  ·  Write contract  ·  ArchitectInfinityGrid
    5. stop
    id (bytes32)
    0xf1dd7569911dac84b29e4446d373fac1195ee64df24601fa42ea55b703a03160
    ← your bot id goes here
    route (bytes)
    0x
    ← literally the two characters 0x
    minOut (uint256)
    0
    sellAll (bool)
    false
    ← false = give me my tokens back, do not sell them
    Write
    Do 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.
  5. 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.

ErrorWhat it meansWhat to do
NotMakerThe 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.
NotOpenThis bot is already closed. Its money has already been sent back.Nothing to do — check your wallet history, the funds are already there.
NothingToRefundThe bot is open but holds nothing (fully spent or fully delivered).Nothing to withdraw. Leave it or let it expire.
NotExpiredYou 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.
BadRouteHashYou 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.
IsPausedYou 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).

Payment bounced? Every contract sends ETH with a limited gas allowance. If your wallet is a smart-contract wallet that rejects it, the contract does not lose the money — it credits it to you internally. Call 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.

  1. Open your own address on Blockscout

    https://robinhoodchain.blockscout.com/address/<your wallet address>

  2. 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, openSL or createLadder. Click it.

  3. Open the Logs tab

    Look for the event called GridOpened, DcaOpened, CycleOpened, TwapOpened or LadderCreated depending on the bot type.

  4. Copy the first indexed value

    The event's first indexed parameter is called id and is a 66-character 0x… 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.

    Transaction  ·  Logs
    GridOpened
    [topic0]  event signature
    0x695d3b1a859592b997383d9c9d76a025cbd1299207d61bebe4ba9173936a2265
    [topic1]  id  ← this one
    0xf1dd7569911dac84b29e4446d373fac1195ee64df24601fa42ea55b703a03160
    [topic2]  maker
    0x…your wallet address, confirming this bot is yours
Is my bot still holding anything? On the contract's Read contract tab, call 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

What we can and cannot do

The Desk canThe Desk cannot
Run the keeper that triggers your bot's actionsMove, spend or withdraw money in your bot
Pause new trading activity on a contractBlock, delay or pause your withdrawal
Collect the trading fee on each executed tradeChange 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 escrowedTouch a single unit of escrowed user funds — the code reverts if it would
Stop running the website and the APITake 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


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.

Nothing here removes market risk. Every one of these bots can lose money. Grid and martingale strategies in particular convert ETH into a token as the price falls — that is how they work — so if the token keeps falling, you are holding a losing position, and withdrawing gives you back exactly that position. Only put in what you can afford to lose.
BotThe specific way it hurts
Infinity GridA 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 GridPrice leaves your range and never comes back — above it you sold everything early, below it you are fully invested and idle.
MartingaleThe 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.
DCAAveraging into something in structural decline just buys more of a losing position, more slowly.
TWAPSlow execution means the price can run away from you mid-order. Set the limit price.
LadderRungs fill on the way down and nothing forces a recovery. Placing rungs too close together fills them all in one candle.
Limit ordersNo escrow risk, but no execution guarantee either — an order can sit unfilled forever, and it fills only if a keeper submits it.
PredictNegative expectation for the average participant after the fee. Treat it as entertainment sizing, not investing.

Risks that are not about price


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.