Resolver Selection
This guide concisely explains how to choose and configure the right resolver for a yield-bearing underlying assets.
A resolver is a code template that supports ~99.9% of yield-bearing underlyings and enables the permissionless creation of Napier Markets.
Use this guide to quickly determine the correct resolver settings for your use case.
Glossary
Underlying: Yield-bearing position token (e.g., a vault or lending position).
Asset: Base token used to value the underlying (what users deposit/withdraw).
Vault: ERC-20 token representing ownership of the underlying (e.g., ERC-4626 share token).
Resolver: Contract that returns the exchange rate between vault shares and assets.
TL;DR
Choose the appropriate resolver for your underlying and gather the required inputs.
Rebasing tokens → Not natively supported.
ERC-4626 standard → ERC4626 Resolver
Has “convert shares → assets” function → Custom Conversion Resolver (spec-like
convertToAssets(uint256 shares) -> uint256 assets
; name may differ)Has “price per share” function → Share Price Resolver (e.g.,
assetsPerShare() -> uint256 assets
)External oracle price → External Price Resolver (generic) or Price Oracle Feed Resolver (Chainlink / Redstone / etc)
Constant price (no yield, fixed rate) → Constant Price Resolver
Other / unclear → Contact us.
Always verify the target function signatures and return types match what the resolver expects, and that returned values use correct decimals.
Flowchart
Here we visualize which resolver to choose based on the underlying asset.

Inputs by Resolver
Each resolver requires a different set of inputs.
ERC 4626
vault: ERC-4626 token address
asset
is auto-read fromvault.asset()
Custom Conversion
vault: underlying ERC-20 address
asset: base ERC-20 address (e.g., USDC)
conversionFunctionSignature: function that converts shares → assets Spec
customConversionFn(uint256 shares) returns (uint256 assets)
shares
: amount of vault shares to convertassets
: resulting base asset amount
Share Price
vault: underlying ERC-20 address
asset: base ERC-20 address
priceFunctionSignature: function that returns price per share Spec
customPriceFn() returns (uint256 assets)
assets
: base asset amount for 1 share (equivalent toconvertToAssets(10**vault.decimals())
scaled accordingly)
External Price Oracle
vault: underlying ERC-20 address
asset: base ERC-20 address
oracle: price oracle address
priceFeedFunctionSignature: oracle function returning price Spec
priceFeedFn() returns (uint256 assets)
assets
: base asset amount for 1 share
Price Oracle Feed
vault: underlying ERC-20 address
asset: base ERC-20 address
oracle: Chainlink
AggregatorV3Interface
that returns vault price vs. asset
Constant Price
vault: underlying ERC-20 address
asset: base ERC-20 address
Caution: price is fixed; implies no yield and ignores risks (e.g., de-peg).
Critical Notes & Assumptions
Decimals matter: all conversion/price returns must use correct precision.
Trusted sources: share-price, conversion, and oracle feeds are treated as trusted.
No freshness checks: resolvers do not validate data staleness.
Immutability: resolvers cannot be upgraded after deployment.
No reverts: the called functions must not revert.
Exact signatures: function signatures & return types must match each resolver’s spec.
TIP: vault
and asset
must be ERC-20. If the underlying accepts native coin deposits, set asset
to the wrapped native token for that chain.
Common Wrapped Native Token Addresses
Ethereum: WETH
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Optimism: WETH
0x4200000000000000000000000000000000000006
BSC: WBNB
0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
Polygon: WMATIC
0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
Sonic: WS_SONIC
0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
Fraxtal: WFRXETH
0xFC00000000000000000000000000000000000006
HyperLiquid: WHYPE
0x5555555555555555555555555555555555555555
Mantle: WMNT
0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8
Base: WETH
0x4200000000000000000000000000000000000006
Arbitrum: WETH
0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Avalanche: WAVAX
0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7
Final Checks Before Deploy
Last updated
Was this helpful?