Skip to content

Commit

Permalink
Merge branch 'release/1.0.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
SergeyOkishev committed Mar 4, 2024
2 parents 4f488c9 + 17e9642 commit 0e74992
Show file tree
Hide file tree
Showing 42 changed files with 847 additions and 151 deletions.
7 changes: 5 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# for running local testnet in docker
mnemonic=some mnemonic phrase
address=0x...

# execute scripts
PRIVATE_KEY=0x...

# deploy and verification
CHAIN_ID=137
RPC=https://polygon-mainnet.infura.io/v3/...
PRIVATE_KEY=0x...
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Compiler files
cache/
out/

# abi
out/*
!out/RPSV1.sol
!out/RPSV1.sol/*
!out/RPSV1Factory.sol
!out/RPSV1Factory.sol/*
!out/IRPS.sol
!out/IRPS.sol/*

# Ignores development broadcast logs
!/broadcast
Expand Down
109 changes: 31 additions & 78 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,26 +22,33 @@ Rename `.env.example` to `.env` and setup env variables
Run

Production:
`RPS`

```
export $(grep -v '^#' .env | xargs)
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/rps/All_Deploy.s.sol --broadcast --legacy --verify
```

`DCA polygon`

`polygon`

```
export $(grep -v '^#' .env | xargs)
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/networks/All_Deploy_Polygon.s.sol --broadcast --legacy --verify
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/dca/networks/All_Deploy_Polygon.s.sol --broadcast --legacy --verify
```

`optimism`
`DCA optimism`

```
export $(grep -v '^#' .env | xargs)
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/networks/All_Deploy_Optimism.s.sol --broadcast --legacy --verify
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/dca/networks/All_Deploy_Optimism.s.sol --broadcast --legacy --verify
```

`bsc`
`DCA bsc`

```
export $(grep -v '^#' .env | xargs)
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/networks/All_Deploy_Binance.s.sol --broadcast --legacy --verify
forge script --rpc-url $RPC --chain-id $CHAIN_ID script/dca/networks/All_Deploy_Binance.s.sol --broadcast --legacy --verify
```

`note: deploy goes for single chain only. IF you need to deploy on multiple chains - dont forget to update "RPC" and "CHAIN_ID" values in env file before rerunning both commands`
Expand All @@ -60,8 +67,24 @@ Setup apikeys and urls in `foundry.toml` and constructor args in txt file (see e

Verify target contract using following command:

## RPSV1

Example for manual verification on optimism

```
forge verify-contract 0xc347BA6f6A9Ce0dd4F4A351EaB30c8Ebde59028e "src/RPS/RPSV1.sol:RPSV1" --verifier-url "https://api-optimistic.etherscan.io/api" --etherscan-api-key "F8EQY2UV2JB9VQ88VZ58NE3ZXWKAY2Q9MC" --num-of-optimizations 200 --compiler-version v0.8.20+commit.a1b79de6
```

## RPSV1Factory

```
forge verify-contract 0xF8ce142e20f3c4209E8d1E0FAc4A307db4dfC975 "src/RPS/RPSV1Factory.sol:RPSV1Factory" --verifier-url 'https://api-optimistic.etherscan.io/api' --etherscan-api-key BPHPNQ1IYRT2FFUPIWQXN2Z7YY1P3IGCXN --num-of-optimizations 200 --compiler-version v0.8.20+commit.a1b79de6 --constructor-args $(cast abi-encode "constructor(address param1)" 0x1B8EE524844DE43827F13007C3360024D7d09191)
```

with admins

```
forge verify-contract --chain polygon 0x7a5B8E6c19ceA36Abc3b8f2C13962344207feA6b --watch --constructor-args-path factory-constructor-args.txt src/factories/DCAV3Factory.sol:DCAV3Factory
forge verify-contract 0x63ed218143F18f3a16c03008D4D062818298CA80 "src/RPS/RPSV1Factory.sol:RPSV1Factory" --verifier-url "https://api.polygonscan.com/api" --etherscan-api-key "EII3M4G2MKTHAS6METKBJH149P8EFWV9ZP" --num-of-optimizations 200 --compiler-version v0.8.20+commit.a1b79de6 --constructor-args $(cast abi-encode "constructor(address param1, address[] admins)" 0x0f15FBC7189468B5983A1Caa0e31d552128f6703 0x94Ad54EC1299B9BE82eCc9328187eF37fDB07329, 0x2D9a8BE931f1EAb82ABFCb9697023424E440CD43, 0xB0b12f40b18027f1a2074D2Ab11C6e0d6c6acbB5)
```

# Developing contracts
Expand Down Expand Up @@ -106,74 +129,4 @@ Use scripts from `/script` folder

# Deployed contracts

## Factory

| chain | env | address |
| -------- | ----- | ------------------------------------------ |
| Polygon | dev | 0xD966F00350352770F9A087A755F2Fb46a379B67f |
| Polygon | stage | 0xb98D003F017A452A33cDbAade4ED5Cb4B8EBA81c |
| Polygon | prod | 0x93dC15813de39052CA6b0fde40c9D073339b29C7 |
| |
| Optimism | dev | 0xC952e7E894bC6D9E217F483611Dd58142419618E |
| Optimism | stage | 0x41b42a0cc89b9AA554e8fEEA5EFf893dD6eCD294 |
| Optimism | prod | 0x8a03Bf5a5d2Aeed434Caaa30db467073A551354f |
| |
| Binance | dev | 0x02c63197d2f93054398a706867aE0CAaf33002b2 |
| Binance | stage | 0x |
| Binance | prod | 0x |
| |
| opBNBtn | dev | 0xa65427d745Fa64d665C74688ed05793f07f1A037 |
| opBNBtn | stage | 0x |
| opBNBtn | prod | 0x |

## Whitelist

| chain | env | address |
| -------- | ----- | ------------------------------------------ |
| Polygon | dev | 0xa1c3DDCF368691ceFE6266051aF6601dF058c827 |
| Polygon | stage | 0x9338c26583509E0af29761101810fa5469910FE0 |
| Polygon | prod | 0xfA248cCac23De39EC0c06AF4540Ee4b21f5814b1 |
| |
| Optimism | dev | 0xb1340E58954513b432875C0939D795bB01e3b907 |
| Optimism | stage | 0xb1340E58954513b432875C0939D795bB01e3b907 |
| Optimism | prod | 0x661e63c5fAc61aB0A8a3489CC814C021C2C4fde2 |
| |
| Binance | dev | 0x1B8EE524844DE43827F13007C3360024D7d09191 |
| Binance | stage | 0x |
| Binance | prod | 0x |
| |
| opBNBtn | dev | 0x085DdF516F7d04eb8a09a204Eb40966435d62F83 |
| opBNBtn | stage | 0x |
| opBNBtn | prod | 0x |

## Dca implementation

| chain | env | address |
| -------- | ----- | ------------------------------------------ |
| Polygon | dev | 0xE8B720e4C37eAc0b512DA062b8317d9dC3c3E3F0 |
| Polygon | stage | 0x1fE25798d205D77CC8c9F0c7D4667F69aa93DDbe |
| Polygon | prod | 0x14dD93713869034aF6fbFa474aaC22c52c089B47 |
| |
| Optimism | dev | 0x86807bF5FaCEE7456882ffA1476b11657A135160 |
| Optimism | stage | 0x86807bF5FaCEE7456882ffA1476b11657A135160 |
| Optimism | prod | 0x81859d17BB5B4D327951330237f7533011948059 |
| |
| Binance | dev | 0xF8d3De6F50d9C3392e540A922FCD0cA3a69e9a80 |
| Binance | stage | 0x |
| Binance | prod | 0x |
| |
| opBNBtn | dev | 0xe3b23Ed609B84354B1d5031A7677be4Ae9517efA |
| opBNBtn | stage | 0x |
| opBNBtn | prod | 0x |

# Wallets

TRASURY:
`dev`: `0x400d0dbd2240c8cF16Ee74E628a6582a42bb4f35`
`stage`: `0x400d0dbd2240c8cF16Ee74E628a6582a42bb4f35`
`prod`: `0x31F5c1B1fF78AF6FB721cD1376f1B7D69929A794` - both treasury and executor

EXECUTOR:
`dev`: `0x79dAe73Ec88a11FA4B9381Fe92865a1EAE5f3125`
`stage`: `0x79dAe73Ec88a11FA4B9381Fe92865a1EAE5f3125`
`prod`: `0x31F5c1B1fF78AF6FB721cD1376f1B7D69929A794`
[DCA contracts can be found here](./src/DCA/)
2 changes: 2 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@ libs = ["lib"]
polygon = { key = "EII3M4G2MKTHAS6METKBJH149P8EFWV9ZP", url = "https://api.polygonscan.com/api" }
bsc = { key = "B2JV9AVIVIWWDFDCB27KR1NJ35QEWS552H", url = "https://api.bscscan.com/api" }
optimism = { key = "BPHPNQ1IYRT2FFUPIWQXN2Z7YY1P3IGCXN", url = "https://api-optimistic.etherscan.io/api" }
blast = { key = "verifyContract", url = "https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan" }
arbitrum = { key = "X87MF2WYWNXBI2AE3ZZNADUXC5E15A7SW4", url = "https://api.arbiscan.io/api" }

# See more config options https://github.com/foundry-rs/foundry/tree/master/config
1 change: 1 addition & 0 deletions out/IRPS.sol/IRPS.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"abi":[{"type":"function","name":"canExecute","inputs":[{"name":"subscriber","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"subscriber","type":"address","internalType":"address"}],"outputs":[{"name":"nextExectuionTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"isSubscriber","inputs":[{"name":"subscriber","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"subscribe","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"terminate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsubscribe","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Executed","inputs":[{"name":"contractAddress","type":"address","indexed":false,"internalType":"address"},{"name":"executor","type":"address","indexed":false,"internalType":"address"},{"name":"subscriber","type":"address","indexed":false,"internalType":"address"},{"name":"merchantName","type":"string","indexed":false,"internalType":"string"},{"name":"settlementAddress","type":"address","indexed":false,"internalType":"address"},{"name":"transfered","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"nextExecutionTimestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Subscribed","inputs":[{"name":"contractAddress","type":"address","indexed":false,"internalType":"address"},{"name":"subscriber","type":"address","indexed":false,"internalType":"address"},{"name":"settlementAddress","type":"address","indexed":false,"internalType":"address"},{"name":"merchantName","type":"string","indexed":false,"internalType":"string"},{"name":"transfered","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"lastExecutionTimestamp","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"nextExecutionTimestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Terminated","inputs":[{"name":"contractAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unsubscribed","inputs":[{"name":"contractAddress","type":"address","indexed":false,"internalType":"address"},{"name":"subscriber","type":"address","indexed":false,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"canExecute(address)":"85c99e2b","execute(address)":"4b64e492","isSubscriber(address)":"c4804ef0","subscribe()":"8f449a05","terminate()":"0c08bf88","unsubscribe()":"fcae4484"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"merchantName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"settlementAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transfered\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextExecutionTimestamp\",\"type\":\"uint256\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"settlementAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"merchantName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transfered\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastExecutionTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextExecutionTimestamp\",\"type\":\"uint256\"}],\"name\":\"Subscribed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"Terminated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"Unsubscribed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"canExecute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nextExectuionTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"}],\"name\":\"isSubscriber\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subscribe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"terminate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsubscribe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RPS/IRPS.sol\":\"IRPS\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@DCA/=src/DCA/\",\":@RPS/=src/RPS/\",\":@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@uniswap-periphery/=lib/uniswap-v3-periphery/\",\":@uniswap-v3-core/=lib/v3-core/\",\":@uniswap/v3-core/=lib/v3-core/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":solmate/=lib/solmate/src/\",\":uniswap-v3-periphery/=lib/uniswap-v3-periphery/contracts/\",\":v3-core/=lib/v3-core/\"]},\"sources\":{\"src/RPS/IRPS.sol\":{\"keccak256\":\"0xbe2a580b6bfc8471cca86ac5a00032848353ef5b1b6f542d64258d14f97c1700\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://952216fc7375986a01df5f70cf9b26c0d9ec8632eeaa0158c59f173ca9d21c3b\",\"dweb:/ipfs/QmQ2cPptmTfNHRRpMC8WWk2ZCmSNWCMkmCZraL6prgPCs7\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"contractAddress","type":"address","indexed":false},{"internalType":"address","name":"executor","type":"address","indexed":false},{"internalType":"address","name":"subscriber","type":"address","indexed":false},{"internalType":"string","name":"merchantName","type":"string","indexed":false},{"internalType":"address","name":"settlementAddress","type":"address","indexed":false},{"internalType":"uint256","name":"transfered","type":"uint256","indexed":false},{"internalType":"uint256","name":"fee","type":"uint256","indexed":false},{"internalType":"uint256","name":"nextExecutionTimestamp","type":"uint256","indexed":false}],"type":"event","name":"Executed","anonymous":false},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address","indexed":false},{"internalType":"address","name":"subscriber","type":"address","indexed":false},{"internalType":"address","name":"settlementAddress","type":"address","indexed":false},{"internalType":"string","name":"merchantName","type":"string","indexed":false},{"internalType":"uint256","name":"transfered","type":"uint256","indexed":false},{"internalType":"uint256","name":"fee","type":"uint256","indexed":false},{"internalType":"uint256","name":"lastExecutionTimestamp","type":"uint256","indexed":false},{"internalType":"uint256","name":"nextExecutionTimestamp","type":"uint256","indexed":false}],"type":"event","name":"Subscribed","anonymous":false},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address","indexed":false}],"type":"event","name":"Terminated","anonymous":false},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address","indexed":false},{"internalType":"address","name":"subscriber","type":"address","indexed":false}],"type":"event","name":"Unsubscribed","anonymous":false},{"inputs":[{"internalType":"address","name":"subscriber","type":"address"}],"stateMutability":"view","type":"function","name":"canExecute","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"subscriber","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"execute","outputs":[{"internalType":"uint256","name":"nextExectuionTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"subscriber","type":"address"}],"stateMutability":"view","type":"function","name":"isSubscriber","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"subscribe"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"terminate"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unsubscribe"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@DCA/=src/DCA/","@RPS/=src/RPS/","@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/","@openzeppelin/=lib/openzeppelin-contracts/","@uniswap-periphery/=lib/uniswap-v3-periphery/","@uniswap-v3-core/=lib/v3-core/","@uniswap/v3-core/=lib/v3-core/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/","solmate/=lib/solmate/src/","uniswap-v3-periphery/=lib/uniswap-v3-periphery/contracts/","v3-core/=lib/v3-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/RPS/IRPS.sol":"IRPS"},"evmVersion":"paris","libraries":{}},"sources":{"src/RPS/IRPS.sol":{"keccak256":"0xbe2a580b6bfc8471cca86ac5a00032848353ef5b1b6f542d64258d14f97c1700","urls":["bzz-raw://952216fc7375986a01df5f70cf9b26c0d9ec8632eeaa0158c59f173ca9d21c3b","dweb:/ipfs/QmQ2cPptmTfNHRRpMC8WWk2ZCmSNWCMkmCZraL6prgPCs7"],"license":"MIT"}},"version":1},"id":36}
1 change: 1 addition & 0 deletions out/RPSV1.sol/RPSV1.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions out/RPSV1Factory.sol/RPSV1Factory.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion remappings.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
ds-test/=lib/forge-std/lib/ds-test/src/
forge-std/=lib/forge-std/src/

interfaces=src/interfaces
@DCA=src/DCA
@RPS=src/RPS
@openzeppelin=lib/openzeppelin-contracts
@openzeppelin-upgradeable=lib/openzeppelin-contracts-upgradeable

Expand Down
Loading

0 comments on commit 0e74992

Please sign in to comment.