Skip to main content

AbstractRouter

AbstractRouter​

Partial implementation and requirements for liquidity routers.

boundMakerContracts​

mapping(address => bool) boundMakerContracts

the bound maker contracts which are allowed to call this router.

onlyBound​

modifier onlyBound()

This modifier verifies that msg.sender an allowed caller of this router.

boundOrAdmin​

modifier boundOrAdmin()

This modifier verifies that msg.sender is the admin or an allowed caller of this router.

MakerBind​

event MakerBind(address maker)

logging bound maker contract by emitting this data, an indexer will be able to keep track of what maker contracts are allowed to call this router.

Parameters​

NameTypeDescription
makeraddressthe maker address. This is indexed, so that RPC calls can filter on it.

MakerUnbind​

event MakerUnbind(address maker)

logging unbound maker contract by emitting this data, an indexer will be able to keep track of what maker contracts are allowed to call this router.

Parameters​

NameTypeDescription
makeraddressthe maker address. This is indexed, so that RPC calls can filter on it.

isBound​

function isBound(address mkr) public view returns (bool)

getter for the makers: addr => bool mapping

Parameters​

NameTypeDescription
mkraddressthe address of a maker contract

Return Values​

NameTypeDescription
[0]booltrue if mkr is authorized to call this router.

pull​

function pull(contract IERC20 token, address reserveId, uint256 amount, bool strict) external returns (uint256 pulled)

pulls liquidity from the reserve and sends it to the calling maker contract.

Parameters​

NameTypeDescription
tokencontract IERC20is the ERC20 managing the pulled asset
reserveIdaddressidentifies the fund owner (router implementation dependent).
amountuint256of token the maker contract wishes to pull from its reserve
strictboolwhen the calling maker contract accepts to receive more funds from reserve than required (this may happen for gas optimization)

Return Values​

NameTypeDescription
pulleduint256the amount that was successfully pulled.

pull​

function __pull__(contract IERC20 token, address reserveId, uint256 amount, bool strict) internal virtual returns (uint256)

router-dependent implementation of the pull function

Parameters​

NameTypeDescription
tokencontract IERC20Token to be transferred
reserveIdaddressdetermines the location of the reserve (router implementation dependent).
amountuint256The amount of tokens to be transferred
strictboolwether the caller maker contract wishes to pull at most amount tokens of owner.

Return Values​

NameTypeDescription
[0]uint256pulled The amount pulled if successful; otherwise, 0.

push​

function push(contract IERC20 token, address reserveId, uint256 amount) external returns (uint256 pushed)

pushes assets from calling's maker contract to a reserve

Parameters​

NameTypeDescription
tokencontract IERC20is the asset the maker is pushing
reserveIdaddressdetermines the location of the reserve (router implementation dependent).
amountuint256is the amount of asset that should be transferred from the calling maker contract

Return Values​

NameTypeDescription
pusheduint256fraction of amount that was successfully pushed to reserve.

push​

function __push__(contract IERC20 token, address reserveId, uint256 amount) internal virtual returns (uint256 pushed)

router-dependent implementation of the push function

Parameters​

NameTypeDescription
tokencontract IERC20Token to be transferred
reserveIdaddressdetermines the location of the reserve (router implementation dependent).
amountuint256The amount of tokens to be transferred

Return Values​

NameTypeDescription
pusheduint256The amount pushed if successful; otherwise, 0.

flush​

function flush(contract IERC20[] tokens, address reserveId) external

iterative push for the whole balance in a single call

Parameters​

NameTypeDescription
tokenscontract IERC20[]to flush
reserveIdaddressdetermines the location of the reserve (router implementation dependent).

bind​

function bind(address makerContract) public

adds a maker contract address to the allowed makers of this router

this function is callable by router's admin to bootstrap, but later on an allowed maker contract can add another address

Parameters​

NameTypeDescription
makerContractaddressthe maker contract address

_unbind​

function _unbind(address makerContract) internal

removes a maker contract address from the allowed makers of this router

Parameters​

NameTypeDescription
makerContractaddressthe maker contract address

unbind​

function unbind() external

removes msg.sender from the allowed makers of this router

unbind​

function unbind(address makerContract) external

removes a makerContract from the allowed makers of this router

Parameters​

NameTypeDescription
makerContractaddressthe maker contract address

checkList​

function checkList(contract IERC20 token, address reserveId) external view

allows a makerContract to verify it is ready to use this router for a particular reserve

checkList returns normally if all needed approval are strictly positive. It reverts otherwise with a reason.

Parameters​

NameTypeDescription
tokencontract IERC20is the asset (and possibly its overlyings) whose approval must be checked
reserveIdaddressof the tokens that are being pulled

checkList​

function __checkList__(contract IERC20 token, address reserveId) internal view virtual

router-dependent additional checks

Parameters​

NameTypeDescription
tokencontract IERC20is the asset (and possibly its overlyings) whose approval must be checked
reserveIdaddressof the tokens that are being pulled

activate​

function activate(contract IERC20 token) external

performs necessary approval to activate router function on a particular asset

Parameters​

NameTypeDescription
tokencontract IERC20the asset one wishes to use the router for

activate​

function __activate__(contract IERC20 token) internal virtual

router-dependent implementation of the activate function

Parameters​

NameTypeDescription
tokencontract IERC20the asset one wishes to use the router for

balanceOfReserve​

function balanceOfReserve(contract IERC20 token, address reserveId) public view virtual returns (uint256)

Balance of a reserve

Parameters​

NameTypeDescription
tokencontract IERC20the asset one wishes to know the balance of
reserveIdaddressthe identifier of the reserve

Return Values​

NameTypeDescription
[0]uint256the balance of the reserve