@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,251 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridge.sol";
|
|
5
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
6
|
+
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
7
|
+
import "../token/PrivateERC20/IPrivateERC20.sol";
|
|
8
|
+
import "../utils/mpc/MpcCore.sol";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @dev Abstract base contract for ERC20 Token Privacy Bridges
|
|
12
|
+
* @dev Handles the logic for bridging ERC20 tokens to their private counterparts.
|
|
13
|
+
* @dev The public ERC20 token must be standard (no fee-on-transfer, no rebasing); same decimals as private token.
|
|
14
|
+
*/
|
|
15
|
+
contract PrivacyBridgeERC20 is PrivacyBridge {
|
|
16
|
+
using SafeERC20 for IERC20;
|
|
17
|
+
|
|
18
|
+
/// @notice The public ERC20 token being bridged (e.g., USDC, WETH)
|
|
19
|
+
IERC20 public token;
|
|
20
|
+
|
|
21
|
+
/// @notice Private token contract being minted/burned
|
|
22
|
+
IPrivateERC20 public privateToken;
|
|
23
|
+
|
|
24
|
+
error InvalidTokenAddress();
|
|
25
|
+
error InvalidPrivateTokenAddress();
|
|
26
|
+
error CannotRescueBridgeToken();
|
|
27
|
+
error InvalidScalingFactor();
|
|
28
|
+
error AmountTooLarge();
|
|
29
|
+
error AmountTooSmall();
|
|
30
|
+
error InsufficientBridgeLiquidity();
|
|
31
|
+
error TokenTransferFailed();
|
|
32
|
+
error InvalidTokenSender();
|
|
33
|
+
error NativeFeeRequiredForTransferAndCallWithdraw();
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @notice Initialize the PrivacyBridgeERC20 contract
|
|
37
|
+
* @param _token Address of the public ERC20 token (must be standard: no fee-on-transfer, no rebasing; same decimals as private token)
|
|
38
|
+
* @param _privateToken Address of the private token
|
|
39
|
+
*/
|
|
40
|
+
constructor(address _token, address _privateToken) PrivacyBridge() {
|
|
41
|
+
if (_token == address(0)) revert InvalidTokenAddress();
|
|
42
|
+
if (_privateToken == address(0)) revert InvalidPrivateTokenAddress();
|
|
43
|
+
|
|
44
|
+
token = IERC20(_token);
|
|
45
|
+
privateToken = IPrivateERC20(_privateToken);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @notice Deposit public ERC20 tokens to receive equivalent private tokens
|
|
50
|
+
* @param amount Amount of public ERC20 tokens to deposit
|
|
51
|
+
* @dev Native COTI fee: send msg.value >= nativeCotiFee. Excess is refunded best-effort;
|
|
52
|
+
* if refund fails (e.g. sender cannot receive native token), excess remains in the contract and deposit still succeeds.
|
|
53
|
+
* Send exactly nativeCotiFee or ensure sender can receive native token to avoid leaving excess in the contract.
|
|
54
|
+
*/
|
|
55
|
+
function deposit(
|
|
56
|
+
uint256 amount
|
|
57
|
+
) external payable nonReentrant whenNotPaused {
|
|
58
|
+
_deposit(
|
|
59
|
+
amount,
|
|
60
|
+
false,
|
|
61
|
+
itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @notice Deposit public ERC20 tokens with an encrypted amount for the private minting event
|
|
67
|
+
* @param amount Public amount of tokens to lock
|
|
68
|
+
* @param encryptedAmount Encrypted amount to mint
|
|
69
|
+
* @dev Native COTI fee: send msg.value >= nativeCotiFee. Excess refunded best-effort (see deposit(uint256)).
|
|
70
|
+
*/
|
|
71
|
+
function deposit(
|
|
72
|
+
uint256 amount,
|
|
73
|
+
itUint256 calldata encryptedAmount
|
|
74
|
+
) external payable nonReentrant whenNotPaused {
|
|
75
|
+
_deposit(amount, true, encryptedAmount);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function _deposit(
|
|
79
|
+
uint256 amount,
|
|
80
|
+
bool isEncrypted,
|
|
81
|
+
itUint256 memory encryptedAmount
|
|
82
|
+
) internal {
|
|
83
|
+
if (!isDepositEnabled) revert DepositDisabled();
|
|
84
|
+
if (amount == 0) revert AmountZero();
|
|
85
|
+
if (msg.value < nativeCotiFee) revert InsufficientCotiFee();
|
|
86
|
+
|
|
87
|
+
_checkDepositLimits(amount);
|
|
88
|
+
|
|
89
|
+
// Handle native COTI fee (excess refunded to sender)
|
|
90
|
+
accumulatedCotiFees += nativeCotiFee;
|
|
91
|
+
|
|
92
|
+
token.safeTransferFrom(msg.sender, address(this), amount);
|
|
93
|
+
|
|
94
|
+
// Calculate and deduct deposit fee (in tokens)
|
|
95
|
+
uint256 feeAmount = _calculateFeeAmount(amount, depositFeeBasisPoints);
|
|
96
|
+
uint256 amountAfterFee = amount - feeAmount;
|
|
97
|
+
accumulatedFees += feeAmount;
|
|
98
|
+
|
|
99
|
+
if (isEncrypted) {
|
|
100
|
+
// Verify parity between public amount and encrypted amount
|
|
101
|
+
gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
|
|
102
|
+
gtBool amountMatch = MpcCore.eq(
|
|
103
|
+
gtAmount,
|
|
104
|
+
MpcCore.setPublic256(amountAfterFee)
|
|
105
|
+
);
|
|
106
|
+
require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
|
|
107
|
+
|
|
108
|
+
privateToken.mintGt(msg.sender, gtAmount);
|
|
109
|
+
} else {
|
|
110
|
+
privateToken.mint(msg.sender, amountAfterFee);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Emit gross deposit amount and net private tokens minted
|
|
114
|
+
emit Deposit(msg.sender, amount, amountAfterFee);
|
|
115
|
+
|
|
116
|
+
// Refund excess native COTI fee (best-effort: do not revert so deposit succeeds even if sender cannot receive)
|
|
117
|
+
if (msg.value > nativeCotiFee) {
|
|
118
|
+
uint256 excess = msg.value - nativeCotiFee;
|
|
119
|
+
(bool ok, ) = msg.sender.call{value: excess}("");
|
|
120
|
+
if (!ok) {
|
|
121
|
+
// Excess remains in contract; deposit still succeeds
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @notice Withdraw public ERC20 tokens by burning private tokens
|
|
128
|
+
* @param amount Amount of private tokens to burn
|
|
129
|
+
* @dev Requires prior approval on the private token. Native COTI fee: send msg.value >= nativeCotiFee; excess refunded best-effort (see deposit).
|
|
130
|
+
*/
|
|
131
|
+
function withdraw(
|
|
132
|
+
uint256 amount
|
|
133
|
+
) external payable nonReentrant whenNotPaused {
|
|
134
|
+
_withdraw(
|
|
135
|
+
amount,
|
|
136
|
+
false,
|
|
137
|
+
itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @notice Withdraw public ERC20 tokens by burning private tokens with an encrypted amount
|
|
143
|
+
* @param amount Public amount to release
|
|
144
|
+
* @param encryptedAmount Encrypted amount to burn
|
|
145
|
+
* @dev Native COTI fee: send msg.value >= nativeCotiFee; excess refunded best-effort (see deposit).
|
|
146
|
+
*/
|
|
147
|
+
function withdraw(
|
|
148
|
+
uint256 amount,
|
|
149
|
+
itUint256 calldata encryptedAmount
|
|
150
|
+
) external payable nonReentrant whenNotPaused {
|
|
151
|
+
_withdraw(amount, true, encryptedAmount);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function _withdraw(
|
|
155
|
+
uint256 amount,
|
|
156
|
+
bool isEncrypted,
|
|
157
|
+
itUint256 memory encryptedAmount
|
|
158
|
+
) internal {
|
|
159
|
+
if (amount == 0) revert AmountZero();
|
|
160
|
+
if (msg.value < nativeCotiFee) revert InsufficientCotiFee();
|
|
161
|
+
_checkWithdrawLimits(amount);
|
|
162
|
+
|
|
163
|
+
// Handle native COTI fee (excess refunded to sender)
|
|
164
|
+
accumulatedCotiFees += nativeCotiFee;
|
|
165
|
+
|
|
166
|
+
// Calculate fee on the public side
|
|
167
|
+
uint256 feeAmount = _calculateFeeAmount(amount, withdrawFeeBasisPoints);
|
|
168
|
+
uint256 amountAfterFee = amount - feeAmount;
|
|
169
|
+
accumulatedFees += feeAmount;
|
|
170
|
+
|
|
171
|
+
uint256 bridgeBalance = token.balanceOf(address(this));
|
|
172
|
+
if (bridgeBalance < amountAfterFee)
|
|
173
|
+
revert InsufficientBridgeLiquidity();
|
|
174
|
+
|
|
175
|
+
if (isEncrypted) {
|
|
176
|
+
// Verify parity
|
|
177
|
+
gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
|
|
178
|
+
gtBool amountMatch = MpcCore.eq(
|
|
179
|
+
gtAmount,
|
|
180
|
+
MpcCore.setPublic256(amount)
|
|
181
|
+
);
|
|
182
|
+
require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
|
|
183
|
+
|
|
184
|
+
// Use already-validated gt handle so PrivateERC20 does not re-call
|
|
185
|
+
// validateCiphertext with a different contract context (signature mismatch)
|
|
186
|
+
privateToken.transferFromGT(
|
|
187
|
+
msg.sender,
|
|
188
|
+
address(this),
|
|
189
|
+
gtAmount
|
|
190
|
+
);
|
|
191
|
+
privateToken.burnGt(gtAmount);
|
|
192
|
+
} else {
|
|
193
|
+
// Standard withdrawal (public amount)
|
|
194
|
+
privateToken.transferFrom(msg.sender, address(this), amount);
|
|
195
|
+
privateToken.burn(amount);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Transfer public tokens
|
|
199
|
+
token.safeTransfer(msg.sender, amountAfterFee);
|
|
200
|
+
|
|
201
|
+
emit Withdraw(msg.sender, amount, amountAfterFee);
|
|
202
|
+
|
|
203
|
+
// Refund excess native COTI fee (best-effort: do not revert so withdraw succeeds even if sender cannot receive)
|
|
204
|
+
if (msg.value > nativeCotiFee) {
|
|
205
|
+
uint256 excess = msg.value - nativeCotiFee;
|
|
206
|
+
(bool ok, ) = msg.sender.call{value: excess}("");
|
|
207
|
+
if (!ok) {
|
|
208
|
+
// Excess remains in contract; withdraw still succeeds
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @notice Withdraw accumulated fees (ERC20 implementation)
|
|
215
|
+
* @param to Address to send fees to
|
|
216
|
+
* @param amount Amount of fees to withdraw
|
|
217
|
+
* @dev Only the owner can call this function
|
|
218
|
+
*/
|
|
219
|
+
function withdrawFees(
|
|
220
|
+
address to,
|
|
221
|
+
uint256 amount
|
|
222
|
+
) external override onlyOperator {
|
|
223
|
+
if (to == address(0)) revert InvalidAddress();
|
|
224
|
+
if (amount == 0) revert AmountZero();
|
|
225
|
+
if (amount > accumulatedFees) revert InsufficientAccumulatedFees();
|
|
226
|
+
|
|
227
|
+
accumulatedFees -= amount;
|
|
228
|
+
|
|
229
|
+
// Transfer public ERC20 tokens
|
|
230
|
+
token.safeTransfer(to, amount);
|
|
231
|
+
|
|
232
|
+
emit FeesWithdrawn(to, amount);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @dev Rescue ERC20 tokens sent to the contract (excluding bridge and private tokens)
|
|
237
|
+
*/
|
|
238
|
+
function rescueERC20(
|
|
239
|
+
address _token,
|
|
240
|
+
address to,
|
|
241
|
+
uint256 amount
|
|
242
|
+
) external onlyOwner {
|
|
243
|
+
if (to == address(0)) revert InvalidAddress();
|
|
244
|
+
if (amount == 0) revert AmountZero();
|
|
245
|
+
|
|
246
|
+
if ( _token == address(privateToken))
|
|
247
|
+
revert CannotRescueBridgeToken();
|
|
248
|
+
|
|
249
|
+
IERC20(_token).safeTransfer(to, amount);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridgeERC20.sol";
|
|
5
|
+
import "../token/PrivateERC20/tokens/PrivateBridgedUSDC.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @title PrivacyBridgeUSDCe
|
|
9
|
+
* @notice Bridge contract for converting between USDC.e and privacy-preserving p.USDC.e tokens
|
|
10
|
+
*/
|
|
11
|
+
contract PrivacyBridgeUSDCe is PrivacyBridgeERC20 {
|
|
12
|
+
|
|
13
|
+
constructor(address _usdc, address _privateUsdc) PrivacyBridgeERC20(_usdc, _privateUsdc) {
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridgeERC20.sol";
|
|
5
|
+
import "../token/PrivateERC20/tokens/PrivateTetherUSD.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @title PrivacyBridgeUSDT
|
|
9
|
+
* @notice Bridge contract for converting between USDT and privacy-preserving p.USDT tokens
|
|
10
|
+
*/
|
|
11
|
+
contract PrivacyBridgeUSDT is PrivacyBridgeERC20 {
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
constructor(address _usdt, address _privateUsdt) PrivacyBridgeERC20(_usdt, _privateUsdt) {
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridgeERC20.sol";
|
|
5
|
+
import "../token/PrivateERC20/tokens/PrivateWrappedADA.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @title PrivacyBridgeWADA
|
|
9
|
+
* @notice Bridge contract for converting between WADA and privacy-preserving p.WADA tokens
|
|
10
|
+
*/
|
|
11
|
+
contract PrivacyBridgeWADA is PrivacyBridgeERC20 {
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
constructor(address _wada, address _privateWada) PrivacyBridgeERC20(_wada, _privateWada) {
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridgeERC20.sol";
|
|
5
|
+
import "../token/PrivateERC20/tokens/PrivateWrappedBTC.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @title PrivacyBridgeWBTC
|
|
9
|
+
* @notice Bridge contract for converting between WBTC and privacy-preserving p.WBTC tokens
|
|
10
|
+
*/
|
|
11
|
+
contract PrivacyBridgeWBTC is PrivacyBridgeERC20 {
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
constructor(address _wbtc, address _privateWbtc) PrivacyBridgeERC20(_wbtc, _privateWbtc) {
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridgeERC20.sol";
|
|
5
|
+
import "../token/PrivateERC20/tokens/PrivateWrappedEther.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @title PrivacyBridgeWETH
|
|
9
|
+
* @notice Bridge contract for converting between WETH and privacy-preserving p.WETH tokens
|
|
10
|
+
*/
|
|
11
|
+
contract PrivacyBridgeWETH is PrivacyBridgeERC20 {
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
constructor(address _weth, address _privateWeth) PrivacyBridgeERC20(_weth, _privateWeth) {
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import "./PrivacyBridgeERC20.sol";
|
|
5
|
+
import "../token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @title PrivacyBridgegCoti
|
|
9
|
+
* @notice Bridge contract for converting between gCOTI and privacy-preserving p.gCOTI tokens
|
|
10
|
+
*/
|
|
11
|
+
contract PrivacyBridgegCoti is PrivacyBridgeERC20 {
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
constructor(address _gCoti, address _privategCoti) PrivacyBridgeERC20(_gCoti, _privategCoti) {
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
}
|