Vane
connecting

A trading agent with no server

Vane lives on-chain as a Solidity contract. The Somnia chain itself wakes it to trade DreamDEX event contracts, reclaim its escrow and redeem what it wins. There is no bot process, no cron and no keeper. Close this page and it keeps going.

Verification checking the node…

Asking the node whether it is holding a standing instruction for this agent.

Times the chain woke it
·
Orders placed
·
Windows it chose itself
·
Filled on DreamDEX
·

Those four are permanent. They live in contract state and in DreamDEX's own order history, and only the reactivity precompile can move the first three. Check them yourself:

node cli.js status --agent 0xb1341FE72F6f0d77168faD310336847686f8A852
The proof

The chain is the keeper

Somnia can store an event subscription in chain state and invoke a contract when a matching log lands. These numbers come from the node itself, not from anything we run.

Checking the node for a live subscription…
Subscription
·
Held in chain state
Times woken
·
By the chain, unprompted
Orders placed
·
On the DreamDEX book
Windows it moved onto
·
Chose them itself, from the event
Since judging closed

Judging closed. The agent did not.

Reading the counters as they stood when judging closed, then again now.

Times woken since
·
Windows chosen since
·
Orders placed since
·
Winnings redeemed since
·
Times woken, per day
reading historical state…
Windows chosen, per day
reading historical state…
Orders placed, per day
reading historical state…

Each bar is the difference between two reads of contract state, one at midnight UTC and one at the next, made against the node's historical state. The dashed line is the close of judging. Only the reactivity precompile can move the first two counters.

The agent

One agent, one owner

DreamDEX has no way for a third party to trade event contracts on your behalf, so Vane holds the collateral and removes the danger instead. Withdrawal is owner-only and unconditional. The operator can trade and nothing else.

Free collateral
·
tUSDC in the agent
Escrow reclaimed
·
Freed from expired orders
Positions redeemed
·
Settled, then claimed
Trading
·
Owner can halt at any time
Agent contract
·
Risk policy
·
Live market

What it is trading

DreamDEX event contracts are binary up or down markets on a real on-chain order book. Up and Down share one book, and a Down price is always 1 minus the Up price.

Window
·
Settles in
·
Last price
·
Probability of Up
On-chain activity

Everything it has done

Read straight from the chain: the agent's own events over roughly the last two hours, newest first, and the orders it left on the DreamDEX book. Times are local to you.

EventDetailWhen
Loading…
How it works

Four moving parts

  1. A subscription is stored in chain state The owner registers a filter on DreamDEX market events with the reactivity precompile at 0x0100, naming the agent as the handler.
  2. The chain calls the agent When a matching log lands, the node invokes onEvent on the contract. Nothing off-chain is involved, and there is nothing to keep running.
  3. It trades inside a policy it cannot exceed A per-window budget, a reserve it will never spend, a cooldown, and an allowlist of pools. Everything is checked on-chain before an order goes out.
  4. It gets the money back Expired orders hold escrow until something cancels them, and winnings must be claimed. A scheduled one-shot wake does both, and either can be triggered by anyone so funds are never stranded.
Run one yourself

Your own agent, in five commands

One agent per owner, deployed from the factory. It holds your collateral, only you can withdraw, and the operator can trade but can never move funds. Use a throwaway testnet key, never one holding anything real.

  1. Get the code and the test dollars git clone https://github.com/Risingtell/vane.git
    cd vane/sdk && npm install ethers
    node cli.js faucet
    10,000 test tUSDC. Reads need nothing; writes need PRIVATE_KEY in your environment.
  2. Deploy your agent node cli.js create --factory 0x… The factory refuses a second agent for the same address, so funds in the first are never orphaned.
  3. Fund it node cli.js fund --agent 0x… --amount 100 Collateral moves into your agent. withdraw is owner-only and unconditional, at any time.
  4. Hand it to the chain node cli.js arm --agent 0x… Two standing instructions: wake me when this market moves, and wake me when a new window opens. The owner needs at least 32 STT, a floor the chain enforces.
  5. Take it back whenever you like node cli.js disarm Cancels the subscriptions and stops the STT burn. The agent keeps its money either way.