Dybl (@DYBL77) header
Dybl (@DYBL77) profile picture

Capital retention & investor protection primitives for onchain protocols. Building on Chainlink.

UK
Joined December 2025
Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)Photo by Dybl (@DYBL77)
Update to the DYBL primitives library. Two new libraries, Breath and SeasonArc, now sit with EternalSeed and BreathEngine (internal names). Breath: what a pool with no end date can afford to pay. SeasonArc: a rising arc to the last payout. Pre-testnet, not audited. Known limits are in each KNOWN_ISSUES.md. github.com/DYBL777/dybl-prim… 🧵1/3
The DYBL primitives library is live. Two Solidity libraries, pure functions, no state, no external calls. Eternal Seed for capital retention, BreathEngine for solvency-aware distribution. Both extracted from a working prediction market and proven byte-equal against it. github.com/DYBL777/dybl-prim…
1
2
2
29
Breath keeps two running averages of income and reacts faster to a fall than a rise. It sets a sustainable payout from the fast average plus yield, allowing for what recycles back into the pot and paces it by the trend. Payouts have a floor, creep up from the last one, and are limited in how far they move each draw. It also holds a reserve target and can report how much sits spare above it. SeasonArc looks at what’s in the pot and how many rounds are left, every round. Payouts climb through the season, and the last one is sized to the whole pot. It’s deployed once and linked, not copied into each game. Both are Solidity libraries. They hold no storage of their own and make no outside calls in the maths. 2/3
1
1
35
BreathEngine came out of the first, larger game. Breath and SeasonArc came from the smaller games built after, each around one rule. Breath is the payout rule inside Lettery Perpetual, a lottery with no end date. SeasonArc is the payout rule inside Lettery TF, a season-long lottery, which goes up on GitHub soon. A second game, a price-prediction game on @chainlink price feeds, links the same SeasonArc. EternalSeed and BreathEngine are the Compounding Reserve and Solvency Autopilot from August. Open to scrutiny: review them, break them, tell me what I missed. If you’re interested in getting involved, my DMs are open. 3/3
1
1
16
yieldcoin generating a net of 7.68% (this is after the protocol takes its 1% fee) total value of $YIELD (CA:0xab83ba0bc3c4fee04fe4ad5df914f86f5f31c45d on @base @buildonbase) is up 0.11% since launching 8 days ago currently operating as private financial infrastructure
yieldcoin is live and has been for over a week, I just havent announced it yet. in that time it has earned 5% apy. that number would probably be higher but for the first 3 nights, rebalancing happened at 0:00UTC into aavev3 on eth for around 12-13% every night a whale would withdraw $133m around 23:30, then deposit again around 0:10. so rates would spike during the rebalance window and then drop sharply for the rest of the day the biggest design mistake made apparent by deployment was not having a dedicated role for setting ccip gas limits. this functionality is controlled by CONFIG_OPERATOR_ROLE, which also sets crosschain vaults - a much more security critical operation. next time, or in a future upgrade, I'd separate them so the vault setter is a timelock msig and gas limits is a secure eoa annoyingly after deploying to mainnet, the ai powered property workflow im building identified an optimization in the parent vault recovery, but it does not warrant an entire upgrade by itself
1
1
7
216
yieldcoin is live and has been for over a week, I just havent announced it yet. in that time it has earned 5% apy. that number would probably be higher but for the first 3 nights, rebalancing happened at 0:00UTC into aavev3 on eth for around 12-13% every night a whale would withdraw $133m around 23:30, then deposit again around 0:10. so rates would spike during the rebalance window and then drop sharply for the rest of the day the biggest design mistake made apparent by deployment was not having a dedicated role for setting ccip gas limits. this functionality is controlled by CONFIG_OPERATOR_ROLE, which also sets crosschain vaults - a much more security critical operation. next time, or in a future upgrade, I'd separate them so the vault setter is a timelock msig and gas limits is a secure eoa annoyingly after deploying to mainnet, the ai powered property workflow im building identified an optimization in the parent vault recovery, but it does not warrant an entire upgrade by itself
2
2
1
6
339
Thank you so much @ZealynxSecurity for auditing Yieldcoin v2 and finding a CRITICAL and a HIGH! Both were issues with external interactions and have been fixed. Special thanks @TheBlockChainer for the amazing work, including finding the crit almost instantly, and being very patient while I spent the remediation period redesigning mitigations for a single issue. This was an extremely high-value engagement, made possible thanks to Zealynx's generous discounted audit grant program. It was especially exciting because Zealynx's educational resources had a major impact on the epoch-based design of the protocol. Read the report here: zealynx.io/audits/yieldcoin/…
3
6
1
21
1,110
Yesterday's post was about protecting a pot. This one is about the question that comes next. Once a pool has a protected floor, something has to decide the rate. Distribute too fast and you breach the floor before maturity. Too slow and you are hoarding capital that should be working. Most protocols typically answer this with a fixed rate set at launch, or a governance vote every few weeks. Neither is a control loop. One ignores what actually happened, the other is too slow to respond to it. Solvency Autopilot (internally BreathEngine) answers it on demand, every period. Give it four numbers about your pool (current stock, obligation floor, periods remaining, estimated inflow per period), plus your rollover fraction and your own rate ceiling. It returns the maximum rate you can distribute this period without breaching that floor at maturity, on its own projection. A 24-iteration binary search where every candidate is verified against a forward projection of the full remaining horizon before it is accepted. This came out of the seed work. The protected amount was the first half of the problem. The rate is the half most protocols leave unsolved. 🧵 1 of 2
1
3
4
88
We call it the Autonomous Distribution Rate Problem. It exists in every protocol that holds funds and owes obligations. To our knowledge no production protocol answers it autonomously and forward-projecting. The honest limit, documented in the library itself: it can return zero, and zero is ambiguous. Structural insolvency and a solvent pool sitting exactly at its floor both return zero. So the insolvency predicate ships alongside it. Pure Solidity library. Five functions. Stateless. No storage, no dependencies, no external calls in the math. The reference host runs on @Chainlink CRE-style orchestration: a periodic workflow advances the host, the host derives a rate. Part of the DYBL primitives library (alongside Compounding Reserve). github.com/DYBL777/dybl-prim…
1
3
5
74
Most pooled protocols have the same quiet flaw. They distribute until the pot is gone. No floor. No protection. Just distribution until there's nothing left. Compounding Reserve (the mechanism internally known as Eternal Seed) solves this. It locks a protected amount inside the pot for the duration of the season. That amount cannot be distributed. It sits there, season-locked, compounding draw on draw. Two modes: a floor the pot can never fall below, or a recurring flow that rolls a fraction of each prize pool back in. Either way the protected amount is untouchable by governance during the season. Defined exit paths exist at settlement and dormancy. Permanent within the season. Not beyond it. Pure Solidity library. Stateless. No external calls in the math. Extracted from a fully tested suite and behaviour-matched against the source contract. Designed to compose with Chainlink Data Feeds and CRE-style orchestration. The host supplies state and policy, the library supplies the capital-protection math. Part of the DYBL primitives library (alongside Solvency Autopilot). github.com/DYBL777/dybl-prim…
3
4
78
The DYBL primitives library is live. Two Solidity libraries, pure functions, no state, no external calls. Eternal Seed for capital retention, BreathEngine for solvency-aware distribution. Both extracted from a working prediction market and proven byte-equal against it. github.com/DYBL777/dybl-prim…
2
2
2
4
276
Quick shoutout to @contractlevel for the advice along the way. Appreciated the time 🙏
1
1
22
Prediction markets are having their moment. DYBL is building the capital-retention and solvency primitives underneath them. Eternal Seed and BreathEngine, so pools stay solvent and compound instead of resetting every season. Demonstrated inside a Chainlink Data Feeds + CRE settlement game. Primitives library goes up soon.
Prediction markets saw more volume last month than every U.S. sportsbook combined: $40B+. We are witnessing the DeFi moment for prediction markets, and Chainlink is driving it. By adopting Chainlink to unlock immediate market resolution and instant payouts, leading platforms are already accelerating their next phase of growth ↓ • @Polymarket • @world_xyz • @Predictstreet • @jup_predict • @P2Pdotme • @trylimitless • @MyriadMarkets • @predictdotfun • @opinionlabsxyz • @xomarket • @UseVault777 • @ForkastGG
3
1
4
392
Spent the morning on documentation. Three files in BullsEthCRE had drifted out of date. Fixed. 432 tests across 24 suites, nine invariants running in CI, three Highs still open and listed in full. The front page now says plainly that the repo is frozen, and why. It's a reference implementation used to verify extractions, not something heading for deployment (by me). None of this is new work on the primitives. The eternal seed and the breath engine have been built alongside the game for months. Their library goes up next. github.com/DYBL777/BullsEthC…
3
3
37
Dybl retweeted
some not great news: i'm no longer at cyfrin due to engineering layoffs. i am open to full-time/part-time/contract full stack or forward deployed engineering roles. if you're hiring OR can share this, i'd appreciated it 🫶 leading @CyfrinUpdraft for 2.5+ years was a dream. i'll cherish the time there and the people i worked alongside. seeing products grow because of the people using them is why i love this industry. more on my work below ↓
9
12
3
40
8,939
Sizing experiment on the monolith. 70.8KB deployed, 46KB over the EIP-170 limit. So I cut dormancy entirely and rebuilt: 11.7KB back. Also the whole OG loyalty system: 11.7KB. Both flagship features gone and it's still 23KB over. No amount of trimming reaches deployable. The split was never optional. The math just made it official. So the game freezes as a fidelity anchor: 425 tests, 9 invariants, fuzzed across resets and dormancy. Every primitive extracted from here gets verified against it, byte for byte. Solvency-aware distribution, the eternal seed, a dormancy waterfall. And three answers to cold start: milestone-gated investor capital, skin-in-the-game staking, pregame commitment. The primitives were always the product... Now comes the simplicity
1
2
1
3
159
A correction to this. The numbers hold. 70.8KB, both flagship features cut, still 23KB over. What I got wrong is the conclusion I hung on them. "The split was never optional" reads like the contract can't be deployed. There is a deployable path: deployed libraries and satellite contracts. It's a long refactor with every test to redo, and I haven't built it to prove it. A hill, not a wall. So freezing it is a choice, not a verdict. One person, 9 months in, and I'd rather spend the next stretch on the primitives than on a rebuild that ends with a demo. The maths only ever said that trimming the two biggest features isn't enough. Test count is 432 now, not 425. The suite grew.
2
2
46
Been building the primitives and their Foundry test suites alongside the game for around 3 months. The breathing engine is extracted and proven to behave identically to the version inside the game and nearly ready for its own repo, then making it adaptable, so it works for a plain pool with no OG endgame at the end.
Sizing experiment on the monolith. 70.8KB deployed, 46KB over the EIP-170 limit. So I cut dormancy entirely and rebuilt: 11.7KB back. Also the whole OG loyalty system: 11.7KB. Both flagship features gone and it's still 23KB over. No amount of trimming reaches deployable. The split was never optional. The math just made it official. So the game freezes as a fidelity anchor: 425 tests, 9 invariants, fuzzed across resets and dormancy. Every primitive extracted from here gets verified against it, byte for byte. Solvency-aware distribution, the eternal seed, a dormancy waterfall. And three answers to cold start: milestone-gated investor capital, skin-in-the-game staking, pregame commitment. The primitives were always the product... Now comes the simplicity
2
2
61
Dormancy and emergency reset now under fuzz. 432 tests. Twelve actions, nine invariants, 12,800 calls per property. Two bugs in my own handler before the campaign ran clean. Reset and both dormancy calls are owner only and wired the handler as the forwarder. Both destructive paths silently dead, three call sites, one root cause. Then dormancy sat behind a dice roll while being the only legal exit from a stranded season. The suite's own progress assert caught that one on its first outing: a stranded run failed CI instead of passing quietly. github.com/DYBL777/BullsEthC…
2
2
52
Invariant fuzzing, first pass. Up to 430 tests. Seven properties over a live season handler. Balance covers every allocated pool, seed release stays inside the ratio ceiling the solvency proof assumes, treasury never exceeds holdings. First campaign came back green on all seven. It had also completed zero draws in 12,800 calls. Warp action moved the clock blindly, and a few of those before the first buy shut the pick window. Unrecoverable from there, so every property passed trivially, forever. Fixed by making time phase aware, and by counting why each action did nothing. Silent returns are right, but they made "not applicable now" and "can never work" identical. Now nine draws in one sequence, cutoffs accepted nine and failed zero. The campaign asserts its own progress, so a stuck run fails CI rather than passing quietly. Live season only. Second pass adds reset and dormancy, where the ordering bugs live. github.com/DYBL777/BullsEthC…
2
2
34
Two more test files. 415. These cover the money paths that only exist after an emergency reset. If a draw gets voided, players who paid in but never got to play can claim it back, and whatever nobody claims gets cleared out after thirty days. While the game is still running unclaimed money goes back into the prize pot, so it gets paid out to players later. Once the game has wound down there's no season left to fund, so it goes to the protocol. Same function, opposite recipient, decided entirely by what state the game is in. github.com/DYBL777/BullsEthC…
2
2
32