/1
the backtest and the chain run the same code. plain english:
the slip knot watches volatility. quiet markets keep the max LTV at 75%. a 30% realised-vol move shaves it about ten points to ~65%. integer math, no floats, no surprises.
the number you see in the simulator is the number the chain enforces.
Mainnet.
lien_hook_executor is live on Solana mainnet at 5yNMqcyZsGQJk4xvw4jjvoRBSnGs8mgramEa3HQe5faD. same Program ID as the devnet binary, byte-identical .so, byte-identical decision fold.
tx 3S7zSf68aKhkPwFvKCycy7uX5ct2FBRRrkGt3348ZnaNYTbNUZdRYU3ZkSYCtsgeihzAfPKs3KBMTT8MPgATZvxZ
https://t.co/uS65lqAMl2
https://t.co/af1wzPc3ef
/4
anyone can run this on a real mainnet receipt:
npm i -g @liens/cli
lien receipts --signature N82DnJ8iubpAYhbzqG1SNdG8Lq1hRatvYko7Y12DqsNRRgee9xHzqXqNwoNVG3BzvvB8CTF42kNvpzWJa2gjf2H
event=beforeBorrow, one hook eligible, decided Accept. AntiMEVLiq's slots_delayed and AutoHedge's perp short ride the same envelope. or read it off Solana Explorer if you prefer the web.
https://t.co/aQzEN5PB5U
/3
every time the executor runs on mainnet, it writes a receipt to Solana. v0.1.3 added a per-hook entry called HookRan: which hook fired, what priority slot it sat in, what decision it returned, what side-effect it produced.
your backtest says one thing. the chain wrote another. compare. they match.
@liens/cli 0.1.2 — receipts on tap.
npm i -g @liens/cli
lien receipts --signature Jek7kswJPSaDXht3kC9cDzirNaS7uNaPCQUfhYhFgnDFWRSXHx6VtMTrpA5heVBW2aPpqtVduk8gZpmGhNCRGbb
calls solana mainnet RPC, decodes the CompositionExecuted event off the executor, prints the event kind, the pool, the composition, the eligible/skipped hook counts, and the raw program logs. one command between "I installed a knot" and "the chain ran exactly what I simulated."
byte-identical fold isn't a slogan if you can't check it. now you can.
https://t.co/A53HX1TQ1g
asked for it in plain english.
solana has lenders. think of them as audited banks: marginfi, kamino, save. they're solid, but the rules are welded shut — same liquidation cutoff for a quiet weekend and for a 30% crash, same liquidation handed to whatever bot lands first.
LIEN is a tiny layer that sits next to those lenders and lets a pool operator add small rules of their own. "if volatility jumps, tighten the LTV." "if the oracle is stale, wait." "if the liquidation comes from a random bot, delay it three slots." each tiny rule is a knot. up to eight knots per pool, in order.
we didn't fork the banks. we sit beside them. the bank still owns your money — we just attach a checklist that runs at every deposit / borrow / repay / liquidate.
that's the whole thing.
https://t.co/af1wzPc3ef
v0.1.1 + marketplace.
mainnet program upgrade landed — priority-uniqueness guard on install_composition / update_composition so two entries can't silently claim the same fold slot. same Program ID, byte-identical decision fold otherwise.
at the same time, the Hook Marketplace went live at https://t.co/wfcvMsBw0d — six standard knots, browse the source, read the params, install on the same executor.
upgrade tx: 3AWddY7i9UYczUjN9PW8zgajmgT3Kr9hUbY2tcfpKmD8ugyAehbjwUDZDbgGriptbsvFBwFpAWHtdvykGzxLbijR
https://t.co/DyJ0ayPbse
https://t.co/uS65lqAMl2
note for anyone reading this.
what other people buy, and what they do with what they bought, is their decision. it sits outside the framework I'm building and it's not a variable I'm going to start optimising for.
development and updates continue. next slot is the Hook Marketplace — six standard knots on the mainnet executor that landed today.