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 tomain
https://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:
anvil
Next, 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:anvil
You 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.js
is 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.sol
puts 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.sol
takes 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.html
to view the report.