this is great. we landed on a similar approach: accounts_pre.bin, accounts_post.bin and other metadata needed to execute
for your 1mo lookback, did you process and store TxFixtures for every tx already? or is it more on-demand: snapshot + incremental snapshot + minimal replay -> TxFixture?
Rust source-level debugger for Solana programs
inspect variables, set breakpoints, step into/over functions, etc.
coming soon™️to @blueshift sbpf (which already has an assembly debugger btw)
here's what stepping through a Pinocchio vault program looks like:
So how do Solana propAMMs fare against Binance? Spent some time over the weekend finding out
Turns out: really, really good
Took 24hr of onchain trades and compared vs. Binance VIP 1 and VIP 9
(a) does not naively rely on block timestamp. Uses shred-level timing data and is geo-aware based on leader location
(b) comparison is size-aware and contemporaneous. Walks the L2 book for the same size at the same moment
(c) does not naively compare onchain SOL/USDC against Binance SOL/USDT since USDC is not 1:1 with USDT (results would be clearly bimodal). Adjusts for this
(d) compares executed onchain trades (>1M) not simulations. Accounts for priority and base fees paid
Measured execution quality: did the propAMMs give the trader a good fill relative to executable Binance liquidity at that time?
vs. Binance VIP 1: 10 bps advantage on propAMMs
vs. Binance VIP 9: 2-3 bps advantage on propAMMs
If you know me, you know I'm a huge fan of onchain routing
Love to see this from Titan. Their new router dynamically sources liquidity at execution time
Onchain routing helps Solana go from "average fill can beat Binance VIP9" to "virtually every fill should be competitive with or better than Binance"
in the video:
simulated outputs without API calls (no offchain router component!)
gap bps = how far output is behind best output
interval bps = how far output is behind the one immediately above it
@toly@trentdotsol Agreed, but one thing to note is that InitializeNonce done on your behalf won't show up in getTransactionsForAddress since the authority is part of the ix data instead of accounts
So you have to parse every nonce account init. Not difficult but something to be aware of
To me it looks unrelated to axios
Notice how these txs are unusual: the multisig signers never used durable nonces except for the 2 exploit txs that approved the new admin
The hacker created new nonce accounts on behalf of the 5 Squads signers days ago
This gave him days to socially engineer the signers and collect their signatures. Since the transactions used durable nonces, they aren't limited to the standard 151 block expiry
Looks like Drift was compromised by admin key compromise.
Some speculation that maybe was tied to a dev w/ admin access locally doing a version bump on the Axios JS library, which was widely compromised yesterday 👇
Still fog of war... but would make sense
@alessandrod aside: MCP probably doesn't need GPS clocks but it sure would be cool if DoubleZero started installing them and making them available to validators. DZ Time
Looks like the pool operator pushed an erroneous price (2.65 USDC/WSOL) in all oracle updates that landed in slot 409430505
this unfortunate blunder led to the nika6 arb bot profiting over 2400 SOL across multiple transactions
Goonfi v2's WSOL/USDC pool is drained for about 250k likely due to a misconfig/bug in the program an hour ago. The program is now halted.
https://t.co/bKnaboRXwf
Simulating pAMM outputs is non-trivial. If you're checking quotes without varying these params, your sim may be incomplete
Swap output depends on much more than pool state, reserves, and input size:
- outer program (router)
- router method
- price/CU (*)
- presence of extra accounts (**)
- presence of other swaps
and much more...
(*) some pAMMs check the priority fee from the ix sysvar and adjusts bps
(**) a pAMM that doesn't want to be bundled adds a surcharge (historically 1bps) if you don't include a specific vote account in the passed accounts
4/ These fairness guarantees are enforced by the protocol design and not dependent on trusted third parties or modified clients. SIMD will be available soon. Check out the Constellation website and read the full whitepaper: https://t.co/gFfgK9CThZ
Designing markets requires adversarial thinking, economic intuition, systems knowledge, and taste. The first three are table stakes.
As an engineer, taste is the visceral discomfort you feel when a system has hidden fragility, even if it "works”. You sense something is broken before you can articulate why, and then you spiral until you can.
This is the only way I know how to build things, and it's shaped by experience.
Serum's matching engine had an event queue that split matching and settlement into two separate transactions. The first time I read the code, I knew something was off: the design introduced an asynchronous bottleneck in the hot path. Every maker fill had to wait for a third-party transaction before funds became available. Phoenix V1 eliminated this by settling both sides of all trades atomically.
In 2022, every indexer on Solana relied on program logs for state reconstruction. The problem was that program logs could get truncated, and any system built on them could never have full data integrity. That felt unacceptable to me, so I pioneered using no-op CPIs to circumvent this entirely by emitting the event in the call data. The mechanism is now widely adopted across Solana and natively supported in Anchor.
Brittle systems fail when the pressure is high, and markets are adversarial environments where high pressure is the default state.
Building a perps exchange on Solana is one of the toughest problems in DeFi. Margin systems, funding rate mechanisms, liquidation engines, and oracle integration are all areas where one wrong decision can lead to catastrophe.
Our team has traded real markets and built real trading systems in TradFi. We know what markets do under stress because we've been on the other side. That experience gives us the intuition to know which tradeoffs matter and which don't. And we're too stubborn to accept the important ones that feel wrong, even when they're easier.
We've made plenty of mistakes along the way, but we have always kept them out of the critical path. Good design and a strong foundation give you room to absorb surprises and adapt without large breaking changes.
For Solana to win in on-chain perps, you need a foundation built by people who are pathologically uncomfortable with fragility. That's us.
The rest is execution.
Got around to integrating Jetstreamer into our data pipelines
Super smooth to add since we already convert upstream RPC/BigTable/Yellowstone/gg-geyser data into local GhostBlock, GhostTx types
Nice work by @Sam0xSol and also @triton_one for old faithful
This thing is fast af
One minor piece of feedback: would prefer the ClickHouse integration to be a plugin instead of part of the runner. Or at least behind a Cargo feature since we already use a different ClickHouse client library
Continuous price updates are a beautiful thing to observe on Solana
The first block in this leader window saw 871 propAMM oracle price updates across 77 pools
One pool alone had 47 updates in a single block
(purple = propAMM updates)
https://t.co/l258bsbmWA
Over the last 20 epochs, we tracked validator scheduling and block production behavior using shred data
Now we’re making that data available on a revamped dashboard, along with a provisional scoring system
It's not time since the validator added the tx, it's time since the first tx shred we observed for that slot, measured on a listener server
We listen to shred streams and timestamp shred arrivals. When reconstructing txs, we assign each tx a timestamp that's the earliest time we had enough shreds to decode it, either because all required data shreds arrived on the wire or missing ones were recoverable via RS
Started tracking shreds to measure:
- transaction arrival timing: histogram of txs within a slot, bucketed by time since the first shred observed
- how consistently the leader releases shreds over a 4-block window
Coming soon to the https://t.co/VbECgYRftH Validators page
@RealSpaceMonkey we run simulations across a range of inputs
most pAMMs penalize direct swaps so our sims call via the (onchain) router programs
https://t.co/gj20Rmp3he
Atomic arbs that exclusively touch propAMMs now account for 5-10% of total arb revenue
propAMMs put a lot of effort into fighting toxic flow. The ix sysvar lets them introspect the transaction to see exactly what other instructions are present, how the swap is being called, etc