@evvm/testnet-contracts 2.1.3 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contracts/evvm/Evvm.sol +13 -9
- package/contracts/evvm/lib/EvvmStorage.sol +2 -0
- package/contracts/evvm/lib/SignatureUtils.sol +13 -13
- package/contracts/nameService/NameService.sol +11 -8
- package/contracts/nameService/lib/ErrorsLib.sol +1 -1
- package/contracts/nameService/lib/SignatureUtils.sol +38 -39
- package/contracts/p2pSwap/P2PSwap.sol +20 -388
- package/contracts/p2pSwap/lib/SignatureUtils.sol +15 -16
- package/contracts/staking/Staking.sol +28 -17
- package/contracts/staking/lib/ErrorsLib.sol +0 -1
- package/contracts/staking/lib/SignatureUtils.sol +6 -34
- package/contracts/treasuryTwoChains/lib/SignatureUtils.sol +7 -7
- package/interfaces/IStaking.sol +1 -1
- package/library/Erc191TestBuilder.sol +57 -57
- package/library/EvvmService.sol +104 -0
- package/library/primitives/Math.sol +415 -0
- package/library/primitives/SignatureRecover.sol +42 -0
- package/library/utils/AdvancedStrings.sol +89 -0
- package/library/utils/SignatureUtil.sol +29 -0
- package/library/utils/service/AsyncNonceService.sol +34 -0
- package/library/utils/service/MakeServicePaymentOnEvvm.sol +49 -0
- package/library/utils/service/StakingServiceUtils.sol +37 -0
- package/library/utils/service/SyncNonceService.sol +18 -0
- package/package.json +1 -1
- package/contracts/evvm/EvvmLegacy.sol +0 -1553
- package/library/AdvancedStrings.sol +0 -77
- package/library/SignatureRecover.sol +0 -140
- package/library/StakingServiceHooks.sol +0 -116
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
pragma solidity ^0.8.0;
|
|
5
5
|
/**
|
|
6
6
|
* @title Erc191TestBuilder
|
|
7
|
-
* @author
|
|
7
|
+
* @author jistro.eth
|
|
8
8
|
* @notice this library is used to build ERC191 messages for foundry test scripts
|
|
9
9
|
* more info in
|
|
10
10
|
* https://book.getfoundry.sh/cheatcodes/create-wallet
|
|
11
11
|
* https://book.getfoundry.sh/cheatcodes/sign
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
import {AdvancedStrings} from "
|
|
14
|
+
|
|
15
|
+
import {AdvancedStrings} from "@evvm/testnet-contracts/library/utils/AdvancedStrings.sol";
|
|
16
16
|
|
|
17
17
|
library Erc191TestBuilder {
|
|
18
18
|
//-----------------------------------------------------------------------------------
|
|
@@ -30,7 +30,7 @@ library Erc191TestBuilder {
|
|
|
30
30
|
address _executor
|
|
31
31
|
) internal pure returns (bytes32 messageHash) {
|
|
32
32
|
string memory messageToSign = string.concat(
|
|
33
|
-
|
|
33
|
+
AdvancedStrings.uintToString(evvmID),
|
|
34
34
|
",",
|
|
35
35
|
"pay",
|
|
36
36
|
",",
|
|
@@ -40,11 +40,11 @@ library Erc191TestBuilder {
|
|
|
40
40
|
",",
|
|
41
41
|
AdvancedStrings.addressToString(_token),
|
|
42
42
|
",",
|
|
43
|
-
|
|
43
|
+
AdvancedStrings.uintToString(_amount),
|
|
44
44
|
",",
|
|
45
|
-
|
|
45
|
+
AdvancedStrings.uintToString(_priorityFee),
|
|
46
46
|
",",
|
|
47
|
-
|
|
47
|
+
AdvancedStrings.uintToString(_nonce),
|
|
48
48
|
",",
|
|
49
49
|
_priority_boolean ? "true" : "false",
|
|
50
50
|
",",
|
|
@@ -66,7 +66,7 @@ library Erc191TestBuilder {
|
|
|
66
66
|
return
|
|
67
67
|
buildHashForSign(
|
|
68
68
|
string.concat(
|
|
69
|
-
|
|
69
|
+
AdvancedStrings.uintToString(evvmID),
|
|
70
70
|
",",
|
|
71
71
|
"dispersePay",
|
|
72
72
|
",",
|
|
@@ -74,11 +74,11 @@ library Erc191TestBuilder {
|
|
|
74
74
|
",",
|
|
75
75
|
AdvancedStrings.addressToString(_token),
|
|
76
76
|
",",
|
|
77
|
-
|
|
77
|
+
AdvancedStrings.uintToString(_amount),
|
|
78
78
|
",",
|
|
79
|
-
|
|
79
|
+
AdvancedStrings.uintToString(_priorityFee),
|
|
80
80
|
",",
|
|
81
|
-
|
|
81
|
+
AdvancedStrings.uintToString(_nonce),
|
|
82
82
|
",",
|
|
83
83
|
_priority_boolean ? "true" : "false",
|
|
84
84
|
",",
|
|
@@ -99,13 +99,13 @@ library Erc191TestBuilder {
|
|
|
99
99
|
return
|
|
100
100
|
buildHashForSign(
|
|
101
101
|
string.concat(
|
|
102
|
-
|
|
102
|
+
AdvancedStrings.uintToString(evvmID),
|
|
103
103
|
",",
|
|
104
104
|
"preRegistrationUsername",
|
|
105
105
|
",",
|
|
106
106
|
AdvancedStrings.bytes32ToString(_hashUsername),
|
|
107
107
|
",",
|
|
108
|
-
|
|
108
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
109
109
|
)
|
|
110
110
|
);
|
|
111
111
|
}
|
|
@@ -119,15 +119,15 @@ library Erc191TestBuilder {
|
|
|
119
119
|
return
|
|
120
120
|
buildHashForSign(
|
|
121
121
|
string.concat(
|
|
122
|
-
|
|
122
|
+
AdvancedStrings.uintToString(evvmID),
|
|
123
123
|
",",
|
|
124
124
|
"registrationUsername",
|
|
125
125
|
",",
|
|
126
126
|
_username,
|
|
127
127
|
",",
|
|
128
|
-
|
|
128
|
+
AdvancedStrings.uintToString(_clowNumber),
|
|
129
129
|
",",
|
|
130
|
-
|
|
130
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
131
131
|
)
|
|
132
132
|
);
|
|
133
133
|
}
|
|
@@ -142,17 +142,17 @@ library Erc191TestBuilder {
|
|
|
142
142
|
return
|
|
143
143
|
buildHashForSign(
|
|
144
144
|
string.concat(
|
|
145
|
-
|
|
145
|
+
AdvancedStrings.uintToString(evvmID),
|
|
146
146
|
",",
|
|
147
147
|
"makeOffer",
|
|
148
148
|
",",
|
|
149
149
|
_username,
|
|
150
150
|
",",
|
|
151
|
-
|
|
151
|
+
AdvancedStrings.uintToString(_dateExpire),
|
|
152
152
|
",",
|
|
153
|
-
|
|
153
|
+
AdvancedStrings.uintToString(_amount),
|
|
154
154
|
",",
|
|
155
|
-
|
|
155
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
156
156
|
)
|
|
157
157
|
);
|
|
158
158
|
}
|
|
@@ -166,15 +166,15 @@ library Erc191TestBuilder {
|
|
|
166
166
|
return
|
|
167
167
|
buildHashForSign(
|
|
168
168
|
string.concat(
|
|
169
|
-
|
|
169
|
+
AdvancedStrings.uintToString(evvmID),
|
|
170
170
|
",",
|
|
171
171
|
"withdrawOffer",
|
|
172
172
|
",",
|
|
173
173
|
_username,
|
|
174
174
|
",",
|
|
175
|
-
|
|
175
|
+
AdvancedStrings.uintToString(_offerId),
|
|
176
176
|
",",
|
|
177
|
-
|
|
177
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
178
178
|
)
|
|
179
179
|
);
|
|
180
180
|
}
|
|
@@ -188,15 +188,15 @@ library Erc191TestBuilder {
|
|
|
188
188
|
return
|
|
189
189
|
buildHashForSign(
|
|
190
190
|
string.concat(
|
|
191
|
-
|
|
191
|
+
AdvancedStrings.uintToString(evvmID),
|
|
192
192
|
",",
|
|
193
193
|
"acceptOffer",
|
|
194
194
|
",",
|
|
195
195
|
_username,
|
|
196
196
|
",",
|
|
197
|
-
|
|
197
|
+
AdvancedStrings.uintToString(_offerId),
|
|
198
198
|
",",
|
|
199
|
-
|
|
199
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
200
200
|
)
|
|
201
201
|
);
|
|
202
202
|
}
|
|
@@ -209,13 +209,13 @@ library Erc191TestBuilder {
|
|
|
209
209
|
return
|
|
210
210
|
buildHashForSign(
|
|
211
211
|
string.concat(
|
|
212
|
-
|
|
212
|
+
AdvancedStrings.uintToString(evvmID),
|
|
213
213
|
",",
|
|
214
214
|
"renewUsername",
|
|
215
215
|
",",
|
|
216
216
|
_username,
|
|
217
217
|
",",
|
|
218
|
-
|
|
218
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
219
219
|
)
|
|
220
220
|
);
|
|
221
221
|
}
|
|
@@ -229,7 +229,7 @@ library Erc191TestBuilder {
|
|
|
229
229
|
return
|
|
230
230
|
buildHashForSign(
|
|
231
231
|
string.concat(
|
|
232
|
-
|
|
232
|
+
AdvancedStrings.uintToString(evvmID),
|
|
233
233
|
",",
|
|
234
234
|
"addCustomMetadata",
|
|
235
235
|
",",
|
|
@@ -237,7 +237,7 @@ library Erc191TestBuilder {
|
|
|
237
237
|
",",
|
|
238
238
|
_value,
|
|
239
239
|
",",
|
|
240
|
-
|
|
240
|
+
AdvancedStrings.uintToString(_nameServiceNonce)
|
|
241
241
|
)
|
|
242
242
|
);
|
|
243
243
|
}
|
|
@@ -251,15 +251,15 @@ library Erc191TestBuilder {
|
|
|
251
251
|
return
|
|
252
252
|
buildHashForSign(
|
|
253
253
|
string.concat(
|
|
254
|
-
|
|
254
|
+
AdvancedStrings.uintToString(evvmID),
|
|
255
255
|
",",
|
|
256
256
|
"removeCustomMetadata",
|
|
257
257
|
",",
|
|
258
258
|
_username,
|
|
259
259
|
",",
|
|
260
|
-
|
|
260
|
+
AdvancedStrings.uintToString(_key),
|
|
261
261
|
",",
|
|
262
|
-
|
|
262
|
+
AdvancedStrings.uintToString(_nonce)
|
|
263
263
|
)
|
|
264
264
|
);
|
|
265
265
|
}
|
|
@@ -272,13 +272,13 @@ library Erc191TestBuilder {
|
|
|
272
272
|
return
|
|
273
273
|
buildHashForSign(
|
|
274
274
|
string.concat(
|
|
275
|
-
|
|
275
|
+
AdvancedStrings.uintToString(evvmID),
|
|
276
276
|
",",
|
|
277
277
|
"flushCustomMetadata",
|
|
278
278
|
",",
|
|
279
279
|
_username,
|
|
280
280
|
",",
|
|
281
|
-
|
|
281
|
+
AdvancedStrings.uintToString(_nonce)
|
|
282
282
|
)
|
|
283
283
|
);
|
|
284
284
|
}
|
|
@@ -291,13 +291,13 @@ library Erc191TestBuilder {
|
|
|
291
291
|
return
|
|
292
292
|
buildHashForSign(
|
|
293
293
|
string.concat(
|
|
294
|
-
|
|
294
|
+
AdvancedStrings.uintToString(evvmID),
|
|
295
295
|
",",
|
|
296
296
|
"flushUsername",
|
|
297
297
|
",",
|
|
298
298
|
_username,
|
|
299
299
|
",",
|
|
300
|
-
|
|
300
|
+
AdvancedStrings.uintToString(_nonce)
|
|
301
301
|
)
|
|
302
302
|
);
|
|
303
303
|
}
|
|
@@ -316,7 +316,7 @@ library Erc191TestBuilder {
|
|
|
316
316
|
return
|
|
317
317
|
buildHashForSign(
|
|
318
318
|
string.concat(
|
|
319
|
-
|
|
319
|
+
AdvancedStrings.uintToString(evvmID),
|
|
320
320
|
",",
|
|
321
321
|
"publicServiceStaking",
|
|
322
322
|
",",
|
|
@@ -324,9 +324,9 @@ library Erc191TestBuilder {
|
|
|
324
324
|
",",
|
|
325
325
|
_isStaking ? "true" : "false",
|
|
326
326
|
",",
|
|
327
|
-
|
|
327
|
+
AdvancedStrings.uintToString(_amountOfStaking),
|
|
328
328
|
",",
|
|
329
|
-
|
|
329
|
+
AdvancedStrings.uintToString(_nonce)
|
|
330
330
|
)
|
|
331
331
|
);
|
|
332
332
|
}
|
|
@@ -340,15 +340,15 @@ library Erc191TestBuilder {
|
|
|
340
340
|
return
|
|
341
341
|
buildHashForSign(
|
|
342
342
|
string.concat(
|
|
343
|
-
|
|
343
|
+
AdvancedStrings.uintToString(evvmID),
|
|
344
344
|
",",
|
|
345
345
|
"publicStaking",
|
|
346
346
|
",",
|
|
347
347
|
_isStaking ? "true" : "false",
|
|
348
348
|
",",
|
|
349
|
-
|
|
349
|
+
AdvancedStrings.uintToString(_amountOfStaking),
|
|
350
350
|
",",
|
|
351
|
-
|
|
351
|
+
AdvancedStrings.uintToString(_nonce)
|
|
352
352
|
)
|
|
353
353
|
);
|
|
354
354
|
}
|
|
@@ -362,15 +362,15 @@ library Erc191TestBuilder {
|
|
|
362
362
|
return
|
|
363
363
|
buildHashForSign(
|
|
364
364
|
string.concat(
|
|
365
|
-
|
|
365
|
+
AdvancedStrings.uintToString(evvmID),
|
|
366
366
|
",",
|
|
367
367
|
"presaleStaking",
|
|
368
368
|
",",
|
|
369
369
|
_isStaking ? "true" : "false",
|
|
370
370
|
",",
|
|
371
|
-
|
|
371
|
+
AdvancedStrings.uintToString(_amountOfStaking),
|
|
372
372
|
",",
|
|
373
|
-
|
|
373
|
+
AdvancedStrings.uintToString(_nonce)
|
|
374
374
|
)
|
|
375
375
|
);
|
|
376
376
|
}
|
|
@@ -390,19 +390,19 @@ library Erc191TestBuilder {
|
|
|
390
390
|
return
|
|
391
391
|
buildHashForSign(
|
|
392
392
|
string.concat(
|
|
393
|
-
|
|
393
|
+
AdvancedStrings.uintToString(evvmID),
|
|
394
394
|
",",
|
|
395
395
|
"makeOrder",
|
|
396
396
|
",",
|
|
397
|
-
|
|
397
|
+
AdvancedStrings.uintToString(_nonce),
|
|
398
398
|
",",
|
|
399
399
|
AdvancedStrings.addressToString(_tokenA),
|
|
400
400
|
",",
|
|
401
401
|
AdvancedStrings.addressToString(_tokenB),
|
|
402
402
|
",",
|
|
403
|
-
|
|
403
|
+
AdvancedStrings.uintToString(_amountA),
|
|
404
404
|
",",
|
|
405
|
-
|
|
405
|
+
AdvancedStrings.uintToString(_amountB)
|
|
406
406
|
)
|
|
407
407
|
);
|
|
408
408
|
}
|
|
@@ -417,17 +417,17 @@ library Erc191TestBuilder {
|
|
|
417
417
|
return
|
|
418
418
|
buildHashForSign(
|
|
419
419
|
string.concat(
|
|
420
|
-
|
|
420
|
+
AdvancedStrings.uintToString(evvmID),
|
|
421
421
|
",",
|
|
422
422
|
"cancelOrder",
|
|
423
423
|
",",
|
|
424
|
-
|
|
424
|
+
AdvancedStrings.uintToString(_nonce),
|
|
425
425
|
",",
|
|
426
426
|
AdvancedStrings.addressToString(_tokenA),
|
|
427
427
|
",",
|
|
428
428
|
AdvancedStrings.addressToString(_tokenB),
|
|
429
429
|
",",
|
|
430
|
-
|
|
430
|
+
AdvancedStrings.uintToString(_orderId)
|
|
431
431
|
)
|
|
432
432
|
);
|
|
433
433
|
}
|
|
@@ -442,17 +442,17 @@ library Erc191TestBuilder {
|
|
|
442
442
|
return
|
|
443
443
|
buildHashForSign(
|
|
444
444
|
string.concat(
|
|
445
|
-
|
|
445
|
+
AdvancedStrings.uintToString(evvmID),
|
|
446
446
|
",",
|
|
447
447
|
"dispatchOrder",
|
|
448
448
|
",",
|
|
449
|
-
|
|
449
|
+
AdvancedStrings.uintToString(_nonce),
|
|
450
450
|
",",
|
|
451
451
|
AdvancedStrings.addressToString(_tokenA),
|
|
452
452
|
",",
|
|
453
453
|
AdvancedStrings.addressToString(_tokenB),
|
|
454
454
|
",",
|
|
455
|
-
|
|
455
|
+
AdvancedStrings.uintToString(_orderId)
|
|
456
456
|
)
|
|
457
457
|
);
|
|
458
458
|
}
|
|
@@ -468,7 +468,7 @@ library Erc191TestBuilder {
|
|
|
468
468
|
keccak256(
|
|
469
469
|
abi.encodePacked(
|
|
470
470
|
"\x19Ethereum Signed Message:\n",
|
|
471
|
-
|
|
471
|
+
AdvancedStrings.uintToString(bytes(messageToSign).length),
|
|
472
472
|
messageToSign
|
|
473
473
|
)
|
|
474
474
|
);
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EVVM-NONCOMMERCIAL-1.0
|
|
2
|
+
// Full license terms available at: https://www.evvm.info/docs/EVVMNoncommercialLicense
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.0;
|
|
5
|
+
|
|
6
|
+
import {IEvvm} from "@evvm/testnet-contracts/interfaces/IEvvm.sol";
|
|
7
|
+
import {IStaking} from "@evvm/testnet-contracts/interfaces/IStaking.sol";
|
|
8
|
+
import {SignatureUtil} from "@evvm/testnet-contracts/library/utils/SignatureUtil.sol";
|
|
9
|
+
import {AsyncNonceService} from "@evvm/testnet-contracts/library/utils/service/AsyncNonceService.sol";
|
|
10
|
+
|
|
11
|
+
abstract contract EvvmService is AsyncNonceService {
|
|
12
|
+
error InvalidServiceSignature();
|
|
13
|
+
|
|
14
|
+
IEvvm evvm;
|
|
15
|
+
IStaking staking;
|
|
16
|
+
|
|
17
|
+
constructor(address evvmAddress, address stakingAddress) {
|
|
18
|
+
evvm = IEvvm(evvmAddress);
|
|
19
|
+
staking = IStaking(stakingAddress);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function validateServiceSignature(
|
|
23
|
+
string memory functionName,
|
|
24
|
+
string memory inputs,
|
|
25
|
+
bytes memory signature,
|
|
26
|
+
address expectedSigner
|
|
27
|
+
) internal view virtual {
|
|
28
|
+
if (
|
|
29
|
+
!SignatureUtil.verifySignature(
|
|
30
|
+
evvm.getEvvmID(),
|
|
31
|
+
functionName,
|
|
32
|
+
inputs,
|
|
33
|
+
signature,
|
|
34
|
+
expectedSigner
|
|
35
|
+
)
|
|
36
|
+
) revert InvalidServiceSignature();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function requestPay(
|
|
40
|
+
address from,
|
|
41
|
+
address token,
|
|
42
|
+
uint256 amount,
|
|
43
|
+
uint256 priorityFee,
|
|
44
|
+
uint256 nonce,
|
|
45
|
+
bool priorityFlag,
|
|
46
|
+
bytes memory signature
|
|
47
|
+
) internal virtual {
|
|
48
|
+
evvm.pay(
|
|
49
|
+
from,
|
|
50
|
+
address(this),
|
|
51
|
+
"",
|
|
52
|
+
token,
|
|
53
|
+
amount,
|
|
54
|
+
priorityFee,
|
|
55
|
+
nonce,
|
|
56
|
+
priorityFlag,
|
|
57
|
+
address(this),
|
|
58
|
+
signature
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function makeCaPay(
|
|
63
|
+
address to,
|
|
64
|
+
address token,
|
|
65
|
+
uint256 amount
|
|
66
|
+
) internal virtual {
|
|
67
|
+
evvm.caPay(to, token, amount);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function _makeStakeService(uint256 amountToStake) internal {
|
|
71
|
+
staking.prepareServiceStaking(amountToStake);
|
|
72
|
+
evvm.caPay(
|
|
73
|
+
address(staking),
|
|
74
|
+
getPrincipalTokenAddress(),
|
|
75
|
+
staking.priceOfStaking() * amountToStake
|
|
76
|
+
);
|
|
77
|
+
staking.confirmServiceStaking();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function _makeUnstakeService(uint256 amountToUnstake) internal {
|
|
81
|
+
staking.serviceUnstaking(amountToUnstake);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function _changeEvvmAddress(address newEvvmAddress) internal {
|
|
85
|
+
evvm = IEvvm(newEvvmAddress);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function _changeStakingAddress(address newStakingAddress) internal {
|
|
89
|
+
staking = IStaking(newStakingAddress);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function getPrincipalTokenAddress()
|
|
93
|
+
internal
|
|
94
|
+
pure
|
|
95
|
+
virtual
|
|
96
|
+
returns (address)
|
|
97
|
+
{
|
|
98
|
+
return address(1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function getEtherAddress() internal pure virtual returns (address) {
|
|
102
|
+
return address(0);
|
|
103
|
+
}
|
|
104
|
+
}
|