Skip to content

Give HyperEVM a seven-day market that can take lending offers - #356

Merged
rbcp18 merged 1 commit into
developfrom
claude/stoic-mccarthy-9a1ddp
Sep 22, 2026
Merged

rbcp18 merged 1 commit into
developfrom
claude/stoic-mccarthy-9a1ddp

Conversation

@rbcp18

@rbcp18 rbcp18 commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Why

HyperEVM has exactly one market that trusts LenderCommitmentForwarderAlpha — market 3, created outside this repo — and its payment cycle is thirty days.

For an EMI market that is not just a longer default, it is a floor on how short a loan can be at all. TellerV2 sizes payments through V2Calculations, EMI lands in NumbersLib.pmt, and pmt opens with:

require(loanDuration >= cycleDuration, "PMT: cycle duration < loan duration");

So a seven-day lending offer published into market 3 cannot be drawn. It publishes, sits in the book looking entirely normal, and reverts for every borrower who tries. Teller Pro's on-demand lending writes seven-day terms wherever it can, and HyperEVM is the one chain where it has been forced back to thirty for exactly this reason.

Why a new market rather than a grant

The per-market forwarder slot holds exactly one address. Granting Alpha on market 1 — the seven-day pools market — would not add offers, it would take that market's pools off line. That is the trap Arc hit, and why Base runs offers on 22 and pools on 18.

What this adds

One shortOffers entry in config/chain-bootstrap/hyperevm.ts:

Field Value
purpose offers (trusts LenderCommitmentForwarderAlpha, gets no pools)
durationSeconds 7 days
paymentDefaultDuration 5 min, matching market 2's own
bidExpirationTime 24 h, as on Arc's offers market

bootstrap-markets creates Bullet markets on a seconds cycle, so the pmt floor above does not apply to what it makes: one payment at the end, priced off the cycle rather than divided by it. The seven days here is the term we want, not a constraint being worked around.

What does not change

No pools are attached to it, and it stays out of activateMarkets. The hyperRAM entries are untouched.

The file's header and the comment above markets both said every number there describes market 2 as it already is and is never applied. That stays true of long and is not true of the new entry, so both now say which is which — otherwise the next reader takes the new market's numbers for documentation and edits them expecting nothing to happen.

Deploying

Not deployed by this PR. Once merged:

NETWORK=hyperevm BOOTSTRAP_MARKETS=true  # via the chain-deployer service

with CONTRACTS_REF repinned to develop's head. Re-running is safe — anything already in deployments/hyperevm/market-bootstrap.json is skipped, so only the new market is created. The resulting market id then goes into Teller Pro's ODL_OFFER_MARKET_BY_CHAIN as a seven-day Bullet row.

🤖 Generated with Claude Code

https://claude.ai/code/session_01S1HkrFB3R5NcaNt5tLfXr7


Generated by Claude Code

HyperEVM has one market trusting LenderCommitmentForwarderAlpha -
market 3, created outside this repo - and its payment cycle is thirty
days. For an EMI market that is not merely a longer default, it is a
ceiling on how short a loan can be at all: TellerV2 sizes payments
through V2Calculations, EMI lands in NumbersLib.pmt, and pmt opens with

    require(loanDuration >= cycleDuration)

So a seven-day offer published into market 3 cannot be drawn. It
publishes, sits in the book looking entirely normal, and reverts for
every borrower who tries. Teller Pro's on-demand lending writes
seven-day terms everywhere it can and has been forced back to thirty on
this chain for exactly that reason.

A market of its own is the only fix. The per-market forwarder slot holds
one address, so granting Alpha on market 1 - the seven-day pools market
- would not add offers, it would take that market's pools off line. That
is the trap Arc hit, and why Base runs offers on 22 and pools on 18.

The market this task creates is Bullet on a seconds cycle, so the pmt
floor does not apply to it at all: one payment at the end, priced off
the cycle rather than divided by it. The seven days here is the term we
want, not a constraint being worked around.

Nothing else in the file changes. The header and the comment above
`markets` both said every number there describes market 2 as it already
is and is never applied; that stays true of `long` and is not true of
the new entry, so both now say which is which.

Not deployed. Running it is `yarn hh bootstrap-markets --network
hyperevm`, which needs the deployer key and gas on HyperEVM; re-running
is safe, since anything already in deployments/hyperevm/market-bootstrap.json
is skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1HkrFB3R5NcaNt5tLfXr7
@rbcp18
rbcp18 merged commit 806b5bc into develop Sep 22, 2026
2 checks passed
@rbcp18
rbcp18 deleted the claude/stoic-mccarthy-9a1ddp branch September 22, 2026 13:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants