Skip to main content

TokenController

Git Source

Inherits: ITokenController

Wrapper of the ERC20 tokens that has some functionality similar to the ERC1155.

State Variables

tokenX

IERC20 private immutable tokenX;

tokenY

IERC20 private immutable tokenY;

_tokenDepositL

IAmmalgamERC20 private immutable _tokenDepositL;

_tokenDepositX

IAmmalgamERC20 private immutable _tokenDepositX;

_tokenDepositY

IAmmalgamERC20 private immutable _tokenDepositY;

_tokenBorrowL

IAmmalgamERC20 private immutable _tokenBorrowL;

_tokenBorrowX

IAmmalgamERC20 private immutable _tokenBorrowX;

_tokenBorrowY

IAmmalgamERC20 private immutable _tokenBorrowY;

allShares

uint112[6] private allShares;

allAssets

uint128[6] internal allAssets;

reserveXAssets

uint112 private reserveXAssets;

reserveYAssets

uint112 private reserveYAssets;

lastUpdateTimestamp

uint32 internal lastUpdateTimestamp;

referenceReserveX

uint112 internal referenceReserveX;

referenceReserveY

uint112 internal referenceReserveY;

lastLendingTimestamp

uint32 internal lastLendingTimestamp;

missingXAssets

uint112 internal missingXAssets;

missingYAssets

uint112 internal missingYAssets;

lastPenaltyTimestamp

uint32 internal lastPenaltyTimestamp;

lastReserveLiquidity

uint128 internal lastReserveLiquidity;

lastActiveLiquidityAssets

uint128 internal lastActiveLiquidityAssets;

totalDepositLAssets

uint256 internal totalDepositLAssets;

totalDepositXAssets

uint256 internal totalDepositXAssets;

totalDepositYAssets

uint256 internal totalDepositYAssets;

totalBorrowLAssets

uint256 internal totalBorrowLAssets;

totalBorrowXAssets

uint256 internal totalBorrowXAssets;

totalBorrowYAssets

uint256 internal totalBorrowYAssets;

externalLiquidity

uint112 public override externalLiquidity = 0;

factory

IFactoryCallback internal immutable factory;

saturationAndGeometricTWAPState

ISaturationAndGeometricTWAPState internal immutable saturationAndGeometricTWAPState;

Functions

constructor

constructor();

onlyFeeToSetter

modifier onlyFeeToSetter();

_onlyFeeToSetter

function _onlyFeeToSetter() private view;

underlyingTokens

function underlyingTokens() public view override returns (IERC20, IERC20);

updateAssets

function updateAssets(uint256 tokenType, uint128 assets) private;

updateExternalLiquidity

function updateExternalLiquidity(
uint112 _externalLiquidity
) external onlyFeeToSetter;

mintId

function mintId(uint256 tokenType, address sender, address to, uint256 assets, uint256 shares_) internal;

burnId

function burnId(uint256 tokenType, address sender, address from, uint256 assets, uint256 shares_) internal;

tokens

function tokens(
uint256 tokenType
) public view override returns (IAmmalgamERC20);

balanceOf

function balanceOf(address account, uint256 tokenType) internal view returns (uint256);

totalShares

function totalShares(
uint256 tokenType
) internal view returns (uint256);

rawTotalAssets

function rawTotalAssets(
uint256 tokenType
) internal view returns (uint128);

getReserves

function getReserves() public view returns (uint112 _reserveXAssets, uint112 _reserveYAssets, uint32 _lastTimestamp);

getTickRange

function getTickRange() public view returns (int16 minTick, int16 maxTick);

referenceReserves

function referenceReserves() public view returns (uint112, uint112);

totalAssets

Computes the current total Assets.

If the last lending state update is outdated (i.e., not matching the current block timestamp), the function recalculates the assets based on the duration since the last update, the lending state, and reserve balances. If the timestamp is current, the previous asset (without recalculation) is returned.

function totalAssets() public view returns (uint128[6] memory);

Returns

NameTypeDescription
<none>uint128[6]totalAssets An array of six uint128 values representing the total assets for each of the 6 amalgam token types. These values may be adjusted based on the time elapsed since the last update. If the timestamp is up-to-date, the previously calculated total assets are returned without recalculation.

mintPenalties

function mintPenalties(address account, uint32 deltaPenaltyTimestamp) internal;

getAssets

function getAssets(
uint128[6] memory currentAssets,
address toCheck
) internal view returns (uint256[6] memory userAssets);

updateTokenController

function updateTokenController(
uint32 currentTimestamp,
uint32 deltaUpdateTimestamp,
uint32 deltaLendingTimestamp,
uint256 _reserveXAssets,
uint256 _reserveYAssets
) internal returns (uint112 updatedReservesX, uint112 updatedReservesY);

updateReferenceReserve

function updateReferenceReserve(
int256 newTick
) internal;

mintProtocolFees

function mintProtocolFees(uint256 tokenType, address feeTo, uint256 protocolFee) private;

updateReserves

function updateReserves(uint256 newReserveXAssets, uint256 newReserveYAssets) internal;

updateReservesAndReference

function updateReservesAndReference(
uint256 _reserveXAssets,
uint256 _reserveYAssets,
uint256 newReserveXAssets,
uint256 newReserveYAssets
) internal;

_castReserves

function _castReserves(uint256 _reserveXAssets, uint256 _reserveYAssets) internal pure returns (uint112, uint112);

getNetBalances

function getNetBalances(uint256 _reserveXAssets, uint256 _reserveYAssets) internal view returns (uint256, uint256);

missingAssets

function missingAssets() internal view returns (uint112, uint112);

updateMissingAssets

function updateMissingAssets() internal;

getDepositAndBorrowAndActiveLiquidityAssets

Get the deposit, borrow, and active liquidity assets.

This function is used to get the deposit liquidity assets, borrow liquidity assets (BLA), last active liquidity assets (ALA_0), and current active liquidity assets (ALA_1).

function getDepositAndBorrowAndActiveLiquidityAssets()
internal
view
returns (uint256 depositLiquidityAssets, uint256 borrowLAssets, uint256 currentActiveLiquidityAssets);

Returns

NameTypeDescription
depositLiquidityAssetsuint256The deposit liquidity assets.
borrowLAssetsuint256The borrow liquidity assets.
currentActiveLiquidityAssetsuint256The current active liquidity assets.

updateReservesAndActiveLiquidity

Update the reserves and active liquidity.

This function is used to update the last reserves liquidity (RL_0) and last active liquidity assets (ALA_0).

function updateReservesAndActiveLiquidity(
uint256 _reserveXAssets,
uint256 _reserveYAssets
) internal returns (uint256 adjustedActiveLiquidity);

Parameters

NameTypeDescription
_reserveXAssetsuint256The reserve X assets.
_reserveYAssetsuint256The reserve Y assets.

getAdjustedActiveLiquidity

Get the adjusted active liquidity which is the active liquidity without the swap fees.

This function is used to get the adjusted active liquidity.

function getAdjustedActiveLiquidity(
uint256 _reserveXAssets,
uint256 _reserveYAssets
) internal view returns (uint256 adjustedActiveLiquidity);

Parameters

NameTypeDescription
_reserveXAssetsuint256The reserve X assets.
_reserveYAssetsuint256The reserve Y assets.

Returns

NameTypeDescription
adjustedActiveLiquidityuint256The adjusted active liquidity.

getCurrentAndAdjustedActiveLiquidity

function getCurrentAndAdjustedActiveLiquidity(
uint256 _reserveXAssets,
uint256 _reserveYAssets
) internal view returns (uint256 currentReserveLiquidity, uint256 adjustedActiveLiquidity);

getCurrentReserveLiquidity

function getCurrentReserveLiquidity(uint256 _reserveXAssets, uint256 _reserveYAssets) private pure returns (uint256);

burnBadDebt

function burnBadDebt(address borrower, uint256 tokenType, uint256 reserve) internal;

Errors

Forbidden

error Forbidden();