mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-25 15:55:18 +00:00
68 lines
2.2 KiB
Markdown
68 lines
2.2 KiB
Markdown
|
# State
|
||
|
|
||
|
For detail on the state tracked by the cdp module see the types package. In particular [keys.go](../types/keys.go) describes how state is stored in the key-value store.
|
||
|
|
||
|
## Module Accounts
|
||
|
|
||
|
The cdp module account controls two module accounts:
|
||
|
|
||
|
**CDP Account:** Stores the deposited cdp collateral, and the debt coins for the debt in all the cdps.
|
||
|
|
||
|
**Liquidator Account:** Stores debt coins that have been seized by the system, and any stable asset that has been raised through auctions.
|
||
|
|
||
|
## CDP
|
||
|
|
||
|
A CDP is a struct representing a debt position owned by one address. It has one collateral type and records the debt that has been drawn and how much fees should be repaid.
|
||
|
|
||
|
Only an owner is authorized to draw or repay debt, but anyone can deposit collateral to a CDP. Deposits are scoped per address and are recorded separately in `Deposit` types. Depositors are free to withdraw their collateral provided it does not put the CDP below the liquidation ratio.
|
||
|
|
||
|
The CDP's collateral always equal to the total of the deposits.
|
||
|
|
||
|
```go
|
||
|
type CDP struct {
|
||
|
ID uint64
|
||
|
Owner sdk.AccAddress
|
||
|
Collateral sdk.Coins
|
||
|
Principal sdk.Coins
|
||
|
AccumulatedFees sdk.Coins
|
||
|
FeesUpdated time.Time
|
||
|
}
|
||
|
```
|
||
|
|
||
|
CDPs are stored with a couple of database indexes for faster lookup:
|
||
|
|
||
|
- by collateral ratio - to look up cdps that are close to the liquidation ratio
|
||
|
- by owner index - to look up cdps that an address is the owner of
|
||
|
|
||
|
## Deposit
|
||
|
|
||
|
A Deposit is a struct recording collateral added to a CDP by one address. The address only has authorization to change their deposited amount (provided it does not put the CDP below the liquidation ratio).
|
||
|
|
||
|
```go
|
||
|
type Deposit struct {
|
||
|
CdpID uint64
|
||
|
Depositor sdk.AccAddress
|
||
|
Amount sdk.Coins
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Params
|
||
|
|
||
|
Module parameters controlled by governance. See [Parameters](06_params.md) for details.
|
||
|
|
||
|
## NextCDPID
|
||
|
|
||
|
A global counter used to create unique CDP ids.
|
||
|
|
||
|
## DebtDenom
|
||
|
|
||
|
The name of the internal debt coin. Its value can be configured at genesis.
|
||
|
|
||
|
## Total Principle
|
||
|
|
||
|
Sum of all non seized debt plus accumulated fees. This is used to calculate the new debt created every block due to the fee interest rate.
|
||
|
|
||
|
## Previous Block Time
|
||
|
|
||
|
A record of the last block time used to calculate fees.
|