@coti-io/coti-contracts 1.3.0 → 1.3.1

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 (360) hide show
  1. package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +1 -1
  2. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +2 -4
  4. package/contracts/disperse/disperseToken/MintDisperser.sol +1 -3
  5. package/contracts/disperse/disperseToken/TokenDisperser.sol +1 -1
  6. package/contracts/messaging/PrivateMessaging.sol +1 -1
  7. package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +1 -1
  8. package/contracts/mocks/messaging/PrivateMessagingHarness.sol +1 -1
  9. package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +1 -1
  10. package/contracts/mocks/token/ERC20DecimalsMock.sol +1 -1
  11. package/contracts/mocks/token/ERC20Mock.sol +1 -1
  12. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +1 -1
  13. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +1 -1
  14. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +1 -1
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +1 -1
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +1 -1
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +1 -1
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +1 -1
  19. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +1 -1
  20. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +1 -1
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +1 -1
  22. package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +1 -1
  23. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +1 -1
  24. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +1 -1
  25. package/contracts/mocks/utils/mpc/ArithmeticAddTestsContract.sol +196 -0
  26. package/contracts/mocks/utils/mpc/ArithmeticMulTestsContract.sol +194 -0
  27. package/contracts/mocks/utils/mpc/ArithmeticSigned128TestsContract.sol +63 -0
  28. package/contracts/mocks/utils/mpc/ArithmeticSigned256TestsContract.sol +107 -0
  29. package/contracts/mocks/utils/mpc/ArithmeticSignedNarrowTestsContract.sol +123 -0
  30. package/contracts/mocks/utils/mpc/ArithmeticSubTestsContract.sol +196 -0
  31. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +1 -1
  32. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +1 -1
  33. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +1 -1
  34. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +1 -1
  35. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +1 -1
  36. package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +1 -1
  37. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +1 -1
  38. package/contracts/mocks/utils/mpc/Comparison1TestsContract.sol +1 -1
  39. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +1 -1
  40. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +1 -1
  41. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +1 -1
  42. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +1 -1
  43. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +1 -1
  44. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +1 -1
  45. package/contracts/mocks/utils/mpc/MinimalProxy.sol +1 -1
  46. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +1 -1
  47. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +1 -1
  48. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +1 -1
  49. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +4 -4
  50. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +1 -1
  51. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +1 -1
  52. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +1 -1
  53. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +1 -1
  54. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +1 -1
  55. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +1 -1
  56. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +1 -1
  57. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +1 -1
  58. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +1 -1
  59. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +1 -1
  60. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +1 -1
  61. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +1 -1
  62. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +1 -1
  63. package/contracts/mocks/utils/mpc/StringTestsContract.sol +1 -1
  64. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +1 -1
  65. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +1 -1
  66. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +1 -1
  67. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +1 -1
  68. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +1 -1
  69. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +1 -1
  70. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +1 -1
  71. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +1 -1
  72. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +1 -1
  73. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +1 -1
  74. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +1 -1
  75. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +1 -1
  76. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +1 -1
  77. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +2 -2
  78. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +1 -1
  79. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +1 -1
  80. package/contracts/node/CotiNodeRewards.sol +3 -3
  81. package/contracts/node/SoulboundNodeNFT.sol +1 -2
  82. package/contracts/onboard/AccountOnboard.sol +1 -1
  83. package/contracts/oracle/ICotiPriceConsumer.sol +1 -1
  84. package/contracts/pod/IInbox.sol +231 -0
  85. package/contracts/pod/IInboxMiner.sol +53 -0
  86. package/contracts/pod/InboxUser.sol +29 -0
  87. package/contracts/pod/InboxUserCotiTestnet.sol +13 -0
  88. package/contracts/pod/PodNetworkConstants.sol +30 -0
  89. package/contracts/pod/examples/MpcAdder.sol +57 -0
  90. package/contracts/pod/examples/MpcAdderPausable.sol +25 -0
  91. package/contracts/pod/examples/MpcAdderPausable.sol.bak +25 -0
  92. package/contracts/pod/examples/it128/PodAdder128.sol +48 -0
  93. package/contracts/pod/examples/it256/PodAdder256.sol +48 -0
  94. package/contracts/pod/fee/IInboxFeeManager.sol +40 -0
  95. package/contracts/pod/manifest.json +52 -0
  96. package/contracts/pod/mpc/PodLib.sol +10 -0
  97. package/contracts/pod/mpc/PodLib128.sol +361 -0
  98. package/contracts/pod/mpc/PodLib256.sol +361 -0
  99. package/contracts/pod/mpc/PodLib64.sol +385 -0
  100. package/contracts/pod/mpc/PodLibBase.sol +72 -0
  101. package/contracts/pod/mpc/PodUser.sol +58 -0
  102. package/contracts/pod/mpc/PodUserFuji.sol +14 -0
  103. package/contracts/pod/mpc/PodUserSepolia.sol +13 -0
  104. package/contracts/pod/mpc/coti-side/IPodExecutorOps.sol +99 -0
  105. package/contracts/pod/mpccodec/MpcAbiCodec.sol +482 -0
  106. package/contracts/pod/privacy/IPodPriceOracle.sol +20 -0
  107. package/contracts/pod/privacy/IPrivacyPortal.sol +248 -0
  108. package/contracts/pod/privacy/IPrivacyPortalFactory.sol +88 -0
  109. package/contracts/pod/privacy/PortalFeeOracle.sol +51 -0
  110. package/contracts/pod/privacy/PrivacyPortal.sol +871 -0
  111. package/contracts/pod/privacy/PrivacyPortalFactory.sol +492 -0
  112. package/contracts/pod/privacy/PrivacyPortalFeeLib.sol +98 -0
  113. package/contracts/pod/privacy/mocks/CloneHelper.sol +14 -0
  114. package/contracts/pod/privacy/mocks/MockERC20.sol +26 -0
  115. package/contracts/pod/privacy/mocks/MockPodERC20ForPortal.sol +160 -0
  116. package/contracts/pod/privacy/mocks/MockPrivacyPortalFactory.sol +125 -0
  117. package/contracts/pod/privacy/mocks/MockWrappedNative.sol +24 -0
  118. package/contracts/pod/token/erc7984/Erc7984Constants.sol +9 -0
  119. package/contracts/pod/token/erc7984/Erc7984Pointers.sol +29 -0
  120. package/contracts/pod/token/erc7984/IERC7984.sol +69 -0
  121. package/contracts/pod/token/erc7984/IERC7984PortalWrapper.sol +31 -0
  122. package/contracts/pod/token/erc7984/PodErc7984Mixin.sol +125 -0
  123. package/contracts/pod/token/erc7984/README.md +60 -0
  124. package/contracts/pod/token/perc20/IPodERC20.sol +298 -0
  125. package/contracts/pod/token/perc20/PodERC20.sol +1021 -0
  126. package/contracts/pod/token/perc20/PodErc20Mintable.sol +88 -0
  127. package/contracts/pod/token/perc20/PodErc20MintableInitializable.sol +42 -0
  128. package/contracts/pod/token/perc20/cotiside/IPodErc20CotiSide.sol +88 -0
  129. package/contracts/pod/token/perc20/cotiside/PodErc20CotiMother.sol +529 -0
  130. package/contracts/pod/utils/IWrappedNative.sol +11 -0
  131. package/contracts/privacyBridge/PrivacyBridge.sol +5 -5
  132. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +1 -1
  133. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +1 -1
  134. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +1 -1
  135. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +1 -1
  136. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +1 -1
  137. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +1 -1
  138. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +1 -1
  139. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +1 -1
  140. package/contracts/token/PrivateERC20/IPrivateERC20.sol +1 -1
  141. package/contracts/token/PrivateERC20/ITokenReceiver.sol +1 -1
  142. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +1 -1
  143. package/contracts/token/PrivateERC20/PrivateERC20.sol +5 -5
  144. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +1 -1
  145. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +1 -1
  146. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +1 -1
  147. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +1 -1
  148. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +1 -1
  149. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +1 -1
  150. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +1 -1
  151. package/contracts/token/PrivateERC721/IERC721Errors.sol +1 -1
  152. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  153. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +1 -1
  154. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +1 -1
  155. package/contracts/token/points/CotiTokenPoints004.sol +43 -0
  156. package/contracts/utils/mpc/MpcCore.sol +610 -1
  157. package/contracts/utils/mpc/MpcInterface.sol +1 -1
  158. package/hardhat.config.ts +5 -14
  159. package/package.json +4 -4
  160. package/scripts/deployCotiTokenPoints004.ts +61 -0
  161. package/scripts/deployFixedRatioCoinDisperserUnlimitedWindow.ts +68 -0
  162. package/scripts/verifyCotiTokenPoints004.ts +123 -0
  163. package/scripts/verifyFixedRatioCoinDisperserUnlimitedWindow.ts +112 -0
  164. package/test/messaging/PrivateMessaging.test.ts +5 -5
  165. package/test/pod/privacy/PrivacyPortal.access.test.ts +756 -0
  166. package/test/pod/privacy/PrivacyPortal.recovery.test.ts +263 -0
  167. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +5 -3
  168. package/test/utils/mpc/CheckedSignedArithmetic256.test.ts +163 -0
  169. package/test/utils/mpc/NegativeCases.test.ts +3 -3
  170. package/test/utils/mpc/Precompile.test.ts +6 -6
  171. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +2 -2
  172. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +2 -2
  173. package/typechain-types/@openzeppelin/contracts/access/extensions/AccessControlEnumerable.ts +375 -0
  174. package/typechain-types/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.ts +329 -0
  175. package/typechain-types/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  176. package/typechain-types/@openzeppelin/contracts/access/index.ts +2 -0
  177. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.ts +412 -0
  178. package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
  179. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
  180. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
  181. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
  182. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  183. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +4 -0
  184. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +6 -50
  185. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +6 -6
  186. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +313 -0
  187. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.ts +356 -0
  188. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.ts +423 -0
  189. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +6 -6
  190. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +3 -0
  191. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +2 -0
  192. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.ts +69 -0
  193. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  194. package/typechain-types/@openzeppelin/contracts/utils/Nonces.ts +85 -0
  195. package/typechain-types/@openzeppelin/contracts/utils/Pausable.ts +150 -0
  196. package/typechain-types/@openzeppelin/contracts/utils/ReentrancyGuard.ts +69 -0
  197. package/typechain-types/@openzeppelin/contracts/utils/ShortStrings.ts +69 -0
  198. package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
  199. package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
  200. package/typechain-types/@openzeppelin/contracts/utils/cryptography/EIP712.ts +151 -0
  201. package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  202. package/typechain-types/@openzeppelin/contracts/utils/index.ts +9 -0
  203. package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
  204. package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
  205. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +6 -50
  206. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +6 -50
  207. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +16 -2
  208. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +2 -2
  209. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +2 -2
  210. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +2 -2
  211. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +16 -2
  212. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +16 -2
  213. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +16 -2
  214. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +16 -2
  215. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +16 -2
  216. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +16 -2
  217. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +16 -2
  218. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +16 -2
  219. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +16 -2
  220. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +2 -2
  221. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +2 -2
  222. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +2 -2
  223. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +2 -2
  224. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +2 -2
  225. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +2 -2
  226. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +2 -2
  227. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +2 -2
  228. package/typechain-types/contracts/token/index.ts +2 -0
  229. package/typechain-types/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004.ts +826 -0
  230. package/typechain-types/contracts/token/points/CotiTokenPoints004.ts +826 -0
  231. package/typechain-types/contracts/token/points/index.ts +4 -0
  232. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +22 -1
  233. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +22 -1
  234. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +22 -0
  235. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/AccessControlEnumerable__factory.ts +316 -0
  236. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable__factory.ts +265 -0
  237. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  238. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +1 -0
  239. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.ts +393 -0
  240. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
  241. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
  242. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
  243. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
  244. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  245. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +3 -0
  246. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +84 -110
  247. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +3 -3
  248. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +364 -0
  249. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable__factory.ts +382 -0
  250. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit__factory.ts +540 -0
  251. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +3 -3
  252. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +3 -0
  253. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +1 -0
  254. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.ts +96 -0
  255. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  256. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +98 -59
  257. package/typechain-types/factories/@openzeppelin/contracts/utils/Nonces__factory.ts +57 -0
  258. package/typechain-types/factories/@openzeppelin/contracts/utils/Pausable__factory.ts +71 -0
  259. package/typechain-types/factories/@openzeppelin/contracts/utils/ReentrancyGuard__factory.ts +30 -0
  260. package/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.ts +83 -0
  261. package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
  262. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
  263. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/EIP712__factory.ts +87 -0
  264. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  265. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +7 -0
  266. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
  267. package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
  268. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +12 -1
  269. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +39 -1
  270. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +12 -1
  271. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +23 -1
  272. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +12 -1
  273. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1 -1
  274. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1 -1
  275. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +90 -52
  276. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +90 -52
  277. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +90 -2
  278. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +28 -2
  279. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +28 -2
  280. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +1 -1
  281. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +28 -2
  282. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  283. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +1 -1
  284. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
  285. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  286. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
  287. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
  288. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  289. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
  290. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
  291. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  292. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +1 -1
  293. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  294. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
  295. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  296. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
  297. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
  298. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  299. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
  300. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  301. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  302. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +1 -1
  303. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
  304. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
  305. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
  306. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  307. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
  308. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
  309. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
  310. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
  311. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
  312. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
  313. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
  314. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
  315. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  316. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  317. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +1 -1
  318. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
  319. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  320. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  321. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +1 -1
  322. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
  323. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  324. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  325. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  326. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  327. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  328. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  329. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +1 -1
  330. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
  331. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
  332. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  333. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +28 -1
  334. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +126 -1
  335. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  336. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +79 -2
  337. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +89 -1
  338. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +90 -2
  339. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +90 -2
  340. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +90 -2
  341. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +90 -2
  342. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +90 -2
  343. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +78 -1
  344. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +90 -2
  345. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +27 -1
  346. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +28 -2
  347. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +28 -2
  348. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +28 -2
  349. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +28 -2
  350. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +28 -2
  351. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +28 -2
  352. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +28 -2
  353. package/typechain-types/factories/contracts/token/index.ts +1 -0
  354. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004__factory.ts +992 -0
  355. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004__factory.ts +992 -0
  356. package/typechain-types/factories/contracts/token/points/index.ts +4 -0
  357. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  358. package/typechain-types/hardhat.d.ts +360 -0
  359. package/typechain-types/index.ts +36 -4
  360. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +0 -408
@@ -1,12 +1,16 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
- pragma solidity ^0.8.19;
3
+ pragma solidity ^0.8.20;
4
4
 
5
5
 
6
6
  type gtBool is uint256;
7
+ type gtInt8 is uint256;
7
8
  type gtUint8 is uint256;
9
+ type gtInt16 is uint256;
8
10
  type gtUint16 is uint256;
11
+ type gtInt32 is uint256;
9
12
  type gtUint32 is uint256;
13
+ type gtInt64 is uint256;
10
14
  type gtUint64 is uint256;
11
15
 
12
16
  // we use a struct because user-defined value types can only be elementary value types
@@ -16,12 +20,18 @@ struct gtString {
16
20
  }
17
21
 
18
22
  type gtUint128 is uint256;
23
+ type gtInt128 is uint256;
19
24
  type gtUint256 is uint256;
25
+ type gtInt256 is uint256;
20
26
 
21
27
  type ctBool is uint256;
28
+ type ctInt8 is uint256;
22
29
  type ctUint8 is uint256;
30
+ type ctInt16 is uint256;
23
31
  type ctUint16 is uint256;
32
+ type ctInt32 is uint256;
24
33
  type ctUint32 is uint256;
34
+ type ctInt64 is uint256;
25
35
  type ctUint64 is uint256;
26
36
 
27
37
  // we use a struct because user-defined value types can only be elementary value types
@@ -31,6 +41,11 @@ struct ctString {
31
41
  }
32
42
 
33
43
  type ctUint128 is uint256;
44
+ type ctInt128 is uint256;
45
+ struct ctInt256 {
46
+ ctInt128 ciphertextHigh;
47
+ ctInt128 ciphertextLow;
48
+ }
34
49
  struct ctUint256 {
35
50
  ctUint128 ciphertextHigh;
36
51
  ctUint128 ciphertextLow;
@@ -40,18 +55,34 @@ struct itBool {
40
55
  ctBool ciphertext;
41
56
  bytes signature;
42
57
  }
58
+ struct itInt8 {
59
+ ctInt8 ciphertext;
60
+ bytes signature;
61
+ }
43
62
  struct itUint8 {
44
63
  ctUint8 ciphertext;
45
64
  bytes signature;
46
65
  }
66
+ struct itInt16 {
67
+ ctInt16 ciphertext;
68
+ bytes signature;
69
+ }
47
70
  struct itUint16 {
48
71
  ctUint16 ciphertext;
49
72
  bytes signature;
50
73
  }
74
+ struct itInt32 {
75
+ ctInt32 ciphertext;
76
+ bytes signature;
77
+ }
51
78
  struct itUint32 {
52
79
  ctUint32 ciphertext;
53
80
  bytes signature;
54
81
  }
82
+ struct itInt64 {
83
+ ctInt64 ciphertext;
84
+ bytes signature;
85
+ }
55
86
  struct itUint64 {
56
87
  ctUint64 ciphertext;
57
88
  bytes signature;
@@ -64,35 +95,67 @@ struct itUint128 {
64
95
  ctUint128 ciphertext;
65
96
  bytes signature;
66
97
  }
98
+ struct itInt128 {
99
+ ctInt128 ciphertext;
100
+ bytes signature;
101
+ }
67
102
  struct itUint256 {
68
103
  ctUint256 ciphertext;
69
104
  bytes signature;
70
105
  }
106
+ struct itInt256 {
107
+ ctInt256 ciphertext;
108
+ bytes signature;
109
+ }
71
110
 
72
111
  struct utBool {
73
112
  ctBool ciphertext;
74
113
  ctBool userCiphertext;
75
114
  }
115
+ struct utInt8 {
116
+ ctInt8 ciphertext;
117
+ ctInt8 userCiphertext;
118
+ }
76
119
  struct utUint8 {
77
120
  ctUint8 ciphertext;
78
121
  ctUint8 userCiphertext;
79
122
  }
123
+ struct utInt16 {
124
+ ctInt16 ciphertext;
125
+ ctInt16 userCiphertext;
126
+ }
80
127
  struct utUint16 {
81
128
  ctUint16 ciphertext;
82
129
  ctUint16 userCiphertext;
83
130
  }
131
+ struct utInt32 {
132
+ ctInt32 ciphertext;
133
+ ctInt32 userCiphertext;
134
+ }
84
135
  struct utUint32 {
85
136
  ctUint32 ciphertext;
86
137
  ctUint32 userCiphertext;
87
138
  }
139
+ struct utInt64 {
140
+ ctInt64 ciphertext;
141
+ ctInt64 userCiphertext;
142
+ }
88
143
  struct utUint64 {
89
144
  ctUint64 ciphertext;
90
145
  ctUint64 userCiphertext;
91
146
  }
147
+ struct utInt128 {
148
+ ctInt128 ciphertext;
149
+ ctInt128 userCiphertext;
150
+ }
92
151
  struct utUint128 {
93
152
  ctUint128 ciphertext;
94
153
  ctUint128 userCiphertext;
95
154
  }
155
+ struct utInt256 {
156
+ ctInt256 ciphertext;
157
+ ctInt256 userCiphertext;
158
+ }
96
159
  struct utUint256 {
97
160
  ctUint256 ciphertext;
98
161
  ctUint256 userCiphertext;
@@ -14049,5 +14112,551 @@ library MpcCore {
14049
14112
  return (gtUint256.wrap(new_a), gtUint256.wrap(new_b), gtBool.wrap(res), gtUint256.wrap(new_allowance));
14050
14113
  }
14051
14114
 
14115
+ // =========== signed integer operations ==============
14116
+
14117
+ function validateCiphertext(itInt8 memory input) internal returns (gtInt8) {
14118
+ return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).ValidateCiphertext(bytes1(uint8(MPC_TYPE.SUINT8_T)), ctInt8.unwrap(input.ciphertext), input.signature));
14119
+ }
14120
+
14121
+ function validateCiphertext(itInt16 memory input) internal returns (gtInt16) {
14122
+ return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).ValidateCiphertext(bytes1(uint8(MPC_TYPE.SUINT16_T)), ctInt16.unwrap(input.ciphertext), input.signature));
14123
+ }
14124
+
14125
+ function validateCiphertext(itInt32 memory input) internal returns (gtInt32) {
14126
+ return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).ValidateCiphertext(bytes1(uint8(MPC_TYPE.SUINT32_T)), ctInt32.unwrap(input.ciphertext), input.signature));
14127
+ }
14128
+
14129
+ function validateCiphertext(itInt64 memory input) internal returns (gtInt64) {
14130
+ return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).ValidateCiphertext(bytes1(uint8(MPC_TYPE.SUINT64_T)), ctInt64.unwrap(input.ciphertext), input.signature));
14131
+ }
14132
+
14133
+ function validateCiphertext(itInt128 memory input) internal returns (gtInt128) {
14134
+ return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).ValidateCiphertext(bytes1(uint8(MPC_TYPE.SUINT128_T)), ctInt128.unwrap(input.ciphertext), input.signature));
14135
+ }
14136
+
14137
+ function validateCiphertext(itInt256 memory input) internal returns (gtInt256) {
14138
+ return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).ValidateCiphertext(bytes1(uint8(MPC_TYPE.SUINT256_T)), ctInt128.unwrap(input.ciphertext.ciphertextHigh), ctInt128.unwrap(input.ciphertext.ciphertextLow), input.signature));
14139
+ }
14140
+
14141
+ function onBoard(ctInt8 ct) internal returns (gtInt8) {
14142
+ return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OnBoard(bytes1(uint8(MPC_TYPE.SUINT8_T)), ctInt8.unwrap(ct)));
14143
+ }
14144
+
14145
+ function onBoard(ctInt16 ct) internal returns (gtInt16) {
14146
+ return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OnBoard(bytes1(uint8(MPC_TYPE.SUINT16_T)), ctInt16.unwrap(ct)));
14147
+ }
14148
+
14149
+ function onBoard(ctInt32 ct) internal returns (gtInt32) {
14150
+ return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OnBoard(bytes1(uint8(MPC_TYPE.SUINT32_T)), ctInt32.unwrap(ct)));
14151
+ }
14152
+
14153
+ function onBoard(ctInt64 ct) internal returns (gtInt64) {
14154
+ return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OnBoard(bytes1(uint8(MPC_TYPE.SUINT64_T)), ctInt64.unwrap(ct)));
14155
+ }
14156
+
14157
+ function onBoard(ctInt128 ct) internal returns (gtInt128) {
14158
+ return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OnBoard(bytes1(uint8(MPC_TYPE.SUINT128_T)), ctInt128.unwrap(ct)));
14159
+ }
14160
+
14161
+ function onBoard(ctInt256 memory ct) internal returns (gtInt256) {
14162
+ return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OnBoard(bytes1(uint8(MPC_TYPE.SUINT256_T)), ctInt128.unwrap(ct.ciphertextHigh), ctInt128.unwrap(ct.ciphertextLow)));
14163
+ }
14164
+
14165
+ function offBoard(gtInt8 pt) internal returns (ctInt8) {
14166
+ return ctInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoard(bytes1(uint8(MPC_TYPE.SUINT8_T)), gtInt8.unwrap(pt)));
14167
+ }
14168
+
14169
+ function offBoard(gtInt16 pt) internal returns (ctInt16) {
14170
+ return ctInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoard(bytes1(uint8(MPC_TYPE.SUINT16_T)), gtInt16.unwrap(pt)));
14171
+ }
14172
+
14173
+ function offBoard(gtInt32 pt) internal returns (ctInt32) {
14174
+ return ctInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoard(bytes1(uint8(MPC_TYPE.SUINT32_T)), gtInt32.unwrap(pt)));
14175
+ }
14176
+
14177
+ function offBoard(gtInt64 pt) internal returns (ctInt64) {
14178
+ return ctInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoard(bytes1(uint8(MPC_TYPE.SUINT64_T)), gtInt64.unwrap(pt)));
14179
+ }
14180
+
14181
+ function offBoard(gtInt128 pt) internal returns (ctInt128) {
14182
+ return ctInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoard(bytes1(uint8(MPC_TYPE.SUINT128_T)), gtInt128.unwrap(pt)));
14183
+ }
14184
+
14185
+ function offBoard(gtInt256 pt) internal returns (ctInt256 memory result) {
14186
+ (uint256 high, uint256 low) = ExtendedOperations(address(MPC_PRECOMPILE)).OffBoard256(bytes1(uint8(MPC_TYPE.SUINT256_T)), gtInt256.unwrap(pt));
14187
+ result = ctInt256({ciphertextHigh: ctInt128.wrap(high), ciphertextLow: ctInt128.wrap(low)});
14188
+ }
14189
+
14190
+ function offBoardToUser(gtInt8 pt, address addr) internal returns (ctInt8) {
14191
+ return ctInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoardToUser(bytes1(uint8(MPC_TYPE.SUINT8_T)), gtInt8.unwrap(pt), abi.encodePacked(addr)));
14192
+ }
14193
+
14194
+ function offBoardToUser(gtInt16 pt, address addr) internal returns (ctInt16) {
14195
+ return ctInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoardToUser(bytes1(uint8(MPC_TYPE.SUINT16_T)), gtInt16.unwrap(pt), abi.encodePacked(addr)));
14196
+ }
14197
+
14198
+ function offBoardToUser(gtInt32 pt, address addr) internal returns (ctInt32) {
14199
+ return ctInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoardToUser(bytes1(uint8(MPC_TYPE.SUINT32_T)), gtInt32.unwrap(pt), abi.encodePacked(addr)));
14200
+ }
14201
+
14202
+ function offBoardToUser(gtInt64 pt, address addr) internal returns (ctInt64) {
14203
+ return ctInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoardToUser(bytes1(uint8(MPC_TYPE.SUINT64_T)), gtInt64.unwrap(pt), abi.encodePacked(addr)));
14204
+ }
14205
+
14206
+ function offBoardToUser(gtInt128 pt, address addr) internal returns (ctInt128) {
14207
+ return ctInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).OffBoardToUser(bytes1(uint8(MPC_TYPE.SUINT128_T)), gtInt128.unwrap(pt), abi.encodePacked(addr)));
14208
+ }
14209
+
14210
+ function offBoardToUser(gtInt256 pt, address addr) internal returns (ctInt256 memory result) {
14211
+ (uint256 high, uint256 low) = ExtendedOperations(address(MPC_PRECOMPILE)).OffBoardToUser256(bytes1(uint8(MPC_TYPE.SUINT256_T)), gtInt256.unwrap(pt), abi.encodePacked(addr));
14212
+ result = ctInt256({ciphertextHigh: ctInt128.wrap(high), ciphertextLow: ctInt128.wrap(low)});
14213
+ }
14214
+
14215
+ function offBoardCombined(gtInt8 pt, address addr) internal returns (utInt8 memory ut) {
14216
+ ut.ciphertext = offBoard(pt);
14217
+ ut.userCiphertext = offBoardToUser(pt, addr);
14218
+ }
14219
+
14220
+ function offBoardCombined(gtInt16 pt, address addr) internal returns (utInt16 memory ut) {
14221
+ ut.ciphertext = offBoard(pt);
14222
+ ut.userCiphertext = offBoardToUser(pt, addr);
14223
+ }
14224
+
14225
+ function offBoardCombined(gtInt32 pt, address addr) internal returns (utInt32 memory ut) {
14226
+ ut.ciphertext = offBoard(pt);
14227
+ ut.userCiphertext = offBoardToUser(pt, addr);
14228
+ }
14229
+
14230
+ function offBoardCombined(gtInt64 pt, address addr) internal returns (utInt64 memory ut) {
14231
+ ut.ciphertext = offBoard(pt);
14232
+ ut.userCiphertext = offBoardToUser(pt, addr);
14233
+ }
14234
+
14235
+ function offBoardCombined(gtInt128 pt, address addr) internal returns (utInt128 memory ut) {
14236
+ ut.ciphertext = offBoard(pt);
14237
+ ut.userCiphertext = offBoardToUser(pt, addr);
14238
+ }
14239
+
14240
+ function offBoardCombined(gtInt256 pt, address addr) internal returns (utInt256 memory ut) {
14241
+ ut.ciphertext = offBoard(pt);
14242
+ ut.userCiphertext = offBoardToUser(pt, addr);
14243
+ }
14244
+
14245
+ function setPublic8(int8 pt) internal returns (gtInt8) {
14246
+ uint8 unsignedBits;
14247
+ assembly { unsignedBits := pt }
14248
+ return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).SetPublic(bytes1(uint8(MPC_TYPE.SUINT8_T)), uint256(unsignedBits)));
14249
+ }
14250
+
14251
+ function setPublic16(int16 pt) internal returns (gtInt16) {
14252
+ uint16 unsignedBits;
14253
+ assembly { unsignedBits := pt }
14254
+ return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).SetPublic(bytes1(uint8(MPC_TYPE.SUINT16_T)), uint256(unsignedBits)));
14255
+ }
14256
+
14257
+ function setPublic32(int32 pt) internal returns (gtInt32) {
14258
+ uint32 unsignedBits;
14259
+ assembly { unsignedBits := pt }
14260
+ return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).SetPublic(bytes1(uint8(MPC_TYPE.SUINT32_T)), uint256(unsignedBits)));
14261
+ }
14262
+
14263
+ function setPublic64(int64 pt) internal returns (gtInt64) {
14264
+ uint64 unsignedBits;
14265
+ assembly { unsignedBits := pt }
14266
+ return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).SetPublic(bytes1(uint8(MPC_TYPE.SUINT64_T)), uint256(unsignedBits)));
14267
+ }
14268
+
14269
+ function setPublic128(int128 pt) internal returns (gtInt128) {
14270
+ uint128 unsignedBits;
14271
+ assembly { unsignedBits := pt }
14272
+ return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).SetPublic(bytes1(uint8(MPC_TYPE.SUINT128_T)), uint256(unsignedBits)));
14273
+ }
14274
+
14275
+ function setPublic256(int256 pt) internal returns (gtInt256) {
14276
+ uint256 unsignedBits;
14277
+ assembly { unsignedBits := pt }
14278
+ return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).SetPublic(bytes1(uint8(MPC_TYPE.SUINT256_T)), unsignedBits));
14279
+ }
14280
+
14281
+ function add(gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Add(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14282
+ function add(gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Add(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14283
+ function add(gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Add(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14284
+ function add(gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Add(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14285
+ function add(gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Add(combineEnumsToBytes3(MPC_TYPE.SUINT128_T, MPC_TYPE.SUINT128_T, ARGS.BOTH_SECRET), gtInt128.unwrap(a), gtInt128.unwrap(b))); }
14286
+ function add(gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Add(combineEnumsToBytes3(MPC_TYPE.SUINT256_T, MPC_TYPE.SUINT256_T, ARGS.BOTH_SECRET), gtInt256.unwrap(a), gtInt256.unwrap(b))); }
14287
+
14288
+ function sub(gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14289
+ function sub(gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Sub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14290
+ function sub(gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Sub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14291
+ function sub(gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Sub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14292
+ function sub(gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Sub(combineEnumsToBytes3(MPC_TYPE.SUINT128_T, MPC_TYPE.SUINT128_T, ARGS.BOTH_SECRET), gtInt128.unwrap(a), gtInt128.unwrap(b))); }
14293
+ function sub(gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Sub(combineEnumsToBytes3(MPC_TYPE.SUINT256_T, MPC_TYPE.SUINT256_T, ARGS.BOTH_SECRET), gtInt256.unwrap(a), gtInt256.unwrap(b))); }
14294
+
14295
+ function mul(gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14296
+ function mul(gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14297
+ function mul(gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14298
+ function mul(gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14299
+ function mul(gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(gtUint128.unwrap(applyMulSign(signBit(a), signBit(b), mul(absUnsigned(a), absUnsigned(b))))); }
14300
+ function mul(gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(gtUint256.unwrap(applyMulSign(signBit(a), signBit(b), mul(absUnsigned(a), absUnsigned(b))))); }
14301
+
14302
+ function div(gtInt8 a, gtInt8 b) internal returns (gtInt8) { require(decrypt(ne(b, setPublic8(int8(0)))), "division by zero"); return gtInt8.wrap(gtUint8.unwrap(applyDivSign(signBit(a), signBit(b), div(absUnsigned(a), absUnsigned(b))))); }
14303
+ function div(gtInt16 a, gtInt16 b) internal returns (gtInt16) { require(decrypt(ne(b, setPublic16(int16(0)))), "division by zero"); return gtInt16.wrap(gtUint16.unwrap(applyDivSign(signBit(a), signBit(b), div(absUnsigned(a), absUnsigned(b))))); }
14304
+ function div(gtInt32 a, gtInt32 b) internal returns (gtInt32) { require(decrypt(ne(b, setPublic32(int32(0)))), "division by zero"); return gtInt32.wrap(gtUint32.unwrap(applyDivSign(signBit(a), signBit(b), div(absUnsigned(a), absUnsigned(b))))); }
14305
+ function div(gtInt64 a, gtInt64 b) internal returns (gtInt64) { require(decrypt(ne(b, setPublic64(int64(0)))), "division by zero"); return gtInt64.wrap(gtUint64.unwrap(applyDivSign(signBit(a), signBit(b), div(absUnsigned(a), absUnsigned(b))))); }
14306
+ function div(gtInt128 a, gtInt128 b) internal returns (gtInt128) { require(decrypt(ne(b, setPublic128(int128(0)))), "division by zero"); return gtInt128.wrap(gtUint128.unwrap(applyDivSign(signBit(a), signBit(b), div(absUnsigned(a), absUnsigned(b))))); }
14307
+ function div(gtInt256 a, gtInt256 b) internal returns (gtInt256) { require(decrypt(ne(b, setPublic256(int256(0)))), "division by zero"); return gtInt256.wrap(gtUint256.unwrap(applyDivSign(signBit(a), signBit(b), div(absUnsigned(a), absUnsigned(b))))); }
14308
+
14309
+ function and(gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).And(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14310
+ function and(gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).And(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14311
+ function and(gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).And(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14312
+ function and(gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).And(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14313
+ function and(gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).And(combineEnumsToBytes3(MPC_TYPE.SUINT128_T, MPC_TYPE.SUINT128_T, ARGS.BOTH_SECRET), gtInt128.unwrap(a), gtInt128.unwrap(b))); }
14314
+ function and(gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).And(combineEnumsToBytes3(MPC_TYPE.SUINT256_T, MPC_TYPE.SUINT256_T, ARGS.BOTH_SECRET), gtInt256.unwrap(a), gtInt256.unwrap(b))); }
14315
+
14316
+ function or(gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Or(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14317
+ function or(gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Or(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14318
+ function or(gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Or(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14319
+ function or(gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Or(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14320
+ function or(gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Or(combineEnumsToBytes3(MPC_TYPE.SUINT128_T, MPC_TYPE.SUINT128_T, ARGS.BOTH_SECRET), gtInt128.unwrap(a), gtInt128.unwrap(b))); }
14321
+ function or(gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Or(combineEnumsToBytes3(MPC_TYPE.SUINT256_T, MPC_TYPE.SUINT256_T, ARGS.BOTH_SECRET), gtInt256.unwrap(a), gtInt256.unwrap(b))); }
14322
+
14323
+ function xor(gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Xor(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14324
+ function xor(gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Xor(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14325
+ function xor(gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Xor(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14326
+ function xor(gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Xor(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14327
+ function xor(gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Xor(combineEnumsToBytes3(MPC_TYPE.SUINT128_T, MPC_TYPE.SUINT128_T, ARGS.BOTH_SECRET), gtInt128.unwrap(a), gtInt128.unwrap(b))); }
14328
+ function xor(gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Xor(combineEnumsToBytes3(MPC_TYPE.SUINT256_T, MPC_TYPE.SUINT256_T, ARGS.BOTH_SECRET), gtInt256.unwrap(a), gtInt256.unwrap(b))); }
14329
+
14330
+ function eq(gtInt8 a, gtInt8 b) internal returns (gtBool) { return eq(gtUint8.wrap(gtInt8.unwrap(a)), gtUint8.wrap(gtInt8.unwrap(b))); }
14331
+ function eq(gtInt16 a, gtInt16 b) internal returns (gtBool) { return eq(gtUint16.wrap(gtInt16.unwrap(a)), gtUint16.wrap(gtInt16.unwrap(b))); }
14332
+ function eq(gtInt32 a, gtInt32 b) internal returns (gtBool) { return eq(gtUint32.wrap(gtInt32.unwrap(a)), gtUint32.wrap(gtInt32.unwrap(b))); }
14333
+ function eq(gtInt64 a, gtInt64 b) internal returns (gtBool) { return eq(gtUint64.wrap(gtInt64.unwrap(a)), gtUint64.wrap(gtInt64.unwrap(b))); }
14334
+ function eq(gtInt128 a, gtInt128 b) internal returns (gtBool) { return eq(gtUint128.wrap(gtInt128.unwrap(a)), gtUint128.wrap(gtInt128.unwrap(b))); }
14335
+ function eq(gtInt256 a, gtInt256 b) internal returns (gtBool) { return eq(gtUint256.wrap(gtInt256.unwrap(a)), gtUint256.wrap(gtInt256.unwrap(b))); }
14336
+
14337
+ function ne(gtInt8 a, gtInt8 b) internal returns (gtBool) { return ne(gtUint8.wrap(gtInt8.unwrap(a)), gtUint8.wrap(gtInt8.unwrap(b))); }
14338
+ function ne(gtInt16 a, gtInt16 b) internal returns (gtBool) { return ne(gtUint16.wrap(gtInt16.unwrap(a)), gtUint16.wrap(gtInt16.unwrap(b))); }
14339
+ function ne(gtInt32 a, gtInt32 b) internal returns (gtBool) { return ne(gtUint32.wrap(gtInt32.unwrap(a)), gtUint32.wrap(gtInt32.unwrap(b))); }
14340
+ function ne(gtInt64 a, gtInt64 b) internal returns (gtBool) { return ne(gtUint64.wrap(gtInt64.unwrap(a)), gtUint64.wrap(gtInt64.unwrap(b))); }
14341
+ function ne(gtInt128 a, gtInt128 b) internal returns (gtBool) { return ne(gtUint128.wrap(gtInt128.unwrap(a)), gtUint128.wrap(gtInt128.unwrap(b))); }
14342
+ function ne(gtInt256 a, gtInt256 b) internal returns (gtBool) { return ne(gtUint256.wrap(gtInt256.unwrap(a)), gtUint256.wrap(gtInt256.unwrap(b))); }
14343
+
14344
+ function gt(gtInt8 a, gtInt8 b) internal returns (gtBool) { return signedGt(signBit(a), signBit(b), gt(gtUint8.wrap(gtInt8.unwrap(a)), gtUint8.wrap(gtInt8.unwrap(b)))); }
14345
+ function gt(gtInt16 a, gtInt16 b) internal returns (gtBool) { return signedGt(signBit(a), signBit(b), gt(gtUint16.wrap(gtInt16.unwrap(a)), gtUint16.wrap(gtInt16.unwrap(b)))); }
14346
+ function gt(gtInt32 a, gtInt32 b) internal returns (gtBool) { return signedGt(signBit(a), signBit(b), gt(gtUint32.wrap(gtInt32.unwrap(a)), gtUint32.wrap(gtInt32.unwrap(b)))); }
14347
+ function gt(gtInt64 a, gtInt64 b) internal returns (gtBool) { return signedGt(signBit(a), signBit(b), gt(gtUint64.wrap(gtInt64.unwrap(a)), gtUint64.wrap(gtInt64.unwrap(b)))); }
14348
+ function gt(gtInt128 a, gtInt128 b) internal returns (gtBool) { return signedGt(signBit(a), signBit(b), gt(gtUint128.wrap(gtInt128.unwrap(a)), gtUint128.wrap(gtInt128.unwrap(b)))); }
14349
+ function gt(gtInt256 a, gtInt256 b) internal returns (gtBool) { return signedGt(signBit(a), signBit(b), gt(gtUint256.wrap(gtInt256.unwrap(a)), gtUint256.wrap(gtInt256.unwrap(b)))); }
14350
+
14351
+ function lt(gtInt8 a, gtInt8 b) internal returns (gtBool) { return signedLt(signBit(a), signBit(b), lt(gtUint8.wrap(gtInt8.unwrap(a)), gtUint8.wrap(gtInt8.unwrap(b)))); }
14352
+ function lt(gtInt16 a, gtInt16 b) internal returns (gtBool) { return signedLt(signBit(a), signBit(b), lt(gtUint16.wrap(gtInt16.unwrap(a)), gtUint16.wrap(gtInt16.unwrap(b)))); }
14353
+ function lt(gtInt32 a, gtInt32 b) internal returns (gtBool) { return signedLt(signBit(a), signBit(b), lt(gtUint32.wrap(gtInt32.unwrap(a)), gtUint32.wrap(gtInt32.unwrap(b)))); }
14354
+ function lt(gtInt64 a, gtInt64 b) internal returns (gtBool) { return signedLt(signBit(a), signBit(b), lt(gtUint64.wrap(gtInt64.unwrap(a)), gtUint64.wrap(gtInt64.unwrap(b)))); }
14355
+ function lt(gtInt128 a, gtInt128 b) internal returns (gtBool) { return signedLt(signBit(a), signBit(b), lt(gtUint128.wrap(gtInt128.unwrap(a)), gtUint128.wrap(gtInt128.unwrap(b)))); }
14356
+ function lt(gtInt256 a, gtInt256 b) internal returns (gtBool) { return signedLt(signBit(a), signBit(b), lt(gtUint256.wrap(gtInt256.unwrap(a)), gtUint256.wrap(gtInt256.unwrap(b)))); }
14357
+
14358
+ function ge(gtInt8 a, gtInt8 b) internal returns (gtBool) { return not(lt(a, b)); }
14359
+ function ge(gtInt16 a, gtInt16 b) internal returns (gtBool) { return not(lt(a, b)); }
14360
+ function ge(gtInt32 a, gtInt32 b) internal returns (gtBool) { return not(lt(a, b)); }
14361
+ function ge(gtInt64 a, gtInt64 b) internal returns (gtBool) { return not(lt(a, b)); }
14362
+ function ge(gtInt128 a, gtInt128 b) internal returns (gtBool) { return not(lt(a, b)); }
14363
+ function ge(gtInt256 a, gtInt256 b) internal returns (gtBool) { return not(lt(a, b)); }
14364
+
14365
+ function le(gtInt8 a, gtInt8 b) internal returns (gtBool) { return not(gt(a, b)); }
14366
+ function le(gtInt16 a, gtInt16 b) internal returns (gtBool) { return not(gt(a, b)); }
14367
+ function le(gtInt32 a, gtInt32 b) internal returns (gtBool) { return not(gt(a, b)); }
14368
+ function le(gtInt64 a, gtInt64 b) internal returns (gtBool) { return not(gt(a, b)); }
14369
+ function le(gtInt128 a, gtInt128 b) internal returns (gtBool) { return not(gt(a, b)); }
14370
+ function le(gtInt256 a, gtInt256 b) internal returns (gtBool) { return not(gt(a, b)); }
14371
+
14372
+ function decrypt(gtInt8 ct) internal returns (int8) { return int8(uint8(ExtendedOperations(address(MPC_PRECOMPILE)).Decrypt(bytes1(uint8(MPC_TYPE.SUINT8_T)), gtInt8.unwrap(ct)))); }
14373
+ function decrypt(gtInt16 ct) internal returns (int16) { return int16(uint16(ExtendedOperations(address(MPC_PRECOMPILE)).Decrypt(bytes1(uint8(MPC_TYPE.SUINT16_T)), gtInt16.unwrap(ct)))); }
14374
+ function decrypt(gtInt32 ct) internal returns (int32) { return int32(uint32(ExtendedOperations(address(MPC_PRECOMPILE)).Decrypt(bytes1(uint8(MPC_TYPE.SUINT32_T)), gtInt32.unwrap(ct)))); }
14375
+ function decrypt(gtInt64 ct) internal returns (int64) { return int64(uint64(ExtendedOperations(address(MPC_PRECOMPILE)).Decrypt(bytes1(uint8(MPC_TYPE.SUINT64_T)), gtInt64.unwrap(ct)))); }
14376
+ function decrypt(gtInt128 ct) internal returns (int128) { return int128(uint128(ExtendedOperations(address(MPC_PRECOMPILE)).Decrypt(bytes1(uint8(MPC_TYPE.SUINT128_T)), gtInt128.unwrap(ct)))); }
14377
+ function decrypt(gtInt256 ct) internal returns (int256) { return int256(ExtendedOperations(address(MPC_PRECOMPILE)).Decrypt(bytes1(uint8(MPC_TYPE.SUINT256_T)), gtInt256.unwrap(ct))); }
14378
+
14379
+ function mux(gtBool bit, gtInt8 a, gtInt8 b) internal returns (gtInt8) { return gtInt8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mux(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtBool.unwrap(bit), gtInt8.unwrap(a), gtInt8.unwrap(b))); }
14380
+ function mux(gtBool bit, gtInt16 a, gtInt16 b) internal returns (gtInt16) { return gtInt16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mux(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtBool.unwrap(bit), gtInt16.unwrap(a), gtInt16.unwrap(b))); }
14381
+ function mux(gtBool bit, gtInt32 a, gtInt32 b) internal returns (gtInt32) { return gtInt32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mux(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtBool.unwrap(bit), gtInt32.unwrap(a), gtInt32.unwrap(b))); }
14382
+ function mux(gtBool bit, gtInt64 a, gtInt64 b) internal returns (gtInt64) { return gtInt64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mux(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtBool.unwrap(bit), gtInt64.unwrap(a), gtInt64.unwrap(b))); }
14383
+ function mux(gtBool bit, gtInt128 a, gtInt128 b) internal returns (gtInt128) { return gtInt128.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mux(combineEnumsToBytes3(MPC_TYPE.SUINT128_T, MPC_TYPE.SUINT128_T, ARGS.BOTH_SECRET), gtBool.unwrap(bit), gtInt128.unwrap(a), gtInt128.unwrap(b))); }
14384
+ function mux(gtBool bit, gtInt256 a, gtInt256 b) internal returns (gtInt256) { return gtInt256.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).Mux(combineEnumsToBytes3(MPC_TYPE.SUINT256_T, MPC_TYPE.SUINT256_T, ARGS.BOTH_SECRET), gtBool.unwrap(bit), gtInt256.unwrap(a), gtInt256.unwrap(b))); }
14385
+
14386
+ function shl(gtInt8 a, uint8 b) internal returns (gtInt8) { return gtInt8.wrap(gtUint8.unwrap(shl(gtUint8.wrap(gtInt8.unwrap(a)), b))); }
14387
+ function shl(gtInt16 a, uint8 b) internal returns (gtInt16) { return gtInt16.wrap(gtUint16.unwrap(shl(gtUint16.wrap(gtInt16.unwrap(a)), b))); }
14388
+ function shl(gtInt32 a, uint8 b) internal returns (gtInt32) { return gtInt32.wrap(gtUint32.unwrap(shl(gtUint32.wrap(gtInt32.unwrap(a)), b))); }
14389
+ function shl(gtInt64 a, uint8 b) internal returns (gtInt64) { return gtInt64.wrap(gtUint64.unwrap(shl(gtUint64.wrap(gtInt64.unwrap(a)), b))); }
14390
+ function shl(gtInt128 a, uint8 b) internal returns (gtInt128) { return gtInt128.wrap(gtUint128.unwrap(shl(gtUint128.wrap(gtInt128.unwrap(a)), b))); }
14391
+
14392
+ function shr(gtInt8 a, uint8 b) internal returns (gtInt8) { return gtInt8.wrap(gtUint8.unwrap(signedShr(gtUint8.wrap(gtInt8.unwrap(a)), b, 8))); }
14393
+ function shr(gtInt16 a, uint8 b) internal returns (gtInt16) { return gtInt16.wrap(gtUint16.unwrap(signedShr(gtUint16.wrap(gtInt16.unwrap(a)), b, 16))); }
14394
+ function shr(gtInt32 a, uint8 b) internal returns (gtInt32) { return gtInt32.wrap(gtUint32.unwrap(signedShr(gtUint32.wrap(gtInt32.unwrap(a)), b, 32))); }
14395
+ function shr(gtInt64 a, uint8 b) internal returns (gtInt64) { return gtInt64.wrap(gtUint64.unwrap(signedShr(gtUint64.wrap(gtInt64.unwrap(a)), b, 64))); }
14396
+ function shr(gtInt128 a, uint8 b) internal returns (gtInt128) { return gtInt128.wrap(gtUint128.unwrap(signedShr(gtUint128.wrap(gtInt128.unwrap(a)), b, 128))); }
14397
+
14398
+ function fromSigned(gtInt128 a) internal pure returns (gtUint128) { return gtUint128.wrap(gtInt128.unwrap(a)); }
14399
+ function toSigned(gtUint128 a) internal pure returns (gtInt128) { return gtInt128.wrap(gtUint128.unwrap(a)); }
14400
+ function fromSigned(gtInt256 a) internal pure returns (gtUint256) { return gtUint256.wrap(gtInt256.unwrap(a)); }
14401
+ function toSigned(gtUint256 a) internal pure returns (gtInt256) { return gtInt256.wrap(gtUint256.unwrap(a)); }
14402
+ function int64ToUint64(int64 x) internal pure returns (uint64) { return uint64(uint256(uint64(x))); }
14403
+ function uint64ToInt64(uint64 x) internal pure returns (int64) { return int64(uint64(uint256(x))); }
14404
+ function int128ToUint128(int128 x) internal pure returns (uint128) { return uint128(uint256(uint128(x))); }
14405
+ function uint128ToInt128(uint128 x) internal pure returns (int128) { return int128(x); }
14406
+
14407
+ function negate(gtInt128 a) internal returns (gtInt128) { return sub(setPublic128(int128(0)), a); }
14408
+ function negate(gtInt256 a) internal returns (gtInt256) { return sub(setPublic256(int256(0)), a); }
14409
+
14410
+ function checkedAdd(gtInt8 a, gtInt8 b) internal returns (gtInt8) { (gtBool overflow, gtInt8 result) = checkedAddWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14411
+ function checkedAdd(gtInt16 a, gtInt16 b) internal returns (gtInt16) { (gtBool overflow, gtInt16 result) = checkedAddWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14412
+ function checkedAdd(gtInt32 a, gtInt32 b) internal returns (gtInt32) { (gtBool overflow, gtInt32 result) = checkedAddWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14413
+ function checkedAdd(gtInt64 a, gtInt64 b) internal returns (gtInt64) { (gtBool overflow, gtInt64 result) = checkedAddWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14414
+ function checkedAdd(gtInt128 a, gtInt128 b) internal returns (gtInt128) { (gtBool overflow, gtInt128 result) = checkedAddWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14415
+ function checkedAdd(gtInt256 a, gtInt256 b) internal returns (gtInt256) { (gtBool overflow, gtInt256 result) = checkedAddWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14416
+
14417
+ function checkedAddWithOverflowBit(gtInt8 a, gtInt8 b) internal returns (gtBool, gtInt8) { gtInt8 result = add(a, b); return (signedAddOverflow(signBit(a), signBit(b), signBit(result)), result); }
14418
+ function checkedAddWithOverflowBit(gtInt16 a, gtInt16 b) internal returns (gtBool, gtInt16) { gtInt16 result = add(a, b); return (signedAddOverflow(signBit(a), signBit(b), signBit(result)), result); }
14419
+ function checkedAddWithOverflowBit(gtInt32 a, gtInt32 b) internal returns (gtBool, gtInt32) { gtInt32 result = add(a, b); return (signedAddOverflow(signBit(a), signBit(b), signBit(result)), result); }
14420
+ function checkedAddWithOverflowBit(gtInt64 a, gtInt64 b) internal returns (gtBool, gtInt64) { gtInt64 result = add(a, b); return (signedAddOverflow(signBit(a), signBit(b), signBit(result)), result); }
14421
+ function checkedAddWithOverflowBit(gtInt128 a, gtInt128 b) internal returns (gtBool, gtInt128) { gtInt128 result = add(a, b); return (signedAddOverflow(signBit(a), signBit(b), signBit(result)), result); }
14422
+ function checkedAddWithOverflowBit(gtInt256 a, gtInt256 b) internal returns (gtBool, gtInt256) { gtInt256 result = add(a, b); return (signedAddOverflow(signBit(a), signBit(b), signBit(result)), result); }
14423
+
14424
+ function checkedSub(gtInt8 a, gtInt8 b) internal returns (gtInt8) { (gtBool overflow, gtInt8 result) = checkedSubWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14425
+ function checkedSub(gtInt16 a, gtInt16 b) internal returns (gtInt16) { (gtBool overflow, gtInt16 result) = checkedSubWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14426
+ function checkedSub(gtInt32 a, gtInt32 b) internal returns (gtInt32) { (gtBool overflow, gtInt32 result) = checkedSubWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14427
+ function checkedSub(gtInt64 a, gtInt64 b) internal returns (gtInt64) { (gtBool overflow, gtInt64 result) = checkedSubWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14428
+ function checkedSub(gtInt128 a, gtInt128 b) internal returns (gtInt128) { (gtBool overflow, gtInt128 result) = checkedSubWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14429
+ function checkedSub(gtInt256 a, gtInt256 b) internal returns (gtInt256) { (gtBool overflow, gtInt256 result) = checkedSubWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14430
+
14431
+ function checkedSubWithOverflowBit(gtInt8 a, gtInt8 b) internal returns (gtBool, gtInt8) { gtInt8 result = sub(a, b); return (signedSubOverflow(signBit(a), signBit(b), signBit(result)), result); }
14432
+ function checkedSubWithOverflowBit(gtInt16 a, gtInt16 b) internal returns (gtBool, gtInt16) { gtInt16 result = sub(a, b); return (signedSubOverflow(signBit(a), signBit(b), signBit(result)), result); }
14433
+ function checkedSubWithOverflowBit(gtInt32 a, gtInt32 b) internal returns (gtBool, gtInt32) { gtInt32 result = sub(a, b); return (signedSubOverflow(signBit(a), signBit(b), signBit(result)), result); }
14434
+ function checkedSubWithOverflowBit(gtInt64 a, gtInt64 b) internal returns (gtBool, gtInt64) { gtInt64 result = sub(a, b); return (signedSubOverflow(signBit(a), signBit(b), signBit(result)), result); }
14435
+ function checkedSubWithOverflowBit(gtInt128 a, gtInt128 b) internal returns (gtBool, gtInt128) { gtInt128 result = sub(a, b); return (signedSubOverflow(signBit(a), signBit(b), signBit(result)), result); }
14436
+ function checkedSubWithOverflowBit(gtInt256 a, gtInt256 b) internal returns (gtBool, gtInt256) { gtInt256 result = sub(a, b); return (signedSubOverflow(signBit(a), signBit(b), signBit(result)), result); }
14437
+
14438
+ function checkedMul(gtInt8 a, gtInt8 b) internal returns (gtInt8) { (gtBool overflow, gtInt8 result) = checkedMulWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14439
+ function checkedMul(gtInt16 a, gtInt16 b) internal returns (gtInt16) { (gtBool overflow, gtInt16 result) = checkedMulWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14440
+ function checkedMul(gtInt32 a, gtInt32 b) internal returns (gtInt32) { (gtBool overflow, gtInt32 result) = checkedMulWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14441
+ function checkedMul(gtInt64 a, gtInt64 b) internal returns (gtInt64) { (gtBool overflow, gtInt64 result) = checkedMulWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14442
+ function checkedMul(gtInt128 a, gtInt128 b) internal returns (gtInt128) { (gtBool overflow, gtInt128 result) = checkedMulWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14443
+ function checkedMul(gtInt256 a, gtInt256 b) internal returns (gtInt256) { (gtBool overflow, gtInt256 result) = checkedMulWithOverflowBit(a, b); return checkSignedRes(overflow, result); }
14444
+
14445
+ function checkedMulWithOverflowBit(gtInt8 a, gtInt8 b) internal returns (gtBool, gtInt8) {
14446
+ (gtBool overflow, gtUint8 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14447
+ return signedMulResult(overflow, signBit(a), signBit(b), product, uint8(type(int8).max), uint8(1) << 7);
14448
+ }
14449
+
14450
+ function checkedMulWithOverflowBit(gtInt16 a, gtInt16 b) internal returns (gtBool, gtInt16) {
14451
+ (gtBool overflow, gtUint16 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14452
+ return signedMulResult(overflow, signBit(a), signBit(b), product, uint16(type(int16).max), uint16(1) << 15);
14453
+ }
14454
+
14455
+ function checkedMulWithOverflowBit(gtInt32 a, gtInt32 b) internal returns (gtBool, gtInt32) {
14456
+ (gtBool overflow, gtUint32 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14457
+ return signedMulResult(overflow, signBit(a), signBit(b), product, uint32(type(int32).max), uint32(1) << 31);
14458
+ }
14459
+
14460
+ function checkedMulWithOverflowBit(gtInt64 a, gtInt64 b) internal returns (gtBool, gtInt64) {
14461
+ (gtBool overflow, gtUint64 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14462
+ return signedMulResult(overflow, signBit(a), signBit(b), product, uint64(type(int64).max), uint64(1) << 63);
14463
+ }
14464
+
14465
+ function checkedMulWithOverflowBit(gtInt128 a, gtInt128 b) internal returns (gtBool, gtInt128) {
14466
+ (gtBool overflow, gtUint128 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14467
+ return signedMulResult(overflow, signBit(a), signBit(b), product, uint128(type(int128).max), uint128(1) << 127);
14468
+ }
14469
+
14470
+ function checkedMulWithOverflowBit(gtInt256 a, gtInt256 b) internal returns (gtBool, gtInt256) {
14471
+ (gtBool overflow, gtUint256 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14472
+ return signedMulResult(overflow, signBit(a), signBit(b), product, uint256(type(int256).max), uint256(1) << 255);
14473
+ }
14474
+
14475
+ function checkSignedRes(gtBool bit, gtInt8 res) private returns (gtInt8) { checkOverflow(bit); return res; }
14476
+ function checkSignedRes(gtBool bit, gtInt16 res) private returns (gtInt16) { checkOverflow(bit); return res; }
14477
+ function checkSignedRes(gtBool bit, gtInt32 res) private returns (gtInt32) { checkOverflow(bit); return res; }
14478
+ function checkSignedRes(gtBool bit, gtInt64 res) private returns (gtInt64) { checkOverflow(bit); return res; }
14479
+ function checkSignedRes(gtBool bit, gtInt128 res) private returns (gtInt128) { checkOverflow(bit); return res; }
14480
+ function checkSignedRes(gtBool bit, gtInt256 res) private returns (gtInt256) { checkOverflow(bit); return res; }
14481
+
14482
+ function signedGt(gtBool signA, gtBool signB, gtBool unsignedGt) private returns (gtBool) {
14483
+ gtBool signDiff = ne(signA, signB);
14484
+ gtBool aPositiveBNegative = and(signDiff, not(signA));
14485
+ return or(aPositiveBNegative, and(not(signDiff), unsignedGt));
14486
+ }
14487
+
14488
+ function signedLt(gtBool signA, gtBool signB, gtBool unsignedLt) private returns (gtBool) {
14489
+ gtBool signDiff = ne(signA, signB);
14490
+ gtBool aNegativeBPositive = and(signDiff, signA);
14491
+ return or(aNegativeBPositive, and(not(signDiff), unsignedLt));
14492
+ }
14493
+
14494
+ function signedAddOverflow(gtBool signA, gtBool signB, gtBool signResult) private returns (gtBool) {
14495
+ return and(eq(signA, signB), ne(signResult, signA));
14496
+ }
14497
+
14498
+ function signedSubOverflow(gtBool signA, gtBool signB, gtBool signResult) private returns (gtBool) {
14499
+ return and(ne(signA, signB), ne(signResult, signA));
14500
+ }
14501
+
14502
+ function applyMulSign(gtBool signA, gtBool signB, gtUint128 product) private returns (gtUint128) {
14503
+ gtBool negative = xor(signA, signB);
14504
+ gtInt128 signedProduct = gtInt128.wrap(gtUint128.unwrap(product));
14505
+ return gtUint128.wrap(gtInt128.unwrap(mux(negative, signedProduct, sub(setPublic128(int128(0)), signedProduct))));
14506
+ }
14507
+
14508
+ function applyMulSign(gtBool signA, gtBool signB, gtUint256 product) private returns (gtUint256) {
14509
+ gtBool negative = xor(signA, signB);
14510
+ gtInt256 signedProduct = gtInt256.wrap(gtUint256.unwrap(product));
14511
+ return gtUint256.wrap(gtInt256.unwrap(mux(negative, signedProduct, sub(setPublic256(int256(0)), signedProduct))));
14512
+ }
14513
+
14514
+ function applyDivSign(gtBool signA, gtBool signB, gtUint8 quotient) private returns (gtUint8) {
14515
+ gtBool negative = xor(signA, signB);
14516
+ gtInt8 signedQuotient = gtInt8.wrap(gtUint8.unwrap(quotient));
14517
+ return gtUint8.wrap(gtInt8.unwrap(mux(negative, signedQuotient, sub(setPublic8(int8(0)), signedQuotient))));
14518
+ }
14519
+
14520
+ function applyDivSign(gtBool signA, gtBool signB, gtUint16 quotient) private returns (gtUint16) {
14521
+ gtBool negative = xor(signA, signB);
14522
+ gtInt16 signedQuotient = gtInt16.wrap(gtUint16.unwrap(quotient));
14523
+ return gtUint16.wrap(gtInt16.unwrap(mux(negative, signedQuotient, sub(setPublic16(int16(0)), signedQuotient))));
14524
+ }
14525
+
14526
+ function applyDivSign(gtBool signA, gtBool signB, gtUint32 quotient) private returns (gtUint32) {
14527
+ gtBool negative = xor(signA, signB);
14528
+ gtInt32 signedQuotient = gtInt32.wrap(gtUint32.unwrap(quotient));
14529
+ return gtUint32.wrap(gtInt32.unwrap(mux(negative, signedQuotient, sub(setPublic32(int32(0)), signedQuotient))));
14530
+ }
14531
+
14532
+ function applyDivSign(gtBool signA, gtBool signB, gtUint64 quotient) private returns (gtUint64) {
14533
+ gtBool negative = xor(signA, signB);
14534
+ gtInt64 signedQuotient = gtInt64.wrap(gtUint64.unwrap(quotient));
14535
+ return gtUint64.wrap(gtInt64.unwrap(mux(negative, signedQuotient, sub(setPublic64(int64(0)), signedQuotient))));
14536
+ }
14537
+
14538
+ function applyDivSign(gtBool signA, gtBool signB, gtUint128 quotient) private returns (gtUint128) {
14539
+ gtBool negative = xor(signA, signB);
14540
+ gtInt128 signedQuotient = gtInt128.wrap(gtUint128.unwrap(quotient));
14541
+ return gtUint128.wrap(gtInt128.unwrap(mux(negative, signedQuotient, sub(setPublic128(int128(0)), signedQuotient))));
14542
+ }
14543
+
14544
+ function applyDivSign(gtBool signA, gtBool signB, gtUint256 quotient) private returns (gtUint256) {
14545
+ gtBool negative = xor(signA, signB);
14546
+ gtInt256 signedQuotient = gtInt256.wrap(gtUint256.unwrap(quotient));
14547
+ return gtUint256.wrap(gtInt256.unwrap(mux(negative, signedQuotient, sub(setPublic256(int256(0)), signedQuotient))));
14548
+ }
14549
+
14550
+ function signedShr(gtUint8 value, uint8 shift, uint8 width) private returns (gtUint8) {
14551
+ gtUint8 shifted = shr(value, shift);
14552
+ if (shift == 0) return shifted;
14553
+ uint8 mask = shift >= width ? type(uint8).max : uint8(type(uint8).max << (width - shift));
14554
+ gtBool negative = eq(shr(value, width - 1), setPublic8(uint8(1)));
14555
+ return mux(negative, shifted, or(shifted, setPublic8(mask)));
14556
+ }
14557
+
14558
+ function signedShr(gtUint16 value, uint8 shift, uint8 width) private returns (gtUint16) {
14559
+ gtUint16 shifted = shr(value, shift);
14560
+ if (shift == 0) return shifted;
14561
+ uint16 mask = shift >= width ? type(uint16).max : uint16(type(uint16).max << (width - shift));
14562
+ gtBool negative = eq(shr(value, width - 1), setPublic16(uint16(1)));
14563
+ return mux(negative, shifted, or(shifted, setPublic16(mask)));
14564
+ }
14565
+
14566
+ function signedShr(gtUint32 value, uint8 shift, uint8 width) private returns (gtUint32) {
14567
+ gtUint32 shifted = shr(value, shift);
14568
+ if (shift == 0) return shifted;
14569
+ uint32 mask = shift >= width ? type(uint32).max : uint32(type(uint32).max << (width - shift));
14570
+ gtBool negative = eq(shr(value, width - 1), setPublic32(uint32(1)));
14571
+ return mux(negative, shifted, or(shifted, setPublic32(mask)));
14572
+ }
14573
+
14574
+ function signedShr(gtUint64 value, uint8 shift, uint8 width) private returns (gtUint64) {
14575
+ gtUint64 shifted = shr(value, shift);
14576
+ if (shift == 0) return shifted;
14577
+ uint64 mask = shift >= width ? type(uint64).max : uint64(type(uint64).max << (width - shift));
14578
+ gtBool negative = eq(shr(value, width - 1), setPublic64(uint64(1)));
14579
+ return mux(negative, shifted, or(shifted, setPublic64(mask)));
14580
+ }
14581
+
14582
+ function signedShr(gtUint128 value, uint8 shift, uint8 width) private returns (gtUint128) {
14583
+ gtUint128 shifted = shr(value, shift);
14584
+ if (shift == 0) return shifted;
14585
+ uint128 mask = shift >= width ? type(uint128).max : uint128(type(uint128).max << (width - shift));
14586
+ gtBool negative = eq(shr(value, width - 1), setPublic128(uint128(1)));
14587
+ return mux(negative, shifted, or(shifted, setPublic128(mask)));
14588
+ }
14589
+
14590
+ function signedMulResult(gtBool unsignedOverflow, gtBool signA, gtBool signB, gtUint8 product, uint8 maxPositive, uint8 maxNegativeMagnitude) private returns (gtBool, gtInt8) {
14591
+ gtBool negative = xor(signA, signB);
14592
+ gtBool positiveOverflow = and(not(negative), gt(product, setPublic8(maxPositive)));
14593
+ gtBool negativeOverflow = and(negative, gt(product, setPublic8(maxNegativeMagnitude)));
14594
+ gtInt8 signedProduct = gtInt8.wrap(gtUint8.unwrap(product));
14595
+ return (or(unsignedOverflow, or(positiveOverflow, negativeOverflow)), mux(negative, signedProduct, sub(setPublic8(int8(0)), signedProduct)));
14596
+ }
14597
+
14598
+ function signedMulResult(gtBool unsignedOverflow, gtBool signA, gtBool signB, gtUint16 product, uint16 maxPositive, uint16 maxNegativeMagnitude) private returns (gtBool, gtInt16) {
14599
+ gtBool negative = xor(signA, signB);
14600
+ gtBool positiveOverflow = and(not(negative), gt(product, setPublic16(maxPositive)));
14601
+ gtBool negativeOverflow = and(negative, gt(product, setPublic16(maxNegativeMagnitude)));
14602
+ gtInt16 signedProduct = gtInt16.wrap(gtUint16.unwrap(product));
14603
+ return (or(unsignedOverflow, or(positiveOverflow, negativeOverflow)), mux(negative, signedProduct, sub(setPublic16(int16(0)), signedProduct)));
14604
+ }
14605
+
14606
+ function signedMulResult(gtBool unsignedOverflow, gtBool signA, gtBool signB, gtUint32 product, uint32 maxPositive, uint32 maxNegativeMagnitude) private returns (gtBool, gtInt32) {
14607
+ gtBool negative = xor(signA, signB);
14608
+ gtBool positiveOverflow = and(not(negative), gt(product, setPublic32(maxPositive)));
14609
+ gtBool negativeOverflow = and(negative, gt(product, setPublic32(maxNegativeMagnitude)));
14610
+ gtInt32 signedProduct = gtInt32.wrap(gtUint32.unwrap(product));
14611
+ return (or(unsignedOverflow, or(positiveOverflow, negativeOverflow)), mux(negative, signedProduct, sub(setPublic32(int32(0)), signedProduct)));
14612
+ }
14613
+
14614
+ function signedMulResult(gtBool unsignedOverflow, gtBool signA, gtBool signB, gtUint64 product, uint64 maxPositive, uint64 maxNegativeMagnitude) private returns (gtBool, gtInt64) {
14615
+ gtBool negative = xor(signA, signB);
14616
+ gtBool positiveOverflow = and(not(negative), gt(product, setPublic64(maxPositive)));
14617
+ gtBool negativeOverflow = and(negative, gt(product, setPublic64(maxNegativeMagnitude)));
14618
+ gtInt64 signedProduct = gtInt64.wrap(gtUint64.unwrap(product));
14619
+ return (or(unsignedOverflow, or(positiveOverflow, negativeOverflow)), mux(negative, signedProduct, sub(setPublic64(int64(0)), signedProduct)));
14620
+ }
14621
+
14622
+ function signedMulResult(gtBool unsignedOverflow, gtBool signA, gtBool signB, gtUint128 product, uint128 maxPositive, uint128 maxNegativeMagnitude) private returns (gtBool, gtInt128) {
14623
+ gtBool negative = xor(signA, signB);
14624
+ gtBool positiveOverflow = and(not(negative), gt(product, setPublic128(maxPositive)));
14625
+ gtBool negativeOverflow = and(negative, gt(product, setPublic128(maxNegativeMagnitude)));
14626
+ gtInt128 signedProduct = gtInt128.wrap(gtUint128.unwrap(product));
14627
+ return (or(unsignedOverflow, or(positiveOverflow, negativeOverflow)), mux(negative, signedProduct, sub(setPublic128(int128(0)), signedProduct)));
14628
+ }
14629
+
14630
+ function signedMulResult(gtBool unsignedOverflow, gtBool signA, gtBool signB, gtUint256 product, uint256 maxPositive, uint256 maxNegativeMagnitude) private returns (gtBool, gtInt256) {
14631
+ gtBool negative = xor(signA, signB);
14632
+ gtBool positiveOverflow = and(not(negative), gt(product, setPublic256(maxPositive)));
14633
+ gtBool negativeOverflow = and(negative, gt(product, setPublic256(maxNegativeMagnitude)));
14634
+ gtInt256 signedProduct = gtInt256.wrap(gtUint256.unwrap(product));
14635
+ return (or(unsignedOverflow, or(positiveOverflow, negativeOverflow)), mux(negative, signedProduct, sub(setPublic256(int256(0)), signedProduct)));
14636
+ }
14637
+
14638
+ function checkedAbsMul(gtInt128 a, gtInt128 b) private returns (gtUint128) {
14639
+ (, gtUint128 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14640
+ return product;
14641
+ }
14642
+
14643
+ function checkedAbsMul(gtInt256 a, gtInt256 b) private returns (gtUint256) {
14644
+ (, gtUint256 product) = checkedMulWithOverflowBit(absUnsigned(a), absUnsigned(b));
14645
+ return product;
14646
+ }
14647
+
14648
+ function absUnsigned(gtInt8 a) private returns (gtUint8) { return gtUint8.wrap(gtInt8.unwrap(mux(signBit(a), a, sub(setPublic8(int8(0)), a)))); }
14649
+ function absUnsigned(gtInt16 a) private returns (gtUint16) { return gtUint16.wrap(gtInt16.unwrap(mux(signBit(a), a, sub(setPublic16(int16(0)), a)))); }
14650
+ function absUnsigned(gtInt32 a) private returns (gtUint32) { return gtUint32.wrap(gtInt32.unwrap(mux(signBit(a), a, sub(setPublic32(int32(0)), a)))); }
14651
+ function absUnsigned(gtInt64 a) private returns (gtUint64) { return gtUint64.wrap(gtInt64.unwrap(mux(signBit(a), a, sub(setPublic64(int64(0)), a)))); }
14652
+ function absUnsigned(gtInt128 a) private returns (gtUint128) { return gtUint128.wrap(gtInt128.unwrap(mux(signBit(a), a, sub(setPublic128(int128(0)), a)))); }
14653
+ function absUnsigned(gtInt256 a) private returns (gtUint256) { return gtUint256.wrap(gtInt256.unwrap(mux(signBit(a), a, sub(setPublic256(int256(0)), a)))); }
14654
+
14655
+ function signBit(gtInt8 a) private returns (gtBool) { return eq(shr(gtUint8.wrap(gtInt8.unwrap(a)), 7), setPublic8(uint8(1))); }
14656
+ function signBit(gtInt16 a) private returns (gtBool) { return eq(shr(gtUint16.wrap(gtInt16.unwrap(a)), 15), setPublic16(uint16(1))); }
14657
+ function signBit(gtInt32 a) private returns (gtBool) { return eq(shr(gtUint32.wrap(gtInt32.unwrap(a)), 31), setPublic32(uint32(1))); }
14658
+ function signBit(gtInt64 a) private returns (gtBool) { return eq(shr(gtUint64.wrap(gtInt64.unwrap(a)), 63), setPublic64(uint64(1))); }
14659
+ function signBit(gtInt128 a) private returns (gtBool) { return eq(shr(gtUint128.wrap(gtInt128.unwrap(a)), 127), setPublic128(uint128(1))); }
14660
+ function signBit(gtInt256 a) private returns (gtBool) { return eq(shr(gtUint256.wrap(gtInt256.unwrap(a)), 255), setPublic256(uint256(1))); }
14052
14661
 
14053
14662
  }