TokenController
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):
- Fetches raw reserves before computing interest.
- If
totalDepositLAssetsis not 0, returns transient asset values immediately (no interest to accrue). - Calculates time elapsed since last update (
deltaUpdateTimestamp) and last lending state check (deltaLendingTimestamp). - If no time has elapsed since last lending check (
deltaLendingTimestamp == 0), returns stored values without recalculation. - 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
| Name | Type | Description |
|---|---|---|
_allAssets | uint112[6] | Array of six uint112 values: Recalculated total assets for each of the 6 Amalgam token types (post-interest). |
_reserveXAssets | uint112 | Reserve balance for Asset X, updated with LP-earned interest. |
_reserveYAssets | uint112 | Reserve balance for Asset Y, updated with LP-earned interest. |
protocolFees | uint256[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
| Name | Type | Description |
|---|---|---|
depositLiquidityAssets | uint256 | The deposit liquidity assets. |
currentActiveLiquidityAssets | uint256 | The 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
| Name | Type | Description |
|---|---|---|
newTick | int256 | The current tick. |
Returns
| Name | Type | Description |
|---|---|---|
<none> | uint112 | _referenceReserveX The updated reference reserve X. |
<none> | uint112 | _referenceReserveY The updated reference reserve Y. |
Errors
Forbidden
error Forbidden();