Integration Guide

Integrate esETH, STRAT, CDT, and StakedStrat into your protocol, wallet, or application — with opinionated guidance and working code.

This guide is for developers integrating ETH Strategy tokens into smart contracts, wallets, aggregators, dashboards, or any on-chain system. It covers each token's interface, recommended integration patterns, and production caveats that will save you from subtle bugs.

If you're looking for protocol mechanics rather than integration patterns, start with the Protocol Overview. For the complete API reference (every function with parameters, return values, access control, and revert conditions), see the Contract Reference.


Quick Reference

Token
Standard
Rebasing
Transferable
Permit (ERC-2612)
Key Integration Note

esETH

ERC-20

No

Yes

Yes

Non-rebasing. Balances never change except on transfer/mint/burn. Safe to cache.

STRAT

ERC-20

No

Yes

Yes

Only minted through note conversion. No inflation schedule.

CDT

ERC-20

No

Yes

Yes

Each token = ~$1 protocol debt. totalSupply() = total debt.

sSTRAT-v2

ERC-20

No

No

No

Non-transferable receipt token. transfer() and approve() revert.

NFT Option

ERC-721

N/A

Yes

N/A

Conversion rights. Requires CDT to exercise. Partial exercise supported.

ESPN

ERC-4626

No

Yes

No

Standard vault interface. Deposit USDS, receive shares.


esETH Integration

esETH is the protocol's non-rebasing wrapper around multiple liquid staking tokens (wstETH, rETH, cbETH, weETH, aWETH), pegged 1:1 with ETH. It is the denomination layer for the entire treasury.

Why esETH is Easy to Integrate

Use esETH the way you use wstETH or rETH. esETH is a standard, non-rebasing ERC-20. Unlike stETH, balances never change from rebase events. You can:

  • Store balances in mapping(address => uint256) without drift

  • Cache balances across blocks without staleness

  • Use esETH in AMM pools, lending markets, and vaults without rebase accounting

  • Treat 1 esETH as exactly 1 ETH — the peg is fixed at 1:1 (yield is harvested separately, not embedded in the token value)

If you've integrated wstETH or rETH, esETH works the same way. If you've struggled with stETH rebase edge cases, esETH eliminates them.

Core Interface

Pricing esETH

esETH is always 1:1 with ETH. For lending markets, collateral valuation, and any system that needs esETH's "fair value":

Do not use AMM spot price for esETH valuation in lending or collateral contexts. The 1:1 peg is maintained by construction — yield from underlying LSTs is harvested separately and does not accrete to esETH's value. AMM prices reflect market dynamics and may diverge from the peg.

circle-info

1 esETH = 1 ETH, always. Unlike wstETH or rETH, esETH does not appreciate over time. Yield from underlying LSTs is harvested and directed to the protocol — not embedded in esETH's value.

Production Warnings

Rounding: expect 1-2 wei dust on maximum-balance operations. When transferring a user's entire esETH balance, the last 1-2 wei may remain due to integer division in internal calculations. If your contract needs exact-balance transfers, read balanceOf() and transfer that amount rather than a cached value.

Supported LSTs are governance-configurable. The set of LSTs that esETH accepts for minting and offers for redemption can change. Do not hardcode LST addresses — query the contract for the current whitelist. A previously supported LST may be removed, and redemption for that LST would revert.

Redemption depends on contract holdings. Unlike minting (which can wrap any supported LST), redemption requires the esETH contract to actually hold the requested LST. If the treasury has rebalanced its LST allocation, your preferred LST may have insufficient balance. Check previewRedeem() before executing.

Yield is not reflected in balances. esETH holders do not receive yield. Underlying LST yield is harvested separately and directed to the protocol's yield receiver. esETH is a denomination layer, not a yield-bearing token for the holder.

ERC-2612 permit front-running. As with any permit-based approval, a griefer can front-run your permit call by submitting the same signature first. The permit succeeds for the griefer (setting the allowance), then your transaction reverts. Mitigation: wrap permit + action in a try/catch — if permit reverts, check if allowance is already set, and proceed with the action.


STRAT Integration

STRAT is a standard ERC-20 with ERC-2612 permit support. It does not rebase and is only minted through convertible note conversion.

Key Facts for Integrators

  • No inflation schedule. STRAT supply only increases when note holders convert. There is no emission schedule or admin mint.

  • Valuation metric: ETH per STRAT (EPS) = total esETH in treasury / total STRAT supply. This is the fundamental metric — it increases when the treasury grows faster than STRAT dilution.

Displaying STRAT Value

For dashboards and portfolio trackers, show EPS alongside the market price:


CDT Integration

CDT is a standard ERC-20 with ERC-2612 permit support. Each CDT represents approximately $1 of protocol debt.

Key Facts for Integrators

  • totalSupply() = total protocol debt. This is an on-chain transparency guarantee. Display it to users as the protocol's total debt outstanding.

  • CDT does not accrue interest or yield. Its value comes from: (1) the $1 face-value redemption right after note expiry, and (2) its utility as a "key" required to exercise NFT conversion rights.

  • CDT is required for conversion. An NFT alone cannot be converted — the holder must also hold and burn CDT. This creates organic demand for CDT beyond its face value.

  • Minting is restricted to authorized protocol contracts (ConvertibleNote, TreasuryLend). CDT cannot be minted by governance or any external address.

CDT as a Leverage Indicator


StakedStrat (sSTRAT-v2) Integration

StakedStrat is the on-chain staking contract. It accepts STRAT deposits and streams esETH rewards over 7-day periods.

Core Interface

Production Warnings

sSTRAT-v2 is non-transferable. transfer(), transferFrom(), and approve() all revert with TransferDisabled. Do not attempt to build markets, pools, or collateral positions with sSTRAT-v2. It is an accounting receipt, not a tradable asset. The only way to move a staked position is migrateStake().

getPendingRewards() may undercount. The view function projects the current reward stream forward but does not account for newly arrived esETH that hasn't been synced. If you need an accurate reading (e.g., for a dashboard), call syncRewards() first in a static call:

Unstaking auto-claims rewards. When a user unstakes, all pending esETH rewards are automatically claimed and sent to them. This is by design — there is no scenario where unstaking forfeits earned yield. Account for this in your UI: after an unstake transaction, the user will have received both their STRAT and their esETH rewards.

7-day streaming means delayed reward visibility. When new rewards arrive at the contract, they stream linearly over 7 days. A large deposit into the reward pool doesn't instantly appear as claimable — it drips over the week. Display this to users as "streaming rewards" rather than a lump sum.


Convertible Note Integration

The convertible note system has two components: the EthStrategyConvertibleNote contract (handles bonding, conversion, and redemption) and the NFT options it mints.

Bonding

Conversion

Reading Note State

Each NFT encodes the full position state. Query it to display note details in your UI:

Production Warnings

Only ownerOf(tokenId) can convert or redeem. NFT approvals (approve, setApprovalForAll) are intentionally not accepted for settlement authorization. If your contract holds note NFTs, it must call conversion/redemption functions directly — it cannot delegate this to another address. This is a security design choice to reduce attack surface.

Timelock prevents immediate conversion. After bonding, there is a ~6.9-day window where the note exists but cannot be converted or redeemed. The NFT and CDT can be transferred during this period. Build your UI to show the timelock countdown.

Partial exercise is supported but CDT must match. To exercise 50% of a note, burn 50% of amountOwedCdt. The NFT's entitlement fields decrement proportionally. The NFT is only burned when amountOwedCdt reaches zero (full exercise).

conversionEntitlements() preview may show zero ETH. If the protocol is underwater (total debt > treasury value in USD), the ETH conversion entitlement for new notes is zero. STRAT conversion rights are still granted. Check the preview before presenting note terms to users.


ESPN (ERC-4626 Vault) Integration

ESPN follows the standard ERC-4626 Tokenized Vaultarrow-up-right interface. If your protocol or aggregator already supports ERC-4626, ESPN requires no custom integration work.

Key Details

Property
Value

Deposit asset

USDS

Share token

ESPN

Deposit cap

Governance-configurable

Withdrawals

May be disabled by governance; exit via LP redemption when direct withdrawals are disabled

circle-exclamation

End-to-End Example: Bond, Stake, and Earn

This example walks through the complete flow using ethers.js v6:

circle-info

Contract addresses for esETH, CDT, EthStrategyConvertibleNote, and StakedStrat will be published on the Contracts page before permissionless launch. Core contracts have completed audits; reports will be released alongside the code.


Deployed Contracts

See Contracts for all deployed and upcoming contract addresses.

Live Now

Contract
Address
Standard

STRAT Option (Presale)

ERC-721

Deploying Soon

Contract
Description

esETH

Non-rebasing unified LST wrapper

CDT

Fungible ERC-20 protocol debt token (with ERC-2612 permit)

EthStrategyConvertibleNote

Bonding, note issuance, conversion, redemption

StakedStrat

On-chain STRAT staking with 7-day reward streaming


Security Considerations for Integrators

Access Control

Contract
Pattern
Owner

esETH

Ownable2Step

Protocol multisig

STRAT

Ownable2Step

Protocol multisig

CDT

Ownable2Step

Protocol multisig

StakedStrat

Ownable2Step

Protocol multisig

ConvertibleNote

Ownable2Step

Protocol multisig

All ownership transfers require a two-step process (propose → accept) to prevent accidental transfers to wrong addresses.

Reentrancy

All state-changing functions on StakedStrat and ConvertibleNote are guarded by nonReentrant. Token transfer callbacks cannot be exploited to corrupt accounting.

Immutability

ETH Strategy contracts are deployed without proxy-upgrade patterns. Deployed code is immutable. Governance can tune parameters (PCF, GCF, supported LSTs, caps) but cannot change contract logic.

What Governance Can and Cannot Change

Can Change (new positions only)
Cannot Change (ever)

PCF/GCF (bonding price factors)

Existing note entitlements

Supported LST whitelist

Existing note timelock/expiry

Deposit caps

Existing loan terms

Reward distribution addresses

CDT supply accounting

Borrow rate, loan duration (TreasuryLend)

Contract logic (no upgrades)


Getting Help

Last updated