Skip to main content

TRSRYv1

Git Source

Inherits: Module

Treasury holds all other assets under the control of the protocol.

State Variables

active

Status of the treasury. If false, no withdrawals or debt can be incurred.

bool public active;

withdrawApproval

Mapping of who is approved for withdrawal.

withdrawer -> token -> amount. Infinite approval is max(uint256).

mapping(address => mapping(ERC20 => uint256)) public withdrawApproval;

debtApproval

Mapping of who is approved to incur debt.

debtor -> token -> amount. Infinite approval is max(uint256).

mapping(address => mapping(ERC20 => uint256)) public debtApproval;

totalDebt

Total debt for token across all withdrawals.

mapping(ERC20 => uint256) public totalDebt;

reserveDebt

Debt for particular token and debtor address

mapping(ERC20 => mapping(address => uint256)) public reserveDebt;

Functions

onlyWhileActive

modifier onlyWhileActive();

increaseWithdrawApproval

Increase approval for specific withdrawer addresses

function increaseWithdrawApproval(address withdrawer_, ERC20 token_, uint256 amount_) external virtual;

decreaseWithdrawApproval

Decrease approval for specific withdrawer addresses

function decreaseWithdrawApproval(address withdrawer_, ERC20 token_, uint256 amount_) external virtual;

withdrawReserves

Allow withdrawal of reserve funds from pre-approved addresses.

function withdrawReserves(address to_, ERC20 token_, uint256 amount_) external virtual;

increaseDebtorApproval

Increase approval for someone to accrue debt in order to withdraw reserves.

Debt will generally be taken by contracts to allocate treasury funds in yield sources.

function increaseDebtorApproval(address debtor_, ERC20 token_, uint256 amount_) external virtual;

decreaseDebtorApproval

Decrease approval for someone to withdraw reserves as debt.

function decreaseDebtorApproval(address debtor_, ERC20 token_, uint256 amount_) external virtual;

incurDebt

Pre-approved policies can get a loan to perform operations with treasury assets.

function incurDebt(ERC20 token_, uint256 amount_) external virtual;

repayDebt

Repay a debtor debt.

Only confirmed to safely handle standard and non-standard ERC20s.

Can have unforeseen consequences with ERC777. Be careful with ERC777 as reserve.

function repayDebt(address debtor_, ERC20 token_, uint256 amount_) external virtual;

setDebt

An escape hatch for setting debt in special cases, like swapping reserves to another token.

function setDebt(address debtor_, ERC20 token_, uint256 amount_) external virtual;

getReserveBalance

Get total balance of assets inside the treasury + any debt taken out against those assets.

function getReserveBalance(ERC20 token_) external view virtual returns (uint256);

deactivate

Emergency shutdown of withdrawals.

function deactivate() external virtual;

activate

Re-activate withdrawals after shutdown.

function activate() external virtual;

Events

IncreaseWithdrawApproval

event IncreaseWithdrawApproval(address indexed withdrawer_, ERC20 indexed token_, uint256 newAmount_);

DecreaseWithdrawApproval

event DecreaseWithdrawApproval(address indexed withdrawer_, ERC20 indexed token_, uint256 newAmount_);

Withdrawal

event Withdrawal(address indexed policy_, address indexed withdrawer_, ERC20 indexed token_, uint256 amount_);

IncreaseDebtorApproval

event IncreaseDebtorApproval(address indexed debtor_, ERC20 indexed token_, uint256 newAmount_);

DecreaseDebtorApproval

event DecreaseDebtorApproval(address indexed debtor_, ERC20 indexed token_, uint256 newAmount_);

DebtIncurred

event DebtIncurred(ERC20 indexed token_, address indexed policy_, uint256 amount_);

DebtRepaid

event DebtRepaid(ERC20 indexed token_, address indexed policy_, uint256 amount_);

DebtSet

event DebtSet(ERC20 indexed token_, address indexed policy_, uint256 amount_);

Errors

TRSRY_NoDebtOutstanding

error TRSRY_NoDebtOutstanding();

TRSRY_NotActive

error TRSRY_NotActive();