@coti-io/coti-contracts 1.0.9 ā 1.2.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 +18 -14
- 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/mocks/token/ERC20Mock.sol +19 -0
- package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
- package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +13 -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/privacyBridge/PrivacyBridge.sol +318 -0
- package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +268 -0
- package/contracts/privacyBridge/PrivacyBridgeERC20.sol +251 -0
- package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +16 -0
- package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +17 -0
- package/contracts/privacyBridge/PrivacyBridgeWADA.sol +17 -0
- package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +17 -0
- package/contracts/privacyBridge/PrivacyBridgeWETH.sol +17 -0
- package/contracts/privacyBridge/PrivacyBridgegCoti.sol +17 -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 +10891 -2449
- package/contracts/utils/mpc/MpcInterface.sol +7 -2
- package/hardhat/gasPriceBump.ts +60 -0
- package/hardhat.config.ts +60 -12
- package/package.json +21 -3
- package/scripts/deploySoulboundNodeNFT.ts +57 -0
- package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +327 -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/Ownable.ts +153 -0
- package/typechain-types/@openzeppelin/contracts/access/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +6 -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/index.ts +4 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +206 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -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 +2 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +77 -60
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.ts +341 -0
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128TestsContract.ts +311 -0
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +347 -0
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256TestsContract.ts +311 -0
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.ts +186 -0
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise128TestsContract.ts +179 -0
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +186 -0
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise256TestsContract.ts +179 -0
- 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 +260 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison128TestsContract.ts +278 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +260 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison256TestsContract.ts +278 -0
- 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/Miscellaneous128BitTestsContract.ts +302 -0
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +322 -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 -0
- package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +77 -60
- package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +77 -60
- package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
- package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -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 +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +4 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +185 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -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 +1 -0
- package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +179 -47
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +349 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +364 -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/Bitwise128BitTestsContract__factory.ts +182 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +182 -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/Comparison128BitTestsContract__factory.ts +255 -0
- 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/Comparison256BitTestsContract__factory.ts +255 -0
- 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/Miscellaneous128BitTestsContract__factory.ts +332 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +380 -0
- 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 -0
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +7 -7
- package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +174 -42
- package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +174 -42
- package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
- package/typechain-types/hardhat.d.ts +702 -0
- package/typechain-types/index.ts +78 -0
- package/contracts/mocks/utils/mpc/README.md +0 -486
- package/contracts/package.json +0 -11
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import hre from "hardhat";
|
|
3
|
+
import { Wallet } from "@coti-io/coti-ethers";
|
|
4
|
+
import { setupAccounts } from "../accounts";
|
|
5
|
+
import type { MinimalProxy, MinimalImplementation } from "../../../typechain-types";
|
|
6
|
+
import { Buffer } from "buffer";
|
|
7
|
+
|
|
8
|
+
const GAS_LIMIT = 12000000;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Minimal test demonstrating IT-type validation through proxy:
|
|
12
|
+
* - itUint256 works through proxy ā
|
|
13
|
+
* - Wrong signature (signed for implementation) fails correctly ā
|
|
14
|
+
*/
|
|
15
|
+
describe("Minimal Proxy Demo - IT-Type Validation Issue", function () {
|
|
16
|
+
let proxy: MinimalProxy;
|
|
17
|
+
let implementation: MinimalImplementation;
|
|
18
|
+
let proxyAsImpl: MinimalImplementation;
|
|
19
|
+
let owner: Wallet;
|
|
20
|
+
|
|
21
|
+
this.timeout(120000);
|
|
22
|
+
|
|
23
|
+
before(async function () {
|
|
24
|
+
const accounts = await setupAccounts();
|
|
25
|
+
owner = accounts[0];
|
|
26
|
+
|
|
27
|
+
const ownerInfo = owner.getUserOnboardInfo();
|
|
28
|
+
if (!ownerInfo || !ownerInfo.aesKey) {
|
|
29
|
+
throw new Error("Owner AES key not found");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
console.log("\n" + "=".repeat(70));
|
|
33
|
+
console.log("MINIMAL PROXY DEMO - Showing IT-Type Validation Issue");
|
|
34
|
+
console.log("=".repeat(70));
|
|
35
|
+
|
|
36
|
+
// Deploy implementation
|
|
37
|
+
const ImplFactory = await hre.ethers.getContractFactory("MinimalImplementation", owner as any);
|
|
38
|
+
implementation = await ImplFactory.deploy({ gasLimit: GAS_LIMIT });
|
|
39
|
+
await implementation.waitForDeployment();
|
|
40
|
+
const implAddress = await implementation.getAddress();
|
|
41
|
+
console.log("Implementation:", implAddress);
|
|
42
|
+
|
|
43
|
+
// Deploy proxy
|
|
44
|
+
const ProxyFactory = await hre.ethers.getContractFactory("MinimalProxy", owner as any);
|
|
45
|
+
proxy = await ProxyFactory.deploy(implAddress, { gasLimit: GAS_LIMIT });
|
|
46
|
+
await proxy.waitForDeployment();
|
|
47
|
+
const proxyAddress = await proxy.getAddress();
|
|
48
|
+
console.log("Proxy:", proxyAddress);
|
|
49
|
+
|
|
50
|
+
// Create interface to call proxy as implementation
|
|
51
|
+
proxyAsImpl = await hre.ethers.getContractAt(
|
|
52
|
+
"MinimalImplementation",
|
|
53
|
+
proxyAddress,
|
|
54
|
+
owner as any
|
|
55
|
+
) as MinimalImplementation;
|
|
56
|
+
|
|
57
|
+
console.log("=".repeat(70) + "\n");
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("itUint256 addition through proxy", async function () {
|
|
61
|
+
console.log("\nTest 1: itUint256 addition through proxy");
|
|
62
|
+
console.log(" Values: a=1000 (encrypted), b=2000 (encrypted)");
|
|
63
|
+
|
|
64
|
+
const proxyAddress = await proxy.getAddress();
|
|
65
|
+
const implAddress = await implementation.getAddress();
|
|
66
|
+
const addAndStoreFunc = proxyAsImpl.interface.getFunction("addAndStore");
|
|
67
|
+
if (!addAndStoreFunc) {
|
|
68
|
+
throw new Error("addAndStore function not found in contract interface");
|
|
69
|
+
}
|
|
70
|
+
const selector = addAndStoreFunc.selector;
|
|
71
|
+
|
|
72
|
+
console.log(` š Implementation address: ${implAddress}`);
|
|
73
|
+
console.log(` š Proxy address: ${proxyAddress}`);
|
|
74
|
+
console.log(` š Function selector: ${selector}`);
|
|
75
|
+
console.log(` ā
IT-type signed for: ${proxyAddress} (PROXY, not implementation)`);
|
|
76
|
+
console.log("");
|
|
77
|
+
|
|
78
|
+
// Use values > 128 bits for itUint256
|
|
79
|
+
const valueA = (2n ** 128n) + 1000n;
|
|
80
|
+
const valueB = (2n ** 128n) + 2000n;
|
|
81
|
+
const expected = valueA + valueB;
|
|
82
|
+
|
|
83
|
+
const encA = await owner.encryptValue256(valueA, proxyAddress, selector);
|
|
84
|
+
const encB = await owner.encryptValue256(valueB, proxyAddress, selector);
|
|
85
|
+
|
|
86
|
+
console.log(` IT-type a: ciphertextHigh=${encA.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
|
|
87
|
+
console.log(` ciphertextLow=${encA.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
|
|
88
|
+
console.log(` signature=${Buffer.from(encA.signature).toString('hex').slice(0, 20)}...`);
|
|
89
|
+
console.log(` IT-type b: ciphertextHigh=${encB.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
|
|
90
|
+
console.log(` ciphertextLow=${encB.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
|
|
91
|
+
console.log(` signature=${Buffer.from(encB.signature).toString('hex').slice(0, 20)}...`);
|
|
92
|
+
console.log(` š Sending to: ${proxyAddress}`);
|
|
93
|
+
|
|
94
|
+
// Send the transaction and check events
|
|
95
|
+
const tx = await proxyAsImpl.connect(owner).addAndStore(encA, encB, { gasLimit: GAS_LIMIT });
|
|
96
|
+
console.log(` š Transaction hash: ${tx.hash}`);
|
|
97
|
+
console.log(` š Check on explorer: http://explorer.coti.io/tx/${tx.hash}`);
|
|
98
|
+
|
|
99
|
+
const receipt = await tx.wait();
|
|
100
|
+
console.log(` ā
Transaction confirmed in block: ${receipt?.blockNumber}`);
|
|
101
|
+
console.log(` š Gas used: ${receipt?.gasUsed.toString()}`);
|
|
102
|
+
|
|
103
|
+
// Check if events were emitted
|
|
104
|
+
let eventCount = 0;
|
|
105
|
+
receipt?.logs.forEach((log: any) => {
|
|
106
|
+
try {
|
|
107
|
+
const parsed = implementation.interface.parseLog({ topics: log.topics as string[], data: log.data });
|
|
108
|
+
if (parsed) {
|
|
109
|
+
eventCount++;
|
|
110
|
+
console.log(` ā
Event ${eventCount}: ${parsed.name} - ${parsed.args[1] || parsed.args[0]}`);
|
|
111
|
+
}
|
|
112
|
+
} catch (e) {}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
if (eventCount >= 3) {
|
|
116
|
+
console.log(` ā
SUCCESS: IT-types validated and addition completed!`);
|
|
117
|
+
console.log(` š Attempting to decrypt result...`);
|
|
118
|
+
|
|
119
|
+
// Get the stored encrypted value and decrypt
|
|
120
|
+
const storedCt = await proxyAsImpl.getStoredResult();
|
|
121
|
+
if (storedCt && storedCt.ciphertextHigh && storedCt.ciphertextLow) {
|
|
122
|
+
console.log(` ā
Encrypted result stored on contract`);
|
|
123
|
+
const decrypted = await owner.decryptValue256({
|
|
124
|
+
ciphertextHigh: storedCt.ciphertextHigh,
|
|
125
|
+
ciphertextLow: storedCt.ciphertextLow
|
|
126
|
+
});
|
|
127
|
+
console.log(` ā
Decrypted result: ${decrypted.toString()}`);
|
|
128
|
+
console.log(` ā
Expected result: ${expected.toString()}`);
|
|
129
|
+
expect(decrypted).to.equal(expected);
|
|
130
|
+
console.log(` Status: ā
VERIFIED - IT-types work through delegatecall proxy!\n`);
|
|
131
|
+
} else {
|
|
132
|
+
console.log(` Status: ā
VERIFIED - IT-types validated (result stored)\n`);
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
console.log(` ā FAILED: Expected at least 3 events, got ${eventCount}`);
|
|
136
|
+
console.log(` Status: ā FAILED - IT-type validation failed\n`);
|
|
137
|
+
throw new Error(`IT-type validation failed through proxy - only ${eventCount} events emitted`);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("itUint256 with different values through proxy", async function () {
|
|
142
|
+
console.log("\nTest 2: itUint256 addition with different values through proxy");
|
|
143
|
+
console.log(" Values: a=5000 (encrypted), b=3000 (encrypted)");
|
|
144
|
+
|
|
145
|
+
const proxyAddress = await proxy.getAddress();
|
|
146
|
+
const implAddress = await implementation.getAddress();
|
|
147
|
+
const addAndStoreFunc = proxyAsImpl.interface.getFunction("addAndStore");
|
|
148
|
+
if (!addAndStoreFunc) {
|
|
149
|
+
throw new Error("addAndStore function not found in contract interface");
|
|
150
|
+
}
|
|
151
|
+
const selector = addAndStoreFunc.selector;
|
|
152
|
+
|
|
153
|
+
console.log(` š Implementation address: ${implAddress}`);
|
|
154
|
+
console.log(` š Proxy address: ${proxyAddress}`);
|
|
155
|
+
console.log(` š Function selector: ${selector}`);
|
|
156
|
+
console.log(` ā
IT-type signed for: ${proxyAddress} (PROXY, not implementation)`);
|
|
157
|
+
console.log("");
|
|
158
|
+
|
|
159
|
+
// Use values > 128 bits for itUint256
|
|
160
|
+
const valueA = (2n ** 128n) + 5000n;
|
|
161
|
+
const valueB = (2n ** 128n) + 3000n;
|
|
162
|
+
const expected = valueA + valueB;
|
|
163
|
+
|
|
164
|
+
const encA = await owner.encryptValue256(valueA, proxyAddress, selector);
|
|
165
|
+
const encB = await owner.encryptValue256(valueB, proxyAddress, selector);
|
|
166
|
+
|
|
167
|
+
console.log(` IT-type a: ciphertextHigh=${encA.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
|
|
168
|
+
console.log(` ciphertextLow=${encA.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
|
|
169
|
+
console.log(` IT-type b: ciphertextHigh=${encB.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
|
|
170
|
+
console.log(` ciphertextLow=${encB.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
|
|
171
|
+
console.log(` š Sending to: ${proxyAddress}`);
|
|
172
|
+
|
|
173
|
+
// Send the transaction and check events
|
|
174
|
+
const tx = await proxyAsImpl.connect(owner).addAndStore(encA, encB, { gasLimit: GAS_LIMIT });
|
|
175
|
+
console.log(` š Transaction hash: ${tx.hash}`);
|
|
176
|
+
|
|
177
|
+
const receipt = await tx.wait();
|
|
178
|
+
console.log(` ā
Transaction confirmed in block: ${receipt?.blockNumber}`);
|
|
179
|
+
console.log(` š Gas used: ${receipt?.gasUsed.toString()}`);
|
|
180
|
+
|
|
181
|
+
// Check if events were emitted
|
|
182
|
+
let eventCount = 0;
|
|
183
|
+
receipt?.logs.forEach((log: any) => {
|
|
184
|
+
try {
|
|
185
|
+
const parsed = implementation.interface.parseLog({ topics: log.topics as string[], data: log.data });
|
|
186
|
+
if (parsed) {
|
|
187
|
+
eventCount++;
|
|
188
|
+
console.log(` ā
Event ${eventCount}: ${parsed.name}`);
|
|
189
|
+
}
|
|
190
|
+
} catch (e) {}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
if (eventCount >= 3) {
|
|
194
|
+
console.log(` ā
SUCCESS: IT-types validated and addition completed!`);
|
|
195
|
+
|
|
196
|
+
// Get the stored encrypted value and decrypt
|
|
197
|
+
const storedCt = await proxyAsImpl.getStoredResult();
|
|
198
|
+
if (storedCt && storedCt.ciphertextHigh && storedCt.ciphertextLow) {
|
|
199
|
+
const decrypted = await owner.decryptValue256({
|
|
200
|
+
ciphertextHigh: storedCt.ciphertextHigh,
|
|
201
|
+
ciphertextLow: storedCt.ciphertextLow
|
|
202
|
+
});
|
|
203
|
+
console.log(` ā
Decrypted result: ${decrypted.toString()}`);
|
|
204
|
+
expect(decrypted).to.equal(expected);
|
|
205
|
+
console.log(` Status: ā
VERIFIED - IT-types work through delegatecall proxy!\n`);
|
|
206
|
+
}
|
|
207
|
+
} else {
|
|
208
|
+
console.log(` ā FAILED: Expected at least 3 events, got ${eventCount}`);
|
|
209
|
+
throw new Error(`IT-type validation failed through proxy - only ${eventCount} events emitted`);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it("itUint256 SHOULD FAIL when signed for implementation address", async function () {
|
|
214
|
+
console.log("\nTest 3: itUint256 signed for WRONG address (implementation instead of proxy)");
|
|
215
|
+
console.log(" Values: a=5000 (encrypted), b=3000 (encrypted)");
|
|
216
|
+
|
|
217
|
+
const proxyAddress = await proxy.getAddress();
|
|
218
|
+
const implAddress = await implementation.getAddress();
|
|
219
|
+
const addAndStoreFunc = proxyAsImpl.interface.getFunction("addAndStore");
|
|
220
|
+
if (!addAndStoreFunc) {
|
|
221
|
+
throw new Error("addAndStore function not found in contract interface");
|
|
222
|
+
}
|
|
223
|
+
const selector = addAndStoreFunc.selector;
|
|
224
|
+
|
|
225
|
+
console.log(` š Implementation address: ${implAddress}`);
|
|
226
|
+
console.log(` š Proxy address: ${proxyAddress}`);
|
|
227
|
+
console.log(` ā IT-type signed for: ${implAddress} (WRONG - should be proxy)`);
|
|
228
|
+
console.log("");
|
|
229
|
+
|
|
230
|
+
// Use values > 128 bits for itUint256
|
|
231
|
+
const valueA = (2n ** 128n) + 5000n;
|
|
232
|
+
const valueB = (2n ** 128n) + 3000n;
|
|
233
|
+
|
|
234
|
+
// Sign for implementation address (WRONG!)
|
|
235
|
+
const encA = await owner.encryptValue256(valueA, implAddress, selector);
|
|
236
|
+
const encB = await owner.encryptValue256(valueB, implAddress, selector);
|
|
237
|
+
|
|
238
|
+
console.log(` š Sending to: ${proxyAddress}`);
|
|
239
|
+
console.log(` ā ļø But IT-types signed for: ${implAddress} (WRONG!)`);
|
|
240
|
+
|
|
241
|
+
try {
|
|
242
|
+
const tx = await proxyAsImpl.connect(owner).addAndStore(encA, encB, { gasLimit: GAS_LIMIT });
|
|
243
|
+
console.log(` š Transaction hash: ${tx.hash}`);
|
|
244
|
+
await tx.wait();
|
|
245
|
+
console.log(` Status: ā SHOULD NOT SUCCEED - signature mismatch should be detected!\n`);
|
|
246
|
+
throw new Error("Should have failed but succeeded");
|
|
247
|
+
} catch (error: any) {
|
|
248
|
+
console.log(` ā
Transaction correctly rejected (signature mismatch)`);
|
|
249
|
+
console.log(` Reason: IT-types signed for ${implAddress}`);
|
|
250
|
+
console.log(` but sent to ${proxyAddress}\n`);
|
|
251
|
+
expect(error.message).to.include("revert");
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
after(function() {
|
|
257
|
+
console.log("=".repeat(70));
|
|
258
|
+
console.log("TEST RESULTS SUMMARY:");
|
|
259
|
+
console.log(" ā
Test 1 - itUint256: WORKS (events confirm IT-type validation)");
|
|
260
|
+
console.log(" ā
Test 2 - itUint256 (diff): WORKS (events confirm IT-type validation)");
|
|
261
|
+
console.log(" ā
Test 3 - Wrong signature: CORRECTLY REJECTED");
|
|
262
|
+
console.log("\nšÆ KEY FINDINGS:");
|
|
263
|
+
console.log(" 1. IT-types MUST be signed for PROXY address (not implementation)");
|
|
264
|
+
console.log(" 2. Delegatecall preserves address(this) = PROXY address");
|
|
265
|
+
console.log(" 3. MpcCore.validateCiphertext validates against address(this)");
|
|
266
|
+
console.log(" 4. Signature matches ā validation succeeds ā
");
|
|
267
|
+
console.log(" 5. Events (InputsReceived, CalculationDone, ResultStored) prove successful validation");
|
|
268
|
+
console.log("\nā ļø IMPORTANT NOTE:");
|
|
269
|
+
console.log(" staticCall doesn't work with MPC operations (state modifications needed)");
|
|
270
|
+
console.log(" Use actual transactions and check events to verify IT-type validation");
|
|
271
|
+
console.log("\nā
CONCLUSION:");
|
|
272
|
+
console.log(" Standard delegatecall proxy pattern WORKS PERFECTLY with IT-types!");
|
|
273
|
+
console.log(" Requirements:");
|
|
274
|
+
console.log(" ⢠IT-types signed for proxy address");
|
|
275
|
+
console.log(" ⢠Use actual transactions (not staticCall)");
|
|
276
|
+
console.log(" ⢠Verify success via emitted events");
|
|
277
|
+
console.log("=".repeat(70));
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
|