Enforces the delay period for all maintenance proposals
minDelay: 1 day
proposers: [governor, admin] // members
executors: [governor, admin] // members
admin: [governor, admin] // Can modify proposers/executors
No Bravo extension. No ability to update the configuration.
Durations are calculated using blocks, at 12 seconds per block
initialVotingDelay: 3600 // 12 hours to buy more votes
initialVotingPeriod: 14400 // 2 days after the initial initialVotingDelay
initialProposalThreshold: 5000*(10**18) // Min needed to create a proposal. 0.1% @ 10M totalSupply = 10,000 ODG
// percentage-to-pass-quorum
// 1% of supply ~= 100,000 ODG
// 0.3% is 30,000 ODG
GovernorVotesQuorumFraction: 2 // 20k ODG
// Timelock queue length (after a proposal passes, before execution)
minDelay: 1 days;
blockDelay: 3
timeDelay: 1 hour
safeDebtCeiling: 3_000_000 * WAD, // WAD The max amount of debt that can be generated by a SAFE
globalDebtCeiling: 10_000_000 * RAD // RAD The max amount of debt that can be generated by the system
surplusIsTransferred: 0 // Depends on outcome of issue #39 Boolean if surplus that is transfered to external address. NOTE: check out tax collector here.
surplusDelay: 1 days // Limits the frequency of the surplus auction
popDebtDelay: 1 days // Limits the frequency of debt auction
disableCooldown: 3 days // Backup in case GlobalSettlement.processSAFE has a bug, preventing surplus being locked in AccountingEngine
surplusAmount: 100e45, // 100 COINs
surplusBuffer: 1000e45, // 1000 COINs Surplus auctions cannot be started unless surplus i > _debtBalance + surplusAmount + surplusBuffer
debtAuctionMintedTokens: 1000 * WAD, // 1000 PROTOCOL TOKEN
debtAuctionBidSize: 100e45 // 100 COINs
bidDecrease: 1.05e18, // -5 %
amountSoldIncrease: 1.5e18, // +50 %
bidDuration: 3 hours,
totalAuctionLength: 2 days
bidIncrease: 1.01e18, // +1 %
bidDuration: 6 hours,
totalAuctionLength: 1 days, // restartAuction
bidReceiver: governor,
recyclingPercentage: 0.5e18 // 50% is burned
onAuctionSystemCoinLimit: 100_000 * RAD // 100_000 COINs
saviourGasLimit: 10_000_000 // 10M gas
if (
currentOnAuctionSystemCoins >= _params.onAuctionSystemCoinLimit
|| _params.onAuctionSystemCoinLimit - currentOnAuctionSystemCoins < _debtFloor
) revert LiqEng_LiquidationLimitHit();
// Maximum amount of internal coins that the treasury can hold
treasuryCapacity: 1_000_000e45, // 1M COINs
// Minimum amount of internal coins that the treasury must hold in order to allow pulling funds
pullFundsMinThreshold: 0, // no threshold
// Minimum amount of time that must pass between surplus transfers
surplusTransferDelay: 1 days
// Address of the primary tax receiver
primaryTaxReceiver: accountingEngine,
// Global stability fee [ray]
globalStabilityFee: RAY, // no global SF
// Max stability fee range of variation
maxStabilityFeeRange: RAY - MINUS_0_5_PERCENT_PER_HOUR, // +- 0.5% per hour
// Max number of secondary tax receivers
maxSecondaryReceivers: 1
receiver: address(stabilityFeeTreasury),
canTakeBackTax: true, // [bool]
taxPercentage: 0.5e18 // [wad%]
redemptionRateUpperBound: RAY * WAD, // RAY
redemptionRateLowerBound: 1 // RAY
perSecondCumulativeLeak: // 999_999_711_200_000_000_000_000_000HALF_LIFE_30_DAYS Decay constant for the integral deviation
noiseBarrier: 0.995e18, // 0.5%
feedbackOutputLowerBound: -int256(RAY - 1), // (unbounded) Minimum limit for the redemption rate.
feedbackOutputUpperBound: RAD, // (unbounded) Maximum limit for the redemption rate
integralPeriodSize: 1 hours // Minimum duration required to calculate integral deviation
kp: int256(111_001_102_931), // imported from RAI
ki: int256(32_884) // imported from RAI
updateRateDelay: 1 hours // Time gap between successive redemption rate adjustments
shutdownCooldown: 3 days
bidIncrease: 1.01e18, // +1 %
bidDuration: 3 hours,
totalAuctionLength: 1 days
Unit conversion reference guide
WAD 1e18
1000000000000000000
RAY 1e27
1000000000000000000000000000
RAD 1e45
1000000000000000000000000000000000000000000000
uint256 constant PLUS_1_5_PERCENT_PER_YEAR = 1_000_000_000_472_114_805_215_157_978;
uint256 constant PLUS_1_75_PERCENT_PER_YEAR = 1_000_000_000_550_051_944_812_439_051;
uint256 constant PLUS_1_85_PERCENT_PER_YEAR = 1_000_000_000_581_197_104_947_698_371;
uint256 constant PLUS_2_PERCENT_PER_YEAR = 1_000_000_000_627_937_192_491_029_810;
uint256 constant PLUS_5_PERCENT_PER_YEAR = 1_000_000_001_547_125_957_863_212_448;
// OracleRelayerCollateralParams
safetyCRatio: 1.25e27,
liquidationCRatio: 1.20e27 // 120%
// TaxCollectorCollateralParams
// 3.154×10^7 seconds in 1 year
// NOTE: 5%/yr => 1.05^(1 / 3.154×10^7) = 1 + 1.54713e-9
stabilityFee: PLUS_1_85_PERCENT_PER_YEAR; // +1.85%/yr
// SAFEEngineCollateralParams
debtCeiling: 10_000_000 * RAD, // 10M COINs for all WSTETH safes
debtFloor: 200 * RAD; // 200 COIN
// LiquidationEngineCollateralParams
liquidationPenalty: 1.05e18; // (5%) WAD Penalty applied to the debt of the SAFE that is being liquidated. This penalty represents an excess in the amount of debt that the collateral auction needs to cover.
liquidationQuantity: 100_000e45 // RAD Max amount of debt that can be liquidated in each liquidation
// CollateralAuctionHouseParams
minimumBid: 100e18, // 100 COINs
minDiscount: 1e18, // no discount. starting discount
maxDiscount: 0.9e18, // 10% the maximum discount that can be applied
// Calculation: 0.99998575212^3600 = 0.950000532931460689867615
perSecondDiscountUpdateRate: 0.99998575212e27 // RAY Determines the rate at which the discount increases for each second the auction is live
// OracleRelayerCollateralParams
safetyCRatio: 1.25e27,
liquidationCRatio: 1.20e27
// TaxCollectorCollateralParams
stabilityFee: PLUS_1_75_PERCENT_PER_YEAR; // +1.75%/yr
// SAFEEngineCollateralParams
debtCeiling: 10_000_000 * RAD,
debtFloor: 200 * RAD;
// LiquidationEngineCollateralParams
liquidationPenalty: 1.05e18; // 5%
liquidationQuantity: 100_000e45 // 100,000 COINs
// CollateralAuctionHouseParams
minimumBid: 100e18, // 100 COINs
minDiscount: 1e18,
maxDiscount: 0.9e18,
perSecondDiscountUpdateRate: 0.99998575212e27
// OracleRelayerCollateralParams
safetyCRatio: 1.85e27
liquidationCRatio: 1.75e27
// TaxCollectorCollateralParams
stabilityFee: PLUS_5_PERCENT_PER_YEAR; // +5%/yr
// SAFEEngineCollateralParams
debtCeiling: 5_000_000 * RAD, // 5M COINs
debtFloor: 200 * RAD; // 200 COIN
// LiquidationEngineCollateralParams
liquidationPenalty: 1.1e18; // 10%
liquidationQuantity: 100_000e45 // 100,000 COINs
// CollateralAuctionHouseParams
minimumBid: 100e18, // 100 COINs
minDiscount: 1e18,
maxDiscount: 0.9e18,
perSecondDiscountUpdateRate: 0.99998575212e27
OD is not collateral, but an OD oracle is used to get the current market price
address _baseToken:
address _quoteToken:
uint32 _quotePeriod:
ChainlinkRelayer ETH / USD
DenominatedOracle (OD / ETH) * (ETH / USD) Chainlink
ETH is not collateral, but an ETH oracle is needed to calculate the price in USD for the other collateral tokens
Decimals: 18
Oracles:
address _aggregator: CHAINLINK_ETH_USD_FEED
uint256 _staleThreshold:
DelayedOracle is not necessary, since the Rate Setter PID controller already includes a delay.
Decimals:
Oracles:
//MAINNET_CHAINLINK_ARB_USD_FEED
address _aggregator: 0xb2A824043730FE05F3DA2efaFa1CBbe83fa548D6
uint256 _staleThreshold: = ;
IBaseOracle _priceSource: _arbUSDPriceFeed
uint256 _updateDelay: ORACLE_INTERVAL_PROD
Rebasing:
Decimals:
Oracles:
address _aggregator: CHAINLINK_WSTETH_ETH_FEED
uint256 _staleThreshold:
IBaseOracle _priceSource: _wstethETHPriceFeed
IBaseOracle _denominationPriceSource: _ethUSDPriceFeed
bool _inverted: false
IBaseOracle _priceSource: _wstethUSDPriceFeed
uint256 _updateDelay: ORACLE_INTERVAL_PROD
Rebasing:
Decimals:
Oracles:
address _aggregator: CHAINLINK_RETH_ETH_FEED
uint256 _staleThreshold:
IBaseOracle _priceSource: _rethETHPriceFeed
IBaseOracle _denominationPriceSource: _ethUSDPriceFeed
bool _inverted: false
IBaseOracle _priceSource: _rethUSDPriceFeed
uint256 _updateDelay: ORACLE_INTERVAL_PROD
address _baseToken
address _quoteToken
uint32 _quotePeriod
// @param _aggregator The address of the Chainlink aggregator
address _aggregator
// @param _staleThreshold The threshold after which the price is considered stale
uint256 _staleThreshold
Validation calculation:
return block.timestamp - _feedTimestamp <= staleThreshold;
// @param _priceSource Address of the base price source that is used to calculate the price
IBaseOracle _priceSource
// @param _denominationPriceSource Address of the denomination price source that is used to calculate price
IBaseOracle _denominationPriceSource
// @param _inverted Flag that indicates whether the price source quote should be inverted or not
bool _inverted
// @param _priceSource The address of the non-delayed price source
IBaseOracle _priceSource
// @param _updateDelay The delay in seconds that should elapse between updates
uint256 _updateDelay
Reward: 1 OD
Reward: 1 OD
Reward: 1 OD
Type: Camelot
1.rebasing; peg float, Rai-> rebasing RAI -> non-rebasing token
2. redemption of stablecoin for collateral makes things like liquity more secure. can be acomplished with the nft vaults later for OD.
3. stablecoin price floats with Eth if theres too much rai/eth liquidity, which is not ideal if target is more stability of the coin
4. bluechip rating agency conditions
5. Consider rebasing instead of floating price mechanics
ODGovernor:
Tally Suggested Params
accountingEngineParams:
50 WAD
TimelockController:
Gnosis Safe:
timelockController
?TODO for OD
TODO for Pat
TODO for HAI
pullFundsMinThreshold
being used?Remaining questions:
New questions for 10/18
Audit findings:
Questions
Audit Takeaways:
tranferFrom
calls are not checked for successOpenDollar Specific:
Topics:
_modifyParameters
TODO for OD:
_modifyParameters
)P 2x less sensitive, increase i rate. decay rate to 90 day half-life
i rate creeping up leads to inevitable
longer TWAP?
How much volume should be pushed to close the gap
Testnet Launch
Governance
Peaceful Money Alliance
Peaceful means that all contractual obligations are enforced entirely in the digital space by math and the fundamental principals of physics. This is in contrast to the current system which relies on violence in the physical world to enforce contracts and rules (jail time, intimidation, and death).
We are building a future that is centered around financial tools that rely only exclusively peaceful mechanisms. These mechanisms are made possible by innovations in cryptography, the interconnectedness of all humans via the internet, and the intentional and radical choices we make, as individuals, to support systems in alignment with humanity's highest purpose.
Engineering
Code4rena audit needing items additional review:
Insurance policy
New Strategy
TVL goals: Launching a Moloch DAO / Enzyme
Hai v1.0.0 Contract changes https://github.com/open-dollar/od-contracts/pull/262
Pitching to DAOs with Treasuries
Prisma.finance messaging is a good example. Don't give example of
Rebate module - kingfish
One-click feature for strategy A,B,C. Leveraging. Partnerships for farming.
Bridge feature
Abstract flash-loan
Redeeming against vault
Borrow collateral from a vault
Incentives- looked at what was available on optimism,
Ask Kingfish for what incentives to allocate to each pool
Blast doesnt have a product, used multi-sig for managing pre-protocol incentivees
Voluntary exchange vs ethical exchange
✅ Separation of Church and State
⬜️ Separation of Money and State (coming soon