@coti-io/coti-contracts 1.2.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 +1 -1
- 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/PrivateERC20/PrivacyBridgeERC20Mock.sol +8 -3
- package/contracts/node/SoulboundNodeNFT.sol +22 -22
- 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 +373 -91
- package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +209 -161
- package/contracts/privacyBridge/PrivacyBridgeERC20.sol +241 -159
- package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +7 -1
- package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +7 -1
- package/contracts/privacyBridge/PrivacyBridgeWADA.sol +7 -1
- package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +7 -1
- package/contracts/privacyBridge/PrivacyBridgeWETH.sol +7 -1
- package/contracts/privacyBridge/PrivacyBridgegCoti.sol +7 -1
- package/hardhat.config.ts +5 -2
- package/package.json +2 -2
- 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/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 +162 -239
- 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/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/index.ts +2 -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/extensions/IERC20Metadata.ts +286 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +1 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +1 -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/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 +2 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +22 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
- package/typechain-types/contracts/index.ts +8 -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/{utils/mpc/Bitwise128BitTestsContract.ts → token/PrivateERC20/PrivateERC20GtCallerMock.ts} +47 -67
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +757 -25
- 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/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 +439 -19
- 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 +763 -15
- 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/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/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -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/extensions/IERC20Metadata__factory.ts +247 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +1 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +1 -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/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 +1 -1
- package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +2 -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 +19 -1
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +1 -1
- package/typechain-types/factories/contracts/index.ts +4 -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 +771 -55
- 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 +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
- 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 +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +1 -1
- 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 +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
- 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 +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
- 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 +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
- 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 +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +4 -22
- 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 +481 -35
- 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 +793 -59
- 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/hardhat.d.ts +953 -17
- package/typechain-types/index.ts +104 -0
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.ts +0 -341
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +0 -347
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +0 -186
- package/typechain-types/contracts/mocks/utils/mpc/Comparison128BitTestsContract.ts +0 -260
- package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +0 -260
- 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,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grant OPERATOR_ROLE on each privacy bridge via addOperator(account).
|
|
3
|
+
* Caller must hold DEFAULT_ADMIN_ROLE on every bridge (typically the deployer owner).
|
|
4
|
+
*
|
|
5
|
+
* Run with:
|
|
6
|
+
* npx hardhat run scripts/add-bridge-operators.cjs --network coti-mainnet
|
|
7
|
+
*
|
|
8
|
+
* Optional env:
|
|
9
|
+
* OPERATOR_ACCOUNT=0x... (default: 0x07dd528aC097f2Fb18fdC048e8d94376621b68C9)
|
|
10
|
+
*/
|
|
11
|
+
const hre = require("hardhat");
|
|
12
|
+
|
|
13
|
+
const CHAIN_IDS = {
|
|
14
|
+
cotiTestnet: 7082400,
|
|
15
|
+
cotiMainnet: 2632500,
|
|
16
|
+
"coti-testnet": 7082400,
|
|
17
|
+
"coti-mainnet": 2632500,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const DEFAULT_OPERATOR = "0x07dd528aC097f2Fb18fdC048e8d94376621b68C9";
|
|
21
|
+
|
|
22
|
+
/** Privacy bridge contract addresses per chain (from redeploy-private-and-bridges.cjs output). */
|
|
23
|
+
const BRIDGE_ADDRESSES = {
|
|
24
|
+
2632500: [
|
|
25
|
+
{ name: "PrivacyBridgeCotiNative", address: "0x44D864973392064304dD88E2BDef39fF1ab11b7b" },
|
|
26
|
+
{ name: "PrivacyBridgeWETH", address: "0x7286c83300f0C7131b4006f3cf9F8e44BeB45c13" },
|
|
27
|
+
{ name: "PrivacyBridgeWBTC", address: "0xc3B7EdEe4f1c0A0bA1AcD341e4982371eC869862" },
|
|
28
|
+
{ name: "PrivacyBridgeUSDT", address: "0x7685B473DAF1c6DeD815Ca64C6fa18Da2227440D" },
|
|
29
|
+
{ name: "PrivacyBridgeUSDCe", address: "0x29334fC23ffa2c44AF1b372336C2296591Eadd86" },
|
|
30
|
+
{ name: "PrivacyBridgeWADA", address: "0xFa2126C07F517013c8d237cc465342da89B96f92" },
|
|
31
|
+
{ name: "PrivacyBridgegCoti", address: "0xD4e0d9AB16b48c68044cB6aeA3A089380d6D8cD4" },
|
|
32
|
+
],
|
|
33
|
+
7082400: [],
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
async function main() {
|
|
37
|
+
const networkName = hre.network.name;
|
|
38
|
+
const chainId = CHAIN_IDS[networkName];
|
|
39
|
+
if (!chainId) {
|
|
40
|
+
throw new Error(`Unsupported network: "${networkName}". Use --network coti-testnet or --network coti-mainnet`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const bridges = BRIDGE_ADDRESSES[chainId];
|
|
44
|
+
if (!bridges?.length) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
`No bridge addresses configured for chainId ${chainId}. Add entries to BRIDGE_ADDRESSES in scripts/add-bridge-operators.cjs`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const operatorAccount = process.env.OPERATOR_ACCOUNT || DEFAULT_OPERATOR;
|
|
51
|
+
if (!hre.ethers.isAddress(operatorAccount)) {
|
|
52
|
+
throw new Error(`Invalid OPERATOR_ACCOUNT: ${operatorAccount}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const [signer] = await hre.ethers.getSigners();
|
|
56
|
+
console.log("Network:", networkName, `(chainId: ${chainId})`);
|
|
57
|
+
console.log("Signer:", signer.address);
|
|
58
|
+
console.log("Operator to add:", operatorAccount);
|
|
59
|
+
console.log("Bridges:", bridges.length);
|
|
60
|
+
|
|
61
|
+
const balance = await hre.ethers.provider.getBalance(signer.address);
|
|
62
|
+
if (balance === 0n) {
|
|
63
|
+
throw new Error("Signer has no COTI for gas");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
for (const bridge of bridges) {
|
|
67
|
+
process.stdout.write(` ${bridge.name} (${bridge.address})... `);
|
|
68
|
+
const contract = await hre.ethers.getContractAt("PrivacyBridge", bridge.address, signer);
|
|
69
|
+
|
|
70
|
+
const alreadyOperator = await contract.isOperator(operatorAccount);
|
|
71
|
+
if (alreadyOperator) {
|
|
72
|
+
console.log("already operator — skip");
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const tx = await contract.addOperator(operatorAccount, { gasLimit: 5_000_000 });
|
|
77
|
+
const receipt = await tx.wait();
|
|
78
|
+
console.log(`✅ tx ${receipt.hash}`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
console.log("\nDone.");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
main().catch((e) => {
|
|
85
|
+
console.error(e);
|
|
86
|
+
process.exitCode = 1;
|
|
87
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deploy CotiPriceConsumer on COTI Mainnet.
|
|
3
|
+
*
|
|
4
|
+
* Run with:
|
|
5
|
+
* npx hardhat compile
|
|
6
|
+
* npx hardhat run deploy/oracle/deploy-coti-price-consumer-mainnet.cjs --network cotiMainnet
|
|
7
|
+
*/
|
|
8
|
+
const hre = require("hardhat");
|
|
9
|
+
|
|
10
|
+
// Band Protocol StdReferenceProxy on COTI Mainnet
|
|
11
|
+
const BAND_REF_PROXY = "0x9503d502435f8e228b874Ba0F792301d4401b523";
|
|
12
|
+
|
|
13
|
+
// Maximum staleness in seconds (1 hour).
|
|
14
|
+
const MAX_STALENESS = 3600;
|
|
15
|
+
|
|
16
|
+
async function main() {
|
|
17
|
+
const [deployer] = await hre.ethers.getSigners();
|
|
18
|
+
console.log("Deploying CotiPriceConsumer with account:", deployer.address);
|
|
19
|
+
console.log("Network:", hre.network.name);
|
|
20
|
+
|
|
21
|
+
const balance = await hre.ethers.provider.getBalance(deployer.address);
|
|
22
|
+
console.log("Balance:", hre.ethers.formatEther(balance), "COTI");
|
|
23
|
+
|
|
24
|
+
if (balance === 0n) {
|
|
25
|
+
throw new Error("Deployer account has no COTI — fund it first");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const Factory = await hre.ethers.getContractFactory("CotiPriceConsumer");
|
|
29
|
+
const contract = await Factory.deploy(BAND_REF_PROXY, MAX_STALENESS, { gasLimit: 5000000 });
|
|
30
|
+
await contract.waitForDeployment();
|
|
31
|
+
|
|
32
|
+
const address = await contract.getAddress();
|
|
33
|
+
console.log("✅ CotiPriceConsumer deployed to:", address);
|
|
34
|
+
|
|
35
|
+
// Quick sanity read
|
|
36
|
+
try {
|
|
37
|
+
const price = await contract.getPrice("COTI");
|
|
38
|
+
const readable = Number(price) / 1e18;
|
|
39
|
+
console.log(" COTI/USD price (raw 1e18):", price.toString());
|
|
40
|
+
console.log(" COTI/USD price (USD): ", `$${readable}`);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
console.log(" ⚠️ Could not read price:", err.reason || err.message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
main().catch((e) => {
|
|
47
|
+
console.error(e);
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ethers } from "hardhat";
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
const [deployer] = await ethers.getSigners();
|
|
5
|
+
if (!deployer) {
|
|
6
|
+
throw new Error(
|
|
7
|
+
"No deployer signer found. Set PRIVATE_KEY in your environment."
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
console.log("Deploying CotiNodeRewards...");
|
|
12
|
+
console.log("Deployer:", deployer.address);
|
|
13
|
+
console.log("Owner:", deployer.address);
|
|
14
|
+
|
|
15
|
+
const provider = deployer.provider;
|
|
16
|
+
if (!provider) {
|
|
17
|
+
throw new Error("No provider found for deployer signer.");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// COTI RPC may not support "pending" block queries.
|
|
21
|
+
// Use legacy gas price + latest nonce + explicit gas limit to avoid
|
|
22
|
+
// pending-based fee/nonce/gas estimation lookups.
|
|
23
|
+
const gasPrice = BigInt(await provider.send("eth_gasPrice", []));
|
|
24
|
+
const nonce = await provider.getTransactionCount(deployer.address, "latest");
|
|
25
|
+
const gasLimit = BigInt(process.env.REWARDS_DEPLOY_GAS_LIMIT || "6000000");
|
|
26
|
+
|
|
27
|
+
const factory = await ethers.getContractFactory("CotiNodeRewards");
|
|
28
|
+
const deployTxReq = await factory.getDeployTransaction();
|
|
29
|
+
if (!deployTxReq.data) {
|
|
30
|
+
throw new Error("Failed to build deploy transaction data.");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const sentTx = await deployer.sendTransaction({
|
|
34
|
+
data: deployTxReq.data,
|
|
35
|
+
gasPrice,
|
|
36
|
+
nonce,
|
|
37
|
+
gasLimit,
|
|
38
|
+
});
|
|
39
|
+
console.log("Deployment tx hash:", sentTx.hash);
|
|
40
|
+
const receipt = await sentTx.wait();
|
|
41
|
+
if (!receipt || !receipt.contractAddress) {
|
|
42
|
+
throw new Error("Deployment transaction mined but no contract address found.");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
console.log("CotiNodeRewards deployed at:", receipt.contractAddress);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
main().catch((error) => {
|
|
49
|
+
console.error(error);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
});
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redeployment script for Private Tokens and Bridges only.
|
|
3
|
+
*
|
|
4
|
+
* Public token addresses are hardcoded per network. After deployment,
|
|
5
|
+
* the script prints the full config block to stdout for manual copy
|
|
6
|
+
* into config.ts.
|
|
7
|
+
*
|
|
8
|
+
* Run with:
|
|
9
|
+
* npx hardhat compile
|
|
10
|
+
* npx hardhat run scripts/redeploy-private-and-bridges.cjs --network cotiTestnet
|
|
11
|
+
* npx hardhat run scripts/redeploy-private-and-bridges.cjs --network cotiMainnet
|
|
12
|
+
*/
|
|
13
|
+
const hre = require("hardhat");
|
|
14
|
+
|
|
15
|
+
const CHAIN_IDS = {
|
|
16
|
+
cotiTestnet: 7082400,
|
|
17
|
+
cotiMainnet: 2632500,
|
|
18
|
+
"coti-testnet": 7082400,
|
|
19
|
+
"coti-mainnet": 2632500,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const PUBLIC_TOKEN_ADDRESSES = {
|
|
23
|
+
7082400: { // COTI Testnet
|
|
24
|
+
WETH: "0x8bca4e6bbE402DB4aD189A316137aD08206154FB",
|
|
25
|
+
WBTC: "0x5dBDb2E5D51c3FFab5D6B862Caa11FCe1D83F492",
|
|
26
|
+
USDT: "0x9e961430053cd5AbB3b060544cEcCec848693Cf0",
|
|
27
|
+
USDC_E: "0x63f3D2Cc8F5608F57ce6E5Aa3590A2Beb428D19C",
|
|
28
|
+
WADA: "0xe3E2cd3Abf412c73a404b9b8227B71dE3CfE829D",
|
|
29
|
+
gCOTI: "0x878a42D3cB737DEC9E6c7e7774d973F46fd8ed4C",
|
|
30
|
+
},
|
|
31
|
+
2632500: { // COTI Mainnet
|
|
32
|
+
WETH: "0x639aCc80569c5FC83c6FBf2319A6Cc38bBfe26d1",
|
|
33
|
+
WBTC: "0x8C39B1fD0e6260fdf20652Fc436d25026832bfEA",
|
|
34
|
+
USDT: "0xfA6f73446b17A97a56e464256DA54AD43c2Cbc3E",
|
|
35
|
+
USDC_E: "0xf1Feebc4376c68B7003450ae66343Ae59AB37D3C",
|
|
36
|
+
WADA: "0xe757Ca19d2c237AA52eBb1d2E8E4368eeA3eb331",
|
|
37
|
+
gCOTI: "0x7637C7838EC4Ec6b85080F28A678F8E234bB83D1",
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
function printConfigBlock(chainId, addresses) {
|
|
42
|
+
const networkName = chainId === 2632500 ? "COTI Mainnet" : "COTI Testnet";
|
|
43
|
+
console.log("\n========================================================");
|
|
44
|
+
console.log(" DEPLOYMENT COMPLETE — Copy this block into config.ts:");
|
|
45
|
+
console.log("========================================================");
|
|
46
|
+
console.log(` // ${networkName}`);
|
|
47
|
+
console.log(` ${chainId}: {`);
|
|
48
|
+
console.log(` // Native`);
|
|
49
|
+
console.log(` PrivateCoti: "${addresses.PrivateCOTI}",`);
|
|
50
|
+
console.log(` PrivacyBridgeCotiNative: "${addresses.PrivacyBridgeCotiNative}",`);
|
|
51
|
+
console.log(``);
|
|
52
|
+
console.log(` // Public Tokens`);
|
|
53
|
+
console.log(` WETH: "${addresses.WETH}",`);
|
|
54
|
+
console.log(` WBTC: "${addresses.WBTC}",`);
|
|
55
|
+
console.log(` USDT: "${addresses.USDT}",`);
|
|
56
|
+
console.log(` USDC_E: "${addresses.USDC_E}",`);
|
|
57
|
+
console.log(` WADA: "${addresses.WADA}",`);
|
|
58
|
+
console.log(` gCOTI: "${addresses.gCOTI}",`);
|
|
59
|
+
console.log(``);
|
|
60
|
+
console.log(` // Private Tokens`);
|
|
61
|
+
console.log(` "p.WETH": "${addresses.PrivateWrappedEther}",`);
|
|
62
|
+
console.log(` "p.WBTC": "${addresses.PrivateWrappedBTC}",`);
|
|
63
|
+
console.log(` "p.USDT": "${addresses.PrivateTetherUSD}",`);
|
|
64
|
+
console.log(` "p.USDC_E": "${addresses.PrivateBridgedUSDC}",`);
|
|
65
|
+
console.log(` "p.WADA": "${addresses.PrivateWrappedADA}",`);
|
|
66
|
+
console.log(` "p.gCOTI": "${addresses.PrivateCOTITreasuryGovernanceToken}",`);
|
|
67
|
+
console.log(``);
|
|
68
|
+
console.log(` // Bridges`);
|
|
69
|
+
console.log(` PrivacyBridgeWETH: "${addresses.PrivacyBridgeWETH}",`);
|
|
70
|
+
console.log(` PrivacyBridgeWBTC: "${addresses.PrivacyBridgeWBTC}",`);
|
|
71
|
+
console.log(` PrivacyBridgeUSDT: "${addresses.PrivacyBridgeUSDT}",`);
|
|
72
|
+
console.log(` PrivacyBridgeUSDCe: "${addresses.PrivacyBridgeUSDCe}",`);
|
|
73
|
+
console.log(` PrivacyBridgeWADA: "${addresses.PrivacyBridgeWADA}",`);
|
|
74
|
+
console.log(` PrivacyBridgegCOTI: "${addresses.PrivacyBridgegCoti}"`);
|
|
75
|
+
console.log(` }`);
|
|
76
|
+
console.log("========================================================\n");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function main() {
|
|
80
|
+
const [deployer] = await hre.ethers.getSigners();
|
|
81
|
+
const networkName = hre.network.name;
|
|
82
|
+
const chainId = CHAIN_IDS[networkName];
|
|
83
|
+
|
|
84
|
+
if (!chainId) {
|
|
85
|
+
throw new Error(`Unsupported network: "${networkName}". Use --network cotiTestnet or --network cotiMainnet`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log("Redeploying with account:", deployer.address);
|
|
89
|
+
console.log("Network:", networkName, `(chainId: ${chainId})`);
|
|
90
|
+
|
|
91
|
+
// ── Resolve public token addresses from hardcoded config ───────────────
|
|
92
|
+
console.log("\n--- Public Token Addresses ---");
|
|
93
|
+
const publicTokens = PUBLIC_TOKEN_ADDRESSES[chainId];
|
|
94
|
+
if (!publicTokens) {
|
|
95
|
+
throw new Error(`No public token addresses configured for chainId ${chainId}`);
|
|
96
|
+
}
|
|
97
|
+
for (const [key, addr] of Object.entries(publicTokens)) {
|
|
98
|
+
if (!addr) throw new Error(`Missing public token address for ${key} (chainId: ${chainId})`);
|
|
99
|
+
console.log(` ${key}: ${addr}`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const newAddresses = { ...publicTokens };
|
|
103
|
+
|
|
104
|
+
// ── 1. Redeploy Private Tokens ─────────────────────────────────────────
|
|
105
|
+
console.log("\n--- Redeploying Private Tokens ---");
|
|
106
|
+
const privateTokens = [
|
|
107
|
+
{ name: "PrivateCOTI", key: "PrivateCOTI" },
|
|
108
|
+
{ name: "PrivateWrappedEther", key: "PrivateWrappedEther" },
|
|
109
|
+
{ name: "PrivateWrappedBTC", key: "PrivateWrappedBTC" },
|
|
110
|
+
{ name: "PrivateTetherUSD", key: "PrivateTetherUSD" },
|
|
111
|
+
{ name: "PrivateBridgedUSDC", key: "PrivateBridgedUSDC" },
|
|
112
|
+
{ name: "PrivateWrappedADA", key: "PrivateWrappedADA" },
|
|
113
|
+
{ name: "PrivateCOTITreasuryGovernanceToken", key: "PrivateCOTITreasuryGovernanceToken" },
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
for (const pt of privateTokens) {
|
|
117
|
+
process.stdout.write(` Deploying ${pt.name}... `);
|
|
118
|
+
const Factory = await hre.ethers.getContractFactory(pt.name);
|
|
119
|
+
const contract = await Factory.deploy({ gasLimit: 12000000 });
|
|
120
|
+
await contract.waitForDeployment();
|
|
121
|
+
newAddresses[pt.key] = await contract.getAddress();
|
|
122
|
+
console.log(`✅ ${newAddresses[pt.key]}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ── 2. Redeploy Bridges ────────────────────────────────────────────────
|
|
126
|
+
console.log("\n--- Redeploying Bridges ---");
|
|
127
|
+
|
|
128
|
+
const feeRecipient = process.env.FEE_RECIPIENT;
|
|
129
|
+
const rescueRecipient = process.env.RESCUE_RECIPIENT;
|
|
130
|
+
if (!feeRecipient) throw new Error("FEE_RECIPIENT not set in .env");
|
|
131
|
+
if (!rescueRecipient) throw new Error("RESCUE_RECIPIENT not set in .env");
|
|
132
|
+
console.log(` feeRecipient: ${feeRecipient}`);
|
|
133
|
+
console.log(` rescueRecipient: ${rescueRecipient}`);
|
|
134
|
+
|
|
135
|
+
// CotiPriceConsumer deployed addresses per network
|
|
136
|
+
const PRICE_ORACLE = {
|
|
137
|
+
7082400: "0xAC89a381E84fbd5B3B536a3b895eB2aDdaDC36A1", // testnet
|
|
138
|
+
2632500: "0x830c5112E677459648C1aa7Bc5Dd65A36d71Aa4D", // mainnet
|
|
139
|
+
};
|
|
140
|
+
const oracleAddr = PRICE_ORACLE[chainId];
|
|
141
|
+
if (!oracleAddr) throw new Error(`No price oracle address configured for chainId ${chainId}`);
|
|
142
|
+
console.log(` priceOracle: ${oracleAddr}`);
|
|
143
|
+
|
|
144
|
+
const bridges = [
|
|
145
|
+
{ name: "PrivacyBridgeCotiNative", publicKey: null, privateKey: "PrivateCOTI", bridgeKey: "PrivacyBridgeCotiNative" },
|
|
146
|
+
{ name: "PrivacyBridgeWETH", publicKey: "WETH", privateKey: "PrivateWrappedEther", bridgeKey: "PrivacyBridgeWETH" },
|
|
147
|
+
{ name: "PrivacyBridgeWBTC", publicKey: "WBTC", privateKey: "PrivateWrappedBTC", bridgeKey: "PrivacyBridgeWBTC" },
|
|
148
|
+
{ name: "PrivacyBridgeUSDT", publicKey: "USDT", privateKey: "PrivateTetherUSD", bridgeKey: "PrivacyBridgeUSDT" },
|
|
149
|
+
{ name: "PrivacyBridgeUSDCe", publicKey: "USDC_E", privateKey: "PrivateBridgedUSDC", bridgeKey: "PrivacyBridgeUSDCe" },
|
|
150
|
+
{ name: "PrivacyBridgeWADA", publicKey: "WADA", privateKey: "PrivateWrappedADA", bridgeKey: "PrivacyBridgeWADA" },
|
|
151
|
+
{ name: "PrivacyBridgegCoti", publicKey: "gCOTI", privateKey: "PrivateCOTITreasuryGovernanceToken", bridgeKey: "PrivacyBridgegCoti" },
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
for (const bridge of bridges) {
|
|
155
|
+
process.stdout.write(` Deploying ${bridge.name}... `);
|
|
156
|
+
const Factory = await hre.ethers.getContractFactory(bridge.name);
|
|
157
|
+
let contract;
|
|
158
|
+
if (bridge.publicKey) {
|
|
159
|
+
// ERC20 bridge: constructor(address _token, address _privateToken, address _feeRecipient, address _rescueRecipient, address _priceOracle)
|
|
160
|
+
contract = await Factory.deploy(
|
|
161
|
+
newAddresses[bridge.publicKey],
|
|
162
|
+
newAddresses[bridge.privateKey],
|
|
163
|
+
feeRecipient,
|
|
164
|
+
rescueRecipient,
|
|
165
|
+
oracleAddr,
|
|
166
|
+
{ gasLimit: 12000000 }
|
|
167
|
+
);
|
|
168
|
+
} else {
|
|
169
|
+
// Native bridge: constructor(address _privateCoti, address _feeRecipient, address _rescueRecipient, address _priceOracle)
|
|
170
|
+
contract = await Factory.deploy(newAddresses[bridge.privateKey], feeRecipient, rescueRecipient, oracleAddr, { gasLimit: 12000000 });
|
|
171
|
+
}
|
|
172
|
+
await contract.waitForDeployment();
|
|
173
|
+
newAddresses[bridge.bridgeKey] = await contract.getAddress();
|
|
174
|
+
console.log(`✅ ${newAddresses[bridge.bridgeKey]}`);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ── 3. Grant Roles ─────────────────────────────────────────────────────
|
|
178
|
+
console.log("\n--- Granting Roles ---");
|
|
179
|
+
const MINTER_ROLE = hre.ethers.id("MINTER_ROLE");
|
|
180
|
+
const BURNER_ROLE = hre.ethers.id("BURNER_ROLE");
|
|
181
|
+
|
|
182
|
+
for (const bridge of bridges) {
|
|
183
|
+
const ptAddress = newAddresses[bridge.privateKey];
|
|
184
|
+
const bridgeAddress = newAddresses[bridge.bridgeKey];
|
|
185
|
+
const ptContract = await hre.ethers.getContractAt("PrivateERC20", ptAddress);
|
|
186
|
+
|
|
187
|
+
process.stdout.write(` ${bridge.name}: granting MINTER_ROLE... `);
|
|
188
|
+
const tx1 = await ptContract.grantRole(MINTER_ROLE, bridgeAddress, { gasLimit: 5000000 });
|
|
189
|
+
await tx1.wait();
|
|
190
|
+
process.stdout.write("✅ BURNER_ROLE... ");
|
|
191
|
+
const tx2 = await ptContract.grantRole(BURNER_ROLE, bridgeAddress, { gasLimit: 5000000 });
|
|
192
|
+
await tx2.wait();
|
|
193
|
+
console.log("✅");
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
// ── 5. Print config block ──────────────────────────────────────────────
|
|
198
|
+
printConfigBlock(chainId, newAddresses);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
main().catch((e) => { console.error(e); process.exitCode = 1; });
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set deposit/withdraw limits on all mainnet privacy bridges via setLimits().
|
|
3
|
+
* Caller must be the bridge owner (onlyOwner).
|
|
4
|
+
*
|
|
5
|
+
* Human-readable defaults (scaled per bridge token decimals):
|
|
6
|
+
* min deposit = 1
|
|
7
|
+
* max deposit = 100000
|
|
8
|
+
* min withdraw = 1
|
|
9
|
+
* max withdraw = 100000
|
|
10
|
+
*
|
|
11
|
+
* Example: COTI native (18 decimals) → min deposit = 1e18 wei.
|
|
12
|
+
*
|
|
13
|
+
* Run with:
|
|
14
|
+
* npx hardhat run scripts/set-bridge-limits-mainnet.cjs --network coti-mainnet
|
|
15
|
+
*
|
|
16
|
+
* Optional env overrides (human amounts): MIN_DEPOSIT, MAX_DEPOSIT, MIN_WITHDRAW, MAX_WITHDRAW
|
|
17
|
+
*/
|
|
18
|
+
const hre = require("hardhat");
|
|
19
|
+
|
|
20
|
+
const CHAIN_IDS = {
|
|
21
|
+
cotiTestnet: 7082400,
|
|
22
|
+
cotiMainnet: 2632500,
|
|
23
|
+
"coti-testnet": 7082400,
|
|
24
|
+
"coti-mainnet": 2632500,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/** Human-readable limit amounts (before decimals scaling). */
|
|
28
|
+
const DEFAULT_LIMITS_HUMAN = {
|
|
29
|
+
minDeposit: 0n,
|
|
30
|
+
maxDeposit: 100_000n,
|
|
31
|
+
minWithdraw: 0n,
|
|
32
|
+
maxWithdraw: 100_000n,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** Privacy bridge contract addresses per chain (from redeploy-private-and-bridges.cjs output). */
|
|
36
|
+
const BRIDGE_ADDRESSES = {
|
|
37
|
+
2632500: [
|
|
38
|
+
{ name: "PrivacyBridgeCotiNative", address: "0x44D864973392064304dD88E2BDef39fF1ab11b7b" },
|
|
39
|
+
{ name: "PrivacyBridgeWETH", address: "0x7286c83300f0C7131b4006f3cf9F8e44BeB45c13" },
|
|
40
|
+
{ name: "PrivacyBridgeWBTC", address: "0xc3B7EdEe4f1c0A0bA1AcD341e4982371eC869862" },
|
|
41
|
+
{ name: "PrivacyBridgeUSDT", address: "0x7685B473DAF1c6DeD815Ca64C6fa18Da2227440D" },
|
|
42
|
+
{ name: "PrivacyBridgeUSDCe", address: "0x29334fC23ffa2c44AF1b372336C2296591Eadd86" },
|
|
43
|
+
{ name: "PrivacyBridgeWADA", address: "0xFa2126C07F517013c8d237cc465342da89B96f92" },
|
|
44
|
+
{ name: "PrivacyBridgegCoti", address: "0xD4e0d9AB16b48c68044cB6aeA3A089380d6D8cD4" },
|
|
45
|
+
],
|
|
46
|
+
7082400: [],
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const DECIMALS_ABI = ["function decimals() view returns (uint8)"];
|
|
50
|
+
|
|
51
|
+
function parseLimitHuman(name, fallback) {
|
|
52
|
+
const raw = process.env[name];
|
|
53
|
+
if (raw === undefined || raw === "") return fallback;
|
|
54
|
+
try {
|
|
55
|
+
return BigInt(raw);
|
|
56
|
+
} catch {
|
|
57
|
+
throw new Error(`Invalid ${name}: ${raw}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function scaleHumanAmount(humanAmount, decimals) {
|
|
62
|
+
return humanAmount * 10n ** BigInt(decimals);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function scaleLimitsHuman(humanLimits, decimals) {
|
|
66
|
+
return {
|
|
67
|
+
minDeposit: scaleHumanAmount(humanLimits.minDeposit, decimals),
|
|
68
|
+
maxDeposit: scaleHumanAmount(humanLimits.maxDeposit, decimals),
|
|
69
|
+
minWithdraw: scaleHumanAmount(humanLimits.minWithdraw, decimals),
|
|
70
|
+
maxWithdraw: scaleHumanAmount(humanLimits.maxWithdraw, decimals),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function limitsMatch(onChain, limits) {
|
|
75
|
+
return (
|
|
76
|
+
onChain.minDeposit === limits.minDeposit &&
|
|
77
|
+
onChain.maxDeposit === limits.maxDeposit &&
|
|
78
|
+
onChain.minWithdraw === limits.minWithdraw &&
|
|
79
|
+
onChain.maxWithdraw === limits.maxWithdraw
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async function getBridgeTokenDecimals(bridgeAddress, bridgeName) {
|
|
84
|
+
if (bridgeName === "PrivacyBridgeCotiNative") {
|
|
85
|
+
const bridge = await hre.ethers.getContractAt("PrivacyBridgeCotiNative", bridgeAddress);
|
|
86
|
+
const privateCotiAddr = await bridge.privateCoti();
|
|
87
|
+
const privateCoti = await hre.ethers.getContractAt(DECIMALS_ABI, privateCotiAddr);
|
|
88
|
+
return privateCoti.decimals();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ERC20 bridges expose `token()` on the concrete implementation ABI (not on abstract PrivacyBridge).
|
|
92
|
+
const bridge = await hre.ethers.getContractAt("PrivacyBridgeWETH", bridgeAddress);
|
|
93
|
+
const tokenAddr = await bridge.token();
|
|
94
|
+
const token = await hre.ethers.getContractAt(DECIMALS_ABI, tokenAddr);
|
|
95
|
+
return token.decimals();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async function main() {
|
|
99
|
+
const networkName = hre.network.name;
|
|
100
|
+
const chainId = CHAIN_IDS[networkName];
|
|
101
|
+
if (!chainId) {
|
|
102
|
+
throw new Error(`Unsupported network: "${networkName}". Use --network coti-testnet or --network coti-mainnet`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const bridges = BRIDGE_ADDRESSES[chainId];
|
|
106
|
+
if (!bridges?.length) {
|
|
107
|
+
throw new Error(
|
|
108
|
+
`No bridge addresses configured for chainId ${chainId}. Add entries to BRIDGE_ADDRESSES in scripts/set-bridge-limits-mainnet.cjs`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const limitsHuman = {
|
|
113
|
+
minDeposit: parseLimitHuman("MIN_DEPOSIT", DEFAULT_LIMITS_HUMAN.minDeposit),
|
|
114
|
+
maxDeposit: parseLimitHuman("MAX_DEPOSIT", DEFAULT_LIMITS_HUMAN.maxDeposit),
|
|
115
|
+
minWithdraw: parseLimitHuman("MIN_WITHDRAW", DEFAULT_LIMITS_HUMAN.minWithdraw),
|
|
116
|
+
maxWithdraw: parseLimitHuman("MAX_WITHDRAW", DEFAULT_LIMITS_HUMAN.maxWithdraw),
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
if (limitsHuman.minDeposit > limitsHuman.maxDeposit || limitsHuman.minWithdraw > limitsHuman.maxWithdraw) {
|
|
120
|
+
throw new Error("Invalid limits: min must be <= max for deposit and withdraw");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const [signer] = await hre.ethers.getSigners();
|
|
124
|
+
console.log("Network:", networkName, `(chainId: ${chainId})`);
|
|
125
|
+
console.log("Signer:", signer.address);
|
|
126
|
+
console.log("Human limits (all bridges):");
|
|
127
|
+
console.log(" minDeposit:", limitsHuman.minDeposit.toString());
|
|
128
|
+
console.log(" maxDeposit:", limitsHuman.maxDeposit.toString());
|
|
129
|
+
console.log(" minWithdraw:", limitsHuman.minWithdraw.toString());
|
|
130
|
+
console.log(" maxWithdraw:", limitsHuman.maxWithdraw.toString());
|
|
131
|
+
|
|
132
|
+
const balance = await hre.ethers.provider.getBalance(signer.address);
|
|
133
|
+
if (balance === 0n) {
|
|
134
|
+
throw new Error("Signer has no COTI for gas");
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
for (const bridge of bridges) {
|
|
138
|
+
process.stdout.write(` ${bridge.name} (${bridge.address})... `);
|
|
139
|
+
const contract = await hre.ethers.getContractAt("PrivacyBridge", bridge.address, signer);
|
|
140
|
+
|
|
141
|
+
const decimals = await getBridgeTokenDecimals(bridge.address, bridge.name);
|
|
142
|
+
const limits = scaleLimitsHuman(limitsHuman, decimals);
|
|
143
|
+
|
|
144
|
+
console.log(`decimals=${decimals}`);
|
|
145
|
+
console.log(` raw minDeposit=${limits.minDeposit} maxDeposit=${limits.maxDeposit}`);
|
|
146
|
+
console.log(` raw minWithdraw=${limits.minWithdraw} maxWithdraw=${limits.maxWithdraw}`);
|
|
147
|
+
|
|
148
|
+
const onChain = {
|
|
149
|
+
minDeposit: await contract.minDepositAmount(),
|
|
150
|
+
maxDeposit: await contract.maxDepositAmount(),
|
|
151
|
+
minWithdraw: await contract.minWithdrawAmount(),
|
|
152
|
+
maxWithdraw: await contract.maxWithdrawAmount(),
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
if (limitsMatch(onChain, limits)) {
|
|
156
|
+
console.log(" already set — skip");
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const tx = await contract.setLimits(
|
|
161
|
+
limits.minDeposit,
|
|
162
|
+
limits.maxDeposit,
|
|
163
|
+
limits.minWithdraw,
|
|
164
|
+
limits.maxWithdraw,
|
|
165
|
+
{ gasLimit: 5_000_000 }
|
|
166
|
+
);
|
|
167
|
+
const receipt = await tx.wait();
|
|
168
|
+
console.log(` ✅ tx ${receipt.hash}`);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
console.log("\nDone.");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
main().catch((e) => {
|
|
175
|
+
console.error(e);
|
|
176
|
+
process.exitCode = 1;
|
|
177
|
+
});
|