Skip to main content

TokenController

Git Source

Inherits: InitializablePair, ITokenController

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

State Variables

tokenX

IERC20 private tokenX;

tokenY

IERC20 private tokenY;

_tokenDepositL

IAmmalgamERC20 private _tokenDepositL;

_tokenDepositX

IAmmalgamERC20 private _tokenDepositX;

_tokenDepositY

IAmmalgamERC20 private _tokenDepositY;

_tokenBorrowL

IAmmalgamERC20 private _tokenBorrowL;

_tokenBorrowX

IAmmalgamERC20 private _tokenBorrowX;

_tokenBorrowY

IAmmalgamERC20 private _tokenBorrowY;

factory

IFactoryCallback internal factory;

saturationAndGeometricTWAPState

ISaturationAndGeometricTWAPState internal saturationAndGeometricTWAPState;

allShares

uint112[6] private allShares;

allAssets

uint112[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;

lastReserveLiquidity

uint112 internal lastReserveLiquidity;

totalDepositLAssets

uint112 internal transient totalDepositLAssets;

totalDepositXAssets

uint112 internal transient totalDepositXAssets;

totalDepositYAssets

uint112 internal transient totalDepositYAssets;

totalBorrowLAssets

uint112 internal transient totalBorrowLAssets;

totalBorrowXAssets

uint112 internal transient totalBorrowXAssets;

totalBorrowYAssets

uint112 internal transient totalBorrowYAssets;

externalLiquidity

uint112 public override externalLiquidity;

Functions

_initialize

function _initialize() internal virtual override;

onlyFeeToSetter

modifier onlyFeeToSetter();

_onlyFeeToSetter

function _onlyFeeToSetter() private view;

underlyingTokens

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

updateAssets

function updateAssets(uint256 tokenType, uint112 assets) private;

updateExternalLiquidity

function updateExternalLiquidity(
uint112 _externalLiquidity
) external virtual 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 virtual 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 (uint112);

getRawReserves

function getRawReserves() internal view returns (uint112 _reserveXAssets, uint112 _reserveYAssets);

getReserves

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

referenceReserves

function referenceReserves() external view virtual returns (uint112, uint112);

totalAssetsAndShares

function totalAssetsAndShares(
bool withInterest
) public view virtual returns (uint112[6] memory _allAssets, uint112[6] memory _allShares);

computeAssetsState

Recalculates current total assets, reserves, and protocol fees, accounting for elapsed time and interest.

*Core logic for interest accrual and state updates (used by totalAssetsAndShares when withInterest is true):

  1. Fetches raw reserves before computing interest.
  2. If totalDepositLAssets is not 0, returns transient asset values immediately (no interest to accrue).
  3. Calculates time elapsed since last update (deltaUpdateTimestamp) and last lending state check (deltaLendingTimestamp).
  4. If no time has elapsed since last lending check (deltaLendingTimestamp == 0), returns stored values without recalculation.
  5. Otherwise:
  • Computes the current market tick via getTickFromReserves() and bounds it to valid ranges.
  • Determines active lending state tick and saturation percentage using getLendingStateTick().
  • Calls Interest.accrueInterestWithAssets() to calculate interest, update asset values, and compute protocol fees.
  • Adds LP-earned interest portions to X and Y reserves.*
function computeAssetsState()
internal
view
returns (
uint112[6] memory _allAssets,
uint112 _reserveXAssets,
uint112 _reserveYAssets,
uint256[3] memory protocolFees
);

Returns

NameTypeDescription
_allAssetsuint112[6]Array of six uint112 values: Recalculated total assets for each of the 6 Amalgam token types (post-interest).
_reserveXAssetsuint112Reserve balance for Asset X, updated with LP-earned interest.
_reserveYAssetsuint112Reserve balance for Asset Y, updated with LP-earned interest.
protocolFeesuint256[3]Array of three uint256 values: Accumulated protocol fees for DEPOSIT_L, DEPOSIT_X, and DEPOSIT_Y (from interest accrual).

mintPenalties

function mintPenalties(address account, uint32 deltaLendingTimestamp) internal;

getAssets

function getAssets(
uint112[6] memory _totalAssets,
uint112[6] memory _totalShares,
address toCheck
) internal view returns (uint256[6] memory userAssets);

updateTokenController

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

updateReferenceReserve

function updateReferenceReserve(
int256 newTick
) internal;

mintProtocolFees

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

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 missingXAssets, uint112 missingYAssets);

getDepositAndActiveLiquidityAssets

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 getDepositAndActiveLiquidityAssets()
internal
view
returns (uint256 depositLiquidityAssets, uint256 currentActiveLiquidityAssets);

Returns

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

burnBadDebt

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

getUpdatedReferenceReserves

Get the updated reference reserves based on the newTick.

function getUpdatedReferenceReserves(
int256 newTick
) internal view returns (uint112, uint112);

Parameters

NameTypeDescription
newTickint256The current tick.

Returns

NameTypeDescription
<none>uint112_referenceReserveX The updated reference reserve X.
<none>uint112_referenceReserveY The updated reference reserve Y.

Errors

Forbidden

error Forbidden();