From aed804fedadaf15adf9ca2629c452b738bcb29bc Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Thu, 10 Aug 2023 12:14:06 +0400 Subject: [PATCH 1/3] feat: update onCrossChainCall with zContext --- omnichain/minter/contracts/Minter.sol | 1 + omnichain/minter/package.json | 4 ++-- omnichain/minter/yarn.lock | 5 +++++ omnichain/multioutput/contracts/MultiOutput.sol | 1 + omnichain/multioutput/package.json | 2 +- omnichain/multioutput/yarn.lock | 10 +++++----- omnichain/swap/contracts/Swap.sol | 1 + omnichain/swap/package.json | 2 +- omnichain/swap/yarn.lock | 10 +++++----- omnichain/withdraw/contracts/Withdraw.sol | 1 + omnichain/withdraw/package.json | 2 +- omnichain/withdraw/yarn.lock | 5 +++++ 12 files changed, 29 insertions(+), 15 deletions(-) diff --git a/omnichain/minter/contracts/Minter.sol b/omnichain/minter/contracts/Minter.sol index b55e1d4..ab9ab0d 100644 --- a/omnichain/minter/contracts/Minter.sol +++ b/omnichain/minter/contracts/Minter.sol @@ -25,6 +25,7 @@ contract Minter is ERC20, zContract, MinterErrors { } function onCrossChainCall( + zContext calldata context, address zrc20, uint256 amount, bytes calldata message diff --git a/omnichain/minter/package.json b/omnichain/minter/package.json index 8c93e14..1f047ba 100644 --- a/omnichain/minter/package.json +++ b/omnichain/minter/package.json @@ -31,7 +31,7 @@ "@zetachain/faucet-cli": "^2.0.1", "@zetachain/interfaces": "^0.0.1", "@zetachain/networks": "^2.3.0-athens3", - "@zetachain/protocol-contracts": "^1.0.1-athens3", + "@zetachain/protocol-contracts": "^2.0.1", "@zetachain/toolkit": "^1.0.5-athens3", "axios": "^1.3.6", "chai": "^4.2.0", @@ -54,4 +54,4 @@ "typechain": "^8.1.0", "typescript": ">=4.5.0" } -} \ No newline at end of file +} diff --git a/omnichain/minter/yarn.lock b/omnichain/minter/yarn.lock index 492ad79..3d275e5 100644 --- a/omnichain/minter/yarn.lock +++ b/omnichain/minter/yarn.lock @@ -1357,6 +1357,11 @@ resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-1.0.1-athens3.tgz#50625f9cd493adf5c34215e671e141bdc47afc04" integrity sha512-qSf636dDBFZQWragbdphoQR1tH/SxKgzgXZWqBRGf16lavoMvcNMIlDerDIP81qK8ftV7el//adgOLvzXi8QFg== +"@zetachain/protocol-contracts@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-2.0.1.tgz#46101ca06115bcd43cbfc7b9437e1d3ecc91eac3" + integrity sha512-XvtITedZ+3odIzO9wArnGE3yI0zHQOvumFydUgLeNDsAR+QeKloF7MUdN1toD6hYB3SgF4na/fpj+x6AdJe2Bg== + "@zetachain/toolkit@^1.0.5-athens3": version "1.0.5-athens3" resolved "https://registry.yarnpkg.com/@zetachain/toolkit/-/toolkit-1.0.5-athens3.tgz#fa6616ea521945f856397fcca77d6df6c29e9e4a" diff --git a/omnichain/multioutput/contracts/MultiOutput.sol b/omnichain/multioutput/contracts/MultiOutput.sol index 84e57a9..1b95855 100644 --- a/omnichain/multioutput/contracts/MultiOutput.sol +++ b/omnichain/multioutput/contracts/MultiOutput.sol @@ -38,6 +38,7 @@ contract MultiOutput is zContract, Ownable { } function onCrossChainCall( + zContext calldata context, address zrc20, uint256 amount, bytes calldata message diff --git a/omnichain/multioutput/package.json b/omnichain/multioutput/package.json index d8fe8f5..f4a3666 100644 --- a/omnichain/multioutput/package.json +++ b/omnichain/multioutput/package.json @@ -30,7 +30,7 @@ "@zetachain/faucet-cli": "^2.0.1-beta.2", "@zetachain/interfaces": "^0.0.1", "@zetachain/networks": "^2.3.0-athens3", - "@zetachain/protocol-contracts": "^1.0.1-athens3", + "@zetachain/protocol-contracts": "^2.0.1", "@zetachain/toolkit": "^1.0.8-athens3", "axios": "^1.3.6", "chai": "^4.2.0", diff --git a/omnichain/multioutput/yarn.lock b/omnichain/multioutput/yarn.lock index edbab17..1dcbb5a 100644 --- a/omnichain/multioutput/yarn.lock +++ b/omnichain/multioutput/yarn.lock @@ -1357,6 +1357,11 @@ resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-1.0.1-athens3.tgz#50625f9cd493adf5c34215e671e141bdc47afc04" integrity sha512-qSf636dDBFZQWragbdphoQR1tH/SxKgzgXZWqBRGf16lavoMvcNMIlDerDIP81qK8ftV7el//adgOLvzXi8QFg== +"@zetachain/protocol-contracts@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-2.0.1.tgz#46101ca06115bcd43cbfc7b9437e1d3ecc91eac3" + integrity sha512-XvtITedZ+3odIzO9wArnGE3yI0zHQOvumFydUgLeNDsAR+QeKloF7MUdN1toD6hYB3SgF4na/fpj+x6AdJe2Bg== + "@zetachain/toolkit@^1.0.8-athens3": version "1.0.8-athens3" resolved "https://registry.yarnpkg.com/@zetachain/toolkit/-/toolkit-1.0.8-athens3.tgz#6434450163db3d0a0977af2b6b8ba13dd92918c9" @@ -6317,11 +6322,6 @@ typeforce@^1.11.3, typeforce@^1.18.0: resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== -typescript@4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - typescript@5.0.4, typescript@>=4.5.0: version "5.0.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" diff --git a/omnichain/swap/contracts/Swap.sol b/omnichain/swap/contracts/Swap.sol index e225516..d3d1b70 100644 --- a/omnichain/swap/contracts/Swap.sol +++ b/omnichain/swap/contracts/Swap.sol @@ -14,6 +14,7 @@ contract Swap is zContract { } function onCrossChainCall( + zContext calldata context, address zrc20, uint256 amount, bytes calldata message diff --git a/omnichain/swap/package.json b/omnichain/swap/package.json index d8fe8f5..f4a3666 100644 --- a/omnichain/swap/package.json +++ b/omnichain/swap/package.json @@ -30,7 +30,7 @@ "@zetachain/faucet-cli": "^2.0.1-beta.2", "@zetachain/interfaces": "^0.0.1", "@zetachain/networks": "^2.3.0-athens3", - "@zetachain/protocol-contracts": "^1.0.1-athens3", + "@zetachain/protocol-contracts": "^2.0.1", "@zetachain/toolkit": "^1.0.8-athens3", "axios": "^1.3.6", "chai": "^4.2.0", diff --git a/omnichain/swap/yarn.lock b/omnichain/swap/yarn.lock index edbab17..1dcbb5a 100644 --- a/omnichain/swap/yarn.lock +++ b/omnichain/swap/yarn.lock @@ -1357,6 +1357,11 @@ resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-1.0.1-athens3.tgz#50625f9cd493adf5c34215e671e141bdc47afc04" integrity sha512-qSf636dDBFZQWragbdphoQR1tH/SxKgzgXZWqBRGf16lavoMvcNMIlDerDIP81qK8ftV7el//adgOLvzXi8QFg== +"@zetachain/protocol-contracts@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-2.0.1.tgz#46101ca06115bcd43cbfc7b9437e1d3ecc91eac3" + integrity sha512-XvtITedZ+3odIzO9wArnGE3yI0zHQOvumFydUgLeNDsAR+QeKloF7MUdN1toD6hYB3SgF4na/fpj+x6AdJe2Bg== + "@zetachain/toolkit@^1.0.8-athens3": version "1.0.8-athens3" resolved "https://registry.yarnpkg.com/@zetachain/toolkit/-/toolkit-1.0.8-athens3.tgz#6434450163db3d0a0977af2b6b8ba13dd92918c9" @@ -6317,11 +6322,6 @@ typeforce@^1.11.3, typeforce@^1.18.0: resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== -typescript@4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - typescript@5.0.4, typescript@>=4.5.0: version "5.0.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" diff --git a/omnichain/withdraw/contracts/Withdraw.sol b/omnichain/withdraw/contracts/Withdraw.sol index 4aa9d83..9e4716c 100644 --- a/omnichain/withdraw/contracts/Withdraw.sol +++ b/omnichain/withdraw/contracts/Withdraw.sol @@ -17,6 +17,7 @@ contract Withdraw is zContract { } function onCrossChainCall( + zContext calldata context, address zrc20, uint256 amount, bytes calldata message diff --git a/omnichain/withdraw/package.json b/omnichain/withdraw/package.json index d8fe8f5..f4a3666 100644 --- a/omnichain/withdraw/package.json +++ b/omnichain/withdraw/package.json @@ -30,7 +30,7 @@ "@zetachain/faucet-cli": "^2.0.1-beta.2", "@zetachain/interfaces": "^0.0.1", "@zetachain/networks": "^2.3.0-athens3", - "@zetachain/protocol-contracts": "^1.0.1-athens3", + "@zetachain/protocol-contracts": "^2.0.1", "@zetachain/toolkit": "^1.0.8-athens3", "axios": "^1.3.6", "chai": "^4.2.0", diff --git a/omnichain/withdraw/yarn.lock b/omnichain/withdraw/yarn.lock index 1c39ff4..1dcbb5a 100644 --- a/omnichain/withdraw/yarn.lock +++ b/omnichain/withdraw/yarn.lock @@ -1357,6 +1357,11 @@ resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-1.0.1-athens3.tgz#50625f9cd493adf5c34215e671e141bdc47afc04" integrity sha512-qSf636dDBFZQWragbdphoQR1tH/SxKgzgXZWqBRGf16lavoMvcNMIlDerDIP81qK8ftV7el//adgOLvzXi8QFg== +"@zetachain/protocol-contracts@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-2.0.1.tgz#46101ca06115bcd43cbfc7b9437e1d3ecc91eac3" + integrity sha512-XvtITedZ+3odIzO9wArnGE3yI0zHQOvumFydUgLeNDsAR+QeKloF7MUdN1toD6hYB3SgF4na/fpj+x6AdJe2Bg== + "@zetachain/toolkit@^1.0.8-athens3": version "1.0.8-athens3" resolved "https://registry.yarnpkg.com/@zetachain/toolkit/-/toolkit-1.0.8-athens3.tgz#6434450163db3d0a0977af2b6b8ba13dd92918c9" From 5cc9a62837e23a0620b70d239541c75cf78fe9ca Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Thu, 17 Aug 2023 11:26:54 +0400 Subject: [PATCH 2/3] Added SenderNotSystemContract error --- omnichain/minter/contracts/Minter.sol | 8 +++++--- omnichain/multioutput/contracts/MultiOutput.sol | 4 ++++ omnichain/swap/contracts/Swap.sol | 5 +++++ omnichain/withdraw/contracts/Withdraw.sol | 4 ++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/omnichain/minter/contracts/Minter.sol b/omnichain/minter/contracts/Minter.sol index ab9ab0d..7828dab 100644 --- a/omnichain/minter/contracts/Minter.sol +++ b/omnichain/minter/contracts/Minter.sol @@ -6,11 +6,10 @@ import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; import "@zetachain/toolkit/contracts/BytesHelperLib.sol"; import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; -interface MinterErrors { +contract Minter is ERC20, zContract { error WrongChain(); -} + error SenderNotSystemContract(); -contract Minter is ERC20, zContract, MinterErrors { SystemContract public immutable systemContract; uint256 public immutable chain; @@ -30,6 +29,9 @@ contract Minter is ERC20, zContract, MinterErrors { uint256 amount, bytes calldata message ) external override { + if (msg.sender != address(systemContract)) { + revert SenderNotSystemContract(); + } address acceptedZRC20 = systemContract.gasCoinZRC20ByChainId(chain); if (zrc20 != acceptedZRC20) revert WrongChain(); diff --git a/omnichain/multioutput/contracts/MultiOutput.sol b/omnichain/multioutput/contracts/MultiOutput.sol index 1b95855..9fb53b3 100644 --- a/omnichain/multioutput/contracts/MultiOutput.sol +++ b/omnichain/multioutput/contracts/MultiOutput.sol @@ -8,6 +8,7 @@ import "@zetachain/toolkit/contracts/SwapHelperLib.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract MultiOutput is zContract, Ownable { + error SenderNotSystemContract(); error NoAvailableTransfers(); event DestinationRegistered(address); @@ -43,6 +44,9 @@ contract MultiOutput is zContract, Ownable { uint256 amount, bytes calldata message ) external virtual override { + if (msg.sender != address(systemContract)) { + revert SenderNotSystemContract(); + } address recipient = abi.decode(message, (address)); if (_getTotalTransfers(zrc20) == 0) revert NoAvailableTransfers(); diff --git a/omnichain/swap/contracts/Swap.sol b/omnichain/swap/contracts/Swap.sol index d3d1b70..56a2749 100644 --- a/omnichain/swap/contracts/Swap.sol +++ b/omnichain/swap/contracts/Swap.sol @@ -7,6 +7,8 @@ import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; import "@zetachain/toolkit/contracts/SwapHelperLib.sol"; contract Swap is zContract { + error SenderNotSystemContract(); + SystemContract public immutable systemContract; constructor(address systemContractAddress) { @@ -19,6 +21,9 @@ contract Swap is zContract { uint256 amount, bytes calldata message ) external virtual override { + if (msg.sender != address(systemContract)) { + revert SenderNotSystemContract(); + } (address targetZRC20, bytes32 recipient, uint256 minAmountOut) = abi .decode(message, (address, bytes32, uint256)); uint256 outputAmount = SwapHelperLib._doSwap( diff --git a/omnichain/withdraw/contracts/Withdraw.sol b/omnichain/withdraw/contracts/Withdraw.sol index 9e4716c..63ddc1a 100644 --- a/omnichain/withdraw/contracts/Withdraw.sol +++ b/omnichain/withdraw/contracts/Withdraw.sol @@ -5,6 +5,7 @@ import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; contract Withdraw is zContract { + error SenderNotSystemContract(); error WrongGasContract(); error NotEnoughToPayGasFee(); error InvalidZRC20Address(); @@ -22,6 +23,9 @@ contract Withdraw is zContract { uint256 amount, bytes calldata message ) external virtual override { + if (msg.sender != address(systemContract)) { + revert SenderNotSystemContract(); + } bytes32 recipient = abi.decode(message, (bytes32)); if (zrc20 == address(0)) revert InvalidZRC20Address(); if (amount == 0) revert ZeroAmount(); From 9ac9d7bacbf2cc8b73cc7b4fdbfd6aabe8e76721 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Thu, 17 Aug 2023 12:04:18 +0400 Subject: [PATCH 3/3] refactor: make error go first --- omnichain/minter/contracts/Minter.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omnichain/minter/contracts/Minter.sol b/omnichain/minter/contracts/Minter.sol index 7828dab..1908c21 100644 --- a/omnichain/minter/contracts/Minter.sol +++ b/omnichain/minter/contracts/Minter.sol @@ -7,8 +7,8 @@ import "@zetachain/toolkit/contracts/BytesHelperLib.sol"; import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; contract Minter is ERC20, zContract { - error WrongChain(); error SenderNotSystemContract(); + error WrongChain(); SystemContract public immutable systemContract; uint256 public immutable chain;