LPToken.sol contains the implementation of APWine's AMM LP Tokens.
AMM LP tokens follow the ERC1155 standard. Only one
LPToken.sol contract instance is deployed for all futures, periods, and pairs. We differentiate the LP Tokens in the ID of the token.
Token ID structure (256 bits):
- [255 ... 192] (64 bits): AMM ID. The ID of the exchange for a specific future.
- [191 ... 128] (64 bits): encode the period index
- [128 ... 96] (32 bits): encode the pair ID. One bit would be necessary but some future pairs might be added later.
- [95 ... 0] (96 bits): reserved for future use cases.
All the standard EIP1155 methods are implemented. In particular, methods such as
function burnFrom( address account, uint256 id, uint256 value)
Verifies that the sender is authorized (AMM pool or admin) or is the
account to burn the token from, and burns the amount
value of token with id
function mint( address to, uint64 _ammId, uint64 _periodIndex, uint32 _pairId, uint256 amount, bytes memory data)
Verifies that the sender is an authorized minter and call the ERC115
mint method to mint the given
amount of token with the corresponding id (constructed from
function getAMMId(uint256 _id)
Get the AMM ID corresponding to the token id
_id. The AMM id is the identifier of the AMM for a given future (ex: the AMM for AAVE-ADAI-30D).
function getPeriodIndex(uint256 _id)
Get the period index corresponding to the LP token with id
function getPairId(uint256 _id)
pairID corresponding to the LP Token with id
pairID precize if the pool is a PT/Underlying pool or PT/FYT pool.
Follow this link for more details about the AMM pool architecture.