@@ -34,11 +34,11 @@ contract AggorTest is Test {
34
34
// Twap Provider:
35
35
address uniswapPool = address (new UniswapPoolMock ());
36
36
address uniswapBaseToken = address (new ERC20Mock ("base " , "base " , 18 ));
37
- address uniswapQuoteToken = address (new ERC20Mock ("quote " , "quote " , 18 ));
37
+ address uniswapQuoteToken = address (new ERC20Mock ("quote " , "quote " , 6 ));
38
38
uint32 uniswapLookback = 1 days ;
39
39
40
40
// For more info, see mocks/UniswapPoolMock::observe().
41
- uint valTwap = 999_902 ;
41
+ uint valTwap = 99_990_200 ; // Scaled for 10^Aggor.decimals()
42
42
43
43
// Configurations:
44
44
uint128 agreementDistance = 9e17 ; // = 0.9e18 = 10%
@@ -58,6 +58,7 @@ contract AggorTest is Test {
58
58
uniswapBaseToken,
59
59
uniswapQuoteToken,
60
60
IERC20 (uniswapBaseToken).decimals (),
61
+ IERC20 (uniswapQuoteToken).decimals (),
61
62
uniswapLookback,
62
63
agreementDistance,
63
64
ageThreshold
@@ -74,6 +75,7 @@ contract AggorTest is Test {
74
75
uniswapBaseToken,
75
76
uniswapQuoteToken,
76
77
IERC20 (uniswapBaseToken).decimals (),
78
+ IERC20 (uniswapQuoteToken).decimals (),
77
79
uniswapLookback,
78
80
agreementDistance,
79
81
ageThreshold
@@ -85,6 +87,7 @@ contract AggorTest is Test {
85
87
uniswapBaseToken,
86
88
uniswapQuoteToken,
87
89
IERC20 (uniswapBaseToken).decimals (),
90
+ IERC20 (uniswapQuoteToken).decimals (),
88
91
uniswapLookback
89
92
);
90
93
}
@@ -93,6 +96,7 @@ contract AggorTest is Test {
93
96
94
97
function test_Deployment_FailsIf_UniswapPoolZeroAddress () public {
95
98
uint8 decimals = IERC20 (uniswapBaseToken).decimals ();
99
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
96
100
97
101
vm.expectRevert ("Uniswap pool must not be zero " );
98
102
new Aggor (
@@ -104,6 +108,7 @@ contract AggorTest is Test {
104
108
uniswapBaseToken,
105
109
uniswapQuoteToken,
106
110
decimals,
111
+ quoteDecimals,
107
112
uniswapLookback,
108
113
agreementDistance,
109
114
ageThreshold
@@ -115,12 +120,14 @@ contract AggorTest is Test {
115
120
uniswapBaseToken,
116
121
uniswapQuoteToken,
117
122
decimals,
123
+ quoteDecimals,
118
124
uniswapLookback
119
125
);
120
126
}
121
127
122
128
function test_Deployment_FailsIf_BaseTokenEqualsQuoteToken () public {
123
129
uint8 decimals = IERC20 (uniswapBaseToken).decimals ();
130
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
124
131
125
132
vm.expectRevert ("Uniswap tokens must not be equal " );
126
133
new Aggor (
@@ -132,6 +139,7 @@ contract AggorTest is Test {
132
139
uniswapBaseToken,
133
140
uniswapBaseToken, // <- !
134
141
decimals,
142
+ quoteDecimals,
135
143
uniswapLookback,
136
144
agreementDistance,
137
145
ageThreshold
@@ -143,13 +151,15 @@ contract AggorTest is Test {
143
151
uniswapBaseToken,
144
152
uniswapBaseToken, // <- !
145
153
decimals,
154
+ quoteDecimals,
146
155
uniswapLookback
147
156
);
148
157
}
149
158
150
159
function test_Deployment_FailsIf_BaseTokenNotPoolToken () public {
151
160
address notPoolToken = address (new ERC20Mock ("" , "" , 18 ));
152
161
uint8 decimals = IERC20 (notPoolToken).decimals ();
162
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
153
163
154
164
vm.expectRevert ("Uniswap base token mismatch " );
155
165
new Aggor (
@@ -161,6 +171,7 @@ contract AggorTest is Test {
161
171
notPoolToken, // <- !
162
172
uniswapQuoteToken,
163
173
decimals,
174
+ quoteDecimals,
164
175
uniswapLookback,
165
176
agreementDistance,
166
177
ageThreshold
@@ -172,13 +183,15 @@ contract AggorTest is Test {
172
183
notPoolToken, // <- !
173
184
uniswapQuoteToken,
174
185
decimals,
186
+ quoteDecimals,
175
187
uniswapLookback
176
188
);
177
189
}
178
190
179
191
function test_Deployment_FailsIf_QuoteTokenNotPoolToken () public {
180
192
address notPoolToken = address (new ERC20Mock ("" , "" , 18 ));
181
193
uint8 decimals = IERC20 (uniswapBaseToken).decimals ();
194
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
182
195
183
196
vm.expectRevert ("Uniswap quote token mismatch " );
184
197
new Aggor (
@@ -190,6 +203,7 @@ contract AggorTest is Test {
190
203
uniswapBaseToken,
191
204
notPoolToken, // <- !
192
205
decimals,
206
+ quoteDecimals,
193
207
uniswapLookback,
194
208
agreementDistance,
195
209
ageThreshold
@@ -201,12 +215,14 @@ contract AggorTest is Test {
201
215
uniswapBaseToken,
202
216
notPoolToken, // <- !
203
217
decimals,
218
+ quoteDecimals,
204
219
uniswapLookback
205
220
);
206
221
}
207
222
208
223
function test_Deployment_FailsIf_BaseTokenDecimalsWrong () public {
209
224
uint8 decimals = IERC20 (uniswapBaseToken).decimals ();
225
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
210
226
211
227
vm.expectRevert ("Uniswap base token decimals mismatch " );
212
228
new Aggor (
@@ -218,6 +234,7 @@ contract AggorTest is Test {
218
234
uniswapBaseToken,
219
235
uniswapQuoteToken,
220
236
decimals + 1 , // <- !
237
+ quoteDecimals,
221
238
uniswapLookback,
222
239
agreementDistance,
223
240
ageThreshold
@@ -229,6 +246,7 @@ contract AggorTest is Test {
229
246
uniswapBaseToken,
230
247
uniswapQuoteToken,
231
248
decimals + 1 , // <- !
249
+ quoteDecimals,
232
250
uniswapLookback
233
251
);
234
252
}
@@ -237,6 +255,7 @@ contract AggorTest is Test {
237
255
) public {
238
256
uniswapBaseToken = address (new ERC20Mock ("base " , "base " , 100 )); // <- !
239
257
uint8 decimals = IERC20 (uniswapBaseToken).decimals ();
258
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
240
259
241
260
UniswapPoolMock (uniswapPool).setToken0 (uniswapBaseToken);
242
261
@@ -250,6 +269,7 @@ contract AggorTest is Test {
250
269
uniswapBaseToken,
251
270
uniswapQuoteToken,
252
271
decimals,
272
+ quoteDecimals,
253
273
uniswapLookback,
254
274
agreementDistance,
255
275
ageThreshold
@@ -261,13 +281,15 @@ contract AggorTest is Test {
261
281
uniswapBaseToken,
262
282
uniswapQuoteToken,
263
283
decimals,
284
+ quoteDecimals,
264
285
uniswapLookback
265
286
);
266
287
}
267
288
268
289
function test_Deployment_FailsIf_UniswapLookbackBiggerThanOldestObservation (
269
290
) public {
270
291
uint8 decimals = IERC20 (uniswapBaseToken).decimals ();
292
+ uint8 quoteDecimals = IERC20 (uniswapQuoteToken).decimals ();
271
293
272
294
vm.expectRevert ("Uniswap lookback too high " );
273
295
new Aggor (
@@ -279,6 +301,7 @@ contract AggorTest is Test {
279
301
uniswapBaseToken,
280
302
uniswapQuoteToken,
281
303
decimals,
304
+ quoteDecimals,
282
305
type (uint32 ).max, // <- !
283
306
agreementDistance,
284
307
ageThreshold
@@ -290,6 +313,7 @@ contract AggorTest is Test {
290
313
uniswapBaseToken,
291
314
uniswapQuoteToken,
292
315
decimals,
316
+ quoteDecimals,
293
317
type (uint32 ).max
294
318
);
295
319
}
@@ -1048,6 +1072,7 @@ contract Aggor_VerifyTwapConfig is Aggor {
1048
1072
address uniswapBaseToken_ ,
1049
1073
address uniswapQuoteToken_ ,
1050
1074
uint8 uniswapBaseTokenDecimals_ ,
1075
+ uint8 uniswapQuoteTokenDecimals_ ,
1051
1076
uint32 uniswapLookback_ ,
1052
1077
uint128 agreementDistance_ ,
1053
1078
uint32 ageThreshold_
@@ -1061,6 +1086,7 @@ contract Aggor_VerifyTwapConfig is Aggor {
1061
1086
uniswapBaseToken_,
1062
1087
uniswapQuoteToken_,
1063
1088
uniswapBaseTokenDecimals_,
1089
+ uniswapQuoteTokenDecimals_,
1064
1090
uniswapLookback_,
1065
1091
agreementDistance_,
1066
1092
ageThreshold_
@@ -1072,13 +1098,15 @@ contract Aggor_VerifyTwapConfig is Aggor {
1072
1098
address uniswapBaseToken_ ,
1073
1099
address uniswapQuoteToken_ ,
1074
1100
uint8 uniswapBaseTokenDecimals_ ,
1101
+ uint8 uniswapQuoteTokenDecimals_ ,
1075
1102
uint32 uniswapLookback_
1076
1103
) public view {
1077
1104
_verifyTwapConfig (
1078
1105
uniswapPool_,
1079
1106
uniswapBaseToken_,
1080
1107
uniswapQuoteToken_,
1081
1108
uniswapBaseTokenDecimals_,
1109
+ uniswapQuoteTokenDecimals_,
1082
1110
uniswapLookback_
1083
1111
);
1084
1112
}
0 commit comments