@coti-io/coti-contracts 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +19 -15
- package/README.md +3 -1
- package/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.sol +452 -0
- package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.sol +490 -0
- package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +432 -0
- package/contracts/disperse/disperseToken/MintDisperser.sol +120 -0
- package/contracts/disperse/disperseToken/TokenDisperser.sol +139 -0
- package/contracts/messaging/PrivateMessaging.sol +456 -0
- package/contracts/mocks/messaging/PrivateMessagingHarness.sol +54 -0
- package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +31 -0
- package/contracts/mocks/token/ERC20DecimalsMock.sol +21 -0
- package/contracts/mocks/token/ERC20Mock.sol +19 -0
- package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
- package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +18 -0
- package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +44 -0
- package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +23 -0
- package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +29 -0
- package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +9 -4
- package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +39 -0
- package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +29 -0
- package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +18 -0
- package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +12 -0
- package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +123 -0
- package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +122 -0
- package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +65 -0
- package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +65 -0
- package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +64 -0
- package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +64 -0
- package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +98 -0
- package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +98 -0
- package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +44 -0
- package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +44 -0
- package/contracts/mocks/utils/mpc/MinimalImplementation.sol +55 -0
- package/contracts/mocks/utils/mpc/MinimalProxy.sol +27 -0
- package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +267 -0
- package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +334 -0
- package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +24 -0
- package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +24 -0
- package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +93 -0
- package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +116 -0
- package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +157 -0
- package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +133 -0
- package/contracts/mocks/utils/mpc/PrivacyProxy.sol +137 -0
- package/contracts/mocks/utils/mpc/Random128TestsContract.sol +32 -0
- package/contracts/mocks/utils/mpc/Random256TestsContract.sol +32 -0
- package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +36 -0
- package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +36 -0
- package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +29 -0
- package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +29 -0
- package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +32 -0
- package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +32 -0
- package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +59 -0
- package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +63 -0
- package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +99 -0
- package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +7 -6
- package/contracts/node/CotiNodeRewards.sol +199 -0
- package/contracts/node/SoulboundNodeNFT.sol +519 -0
- package/contracts/oracle/CotiPriceConsumer.sol +103 -0
- package/contracts/oracle/ICotiPriceConsumer.sol +15 -0
- package/contracts/oracle/IStdReference.sol +26 -0
- package/contracts/privacyBridge/PrivacyBridge.sol +600 -0
- package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +316 -0
- package/contracts/privacyBridge/PrivacyBridgeERC20.sol +333 -0
- package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +22 -0
- package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +23 -0
- package/contracts/privacyBridge/PrivacyBridgeWADA.sol +23 -0
- package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +23 -0
- package/contracts/privacyBridge/PrivacyBridgeWETH.sol +23 -0
- package/contracts/privacyBridge/PrivacyBridgegCoti.sol +23 -0
- package/contracts/token/PrivateERC20/IPrivateERC20.sol +273 -40
- package/contracts/token/PrivateERC20/ITokenReceiver.sol +17 -0
- package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +20 -0
- package/contracts/token/PrivateERC20/PrivateERC20.sol +861 -152
- package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +17 -0
- package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +13 -0
- package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +17 -0
- package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +17 -0
- package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +17 -0
- package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +17 -0
- package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +13 -0
- package/contracts/utils/mpc/MpcCore.sol +10780 -4962
- package/contracts/utils/mpc/MpcInterface.sol +7 -2
- package/hardhat/gasPriceBump.ts +60 -0
- package/hardhat.config.ts +63 -12
- package/package.json +22 -4
- package/scripts/add-bridge-operators.cjs +87 -0
- package/scripts/deploy-coti-price-consumer-mainnet.cjs +49 -0
- package/scripts/deployCotiNodeRewards.ts +51 -0
- package/scripts/deploySoulboundNodeNFT.ts +57 -0
- package/scripts/redeploy-private-and-bridges.cjs +201 -0
- package/scripts/set-bridge-limits-mainnet.cjs +177 -0
- package/scripts/verify-mainnet-private-bridges.cjs +289 -0
- package/sonar-project.properties +11 -0
- package/test/messaging/PrivateMessaging.test.ts +158 -0
- package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +1663 -0
- package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +250 -0
- package/test/token/PrivateERC20/PrivateERC20.test.ts +1109 -268
- package/test/utils/mpc/Bitwise128.test.ts +92 -0
- package/test/utils/mpc/Bitwise256.test.ts +101 -0
- package/test/utils/mpc/BuildInputText128.test.ts +398 -0
- package/test/utils/mpc/CheckedArithmetic128.test.ts +45 -0
- package/test/utils/mpc/CheckedArithmetic256.test.ts +45 -0
- package/test/utils/mpc/Comparison128.test.ts +48 -0
- package/test/utils/mpc/Comparison256.test.ts +48 -0
- package/test/utils/mpc/InvalidCiphertext.test.ts +179 -0
- package/test/utils/mpc/InvalidCiphertext128.test.ts +179 -0
- package/test/utils/mpc/InvalidCiphertext256.test.ts +201 -0
- package/test/utils/mpc/InvalidTransfer128.test.ts +166 -0
- package/test/utils/mpc/InvalidTransfer256.test.ts +158 -0
- package/test/utils/mpc/MinMax128.test.ts +44 -0
- package/test/utils/mpc/MinMax256.test.ts +44 -0
- package/test/utils/mpc/MinimalProxyDemo.test.ts +280 -0
- package/test/utils/mpc/MpcOperations.test.ts +589 -0
- package/test/utils/mpc/MpcOperations128.test.ts +632 -0
- package/test/utils/mpc/Mux128.test.ts +41 -0
- package/test/utils/mpc/Mux256.test.ts +41 -0
- package/test/utils/mpc/NegativeCases.test.ts +478 -0
- package/test/utils/mpc/NegativeCases128.test.ts +237 -0
- package/test/utils/mpc/NegativeCases256.test.ts +236 -0
- package/test/utils/mpc/OnBoard128.test.ts +90 -0
- package/test/utils/mpc/OnBoard256.test.ts +114 -0
- package/test/utils/mpc/Precompile128.test.ts +51 -0
- package/test/utils/mpc/Precompile256.test.ts +115 -0
- package/test/utils/mpc/ProxyValidation.test.ts +199 -0
- package/test/utils/mpc/Random128.test.ts +47 -0
- package/test/utils/mpc/Random256.test.ts +47 -0
- package/test/utils/mpc/Shift128.test.ts +41 -0
- package/test/utils/mpc/Shift256.test.ts +41 -0
- package/test/utils/mpc/Transfer128.test.ts +46 -0
- package/test/utils/mpc/Transfer256.test.ts +46 -0
- package/test/utils/mpc/TransferWithAllowance128.test.ts +48 -0
- package/test/utils/mpc/TransferWithAllowance256.test.ts +48 -0
- package/test/utils/mpc/UpgradeablePrivacyProxy.test.ts +307 -0
- package/test/utils/mpc/ValidateCiphertext.test.ts +221 -0
- package/test/utils/mpc/ValidateCiphertext256.test.ts +161 -0
- package/test/utils/mpc/ValidateCiphertext256Decryption.test.ts +383 -0
- package/test/utils/mpc/WalletEncryptionFailures.test.ts +494 -0
- package/test/utils/privateErc20Helpers.ts +97 -0
- package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +324 -0
- package/typechain-types/@openzeppelin/contracts/access/AccessControlEnumerable.ts +361 -0
- package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +292 -0
- package/typechain-types/@openzeppelin/contracts/access/IAccessControlEnumerable.ts +329 -0
- package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
- package/typechain-types/@openzeppelin/contracts/access/index.ts +8 -0
- package/typechain-types/@openzeppelin/contracts/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/security/Pausable.ts +150 -0
- package/typechain-types/@openzeppelin/contracts/security/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +330 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +286 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +7 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/ERC721.ts +420 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +420 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +3 -0
- package/typechain-types/@openzeppelin/contracts/token/index.ts +2 -0
- package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.ts +679 -0
- package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.ts +735 -0
- package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.ts +734 -0
- package/typechain-types/contracts/disperse/coinByRatio/index.ts +6 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +228 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +6 -0
- package/typechain-types/contracts/disperse/disperseToken/TokenDisperser.ts +191 -0
- package/typechain-types/contracts/disperse/disperseToken/index.ts +6 -0
- package/typechain-types/contracts/disperse/index.ts +7 -0
- package/typechain-types/contracts/index.ts +10 -0
- package/typechain-types/contracts/messaging/PrivateMessaging.ts +871 -0
- package/typechain-types/contracts/messaging/index.ts +4 -0
- package/typechain-types/contracts/mocks/index.ts +4 -0
- package/typechain-types/contracts/mocks/messaging/PrivateMessagingHarness.ts +951 -0
- package/typechain-types/contracts/mocks/messaging/index.ts +4 -0
- package/typechain-types/contracts/mocks/oracle/CotiPriceConsumerMock.ts +163 -0
- package/typechain-types/contracts/mocks/oracle/index.ts +4 -0
- package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +349 -0
- package/typechain-types/contracts/mocks/token/ERC20Mock.ts +368 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.ts +108 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +1892 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +1296 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +1270 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.ts +166 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +827 -78
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted.ts +102 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock.ts +154 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.ts +155 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.ts +107 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.ts +100 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +10 -0
- package/typechain-types/contracts/mocks/token/index.ts +2 -0
- package/typechain-types/contracts/mocks/utils/mpc/{Arithmetic128BitTestsContract.ts → Arithmetic128TestsContract.ts} +96 -126
- package/typechain-types/contracts/mocks/utils/mpc/{Arithmetic256BitTestsContract.ts → Arithmetic256TestsContract.ts} +97 -133
- package/typechain-types/contracts/mocks/utils/mpc/{Bitwise128BitTestsContract.ts → Bitwise128TestsContract.ts} +52 -59
- package/typechain-types/contracts/mocks/utils/mpc/{Bitwise256BitTestsContract.ts → Bitwise256TestsContract.ts} +52 -59
- package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
- package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
- package/typechain-types/contracts/mocks/utils/mpc/{Comparison128BitTestsContract.ts → Comparison128TestsContract.ts} +115 -97
- package/typechain-types/contracts/mocks/utils/mpc/{Comparison256BitTestsContract.ts → Comparison256TestsContract.ts} +115 -97
- package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
- package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
- package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
- package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
- package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
- package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
- package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
- package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
- package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
- package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
- package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
- package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
- package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
- package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
- package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
- package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
- package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
- package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
- package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
- package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
- package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
- package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
- package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
- package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
- package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -8
- package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +6 -6
- package/typechain-types/contracts/node/CotiNodeRewards.ts +566 -0
- package/typechain-types/contracts/node/SoulboundNodeNFT.sol/IERC5192.ts +123 -0
- package/typechain-types/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT.ts +975 -0
- package/typechain-types/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
- package/typechain-types/contracts/node/index.ts +6 -0
- package/typechain-types/contracts/oracle/CotiPriceConsumer.ts +256 -0
- package/typechain-types/contracts/oracle/ICotiPriceConsumer.ts +119 -0
- package/typechain-types/contracts/oracle/IStdReference.ts +136 -0
- package/typechain-types/contracts/oracle/index.ts +6 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +1628 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +1870 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals.ts +84 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +1892 -0
- package/typechain-types/contracts/privacyBridge/index.ts +13 -0
- package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +507 -70
- package/typechain-types/contracts/token/PrivateERC20/ITokenReceiver.ts +100 -0
- package/typechain-types/contracts/token/PrivateERC20/ITokenReceiverEncrypted.ts +99 -0
- package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +833 -68
- package/typechain-types/contracts/token/PrivateERC20/index.ts +4 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/index.ts +10 -0
- package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
- package/typechain-types/factories/@openzeppelin/contracts/access/AccessControlEnumerable__factory.ts +276 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +229 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControlEnumerable__factory.ts +244 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +197 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +8 -0
- package/typechain-types/factories/@openzeppelin/contracts/index.ts +2 -0
- package/typechain-types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +61 -0
- package/typechain-types/factories/@openzeppelin/contracts/security/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +356 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +247 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +416 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +355 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +2 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +791 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +711 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +6 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable__factory.ts +35 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +203 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +6 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
- package/typechain-types/factories/contracts/disperse/index.ts +5 -0
- package/typechain-types/factories/contracts/index.ts +5 -0
- package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1035 -0
- package/typechain-types/factories/contracts/messaging/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/index.ts +2 -0
- package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1161 -0
- package/typechain-types/factories/contracts/mocks/messaging/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/oracle/CotiPriceConsumerMock__factory.ts +159 -0
- package/typechain-types/factories/contracts/mocks/oracle/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +394 -0
- package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +392 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock__factory.ts +125 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +1797 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +1514 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +1466 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +165 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +975 -127
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted__factory.ts +54 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock__factory.ts +159 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock__factory.ts +164 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock__factory.ts +130 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock__factory.ts +102 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +9 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/token/index.ts +2 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -8
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +10 -28
- package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +549 -0
- package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/IERC5192__factory.ts +54 -0
- package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +947 -0
- package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/node/index.ts +5 -0
- package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
- package/typechain-types/factories/contracts/oracle/CotiPriceConsumer__factory.ts +295 -0
- package/typechain-types/factories/contracts/oracle/ICotiPriceConsumer__factory.ts +73 -0
- package/typechain-types/factories/contracts/oracle/IStdReference__factory.ts +107 -0
- package/typechain-types/factories/contracts/oracle/index.ts +6 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +1676 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals__factory.ts +38 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +1678 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +1782 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +1782 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +1782 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +1782 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +1782 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +1367 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +1782 -0
- package/typechain-types/factories/contracts/privacyBridge/index.ts +12 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +639 -61
- package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiverEncrypted__factory.ts +53 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiver__factory.ts +54 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +986 -120
- package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +3 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +1445 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +1451 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +1442 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +1445 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +1445 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +1445 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +1451 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/index.ts +10 -0
- package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
- package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
- package/typechain-types/hardhat.d.ts +1772 -278
- package/typechain-types/index.ts +182 -16
- package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +0 -260
- package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +0 -264
- package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +0 -91
- package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +0 -91
- package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +0 -158
- package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +0 -158
- package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +0 -185
- package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +0 -190
- package/contracts/mocks/utils/mpc/README.md +0 -486
- package/test/utils/mpc/Unsigned128BitIntegers.test.ts +0 -945
- package/test/utils/mpc/Unsigned256BitIntegers.test.ts +0 -1124
- package/test/utils/mpc/helpers.ts +0 -77
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +0 -302
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +0 -322
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +0 -349
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +0 -364
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +0 -182
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +0 -182
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +0 -255
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +0 -255
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +0 -332
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +0 -380
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
import hre from "hardhat"
|
|
2
|
+
import { expect } from "chai"
|
|
3
|
+
import { setupAccounts } from "../accounts"
|
|
4
|
+
import { itUint, Wallet, ctUint } from "@coti-io/coti-ethers"
|
|
5
|
+
import { MpcOperations128TestContract } from "../../../typechain-types"
|
|
6
|
+
|
|
7
|
+
const GAS_LIMIT = 12000000
|
|
8
|
+
|
|
9
|
+
async function deploy() {
|
|
10
|
+
const [owner] = await setupAccounts()
|
|
11
|
+
|
|
12
|
+
const contractFactory = await hre.ethers.getContractFactory("MpcOperations128TestContract", owner as any)
|
|
13
|
+
const contract = await contractFactory.deploy({ gasLimit: GAS_LIMIT })
|
|
14
|
+
await contract.waitForDeployment()
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
contract,
|
|
18
|
+
contractAddress: await contract.getAddress(),
|
|
19
|
+
owner
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe("MPC Operations uint128 with offBoardToUser - User Can Decrypt Results", function () {
|
|
24
|
+
this.timeout(300000) // 5 minutes timeout
|
|
25
|
+
let contract: MpcOperations128TestContract
|
|
26
|
+
let contractAddress: string
|
|
27
|
+
let owner: Wallet
|
|
28
|
+
|
|
29
|
+
before(async function () {
|
|
30
|
+
const deployment = await deploy()
|
|
31
|
+
contract = deployment.contract
|
|
32
|
+
contractAddress = deployment.contractAddress
|
|
33
|
+
owner = deployment.owner
|
|
34
|
+
|
|
35
|
+
const onboardInfo = owner.getUserOnboardInfo()
|
|
36
|
+
if (!onboardInfo || !onboardInfo.aesKey) {
|
|
37
|
+
throw new Error("User AES key not found. Please onboard the user first.")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
console.log("\n" + "=".repeat(80))
|
|
41
|
+
console.log("🔐 MPC OPERATIONS uint128 TEST SETUP")
|
|
42
|
+
console.log("=".repeat(80))
|
|
43
|
+
console.log(`Contract Address: ${contractAddress}`)
|
|
44
|
+
console.log(`Owner Address: ${owner.address}`)
|
|
45
|
+
console.log(`User AES Key: ${onboardInfo.aesKey.substring(0, 8)}...${onboardInfo.aesKey.substring(onboardInfo.aesKey.length - 8)}`)
|
|
46
|
+
console.log("=".repeat(80) + "\n")
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
describe("Arithmetic Operations - uint128", function () {
|
|
50
|
+
it("Should perform addition and user can decrypt result", async function () {
|
|
51
|
+
const a = BigInt(1000)
|
|
52
|
+
const b = BigInt(500)
|
|
53
|
+
const expected = a + b
|
|
54
|
+
console.log(`\n➕ Testing uint128: ${a} + ${b} = ${expected}`)
|
|
55
|
+
|
|
56
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.add128.fragment.selector) as itUint
|
|
57
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.add128.fragment.selector) as itUint
|
|
58
|
+
|
|
59
|
+
console.log("📝 Performing addition on contract...")
|
|
60
|
+
const tx = await contract.add128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
61
|
+
const receipt = await tx.wait()
|
|
62
|
+
expect(receipt?.status).to.equal(1)
|
|
63
|
+
|
|
64
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
65
|
+
try {
|
|
66
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
67
|
+
} catch {
|
|
68
|
+
return false
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
if (resultEvent) {
|
|
73
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
74
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
75
|
+
|
|
76
|
+
console.log("📝 User decrypting result...")
|
|
77
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
78
|
+
|
|
79
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
80
|
+
expect(decrypted).to.equal(expected)
|
|
81
|
+
console.log(` ✅ SUCCESS: Addition verified!\n`)
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it("Should perform subtraction and user can decrypt result", async function () {
|
|
86
|
+
const a = BigInt(1000)
|
|
87
|
+
const b = BigInt(300)
|
|
88
|
+
const expected = a - b
|
|
89
|
+
console.log(`\n➖ Testing uint128: ${a} - ${b} = ${expected}`)
|
|
90
|
+
|
|
91
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.sub128.fragment.selector) as itUint
|
|
92
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.sub128.fragment.selector) as itUint
|
|
93
|
+
|
|
94
|
+
const tx = await contract.sub128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
95
|
+
const receipt = await tx.wait()
|
|
96
|
+
expect(receipt?.status).to.equal(1)
|
|
97
|
+
|
|
98
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
99
|
+
try {
|
|
100
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
101
|
+
} catch {
|
|
102
|
+
return false
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
if (resultEvent) {
|
|
107
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
108
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
109
|
+
|
|
110
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
111
|
+
|
|
112
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
113
|
+
expect(decrypted).to.equal(expected)
|
|
114
|
+
console.log(` ✅ SUCCESS: Subtraction verified!\n`)
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
it("Should perform multiplication and user can decrypt result", async function () {
|
|
119
|
+
const a = BigInt(100)
|
|
120
|
+
const b = BigInt(50)
|
|
121
|
+
const expected = a * b
|
|
122
|
+
console.log(`\n✖️ Testing uint128: ${a} * ${b} = ${expected}`)
|
|
123
|
+
|
|
124
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.mul128.fragment.selector) as itUint
|
|
125
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.mul128.fragment.selector) as itUint
|
|
126
|
+
|
|
127
|
+
const tx = await contract.mul128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
128
|
+
const receipt = await tx.wait()
|
|
129
|
+
expect(receipt?.status).to.equal(1)
|
|
130
|
+
|
|
131
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
132
|
+
try {
|
|
133
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
134
|
+
} catch {
|
|
135
|
+
return false
|
|
136
|
+
}
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
if (resultEvent) {
|
|
140
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
141
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
142
|
+
|
|
143
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
144
|
+
|
|
145
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
146
|
+
expect(decrypted).to.equal(expected)
|
|
147
|
+
console.log(` ✅ SUCCESS: Multiplication verified!\n`)
|
|
148
|
+
}
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
it("Should perform division and user can decrypt result", async function () {
|
|
152
|
+
const a = BigInt(1000)
|
|
153
|
+
const b = BigInt(10)
|
|
154
|
+
const expected = a / b
|
|
155
|
+
console.log(`\n➗ Testing uint128: ${a} / ${b} = ${expected}`)
|
|
156
|
+
|
|
157
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.div128.fragment.selector) as itUint
|
|
158
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.div128.fragment.selector) as itUint
|
|
159
|
+
|
|
160
|
+
const tx = await contract.div128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
161
|
+
const receipt = await tx.wait()
|
|
162
|
+
expect(receipt?.status).to.equal(1)
|
|
163
|
+
|
|
164
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
165
|
+
try {
|
|
166
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
167
|
+
} catch {
|
|
168
|
+
return false
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
if (resultEvent) {
|
|
173
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
174
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
175
|
+
|
|
176
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
177
|
+
|
|
178
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
179
|
+
expect(decrypted).to.equal(expected)
|
|
180
|
+
console.log(` ✅ SUCCESS: Division verified!\n`)
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
it("Should perform modulo and user can decrypt result", async function () {
|
|
185
|
+
const a = BigInt(1000)
|
|
186
|
+
const b = BigInt(300)
|
|
187
|
+
const expected = a % b
|
|
188
|
+
console.log(`\n🔢 Testing uint128: ${a} % ${b} = ${expected}`)
|
|
189
|
+
|
|
190
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.rem128.fragment.selector) as itUint
|
|
191
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.rem128.fragment.selector) as itUint
|
|
192
|
+
|
|
193
|
+
const tx = await contract.rem128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
194
|
+
const receipt = await tx.wait()
|
|
195
|
+
expect(receipt?.status).to.equal(1)
|
|
196
|
+
|
|
197
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
198
|
+
try {
|
|
199
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
200
|
+
} catch {
|
|
201
|
+
return false
|
|
202
|
+
}
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
if (resultEvent) {
|
|
206
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
207
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
208
|
+
|
|
209
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
210
|
+
|
|
211
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
212
|
+
expect(decrypted).to.equal(expected)
|
|
213
|
+
console.log(` ✅ SUCCESS: Modulo verified!\n`)
|
|
214
|
+
}
|
|
215
|
+
})
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
describe("Bitwise Operations - uint128", function () {
|
|
219
|
+
it("Should perform AND operation and user can decrypt result", async function () {
|
|
220
|
+
const a = BigInt(0xFF) // 255
|
|
221
|
+
const b = BigInt(0xF0) // 240
|
|
222
|
+
const expected = a & b // 240
|
|
223
|
+
console.log(`\n& Testing uint128: ${a} & ${b} = ${expected}`)
|
|
224
|
+
|
|
225
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.and128.fragment.selector) as itUint
|
|
226
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.and128.fragment.selector) as itUint
|
|
227
|
+
|
|
228
|
+
const tx = await contract.and128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
229
|
+
const receipt = await tx.wait()
|
|
230
|
+
expect(receipt?.status).to.equal(1)
|
|
231
|
+
|
|
232
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
233
|
+
try {
|
|
234
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
235
|
+
} catch {
|
|
236
|
+
return false
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
if (resultEvent) {
|
|
241
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
242
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
243
|
+
|
|
244
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
245
|
+
|
|
246
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
247
|
+
expect(decrypted).to.equal(expected)
|
|
248
|
+
console.log(` ✅ SUCCESS: AND verified!\n`)
|
|
249
|
+
}
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
it("Should perform OR operation and user can decrypt result", async function () {
|
|
253
|
+
const a = BigInt(0xF0) // 240
|
|
254
|
+
const b = BigInt(0x0F) // 15
|
|
255
|
+
const expected = a | b // 255
|
|
256
|
+
console.log(`\n| Testing uint128: ${a} | ${b} = ${expected}`)
|
|
257
|
+
|
|
258
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.or128.fragment.selector) as itUint
|
|
259
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.or128.fragment.selector) as itUint
|
|
260
|
+
|
|
261
|
+
const tx = await contract.or128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
262
|
+
const receipt = await tx.wait()
|
|
263
|
+
expect(receipt?.status).to.equal(1)
|
|
264
|
+
|
|
265
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
266
|
+
try {
|
|
267
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
268
|
+
} catch {
|
|
269
|
+
return false
|
|
270
|
+
}
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
if (resultEvent) {
|
|
274
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
275
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
276
|
+
|
|
277
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
278
|
+
|
|
279
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
280
|
+
expect(decrypted).to.equal(expected)
|
|
281
|
+
console.log(` ✅ SUCCESS: OR verified!\n`)
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
it("Should perform XOR operation and user can decrypt result", async function () {
|
|
286
|
+
const a = BigInt(0xFF) // 255
|
|
287
|
+
const b = BigInt(0xF0) // 240
|
|
288
|
+
const expected = a ^ b // 15
|
|
289
|
+
console.log(`\n^ Testing uint128: ${a} ^ ${b} = ${expected}`)
|
|
290
|
+
|
|
291
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.xor128.fragment.selector) as itUint
|
|
292
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.xor128.fragment.selector) as itUint
|
|
293
|
+
|
|
294
|
+
const tx = await contract.xor128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
295
|
+
const receipt = await tx.wait()
|
|
296
|
+
expect(receipt?.status).to.equal(1)
|
|
297
|
+
|
|
298
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
299
|
+
try {
|
|
300
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
301
|
+
} catch {
|
|
302
|
+
return false
|
|
303
|
+
}
|
|
304
|
+
})
|
|
305
|
+
|
|
306
|
+
if (resultEvent) {
|
|
307
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
308
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
309
|
+
|
|
310
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
311
|
+
|
|
312
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
313
|
+
expect(decrypted).to.equal(expected)
|
|
314
|
+
console.log(` ✅ SUCCESS: XOR verified!\n`)
|
|
315
|
+
}
|
|
316
|
+
})
|
|
317
|
+
|
|
318
|
+
it("Should perform shift left and user can decrypt result", async function () {
|
|
319
|
+
const a = BigInt(10)
|
|
320
|
+
const bits = 2
|
|
321
|
+
const expected = a << BigInt(bits) // 40
|
|
322
|
+
console.log(`\n<< Testing uint128: ${a} << ${bits} = ${expected}`)
|
|
323
|
+
|
|
324
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.shl128.fragment.selector) as itUint
|
|
325
|
+
|
|
326
|
+
const tx = await contract.shl128(itA, bits, owner.address, { gasLimit: GAS_LIMIT })
|
|
327
|
+
const receipt = await tx.wait()
|
|
328
|
+
expect(receipt?.status).to.equal(1)
|
|
329
|
+
|
|
330
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
331
|
+
try {
|
|
332
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
333
|
+
} catch {
|
|
334
|
+
return false
|
|
335
|
+
}
|
|
336
|
+
})
|
|
337
|
+
|
|
338
|
+
if (resultEvent) {
|
|
339
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
340
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
341
|
+
|
|
342
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
343
|
+
|
|
344
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
345
|
+
expect(decrypted).to.equal(expected)
|
|
346
|
+
console.log(` ✅ SUCCESS: Shift left verified!\n`)
|
|
347
|
+
}
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
it("Should perform shift right and user can decrypt result", async function () {
|
|
351
|
+
const a = BigInt(40)
|
|
352
|
+
const bits = 2
|
|
353
|
+
const expected = a >> BigInt(bits) // 10
|
|
354
|
+
console.log(`\n>> Testing uint128: ${a} >> ${bits} = ${expected}`)
|
|
355
|
+
|
|
356
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.shr128.fragment.selector) as itUint
|
|
357
|
+
|
|
358
|
+
const tx = await contract.shr128(itA, bits, owner.address, { gasLimit: GAS_LIMIT })
|
|
359
|
+
const receipt = await tx.wait()
|
|
360
|
+
expect(receipt?.status).to.equal(1)
|
|
361
|
+
|
|
362
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
363
|
+
try {
|
|
364
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
365
|
+
} catch {
|
|
366
|
+
return false
|
|
367
|
+
}
|
|
368
|
+
})
|
|
369
|
+
|
|
370
|
+
if (resultEvent) {
|
|
371
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
372
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
373
|
+
|
|
374
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
375
|
+
|
|
376
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
377
|
+
expect(decrypted).to.equal(expected)
|
|
378
|
+
console.log(` ✅ SUCCESS: Shift right verified!\n`)
|
|
379
|
+
}
|
|
380
|
+
})
|
|
381
|
+
})
|
|
382
|
+
|
|
383
|
+
describe("Large uint128 Values (> 64-bit)", function () {
|
|
384
|
+
it("Should handle values at uint64 boundary", async function () {
|
|
385
|
+
const maxUint64 = BigInt("18446744073709551615") // 2^64 - 1
|
|
386
|
+
const a = maxUint64
|
|
387
|
+
const b = BigInt(1)
|
|
388
|
+
const expected = a + b // 2^64 (requires > 64 bits)
|
|
389
|
+
console.log(`\n➕ Testing uint128 boundary: ${a} + ${b}`)
|
|
390
|
+
console.log(` Expected: ${expected} (requires > 64 bits)`)
|
|
391
|
+
|
|
392
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.add128.fragment.selector) as itUint
|
|
393
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.add128.fragment.selector) as itUint
|
|
394
|
+
|
|
395
|
+
const tx = await contract.add128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
396
|
+
const receipt = await tx.wait()
|
|
397
|
+
expect(receipt?.status).to.equal(1)
|
|
398
|
+
|
|
399
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
400
|
+
try {
|
|
401
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
402
|
+
} catch {
|
|
403
|
+
return false
|
|
404
|
+
}
|
|
405
|
+
})
|
|
406
|
+
|
|
407
|
+
if (resultEvent) {
|
|
408
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
409
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
410
|
+
|
|
411
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
412
|
+
|
|
413
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
414
|
+
expect(decrypted).to.equal(expected)
|
|
415
|
+
console.log(` ✅ SUCCESS: uint64 boundary crossed!\n`)
|
|
416
|
+
}
|
|
417
|
+
})
|
|
418
|
+
|
|
419
|
+
it("Should handle large uint128 multiplication", async function () {
|
|
420
|
+
const a = BigInt("4294967296") // 2^32
|
|
421
|
+
const b = BigInt("4294967296") // 2^32
|
|
422
|
+
const expected = a * b // 2^64
|
|
423
|
+
console.log(`\n✖️ Testing large uint128: ${a} * ${b}`)
|
|
424
|
+
console.log(` Expected: ${expected}`)
|
|
425
|
+
|
|
426
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.mul128.fragment.selector) as itUint
|
|
427
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.mul128.fragment.selector) as itUint
|
|
428
|
+
|
|
429
|
+
const tx = await contract.mul128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
430
|
+
const receipt = await tx.wait()
|
|
431
|
+
expect(receipt?.status).to.equal(1)
|
|
432
|
+
|
|
433
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
434
|
+
try {
|
|
435
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
436
|
+
} catch {
|
|
437
|
+
return false
|
|
438
|
+
}
|
|
439
|
+
})
|
|
440
|
+
|
|
441
|
+
if (resultEvent) {
|
|
442
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
443
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
444
|
+
|
|
445
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
446
|
+
|
|
447
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
448
|
+
expect(decrypted).to.equal(expected)
|
|
449
|
+
console.log(` ✅ SUCCESS: Large multiplication verified!\n`)
|
|
450
|
+
}
|
|
451
|
+
})
|
|
452
|
+
|
|
453
|
+
it("Should handle large uint64-range values in uint128 context", async function () {
|
|
454
|
+
// Use max uint64 value (largest value supported by current encryption)
|
|
455
|
+
const largeValue = BigInt("18446744073709551615") // 2^64 - 1 (max uint64)
|
|
456
|
+
const mask = BigInt(0xFFFFFFFF)
|
|
457
|
+
const expected = largeValue & mask
|
|
458
|
+
|
|
459
|
+
console.log(`\n& Testing large uint64 value in uint128 context`)
|
|
460
|
+
console.log(` Using: ${largeValue} (max uint64)`)
|
|
461
|
+
|
|
462
|
+
const itA = await owner.encryptValue(largeValue, contractAddress, contract.and128.fragment.selector) as itUint
|
|
463
|
+
const itB = await owner.encryptValue(mask, contractAddress, contract.and128.fragment.selector) as itUint
|
|
464
|
+
|
|
465
|
+
const tx = await contract.and128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
466
|
+
const receipt = await tx.wait()
|
|
467
|
+
expect(receipt?.status).to.equal(1)
|
|
468
|
+
|
|
469
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
470
|
+
try {
|
|
471
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
472
|
+
} catch {
|
|
473
|
+
return false
|
|
474
|
+
}
|
|
475
|
+
})
|
|
476
|
+
|
|
477
|
+
if (resultEvent) {
|
|
478
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
479
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
480
|
+
|
|
481
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
482
|
+
|
|
483
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
484
|
+
expect(decrypted).to.equal(expected)
|
|
485
|
+
console.log(` ✅ SUCCESS: Large uint64 operation in uint128 context verified!\n`)
|
|
486
|
+
}
|
|
487
|
+
})
|
|
488
|
+
|
|
489
|
+
it("Should handle full 128-bit range with prepareIT", async function () {
|
|
490
|
+
// Test with 100-bit value (requires full uint128 encryption)
|
|
491
|
+
const largeValue = BigInt("1267650600228229401496703205376") // 2^100
|
|
492
|
+
const small = BigInt(1000)
|
|
493
|
+
const expected = largeValue + small
|
|
494
|
+
|
|
495
|
+
console.log(`\n➕ Testing FULL uint128 range with prepareIT`)
|
|
496
|
+
console.log(` Using 100-bit value: ${largeValue}`)
|
|
497
|
+
console.log(` Expected: ${expected}`)
|
|
498
|
+
|
|
499
|
+
const itA = await owner.encryptValue(largeValue, contractAddress, contract.add128.fragment.selector) as itUint
|
|
500
|
+
const itB = await owner.encryptValue(small, contractAddress, contract.add128.fragment.selector) as itUint
|
|
501
|
+
|
|
502
|
+
const tx = await contract.add128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
503
|
+
const receipt = await tx.wait()
|
|
504
|
+
expect(receipt?.status).to.equal(1)
|
|
505
|
+
|
|
506
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
507
|
+
try {
|
|
508
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
509
|
+
} catch {
|
|
510
|
+
return false
|
|
511
|
+
}
|
|
512
|
+
})
|
|
513
|
+
|
|
514
|
+
if (resultEvent) {
|
|
515
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
516
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
517
|
+
|
|
518
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
519
|
+
|
|
520
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
521
|
+
expect(decrypted).to.equal(expected)
|
|
522
|
+
console.log(` ✅ SUCCESS: FULL 128-bit range verified with prepareIT!\n`)
|
|
523
|
+
}
|
|
524
|
+
})
|
|
525
|
+
|
|
526
|
+
it("Should handle near-max uint128 with prepareIT", async function () {
|
|
527
|
+
// Test with value close to max uint128
|
|
528
|
+
const nearMax = BigInt("170141183460469231731687303715884105727") // 2^127 - 1
|
|
529
|
+
const one = BigInt(1)
|
|
530
|
+
const expected = nearMax + one // 2^127
|
|
531
|
+
|
|
532
|
+
console.log(`\n➕ Testing near-max uint128 with prepareIT`)
|
|
533
|
+
console.log(` Using: ${nearMax} (2^127 - 1)`)
|
|
534
|
+
console.log(` Expected: ${expected} (2^127)`)
|
|
535
|
+
|
|
536
|
+
const itA = await owner.encryptValue(nearMax, contractAddress, contract.add128.fragment.selector) as itUint
|
|
537
|
+
const itB = await owner.encryptValue(one, contractAddress, contract.add128.fragment.selector) as itUint
|
|
538
|
+
|
|
539
|
+
const tx = await contract.add128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
540
|
+
const receipt = await tx.wait()
|
|
541
|
+
expect(receipt?.status).to.equal(1)
|
|
542
|
+
|
|
543
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
544
|
+
try {
|
|
545
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
546
|
+
} catch {
|
|
547
|
+
return false
|
|
548
|
+
}
|
|
549
|
+
})
|
|
550
|
+
|
|
551
|
+
if (resultEvent) {
|
|
552
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
553
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
554
|
+
|
|
555
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
556
|
+
|
|
557
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
558
|
+
expect(decrypted).to.equal(expected)
|
|
559
|
+
console.log(` ✅ SUCCESS: Near-max uint128 verified! Full 128-bit support confirmed!\n`)
|
|
560
|
+
}
|
|
561
|
+
})
|
|
562
|
+
})
|
|
563
|
+
|
|
564
|
+
describe("Min/Max Operations - uint128", function () {
|
|
565
|
+
it("Should get minimum of two values and user can decrypt result", async function () {
|
|
566
|
+
const a = BigInt(500)
|
|
567
|
+
const b = BigInt(1000)
|
|
568
|
+
const expected = BigInt(500)
|
|
569
|
+
console.log(`\nmin Testing uint128: min(${a}, ${b}) = ${expected}`)
|
|
570
|
+
|
|
571
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.min128.fragment.selector) as itUint
|
|
572
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.min128.fragment.selector) as itUint
|
|
573
|
+
|
|
574
|
+
const tx = await contract.min128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
575
|
+
const receipt = await tx.wait()
|
|
576
|
+
expect(receipt?.status).to.equal(1)
|
|
577
|
+
|
|
578
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
579
|
+
try {
|
|
580
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
581
|
+
} catch {
|
|
582
|
+
return false
|
|
583
|
+
}
|
|
584
|
+
})
|
|
585
|
+
|
|
586
|
+
if (resultEvent) {
|
|
587
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
588
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
589
|
+
|
|
590
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
591
|
+
|
|
592
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
593
|
+
expect(decrypted).to.equal(expected)
|
|
594
|
+
console.log(` ✅ SUCCESS: Min verified!\n`)
|
|
595
|
+
}
|
|
596
|
+
})
|
|
597
|
+
|
|
598
|
+
it("Should get maximum of two values and user can decrypt result", async function () {
|
|
599
|
+
const a = BigInt(500)
|
|
600
|
+
const b = BigInt(1000)
|
|
601
|
+
const expected = BigInt(1000)
|
|
602
|
+
console.log(`\nmax Testing uint128: max(${a}, ${b}) = ${expected}`)
|
|
603
|
+
|
|
604
|
+
const itA = await owner.encryptValue(a, contractAddress, contract.max128.fragment.selector) as itUint
|
|
605
|
+
const itB = await owner.encryptValue(b, contractAddress, contract.max128.fragment.selector) as itUint
|
|
606
|
+
|
|
607
|
+
const tx = await contract.max128(itA, itB, owner.address, { gasLimit: GAS_LIMIT })
|
|
608
|
+
const receipt = await tx.wait()
|
|
609
|
+
expect(receipt?.status).to.equal(1)
|
|
610
|
+
|
|
611
|
+
const resultEvent = receipt?.logs.find((log: any) => {
|
|
612
|
+
try {
|
|
613
|
+
return contract.interface.parseLog(log)?.name === "ValueOffBoarded128"
|
|
614
|
+
} catch {
|
|
615
|
+
return false
|
|
616
|
+
}
|
|
617
|
+
})
|
|
618
|
+
|
|
619
|
+
if (resultEvent) {
|
|
620
|
+
const parsedLog = contract.interface.parseLog(resultEvent)
|
|
621
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
622
|
+
|
|
623
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
624
|
+
|
|
625
|
+
console.log(`✓ Decrypted result: ${decrypted}`)
|
|
626
|
+
expect(decrypted).to.equal(expected)
|
|
627
|
+
console.log(` ✅ SUCCESS: Max verified!\n`)
|
|
628
|
+
}
|
|
629
|
+
})
|
|
630
|
+
})
|
|
631
|
+
})
|
|
632
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import hre from "hardhat"
|
|
2
|
+
import { expect } from "chai"
|
|
3
|
+
import { setupAccounts } from "../accounts"
|
|
4
|
+
|
|
5
|
+
const gasLimit = 12000000
|
|
6
|
+
|
|
7
|
+
function buildTest(
|
|
8
|
+
contractName: string,
|
|
9
|
+
func: string,
|
|
10
|
+
resFunc: string,
|
|
11
|
+
params: (bigint | boolean)[],
|
|
12
|
+
expectedResult: bigint
|
|
13
|
+
) {
|
|
14
|
+
it(`${contractName}.${func}(${params}) should return ${expectedResult}`, async function () {
|
|
15
|
+
const [owner] = await setupAccounts()
|
|
16
|
+
const provider = owner.provider!
|
|
17
|
+
|
|
18
|
+
const factory = await hre.ethers.getContractFactory(contractName, owner as any)
|
|
19
|
+
const contract = await factory.deploy({ gasLimit })
|
|
20
|
+
await contract.waitForDeployment()
|
|
21
|
+
|
|
22
|
+
const tx = await contract.getFunction(func)(...params, { gasLimit })
|
|
23
|
+
const receipt = await tx.wait()
|
|
24
|
+
|
|
25
|
+
const result = await contract.getFunction(resFunc)()
|
|
26
|
+
expect(result).to.equal(expectedResult)
|
|
27
|
+
|
|
28
|
+
const txFromChain = await provider.getTransactionReceipt(receipt.hash)
|
|
29
|
+
expect(txFromChain).to.not.be.null
|
|
30
|
+
expect(txFromChain?.status).to.equal(1)
|
|
31
|
+
})
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const bit = false
|
|
35
|
+
const a = BigInt("1000000000000000000")
|
|
36
|
+
const b = BigInt("500000000000000000")
|
|
37
|
+
|
|
38
|
+
describe("Mux 128-bit", function () {
|
|
39
|
+
buildTest("Mux128TestsContract", "muxTest", "getMuxResult", [bit, a, b], bit ? b : a)
|
|
40
|
+
})
|
|
41
|
+
|