@coti-io/coti-contracts 1.0.2 → 1.0.4

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 (48) hide show
  1. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +112 -0
  2. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +126 -0
  3. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +15 -0
  4. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +27 -1
  5. package/contracts/utils/mpc/MpcCore.sol +40 -0
  6. package/contracts/utils/mpc/MpcInterface.sol +2 -0
  7. package/package.json +1 -1
  8. package/test/onboard/AccountOnboard.test.ts +2 -2
  9. package/test/utils/accounts.ts +2 -2
  10. package/test/utils/mpc/Precompile.test.ts +8 -0
  11. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +0 -2
  12. package/typechain-types/contracts/GasTest.ts +91 -0
  13. package/typechain-types/contracts/mocks/utils/mpc/index.ts +1 -0
  14. package/typechain-types/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.ts +100 -0
  15. package/typechain-types/contracts/token/PrivateERC721/extensions/index.ts +1 -0
  16. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +38 -0
  17. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +0 -1
  18. package/typechain-types/factories/contracts/GasTest__factory.ts +75 -0
  19. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
  20. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  21. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  22. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  23. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  24. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  25. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  26. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  27. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  28. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  29. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  30. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  31. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  32. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  33. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  34. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  35. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  36. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  37. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  38. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  39. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +1 -0
  40. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  41. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  42. package/typechain-types/factories/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage__factory.ts +55 -0
  43. package/typechain-types/factories/contracts/token/PrivateERC721/extensions/index.ts +1 -0
  44. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  45. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +58 -0
  46. package/typechain-types/hardhat.d.ts +36 -54
  47. package/typechain-types/index.ts +6 -6
  48. package/contracts/onboard/README.md +0 -65
@@ -123,6 +123,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
123
123
  return MpcCore.xor(a, b);
124
124
  }
125
125
 
126
+ function shl(
127
+ gtUint8 a,
128
+ uint8 b,
129
+ uint256 uintParameter,
130
+ address addressParameter,
131
+ string calldata stringParameter
132
+ )
133
+ internal
134
+ onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
135
+ returns (gtUint8)
136
+ {
137
+ return MpcCore.shl(a, b);
138
+ }
139
+
140
+ function shr(
141
+ gtUint8 a,
142
+ uint8 b,
143
+ uint256 uintParameter,
144
+ address addressParameter,
145
+ string calldata stringParameter
146
+ )
147
+ internal
148
+ onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
149
+ returns (gtUint8)
150
+ {
151
+ return MpcCore.shr(a, b);
152
+ }
153
+
126
154
  function eq(
127
155
  gtUint8 a,
128
156
  gtUint8 b,
@@ -377,6 +405,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
377
405
  return MpcCore.xor(a, b);
378
406
  }
379
407
 
408
+ function shl(
409
+ gtUint16 a,
410
+ uint16 b,
411
+ uint256 uintParameter,
412
+ address addressParameter,
413
+ string calldata stringParameter
414
+ )
415
+ internal
416
+ onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
417
+ returns (gtUint16)
418
+ {
419
+ return MpcCore.shl(a, b);
420
+ }
421
+
422
+ function shr(
423
+ gtUint16 a,
424
+ uint16 b,
425
+ uint256 uintParameter,
426
+ address addressParameter,
427
+ string calldata stringParameter
428
+ )
429
+ internal
430
+ onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
431
+ returns (gtUint16)
432
+ {
433
+ return MpcCore.shr(a, b);
434
+ }
435
+
380
436
  function eq(
381
437
  gtUint16 a,
382
438
  gtUint16 b,
@@ -631,6 +687,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
631
687
  return MpcCore.xor(a, b);
632
688
  }
633
689
 
690
+ function shl(
691
+ gtUint32 a,
692
+ uint32 b,
693
+ uint256 uintParameter,
694
+ address addressParameter,
695
+ string calldata stringParameter
696
+ )
697
+ internal
698
+ onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
699
+ returns (gtUint32)
700
+ {
701
+ return MpcCore.shl(a, b);
702
+ }
703
+
704
+ function shr(
705
+ gtUint32 a,
706
+ uint32 b,
707
+ uint256 uintParameter,
708
+ address addressParameter,
709
+ string calldata stringParameter
710
+ )
711
+ internal
712
+ onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
713
+ returns (gtUint32)
714
+ {
715
+ return MpcCore.shr(a, b);
716
+ }
717
+
634
718
  function eq(
635
719
  gtUint32 a,
636
720
  gtUint32 b,
@@ -885,6 +969,34 @@ abstract contract DataPrivacyFrameworkMpc is DataPrivacyFramework {
885
969
  return MpcCore.xor(a, b);
886
970
  }
887
971
 
972
+ function shl(
973
+ gtUint64 a,
974
+ uint64 b,
975
+ uint256 uintParameter,
976
+ address addressParameter,
977
+ string calldata stringParameter
978
+ )
979
+ internal
980
+ onlyAllowedUserOperation("op_shl", uintParameter, addressParameter, stringParameter)
981
+ returns (gtUint64)
982
+ {
983
+ return MpcCore.shl(a, b);
984
+ }
985
+
986
+ function shr(
987
+ gtUint64 a,
988
+ uint64 b,
989
+ uint256 uintParameter,
990
+ address addressParameter,
991
+ string calldata stringParameter
992
+ )
993
+ internal
994
+ onlyAllowedUserOperation("op_shr", uintParameter, addressParameter, stringParameter)
995
+ returns (gtUint64)
996
+ {
997
+ return MpcCore.shr(a, b);
998
+ }
999
+
888
1000
  function eq(
889
1001
  gtUint64 a,
890
1002
  gtUint64 b,
@@ -0,0 +1,126 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract ShiftTestsContract {
7
+
8
+ struct AllGTCastingValues {
9
+ gtUint8 a8_s;
10
+ gtUint8 b8_s;
11
+ gtUint16 a16_s;
12
+ gtUint16 b16_s;
13
+ gtUint32 a32_s;
14
+ gtUint32 b32_s;
15
+ gtUint64 a64_s;
16
+ gtUint64 b64_s;
17
+ }
18
+
19
+ struct Check16 {
20
+ gtUint16 res16_16;
21
+ gtUint16 res8_16;
22
+ gtUint16 res16_8;
23
+ }
24
+
25
+ struct Check32 {
26
+ gtUint32 res32_32;
27
+ gtUint32 res8_32;
28
+ gtUint32 res32_8;
29
+ gtUint32 res16_32;
30
+ gtUint32 res32_16;
31
+ }
32
+
33
+ struct Check64 {
34
+ gtUint64 res64_64;
35
+ gtUint64 res8_64;
36
+ gtUint64 res64_8;
37
+ gtUint64 res16_64;
38
+ gtUint64 res64_16;
39
+ gtUint64 res32_64;
40
+ gtUint64 res64_32;
41
+ }
42
+
43
+ uint8 result;
44
+ uint8 result8;
45
+ uint16 result16;
46
+ uint32 result32;
47
+ uint64 result64;
48
+
49
+ function getResult() public view returns (uint8) {
50
+ return result;
51
+ }
52
+
53
+ function getAllShiftResults() public view returns (uint8, uint16, uint32, uint64) {
54
+ return (result8, result16, result32, result64);
55
+ }
56
+
57
+ function setPublicValues(AllGTCastingValues memory castingValues, uint8 a, uint8 b) public{
58
+ castingValues.a8_s = MpcCore.setPublic8(a);
59
+ castingValues.b8_s = MpcCore.setPublic8(b);
60
+ castingValues.a16_s = MpcCore.setPublic16(a);
61
+ castingValues.b16_s = MpcCore.setPublic16(b);
62
+ castingValues.a32_s = MpcCore.setPublic32(a);
63
+ castingValues.b32_s = MpcCore.setPublic32(b);
64
+ castingValues.a64_s = MpcCore.setPublic64(a);
65
+ castingValues.b64_s = MpcCore.setPublic64(b);
66
+ }
67
+
68
+ function decryptAndCompareResults16(Check16 memory check16) public returns (uint16){
69
+
70
+ // Calculate the result
71
+ uint16 result = MpcCore.decrypt(check16.res16_16);
72
+
73
+ require(result == MpcCore.decrypt(check16.res8_16) && result == MpcCore.decrypt(check16.res16_8),
74
+ "decryptAndCompareAllResults: Failed to decrypt and compare all results");
75
+
76
+ return result;
77
+ }
78
+
79
+ function decryptAndCompareResults32(Check32 memory check32) public returns (uint32){
80
+
81
+ // Calculate the result
82
+ uint32 result = MpcCore.decrypt(check32.res32_32);
83
+
84
+ require(result == MpcCore.decrypt(check32.res8_32) && result == MpcCore.decrypt(check32.res32_8)
85
+ && result == MpcCore.decrypt(check32.res32_16) && result == MpcCore.decrypt(check32.res16_32),
86
+ "decryptAndCompareAllResults: Failed to decrypt and compare all results");
87
+
88
+ return result;
89
+ }
90
+
91
+ function decryptAndCompareResults64(Check64 memory check64) public returns (uint64){
92
+
93
+ // Calculate the result
94
+ uint64 result = MpcCore.decrypt(check64.res64_64);
95
+
96
+ require(result == MpcCore.decrypt(check64.res8_64) && result == MpcCore.decrypt(check64.res64_8)
97
+ && result == MpcCore.decrypt(check64.res64_16) && result == MpcCore.decrypt(check64.res16_64)
98
+ && result == MpcCore.decrypt(check64.res64_32) && result == MpcCore.decrypt(check64.res32_64),
99
+ "decryptAndCompareAllResults: Failed to decrypt and compare all results");
100
+
101
+ return result;
102
+ }
103
+
104
+ function shlTest(uint8 a, uint8 b) public returns (uint8, uint16, uint32, uint64) {
105
+ AllGTCastingValues memory castingValues;
106
+ setPublicValues(castingValues, a, b);
107
+
108
+ result8 = MpcCore.decrypt(MpcCore.shl(castingValues.a8_s, b));
109
+ result16 = MpcCore.decrypt(MpcCore.shl(castingValues.a16_s, b));
110
+ result32 = MpcCore.decrypt(MpcCore.shl(castingValues.a32_s, b));
111
+ result64 = MpcCore.decrypt(MpcCore.shl(castingValues.a64_s, b));
112
+ return (result8, result16, result32, result64);
113
+ }
114
+
115
+ function shrTest(uint8 a, uint8 b) public returns (uint8) {
116
+ AllGTCastingValues memory castingValues;
117
+ setPublicValues(castingValues, a, b);
118
+
119
+ result = MpcCore.decrypt(MpcCore.shr(castingValues.a8_s, b));
120
+ require(result == MpcCore.decrypt(MpcCore.shr(castingValues.a16_s, b)) && result == MpcCore.decrypt(MpcCore.shr(castingValues.a32_s, b))
121
+ && result == MpcCore.decrypt(MpcCore.shr(castingValues.a64_s, b)),
122
+ "shrTest failed");
123
+ return result;
124
+ }
125
+
126
+ }
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../utils/mpc/MpcCore.sol";
6
+
7
+ /**
8
+ * @dev ERC-721 token with storage based token URI management.
9
+ */
10
+ interface IPrivateERC721URIStorage {
11
+ /**
12
+ * @dev Returns the encrypted Uniform Resource Identifier (URI) for `tokenId` token.
13
+ */
14
+ function tokenURI(uint256 tokenId) external view returns (ctString memory);
15
+ }
@@ -47,6 +47,32 @@ abstract contract PrivateERC721URIStorage is IERC4906, PrivateERC721 {
47
47
  _setTokenURI(to, tokenId, gtTokenURI, true);
48
48
  }
49
49
 
50
+ /**
51
+ * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
52
+ *
53
+ */
54
+ function _setTokenURI(
55
+ address to,
56
+ uint256 tokenId,
57
+ ctString memory ctTokenURI
58
+ ) internal virtual {
59
+ gtString memory gtTokenURI = MpcCore.onBoard(ctTokenURI);
60
+
61
+ _setTokenURI(to, tokenId, gtTokenURI, true);
62
+ }
63
+
64
+ /**
65
+ * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
66
+ *
67
+ */
68
+ function _setTokenURI(
69
+ address to,
70
+ uint256 tokenId,
71
+ gtString memory gtTokenURI
72
+ ) internal virtual {
73
+ _setTokenURI(to, tokenId, gtTokenURI, true);
74
+ }
75
+
50
76
  /**
51
77
  * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
52
78
  *
@@ -61,7 +87,7 @@ abstract contract PrivateERC721URIStorage is IERC4906, PrivateERC721 {
61
87
  revert ERC721URIStorageNonMintedToken(tokenId);
62
88
  }
63
89
 
64
- utString memory utTokenURI = MpcCore.offBoardCombined(gtTokenURI, to);
90
+ utString memory utTokenURI = MpcCore.offBoardCombined(gtTokenURI, to);
65
91
 
66
92
  if (updateCiphertext) {
67
93
  _tokenURIs[tokenId] = utTokenURI;
@@ -1553,6 +1553,16 @@ library MpcCore {
1553
1553
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
1554
1554
  }
1555
1555
 
1556
+ function shl(gtUint8 a, uint8 b) internal returns (gtUint8) {
1557
+ return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1558
+ Shl(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
1559
+ }
1560
+
1561
+ function shr(gtUint8 a, uint8 b) internal returns (gtUint8) {
1562
+ return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1563
+ Shr(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
1564
+ }
1565
+
1556
1566
  function eq(gtUint8 a, uint8 b) internal returns (gtBool) {
1557
1567
  return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1558
1568
  Eq(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
@@ -1661,6 +1671,16 @@ library MpcCore {
1661
1671
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
1662
1672
  }
1663
1673
 
1674
+ function shl(gtUint16 a, uint16 b) internal returns (gtUint16) {
1675
+ return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1676
+ Shl(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
1677
+ }
1678
+
1679
+ function shr(gtUint16 a, uint16 b) internal returns (gtUint16) {
1680
+ return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1681
+ Shr(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
1682
+ }
1683
+
1664
1684
  function eq(gtUint16 a, uint16 b) internal returns (gtBool) {
1665
1685
  return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1666
1686
  Eq(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
@@ -1769,6 +1789,16 @@ library MpcCore {
1769
1789
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
1770
1790
  }
1771
1791
 
1792
+ function shl(gtUint32 a, uint32 b) internal returns (gtUint32) {
1793
+ return gtUint32.wrap(ExtendedOperations(MPC_PRECOMPILE).
1794
+ Shl(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
1795
+ }
1796
+
1797
+ function shr(gtUint32 a, uint32 b) internal returns (gtUint32) {
1798
+ return gtUint32.wrap(ExtendedOperations(MPC_PRECOMPILE).
1799
+ Shr(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
1800
+ }
1801
+
1772
1802
  function eq(gtUint32 a, uint32 b) internal returns (gtBool) {
1773
1803
  return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1774
1804
  Eq(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
@@ -1878,6 +1908,16 @@ library MpcCore {
1878
1908
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
1879
1909
  }
1880
1910
 
1911
+ function shl(gtUint64 a, uint64 b) internal returns (gtUint64) {
1912
+ return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1913
+ Shl(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
1914
+ }
1915
+
1916
+ function shr(gtUint64 a, uint64 b) internal returns (gtUint64) {
1917
+ return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1918
+ Shr(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
1919
+ }
1920
+
1881
1921
  function eq(gtUint64 a, uint64 b) internal returns (gtBool) {
1882
1922
  return gtBool.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1883
1923
  Eq(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
@@ -22,6 +22,8 @@ interface ExtendedOperations {
22
22
  function And(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
23
23
  function Or(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
24
24
  function Xor(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
25
+ function Shl(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
26
+ function Shr(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
25
27
  function Eq(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
26
28
  function Ne(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
27
29
  function Ge(bytes3 metaData, uint256 lhs, uint256 rhs) external returns (uint256 result);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coti-io/coti-contracts",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "A library for smart contract development on the COTI network.",
5
5
  "author": "COTI Development",
6
6
  "repository": {
@@ -24,9 +24,9 @@ describe("Account Onboard", function () {
24
24
  })
25
25
 
26
26
  it('Should successfully onboard the account', async function () {
27
- const { owner } = deployment
27
+ const { owner, contractAddress } = deployment
28
28
 
29
- await owner.generateOrRecoverAes()
29
+ await owner.generateOrRecoverAes(contractAddress)
30
30
 
31
31
  expect(owner.getUserOnboardInfo()?.aesKey).to.not.equal('')
32
32
  })
@@ -14,7 +14,7 @@ export async function setupAccounts() {
14
14
  setEnvValue("PUBLIC_KEYS", `${key1.address},${key2.address}`)
15
15
  setEnvValue("SIGNING_KEYS", `${key1.privateKey},${key2.privateKey}`)
16
16
 
17
- throw new Error(`Created new random accounts ${key1.address} and ${key2.address}. Please use faucet to fund it.`)
17
+ throw new Error(`Created new random accounts ${key1.address} and ${key2.address}. Please use faucet to fund them.`)
18
18
  }
19
19
 
20
20
  const wallets = pks.map((pk) => new Wallet(pk, provider))
@@ -39,7 +39,7 @@ export async function setupAccounts() {
39
39
 
40
40
  let accounts: Wallet[] = []
41
41
  if (userKeys.length !== wallets.length) {
42
- await (await wallets[0].sendTransaction({ to: wallets[1].address, value: parseEther("0.1") })).wait()
42
+ await (await wallets[0].sendTransaction({ to: wallets[1].address, value: parseEther("1.0") })).wait()
43
43
 
44
44
  accounts = await Promise.all(wallets.map(async (account, i) => await toAccount(account)))
45
45
  setEnvValue("USER_KEYS", accounts.map((a) => a.getUserOnboardInfo()?.aesKey).join(","))
@@ -113,4 +113,12 @@ describe("Precompile", function () {
113
113
  bit ? bool_b : bool_a,
114
114
  bool_a
115
115
  )
116
+ buildTest(
117
+ "ShiftTestsContract",
118
+ "shlTest",
119
+ "getAllShiftResults",
120
+ [a, shift],
121
+ ...[2, 4, 8, 16].map((x) => BigInt(a << shift) & BigInt(`0x${"f".repeat(x)}`))
122
+ )
123
+ buildTest("ShiftTestsContract", "shrTest", "getResult", params, a >> b)
116
124
  })
@@ -1,6 +1,4 @@
1
1
  /* Autogenerated file. Do not edit manually. */
2
2
  /* tslint:disable */
3
3
  /* eslint-disable */
4
- import type * as draftIerc6093Sol from "./draft-IERC6093.sol";
5
- export type { draftIerc6093Sol };
6
4
  export type { IERC4906 } from "./IERC4906";
@@ -0,0 +1,91 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type {
5
+ BaseContract,
6
+ BytesLike,
7
+ FunctionFragment,
8
+ Result,
9
+ Interface,
10
+ ContractRunner,
11
+ ContractMethod,
12
+ Listener,
13
+ } from "ethers";
14
+ import type {
15
+ TypedContractEvent,
16
+ TypedDeferredTopicFilter,
17
+ TypedEventLog,
18
+ TypedListener,
19
+ TypedContractMethod,
20
+ } from "../common";
21
+
22
+ export interface GasTestInterface extends Interface {
23
+ getFunction(nameOrSignature: "test1" | "test2"): FunctionFragment;
24
+
25
+ encodeFunctionData(functionFragment: "test1", values?: undefined): string;
26
+ encodeFunctionData(functionFragment: "test2", values?: undefined): string;
27
+
28
+ decodeFunctionResult(functionFragment: "test1", data: BytesLike): Result;
29
+ decodeFunctionResult(functionFragment: "test2", data: BytesLike): Result;
30
+ }
31
+
32
+ export interface GasTest extends BaseContract {
33
+ connect(runner?: ContractRunner | null): GasTest;
34
+ waitForDeployment(): Promise<this>;
35
+
36
+ interface: GasTestInterface;
37
+
38
+ queryFilter<TCEvent extends TypedContractEvent>(
39
+ event: TCEvent,
40
+ fromBlockOrBlockhash?: string | number | undefined,
41
+ toBlock?: string | number | undefined
42
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
43
+ queryFilter<TCEvent extends TypedContractEvent>(
44
+ filter: TypedDeferredTopicFilter<TCEvent>,
45
+ fromBlockOrBlockhash?: string | number | undefined,
46
+ toBlock?: string | number | undefined
47
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
48
+
49
+ on<TCEvent extends TypedContractEvent>(
50
+ event: TCEvent,
51
+ listener: TypedListener<TCEvent>
52
+ ): Promise<this>;
53
+ on<TCEvent extends TypedContractEvent>(
54
+ filter: TypedDeferredTopicFilter<TCEvent>,
55
+ listener: TypedListener<TCEvent>
56
+ ): Promise<this>;
57
+
58
+ once<TCEvent extends TypedContractEvent>(
59
+ event: TCEvent,
60
+ listener: TypedListener<TCEvent>
61
+ ): Promise<this>;
62
+ once<TCEvent extends TypedContractEvent>(
63
+ filter: TypedDeferredTopicFilter<TCEvent>,
64
+ listener: TypedListener<TCEvent>
65
+ ): Promise<this>;
66
+
67
+ listeners<TCEvent extends TypedContractEvent>(
68
+ event: TCEvent
69
+ ): Promise<Array<TypedListener<TCEvent>>>;
70
+ listeners(eventName?: string): Promise<Array<Listener>>;
71
+ removeAllListeners<TCEvent extends TypedContractEvent>(
72
+ event?: TCEvent
73
+ ): Promise<this>;
74
+
75
+ test1: TypedContractMethod<[], [void], "nonpayable">;
76
+
77
+ test2: TypedContractMethod<[], [void], "nonpayable">;
78
+
79
+ getFunction<T extends ContractMethod = ContractMethod>(
80
+ key: string | FunctionFragment
81
+ ): T;
82
+
83
+ getFunction(
84
+ nameOrSignature: "test1"
85
+ ): TypedContractMethod<[], [void], "nonpayable">;
86
+ getFunction(
87
+ nameOrSignature: "test2"
88
+ ): TypedContractMethod<[], [void], "nonpayable">;
89
+
90
+ filters: {};
91
+ }
@@ -9,6 +9,7 @@ export type { MinMaxTestsContract } from "./MinMaxTestsContract";
9
9
  export type { Miscellaneous1TestsContract } from "./Miscellaneous1TestsContract";
10
10
  export type { MiscellaneousTestsContract } from "./MiscellaneousTestsContract";
11
11
  export type { OffboardToUserKeyTestContract } from "./OffboardToUserKeyTestContract";
12
+ export type { ShiftTestsContract } from "./ShiftTestsContract";
12
13
  export type { StringTestsContract } from "./StringTestsContract";
13
14
  export type { TransferScalarTestsContract } from "./TransferScalarTestsContract";
14
15
  export type { TransferTestsContract } from "./TransferTestsContract";
@@ -0,0 +1,100 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type {
5
+ BaseContract,
6
+ BigNumberish,
7
+ BytesLike,
8
+ FunctionFragment,
9
+ Result,
10
+ Interface,
11
+ ContractRunner,
12
+ ContractMethod,
13
+ Listener,
14
+ } from "ethers";
15
+ import type {
16
+ TypedContractEvent,
17
+ TypedDeferredTopicFilter,
18
+ TypedEventLog,
19
+ TypedListener,
20
+ TypedContractMethod,
21
+ } from "../../../../common";
22
+
23
+ export type CtStringStruct = { value: BigNumberish[] };
24
+
25
+ export type CtStringStructOutput = [value: bigint[]] & { value: bigint[] };
26
+
27
+ export interface IPrivateERC721URIStorageInterface extends Interface {
28
+ getFunction(nameOrSignature: "tokenURI"): FunctionFragment;
29
+
30
+ encodeFunctionData(
31
+ functionFragment: "tokenURI",
32
+ values: [BigNumberish]
33
+ ): string;
34
+
35
+ decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result;
36
+ }
37
+
38
+ export interface IPrivateERC721URIStorage extends BaseContract {
39
+ connect(runner?: ContractRunner | null): IPrivateERC721URIStorage;
40
+ waitForDeployment(): Promise<this>;
41
+
42
+ interface: IPrivateERC721URIStorageInterface;
43
+
44
+ queryFilter<TCEvent extends TypedContractEvent>(
45
+ event: TCEvent,
46
+ fromBlockOrBlockhash?: string | number | undefined,
47
+ toBlock?: string | number | undefined
48
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
49
+ queryFilter<TCEvent extends TypedContractEvent>(
50
+ filter: TypedDeferredTopicFilter<TCEvent>,
51
+ fromBlockOrBlockhash?: string | number | undefined,
52
+ toBlock?: string | number | undefined
53
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
54
+
55
+ on<TCEvent extends TypedContractEvent>(
56
+ event: TCEvent,
57
+ listener: TypedListener<TCEvent>
58
+ ): Promise<this>;
59
+ on<TCEvent extends TypedContractEvent>(
60
+ filter: TypedDeferredTopicFilter<TCEvent>,
61
+ listener: TypedListener<TCEvent>
62
+ ): Promise<this>;
63
+
64
+ once<TCEvent extends TypedContractEvent>(
65
+ event: TCEvent,
66
+ listener: TypedListener<TCEvent>
67
+ ): Promise<this>;
68
+ once<TCEvent extends TypedContractEvent>(
69
+ filter: TypedDeferredTopicFilter<TCEvent>,
70
+ listener: TypedListener<TCEvent>
71
+ ): Promise<this>;
72
+
73
+ listeners<TCEvent extends TypedContractEvent>(
74
+ event: TCEvent
75
+ ): Promise<Array<TypedListener<TCEvent>>>;
76
+ listeners(eventName?: string): Promise<Array<Listener>>;
77
+ removeAllListeners<TCEvent extends TypedContractEvent>(
78
+ event?: TCEvent
79
+ ): Promise<this>;
80
+
81
+ tokenURI: TypedContractMethod<
82
+ [tokenId: BigNumberish],
83
+ [CtStringStructOutput],
84
+ "view"
85
+ >;
86
+
87
+ getFunction<T extends ContractMethod = ContractMethod>(
88
+ key: string | FunctionFragment
89
+ ): T;
90
+
91
+ getFunction(
92
+ nameOrSignature: "tokenURI"
93
+ ): TypedContractMethod<
94
+ [tokenId: BigNumberish],
95
+ [CtStringStructOutput],
96
+ "view"
97
+ >;
98
+
99
+ filters: {};
100
+ }
@@ -1,4 +1,5 @@
1
1
  /* Autogenerated file. Do not edit manually. */
2
2
  /* tslint:disable */
3
3
  /* eslint-disable */
4
+ export type { IPrivateERC721URIStorage } from "./IPrivateERC721URIStorage";
4
5
  export type { PrivateERC721URIStorage } from "./PrivateERC721URIStorage";