@coti-io/coti-contracts 0.1.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 (180) hide show
  1. package/.github/workflows/npm-publish.yml +52 -0
  2. package/CODE_OF_CONDUCT.md +44 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +201 -0
  5. package/README.md +48 -0
  6. package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +480 -0
  7. package/contracts/access/DataPrivacyFramework/README.md +68 -0
  8. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1139 -0
  9. package/contracts/mocks/README.md +5 -0
  10. package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +9 -0
  11. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +17 -0
  12. package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +34 -0
  13. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +431 -0
  14. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +361 -0
  15. package/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol +307 -0
  16. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +307 -0
  17. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +297 -0
  18. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +185 -0
  19. package/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.sol +448 -0
  20. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol +81 -0
  21. package/contracts/mocks/utils/mpc/README.md +486 -0
  22. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +311 -0
  23. package/contracts/mocks/utils/mpc/StringTestsContract.sol +59 -0
  24. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +271 -0
  25. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +715 -0
  26. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +25 -0
  27. package/contracts/onboard/AccountOnboard.sol +21 -0
  28. package/contracts/onboard/README.md +65 -0
  29. package/contracts/package.json +11 -0
  30. package/contracts/token/PrivateERC20/IPrivateERC20.sol +142 -0
  31. package/contracts/token/PrivateERC20/PrivateERC20.sol +478 -0
  32. package/contracts/token/PrivateERC20/README.md +104 -0
  33. package/contracts/token/PrivateERC721/PrivateERC721.sol +458 -0
  34. package/contracts/token/PrivateERC721/README.md +282 -0
  35. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +87 -0
  36. package/contracts/utils/mpc/MpcCore.sol +3215 -0
  37. package/contracts/utils/mpc/MpcInterface.sol +41 -0
  38. package/contracts/utils/mpc/README.md +82 -0
  39. package/hardhat.config.ts +18 -0
  40. package/package.json +14 -0
  41. package/test/access/DataPrivacyFramework/DataPrivacyFramework.test.ts +780 -0
  42. package/test/onboard/AccountOnboard.test.ts +45 -0
  43. package/test/token/PrivateERC20/PrivateERC20.test.ts +546 -0
  44. package/test/token/PrivateERC721/PrivateERC721.test.ts +223 -0
  45. package/test/utils/accounts.ts +55 -0
  46. package/test/utils/mpc/Precompile.test.ts +113 -0
  47. package/test/utils/mpc/String.test.ts +227 -0
  48. package/tsconfig.json +11 -0
  49. package/typechain-types/@openzeppelin/contracts/index.ts +9 -0
  50. package/typechain-types/@openzeppelin/contracts/interfaces/IERC4906.ts +462 -0
  51. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
  52. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
  53. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
  54. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  55. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +6 -0
  56. package/typechain-types/@openzeppelin/contracts/token/ERC721/IERC721.ts +393 -0
  57. package/typechain-types/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts +110 -0
  58. package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +5 -0
  59. package/typechain-types/@openzeppelin/contracts/token/index.ts +5 -0
  60. package/typechain-types/@openzeppelin/contracts/utils/index.ts +5 -0
  61. package/typechain-types/@openzeppelin/contracts/utils/introspection/ERC165.ts +94 -0
  62. package/typechain-types/@openzeppelin/contracts/utils/introspection/IERC165.ts +94 -0
  63. package/typechain-types/@openzeppelin/contracts/utils/introspection/index.ts +5 -0
  64. package/typechain-types/@openzeppelin/index.ts +5 -0
  65. package/typechain-types/common.ts +131 -0
  66. package/typechain-types/contracts/access/DataPrivacyFramework/DataPrivacyFramework.ts +598 -0
  67. package/typechain-types/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.ts +598 -0
  68. package/typechain-types/contracts/access/DataPrivacyFramework/extensions/index.ts +4 -0
  69. package/typechain-types/contracts/access/DataPrivacyFramework/index.ts +6 -0
  70. package/typechain-types/contracts/access/index.ts +5 -0
  71. package/typechain-types/contracts/index.ts +13 -0
  72. package/typechain-types/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.ts +598 -0
  73. package/typechain-types/contracts/mocks/access/DataPrivacyFramework/index.ts +4 -0
  74. package/typechain-types/contracts/mocks/access/index.ts +5 -0
  75. package/typechain-types/contracts/mocks/index.ts +11 -0
  76. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +543 -0
  77. package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +4 -0
  78. package/typechain-types/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.ts +576 -0
  79. package/typechain-types/contracts/mocks/token/PrivateERC721/index.ts +4 -0
  80. package/typechain-types/contracts/mocks/token/index.ts +7 -0
  81. package/typechain-types/contracts/mocks/utils/index.ts +5 -0
  82. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.ts +354 -0
  83. package/typechain-types/contracts/mocks/utils/mpc/BitwiseTestsContract.ts +340 -0
  84. package/typechain-types/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract.ts +340 -0
  85. package/typechain-types/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/index.ts +4 -0
  86. package/typechain-types/contracts/mocks/utils/mpc/Comparison2TestsContract.ts +340 -0
  87. package/typechain-types/contracts/mocks/utils/mpc/MinMaxTestsContract.ts +321 -0
  88. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.ts +199 -0
  89. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.ts +384 -0
  90. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +218 -0
  91. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/index.ts +4 -0
  92. package/typechain-types/contracts/mocks/utils/mpc/ShiftTestsContract.ts +339 -0
  93. package/typechain-types/contracts/mocks/utils/mpc/StringTestsContract.ts +211 -0
  94. package/typechain-types/contracts/mocks/utils/mpc/TransferScalarTestsContract.ts +266 -0
  95. package/typechain-types/contracts/mocks/utils/mpc/TransferTestsContract.ts +288 -0
  96. package/typechain-types/contracts/mocks/utils/mpc/index.ts +17 -0
  97. package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +173 -0
  98. package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/index.ts +4 -0
  99. package/typechain-types/contracts/mocks/wallet/index.ts +5 -0
  100. package/typechain-types/contracts/onboard/AccountOnboard.ts +135 -0
  101. package/typechain-types/contracts/onboard/index.ts +4 -0
  102. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +437 -0
  103. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +505 -0
  104. package/typechain-types/contracts/token/PrivateERC20/index.ts +5 -0
  105. package/typechain-types/contracts/token/PrivateERC721/PrivateERC721.ts +409 -0
  106. package/typechain-types/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.ts +501 -0
  107. package/typechain-types/contracts/token/PrivateERC721/extensions/index.ts +4 -0
  108. package/typechain-types/contracts/token/PrivateERC721/index.ts +6 -0
  109. package/typechain-types/contracts/token/index.ts +7 -0
  110. package/typechain-types/contracts/utils/index.ts +5 -0
  111. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +698 -0
  112. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/index.ts +4 -0
  113. package/typechain-types/contracts/utils/mpc/index.ts +5 -0
  114. package/typechain-types/factories/@openzeppelin/contracts/index.ts +6 -0
  115. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC4906__factory.ts +339 -0
  116. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
  117. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
  118. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
  119. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  120. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +5 -0
  121. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts +59 -0
  122. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/IERC721__factory.ts +307 -0
  123. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +5 -0
  124. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +4 -0
  125. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +4 -0
  126. package/typechain-types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts +41 -0
  127. package/typechain-types/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts +41 -0
  128. package/typechain-types/factories/@openzeppelin/contracts/utils/introspection/index.ts +5 -0
  129. package/typechain-types/factories/@openzeppelin/index.ts +4 -0
  130. package/typechain-types/factories/contracts/access/DataPrivacyFramework/DataPrivacyFramework__factory.ts +621 -0
  131. package/typechain-types/factories/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc__factory.ts +621 -0
  132. package/typechain-types/factories/contracts/access/DataPrivacyFramework/extensions/index.ts +4 -0
  133. package/typechain-types/factories/contracts/access/DataPrivacyFramework/index.ts +5 -0
  134. package/typechain-types/factories/contracts/access/index.ts +4 -0
  135. package/typechain-types/factories/contracts/index.ts +8 -0
  136. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +670 -0
  137. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/index.ts +4 -0
  138. package/typechain-types/factories/contracts/mocks/access/index.ts +4 -0
  139. package/typechain-types/factories/contracts/mocks/index.ts +7 -0
  140. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +615 -0
  141. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +4 -0
  142. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +630 -0
  143. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/index.ts +4 -0
  144. package/typechain-types/factories/contracts/mocks/token/index.ts +5 -0
  145. package/typechain-types/factories/contracts/mocks/utils/index.ts +4 -0
  146. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +374 -0
  147. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +361 -0
  148. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +361 -0
  149. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/index.ts +4 -0
  150. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +361 -0
  151. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +337 -0
  152. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +236 -0
  153. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +432 -0
  154. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +245 -0
  155. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/index.ts +4 -0
  156. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +374 -0
  157. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +264 -0
  158. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +360 -0
  159. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +441 -0
  160. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +15 -0
  161. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +194 -0
  162. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/index.ts +4 -0
  163. package/typechain-types/factories/contracts/mocks/wallet/index.ts +4 -0
  164. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +104 -0
  165. package/typechain-types/factories/contracts/onboard/index.ts +4 -0
  166. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +406 -0
  167. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +532 -0
  168. package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +5 -0
  169. package/typechain-types/factories/contracts/token/PrivateERC721/PrivateERC721__factory.ts +439 -0
  170. package/typechain-types/factories/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage__factory.ts +512 -0
  171. package/typechain-types/factories/contracts/token/PrivateERC721/extensions/index.ts +4 -0
  172. package/typechain-types/factories/contracts/token/PrivateERC721/index.ts +5 -0
  173. package/typechain-types/factories/contracts/token/index.ts +5 -0
  174. package/typechain-types/factories/contracts/utils/index.ts +4 -0
  175. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +919 -0
  176. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/index.ts +4 -0
  177. package/typechain-types/factories/contracts/utils/mpc/index.ts +4 -0
  178. package/typechain-types/factories/index.ts +5 -0
  179. package/typechain-types/hardhat.d.ts +621 -0
  180. package/typechain-types/index.ts +72 -0
@@ -0,0 +1,715 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../utils/mpc/MpcCore.sol";
6
+
7
+ contract TransferTestsContract {
8
+
9
+ struct AllGTCastingValues {
10
+ gtUint8 a8_s;
11
+ gtUint8 b8_s;
12
+ gtUint16 a16_s;
13
+ gtUint16 b16_s;
14
+ gtUint32 a32_s;
15
+ gtUint32 b32_s;
16
+ gtUint64 a64_s;
17
+ gtUint64 b64_s;
18
+ }
19
+
20
+ struct AllAmountValues {
21
+ gtUint8 amount8_s;
22
+ gtUint16 amount16_s;
23
+ gtUint32 amount32_s;
24
+ gtUint64 amount64_s;
25
+ uint8 amount;
26
+ }
27
+
28
+ uint8 newA;
29
+ uint8 newB;
30
+ bool result;
31
+
32
+ function getResults() public view returns (uint8, uint8, bool) {
33
+ return (newA, newB, result);
34
+ }
35
+
36
+ function computeAndChekTransfer16(
37
+ AllGTCastingValues memory allGTCastingValues,
38
+ AllAmountValues memory allAmountValues,
39
+ uint8 new_a,
40
+ uint8 new_b,
41
+ bool res
42
+ ) public {
43
+ (gtUint16 newA_s, gtUint16 newB_s, gtBool res_s) = MpcCore.transfer(
44
+ allGTCastingValues.a16_s,
45
+ allGTCastingValues.b16_s,
46
+ allAmountValues.amount8_s
47
+ );
48
+ require(
49
+ new_a == MpcCore.decrypt(newA_s) &&
50
+ new_b == MpcCore.decrypt(newB_s) &&
51
+ res == MpcCore.decrypt(res_s),
52
+ "transferTest: cast 16 failed"
53
+ );
54
+
55
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
56
+ allGTCastingValues.a8_s,
57
+ allGTCastingValues.b16_s,
58
+ allAmountValues.amount8_s
59
+ );
60
+ require(
61
+ new_a == MpcCore.decrypt(newA_s) &&
62
+ new_b == MpcCore.decrypt(newB_s) &&
63
+ res == MpcCore.decrypt(res_s),
64
+ "transferTest: cast 16 failed"
65
+ );
66
+
67
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
68
+ allGTCastingValues.a16_s,
69
+ allGTCastingValues.b8_s,
70
+ allAmountValues.amount8_s
71
+ );
72
+ require(
73
+ new_a == MpcCore.decrypt(newA_s) &&
74
+ new_b == MpcCore.decrypt(newB_s) &&
75
+ res == MpcCore.decrypt(res_s),
76
+ "transferTest: cast 16 failed"
77
+ );
78
+
79
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
80
+ allGTCastingValues.a16_s,
81
+ allGTCastingValues.b16_s,
82
+ allAmountValues.amount16_s
83
+ );
84
+ require(
85
+ new_a == MpcCore.decrypt(newA_s) &&
86
+ new_b == MpcCore.decrypt(newB_s) &&
87
+ res == MpcCore.decrypt(res_s),
88
+ "transferTest: cast 16 failed"
89
+ );
90
+
91
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
92
+ allGTCastingValues.a8_s,
93
+ allGTCastingValues.b16_s,
94
+ allAmountValues.amount16_s
95
+ );
96
+ require(
97
+ new_a == MpcCore.decrypt(newA_s) &&
98
+ new_b == MpcCore.decrypt(newB_s) &&
99
+ res == MpcCore.decrypt(res_s),
100
+ "transferTest: cast 16 failed"
101
+ );
102
+
103
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
104
+ allGTCastingValues.a16_s,
105
+ allGTCastingValues.b8_s,
106
+ allAmountValues.amount16_s
107
+ );
108
+ require(
109
+ new_a == MpcCore.decrypt(newA_s) &&
110
+ new_b == MpcCore.decrypt(newB_s) &&
111
+ res == MpcCore.decrypt(res_s),
112
+ "transferTest: cast 16 failed"
113
+ );
114
+ }
115
+
116
+ function computeAndChekTransfer32(
117
+ AllGTCastingValues memory allGTCastingValues,
118
+ AllAmountValues memory allAmountValues,
119
+ uint8 new_a,
120
+ uint8 new_b,
121
+ bool res
122
+ ) public {
123
+ // Check all options for casting to 32 while amount is 32
124
+ (gtUint32 newA_s, gtUint32 newB_s, gtBool res_s) = MpcCore.transfer(
125
+ allGTCastingValues.a32_s,
126
+ allGTCastingValues.b32_s,
127
+ allAmountValues.amount32_s
128
+ );
129
+ require(
130
+ new_a == MpcCore.decrypt(newA_s) &&
131
+ new_b == MpcCore.decrypt(newB_s) &&
132
+ res == MpcCore.decrypt(res_s),
133
+ "transferTest: cast 32 failed"
134
+ );
135
+
136
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
137
+ allGTCastingValues.a8_s,
138
+ allGTCastingValues.b32_s,
139
+ allAmountValues.amount32_s
140
+ );
141
+ require(
142
+ new_a == MpcCore.decrypt(newA_s) &&
143
+ new_b == MpcCore.decrypt(newB_s) &&
144
+ res == MpcCore.decrypt(res_s),
145
+ "transferTest: cast 32 failed"
146
+ );
147
+
148
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
149
+ allGTCastingValues.a32_s,
150
+ allGTCastingValues.b8_s,
151
+ allAmountValues.amount32_s
152
+ );
153
+ require(
154
+ new_a == MpcCore.decrypt(newA_s) &&
155
+ new_b == MpcCore.decrypt(newB_s) &&
156
+ res == MpcCore.decrypt(res_s),
157
+ "transferTest: cast 32 failed"
158
+ );
159
+
160
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
161
+ allGTCastingValues.a16_s,
162
+ allGTCastingValues.b32_s,
163
+ allAmountValues.amount32_s
164
+ );
165
+ require(
166
+ new_a == MpcCore.decrypt(newA_s) &&
167
+ new_b == MpcCore.decrypt(newB_s) &&
168
+ res == MpcCore.decrypt(res_s),
169
+ "transferTest: cast 32 failed"
170
+ );
171
+
172
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
173
+ allGTCastingValues.a32_s,
174
+ allGTCastingValues.b16_s,
175
+ allAmountValues.amount32_s
176
+ );
177
+ require(
178
+ new_a == MpcCore.decrypt(newA_s) &&
179
+ new_b == MpcCore.decrypt(newB_s) &&
180
+ res == MpcCore.decrypt(res_s),
181
+ "transferTest: cast 32 failed"
182
+ );
183
+
184
+ // Check all options for casting to 32 while amount is 8
185
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
186
+ allGTCastingValues.a32_s,
187
+ allGTCastingValues.b32_s,
188
+ allAmountValues.amount8_s
189
+ );
190
+ require(
191
+ new_a == MpcCore.decrypt(newA_s) &&
192
+ new_b == MpcCore.decrypt(newB_s) &&
193
+ res == MpcCore.decrypt(res_s),
194
+ "transferTest: cast 32 failed"
195
+ );
196
+
197
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
198
+ allGTCastingValues.a8_s,
199
+ allGTCastingValues.b32_s,
200
+ allAmountValues.amount8_s
201
+ );
202
+ require(
203
+ new_a == MpcCore.decrypt(newA_s) &&
204
+ new_b == MpcCore.decrypt(newB_s) &&
205
+ res == MpcCore.decrypt(res_s),
206
+ "transferTest: cast 32 failed"
207
+ );
208
+
209
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
210
+ allGTCastingValues.a32_s,
211
+ allGTCastingValues.b8_s,
212
+ allAmountValues.amount8_s
213
+ );
214
+ require(
215
+ new_a == MpcCore.decrypt(newA_s) &&
216
+ new_b == MpcCore.decrypt(newB_s) &&
217
+ res == MpcCore.decrypt(res_s),
218
+ "transferTest: cast 32 failed"
219
+ );
220
+
221
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
222
+ allGTCastingValues.a16_s,
223
+ allGTCastingValues.b32_s,
224
+ allAmountValues.amount8_s
225
+ );
226
+ require(
227
+ new_a == MpcCore.decrypt(newA_s) &&
228
+ new_b == MpcCore.decrypt(newB_s) &&
229
+ res == MpcCore.decrypt(res_s),
230
+ "transferTest: cast 32 failed"
231
+ );
232
+
233
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
234
+ allGTCastingValues.a32_s,
235
+ allGTCastingValues.b16_s,
236
+ allAmountValues.amount8_s
237
+ );
238
+ require(
239
+ new_a == MpcCore.decrypt(newA_s) &&
240
+ new_b == MpcCore.decrypt(newB_s) &&
241
+ res == MpcCore.decrypt(res_s),
242
+ "transferTest: cast 32 failed"
243
+ );
244
+
245
+ // Check all options for casting to 32 while amount is 16
246
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
247
+ allGTCastingValues.a32_s,
248
+ allGTCastingValues.b32_s,
249
+ allAmountValues.amount16_s
250
+ );
251
+ require(
252
+ new_a == MpcCore.decrypt(newA_s) &&
253
+ new_b == MpcCore.decrypt(newB_s) &&
254
+ res == MpcCore.decrypt(res_s),
255
+ "transferTest: cast 32 failed"
256
+ );
257
+
258
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
259
+ allGTCastingValues.a8_s,
260
+ allGTCastingValues.b32_s,
261
+ allAmountValues.amount16_s
262
+ );
263
+ require(
264
+ new_a == MpcCore.decrypt(newA_s) &&
265
+ new_b == MpcCore.decrypt(newB_s) &&
266
+ res == MpcCore.decrypt(res_s),
267
+ "transferTest: cast 32 failed"
268
+ );
269
+
270
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
271
+ allGTCastingValues.a32_s,
272
+ allGTCastingValues.b8_s,
273
+ allAmountValues.amount16_s
274
+ );
275
+ require(
276
+ new_a == MpcCore.decrypt(newA_s) &&
277
+ new_b == MpcCore.decrypt(newB_s) &&
278
+ res == MpcCore.decrypt(res_s),
279
+ "transferTest: cast 32 failed"
280
+ );
281
+
282
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
283
+ allGTCastingValues.a16_s,
284
+ allGTCastingValues.b32_s,
285
+ allAmountValues.amount16_s
286
+ );
287
+ require(
288
+ new_a == MpcCore.decrypt(newA_s) &&
289
+ new_b == MpcCore.decrypt(newB_s) &&
290
+ res == MpcCore.decrypt(res_s),
291
+ "transferTest: cast 32 failed"
292
+ );
293
+
294
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
295
+ allGTCastingValues.a32_s,
296
+ allGTCastingValues.b16_s,
297
+ allAmountValues.amount16_s
298
+ );
299
+ require(
300
+ new_a == MpcCore.decrypt(newA_s) &&
301
+ new_b == MpcCore.decrypt(newB_s) &&
302
+ res == MpcCore.decrypt(res_s),
303
+ "transferTest: cast 32 failed"
304
+ );
305
+ }
306
+
307
+ function computeAndChekTransfer64(
308
+ AllGTCastingValues memory allGTCastingValues,
309
+ AllAmountValues memory allAmountValues,
310
+ uint8 new_a,
311
+ uint8 new_b,
312
+ bool res
313
+ ) public {
314
+ // Check all options for casting to 64 while amount is 64
315
+ (gtUint64 newA_s, gtUint64 newB_s, gtBool res_s) = MpcCore.transfer(
316
+ allGTCastingValues.a64_s,
317
+ allGTCastingValues.b64_s,
318
+ allAmountValues.amount64_s
319
+ );
320
+ require(
321
+ new_a == MpcCore.decrypt(newA_s) &&
322
+ new_b == MpcCore.decrypt(newB_s) &&
323
+ res == MpcCore.decrypt(res_s),
324
+ "transferTest: cast 64 failed"
325
+ );
326
+
327
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
328
+ allGTCastingValues.a8_s,
329
+ allGTCastingValues.b64_s,
330
+ allAmountValues.amount64_s
331
+ );
332
+ require(
333
+ new_a == MpcCore.decrypt(newA_s) &&
334
+ new_b == MpcCore.decrypt(newB_s) &&
335
+ res == MpcCore.decrypt(res_s),
336
+ "transferTest: cast 64 failed"
337
+ );
338
+
339
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
340
+ allGTCastingValues.a64_s,
341
+ allGTCastingValues.b8_s,
342
+ allAmountValues.amount64_s
343
+ );
344
+ require(
345
+ new_a == MpcCore.decrypt(newA_s) &&
346
+ new_b == MpcCore.decrypt(newB_s) &&
347
+ res == MpcCore.decrypt(res_s),
348
+ "transferTest: cast 64 failed"
349
+ );
350
+
351
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
352
+ allGTCastingValues.a16_s,
353
+ allGTCastingValues.b64_s,
354
+ allAmountValues.amount64_s
355
+ );
356
+ require(
357
+ new_a == MpcCore.decrypt(newA_s) &&
358
+ new_b == MpcCore.decrypt(newB_s) &&
359
+ res == MpcCore.decrypt(res_s),
360
+ "transferTest: cast 64 failed"
361
+ );
362
+
363
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
364
+ allGTCastingValues.a64_s,
365
+ allGTCastingValues.b16_s,
366
+ allAmountValues.amount64_s
367
+ );
368
+ require(
369
+ new_a == MpcCore.decrypt(newA_s) &&
370
+ new_b == MpcCore.decrypt(newB_s) &&
371
+ res == MpcCore.decrypt(res_s),
372
+ "transferTest: cast 64 failed"
373
+ );
374
+
375
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
376
+ allGTCastingValues.a32_s,
377
+ allGTCastingValues.b64_s,
378
+ allAmountValues.amount64_s
379
+ );
380
+ require(
381
+ new_a == MpcCore.decrypt(newA_s) &&
382
+ new_b == MpcCore.decrypt(newB_s) &&
383
+ res == MpcCore.decrypt(res_s),
384
+ "transferTest: cast 64 failed"
385
+ );
386
+
387
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
388
+ allGTCastingValues.a64_s,
389
+ allGTCastingValues.b32_s,
390
+ allAmountValues.amount64_s
391
+ );
392
+ require(
393
+ new_a == MpcCore.decrypt(newA_s) &&
394
+ new_b == MpcCore.decrypt(newB_s) &&
395
+ res == MpcCore.decrypt(res_s),
396
+ "transferTest: cast 64 failed"
397
+ );
398
+
399
+ // Check all options for casting to 64 while amount is 32
400
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
401
+ allGTCastingValues.a64_s,
402
+ allGTCastingValues.b64_s,
403
+ allAmountValues.amount32_s
404
+ );
405
+ require(
406
+ new_a == MpcCore.decrypt(newA_s) &&
407
+ new_b == MpcCore.decrypt(newB_s) &&
408
+ res == MpcCore.decrypt(res_s),
409
+ "transferTest: cast 32 failed"
410
+ );
411
+
412
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
413
+ allGTCastingValues.a8_s,
414
+ allGTCastingValues.b64_s,
415
+ allAmountValues.amount32_s
416
+ );
417
+ require(
418
+ new_a == MpcCore.decrypt(newA_s) &&
419
+ new_b == MpcCore.decrypt(newB_s) &&
420
+ res == MpcCore.decrypt(res_s),
421
+ "transferTest: cast 32 failed"
422
+ );
423
+
424
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
425
+ allGTCastingValues.a64_s,
426
+ allGTCastingValues.b8_s,
427
+ allAmountValues.amount32_s
428
+ );
429
+ require(
430
+ new_a == MpcCore.decrypt(newA_s) &&
431
+ new_b == MpcCore.decrypt(newB_s) &&
432
+ res == MpcCore.decrypt(res_s),
433
+ "transferTest: cast 32 failed"
434
+ );
435
+
436
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
437
+ allGTCastingValues.a16_s,
438
+ allGTCastingValues.b64_s,
439
+ allAmountValues.amount32_s
440
+ );
441
+ require(
442
+ new_a == MpcCore.decrypt(newA_s) &&
443
+ new_b == MpcCore.decrypt(newB_s) &&
444
+ res == MpcCore.decrypt(res_s),
445
+ "transferTest: cast 32 failed"
446
+ );
447
+
448
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
449
+ allGTCastingValues.a64_s,
450
+ allGTCastingValues.b16_s,
451
+ allAmountValues.amount32_s
452
+ );
453
+ require(
454
+ new_a == MpcCore.decrypt(newA_s) &&
455
+ new_b == MpcCore.decrypt(newB_s) &&
456
+ res == MpcCore.decrypt(res_s),
457
+ "transferTest: cast 32 failed"
458
+ );
459
+
460
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
461
+ allGTCastingValues.a32_s,
462
+ allGTCastingValues.b64_s,
463
+ allAmountValues.amount32_s
464
+ );
465
+ require(
466
+ new_a == MpcCore.decrypt(newA_s) &&
467
+ new_b == MpcCore.decrypt(newB_s) &&
468
+ res == MpcCore.decrypt(res_s),
469
+ "transferTest: cast 32 failed"
470
+ );
471
+
472
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
473
+ allGTCastingValues.a64_s,
474
+ allGTCastingValues.b32_s,
475
+ allAmountValues.amount32_s
476
+ );
477
+ require(
478
+ new_a == MpcCore.decrypt(newA_s) &&
479
+ new_b == MpcCore.decrypt(newB_s) &&
480
+ res == MpcCore.decrypt(res_s),
481
+ "transferTest: cast 32 failed"
482
+ );
483
+
484
+ // Check all options for casting to 64 while amount is 8
485
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
486
+ allGTCastingValues.a64_s,
487
+ allGTCastingValues.b64_s,
488
+ allAmountValues.amount8_s
489
+ );
490
+ require(
491
+ new_a == MpcCore.decrypt(newA_s) &&
492
+ new_b == MpcCore.decrypt(newB_s) &&
493
+ res == MpcCore.decrypt(res_s),
494
+ "transferTest: cast 8 failed"
495
+ );
496
+
497
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
498
+ allGTCastingValues.a8_s,
499
+ allGTCastingValues.b64_s,
500
+ allAmountValues.amount8_s
501
+ );
502
+ require(
503
+ new_a == MpcCore.decrypt(newA_s) &&
504
+ new_b == MpcCore.decrypt(newB_s) &&
505
+ res == MpcCore.decrypt(res_s),
506
+ "transferTest: cast 8 failed"
507
+ );
508
+
509
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
510
+ allGTCastingValues.a64_s,
511
+ allGTCastingValues.b8_s,
512
+ allAmountValues.amount8_s
513
+ );
514
+ require(
515
+ new_a == MpcCore.decrypt(newA_s) &&
516
+ new_b == MpcCore.decrypt(newB_s) &&
517
+ res == MpcCore.decrypt(res_s),
518
+ "transferTest: cast 8 failed"
519
+ );
520
+
521
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
522
+ allGTCastingValues.a16_s,
523
+ allGTCastingValues.b64_s,
524
+ allAmountValues.amount8_s
525
+ );
526
+ require(
527
+ new_a == MpcCore.decrypt(newA_s) &&
528
+ new_b == MpcCore.decrypt(newB_s) &&
529
+ res == MpcCore.decrypt(res_s),
530
+ "transferTest: cast 8 failed"
531
+ );
532
+
533
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
534
+ allGTCastingValues.a64_s,
535
+ allGTCastingValues.b16_s,
536
+ allAmountValues.amount8_s
537
+ );
538
+ require(
539
+ new_a == MpcCore.decrypt(newA_s) &&
540
+ new_b == MpcCore.decrypt(newB_s) &&
541
+ res == MpcCore.decrypt(res_s),
542
+ "transferTest: cast 8 failed"
543
+ );
544
+
545
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
546
+ allGTCastingValues.a32_s,
547
+ allGTCastingValues.b64_s,
548
+ allAmountValues.amount8_s
549
+ );
550
+ require(
551
+ new_a == MpcCore.decrypt(newA_s) &&
552
+ new_b == MpcCore.decrypt(newB_s) &&
553
+ res == MpcCore.decrypt(res_s),
554
+ "transferTest: cast 8 failed"
555
+ );
556
+
557
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
558
+ allGTCastingValues.a64_s,
559
+ allGTCastingValues.b32_s,
560
+ allAmountValues.amount8_s
561
+ );
562
+ require(
563
+ new_a == MpcCore.decrypt(newA_s) &&
564
+ new_b == MpcCore.decrypt(newB_s) &&
565
+ res == MpcCore.decrypt(res_s),
566
+ "transferTest: cast 8 failed"
567
+ );
568
+
569
+ // Check all options for casting to 64 while amount is 16
570
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
571
+ allGTCastingValues.a64_s,
572
+ allGTCastingValues.b64_s,
573
+ allAmountValues.amount16_s
574
+ );
575
+ require(
576
+ new_a == MpcCore.decrypt(newA_s) &&
577
+ new_b == MpcCore.decrypt(newB_s) &&
578
+ res == MpcCore.decrypt(res_s),
579
+ "transferTest: cast 16 failed"
580
+ );
581
+
582
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
583
+ allGTCastingValues.a8_s,
584
+ allGTCastingValues.b64_s,
585
+ allAmountValues.amount16_s
586
+ );
587
+ require(
588
+ new_a == MpcCore.decrypt(newA_s) &&
589
+ new_b == MpcCore.decrypt(newB_s) &&
590
+ res == MpcCore.decrypt(res_s),
591
+ "transferTest: cast 16 failed"
592
+ );
593
+
594
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
595
+ allGTCastingValues.a64_s,
596
+ allGTCastingValues.b8_s,
597
+ allAmountValues.amount16_s
598
+ );
599
+ require(
600
+ new_a == MpcCore.decrypt(newA_s) &&
601
+ new_b == MpcCore.decrypt(newB_s) &&
602
+ res == MpcCore.decrypt(res_s),
603
+ "transferTest: cast 16 failed"
604
+ );
605
+
606
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
607
+ allGTCastingValues.a16_s,
608
+ allGTCastingValues.b64_s,
609
+ allAmountValues.amount16_s
610
+ );
611
+ require(
612
+ new_a == MpcCore.decrypt(newA_s) &&
613
+ new_b == MpcCore.decrypt(newB_s) &&
614
+ res == MpcCore.decrypt(res_s),
615
+ "transferTest: cast 16 failed"
616
+ );
617
+
618
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
619
+ allGTCastingValues.a64_s,
620
+ allGTCastingValues.b16_s,
621
+ allAmountValues.amount16_s
622
+ );
623
+ require(
624
+ new_a == MpcCore.decrypt(newA_s) &&
625
+ new_b == MpcCore.decrypt(newB_s) &&
626
+ res == MpcCore.decrypt(res_s),
627
+ "transferTest: cast 16 failed"
628
+ );
629
+
630
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
631
+ allGTCastingValues.a32_s,
632
+ allGTCastingValues.b64_s,
633
+ allAmountValues.amount16_s
634
+ );
635
+ require(
636
+ new_a == MpcCore.decrypt(newA_s) &&
637
+ new_b == MpcCore.decrypt(newB_s) &&
638
+ res == MpcCore.decrypt(res_s),
639
+ "transferTest: cast 16 failed"
640
+ );
641
+
642
+ (newA_s, newB_s, res_s) = MpcCore.transfer(
643
+ allGTCastingValues.a64_s,
644
+ allGTCastingValues.b32_s,
645
+ allAmountValues.amount16_s
646
+ );
647
+ require(
648
+ new_a == MpcCore.decrypt(newA_s) &&
649
+ new_b == MpcCore.decrypt(newB_s) &&
650
+ res == MpcCore.decrypt(res_s),
651
+ "transferTest: cast 16 failed"
652
+ );
653
+ }
654
+
655
+ function transferTest(
656
+ uint8 a,
657
+ uint8 b,
658
+ uint8 amount
659
+ ) public returns (uint8, uint8, bool) {
660
+ AllGTCastingValues memory allGTCastingValues;
661
+ AllAmountValues memory allAmountValues;
662
+ allGTCastingValues.a8_s = MpcCore.setPublic8(a);
663
+ allGTCastingValues.b8_s = MpcCore.setPublic8(b);
664
+ allGTCastingValues.a16_s = MpcCore.setPublic16(a);
665
+ allGTCastingValues.b16_s = MpcCore.setPublic16(b);
666
+ allGTCastingValues.a32_s = MpcCore.setPublic32(a);
667
+ allGTCastingValues.b32_s = MpcCore.setPublic32(b);
668
+ allGTCastingValues.a64_s = MpcCore.setPublic64(a);
669
+ allGTCastingValues.b64_s = MpcCore.setPublic64(b);
670
+ allAmountValues.amount8_s = MpcCore.setPublic8(amount);
671
+ allAmountValues.amount16_s = MpcCore.setPublic16(amount);
672
+ allAmountValues.amount32_s = MpcCore.setPublic32(amount);
673
+ allAmountValues.amount64_s = MpcCore.setPublic64(amount);
674
+ allAmountValues.amount = amount;
675
+
676
+ // Calculate the expected result
677
+ (gtUint8 newA_s, gtUint8 newB_s, gtBool res_s) = MpcCore.transfer(
678
+ allGTCastingValues.a8_s,
679
+ allGTCastingValues.b8_s,
680
+ allAmountValues.amount8_s
681
+ );
682
+ newA = MpcCore.decrypt(newA_s);
683
+ newB = MpcCore.decrypt(newB_s);
684
+ result = MpcCore.decrypt(res_s);
685
+
686
+ // Calculate the result with casting to 16
687
+ computeAndChekTransfer16(
688
+ allGTCastingValues,
689
+ allAmountValues,
690
+ newA,
691
+ newB,
692
+ result
693
+ );
694
+
695
+ // Calculate the result with casting to 32
696
+ computeAndChekTransfer32(
697
+ allGTCastingValues,
698
+ allAmountValues,
699
+ newA,
700
+ newB,
701
+ result
702
+ );
703
+
704
+ // Calculate the result with casting to 64
705
+ computeAndChekTransfer64(
706
+ allGTCastingValues,
707
+ allAmountValues,
708
+ newA,
709
+ newB,
710
+ result
711
+ );
712
+
713
+ return (newA, newB, result);
714
+ }
715
+ }