Skip to content

Commit 07e89d0

Browse files
authored
Merge pull request #3 from Gearbox-protocol/feat--zapperRegistry
2 parents 02e38cd + 057934e commit 07e89d0

File tree

6 files changed

+86
-6
lines changed

6 files changed

+86
-6
lines changed

contracts/data/DataCompressor_3_0.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
435435

436436
result.supplyRate = pool.supplyRate();
437437

438-
result.version = uint8(pool.version());
438+
result.version = pool.version();
439439

440440
result.quotas = _getQuotas(_pool);
441441
result.lirm = getLIRMData(pool.interestRateModel());

contracts/data/ZapperRegister.sol

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
// Gearbox Protocol. Generalized leverage for DeFi protocols
3+
// (c) Gearbox Holdings, 2023
4+
pragma solidity ^0.8.10;
5+
6+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
7+
import {IZapper} from "@gearbox-protocol/integrations-v3/contracts/interfaces/zappers/IZapper.sol";
8+
import {IZapperRegistry} from "../interfaces/IZapperRegistry.sol";
9+
import {ACLNonReentrantTrait} from "@gearbox-protocol/core-v3/contracts/traits/ACLNonReentrantTrait.sol";
10+
import {ContractsRegisterTrait} from "@gearbox-protocol/core-v3/contracts/traits/ContractsRegisterTrait.sol";
11+
12+
contract ZapperRegister is ACLNonReentrantTrait, ContractsRegisterTrait, IZapperRegistry {
13+
using EnumerableSet for EnumerableSet.AddressSet;
14+
15+
mapping(address => EnumerableSet.AddressSet) internal _zappersMap;
16+
17+
constructor(address addressProvider)
18+
ACLNonReentrantTrait(addressProvider)
19+
ContractsRegisterTrait(addressProvider)
20+
{}
21+
22+
function addZapper(address zapper) external nonZeroAddress(zapper) controllerOnly {
23+
address pool = IZapper(zapper).pool();
24+
_ensureRegisteredPool(pool);
25+
26+
EnumerableSet.AddressSet storage zapperSet = _zappersMap[pool];
27+
if (!zapperSet.contains(zapper)) {
28+
zapperSet.add(zapper);
29+
emit AddZapper(zapper);
30+
}
31+
}
32+
33+
function removeZapper(address zapper) external nonZeroAddress(zapper) controllerOnly {
34+
EnumerableSet.AddressSet storage zapperSet = _zappersMap[IZapper(zapper).pool()];
35+
if (zapperSet.contains(zapper)) {
36+
zapperSet.remove(zapper);
37+
emit RemoveZapper(zapper);
38+
}
39+
}
40+
41+
function zappers(address pool) external view override returns (address[] memory) {
42+
return _zappersMap[pool].values();
43+
}
44+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
// Gearbox Protocol. Generalized leverage for DeFi protocols
3+
// (c) Gearbox Holdings, 2023
4+
pragma solidity ^0.8.10;
5+
6+
interface IZapperRegistry {
7+
event AddZapper(address);
8+
event RemoveZapper(address);
9+
10+
function zappers(address pool) external view returns (address[] memory);
11+
}

contracts/test/DC_Printer.sol

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {DataCompressorV2_10} from "../data/DataCompressor_2_1.sol";
99
import {DataCompressorV3_00} from "../data/DataCompressor_3_0.sol";
1010
import {CreditAccountData, CreditManagerData, PoolData, TokenBalance, ContractAdapter} from "../data/Types.sol";
1111

12+
import {NetworkDetector} from "@gearbox-protocol/sdk-gov/contracts/NetworkDetector.sol";
13+
1214
import "forge-std/console.sol";
1315

1416
address constant ap = 0x5BcB06c56e8F28da0b038a373199240ca3F5a2f4;
@@ -17,7 +19,20 @@ contract DCTest {
1719
DataCompressorV2_10 public dc2;
1820
DataCompressorV3_00 public dc3;
1921

20-
function setUp() public {
22+
uint256 chainId;
23+
24+
constructor() {
25+
NetworkDetector nd = new NetworkDetector();
26+
chainId = nd.chainId();
27+
}
28+
29+
modifier liveTestOnly() {
30+
if (chainId == 1) {
31+
_;
32+
}
33+
}
34+
35+
function setUp() public liveTestOnly {
2136
dc2 = new DataCompressorV2_10(ap);
2237
dc3 = new DataCompressorV3_00(ap);
2338
}
@@ -94,7 +109,7 @@ contract DCTest {
94109
}
95110
}
96111

97-
function test_dc_01_pools() public view {
112+
function test_dc_01_pools() public view liveTestOnly {
98113
PoolData[] memory pools = dc2.getPoolsV1List();
99114
console.log("V1 pools");
100115
_printPools(pools);
@@ -104,7 +119,7 @@ contract DCTest {
104119
_printPools(pools);
105120
}
106121

107-
function test_dc_02_credit_managers() public view {
122+
function test_dc_02_credit_managers() public view liveTestOnly {
108123
CreditManagerData[] memory cms = dc2.getCreditManagersV2List();
109124
console.log("V2 credit managers");
110125
_printCreditManagers(cms);
@@ -114,7 +129,7 @@ contract DCTest {
114129
_printCreditManagers(cms);
115130
}
116131

117-
function test_dc_03_credit_accounts() public view {
132+
function test_dc_03_credit_accounts() public view liveTestOnly {
118133
CreditAccountData[] memory cas = dc2.getCreditAccountsByBorrower(address(this));
119134
console.log("V2 credit accounts", cas.length);
120135
}

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
"@gearbox-protocol/core-v3": "^1.39.0",
2222
"@gearbox-protocol/oracles-v3": "^1.7.2",
2323
"@gearbox-protocol/sdk-gov": "^1.5.10",
24-
"@openzeppelin/contracts": "4.8.3",
24+
"@gearbox-protocol/integrations-v3": "^1.16.0",
25+
"@openzeppelin/contracts": "4.8.3"
26+
},
27+
"dependencies": {
28+
2529
"husky": "^8.0.3",
2630
"lint-staged": "^13.0.3",
2731
"prettier": "^3.0.3"
@@ -30,5 +34,6 @@
3034
"lint-staged": {
3135
"*.sol": "forge fmt",
3236
"*.{json,md}": "prettier --write"
37+
3338
}
3439
}

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,11 @@
965965
"@gearbox-protocol/sdk" "1.22.1"
966966
axios "^1.1.3"
967967

968+
"@gearbox-protocol/integrations-v3@^1.16.0":
969+
version "1.16.0"
970+
resolved "https://registry.yarnpkg.com/@gearbox-protocol/integrations-v3/-/integrations-v3-1.16.0.tgz#62a7fc6b2f73bb10d67ba5eff8368e14eb15920a"
971+
integrity sha512-cv70TB4cbtz1rX+LbCMWud85da4+hsRjzYJq/XZ5Qha4DqMZBF7wcco55pbEqp+cZ95hLjjl9J00xEY7JIVuSw==
972+
968973
"@gearbox-protocol/oracles-v3@^1.7.2":
969974
version "1.7.2"
970975
resolved "https://registry.yarnpkg.com/@gearbox-protocol/oracles-v3/-/oracles-v3-1.7.2.tgz#5e1804493dbf854e18cc2384012cf8d3f1c15365"

0 commit comments

Comments
 (0)