@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,92 @@
|
|
|
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[],
|
|
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
|
+
// buildNotTest function removed - NOT operation is not supported for 128-bit and 256-bit types
|
|
35
|
+
|
|
36
|
+
// Basic test values
|
|
37
|
+
const params = [
|
|
38
|
+
BigInt("1000000000000000000"),
|
|
39
|
+
BigInt("500000000000000000")
|
|
40
|
+
]
|
|
41
|
+
const [a, b] = params
|
|
42
|
+
|
|
43
|
+
// For 128-bit, we need to mask to 128 bits for NOT operation
|
|
44
|
+
// MASK_128 = 2^128 - 1 (all bits set)
|
|
45
|
+
const MASK_128 = (BigInt(1) << BigInt(128)) - BigInt(1)
|
|
46
|
+
|
|
47
|
+
// Note: NOT operation helper removed - NOT is not supported for 128-bit and 256-bit types
|
|
48
|
+
|
|
49
|
+
// Test values that exercise upper bits
|
|
50
|
+
const HALF_MAX_128 = BigInt(1) << BigInt(127) // 2^127 - tests upper bit
|
|
51
|
+
const UPPER_BITS_128 = BigInt("0xFFFFFFFFFFFFFFFF0000000000000000") // Upper 64 bits set
|
|
52
|
+
const LOWER_BITS_128 = BigInt("0x0000000000000000FFFFFFFFFFFFFFFF") // Lower 64 bits set
|
|
53
|
+
const SINGLE_BIT_127 = BigInt(1) << BigInt(127) // Bit 127 set (highest bit)
|
|
54
|
+
const SINGLE_BIT_64 = BigInt(1) << BigInt(64) // Bit 64 set (middle boundary)
|
|
55
|
+
|
|
56
|
+
describe("Bitwise 128-bit", function () {
|
|
57
|
+
describe("Basic operations with small values", function () {
|
|
58
|
+
buildTest("Bitwise128TestsContract", "andTest", "getAndResult", params, a & b)
|
|
59
|
+
buildTest("Bitwise128TestsContract", "orTest", "getOrResult", params, a | b)
|
|
60
|
+
buildTest("Bitwise128TestsContract", "xorTest", "getXorResult", params, a ^ b)
|
|
61
|
+
// Note: NOT operation is not supported for 128-bit and 256-bit types in the MPC precompile
|
|
62
|
+
// It only supports NOT for boolean types
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
describe("Edge cases - zero and max values", function () {
|
|
66
|
+
buildTest("Bitwise128TestsContract", "andTest", "getAndResult", [BigInt(0), MASK_128], BigInt(0))
|
|
67
|
+
buildTest("Bitwise128TestsContract", "orTest", "getOrResult", [BigInt(0), MASK_128], MASK_128)
|
|
68
|
+
buildTest("Bitwise128TestsContract", "xorTest", "getXorResult", [BigInt(0), MASK_128], MASK_128)
|
|
69
|
+
buildTest("Bitwise128TestsContract", "andTest", "getAndResult", [MASK_128, MASK_128], MASK_128)
|
|
70
|
+
buildTest("Bitwise128TestsContract", "orTest", "getOrResult", [MASK_128, MASK_128], MASK_128)
|
|
71
|
+
buildTest("Bitwise128TestsContract", "xorTest", "getXorResult", [MASK_128, MASK_128], BigInt(0))
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
describe("Operations with upper bits (2^127)", function () {
|
|
75
|
+
buildTest("Bitwise128TestsContract", "andTest", "getAndResult", [HALF_MAX_128, HALF_MAX_128], HALF_MAX_128)
|
|
76
|
+
buildTest("Bitwise128TestsContract", "orTest", "getOrResult", [HALF_MAX_128, HALF_MAX_128], HALF_MAX_128)
|
|
77
|
+
buildTest("Bitwise128TestsContract", "xorTest", "getXorResult", [HALF_MAX_128, HALF_MAX_128], BigInt(0))
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
describe("Operations with upper and lower bit patterns (64-bit boundary)", function () {
|
|
81
|
+
buildTest("Bitwise128TestsContract", "andTest", "getAndResult", [UPPER_BITS_128, LOWER_BITS_128], BigInt(0))
|
|
82
|
+
buildTest("Bitwise128TestsContract", "orTest", "getOrResult", [UPPER_BITS_128, LOWER_BITS_128], MASK_128)
|
|
83
|
+
buildTest("Bitwise128TestsContract", "xorTest", "getXorResult", [UPPER_BITS_128, LOWER_BITS_128], MASK_128)
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
describe("Operations with single bits at key positions", function () {
|
|
87
|
+
buildTest("Bitwise128TestsContract", "andTest", "getAndResult", [SINGLE_BIT_127, SINGLE_BIT_64], BigInt(0))
|
|
88
|
+
buildTest("Bitwise128TestsContract", "orTest", "getOrResult", [SINGLE_BIT_127, SINGLE_BIT_64], SINGLE_BIT_127 | SINGLE_BIT_64)
|
|
89
|
+
buildTest("Bitwise128TestsContract", "xorTest", "getXorResult", [SINGLE_BIT_127, SINGLE_BIT_64], SINGLE_BIT_127 | SINGLE_BIT_64)
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
|
|
@@ -0,0 +1,101 @@
|
|
|
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[],
|
|
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
|
+
// buildNotTest function removed - NOT operation is not supported for 128-bit and 256-bit types
|
|
35
|
+
|
|
36
|
+
// Basic test values
|
|
37
|
+
const params = [
|
|
38
|
+
BigInt("1000000000000000000"), // 1e18
|
|
39
|
+
BigInt("500000000000000000") // 0.5e18
|
|
40
|
+
]
|
|
41
|
+
const [a, b] = params
|
|
42
|
+
|
|
43
|
+
// For 256-bit, we need to mask to 256 bits for NOT operation
|
|
44
|
+
// MASK_256 = 2^256 - 1 (all bits set)
|
|
45
|
+
const MASK_256 = (BigInt(1) << BigInt(256)) - BigInt(1)
|
|
46
|
+
|
|
47
|
+
// Note: NOT operation helper removed - NOT is not supported for 128-bit and 256-bit types
|
|
48
|
+
|
|
49
|
+
// Test values that exercise upper bits
|
|
50
|
+
const HALF_MAX_256 = BigInt(1) << BigInt(255) // 2^255 - tests upper bit
|
|
51
|
+
const UPPER_128_BITS_256 = BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000") // Upper 128 bits set
|
|
52
|
+
const LOWER_128_BITS_256 = BigInt("0x00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") // Lower 128 bits set
|
|
53
|
+
const SINGLE_BIT_255 = BigInt(1) << BigInt(255) // Bit 255 set (highest bit)
|
|
54
|
+
const SINGLE_BIT_128 = BigInt(1) << BigInt(128) // Bit 128 set (128-bit boundary)
|
|
55
|
+
const SINGLE_BIT_64 = BigInt(1) << BigInt(64) // Bit 64 set
|
|
56
|
+
|
|
57
|
+
describe("Bitwise 256-bit", function () {
|
|
58
|
+
describe("Basic operations with small values", function () {
|
|
59
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", params, a & b)
|
|
60
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", params, a | b)
|
|
61
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", params, a ^ b)
|
|
62
|
+
// Note: NOT operation is not supported for 128-bit and 256-bit types in the MPC precompile
|
|
63
|
+
// It only supports NOT for boolean types
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
describe("Edge cases - zero and max values", function () {
|
|
67
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", [BigInt(0), MASK_256], BigInt(0))
|
|
68
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", [BigInt(0), MASK_256], MASK_256)
|
|
69
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", [BigInt(0), MASK_256], MASK_256)
|
|
70
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", [MASK_256, MASK_256], MASK_256)
|
|
71
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", [MASK_256, MASK_256], MASK_256)
|
|
72
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", [MASK_256, MASK_256], BigInt(0))
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
describe("Operations with upper bits (2^255)", function () {
|
|
76
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", [HALF_MAX_256, HALF_MAX_256], HALF_MAX_256)
|
|
77
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", [HALF_MAX_256, HALF_MAX_256], HALF_MAX_256)
|
|
78
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", [HALF_MAX_256, HALF_MAX_256], BigInt(0))
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
describe("Operations with upper and lower 128-bit patterns (128-bit boundary)", function () {
|
|
82
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", [UPPER_128_BITS_256, LOWER_128_BITS_256], BigInt(0))
|
|
83
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", [UPPER_128_BITS_256, LOWER_128_BITS_256], MASK_256)
|
|
84
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", [UPPER_128_BITS_256, LOWER_128_BITS_256], MASK_256)
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
describe("Operations with single bits at key positions", function () {
|
|
88
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", [SINGLE_BIT_255, SINGLE_BIT_128], BigInt(0))
|
|
89
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", [SINGLE_BIT_255, SINGLE_BIT_128], SINGLE_BIT_255 | SINGLE_BIT_128)
|
|
90
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", [SINGLE_BIT_255, SINGLE_BIT_128], SINGLE_BIT_255 | SINGLE_BIT_128)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
describe("Operations crossing 128-bit boundary", function () {
|
|
94
|
+
const cross128_1 = (BigInt(1) << BigInt(127)) | (BigInt(1) << BigInt(128)) // Bits 127 and 128 set
|
|
95
|
+
const cross128_2 = (BigInt(1) << BigInt(126)) | (BigInt(1) << BigInt(129)) // Bits 126 and 129 set
|
|
96
|
+
buildTest("Bitwise256TestsContract", "andTest", "getAndResult", [cross128_1, cross128_2], cross128_1 & cross128_2)
|
|
97
|
+
buildTest("Bitwise256TestsContract", "orTest", "getOrResult", [cross128_1, cross128_2], cross128_1 | cross128_2)
|
|
98
|
+
buildTest("Bitwise256TestsContract", "xorTest", "getXorResult", [cross128_1, cross128_2], cross128_1 ^ cross128_2)
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import hre from "hardhat"
|
|
2
|
+
import { expect } from "chai"
|
|
3
|
+
import { setupAccounts } from "../accounts"
|
|
4
|
+
import { Wallet, itUint, ctUint } from "@coti-io/coti-ethers"
|
|
5
|
+
import { ValidateCiphertext128TestsContract } 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("ValidateCiphertext128TestsContract", 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("buildInputText 128-bit Full Cycle Test - coti-private", function () {
|
|
24
|
+
this.timeout(300000) // 5 minutes timeout
|
|
25
|
+
let contract: ValidateCiphertext128TestsContract
|
|
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("š buildInputText 128-bit FULL CYCLE TEST")
|
|
42
|
+
console.log("=".repeat(80))
|
|
43
|
+
console.log(`Network: ${hre.network.name}`)
|
|
44
|
+
console.log(`Contract Address: ${contractAddress}`)
|
|
45
|
+
console.log(`Owner Address: ${owner.address}`)
|
|
46
|
+
console.log(`User AES Key: ${onboardInfo.aesKey.substring(0, 8)}...${onboardInfo.aesKey.substring(onboardInfo.aesKey.length - 8)}`)
|
|
47
|
+
console.log("=".repeat(80) + "\n")
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
describe("Single Value Validation - Testing buildInputText with Large Values", function () {
|
|
51
|
+
it("Should validate and decrypt 80-bit value (>70 bits)", async function () {
|
|
52
|
+
const plaintext = (2n ** 80n) - 1n // 80-bit max value
|
|
53
|
+
const bitSize = plaintext.toString(2).length
|
|
54
|
+
expect(bitSize).to.equal(80)
|
|
55
|
+
|
|
56
|
+
console.log(`\nš Testing 80-bit value`)
|
|
57
|
+
console.log(` Value: ${plaintext.toString()}`)
|
|
58
|
+
console.log(` Bit size: ${bitSize} bits`)
|
|
59
|
+
|
|
60
|
+
// Step 1: Encrypt using Wallet.encryptValue (which uses buildInputText internally)
|
|
61
|
+
const functionSelector = contract.validateAndReturn.fragment.selector
|
|
62
|
+
console.log(`\nš Step 1: Encrypting with Wallet.encryptValue (uses buildInputText internally)...`)
|
|
63
|
+
const itValue = await owner.encryptValue(plaintext, contractAddress, functionSelector) as itUint
|
|
64
|
+
|
|
65
|
+
console.log(` ā
Encrypted: ciphertext = ${itValue.ciphertext.toString()}`)
|
|
66
|
+
console.log(` ā
Signature length: ${(itValue.signature as Uint8Array).length} bytes`)
|
|
67
|
+
|
|
68
|
+
// Step 2: Send to contract for validation
|
|
69
|
+
console.log(`\nš¤ Step 2: Sending to contract for validation...`)
|
|
70
|
+
const tx = await contract.validateAndReturn(itValue, { gasLimit: GAS_LIMIT })
|
|
71
|
+
const receipt = await tx.wait()
|
|
72
|
+
expect(receipt?.status).to.equal(1)
|
|
73
|
+
console.log(` ā
Transaction confirmed in block ${receipt?.blockNumber}`)
|
|
74
|
+
|
|
75
|
+
// Step 3: Extract result from event
|
|
76
|
+
const resultEvents = receipt?.logs.filter((log: any) => {
|
|
77
|
+
try {
|
|
78
|
+
const parsed = contract.interface.parseLog(log)
|
|
79
|
+
return parsed?.name === "ValueOffBoarded128"
|
|
80
|
+
} catch {
|
|
81
|
+
return false
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
expect(resultEvents).to.not.be.undefined
|
|
86
|
+
expect(resultEvents?.length).to.equal(1, "Expected exactly one ValueOffBoarded128 event")
|
|
87
|
+
|
|
88
|
+
const parsedLog = contract.interface.parseLog(resultEvents![0])
|
|
89
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
90
|
+
|
|
91
|
+
console.log(`\nš Step 3: Decrypting result...`)
|
|
92
|
+
console.log(` CT value: ${ctResult.toString()}`)
|
|
93
|
+
|
|
94
|
+
// Step 4: Decrypt using Wallet.decryptValue
|
|
95
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
96
|
+
|
|
97
|
+
console.log(` ā
Decrypted: ${decrypted.toString()}`)
|
|
98
|
+
console.log(` ā
Original: ${plaintext.toString()}`)
|
|
99
|
+
|
|
100
|
+
expect(decrypted).to.equal(plaintext)
|
|
101
|
+
console.log(`\n ā
ā
ā
SUCCESS: 80-bit value full cycle verified!\n`)
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
it("Should validate and decrypt 100-bit value", async function () {
|
|
105
|
+
const plaintext = (2n ** 100n) - 12345n // 100-bit value
|
|
106
|
+
const bitSize = plaintext.toString(2).length
|
|
107
|
+
expect(bitSize).to.equal(100)
|
|
108
|
+
|
|
109
|
+
console.log(`\nš Testing 100-bit value`)
|
|
110
|
+
console.log(` Value: ${plaintext.toString()}`)
|
|
111
|
+
console.log(` Bit size: ${bitSize} bits`)
|
|
112
|
+
|
|
113
|
+
const functionSelector = contract.validateAndReturn.fragment.selector
|
|
114
|
+
console.log(`\nš Step 1: Encrypting with Wallet.encryptValue...`)
|
|
115
|
+
const itValue = await owner.encryptValue(plaintext, contractAddress, functionSelector) as itUint
|
|
116
|
+
|
|
117
|
+
console.log(` ā
Encrypted successfully`)
|
|
118
|
+
|
|
119
|
+
console.log(`\nš¤ Step 2: Sending to contract...`)
|
|
120
|
+
const tx = await contract.validateAndReturn(itValue, { gasLimit: GAS_LIMIT })
|
|
121
|
+
const receipt = await tx.wait()
|
|
122
|
+
expect(receipt?.status).to.equal(1)
|
|
123
|
+
console.log(` ā
Transaction confirmed in block ${receipt?.blockNumber}`)
|
|
124
|
+
console.log(` š Total logs: ${receipt?.logs.length}`)
|
|
125
|
+
|
|
126
|
+
// Debug: Log all events
|
|
127
|
+
console.log(`\n š Parsing all events...`)
|
|
128
|
+
receipt?.logs.forEach((log: any, index: number) => {
|
|
129
|
+
try {
|
|
130
|
+
const parsed = contract.interface.parseLog(log)
|
|
131
|
+
if (parsed) {
|
|
132
|
+
console.log(` Event ${index}: ${parsed.name}`)
|
|
133
|
+
if (parsed.name === "ValueOffBoarded128") {
|
|
134
|
+
console.log(` Result: ${parsed.args.result.toString()}`)
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
} catch (e) {
|
|
138
|
+
// Not our contract's event
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
// Find the ValueOffBoarded128 event - there should be exactly one
|
|
143
|
+
const resultEvents = receipt?.logs.filter((log: any) => {
|
|
144
|
+
try {
|
|
145
|
+
const parsed = contract.interface.parseLog(log)
|
|
146
|
+
return parsed?.name === "ValueOffBoarded128"
|
|
147
|
+
} catch {
|
|
148
|
+
return false
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
expect(resultEvents).to.not.be.undefined
|
|
153
|
+
expect(resultEvents?.length).to.equal(1, `Expected exactly one ValueOffBoarded128 event, found ${resultEvents?.length}`)
|
|
154
|
+
|
|
155
|
+
const parsedLog = contract.interface.parseLog(resultEvents![0])
|
|
156
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
157
|
+
|
|
158
|
+
console.log(`\nš Step 3: Decrypting...`)
|
|
159
|
+
console.log(` CT value: ${ctResult.toString()}`)
|
|
160
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
161
|
+
|
|
162
|
+
console.log(` ā
Decrypted: ${decrypted.toString()}`)
|
|
163
|
+
console.log(` ā
Original: ${plaintext.toString()}`)
|
|
164
|
+
expect(decrypted).to.equal(plaintext)
|
|
165
|
+
console.log(`\n ā
ā
ā
SUCCESS: 100-bit value verified!\n`)
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
it("Should validate and decrypt 120-bit value", async function () {
|
|
169
|
+
const plaintext = (2n ** 120n) - 1n // 120-bit max value
|
|
170
|
+
const bitSize = plaintext.toString(2).length
|
|
171
|
+
expect(bitSize).to.equal(120)
|
|
172
|
+
|
|
173
|
+
console.log(`\nš Testing 120-bit value`)
|
|
174
|
+
console.log(` Value: ${plaintext.toString()}`)
|
|
175
|
+
console.log(` Bit size: ${bitSize} bits`)
|
|
176
|
+
|
|
177
|
+
const functionSelector = contract.validateAndReturn.fragment.selector
|
|
178
|
+
const itValue = await owner.encryptValue(plaintext, contractAddress, functionSelector) as itUint
|
|
179
|
+
|
|
180
|
+
const tx = await contract.validateAndReturn(itValue, { gasLimit: GAS_LIMIT })
|
|
181
|
+
const receipt = await tx.wait()
|
|
182
|
+
expect(receipt?.status).to.equal(1)
|
|
183
|
+
console.log(` ā
Transaction confirmed in block ${receipt?.blockNumber}`)
|
|
184
|
+
|
|
185
|
+
const resultEvents = receipt?.logs.filter((log: any) => {
|
|
186
|
+
try {
|
|
187
|
+
const parsed = contract.interface.parseLog(log)
|
|
188
|
+
return parsed?.name === "ValueOffBoarded128"
|
|
189
|
+
} catch {
|
|
190
|
+
return false
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
expect(resultEvents?.length).to.equal(1, "Expected exactly one ValueOffBoarded128 event")
|
|
195
|
+
|
|
196
|
+
const parsedLog = contract.interface.parseLog(resultEvents![0])
|
|
197
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
198
|
+
|
|
199
|
+
console.log(`\nš Decrypting...`)
|
|
200
|
+
console.log(` CT value: ${ctResult.toString()}`)
|
|
201
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
202
|
+
|
|
203
|
+
console.log(` ā
Decrypted: ${decrypted.toString()}`)
|
|
204
|
+
console.log(` ā
Original: ${plaintext.toString()}`)
|
|
205
|
+
expect(decrypted).to.equal(plaintext)
|
|
206
|
+
console.log(`\n ā
ā
ā
SUCCESS: 120-bit value verified!\n`)
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
it("Should validate and decrypt 128-bit value (maximum)", async function () {
|
|
210
|
+
const plaintext = (2n ** 128n) - 1n // Maximum 128-bit value
|
|
211
|
+
const bitSize = plaintext.toString(2).length
|
|
212
|
+
expect(bitSize).to.equal(128)
|
|
213
|
+
|
|
214
|
+
console.log(`\nš Testing MAXIMUM 128-bit value`)
|
|
215
|
+
console.log(` Value: ${plaintext.toString()}`)
|
|
216
|
+
console.log(` Bit size: ${bitSize} bits (MAXIMUM)`)
|
|
217
|
+
|
|
218
|
+
const functionSelector = contract.validateAndReturn.fragment.selector
|
|
219
|
+
console.log(`\nš Encrypting with Wallet.encryptValue...`)
|
|
220
|
+
const itValue = await owner.encryptValue(plaintext, contractAddress, functionSelector) as itUint
|
|
221
|
+
|
|
222
|
+
console.log(` ā
Encrypted successfully`)
|
|
223
|
+
|
|
224
|
+
console.log(`\nš¤ Sending to contract...`)
|
|
225
|
+
const tx = await contract.validateAndReturn(itValue, { gasLimit: GAS_LIMIT })
|
|
226
|
+
const receipt = await tx.wait()
|
|
227
|
+
expect(receipt?.status).to.equal(1)
|
|
228
|
+
console.log(` ā
Transaction confirmed in block ${receipt?.blockNumber}`)
|
|
229
|
+
console.log(` š Total logs: ${receipt?.logs.length}`)
|
|
230
|
+
|
|
231
|
+
// Debug: Log all events
|
|
232
|
+
console.log(`\n š Parsing all events...`)
|
|
233
|
+
receipt?.logs.forEach((log: any, index: number) => {
|
|
234
|
+
try {
|
|
235
|
+
const parsed = contract.interface.parseLog(log)
|
|
236
|
+
if (parsed) {
|
|
237
|
+
console.log(` Event ${index}: ${parsed.name}`)
|
|
238
|
+
if (parsed.name === "ValueOffBoarded128") {
|
|
239
|
+
console.log(` Result: ${parsed.args.result.toString()}`)
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
} catch (e) {
|
|
243
|
+
// Not our contract's event
|
|
244
|
+
}
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
const resultEvents = receipt?.logs.filter((log: any) => {
|
|
248
|
+
try {
|
|
249
|
+
const parsed = contract.interface.parseLog(log)
|
|
250
|
+
return parsed?.name === "ValueOffBoarded128"
|
|
251
|
+
} catch {
|
|
252
|
+
return false
|
|
253
|
+
}
|
|
254
|
+
})
|
|
255
|
+
|
|
256
|
+
expect(resultEvents?.length).to.equal(1, `Expected exactly one ValueOffBoarded128 event, found ${resultEvents?.length}`)
|
|
257
|
+
|
|
258
|
+
const parsedLog = contract.interface.parseLog(resultEvents![0])
|
|
259
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
260
|
+
|
|
261
|
+
console.log(`\nš Decrypting...`)
|
|
262
|
+
console.log(` CT value: ${ctResult.toString()}`)
|
|
263
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
264
|
+
|
|
265
|
+
console.log(` ā
Decrypted: ${decrypted.toString()}`)
|
|
266
|
+
console.log(` ā
Original: ${plaintext.toString()}`)
|
|
267
|
+
expect(decrypted).to.equal(plaintext)
|
|
268
|
+
console.log(`\n ā
ā
ā
SUCCESS: MAXIMUM 128-bit value verified! buildInputText works perfectly!\n`)
|
|
269
|
+
})
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
describe("Addition Operation - Testing buildInputText with Operations", function () {
|
|
273
|
+
it("Should add two 100-bit values using buildInputText", async function () {
|
|
274
|
+
const a = (2n ** 100n) - 1000n
|
|
275
|
+
const b = (2n ** 100n) - 2000n
|
|
276
|
+
const expected = a + b
|
|
277
|
+
const bitSizeA = a.toString(2).length
|
|
278
|
+
const bitSizeB = b.toString(2).length
|
|
279
|
+
|
|
280
|
+
console.log(`\nš Testing addition with 100-bit values`)
|
|
281
|
+
console.log(` A: ${a.toString()} (${bitSizeA} bits)`)
|
|
282
|
+
console.log(` B: ${b.toString()} (${bitSizeB} bits)`)
|
|
283
|
+
console.log(` Expected: ${expected.toString()}`)
|
|
284
|
+
|
|
285
|
+
const functionSelector = contract.validateAndAdd.fragment.selector
|
|
286
|
+
|
|
287
|
+
console.log(`\nš Encrypting both values with Wallet.encryptValue...`)
|
|
288
|
+
const itA = await owner.encryptValue(a, contractAddress, functionSelector) as itUint
|
|
289
|
+
const itB = await owner.encryptValue(b, contractAddress, functionSelector) as itUint
|
|
290
|
+
|
|
291
|
+
console.log(` ā
Both values encrypted`)
|
|
292
|
+
|
|
293
|
+
console.log(`\nš¤ Sending to contract for addition...`)
|
|
294
|
+
const tx = await contract.validateAndAdd(itA, itB, { gasLimit: GAS_LIMIT })
|
|
295
|
+
const receipt = await tx.wait()
|
|
296
|
+
expect(receipt?.status).to.equal(1)
|
|
297
|
+
|
|
298
|
+
const resultEvents = receipt?.logs.filter((log: any) => {
|
|
299
|
+
try {
|
|
300
|
+
const parsed = contract.interface.parseLog(log)
|
|
301
|
+
return parsed?.name === "ValueOffBoarded128"
|
|
302
|
+
} catch {
|
|
303
|
+
return false
|
|
304
|
+
}
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
expect(resultEvents?.length).to.equal(1, "Expected exactly one ValueOffBoarded128 event")
|
|
308
|
+
|
|
309
|
+
const parsedLog = contract.interface.parseLog(resultEvents![0])
|
|
310
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
311
|
+
|
|
312
|
+
console.log(`\nš Decrypting result...`)
|
|
313
|
+
console.log(` CT value: ${ctResult.toString()}`)
|
|
314
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
315
|
+
|
|
316
|
+
console.log(` ā
Decrypted: ${decrypted.toString()}`)
|
|
317
|
+
console.log(` ā
Expected: ${expected.toString()}`)
|
|
318
|
+
expect(decrypted).to.equal(expected)
|
|
319
|
+
console.log(`\n ā
ā
ā
SUCCESS: Addition with 100-bit values verified!\n`)
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
it("Should add two 128-bit values using buildInputText", async function () {
|
|
323
|
+
const a = (2n ** 127n) - 1n // Near max
|
|
324
|
+
const b = 1n
|
|
325
|
+
const expected = a + b // Will be 2^127
|
|
326
|
+
|
|
327
|
+
console.log(`\nš Testing addition with near-max 128-bit values`)
|
|
328
|
+
console.log(` A: ${a.toString()} (127 bits)`)
|
|
329
|
+
console.log(` B: ${b.toString()}`)
|
|
330
|
+
console.log(` Expected: ${expected.toString()} (128 bits)`)
|
|
331
|
+
|
|
332
|
+
const functionSelector = contract.validateAndAdd.fragment.selector
|
|
333
|
+
|
|
334
|
+
const itA = await owner.encryptValue(a, contractAddress, functionSelector) as itUint
|
|
335
|
+
const itB = await owner.encryptValue(b, contractAddress, functionSelector) as itUint
|
|
336
|
+
|
|
337
|
+
const tx = await contract.validateAndAdd(itA, itB, { gasLimit: GAS_LIMIT })
|
|
338
|
+
const receipt = await tx.wait()
|
|
339
|
+
expect(receipt?.status).to.equal(1)
|
|
340
|
+
console.log(` ā
Transaction confirmed in block ${receipt?.blockNumber}`)
|
|
341
|
+
console.log(` š Total logs: ${receipt?.logs.length}`)
|
|
342
|
+
|
|
343
|
+
// Debug: Log all events
|
|
344
|
+
console.log(`\n š Parsing all events...`)
|
|
345
|
+
receipt?.logs.forEach((log: any, index: number) => {
|
|
346
|
+
try {
|
|
347
|
+
const parsed = contract.interface.parseLog(log)
|
|
348
|
+
if (parsed) {
|
|
349
|
+
console.log(` Event ${index}: ${parsed.name}`)
|
|
350
|
+
if (parsed.name === "ValueOffBoarded128") {
|
|
351
|
+
console.log(` Result: ${parsed.args.result.toString()}`)
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
} catch (e) {
|
|
355
|
+
// Not our contract's event
|
|
356
|
+
}
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
const resultEvents = receipt?.logs.filter((log: any) => {
|
|
360
|
+
try {
|
|
361
|
+
const parsed = contract.interface.parseLog(log)
|
|
362
|
+
return parsed?.name === "ValueOffBoarded128"
|
|
363
|
+
} catch {
|
|
364
|
+
return false
|
|
365
|
+
}
|
|
366
|
+
})
|
|
367
|
+
|
|
368
|
+
expect(resultEvents?.length).to.equal(1, `Expected exactly one ValueOffBoarded128 event, found ${resultEvents?.length}`)
|
|
369
|
+
|
|
370
|
+
const parsedLog = contract.interface.parseLog(resultEvents![0])
|
|
371
|
+
const ctResult: ctUint = parsedLog?.args.result
|
|
372
|
+
|
|
373
|
+
console.log(`\nš Decrypting result...`)
|
|
374
|
+
console.log(` CT value: ${ctResult.toString()}`)
|
|
375
|
+
const decrypted = await owner.decryptValue(ctResult)
|
|
376
|
+
|
|
377
|
+
console.log(` ā
Decrypted: ${decrypted.toString()}`)
|
|
378
|
+
console.log(` ā
Expected: ${expected.toString()}`)
|
|
379
|
+
expect(decrypted).to.equal(expected)
|
|
380
|
+
console.log(`\n ā
ā
ā
SUCCESS: Addition with near-max 128-bit values verified!\n`)
|
|
381
|
+
})
|
|
382
|
+
})
|
|
383
|
+
|
|
384
|
+
after(function() {
|
|
385
|
+
console.log("\n" + "=".repeat(80))
|
|
386
|
+
console.log("š TEST SUMMARY")
|
|
387
|
+
console.log("=".repeat(80))
|
|
388
|
+
console.log("ā
Wallet.encryptValue (buildInputText) supports 80-bit values (>70 bits)")
|
|
389
|
+
console.log("ā
Wallet.encryptValue (buildInputText) supports 100-bit values")
|
|
390
|
+
console.log("ā
Wallet.encryptValue (buildInputText) supports 120-bit values")
|
|
391
|
+
console.log("ā
Wallet.encryptValue (buildInputText) supports 128-bit values (MAXIMUM)")
|
|
392
|
+
console.log("ā
Full cycle: encrypt ā validate ā decrypt works perfectly")
|
|
393
|
+
console.log("ā
Operations (addition) work with large values")
|
|
394
|
+
console.log("\nš CONCLUSION: buildInputText 128-bit support via Wallet.encryptValue is FULLY WORKING!")
|
|
395
|
+
console.log("=".repeat(80) + "\n")
|
|
396
|
+
})
|
|
397
|
+
})
|
|
398
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
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[],
|
|
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 params = [
|
|
35
|
+
BigInt("1000000000000000000"), // 1e18
|
|
36
|
+
BigInt("500000000000000000") // 0.5e18
|
|
37
|
+
]
|
|
38
|
+
const [a, b] = params
|
|
39
|
+
|
|
40
|
+
describe("Checked Arithmetic 128-bit with Overflow Bit", function () {
|
|
41
|
+
buildTest("CheckedArithmetic128WithOverflowBitTestsContract", "checkedAddWithOverflowBitTest", "getAddResult", params, a + b)
|
|
42
|
+
buildTest("CheckedArithmetic128WithOverflowBitTestsContract", "checkedSubWithOverflowBitTest", "getSubResult", params, a - b)
|
|
43
|
+
buildTest("CheckedArithmetic128WithOverflowBitTestsContract", "checkedMulWithOverflowBitTest", "getMulResult", params, a * b)
|
|
44
|
+
})
|
|
45
|
+
|