Escrow
Last updated
Was this helpful?
Last updated
Was this helpful?
Manages a account balances for the entire system including deposits, withdraws, cash balances, collateral lockup for trading, cash transfers (settlement), and liquidation.
Evaluates whether or not a currency id is valid
Parameters:
currency: currency id
Return Values:
true if the currency is valid
Getter method for exchange rates
Parameters:
base: token address for the base currency
quote: token address for the quote currency
Return Values:
ExchangeRate struct
Returns the net balances of all the currencies owned by an account as an array. Each index of the array refers to the currency id.
Parameters:
account: the account to query
Return Values:
the balance of each currency net of the account's cash position
Converts the balances given to ETH for the purposes of determining whether an account has sufficient free collateral.
Parameters:
amounts: the balance in each currency group as an array, each index refers to the currency group id.
Return Values:
an array the same length as amounts with each balance denominated in ETH
Error Codes:
INVALID_CURRENCY: length of the amounts array must match the total number of currencies
INVALID_EXCHANGE_RATE: exchange rate returned by the oracle is less than 0
This is a special function to handle ETH deposits. Value of ETH to be deposited must be specified in
msg.value
Error Codes:
OVER_MAX_ETH_BALANCE: balance of deposit cannot overflow uint128
Withdraw ETH from the contract.
Parameters:
amount: the amount of eth to withdraw from the contract
Error Codes:
INSUFFICIENT_BALANCE: not enough balance in account
INSUFFICIENT_FREE_COLLATERAL: not enough free collateral to withdraw
TRANSFER_FAILED: eth transfer did not return success
Transfers a balance from an ERC20 token contract into the Escrow. Do not call this for ERC777 transfers, use the
send
method instead.Parameters:
token: token contract to send from
amount: tokens to transfer
Error Codes:
INVALID_CURRENCY: token address supplied is not a valid currency
Withdraws from an account's collateral holdings back to their account. Checks if the account has sufficient free collateral after the withdraw or else it fails.
Parameters:
token: collateral type to withdraw
amount: total value to withdraw
Error Codes:
INSUFFICIENT_BALANCE: not enough balance in account
INVALID_CURRENCY: token address supplied is not a valid currency
INSUFFICIENT_FREE_COLLATERAL: not enough free collateral to withdraw
Settles the cash balances of payers in batch
Parameters:
localCurrency: the currency that the payer's debts are denominated in
collateralCurrency: the collateral to settle the debts against
payers: the party that has a negative cash balance and will transfer collateral to the receiver
values: the amount of collateral to transfer
Error Codes:
INVALID_CURRENCY: currency specified is invalid
INCORRECT_CASH_BALANCE: payer does not have sufficient cash balance to settle
INVALID_EXCHANGE_RATE: exchange rate returned by the oracle is less than 0
NO_EXCHANGE_LISTED_FOR_PAIR: cannot settle cash because no exchange is listed for the pair
INSUFFICIENT_COLLATERAL_FOR_SETTLEMENT: not enough collateral to settle on the exchange
RESERVE_ACCOUNT_HAS_INSUFFICIENT_BALANCE: settling requires the reserve account, but there is insufficient
balance to do so
INSUFFICIENT_COLLATERAL_BALANCE: account does not hold enough collateral to settle, they will have
additional collateral in a different currency if they are collateralized
INSUFFICIENT_FREE_COLLATERAL_SETTLER: calling account to settle cash does not have sufficient free collateral
after settling payers and receivers
Settles the cash balance between the payer and the receiver.
Parameters:
localCurrency: the currency that the payer's debts are denominated in
collateralCurrency: the collateral to settle the debts against
payer: the party that has a negative cash balance and will transfer collateral to the receiver
value: the amount of collateral to transfer
Error Codes:
INCORRECT_CASH_BALANCE: payer or receiver does not have sufficient cash balance to settle
INVALID_EXCHANGE_RATE: exchange rate returned by the oracle is less than 0
NO_EXCHANGE_LISTED_FOR_PAIR: cannot settle cash because no exchange is listed for the pair
INSUFFICIENT_COLLATERAL_FOR_SETTLEMENT: not enough collateral to settle on the exchange
RESERVE_ACCOUNT_HAS_INSUFFICIENT_BALANCE: settling requires the reserve account, but there is insufficient
balance to do so
INSUFFICIENT_COLLATERAL_BALANCE: account does not hold enough collateral to settle, they will have
INSUFFICIENT_FREE_COLLATERAL_SETTLER: calling account to settle cash does not have sufficient free collateral
after settling payers and receivers
Liquidates a batch of accounts in a specific currency.
Parameters:
accounts: the account to liquidate
localCurrency: the currency that is undercollateralized
collateralCurrency: the collateral currency to exchange for
currency
Error Codes:
CANNOT_LIQUIDATE_SUFFICIENT_COLLATERAL: account has positive free collateral and cannot be liquidated
CANNOT_LIQUIDATE_SELF: liquidator cannot equal the liquidated account
INSUFFICIENT_FREE_COLLATERAL_LIQUIDATOR: liquidator does not have sufficient free collateral after liquidating
accounts
Liquidates a single account if it is undercollateralized
Parameters:
account: the account to liquidate
localCurrency: the currency that is undercollateralized
collateralCurrency: the collateral currency to exchange for
currency
Error Codes:
CANNOT_LIQUIDATE_SUFFICIENT_COLLATERAL: account has positive free collateral and cannot be liquidated
CANNOT_LIQUIDATE_SELF: liquidator cannot equal the liquidated account
INSUFFICIENT_FREE_COLLATERAL_LIQUIDATOR: liquidator does not have sufficient free collateral after liquidating
accounts
CANNOT_LIQUIDATE_TO_WORSE_FREE_COLLATERAL: we cannot liquidate an account and have it end up in a worse free
collateral position than when it started. This is possible if collateralCurrency has a larger haircut than currency.
Purchase fCash receiver asset in the portfolio. This can only be done if the account has no other positive cash balances and no liquidity tokens in its portfolio. The fCash receiver would be its only source of positive collateral. Notional will first attempt to sell fCash in CashMarkets before selling it to the liquidator at a discount.
Parameters:
payer: account that will pay fCash to settle current debts
localCurrency: currency that current debts are denominated
collateralCurrency: currency that fCash receivers are denominated in, it is possible for collateralCurrency to equal
localCurrency.
valueToSettle: amount of local currency debts to settle
Purchase fCash receiver assets in order to recollateralize a portfolio. Similar to
settlefCash
, this can only be doneParameters:
payer: account that will pay fCash to settle current debts
localCurrency: currency that current debts are denominated in
collateralCurrency: currency that fCash receivers are denominated in. Unlike
settlfCash
it is not possible for localCurrencyto equal collateralCurrency because liquidating local currency fCash receivers will never help recollateralize a portfolio. Local currency
fCash receivers only accrue value as they get closer to maturity.
Settles current debts in an account against the reserve. Only possible if an account is truly insolvent, meaning that it only holds debts and has no remaining sources of positive collateral.
Parameters:
account: account that is undercollateralized
localCurrency: currency that current debts are denominated in
A new currency
Parameters:
token: address of the tradable token
A new exchange rate between two currencies
Parameters:
base: id of the base currency
quote: id of the quote currency
Notice of a deposit made to an account
Parameters:
currency: currency id of the deposit
account: address of the account where the deposit was made
value: amount of tokens deposited
Notice of a withdraw from an account
Parameters:
currency: currency id of the withdraw
account: address of the account where the withdraw was made
value: amount of tokens withdrawn
Notice of a successful liquidation.
msg.sender
will be the liquidator.Parameters:
localCurrency: currency that was liquidated
collateralCurrency: currency that was exchanged for the local currency
account: the account that was liquidated
amountRecollateralized: the amount of local currency that recollateralized
Notice of a successful batch liquidation.
msg.sender
will be the liquidator.Parameters:
localCurrency: currency that was liquidated
collateralCurrency: currency that was exchanged for the local currency
accounts: the accounts that were liquidated
amountRecollateralized: the amount of local currency that recollateralized
Notice of a successful cash settlement.
msg.sender
will be the settler.Parameters:
localCurrency: currency that was settled
collateralCurrency: currency that was exchanged for the local currency
payer: the account that paid in the settlement
settledAmount: the amount settled between the parties
Notice of a successful batch cash settlement.
msg.sender
will be the settler.Parameters:
localCurrency: currency that was settled
collateralCurrency: currency that was exchanged for the local currency
payers: the accounts that paid in the settlement
settledAmounts: the amounts settled between the parties
Emitted when liquidation and settlement discounts are set
Parameters:
liquidationDiscount: discount given to liquidators when purchasing collateral
settlementDiscount: discount given to settlers when purchasing collateral
repoIncentive: incentive given to liquidators for pulling liquidity tokens to recollateralize an account
Emitted when reserve account is set
Parameters:
reserveAccount: account that holds balances in reserve
Sets discounts applied when purchasing collateral during liquidation or settlement. Discounts are represented as percentages multiplied by 1e18. For example, a 5% discount for liquidators will be set as 1.05e18
Parameters:
liquidation: discount applied to liquidation
settlement: discount applied to settlement
repoIncentive: incentive to repo liquidity tokens
Sets the reserve account used to settle against for insolvent accounts
Parameters:
account: address of reserve account
Lists a new currency for deposits
Parameters:
token: address of ERC20 or ERC777 token to list
options: a set of booleans that describe the token
Creates an exchange rate between two currencies.
Parameters:
base: the base currency
quote: the quote currency
rateOracle: the oracle that will give the exchange rate between the two
buffer: multiple to apply to the exchange rate that sets the collateralization ratio
rateDecimals: decimals of precision that the rate oracle uses
mustInvert: true if the chainlink oracle must be inverted