Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/contracts/facilitators/gsm/Gsm.sol
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ contract Gsm is AccessControl, VersionedInitializable, EIP712, IGsm {
* @param underlyingAsset The address of the collateral asset
* @param priceStrategy The address of the price strategy
*/
constructor(address ghoToken, address underlyingAsset, address priceStrategy) EIP712('GSM', '1') {
constructor(address ghoToken, address underlyingAsset, address priceStrategy) EIP712('GSM', '1') initializer {
require(ghoToken != address(0), 'ZERO_ADDRESS_NOT_VALID');
require(underlyingAsset != address(0), 'ZERO_ADDRESS_NOT_VALID');
require(
Expand Down
6 changes: 6 additions & 0 deletions tests/unit/TestGhoBase.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,12 @@ contract TestGhoBase is Test, Constants, Events {
address(USDX_4626_TOKEN),
address(GHO_GSM_4626_FIXED_PRICE_STRATEGY)
);
AdminUpgradeabilityProxy gsm4626Proxy = new AdminUpgradeabilityProxy(
address(GHO_GSM_4626),
SHORT_EXECUTOR,
''
);
GHO_GSM_4626 = Gsm4626(address(gsm4626Proxy));
GHO_GSM_4626.initialize(
address(this),
TREASURY,
Expand Down
35 changes: 35 additions & 0 deletions tests/unit/TestGsm.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
vm.expectEmit(true, true, true, true, address(gsm));
emit RoleGranted(DEFAULT_ADMIN_ROLE, address(this), address(this));
vm.expectEmit(true, true, false, true, address(gsm));
Expand All @@ -66,6 +71,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
vm.expectRevert('ZERO_ADDRESS_NOT_VALID');
gsm.initialize(address(0), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
}
Expand All @@ -76,6 +86,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
vm.expectRevert('ZERO_ADDRESS_NOT_VALID');
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(0));
}
Expand All @@ -86,6 +101,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
vm.expectRevert('Contract instance has already been initialized');
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
Expand Down Expand Up @@ -368,6 +388,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
uint256 defaultCapInUsdx = DEFAULT_CAPACITY / (10 ** (18 - USDX_TOKEN.decimals()));
Expand All @@ -388,6 +413,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE - 1, address(GHO_RESERVE));
GHO_TOKEN.addFacilitator(address(gsm), 'GSM Modified Exposure Cap', DEFAULT_CAPACITY);

Expand Down Expand Up @@ -1073,6 +1103,11 @@ contract TestGsm is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
vm.expectRevert(bytes('ZERO_ADDRESS_NOT_VALID'));
gsm.initialize(address(this), address(0), DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
}
Expand Down
16 changes: 16 additions & 0 deletions tests/unit/TestGsm4626.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ contract TestGsm4626 is TestGhoBase {
address(USDX_4626_TOKEN),
address(GHO_GSM_4626_FIXED_PRICE_STRATEGY)
);
gsm = Gsm4626(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
vm.expectEmit(true, true, true, true, address(gsm));
emit RoleGranted(DEFAULT_ADMIN_ROLE, address(this), address(this));
vm.expectEmit(true, true, false, true, address(gsm));
Expand All @@ -60,6 +65,11 @@ contract TestGsm4626 is TestGhoBase {
address(USDX_4626_TOKEN),
address(GHO_GSM_4626_FIXED_PRICE_STRATEGY)
);
gsm = Gsm4626(address(new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
)));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
vm.expectRevert('Contract instance has already been initialized');
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(GHO_RESERVE));
Expand Down Expand Up @@ -167,6 +177,12 @@ contract TestGsm4626 is TestGhoBase {
address(USDX_4626_TOKEN),
address(GHO_GSM_4626_FIXED_PRICE_STRATEGY)
);
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm4626(address(gsmProxy));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE - 1, address(GHO_RESERVE));
GHO_TOKEN.addFacilitator(address(gsm), 'GSM Modified Exposure Cap', DEFAULT_CAPACITY);

Expand Down
12 changes: 12 additions & 0 deletions tests/unit/TestGsm4626Edge.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,12 @@ contract TestGsm4626Edge is TestGhoBase {
address(USDX_4626_TOKEN),
address(GHO_GSM_4626_FIXED_PRICE_STRATEGY)
);
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm4626(address(gsmProxy));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE - 1, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), DEFAULT_CAPACITY);
Expand Down Expand Up @@ -224,6 +230,12 @@ contract TestGsm4626Edge is TestGhoBase {
address(USDX_4626_TOKEN),
address(GHO_GSM_4626_FIXED_PRICE_STRATEGY)
);
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm4626(address(gsmProxy));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE - 1, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), DEFAULT_CAPACITY);
Expand Down
1 change: 1 addition & 0 deletions tests/unit/TestGsmFullFlow.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ contract TestGsmFullFlow is TestGhoBase {
address(USDX_TOKEN),
address(GHO_GSM_FIXED_PRICE_STRATEGY)
);
gsm = Gsm(address(new AdminUpgradeabilityProxy(address(gsm), SHORT_EXECUTOR, '')));
gsm.initialize(address(this), TREASURY, DEFAULT_GSM_USDX_EXPOSURE, address(reserve));

reserve.addEntity(address(gsm));
Expand Down
54 changes: 54 additions & 0 deletions tests/unit/TestGsmSwapEdge.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ contract TestGsmSwapEdge is TestGhoBase {
5
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(address(this), TREASURY, type(uint128).max, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), type(uint128).max);
Expand Down Expand Up @@ -77,6 +83,12 @@ contract TestGsmSwapEdge is TestGhoBase {
18
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(address(this), TREASURY, 100_000_000e18, address(GHO_RESERVE));
gsm.updateFeeStrategy(address(newFeeStrategy));
GHO_RESERVE.addEntity(address(gsm));
Expand Down Expand Up @@ -112,6 +124,12 @@ contract TestGsmSwapEdge is TestGhoBase {
18
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(address(this), TREASURY, 100_000_000e18, address(GHO_RESERVE));
gsm.updateFeeStrategy(address(newFeeStrategy));
GHO_RESERVE.addEntity(address(gsm));
Expand Down Expand Up @@ -157,6 +175,12 @@ contract TestGsmSwapEdge is TestGhoBase {
24 // decimals
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(ALICE, TREASURY, 1_000_000e24, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), 100_000_000 ether);
Expand Down Expand Up @@ -207,6 +231,12 @@ contract TestGsmSwapEdge is TestGhoBase {
24 // decimals
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(ALICE, TREASURY, 1_000_000e24, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), 100_000_000 ether);
Expand Down Expand Up @@ -252,6 +282,12 @@ contract TestGsmSwapEdge is TestGhoBase {
6 // decimals
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(ALICE, TREASURY, 1_000_000e6, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), 100_000_000 ether);
Expand Down Expand Up @@ -303,6 +339,12 @@ contract TestGsmSwapEdge is TestGhoBase {
24 // decimals
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(ALICE, TREASURY, 1_000_000e24, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), 100_000_000 ether);
Expand Down Expand Up @@ -354,6 +396,12 @@ contract TestGsmSwapEdge is TestGhoBase {
6 // decimals
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(ALICE, TREASURY, 1_000_000e6, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), 100_000_000 ether);
Expand Down Expand Up @@ -404,6 +452,12 @@ contract TestGsmSwapEdge is TestGhoBase {
24 // decimals
);
Gsm gsm = new Gsm(address(GHO_TOKEN), address(newToken), address(newPriceStrategy));
AdminUpgradeabilityProxy gsmProxy = new AdminUpgradeabilityProxy(
address(gsm),
SHORT_EXECUTOR,
''
);
gsm = Gsm(address(gsmProxy));
gsm.initialize(ALICE, TREASURY, 1_000_000e24, address(GHO_RESERVE));
GHO_RESERVE.addEntity(address(gsm));
GHO_RESERVE.setLimit(address(gsm), 100_000_000 ether);
Expand Down
Loading
Loading