Emission Sections

Continuing with the Liquity example...

Manual Entry Functions

90% of the time you'll only need the manual... functions (imported on line 1). There are 4 of them:

  • manualStep(

    start: unixTimestamp OR date string <- time of the first vest

    stepDuration: unixTimestamp OR date string <- time period between vests

    number: number <- number of discreet unlocks in the vesting schedule

    amount: number <- number of coins emitted in each discreet unlock

    dateFormat: string, optional <- if date strings are used, the format can be specified here. Default is "YYYY/MM/DD"

    )

  • manualCliff(

    start: unixTimestamp OR date string <- timestamp of the cliff

    amount: number <- number of coins emitted in the cliff

    dateFormat: string, optional <- if date strings are used, the format can be specified here. Default is "YYYY/MM/DD"

    )

  • manualLinear(

    start: unixTimestamp OR date string<- start of the linear vesting period

    end: unixTimestamp OR date string <- end of the linear vesting period

    amount: number <- number of coins emitted over the period

    dateFormat: string, optional <- if date strings are used, the format can be specified here. Default is "YYYY/MM/DD"

    )

  • manualLog(

    start: unixTimestamp OR date string<- start of the linear vesting period

    end: unixTimestamp OR date string <- end of the linear vesting period

    amount: number <- number of coins emitted over the period

    periodLength: number <- the length in time between each change in rate

    percentDecreasePerPeriod: number <- the regular decrease in emission rate

    dateFormat: string, optional <- if date strings are used, the format can be specified here. Default is "YYYY/MM/DD"

    )

More Complex Emission Shapes

Sometimes you might need to make more advanced shapes, for example, if the rate of emissions decrease over time. In this example, We created a rewards() function which makes a complex shape out of smaller linear sections (line 9, used on line 33). NB this particular shape could've been done with the manualLog() function.

Emissions sections should return real quantities of tokens. Not percentages, and accounting for any token decimals.

On Chain Data

Some protocol files use on-chain data (Aave, Tornado etc). Where possible we like to use on chain data. The time sensitive nature of emissions schedules can make on-chain data more difficult to research and write. If you think using on-chain data is a better option for you, contact us through Discord and we can help out.

Last updated