This repository contains the core smart contract code for Open Dollar.
Documentation
- Technical Contracts docs: https://contracts.opendollar.com
- Protocol Docs: https://docs.opendollar.com
Contract Deployments
Addresses for can be found in the app: https://app.opendollar.com/stats
Tools
@opendollar/abis- ABI interfaces are published automatically from this repo, on merge tomainhttps://www.npmjs.com/package/@opendollar/abis@opendollar/sdk- Library to interact with Open Dollar smart contracts https://github.com/open-dollar/od-sdk
| Audit | Date | Auditor | Commit | Changes Since Audit | Report |
|---|---|---|---|---|---|
| contracts | October, 2023 | Cod4rena | f401eb5 | View Changes | View Report |
| app | March, 2024 | Quantstamp | 7c9b18c | View Changes | View Report |
| contracts | April, 2024 | Quantstamp | 6cdc848 | View Changes | View Report |
| relayer | April, 2024 | Pashov Audit Group | 453222d | View Changes | View Report |
A Security Scan was performed by Pessimistic April, 2024 at a0b7640. (View Report)
Additional audits completed prior to forking this codebase can be found here: https://github.com/hai-on-op/audit-reports
Run:
yarn install,
yarn build,
yarn test
When running forge, you can specify the profile to use using the FOUNDRY_PROFILE environment variable. e.g. export FOUNDRY_PROFILE=test && forge test. Alternatively, you can add FOUNDRY_PROFILE=test to .env and run source .env.
Start Anvil:
anvilNext, copy the private key from anvil terminal output into your .env
ANVIL_RPC=http://127.0.0.1:8545
ANVIL_ONE=0x....
Deploy the contracts locally:
yarn deploy:anvilYou now have a local anvil test environment with a locally deployed and instantiated version of the Open Dollar Protocol.
NOTE: You may need to manually verify that all required addresses were updated in
AnvilContracts.t.sol. The scriptparseAnvilDeployments.jsis not perfect.
The following scripts are used to simulate various states of the protocol. The scripts can be found in script/states and are described below:
DebtState.s.sol
DebtState.s.solputs every SAFE in jeopardy of liquidation by driving the non-wstETH collateral prices down. After running DebtState any SAFEs can be liquidated freely for testing.
forge script script/states/DebtState.s.sol:DebtState --fork-url http://localhost:8545 -vvvvv
LiquidationAuction.s.sol
LiquidationAuction.s.soltakes DebtState a step further and liquidates every SAFE on the platform. It then initiates and completes a single collateral auction. We also create a chunk of unbacked debt in the accounting engine which enables launching a debt auction. This state can be used to test liquidations, launching collateral auctions, launching a debt auction or viewing a completed collateral auction.
forge script script/states/DebtAuction.s.sol:DebtAuction --fork-url http://localhost:8545 -vvvvv
DebtAuction.s.sol
DebtAuction.s.sol takes LiquidationAuction a step further and creates a large amount of unbacked debt in the
AccountingEngine; which allows us to then create a debt auction. The debt auction is then bid on and settled. This
allows testing of viewing a completed debt auction.
forge script script/states/DebtAuction.s.sol:DebtAuction --fork-url http://localhost:8545 -vvvvv`
SurplusState.s.sol
SurplusState.s.sol pushes the clock forward so that the protocol accrues surplus. It can be used to test launching a
SurplusAuction.
forge script script/states/SurplusState.s.sol:SurplusState --fork-url http://localhost:8545 -vvvvv
SurplusAuction.s.sol
SurplusAuction.s.sol takes SurplusState a step farther, and initiates a surplus auction, bids on it and settles it.
It can be used to test viewing a completed surplus auction.`
forge script script/states/SurplusAuction.s.sol:SurplusAuction --fork-url http://localhost:8545 -vvvvv
yarn test will run all tests in the test folder. These tests are pranked on a fork Arbitrum mainnet. Additionally, there are Sepolia deployment tests.
Coverage testing is performed using lcov and a local Anvil fork of the contracts. First install lcov for mac/linx.
-
Start Anvil using the instructions above.
-
To generate a report, run the command:
yarn test:coverage- Open
coverage-report/index.htmlto view the report.