@evvm/testnet-contracts 2.2.3 → 2.3.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.
Files changed (34) hide show
  1. package/LICENSE +145 -118
  2. package/README.md +138 -35
  3. package/contracts/evvm/Evvm.sol +154 -181
  4. package/contracts/evvm/lib/ErrorsLib.sol +119 -6
  5. package/contracts/evvm/lib/EvvmStorage.sol +164 -9
  6. package/contracts/evvm/lib/EvvmStructs.sol +124 -6
  7. package/contracts/evvm/lib/SignatureUtils.sol +103 -61
  8. package/contracts/nameService/NameService.sol +165 -155
  9. package/contracts/nameService/lib/ErrorsLib.sol +142 -8
  10. package/contracts/nameService/lib/IdentityValidation.sol +21 -0
  11. package/contracts/nameService/lib/NameServiceStructs.sol +75 -19
  12. package/contracts/nameService/lib/SignatureUtils.sol +235 -60
  13. package/contracts/p2pSwap/P2PSwap.sol +201 -160
  14. package/contracts/staking/Estimator.sol +131 -24
  15. package/contracts/staking/Staking.sol +98 -113
  16. package/contracts/staking/lib/ErrorsLib.sol +79 -3
  17. package/contracts/staking/lib/SignatureUtils.sol +82 -16
  18. package/contracts/staking/lib/StakingStructs.sol +12 -0
  19. package/contracts/treasury/Treasury.sol +30 -12
  20. package/contracts/treasury/lib/ErrorsLib.sol +30 -0
  21. package/contracts/treasuryTwoChains/TreasuryHostChainStation.sol +3 -3
  22. package/interfaces/IEvvm.sol +9 -4
  23. package/interfaces/INameService.sol +12 -3
  24. package/interfaces/IStaking.sol +2 -1
  25. package/library/Erc191TestBuilder.sol +188 -0
  26. package/library/EvvmService.sol +55 -0
  27. package/library/primitives/SignatureRecover.sol +33 -0
  28. package/library/utils/AdvancedStrings.sol +61 -0
  29. package/library/utils/SignatureUtil.sol +34 -0
  30. package/library/utils/nonces/AsyncNonce.sol +42 -0
  31. package/library/utils/nonces/SyncNonce.sol +44 -0
  32. package/library/utils/service/EvvmPayments.sol +65 -0
  33. package/library/utils/service/StakingServiceUtils.sol +44 -0
  34. package/package.json +2 -1
@@ -56,7 +56,7 @@ pragma solidity ^0.8.0;
56
56
  * - Marketplace takes 0.5% fee on username sales
57
57
  */
58
58
 
59
- import {IEvvm} from "@evvm/testnet-contracts/interfaces/IEvvm.sol";
59
+ import {Evvm} from "@evvm/testnet-contracts/contracts/evvm/Evvm.sol";
60
60
  import {
61
61
  AsyncNonce
62
62
  } from "@evvm/testnet-contracts/library/utils/nonces/AsyncNonce.sol";
@@ -80,10 +80,6 @@ contract NameService is AsyncNonce, NameServiceStructs {
80
80
  /// @dev Time delay constant for accepting proposals
81
81
  uint256 constant TIME_TO_ACCEPT_PROPOSAL = 1 days;
82
82
 
83
- /// @dev Constant address representing the Principal Token in the EVVM ecosystem
84
- address private constant PRINCIPAL_TOKEN_ADDRESS =
85
- 0x0000000000000000000000000000000000000001;
86
-
87
83
  /// @dev Amount of Principal Tokens locked in pending marketplace offers
88
84
  uint256 private principalTokenTokenLockedForWithdrawOffers;
89
85
 
@@ -108,7 +104,8 @@ contract NameService is AsyncNonce, NameServiceStructs {
108
104
  mapping(string username => IdentityBaseMetadata basicMetadata)
109
105
  private identityDetails;
110
106
 
111
- IEvvm private evvm;
107
+ /// @dev Instance of the EVVM core contract for payment processing and token operations
108
+ Evvm private evvm;
112
109
 
113
110
  /// @dev Restricts function access to the current admin address only
114
111
  modifier onlyAdmin() {
@@ -117,14 +114,6 @@ contract NameService is AsyncNonce, NameServiceStructs {
117
114
  _;
118
115
  }
119
116
 
120
- /// @dev Verifies that the caller owns the specified identity/username
121
- modifier onlyOwnerOfIdentity(address _user, string memory _identity) {
122
- if (identityDetails[_identity].owner != _user)
123
- revert ErrorsLib.UserIsNotOwnerOfIdentity();
124
-
125
- _;
126
- }
127
-
128
117
  /**
129
118
  * @notice Initializes the NameService contract
130
119
  * @dev Sets up the EVVM integration and initial admin
@@ -134,7 +123,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
134
123
  constructor(address _evvmAddress, address _initialOwner) {
135
124
  evvmAddress.current = _evvmAddress;
136
125
  admin.current = _initialOwner;
137
- evvm = IEvvm(_evvmAddress);
126
+ evvm = Evvm(_evvmAddress);
138
127
  }
139
128
 
140
129
  /**
@@ -161,7 +150,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
161
150
  ) external {
162
151
  if (
163
152
  !SignatureUtils.verifyMessageSignedForPreRegistrationUsername(
164
- IEvvm(evvmAddress.current).getEvvmID(),
153
+ evvm.getEvvmID(),
165
154
  user,
166
155
  hashPreRegisteredUsername,
167
156
  nonce,
@@ -171,8 +160,8 @@ contract NameService is AsyncNonce, NameServiceStructs {
171
160
 
172
161
  verifyAsyncNonce(user, nonce);
173
162
 
174
- if (priorityFee_EVVM > 0) {
175
- makePay(
163
+ if (priorityFee_EVVM > 0)
164
+ requestPay(
176
165
  user,
177
166
  0,
178
167
  priorityFee_EVVM,
@@ -180,14 +169,13 @@ contract NameService is AsyncNonce, NameServiceStructs {
180
169
  priorityFlag_EVVM,
181
170
  signature_EVVM
182
171
  );
183
- }
184
172
 
185
- string memory key = string.concat(
186
- "@",
187
- AdvancedStrings.bytes32ToString(hashPreRegisteredUsername)
188
- );
189
-
190
- identityDetails[key] = IdentityBaseMetadata({
173
+ identityDetails[
174
+ string.concat(
175
+ "@",
176
+ AdvancedStrings.bytes32ToString(hashPreRegisteredUsername)
177
+ )
178
+ ] = IdentityBaseMetadata({
191
179
  owner: user,
192
180
  expireDate: block.timestamp + 30 minutes,
193
181
  customMetadataMaxSlots: 0,
@@ -197,12 +185,8 @@ contract NameService is AsyncNonce, NameServiceStructs {
197
185
 
198
186
  markAsyncNonceAsUsed(user, nonce);
199
187
 
200
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
201
- makeCaPay(
202
- msg.sender,
203
- IEvvm(evvmAddress.current).getRewardAmount() + priorityFee_EVVM
204
- );
205
- }
188
+ if (evvm.isAddressStaker(msg.sender))
189
+ makeCaPay(msg.sender, evvm.getRewardAmount() + priorityFee_EVVM);
206
190
  }
207
191
 
208
192
  /**
@@ -229,17 +213,9 @@ contract NameService is AsyncNonce, NameServiceStructs {
229
213
  bool priorityFlag_EVVM,
230
214
  bytes memory signature_EVVM
231
215
  ) external {
232
- if (
233
- admin.current != user &&
234
- !IdentityValidation.isValidUsername(username)
235
- ) revert ErrorsLib.InvalidUsername();
236
-
237
- if (!isUsernameAvailable(username))
238
- revert ErrorsLib.UsernameAlreadyRegistered();
239
-
240
216
  if (
241
217
  !SignatureUtils.verifyMessageSignedForRegistrationUsername(
242
- IEvvm(evvmAddress.current).getEvvmID(),
218
+ evvm.getEvvmID(),
243
219
  user,
244
220
  username,
245
221
  clowNumber,
@@ -248,9 +224,17 @@ contract NameService is AsyncNonce, NameServiceStructs {
248
224
  )
249
225
  ) revert ErrorsLib.InvalidSignatureOnNameService();
250
226
 
227
+ if (
228
+ admin.current != user &&
229
+ !IdentityValidation.isValidUsername(username)
230
+ ) revert ErrorsLib.InvalidUsername();
231
+
232
+ if (!isUsernameAvailable(username))
233
+ revert ErrorsLib.UsernameAlreadyRegistered();
234
+
251
235
  verifyAsyncNonce(user, nonce);
252
236
 
253
- makePay(
237
+ requestPay(
254
238
  user,
255
239
  getPriceOfRegistration(username),
256
240
  priorityFee_EVVM,
@@ -279,13 +263,11 @@ contract NameService is AsyncNonce, NameServiceStructs {
279
263
 
280
264
  markAsyncNonceAsUsed(user, nonce);
281
265
 
282
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
266
+ if (evvm.isAddressStaker(msg.sender))
283
267
  makeCaPay(
284
268
  msg.sender,
285
- (50 * IEvvm(evvmAddress.current).getRewardAmount()) +
286
- priorityFee_EVVM
269
+ (50 * evvm.getRewardAmount()) + priorityFee_EVVM
287
270
  );
288
- }
289
271
 
290
272
  delete identityDetails[_key];
291
273
  }
@@ -317,16 +299,9 @@ contract NameService is AsyncNonce, NameServiceStructs {
317
299
  bool priorityFlag_EVVM,
318
300
  bytes memory signature_EVVM
319
301
  ) external returns (uint256 offerID) {
320
- if (
321
- identityDetails[username].flagNotAUsername == 0x01 ||
322
- !verifyIfIdentityExists(username) ||
323
- amount == 0 ||
324
- expireDate <= block.timestamp
325
- ) revert ErrorsLib.PreRegistrationNotValid();
326
-
327
302
  if (
328
303
  !SignatureUtils.verifyMessageSignedForMakeOffer(
329
- IEvvm(evvmAddress.current).getEvvmID(),
304
+ evvm.getEvvmID(),
330
305
  user,
331
306
  username,
332
307
  expireDate,
@@ -336,9 +311,19 @@ contract NameService is AsyncNonce, NameServiceStructs {
336
311
  )
337
312
  ) revert ErrorsLib.InvalidSignatureOnNameService();
338
313
 
314
+ if (
315
+ identityDetails[username].flagNotAUsername == 0x01 ||
316
+ !verifyIfIdentityExists(username)
317
+ ) revert ErrorsLib.InvalidUsername();
318
+
319
+ if (expireDate <= block.timestamp)
320
+ revert ErrorsLib.CannotBeBeforeCurrentTime();
321
+
322
+ if (amount == 0) revert ErrorsLib.AmountMustBeGreaterThanZero();
323
+
339
324
  verifyAsyncNonce(user, nonce);
340
325
 
341
- makePay(
326
+ requestPay(
342
327
  user,
343
328
  amount,
344
329
  priorityFee_EVVM,
@@ -347,24 +332,26 @@ contract NameService is AsyncNonce, NameServiceStructs {
347
332
  signature_EVVM
348
333
  );
349
334
 
350
- while (usernameOffers[username][offerID].offerer != address(0)) {
335
+ while (usernameOffers[username][offerID].offerer != address(0))
351
336
  offerID++;
352
- }
337
+
338
+ uint256 amountToOffer = ((amount * 995) / 1000);
353
339
 
354
340
  usernameOffers[username][offerID] = OfferMetadata({
355
341
  offerer: user,
356
342
  expireDate: expireDate,
357
- amount: ((amount * 995) / 1000)
343
+ amount: amountToOffer
358
344
  });
359
345
 
360
346
  makeCaPay(
361
347
  msg.sender,
362
- IEvvm(evvmAddress.current).getRewardAmount() +
348
+ evvm.getRewardAmount() +
363
349
  ((amount * 125) / 100_000) +
364
350
  priorityFee_EVVM
365
351
  );
352
+
366
353
  principalTokenTokenLockedForWithdrawOffers +=
367
- ((amount * 995) / 1000) +
354
+ amountToOffer +
368
355
  (amount / 800);
369
356
 
370
357
  if (offerID > identityDetails[username].offerMaxSlots) {
@@ -400,12 +387,9 @@ contract NameService is AsyncNonce, NameServiceStructs {
400
387
  bool priorityFlag_EVVM,
401
388
  bytes memory signature_EVVM
402
389
  ) external {
403
- if (usernameOffers[username][offerID].offerer != user)
404
- revert ErrorsLib.UserIsNotOwnerOfOffer();
405
-
406
390
  if (
407
391
  !SignatureUtils.verifyMessageSignedForWithdrawOffer(
408
- IEvvm(evvmAddress.current).getEvvmID(),
392
+ evvm.getEvvmID(),
409
393
  user,
410
394
  username,
411
395
  offerID,
@@ -414,10 +398,13 @@ contract NameService is AsyncNonce, NameServiceStructs {
414
398
  )
415
399
  ) revert ErrorsLib.InvalidSignatureOnNameService();
416
400
 
401
+ if (usernameOffers[username][offerID].offerer != user)
402
+ revert ErrorsLib.UserIsNotOwnerOfOffer();
403
+
417
404
  verifyAsyncNonce(user, nonce);
418
405
 
419
- if (priorityFee_EVVM > 0) {
420
- makePay(
406
+ if (priorityFee_EVVM > 0)
407
+ requestPay(
421
408
  user,
422
409
  0,
423
410
  priorityFee_EVVM,
@@ -425,7 +412,6 @@ contract NameService is AsyncNonce, NameServiceStructs {
425
412
  priorityFlag_EVVM,
426
413
  signature_EVVM
427
414
  );
428
- }
429
415
 
430
416
  makeCaPay(user, usernameOffers[username][offerID].amount);
431
417
 
@@ -433,7 +419,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
433
419
 
434
420
  makeCaPay(
435
421
  msg.sender,
436
- IEvvm(evvmAddress.current).getRewardAmount() +
422
+ evvm.getRewardAmount() +
437
423
  ((usernameOffers[username][offerID].amount * 1) / 796) +
438
424
  priorityFee_EVVM
439
425
  );
@@ -468,15 +454,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
468
454
  uint256 nonce_EVVM,
469
455
  bool priorityFlag_EVVM,
470
456
  bytes memory signature_EVVM
471
- ) external onlyOwnerOfIdentity(user, username) {
472
- if (
473
- usernameOffers[username][offerID].offerer == address(0) ||
474
- usernameOffers[username][offerID].expireDate < block.timestamp
475
- ) revert ErrorsLib.AcceptOfferVerificationFailed();
476
-
457
+ ) external {
477
458
  if (
478
459
  !SignatureUtils.verifyMessageSignedForAcceptOffer(
479
- IEvvm(evvmAddress.current).getEvvmID(),
460
+ evvm.getEvvmID(),
480
461
  user,
481
462
  username,
482
463
  offerID,
@@ -485,10 +466,18 @@ contract NameService is AsyncNonce, NameServiceStructs {
485
466
  )
486
467
  ) revert ErrorsLib.InvalidSignatureOnNameService();
487
468
 
469
+ if (identityDetails[username].owner != user)
470
+ revert ErrorsLib.UserIsNotOwnerOfIdentity();
471
+
472
+ if (
473
+ usernameOffers[username][offerID].offerer == address(0) ||
474
+ usernameOffers[username][offerID].expireDate < block.timestamp
475
+ ) revert ErrorsLib.OfferInactive();
476
+
488
477
  verifyAsyncNonce(user, nonce);
489
478
 
490
479
  if (priorityFee_EVVM > 0) {
491
- makePay(
480
+ requestPay(
492
481
  user,
493
482
  0,
494
483
  priorityFee_EVVM,
@@ -505,10 +494,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
505
494
 
506
495
  usernameOffers[username][offerID].offerer = address(0);
507
496
 
508
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
497
+ if (evvm.isAddressStaker(msg.sender)) {
509
498
  makeCaPay(
510
499
  msg.sender,
511
- (IEvvm(evvmAddress.current).getRewardAmount()) +
500
+ (evvm.getRewardAmount()) +
512
501
  (((usernameOffers[username][offerID].amount * 1) / 199) /
513
502
  4) +
514
503
  priorityFee_EVVM
@@ -550,15 +539,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
550
539
  uint256 nonce_EVVM,
551
540
  bool priorityFlag_EVVM,
552
541
  bytes memory signature_EVVM
553
- ) external onlyOwnerOfIdentity(user, username) {
554
- if (
555
- identityDetails[username].flagNotAUsername == 0x01 ||
556
- identityDetails[username].expireDate > block.timestamp + 36500 days
557
- ) revert ErrorsLib.RenewUsernameVerificationFailed();
558
-
542
+ ) external {
559
543
  if (
560
544
  !SignatureUtils.verifyMessageSignedForRenewUsername(
561
- IEvvm(evvmAddress.current).getEvvmID(),
545
+ evvm.getEvvmID(),
562
546
  user,
563
547
  username,
564
548
  nonce,
@@ -566,11 +550,20 @@ contract NameService is AsyncNonce, NameServiceStructs {
566
550
  )
567
551
  ) revert ErrorsLib.InvalidSignatureOnNameService();
568
552
 
553
+ if (identityDetails[username].owner != user)
554
+ revert ErrorsLib.UserIsNotOwnerOfIdentity();
555
+
556
+ if (identityDetails[username].flagNotAUsername == 0x01)
557
+ revert ErrorsLib.IdentityIsNotAUsername();
558
+
559
+ if (identityDetails[username].expireDate > block.timestamp + 36500 days)
560
+ revert ErrorsLib.RenewalTimeLimitExceeded();
561
+
569
562
  verifyAsyncNonce(user, nonce);
570
563
 
571
564
  uint256 priceOfRenew = seePriceToRenew(username);
572
565
 
573
- makePay(
566
+ requestPay(
574
567
  user,
575
568
  priceOfRenew,
576
569
  priorityFee_EVVM,
@@ -579,10 +572,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
579
572
  signature_EVVM
580
573
  );
581
574
 
582
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
575
+ if (evvm.isAddressStaker(msg.sender)) {
583
576
  makeCaPay(
584
577
  msg.sender,
585
- IEvvm(evvmAddress.current).getRewardAmount() +
578
+ evvm.getRewardAmount() +
586
579
  ((priceOfRenew * 50) / 100) +
587
580
  priorityFee_EVVM
588
581
  );
@@ -629,12 +622,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
629
622
  uint256 nonce_EVVM,
630
623
  bool priorityFlag_EVVM,
631
624
  bytes memory signature_EVVM
632
- ) external onlyOwnerOfIdentity(user, identity) {
633
- if (bytes(value).length == 0) revert ErrorsLib.EmptyCustomMetadata();
634
-
625
+ ) external {
635
626
  if (
636
627
  !SignatureUtils.verifyMessageSignedForAddCustomMetadata(
637
- IEvvm(evvmAddress.current).getEvvmID(),
628
+ evvm.getEvvmID(),
638
629
  user,
639
630
  identity,
640
631
  value,
@@ -643,9 +634,14 @@ contract NameService is AsyncNonce, NameServiceStructs {
643
634
  )
644
635
  ) revert ErrorsLib.InvalidSignatureOnNameService();
645
636
 
637
+ if (identityDetails[identity].owner != user)
638
+ revert ErrorsLib.UserIsNotOwnerOfIdentity();
639
+
640
+ if (bytes(value).length == 0) revert ErrorsLib.EmptyCustomMetadata();
641
+
646
642
  verifyAsyncNonce(user, nonce);
647
643
 
648
- makePay(
644
+ requestPay(
649
645
  user,
650
646
  getPriceToAddCustomMetadata(),
651
647
  priorityFee_EVVM,
@@ -654,10 +650,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
654
650
  signature_EVVM
655
651
  );
656
652
 
657
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
653
+ if (evvm.isAddressStaker(msg.sender)) {
658
654
  makeCaPay(
659
655
  msg.sender,
660
- (5 * IEvvm(evvmAddress.current).getRewardAmount()) +
656
+ (5 * evvm.getRewardAmount()) +
661
657
  ((getPriceToAddCustomMetadata() * 50) / 100) +
662
658
  priorityFee_EVVM
663
659
  );
@@ -694,10 +690,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
694
690
  uint256 nonce_EVVM,
695
691
  bool priorityFlag_EVVM,
696
692
  bytes memory signature_EVVM
697
- ) external onlyOwnerOfIdentity(user, identity) {
693
+ ) external {
698
694
  if (
699
695
  !SignatureUtils.verifyMessageSignedForRemoveCustomMetadata(
700
- IEvvm(evvmAddress.current).getEvvmID(),
696
+ evvm.getEvvmID(),
701
697
  user,
702
698
  identity,
703
699
  key,
@@ -706,12 +702,15 @@ contract NameService is AsyncNonce, NameServiceStructs {
706
702
  )
707
703
  ) revert ErrorsLib.InvalidSignatureOnNameService();
708
704
 
709
- verifyAsyncNonce(user, nonce);
705
+ if (identityDetails[identity].owner != user)
706
+ revert ErrorsLib.UserIsNotOwnerOfIdentity();
710
707
 
711
708
  if (identityDetails[identity].customMetadataMaxSlots <= key)
712
709
  revert ErrorsLib.InvalidKey();
713
710
 
714
- makePay(
711
+ verifyAsyncNonce(user, nonce);
712
+
713
+ requestPay(
715
714
  user,
716
715
  getPriceToRemoveCustomMetadata(),
717
716
  priorityFee_EVVM,
@@ -736,15 +735,16 @@ contract NameService is AsyncNonce, NameServiceStructs {
736
735
  identityDetails[identity].customMetadataMaxSlots
737
736
  ];
738
737
  }
738
+
739
739
  identityDetails[identity].customMetadataMaxSlots--;
740
+
740
741
  markAsyncNonceAsUsed(user, nonce);
741
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
742
+
743
+ if (evvm.isAddressStaker(msg.sender))
742
744
  makeCaPay(
743
745
  msg.sender,
744
- (5 * IEvvm(evvmAddress.current).getRewardAmount()) +
745
- priorityFee_EVVM
746
+ (5 * evvm.getRewardAmount()) + priorityFee_EVVM
746
747
  );
747
- }
748
748
  }
749
749
 
750
750
  /**
@@ -768,10 +768,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
768
768
  uint256 nonce_EVVM,
769
769
  bool priorityFlag_EVVM,
770
770
  bytes memory signature_EVVM
771
- ) external onlyOwnerOfIdentity(user, identity) {
771
+ ) external {
772
772
  if (
773
773
  !SignatureUtils.verifyMessageSignedForFlushCustomMetadata(
774
- IEvvm(evvmAddress.current).getEvvmID(),
774
+ evvm.getEvvmID(),
775
775
  user,
776
776
  identity,
777
777
  nonce,
@@ -779,12 +779,15 @@ contract NameService is AsyncNonce, NameServiceStructs {
779
779
  )
780
780
  ) revert ErrorsLib.InvalidSignatureOnNameService();
781
781
 
782
- verifyAsyncNonce(user, nonce);
782
+ if (identityDetails[identity].owner != user)
783
+ revert ErrorsLib.UserIsNotOwnerOfIdentity();
783
784
 
784
785
  if (identityDetails[identity].customMetadataMaxSlots == 0)
785
786
  revert ErrorsLib.EmptyCustomMetadata();
786
787
 
787
- makePay(
788
+ verifyAsyncNonce(user, nonce);
789
+
790
+ requestPay(
788
791
  user,
789
792
  getPriceToFlushCustomMetadata(identity),
790
793
  priorityFee_EVVM,
@@ -801,10 +804,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
801
804
  delete identityCustomMetadata[identity][i];
802
805
  }
803
806
 
804
- if (IEvvm(evvmAddress.current).isAddressStaker(msg.sender)) {
807
+ if (evvm.isAddressStaker(msg.sender)) {
805
808
  makeCaPay(
806
809
  msg.sender,
807
- ((5 * IEvvm(evvmAddress.current).getRewardAmount()) *
810
+ ((5 * evvm.getRewardAmount()) *
808
811
  identityDetails[identity].customMetadataMaxSlots) +
809
812
  priorityFee_EVVM
810
813
  );
@@ -835,15 +838,10 @@ contract NameService is AsyncNonce, NameServiceStructs {
835
838
  uint256 nonce_EVVM,
836
839
  bool priorityFlag_EVVM,
837
840
  bytes memory signature_EVVM
838
- ) external onlyOwnerOfIdentity(user, username) {
839
- if (
840
- block.timestamp >= identityDetails[username].expireDate ||
841
- identityDetails[username].flagNotAUsername == 0x01
842
- ) revert ErrorsLib.FlushUsernameVerificationFailed();
843
-
841
+ ) external {
844
842
  if (
845
843
  !SignatureUtils.verifyMessageSignedForFlushUsername(
846
- IEvvm(evvmAddress.current).getEvvmID(),
844
+ evvm.getEvvmID(),
847
845
  user,
848
846
  username,
849
847
  nonce,
@@ -851,9 +849,18 @@ contract NameService is AsyncNonce, NameServiceStructs {
851
849
  )
852
850
  ) revert ErrorsLib.InvalidSignatureOnNameService();
853
851
 
852
+ if (identityDetails[username].owner != user)
853
+ revert ErrorsLib.UserIsNotOwnerOfIdentity();
854
+
855
+ if (block.timestamp >= identityDetails[username].expireDate)
856
+ revert ErrorsLib.OwnershipExpired();
857
+
858
+ if (identityDetails[username].flagNotAUsername == 0x01)
859
+ revert ErrorsLib.IdentityIsNotAUsername();
860
+
854
861
  verifyAsyncNonce(user, nonce);
855
862
 
856
- makePay(
863
+ requestPay(
857
864
  user,
858
865
  getPriceToFlushUsername(username),
859
866
  priorityFee_EVVM,
@@ -872,7 +879,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
872
879
 
873
880
  makeCaPay(
874
881
  msg.sender,
875
- ((5 * IEvvm(evvmAddress.current).getRewardAmount()) *
882
+ ((5 * evvm.getRewardAmount()) *
876
883
  identityDetails[username].customMetadataMaxSlots) +
877
884
  priorityFee_EVVM
878
885
  );
@@ -895,9 +902,8 @@ contract NameService is AsyncNonce, NameServiceStructs {
895
902
  * @param _adminToPropose Address of the proposed new admin
896
903
  */
897
904
  function proposeAdmin(address _adminToPropose) public onlyAdmin {
898
- if (_adminToPropose == address(0) || _adminToPropose == admin.current) {
899
- revert();
900
- }
905
+ if (_adminToPropose == address(0) || _adminToPropose == admin.current)
906
+ revert ErrorsLib.InvalidAdminProposal();
901
907
 
902
908
  admin.proposal = _adminToPropose;
903
909
  admin.timeToAccept = block.timestamp + TIME_TO_ACCEPT_PROPOSAL;
@@ -917,12 +923,11 @@ contract NameService is AsyncNonce, NameServiceStructs {
917
923
  * @dev Can only be called by the proposed admin after the time delay has passed
918
924
  */
919
925
  function acceptProposeAdmin() public {
920
- if (admin.proposal != msg.sender) {
921
- revert();
922
- }
923
- if (block.timestamp < admin.timeToAccept) {
924
- revert();
925
- }
926
+ if (admin.proposal != msg.sender)
927
+ revert ErrorsLib.SenderIsNotProposedAdmin();
928
+
929
+ if (block.timestamp < admin.timeToAccept)
930
+ revert ErrorsLib.LockTimeNotExpired();
926
931
 
927
932
  admin = AddressTypeProposal({
928
933
  current: admin.proposal,
@@ -938,17 +943,14 @@ contract NameService is AsyncNonce, NameServiceStructs {
938
943
  */
939
944
  function proposeWithdrawPrincipalTokens(uint256 _amount) public onlyAdmin {
940
945
  if (
941
- IEvvm(evvmAddress.current).getBalance(
942
- address(this),
943
- PRINCIPAL_TOKEN_ADDRESS
944
- ) -
946
+ evvm.getBalance(address(this), evvm.getPrincipalTokenAddress()) -
945
947
  (5083 +
946
- IEvvm(evvmAddress.current).getRewardAmount() +
948
+ evvm.getRewardAmount() +
947
949
  principalTokenTokenLockedForWithdrawOffers) <
948
950
  _amount ||
949
951
  _amount == 0
950
952
  ) {
951
- revert();
953
+ revert ErrorsLib.InvalidWithdrawAmount();
952
954
  }
953
955
 
954
956
  amountToWithdrawTokens.proposal = _amount;
@@ -971,9 +973,8 @@ contract NameService is AsyncNonce, NameServiceStructs {
971
973
  * @dev Can only be called after the time delay has passed
972
974
  */
973
975
  function claimWithdrawPrincipalTokens() public onlyAdmin {
974
- if (block.timestamp < amountToWithdrawTokens.timeToAccept) {
975
- revert();
976
- }
976
+ if (block.timestamp < amountToWithdrawTokens.timeToAccept)
977
+ revert ErrorsLib.LockTimeNotExpired();
977
978
 
978
979
  makeCaPay(admin.current, amountToWithdrawTokens.proposal);
979
980
 
@@ -989,9 +990,9 @@ contract NameService is AsyncNonce, NameServiceStructs {
989
990
  function proposeChangeEvvmAddress(
990
991
  address _newEvvmAddress
991
992
  ) public onlyAdmin {
992
- if (_newEvvmAddress == address(0)) {
993
- revert();
994
- }
993
+ if (_newEvvmAddress == address(0))
994
+ revert ErrorsLib.InvalidEvvmAddress();
995
+
995
996
  evvmAddress.proposal = _newEvvmAddress;
996
997
  evvmAddress.timeToAccept = block.timestamp + TIME_TO_ACCEPT_PROPOSAL;
997
998
  }
@@ -1010,16 +1011,16 @@ contract NameService is AsyncNonce, NameServiceStructs {
1010
1011
  * @dev Can only be called after the time delay has passed
1011
1012
  */
1012
1013
  function acceptChangeEvvmAddress() public onlyAdmin {
1013
- if (block.timestamp < evvmAddress.timeToAccept) {
1014
- revert();
1015
- }
1014
+ if (block.timestamp < evvmAddress.timeToAccept)
1015
+ revert ErrorsLib.LockTimeNotExpired();
1016
+
1016
1017
  evvmAddress = AddressTypeProposal({
1017
1018
  current: evvmAddress.proposal,
1018
1019
  proposal: address(0),
1019
1020
  timeToAccept: 0
1020
1021
  });
1021
1022
 
1022
- evvm = IEvvm(evvmAddress.current);
1023
+ evvm = Evvm(evvmAddress.current);
1023
1024
  }
1024
1025
 
1025
1026
  //█ Utility Functions ████████████████████████████████████████████████████████████████████████
@@ -1036,7 +1037,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
1036
1037
  * @param priorityFlag True for async payment, false for sync payment
1037
1038
  * @param signature Signature authorizing the payment
1038
1039
  */
1039
- function makePay(
1040
+ function requestPay(
1040
1041
  address user,
1041
1042
  uint256 amount,
1042
1043
  uint256 priorityFee,
@@ -1044,11 +1045,11 @@ contract NameService is AsyncNonce, NameServiceStructs {
1044
1045
  bool priorityFlag,
1045
1046
  bytes memory signature
1046
1047
  ) internal {
1047
- IEvvm(evvmAddress.current).pay(
1048
+ evvm.pay(
1048
1049
  user,
1049
1050
  address(this),
1050
1051
  "",
1051
- PRINCIPAL_TOKEN_ADDRESS,
1052
+ evvm.getPrincipalTokenAddress(),
1052
1053
  amount,
1053
1054
  priorityFee,
1054
1055
  nonce,
@@ -1065,7 +1066,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
1065
1066
  * @param amount Amount of Principal Tokens to distribute
1066
1067
  */
1067
1068
  function makeCaPay(address user, uint256 amount) internal {
1068
- IEvvm(evvmAddress.current).caPay(user, PRINCIPAL_TOKEN_ADDRESS, amount);
1069
+ evvm.caPay(user, evvm.getPrincipalTokenAddress(), amount);
1069
1070
  }
1070
1071
 
1071
1072
  //█ Username Hashing Functions ███████████████████████████████████████████████████████████████████
@@ -1201,14 +1202,14 @@ contract NameService is AsyncNonce, NameServiceStructs {
1201
1202
  if (price == 0) {
1202
1203
  price = 500 * 10 ** 18;
1203
1204
  } else {
1204
- uint256 principalTokenReward = IEvvm(evvmAddress.current)
1205
- .getRewardAmount();
1205
+ uint256 principalTokenReward = evvm.getRewardAmount();
1206
+
1206
1207
  price = ((price * 5) / 1000) > (500000 * principalTokenReward)
1207
1208
  ? (500000 * principalTokenReward)
1208
1209
  : ((price * 5) / 1000);
1209
1210
  }
1210
1211
  } else {
1211
- price = 500_000 * IEvvm(evvmAddress.current).getRewardAmount();
1212
+ price = 500_000 * evvm.getRewardAmount();
1212
1213
  }
1213
1214
  }
1214
1215
 
@@ -1218,7 +1219,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
1218
1219
  * @return price Cost in Principal Tokens (10x current reward amount)
1219
1220
  */
1220
1221
  function getPriceToAddCustomMetadata() public view returns (uint256 price) {
1221
- price = 10 * IEvvm(evvmAddress.current).getRewardAmount();
1222
+ price = 10 * evvm.getRewardAmount();
1222
1223
  }
1223
1224
 
1224
1225
  /**
@@ -1231,7 +1232,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
1231
1232
  view
1232
1233
  returns (uint256 price)
1233
1234
  {
1234
- price = 10 * IEvvm(evvmAddress.current).getRewardAmount();
1235
+ price = 10 * evvm.getRewardAmount();
1235
1236
  }
1236
1237
 
1237
1238
  /**
@@ -1244,7 +1245,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
1244
1245
  string memory _identity
1245
1246
  ) public view returns (uint256 price) {
1246
1247
  price =
1247
- (10 * IEvvm(evvmAddress.current).getRewardAmount()) *
1248
+ (10 * evvm.getRewardAmount()) *
1248
1249
  identityDetails[_identity].customMetadataMaxSlots;
1249
1250
  }
1250
1251
 
@@ -1258,9 +1259,9 @@ contract NameService is AsyncNonce, NameServiceStructs {
1258
1259
  string memory _identity
1259
1260
  ) public view returns (uint256 price) {
1260
1261
  price =
1261
- ((10 * IEvvm(evvmAddress.current).getRewardAmount()) *
1262
+ ((10 * evvm.getRewardAmount()) *
1262
1263
  identityDetails[_identity].customMetadataMaxSlots) +
1263
- IEvvm(evvmAddress.current).getRewardAmount();
1264
+ evvm.getRewardAmount();
1264
1265
  }
1265
1266
 
1266
1267
  //█ Identity Availability Functions ██████████████████████████████████████████████████████████████
@@ -1430,7 +1431,7 @@ contract NameService is AsyncNonce, NameServiceStructs {
1430
1431
  return
1431
1432
  identityDetails[username].offerMaxSlots > 0
1432
1433
  ? seePriceToRenew(username)
1433
- : IEvvm(evvmAddress.current).getRewardAmount() * 100;
1434
+ : evvm.getRewardAmount() * 100;
1434
1435
  }
1435
1436
 
1436
1437
  //█ Administrative Getters ███████████████████████████████████████████████████████████████████████
@@ -1483,6 +1484,15 @@ contract NameService is AsyncNonce, NameServiceStructs {
1483
1484
  );
1484
1485
  }
1485
1486
 
1487
+ /**
1488
+ * @notice Gets the unique identifier string for this EVVM instance
1489
+ * @dev Returns the EvvmID used for distinguishing different EVVM deployments
1490
+ * @return Unique EvvmID string
1491
+ */
1492
+ function getEvvmID() external view returns (uint256) {
1493
+ return evvm.getEvvmID();
1494
+ }
1495
+
1486
1496
  /**
1487
1497
  * @notice Gets the current EVVM contract address
1488
1498
  * @dev Returns the address of the EVVM contract used for payment processing