Solidity API
LiquidationAuction02
vault
contract IVault vault
vaultManagerParameters
contract IVaultManagerParameters vaultManagerParameters
cdpRegistry
contract ICDPRegistry cdpRegistry
forceTransferAssetStore
contract IForceTransferAssetStore forceTransferAssetStore
DENOMINATOR_1E2
uint256 DENOMINATOR_1E2
WRAPPED_TO_UNDERLYING_ORACLE_TYPE
uint256 WRAPPED_TO_UNDERLYING_ORACLE_TYPE
Buyout
event Buyout(address asset, address owner, address buyer, uint256 amount, uint256 price, uint256 penalty)
Trigger when buyouts are happened
checkpoint
modifier checkpoint(address asset, address owner)
constructor
constructor(address _vaultManagerParameters, address _cdpRegistry, address _forceTransferAssetStore) public
_vaultManagerParameters
address
The address of the contract with Vault manager parameters
_cdpRegistry
address
The address of the CDP registry
_forceTransferAssetStore
address
The address of the ForceTransferAssetStore
buyout
function buyout(address asset, address owner) public
Buyouts a position's collateral
asset
address
The address of the main collateral token of a position
owner
address
The owner of a position
_liquidate
function _liquidate(address asset, address user, uint256 collateralToBuyer, uint256 collateralToOwner, uint256 repayment, uint256 penalty) private
_calcLiquidationParams
function _calcLiquidationParams(uint256 depreciationPeriod, uint256 blocksPast, uint256 startingPrice, uint256 debtWithPenalty, uint256 collateralInPosition) internal pure returns (uint256 collateralToBuyer, uint256 collateralToOwner, uint256 price)
CDPRegistry
CDP
struct CDP {
address asset;
address owner;
}
cdpList
mapping(address => address[]) cdpList
cdpIndex
mapping(address => mapping(address => uint256)) cdpIndex
vault
contract IVault vault
cr
contract ICollateralRegistry cr
Added
event Added(address asset, address owner)
Removed
event Removed(address asset, address owner)
constructor
constructor(address _vault, address _collateralRegistry) public
checkpoint
function checkpoint(address asset, address owner) public
batchCheckpointForAsset
function batchCheckpointForAsset(address asset, address[] owners) external
batchCheckpoint
function batchCheckpoint(address[] assets, address[] owners) external
isAlive
function isAlive(address asset, address owner) public view returns (bool)
isListed
function isListed(address asset, address owner) public view returns (bool)
_removeCdp
function _removeCdp(address asset, address owner) internal
_addCdp
function _addCdp(address asset, address owner) internal
getCdpsByCollateral
function getCdpsByCollateral(address asset) external view returns (struct CDPRegistry.CDP[] cdps)
getCdpsByOwner
function getCdpsByOwner(address owner) external view returns (struct CDPRegistry.CDP[] r)
getAllCdps
function getAllCdps() external view returns (struct CDPRegistry.CDP[] r)
getCdpsCount
function getCdpsCount() public view returns (uint256 totalCdpCount)
getCdpsCountForCollateral
function getCdpsCountForCollateral(address asset) public view returns (uint256)
CollateralRegistry
CollateralAdded
event CollateralAdded(address asset)
CollateralRemoved
event CollateralRemoved(address asset)
collateralId
mapping(address => uint256) collateralId
collateralList
address[] collateralList
constructor
constructor(address _vaultParameters, address[] assets) public
addCollateral
function addCollateral(address asset) public
removeCollateral
function removeCollateral(address asset) public
isCollateral
function isCollateral(address asset) public view returns (bool)
collaterals
function collaterals() external view returns (address[])
collateralsCount
function collateralsCount() external view returns (uint256)
GCD
ERC20 token
name
string name
symbol
string symbol
version
string version
decimals
uint8 decimals
totalSupply
uint256 totalSupply
balanceOf
mapping(address => uint256) balanceOf
allowance
mapping(address => mapping(address => uint256)) allowance
Approval
event Approval(address owner, address spender, uint256 value)
Trigger on any successful call to approve(address spender, uint amount)
Transfer
event Transfer(address from, address to, uint256 value)
Trigger when tokens are transferred, including zero value transfers
initialize
function initialize(address _parameters) public
_parameters
address
The address of system parameters contract
_authorizeUpgrade
function _authorizeUpgrade(address) internal
Restricted upgrades function
mint
function mint(address to, uint256 amount) external
Only Vault can mint GCD
Mints 'amount' of tokens to address 'to', and MUST fire the Transfer event
to
address
The address of the recipient
amount
uint256
The amount of token to be minted
burn
function burn(uint256 amount) external
Only manager can burn tokens from manager's balance
Burns 'amount' of tokens, and MUST fire the Transfer event
amount
uint256
The amount of token to be burned
burn
function burn(address from, uint256 amount) external
Only Vault can burn tokens from any balance
Burns 'amount' of tokens from 'from' address, and MUST fire the Transfer event
from
address
The address of the balance owner
amount
uint256
The amount of token to be burned
transfer
function transfer(address to, uint256 amount) external returns (bool)
_Transfers 'amount' of tokens to address 'to', and MUST fire the Transfer event. The function SHOULD throw if the from account balance does not have enough tokens to spend.
to
address
The address of the recipient
amount
uint256
The amount of token to be transferred
transferFrom
function transferFrom(address from, address to, uint256 amount) public returns (bool)
Transfers 'amount' of tokens from address 'from' to address 'to', and MUST fire the Transfer event
from
address
The address of the sender
to
address
The address of the recipient
amount
uint256
The amount of token to be transferred
approve
function approve(address spender, uint256 amount) external returns (bool)
Allows 'spender' to withdraw from your account multiple times, up to the 'amount' amount. If this function is called again it overwrites the current allowance with 'amount'.
spender
address
The address of the account able to transfer the tokens
amount
uint256
The amount of tokens to be approved for transfer
increaseAllowance
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool)
_Atomically increases the allowance granted to spender
by the caller.
This is an alternative to approve
that can be used as a mitigation for problems described in IERC20.approve
.
Emits an Approval
event indicating the updated allowance.
Requirements:
spender
cannot be the zero address._
decreaseAllowance
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool)
_Atomically decreases the allowance granted to spender
by the caller.
This is an alternative to approve
that can be used as a mitigation for problems described in IERC20.approve
.
Emits an Approval
event indicating the updated allowance.
Requirements:
spender
cannot be the zero address.spender
must have allowance for the caller of at leastsubtractedValue
._
_approve
function _approve(address owner, address spender, uint256 amount) internal virtual
_burn
function _burn(address from, uint256 amount) internal virtual
CDPManager01
vault
contract IVault vault
vaultManagerParameters
contract IVaultManagerParameters vaultManagerParameters
oracleRegistry
contract IOracleRegistry oracleRegistry
cdpRegistry
contract ICDPRegistry cdpRegistry
WETH
address payable WETH
Q112
uint256 Q112
DENOMINATOR_1E5
uint256 DENOMINATOR_1E5
Join
event Join(address asset, address owner, uint256 main, uint256 gcd)
Trigger when joins are happened
Exit
event Exit(address asset, address owner, uint256 main, uint256 gcd)
Trigger when exits are happened
LiquidationTriggered
event LiquidationTriggered(address asset, address owner)
Trigger when liquidations are initiated
checkpoint
modifier checkpoint(address asset, address owner)
constructor
constructor(address _vaultManagerParameters, address _oracleRegistry, address _cdpRegistry) public
_vaultManagerParameters
address
The address of the contract with Vault manager parameters
_oracleRegistry
address
The address of the oracle registry
_cdpRegistry
address
The address of the CDP registry
receive
receive() external payable
join
function join(address asset, uint256 assetAmount, uint256 gcdAmount) public
Depositing tokens must be pre-approved to Vault address position actually considered as spawned only when debt > 0
Deposits collateral and/or borrows GCD
asset
address
The address of the collateral
assetAmount
uint256
The amount of the collateral to deposit
gcdAmount
uint256
The amount of GCD token to borrow
join_Eth
function join_Eth(uint256 gcdAmount) external payable
Deposits ETH and/or borrows GCD
gcdAmount
uint256
The amount of GCD token to borrow
exit
function exit(address asset, uint256 assetAmount, uint256 gcdAmount) public returns (uint256)
Tx sender must have a sufficient GCD balance to pay the debt
Withdraws collateral and repays specified amount of debt
asset
address
The address of the collateral
assetAmount
uint256
The amount of the collateral to withdraw
gcdAmount
uint256
The amount of GCD to repay
exit_targetRepayment
function exit_targetRepayment(address asset, uint256 assetAmount, uint256 repayment) external returns (uint256)
Repayment is the sum of the principal and interest
Withdraws collateral and repays specified amount of debt
asset
address
The address of the collateral
assetAmount
uint256
The amount of the collateral to withdraw
repayment
uint256
The target repayment amount
exit_Eth
function exit_Eth(uint256 ethAmount, uint256 gcdAmount) public returns (uint256)
Withdraws WETH and converts to ETH
ethAmount
uint256
ETH amount to withdraw
gcdAmount
uint256
The amount of GCD token to repay
exit_Eth_targetRepayment
function exit_Eth_targetRepayment(uint256 ethAmount, uint256 repayment) external returns (uint256)
Repayment is the sum of the principal and interest
Withdraws WETH and converts to ETH
ethAmount
uint256
ETH amount to withdraw
repayment
uint256
The target repayment amount
_repay
function _repay(address asset, address owner, uint256 gcdAmount) internal
_ensurePositionCollateralization
function _ensurePositionCollateralization(address asset, address owner) internal view
triggerLiquidation
function triggerLiquidation(address asset, address owner) external
Triggers liquidation of a position
asset
address
The address of the collateral token of a position
owner
address
The owner of the position
getCollateralUsdValue_q112
function getCollateralUsdValue_q112(address asset, address owner) public view returns (uint256)
_isLiquidatablePosition
function _isLiquidatablePosition(address asset, address owner, uint256 usdValue_q112) internal view returns (bool)
Determines whether a position is liquidatable
asset
address
The address of the collateral
owner
address
The owner of the position
usdValue_q112
uint256
Q112-encoded USD value of the collateral
[0]
bool
boolean value, whether a position is liquidatable
_ensureOracle
function _ensureOracle(address asset) internal view
isLiquidatablePosition
function isLiquidatablePosition(address asset, address owner) public view returns (bool)
Determines whether a position is liquidatable
asset
address
The address of the collateral
owner
address
The owner of the position
[0]
bool
boolean value, whether a position is liquidatable
utilizationRatio
function utilizationRatio(address asset, address owner) public view returns (uint256)
Calculates current utilization ratio
asset
address
The address of the collateral
owner
address
The owner of the position
[0]
uint256
utilization ratio
liquidationPrice_q112
function liquidationPrice_q112(address asset, address owner) external view returns (uint256)
Calculates liquidation price
asset
address
The address of the collateral
owner
address
The owner of the position
[0]
uint256
Q112-encoded liquidation price
_calcPrincipal
function _calcPrincipal(address asset, address owner, uint256 repayment) internal view returns (uint256)
VaultManagerParameters
initialCollateralRatio
mapping(address => uint256) initialCollateralRatio
liquidationRatio
mapping(address => uint256) liquidationRatio
liquidationDiscount
mapping(address => uint256) liquidationDiscount
devaluationPeriod
mapping(address => uint256) devaluationPeriod
constructor
constructor(address _vaultParameters) public
setCollateral
function setCollateral(address asset, uint256 stabilityFeeValue, uint256 liquidationFeeValue, uint256 initialCollateralRatioValue, uint256 liquidationRatioValue, uint256 liquidationDiscountValue, uint256 devaluationPeriodValue, uint256 gcdLimit, uint256[] oracles) external
Only manager is able to call this function
Sets ability to use token as the main collateral
asset
address
The address of the main collateral token
stabilityFeeValue
uint256
The percentage of the year stability fee (3 decimals)
liquidationFeeValue
uint256
The liquidation fee percentage (0 decimals)
initialCollateralRatioValue
uint256
The initial collateralization ratio
liquidationRatioValue
uint256
The liquidation ratio
liquidationDiscountValue
uint256
The liquidation discount (3 decimals)
devaluationPeriodValue
uint256
The devaluation period in blocks
gcdLimit
uint256
The GCD token issue limit
oracles
uint256[]
The enabled oracles type IDs
setInitialCollateralRatio
function setInitialCollateralRatio(address asset, uint256 newValue) public
Only manager is able to call this function
Sets the initial collateral ratio
asset
address
The address of the main collateral token
newValue
uint256
The collateralization ratio (0 decimals)
setLiquidationRatio
function setLiquidationRatio(address asset, uint256 newValue) public
Only manager is able to call this function
Sets the liquidation ratio
asset
address
The address of the main collateral token
newValue
uint256
The liquidation ratio (0 decimals)
setLiquidationDiscount
function setLiquidationDiscount(address asset, uint256 newValue) public
Only manager is able to call this function
Sets the liquidation discount
asset
address
The address of the main collateral token
newValue
uint256
The liquidation discount (3 decimals)
setDevaluationPeriod
function setDevaluationPeriod(address asset, uint256 newValue) public
Only manager is able to call this function
Sets the devaluation period of collateral after liquidation
asset
address
The address of the main collateral token
newValue
uint256
The devaluation period in blocks
Vault
Vault is the core of GCD Protocol GCD Stablecoin system
Vault stores and manages collateral funds of all positions and counts debts
Only Vault can manage supply of GCD token
Vault will not be changed/upgraded after initial deployment for the current stablecoin version
weth
address payable weth
DENOMINATOR_1E5
uint256 DENOMINATOR_1E5
DENOMINATOR_1E2
uint256 DENOMINATOR_1E2
gcd
address gcd
collaterals
mapping(address => mapping(address => uint256)) collaterals
debts
mapping(address => mapping(address => uint256)) debts
liquidationBlock
mapping(address => mapping(address => uint256)) liquidationBlock
liquidationPrice
mapping(address => mapping(address => uint256)) liquidationPrice
tokenDebts
mapping(address => uint256) tokenDebts
stabilityFee
mapping(address => mapping(address => uint256)) stabilityFee
liquidationFee
mapping(address => mapping(address => uint256)) liquidationFee
oracleType
mapping(address => mapping(address => uint256)) oracleType
lastUpdate
mapping(address => mapping(address => uint256)) lastUpdate
notLiquidating
modifier notLiquidating(address asset, address user)
initialize
function initialize(address _parameters, address _gcd, address payable _weth) public
_parameters
address
The address of the system parameters
_gcd
address
GCD token address
_weth
address payable
_authorizeUpgrade
function _authorizeUpgrade(address) internal
Restricted upgrades function
receive
receive() external payable
update
function update(address asset, address user) public
Updates parameters of the position to the current ones
asset
address
The address of the main collateral token
user
address
The owner of a position
spawn
function spawn(address asset, address user, uint256 _oracleType) external
Creates new position for user
asset
address
The address of the main collateral token
user
address
The address of a position's owner
_oracleType
uint256
The type of an oracle
destroy
function destroy(address asset, address user) public
Clears unused storage variables
asset
address
The address of the main collateral token
user
address
The address of a position's owner
depositMain
function depositMain(address asset, address user, uint256 amount) external
Tokens must be pre-approved
Adds main collateral to a position
asset
address
The address of the main collateral token
user
address
The address of a position's owner
amount
uint256
The amount of tokens to deposit
depositEth
function depositEth(address user) external payable
Converts ETH to WETH and adds main collateral to a position
user
address
The address of a position's owner
withdrawMain
function withdrawMain(address asset, address user, uint256 amount) external
Withdraws main collateral from a position
asset
address
The address of the main collateral token
user
address
The address of a position's owner
amount
uint256
The amount of tokens to withdraw
withdrawEth
function withdrawEth(address payable user, uint256 amount) external
Withdraws WETH collateral from a position converting WETH to ETH
user
address payable
The address of a position's owner
amount
uint256
The amount of ETH to withdraw
borrow
function borrow(address asset, address user, uint256 amount) external returns (uint256)
Increases position's debt and mints GCD token
asset
address
The address of the main collateral token
user
address
The address of a position's owner
amount
uint256
The amount of GCD to borrow
repay
function repay(address asset, address user, uint256 amount) external returns (uint256)
Decreases position's debt and burns GCD token
asset
address
The address of the main collateral token
user
address
The address of a position's owner
amount
uint256
The amount of GCD to repay
[0]
uint256
updated debt of a position
chargeFee
function chargeFee(address asset, address user, uint256 amount) external
Transfers fee to foundation
asset
address
The address of the fee asset
user
address
The address to transfer funds from
amount
uint256
The amount of asset to transfer
triggerLiquidation
function triggerLiquidation(address asset, address positionOwner, uint256 initialPrice) external
Deletes position and transfers collateral to liquidation system
asset
address
The address of the main collateral token
positionOwner
address
The address of a position's owner
initialPrice
uint256
The starting price of collateral in GCD
liquidate
function liquidate(address asset, address positionOwner, uint256 mainAssetToLiquidator, uint256 mainAssetToPositionOwner, uint256 repayment, uint256 penalty, address liquidator) external
Internal liquidation process
asset
address
The address of the main collateral token
positionOwner
address
The address of a position's owner
mainAssetToLiquidator
uint256
The amount of main asset to send to a liquidator
mainAssetToPositionOwner
uint256
The amount of main asset to send to a position owner
repayment
uint256
The repayment in GCD
penalty
uint256
The liquidation penalty in GCD
liquidator
address
The address of a liquidator
changeOracleType
function changeOracleType(address asset, address user, uint256 newOracleType) external
Only manager can call this function
Changes broken oracle type to the correct one
asset
address
The address of the main collateral token
user
address
The address of a position's owner
newOracleType
uint256
The new type of an oracle
getTotalDebt
function getTotalDebt(address asset, address user) public view returns (uint256)
Calculates the total amount of position's debt based on elapsed time
asset
address
The address of the main collateral token
user
address
The address of a position's owner
[0]
uint256
user debt of a position plus accumulated fee
calculateFee
function calculateFee(address asset, address user, uint256 amount) public view returns (uint256)
Calculates the amount of fee based on elapsed time and repayment amount
asset
address
The address of the main collateral token
user
address
The address of a position's owner
amount
uint256
The repayment amount
[0]
uint256
fee amount
VaultParameters
stabilityFee
mapping(address => uint256) stabilityFee
liquidationFee
mapping(address => uint256) liquidationFee
tokenDebtLimit
mapping(address => uint256) tokenDebtLimit
canModifyVault
mapping(address => bool) canModifyVault
isManager
mapping(address => bool) isManager
isOracleTypeEnabled
mapping(uint256 => mapping(address => bool)) isOracleTypeEnabled
vault
address payable vault
foundation
address foundation
initialize
function initialize(address payable _vault, address _foundation) public
The address for an Ethereum contract is deterministically computed from the address of its creator (sender) and how many transactions the creator has sent (nonce). The sender and nonce are RLP encoded and then hashed with Keccak-256. Therefore, the Vault address can be pre-computed and passed as an argument before deployment.
_authorizeUpgrade
function _authorizeUpgrade(address) internal
Restricted upgrades function
setManager
function setManager(address who, bool permit) external
Only manager is able to call this function
Grants and revokes manager's status of any address
who
address
The target address
permit
bool
The permission flag
setFoundation
function setFoundation(address newFoundation) external
Only manager is able to call this function
Sets the foundation address
newFoundation
address
The new foundation address
setCollateral
function setCollateral(address asset, uint256 stabilityFeeValue, uint256 liquidationFeeValue, uint256 gcdLimit, uint256[] oracles) external
Only manager is able to call this function
Sets ability to use token as the main collateral
asset
address
The address of the main collateral token
stabilityFeeValue
uint256
The percentage of the year stability fee (3 decimals)
liquidationFeeValue
uint256
The liquidation fee percentage (0 decimals)
gcdLimit
uint256
The GCD token issue limit
oracles
uint256[]
The enables oracle types
setVaultAccess
function setVaultAccess(address who, bool permit) external
Only manager is able to call this function
Sets a permission for an address to modify the Vault
who
address
The target address
permit
bool
The permission flag
setStabilityFee
function setStabilityFee(address asset, uint256 newValue) public
Only manager is able to call this function
Sets the percentage of the year stability fee for a particular collateral
asset
address
The address of the main collateral token
newValue
uint256
The stability fee percentage (3 decimals)
setLiquidationFee
function setLiquidationFee(address asset, uint256 newValue) public
Only manager is able to call this function
Sets the percentage of the liquidation fee for a particular collateral
asset
address
The address of the main collateral token
newValue
uint256
The liquidation fee percentage (0 decimals)
setOracleType
function setOracleType(uint256 _type, address asset, bool enabled) public
Only manager is able to call this function
Enables/disables oracle types
_type
uint256
The type of the oracle
asset
address
The address of the main collateral token
enabled
bool
The control flag
setTokenDebtLimit
function setTokenDebtLimit(address asset, uint256 limit) public
Only manager is able to call this function
Sets GCD limit for a specific collateral
asset
address
The address of the main collateral token
limit
uint256
The limit number
Last updated