Seed liquidity
A contract to pool funds which are then used to boostrap a new Uniswap liquidity pair.
Specification
- A new
SeedLiquidity
contract is deployed for non-existent or non-liquid Uniswap pair. The initial price is specified usingtarget
amounts. - Users
deposit
tokens into the contract until both targets are reached. - A user calls
provide
to supply liquidity to Uniswap. - Users can
claim
their pro-rata share of the LP received LP token. - If the target amounts are not raised or the liquidity is not provided before expiry, users can
bail
their deposits and the contract becomes void.
Interface
__init__(address,address[2],uint256[2],uint256,uint256)
Set up a new seed liquidity contract
router
UniswapRouter address, e.g. 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488Dtokens
Tokens which comprise a pairtarget
Amounts of tokens to provide, also determines the initial priceduration
Duration over which the contract accepts deposits, in secondslocktime
How long the liquidity will stay locked, in seconds
deposit(uint256[2])
Deposit token amounts into the contract.
A user must have approved the contract to spend both tokens. The token amounts are clamped to not exceed their targets. This function only works up to the moment when liquidity is provided or the contract has expired, whichever comes first.
amounts
Token amounts to deposit
provide()
Bootstrap a new Uniswap pair using the assets in the contract
This function can only be called once and before the contract has expired. Requires the target to be reached for both tokens. Requires the pool to have no liquidity in it.
claim()
Claim the received LP tokens
Can be called after liquidity is provided and the locktime has expired. The token amount is distributed pro-rata to the contribution.
bail()
Withdraw the tokens if the contract has expired without providing liquidity
Can be called after expiry given no liquidity has been provided.