Skip to content

Commit 67c200b

Browse files
committed
Minor changes
1 parent d9bed0e commit 67c200b

File tree

5 files changed

+46
-64
lines changed

5 files changed

+46
-64
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Currently this is done through the configuration of `Vow.sump` as max uint256 (a
1616

1717
Note 2: Rate limiting is ensured via the `Splitter`.
1818

19-
Note 3: Stop functionality is implemented via the `Splitter.cage` function.
19+
Note 3: Stop functionality is implemented via the `Splitter.cage` function (reason to leave the `Splitter` as `flap` reference in the `Vow` and the `wards` still set).
2020

2121
### Splitter
2222

deploy/FlapperDeploy.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ library FlapperDeploy {
8080
DssInstance memory dss = MCD.loadFromChainlog(LOG);
8181

8282
kicker = address(new Kicker(
83-
dss.chainlog.getAddress("MCD_VAT"),
8483
dss.chainlog.getAddress("MCD_VOW"),
8584
dss.chainlog.getAddress("MCD_SPLIT")));
8685

deploy/FlapperInit.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,14 +231,13 @@ library FlapperInit {
231231
require(cfg.kbump % RAY == 0, "kbump not multiple of RAY");
232232

233233
address splitter = dss.chainlog.getAddress("MCD_SPLIT");
234-
require(KickerLike(kicker).vat() == address(dss.vat), "vat missmatch");
235234
require(KickerLike(kicker).vow() == address(dss.vow), "vow missmatch");
236235
require(KickerLike(kicker).splitter() == splitter, "splitter missmatch");
237236

238-
require(dss.vow.sump() == type(uint256).max, "flop is not inactive");
239-
240237
dss.vow.file("bump", 0);
241238
dss.vow.file("hump", type(uint256).max);
239+
dss.vow.file("dump", 0);
240+
dss.vow.file("sump", type(uint256).max);
242241

243242
KickerLike(kicker).file("khump", cfg.khump);
244243
KickerLike(kicker).file("kbump", cfg.kbump);

src/Kicker.sol

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ interface VatLike {
2424
}
2525

2626
interface SplitterLike {
27+
function vat() external view returns (VatLike);
2728
function kick(uint256, uint256) external returns (uint256);
2829
}
2930

@@ -42,10 +43,10 @@ contract Kicker {
4243

4344
// --- constructor ---
4445

45-
constructor(address vat_, address vow_, address splitter_) {
46-
vat = VatLike(vat_);
46+
constructor(address vow_, address splitter_) {
4747
vow = vow_;
4848
splitter = SplitterLike(splitter_);
49+
vat = splitter.vat();
4950
vat.hope(splitter_);
5051

5152
wards[msg.sender] = 1;
@@ -102,7 +103,7 @@ contract Kicker {
102103
// --- execution ---
103104

104105
function flap() external returns (uint256 id) {
105-
require(_toInt256(vat.dai(vow)) >= _toInt256(vat.sin(vow)) + _toInt256(kbump) + khump, "Kicker/flap-threshold-reached");
106+
require(_toInt256(vat.dai(vow)) >= _toInt256(vat.sin(vow)) + _toInt256(kbump) + khump, "Kicker/flap-threshold-not-reached");
106107
vat.suck(vow, address(this), kbump);
107108
id = splitter.kick(kbump, 0);
108109
}

test/Kicker.t.sol

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,6 @@ interface ChainlogLike {
2828
function getAddress(bytes32) external view returns (address);
2929
}
3030

31-
interface VatLike {
32-
function wards(address) external view returns (uint256);
33-
function sin(address) external view returns (uint256);
34-
function dai(address) external view returns (uint256);
35-
function can(address, address) external view returns (uint256);
36-
}
37-
38-
interface VowLike {
39-
function bump() external view returns (uint256);
40-
function hump() external view returns (uint256);
41-
function Sin() external view returns (uint256);
42-
function heal(uint256) external;
43-
function flap() external;
44-
function cage() external;
45-
}
46-
4731
interface PairLike {
4832
function mint(address) external returns (uint256);
4933
function sync() external;
@@ -72,16 +56,15 @@ interface FileLike2 is FileLike {
7256
contract KickerTest is DssTest {
7357
using stdStorage for StdStorage;
7458

75-
VatLike vat;
76-
VowLike vow;
77-
Splitter splitter;
78-
StakingRewardsLike farm;
79-
Kicker kicker;
80-
MedianizerLike medianizer;
59+
DssInstance dss;
8160
address pauseProxy;
8261
address usds;
8362
address sky;
8463
address usdsJoin;
64+
Splitter splitter;
65+
MedianizerLike medianizer;
66+
StakingRewardsLike farm;
67+
Kicker kicker;
8568

8669
address LOG = 0xdA0Ab1e0017DEbCd72Be8599041a2aa3bA7e740F;
8770
address UNIV2_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
@@ -92,14 +75,13 @@ contract KickerTest is DssTest {
9275
function setUp() public {
9376
vm.createSelectFork(vm.envString("ETH_RPC_URL"));
9477

78+
dss = MCD.loadFromChainlog(LOG);
9579
pauseProxy = ChainlogLike(LOG).getAddress("MCD_PAUSE_PROXY");
9680
usds = ChainlogLike(LOG).getAddress("USDS");
9781
sky = ChainlogLike(LOG).getAddress("SKY");
9882
usdsJoin = ChainlogLike(LOG).getAddress("USDS_JOIN");
9983
splitter = Splitter(ChainlogLike(LOG).getAddress("MCD_SPLIT"));
10084
medianizer = MedianizerLike(ChainlogLike(LOG).getAddress("FLAP_SKY_ORACLE"));
101-
vat = VatLike(ChainlogLike(LOG).getAddress("MCD_VAT"));
102-
vow = VowLike(ChainlogLike(LOG).getAddress("MCD_VOW"));
10385
farm = StakingRewardsLike(ChainlogLike(LOG).getAddress("REWARDS_LSSKY_USDS"));
10486

10587
kicker = Kicker(FlapperDeploy.deployKicker({
@@ -114,15 +96,16 @@ contract KickerTest is DssTest {
11496
kbump: 5_000e45,
11597
chainlogKey: "KICK"
11698
});
117-
DssInstance memory dss = MCD.loadFromChainlog(LOG);
11899
FlapperInit.initKicker(dss, address(kicker), kickerCfg);
119100
vm.stopPrank();
120101

121-
assertEq(vow.bump(), 0);
122-
assertEq(vow.hump(), type(uint256).max);
102+
assertEq(dss.vow.bump(), 0);
103+
assertEq(dss.vow.hump(), type(uint256).max);
104+
assertEq(dss.vow.dump(), 0);
105+
assertEq(dss.vow.sump(), type(uint256).max);
123106
assertEq(kicker.kbump(), 5_000e45);
124107
assertEq(kicker.khump(), -20_000e45);
125-
assertEq(vat.wards(address(kicker)), 1);
108+
assertEq(dss.vat.wards(address(kicker)), 1);
126109
assertEq(splitter.wards(address(kicker)), 1);
127110
assertEq(dss.chainlog.getAddress("KICK"), address(kicker));
128111

@@ -187,12 +170,12 @@ contract KickerTest is DssTest {
187170
function testConstructor() public {
188171
vm.expectEmit(true, true, true, true);
189172
emit Rely(address(this));
190-
Kicker k = new Kicker(address(vat), address(vow), address(splitter));
173+
Kicker k = new Kicker(address(dss.vow), address(splitter));
191174

192-
assertEq(address(k.vat()), address(vat));
193-
assertEq(address(k.vow()), address(vow));
175+
assertEq(address(k.vat()), address(dss.vat));
176+
assertEq(address(k.vow()), address(dss.vow));
194177
assertEq(address(k.splitter()), address(splitter));
195-
assertEq(vat.can(address(kicker), address(splitter)), 1);
178+
assertEq(dss.vat.can(address(kicker), address(splitter)), 1);
196179
assertEq(k.wards(address(this)), 1);
197180
}
198181

@@ -274,7 +257,7 @@ contract KickerTest is DssTest {
274257
}
275258

276259
vm.expectRevert();
277-
vow.flap();
260+
dss.vow.flap();
278261
kicker.flap();
279262
}
280263

@@ -283,8 +266,8 @@ contract KickerTest is DssTest {
283266
vm.warp(splitter.zzz() + splitter.hop());
284267
}
285268

286-
uint256 initialVowVatDai = vat.dai(address(vow));
287-
uint256 initialUsdsJoinVatDai = vat.dai(usdsJoin);
269+
uint256 initialVowVatDai = dss.vat.dai(address(dss.vow));
270+
uint256 initialUsdsJoinVatDai = dss.vat.dai(usdsJoin);
288271
uint256 initialSky = GemLike(sky).balanceOf(pauseProxy);
289272
uint256 initialReserveUsds = GemLike(usds).balanceOf(UNIV2_SKY_USDS_PAIR);
290273
uint256 initialReserveSky = GemLike(sky).balanceOf(UNIV2_SKY_USDS_PAIR);
@@ -297,12 +280,12 @@ contract KickerTest is DssTest {
297280
vm.expectEmit(false, false, false, true);
298281
emit Kick(kicker.kbump(), kicker.kbump() * splitter.burn() / RAD, farmReward);
299282
kicker.flap();
300-
vow.heal(_min(kicker.kbump(), vat.dai(address(vow))));
283+
dss.vow.heal(_min(kicker.kbump(), dss.vat.dai(address(dss.vow))));
301284

302-
assertEq(vat.dai(address(vow)), initialVowVatDai > kicker.kbump() ? initialVowVatDai - kicker.kbump() : 0);
303-
assertEq(vat.dai(usdsJoin), initialUsdsJoinVatDai + kicker.kbump());
304-
assertEq(vat.dai(address(splitter)), 0);
305-
assertEq(vat.dai(address(kicker)), 0);
285+
assertEq(dss.vat.dai(address(dss.vow)), initialVowVatDai > kicker.kbump() ? initialVowVatDai - kicker.kbump() : 0);
286+
assertEq(dss.vat.dai(usdsJoin), initialUsdsJoinVatDai + kicker.kbump());
287+
assertEq(dss.vat.dai(address(splitter)), 0);
288+
assertEq(dss.vat.dai(address(kicker)), 0);
306289

307290
assertEq(GemLike(usds).balanceOf(UNIV2_SKY_USDS_PAIR), initialReserveUsds + kicker.kbump() * splitter.burn() / RAD);
308291
if (splitter.burn() == 0) {
@@ -324,45 +307,45 @@ contract KickerTest is DssTest {
324307
}
325308

326309
function _initForTestWithSin() internal {
327-
stdstore.target(address(vow)).sig("Sin()").checked_write(
310+
stdstore.target(address(dss.vow)).sig("Sin()").checked_write(
328311
uint256(0)
329312
);
330-
stdstore.target(address(vat)).sig("sin(address)").with_key(address(vow)).depth(0).checked_write(
313+
stdstore.target(address(dss.vat)).sig("sin(address)").with_key(address(dss.vow)).depth(0).checked_write(
331314
uint256(0)
332315
);
333-
stdstore.target(address(vat)).sig("dai(address)").with_key(address(vow)).depth(0).checked_write(
316+
stdstore.target(address(dss.vat)).sig("dai(address)").with_key(address(dss.vow)).depth(0).checked_write(
334317
uint256(2_500e45)
335318
);
336319

337-
assertEq(vow.Sin(), 0);
338-
assertEq(vat.sin(address(vow)), 0);
339-
assertEq(vat.dai(address(vow)), 2_500e45);
320+
assertEq(dss.vow.Sin(), 0);
321+
assertEq(dss.vat.sin(address(dss.vow)), 0);
322+
assertEq(dss.vat.dai(address(dss.vow)), 2_500e45);
340323
}
341324

342325
function _doKicksWithSin() internal {
343326
_initForTestWithSin();
344327

345328
_doKick();
346329

347-
assertEq(vat.sin(address(vow)), 2_500e45);
348-
assertEq(vat.dai(address(vow)), 0);
330+
assertEq(dss.vat.sin(address(dss.vow)), 2_500e45);
331+
assertEq(dss.vat.dai(address(dss.vow)), 0);
349332

350333
_doKick();
351334

352-
assertEq(vat.sin(address(vow)), 7_500e45);
353-
assertEq(vat.dai(address(vow)), 0);
335+
assertEq(dss.vat.sin(address(dss.vow)), 7_500e45);
336+
assertEq(dss.vat.dai(address(dss.vow)), 0);
354337

355338
_doKick();
356339

357-
assertEq(vat.sin(address(vow)), 12_500e45);
358-
assertEq(vat.dai(address(vow)), 0);
340+
assertEq(dss.vat.sin(address(dss.vow)), 12_500e45);
341+
assertEq(dss.vat.dai(address(dss.vow)), 0);
359342

360343
_doKick();
361344

362-
assertEq(vat.sin(address(vow)), 17_500e45);
363-
assertEq(vat.dai(address(vow)), 0);
345+
assertEq(dss.vat.sin(address(dss.vow)), 17_500e45);
346+
assertEq(dss.vat.dai(address(dss.vow)), 0);
364347

365-
vm.expectRevert("Kicker/flap-threshold-reached");
348+
vm.expectRevert("Kicker/flap-threshold-not-reached");
366349
kicker.flap();
367350
}
368351

@@ -400,7 +383,7 @@ contract KickerTest is DssTest {
400383

401384
function testFlapNotLive() public {
402385
assertEq(splitter.live(), 1);
403-
vm.prank(pauseProxy); vow.cage();
386+
vm.prank(pauseProxy); dss.vow.cage();
404387
assertEq(splitter.live(), 0);
405388
vm.expectRevert("Splitter/not-live");
406389
kicker.flap();

0 commit comments

Comments
 (0)