LinearCurve

Git Source

Curve Visualization

%%{init: {"xychart": {"showTitle": true}} }%%
xychart-beta
    title "Linear Curve"
    x-axis "Assets (ETH)" [0.000000000000000000, 1.000000000000000000, 2.000000000000000000, 3.000000000000000000, 4.000000000000000000, 5.000000000000000000, 6.000000000000000000, 7.000000000000000000, 8.000000000000000000, 9.000000000000000000, 10.000000000000000000, 11.000000000000000000, 12.000000000000000000, 13.000000000000000000, 14.000000000000000000, 15.000000000000000000, 16.000000000000000000, 17.000000000000000000, 18.000000000000000000, 19.000000000000000000, 20.000000000000000000, 21.000000000000000000, 22.000000000000000000, 23.000000000000000000, 24.000000000000000000, 25.000000000000000000, 26.000000000000000000, 27.000000000000000000, 28.000000000000000000, 29.000000000000000000, 30.000000000000000000, 31.000000000000000000, 32.000000000000000000, 33.000000000000000000, 34.000000000000000000, 35.000000000000000000, 36.000000000000000000, 37.000000000000000000, 38.000000000000000000, 39.000000000000000000, 40.000000000000000000, 41.000000000000000000, 42.000000000000000000, 43.000000000000000000, 44.000000000000000000, 45.000000000000000000, 46.000000000000000000, 47.000000000000000000, 48.000000000000000000, 49.000000000000000000, 50.000000000000000000, 51.000000000000000000, 52.000000000000000000, 53.000000000000000000, 54.000000000000000000, 55.000000000000000000, 56.000000000000000000, 57.000000000000000000, 58.000000000000000000, 59.000000000000000000, 60.000000000000000000, 61.000000000000000000, 62.000000000000000000, 63.000000000000000000, 64.000000000000000000, 65.000000000000000000, 66.000000000000000000, 67.000000000000000000, 68.000000000000000000, 69.000000000000000000, 70.000000000000000000, 71.000000000000000000, 72.000000000000000000, 73.000000000000000000, 74.000000000000000000, 75.000000000000000000, 76.000000000000000000, 77.000000000000000000, 78.000000000000000000, 79.000000000000000000, 80.000000000000000000, 81.000000000000000000, 82.000000000000000000, 83.000000000000000000, 84.000000000000000000, 85.000000000000000000, 86.000000000000000000, 87.000000000000000000, 88.000000000000000000, 89.000000000000000000, 90.000000000000000000, 91.000000000000000000, 92.000000000000000000, 93.000000000000000000, 94.000000000000000000, 95.000000000000000000, 96.000000000000000000, 97.000000000000000000, 98.000000000000000000, 99.000000000000000000]
    y-axis "Shares"
    line [0.000000000000000000, 1.000000000000000000, 2.000000000000000000, 3.000000000000000000, 4.000000000000000000, 5.000000000000000000, 6.000000000000000000, 7.000000000000000000, 8.000000000000000000, 9.000000000000000000, 10.000000000000000000, 11.000000000000000000, 12.000000000000000000, 13.000000000000000000, 14.000000000000000000, 15.000000000000000000, 16.000000000000000000, 17.000000000000000000, 18.000000000000000000, 19.000000000000000000, 20.000000000000000000, 21.000000000000000000, 22.000000000000000000, 23.000000000000000000, 24.000000000000000000, 25.000000000000000000, 26.000000000000000000, 27.000000000000000000, 28.000000000000000000, 29.000000000000000000, 30.000000000000000000, 31.000000000000000000, 32.000000000000000000, 33.000000000000000000, 34.000000000000000000, 35.000000000000000000, 36.000000000000000000, 37.000000000000000000, 38.000000000000000000, 39.000000000000000000, 40.000000000000000000, 41.000000000000000000, 42.000000000000000000, 43.000000000000000000, 44.000000000000000000, 45.000000000000000000, 46.000000000000000000, 47.000000000000000000, 48.000000000000000000, 49.000000000000000000, 50.000000000000000000, 51.000000000000000000, 52.000000000000000000, 53.000000000000000000, 54.000000000000000000, 55.000000000000000000, 56.000000000000000000, 57.000000000000000000, 58.000000000000000000, 59.000000000000000000, 60.000000000000000000, 61.000000000000000000, 62.000000000000000000, 63.000000000000000000, 64.000000000000000000, 65.000000000000000000, 66.000000000000000000, 67.000000000000000000, 68.000000000000000000, 69.000000000000000000, 70.000000000000000000, 71.000000000000000000, 72.000000000000000000, 73.000000000000000000, 74.000000000000000000, 75.000000000000000000, 76.000000000000000000, 77.000000000000000000, 78.000000000000000000, 79.000000000000000000, 80.000000000000000000, 81.000000000000000000, 82.000000000000000000, 83.000000000000000000, 84.000000000000000000, 85.000000000000000000, 86.000000000000000000, 87.000000000000000000, 88.000000000000000000, 89.000000000000000000, 90.000000000000000000, 91.000000000000000000, 92.000000000000000000, 93.000000000000000000, 94.000000000000000000, 95.000000000000000000, 96.000000000000000000, 97.000000000000000000, 98.000000000000000000, 99.000000000000000000]

Inherits: BaseCurve

Author: 0xIntuition

A simple 1:1 price model implemented as a bonding curve. This curve maintains a direct linear relationship between assets and shares, where the conversion follows the formula: $$f(x) = x$$ where:

  • $x$ represents either assets or shares to be converted
  • $f(x)$ returns the corresponding amount in the target unit

The price mechanism relies on fee accumulation rather than supply-based pricing. As fees are collected, they are distributed proportionally across all shareholders, creating gradual appreciation in share value. This provides a conservative incentivization model where early participants benefit from fee accumulation over time.

This implementation offers a low-volatility approach to value accrual, suitable for scenarios where predictable, steady returns are preferred over dynamic pricing mechanisms.

This curve is not currently used in the EthMultiVault implementation to preserve audited code. It serves as a reference implementation demonstrating how traditional pro-rata share pricing can be adapted to the bonding curve architecture for future versions.

State Variables

MAX_SHARES

Maximum number of shares that can be handled by the curve.

uint256 public constant MAX_SHARES = type(uint256).max;

MAX_ASSETS

Maximum number of assets that can be handled by the curve.

uint256 public constant MAX_ASSETS = type(uint256).max;

Functions

constructor

Constructor for the Linear Curve.

constructor(string memory _name) BaseCurve(_name);

Parameters

NameTypeDescription
_namestringThe name of the curve.

previewDeposit

Computes the 1:1 relationship between assets <--> shares.

function previewDeposit(uint256 assets, uint256, uint256) external pure override returns (uint256);

Parameters

NameTypeDescription
assetsuint256Quantity of assets to deposit
<none>uint256
<none>uint256

Returns

NameTypeDescription
<none>uint256shares The number of shares that would be minted

previewMint

Computes the 1:1 relationship between assets <--> shares.

function previewMint(uint256 shares, uint256, uint256) external pure override returns (uint256);

Parameters

NameTypeDescription
sharesuint256Quantity of shares to mint
<none>uint256
<none>uint256

Returns

NameTypeDescription
<none>uint256assets The number of assets that would be required to mint the shares

previewWithdraw

Computes the 1:1 relationship between assets <--> shares.

function previewWithdraw(uint256 assets, uint256, uint256) external pure override returns (uint256);

Parameters

NameTypeDescription
assetsuint256Quantity of assets to withdraw
<none>uint256
<none>uint256

Returns

NameTypeDescription
<none>uint256shares The number of shares that would need to be redeemed

previewRedeem

Computes the 1:1 relationship between assets <--> shares.

function previewRedeem(uint256 shares, uint256, uint256) external pure override returns (uint256);

Parameters

NameTypeDescription
sharesuint256Quantity of shares to burn
<none>uint256
<none>uint256

Returns

NameTypeDescription
<none>uint256assets The number of assets that would be returned

convertToShares

Computes the 1:1 relationship between assets <--> shares.

function convertToShares(uint256 assets, uint256, uint256) external pure override returns (uint256 shares);

Parameters

NameTypeDescription
assetsuint256Quantity of assets to convert to shares
<none>uint256
<none>uint256

Returns

NameTypeDescription
sharesuint256The number of shares equivalent to the given assets

convertToAssets

Computes the 1:1 relationship between assets <--> shares.

function convertToAssets(uint256 shares, uint256, uint256) external pure override returns (uint256 assets);

Parameters

NameTypeDescription
sharesuint256Quantity of shares to convert to assets
<none>uint256
<none>uint256

Returns

NameTypeDescription
assetsuint256The number of assets equivalent to the given shares

currentPrice

In a linear curve, the base price will always be 1. Pool ratio adjustments are dealt with in the EthMultiVault itself.

function currentPrice(uint256) public pure override returns (uint256 sharePrice);

Parameters

NameTypeDescription
<none>uint256

Returns

NameTypeDescription
sharePriceuint256The current price of a share, scaled by 1e18

maxShares

The maximum number of shares that this curve can handle without overflowing.

Checked by the EthMultiVault before transacting

function maxShares() external pure override returns (uint256);

maxAssets

The maximum number of assets that this curve can handle without overflowing.

Checked by the EthMultiVault before transacting

function maxAssets() external pure override returns (uint256);