1 · Planner signs
The Stockade server runs the strategy, the risk kernel, and route resolution, then signs a job with EIP-191. Deciding stays central so every plan is auditable.
Executors are the hands of the network. The Stockade planner decides every trade and signs it; your node relays that signature on-chain and pays the gas. You never see user funds, strategies, or the AI key.
Exactly one thing: broadcast a job the planner already signed. The ExecutorRelay contract rejects anything without a valid planner signature, the vault enforces its own caps on top, and each job runs exactly once. A leaked executor key cannot invent a trade, redirect funds, or exceed limits.
The Stockade server runs the strategy, the risk kernel, and route resolution, then signs a job with EIP-191. Deciding stays central so every plan is auditable.
Your node authenticates by signing a nonce with its own key, then claims offered jobs from /api/executor/jobs. Claims are atomic, so two nodes never take the same job.
Before spending a wei of gas, your node simulates the relay call locally. If it would revert, the node reports the job failed instead of broadcasting it.
The node calls relayExecuteSwap on ExecutorRelay with the planner signature. The relay checks you are allowlisted, the signature is fresh, the jobId is unused, and the vault's own caps still apply.
One key per node, funded with gas money only. Never reuse a wallet that holds anything else. `cast wallet new` prints an address and private key in one line.
Send your address (not the key) on Telegram or X. We create an Executor row and call setExecutor(yourAddress, true) on the relay. Until both happen, the API will not hand you jobs.
Four variables: your key, the API URL, the RPC, and the relay address. No database, no LLM key, no user data ever touches your machine.
One command: pnpm exec tsx scripts/executor-node.ts. It authenticates, starts polling, and logs each job it relays. pm2 or systemd keeps it alive.
Your address shows up on the public executor list with jobs done and gas spent. Gas is tracked precisely so reimbursement can be settled.
export EXECUTOR_PRIVATE_KEY=0x... # your dedicated key export ROBINODE_API_URL=https://stockade.digital export NEXT_PUBLIC_RPC_URL=https://rpc.mainnet.chain.robinhood.com export NEXT_PUBLIC_EXECUTOR_RELAY_ADDRESS=0x592870362195F3e437fE20f31061915fdc310191 pnpm exec tsx scripts/executor-node.ts
0x592870362195F3e437fE20f31061915fdc310191
Not today. The network is permissioned: the team allowlists your address on the relay contract. Stake-gated executor admission is a later upgrade and is additive, meaning current nodes keep working when it lands.
No. There is no bonding or slashing in this version. The worst case is wasting gas on a reverting transaction, and the node simulates every job locally first, so that should not happen.
Two things. Your node simulates every job before broadcasting and refuses ones that revert. And the vault contract enforces per-tx caps, daily caps, and a router whitelist on every call, signed or not. A bad planner can only move what those caps already allow.
Your claim lease expires after two minutes and another node picks the job up. If every node is down, the server sweeps expired jobs and executes locally, so a user's schedule never gets stuck waiting on the network.
Every job you relay records gasSpentWei against your address. Reimbursement settles off-chain at first. An on-chain rebate contract is planned as a follow-up.
One relayed trade is a single contract call, roughly a standard swap. At current activity (about 20 on-chain buys a week across all users) a few dollars of ETH keeps a node running for a long time.