From 3a7a5d22a20173cfa476c605414bdb550f2a22c1 Mon Sep 17 00:00:00 2001 From: Noah Khamliche <71143770+dextracker@users.noreply.github.com> Date: Mon, 30 Jan 2023 12:45:40 -0500 Subject: [PATCH] =?UTF-8?q?Feat:=20=F0=9F=9B=A0=EF=B8=8F=20fix=20protocol?= =?UTF-8?q?=20release=20action=20(#652)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :wrench: fix and clean up foundry tests * fix foundry tests import paths --- .circleci/config.yml | 372 ------------------ .prettierignore | 86 ---- contracts/zero-ex/tests/FlashWalletTest.t.sol | 2 +- contracts/zero-ex/tests/ForkUtils.t.sol | 5 +- contracts/zero-ex/tests/WrapEth.sol | 6 +- contracts/zero-ex/tests/ZeroExTest.t.sol | 2 +- .../zero-ex/tests/forked/RfqtV2Test.t.sol | 8 - .../tests/forked/SwapEthForERC20Test.t.sol | 5 +- .../zero-ex/tests/forked/WrapEthTest.t.sol | 75 ++-- .../zero-ex/tests/{ => utils}/BaseTest.sol | 4 +- .../tests/utils/SwapEthForERC20Test.t.sol | 195 --------- 11 files changed, 32 insertions(+), 728 deletions(-) delete mode 100644 .circleci/config.yml rename contracts/zero-ex/tests/{ => utils}/BaseTest.sol (94%) delete mode 100644 contracts/zero-ex/tests/utils/SwapEthForERC20Test.t.sol diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index bf4d6e0418..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,372 +0,0 @@ -version: 2.1 - -parameters: - cache_version: - type: string - default: v5 - -jobs: - build: - resource_class: xlarge - docker: - - image: node:16 - environment: - NODE_OPTIONS: '--max-old-space-size=16384' - steps: - - checkout - - run: git submodule update --init --recursive - - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-feat/NerveMixinArbitrum - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - run: - name: install-yarn - command: npm install --force --global yarn@1.22.0 - - run: - name: yarn - command: yarn --frozen-lockfile --ignore-engines install || yarn --frozen-lockfile --ignore-engines install - - setup_remote_docker - - run: yarn build:ci - - save_cache: - key: cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - paths: - - ~/project/node_modules - - ~/.cache/yarn - - save_cache: - key: lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - paths: - - ~/project/contracts/erc20/generated-artifacts/ - - ~/project/contracts/erc20/generated-wrappers/ - - ~/project/contracts/erc20/lib/ - - ~/project/contracts/erc20/node_modules - - ~/project/contracts/erc20/test/generated-artifacts/ - - ~/project/contracts/erc20/test/generated-wrappers/ - - ~/project/contracts/test-utils/lib/ - - ~/project/contracts/test-utils/node_modules - - ~/project/contracts/treasury/generated-artifacts/ - - ~/project/contracts/treasury/generated-wrappers/ - - ~/project/contracts/treasury/lib/ - - ~/project/contracts/treasury/node_modules - - ~/project/contracts/treasury/test/generated-artifacts/ - - ~/project/contracts/treasury/test/generated-wrappers/ - - ~/project/contracts/utils/generated-artifacts/ - - ~/project/contracts/utils/generated-wrappers/ - - ~/project/contracts/utils/lib/ - - ~/project/contracts/utils/node_modules - - ~/project/contracts/utils/test/generated-artifacts/ - - ~/project/contracts/utils/test/generated-wrappers/ - - ~/project/contracts/zero-ex/generated-artifacts/ - - ~/project/contracts/zero-ex/generated-wrappers/ - - ~/project/contracts/zero-ex/lib/ - - ~/project/contracts/zero-ex/node_modules - - ~/project/contracts/zero-ex/test/generated-artifacts/ - - ~/project/contracts/zero-ex/test/generated-wrappers/ - - ~/project/packages/asset-swapper/node_modules - - ~/project/packages/contract-addresses/lib/ - - ~/project/packages/contract-addresses/node_modules - - ~/project/packages/contract-artifacts/lib/ - - ~/project/packages/contract-artifacts/node_modules - - ~/project/packages/contract-wrappers/lib/ - - ~/project/packages/contract-wrappers/node_modules - - ~/project/packages/protocol-utils/lib/ - - ~/project/packages/protocol-utils/node_modules - - store_artifacts: - path: ~/repo/packages/abi-gen/test-cli/output - - store_artifacts: - path: ~/repo/packages/contract-wrappers/generated_docs - test-exchange-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-exchange -m --serial -c test:circleci - test-integrations-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-integrations -m --serial -c test:circleci - test-contracts-staking-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-staking -m --serial -c test:circleci - test-contracts-extra-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }} - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-exchange-forwarder -p @0x/contracts-coordinator -m --serial -c test:circleci - test-contracts-rest-ganache: - resource_class: xlarge - docker: - - image: node:16 - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - if ! grep -q \.sol changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: | - yarn wsrun \ - -p @0x/contracts-multisig \ - -p @0x/contracts-utils \ - -p @0x/contracts-exchange-libs \ - -p @0x/contracts-erc20 \ - -p @0x/contracts-erc721 \ - -p @0x/contracts-erc1155 \ - -p @0x/contracts-asset-proxy \ - -p @0x/contracts-broker \ - -p @0x/contracts-zero-ex \ - -m --serial -c test:circleci - test-foundry-local: - resource_class: xlarge - docker: - # Using nightly as foundry:latest is ~2 months old - # which seems to cause an issue with latest forge-std - # https://github.com/foundry-rs/forge-std/issues/230 - - image: ghcr.io/foundry-rs/foundry:nightly - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - cat changed.txt - if ! grep -q \.sol changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: - command: git submodule update --init --recursive - - run: - command: FOUNDRY_PROFILE=local && forge test - working_directory: ~/project/contracts/zero-ex - test-foundry-forked: - resource_class: xlarge - docker: - # Using nightly as foundry:latest is ~2 months old - # which seems to cause an issue with latest forge-std - # https://github.com/foundry-rs/forge-std/issues/230 - - image: ghcr.io/foundry-rs/foundry:nightly - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - cat changed.txt - if ! grep -q \.sol changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - run: - command: git submodule update --init --recursive - - run: - command: FOUNDRY_PROFILE=forked && forge test - working_directory: ~/project/contracts/zero-ex - test-publish: - resource_class: large - environment: - NODE_OPTIONS: '--max-old-space-size=6442' - docker: - - image: node:16 - - image: 0xorg/verdaccio - steps: - - checkout - - run: | - git diff --name-only development >> changed.txt - cat changed.txt - if ! grep -q packages/ changed.txt; then - circleci-agent step halt - fi - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: - command: yarn test:publish:circleci - no_output_timeout: 1800 - - store_artifacts: - path: ~/.npm/_logs - test-doc-generation: - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: - command: yarn test:generate_docs:circleci - no_output_timeout: 1200 - test-rest: - docker: - - image: node:16 - environment: - RUST_ROUTER: 'true' - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: yarn wsrun -p @0x/contracts-test-utils -m --serial -c test:circleci - - run: yarn wsrun -p @0x/contract-addresses -m --serial -c test:circleci - - run: yarn wsrun -p @0x/contract-artifacts -m --serial -c test:circleci - - run: yarn wsrun -p @0x/contract-wrappers-test -m --serial -c test:circleci - - run: yarn wsrun -p @0x/order-utils -m --serial -c test:circleci - - save_cache: - key: coverage-contract-wrappers-test-{{ checksum "yarn.lock" }} - paths: - - ~/repo/packages/contract-wrappers-test/coverage/lcov.info - - save_cache: - key: coverage-order-utils-{{ checksum "yarn.lock" }} - paths: - - ~/repo/packages/order-utils/coverage/lcov.info - - save_cache: - key: coverage-web3-wrapper-{{ checksum "yarn.lock" }} - paths: - - ~/repo/packages/web3-wrapper/coverage/lcov.info - static-tests: - resource_class: large - docker: - - image: node:16 - steps: - - checkout - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - run: - command: yarn lerna run lint - - run: - command: yarn prettier:ci - - run: - command: yarn deps_versions:ci - - run: - command: yarn diff_md_docs:ci - - run: - command: yarn test:links - submit-coverage: - docker: - - image: node:16 - steps: - - restore_cache: - keys: - - cache-{{ checksum "yarn.lock" }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - lib-{{ .Environment.CIRCLE_SHA1 }}-<< pipeline.parameters.cache_version >> - - restore_cache: - keys: - - coverage-contract-wrappers-test-{{ checksum "yarn.lock" }} - - restore_cache: - keys: - - coverage-order-utils-{{ checksum "yarn.lock" }} - - restore_cache: - keys: - - coverage-contracts-{{ checksum "yarn.lock" }} - - run: yarn report_coverage -workflows: - version: 2 - main: - jobs: - - build - # Disabled until we begin actively developing on these packages again. - # - test-exchange-ganache: - # requires: - # - build - # - test-integrations-ganache: - # requires: - # - build - # - test-contracts-staking-ganache: - # requires: - # - build - # - test-contracts-extra-ganache: - # requires: - # - build - - test-foundry-local: - requires: - - build - - test-foundry-forked: - requires: - - build - - test-contracts-rest-ganache: - requires: - - build - - test-rest: - requires: - - build - - static-tests: - requires: - - build - - test-publish: - requires: - - build - - test-doc-generation: - requires: - - build - # Disabled until this repo has a coveralls API key - # - submit-coverage: - # requires: - # # Disabled until we begin actively developing on these packages again. - # # - test-exchange-ganache - # # - test-integrations-ganache - # # - test-contracts-staking-ganache - # # - test-contracts-extra-ganache - # - test-contracts-rest-ganache - # - test-rest - # - static-tests diff --git a/.prettierignore b/.prettierignore index 40926617d7..7d5fed993f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,92 +1,6 @@ lib deps .nyc_output -/contracts/broker/generated-wrappers -/contracts/broker/test/generated-wrappers -/contracts/broker/generated-artifacts -/contracts/broker/test/generated-artifacts -/contracts/integrations/generated-wrappers -/contracts/integrations/test/generated-wrappers -/contracts/integrations/generated-artifacts -/contracts/integrations/test/generated-artifacts -/contracts/staking/generated-wrappers -/contracts/staking/test/generated-wrappers -/contracts/staking/generated-artifacts -/contracts/staking/test/generated-artifacts -/contracts/coordinator/generated-wrappers -/contracts/coordinator/test/generated-wrappers -/contracts/coordinator/generated-artifacts -/contracts/coordinator/test/generated-artifacts -/contracts/exchange/generated-wrappers -/contracts/exchange/test/generated-wrappers -/contracts/exchange/generated-artifacts -/contracts/exchange/test/generated-artifacts -/contracts/asset-proxy/generated-wrappers -/contracts/asset-proxy/test/generated-wrappers -/contracts/asset-proxy/generated-artifacts -/contracts/asset-proxy/test/generated-artifacts -/contracts/multisig/generated-wrappers -/contracts/multisig/test/generated-wrappers -/contracts/multisig/generated-artifacts -/contracts/multisig/test/generated-artifacts -/contracts/utils/generated-wrappers -/contracts/utils/test/generated-wrappers -/contracts/utils/generated-artifacts -/contracts/utils/test/generated-artifacts -/contracts/exchange-libs/generated-wrappers -/contracts/exchange-libs/test/generated-wrappers -/contracts/exchange-libs/generated-artifacts -/contracts/exchange-libs/test/generated-artifacts -/contracts/erc20/generated-wrappers -/contracts/erc20/test/generated-wrappers -/contracts/erc20/generated-artifacts -/contracts/erc20/test/generated-artifacts -/contracts/erc721/generated-wrappers -/contracts/erc721/test/generated-wrappers -/contracts/erc721/generated-artifacts -/contracts/erc721/test/generated-artifacts -/contracts/erc1155/generated-wrappers -/contracts/erc1155/test/generated-wrappers -/contracts/erc1155/generated-artifacts -/contracts/erc1155/test/generated-artifacts -/contracts/extensions/generated-wrappers -/contracts/extensions/test/generated-wrappers -/contracts/extensions/generated-artifacts -/contracts/extensions/test/generated-artifacts -/contracts/exchange-forwarder/generated-wrappers -/contracts/exchange-forwarder/test/generated-wrappers -/contracts/exchange-forwarder/generated-artifacts -/contracts/exchange-forwarder/test/generated-artifacts -/contracts/dev-utils/generated-wrappers -/contracts/dev-utils/test/generated-wrappers -/contracts/dev-utils/generated-artifacts -/contracts/dev-utils/test/generated-artifacts -/contracts/zero-ex/foundry-artifacts -/contracts/zero-ex/generated-wrappers -/contracts/zero-ex/test/generated-wrappers -/contracts/zero-ex/generated-artifacts -/contracts/zero-ex/test/generated-artifacts -/contracts/treasury/generated-wrappers -/contracts/treasury/test/generated-wrappers -/contracts/treasury/generated-artifacts -/contracts/treasury/test/generated-artifacts -/contracts/staking/build/ -/contracts/coordinator/build/ -/contracts/exchange/build/ -/contracts/asset-proxy/build/ -/contracts/multisig/build/ -/contracts/utils/build/ -/contracts/exchange-libs/build/ -/contracts/erc20/build/ -/contracts/erc721/build/ -/contracts/erc1155/build/ -/contracts/zero-ex/foundry-artifacts -/contracts/zero-ex/foundry-cache -/contracts/zero-ex/contracts/deps -/contracts/extensions/build/ -/contracts/exchange-forwarder/build/ -/packages/asset-swapper/ -/packages/contract-wrappers/src/generated-wrappers/ generated-artifacts/ generated-wrappers/ foundry-artifacts/ diff --git a/contracts/zero-ex/tests/FlashWalletTest.t.sol b/contracts/zero-ex/tests/FlashWalletTest.t.sol index c3e98a93a8..1a0de1e1c5 100644 --- a/contracts/zero-ex/tests/FlashWalletTest.t.sol +++ b/contracts/zero-ex/tests/FlashWalletTest.t.sol @@ -15,7 +15,7 @@ pragma solidity ^0.6.5; pragma experimental ABIEncoderV2; -import "./BaseTest.sol"; +import "utils/BaseTest.sol"; import "../contracts/src/external/FlashWallet.sol"; import "./mocks/TestCallTarget.sol"; diff --git a/contracts/zero-ex/tests/ForkUtils.t.sol b/contracts/zero-ex/tests/ForkUtils.t.sol index 1464a2e398..c3f55f5ac7 100644 --- a/contracts/zero-ex/tests/ForkUtils.t.sol +++ b/contracts/zero-ex/tests/ForkUtils.t.sol @@ -35,14 +35,11 @@ import "src/transformers/bridges/CeloBridgeAdapter.sol"; import "src/features/OtcOrdersFeature.sol"; contract ForkUtilsTest is Test, ForkUtils, TestUtils { - /*////////////////////////////////////////////////////////////// - Rpc Setup - //////////////////////////////////////////////////////////////*/ function setUp() public { _setup(); } - function test_transformERC20Forked() public {} + function test_addressesExist() public {} function logAddresses(string memory chainName, string memory chainId) public { bytes memory details = json.parseRaw(chainId); diff --git a/contracts/zero-ex/tests/WrapEth.sol b/contracts/zero-ex/tests/WrapEth.sol index 6ec3fc8919..1c44abdeba 100644 --- a/contracts/zero-ex/tests/WrapEth.sol +++ b/contracts/zero-ex/tests/WrapEth.sol @@ -15,9 +15,9 @@ pragma solidity ^0.6; pragma experimental ABIEncoderV2; -import "./utils/ForkUtils.sol"; -import "./utils/TestUtils.sol"; -import "./utils/DeployZeroEx.sol"; +import "utils/ForkUtils.sol"; +import "utils/TestUtils.sol"; +import "utils/DeployZeroEx.sol"; import "forge-std/Test.sol"; import "src/IZeroEx.sol"; import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol"; diff --git a/contracts/zero-ex/tests/ZeroExTest.t.sol b/contracts/zero-ex/tests/ZeroExTest.t.sol index 318ab02148..a68de0dd7a 100644 --- a/contracts/zero-ex/tests/ZeroExTest.t.sol +++ b/contracts/zero-ex/tests/ZeroExTest.t.sol @@ -15,7 +15,7 @@ pragma solidity ^0.6.5; pragma experimental ABIEncoderV2; -import "./BaseTest.sol"; +import "utils/BaseTest.sol"; import "../contracts/src/ZeroEx.sol"; import "./mocks/TestZeroExFeature.sol"; diff --git a/contracts/zero-ex/tests/forked/RfqtV2Test.t.sol b/contracts/zero-ex/tests/forked/RfqtV2Test.t.sol index 4bdd02dad1..cb585ea44d 100644 --- a/contracts/zero-ex/tests/forked/RfqtV2Test.t.sol +++ b/contracts/zero-ex/tests/forked/RfqtV2Test.t.sol @@ -65,10 +65,6 @@ contract RfqtV2Test is Test, ForkUtils, TestUtils { // Create our list of transformations, let's do WethTransformer and FillQuoteTransformer ITransformERC20Feature.Transformation[] memory transformations = new ITransformERC20Feature.Transformation[](2); - /*////////////////////////////////////////////////////////////// - WethTransformer - //////////////////////////////////////////////////////////////*/ - // Use our cheeky search helper to find the nonce rather than hardcode it transformations[0].deploymentNonce = _findTransformerNonce( address(addresses.transformers.wethTransformer), @@ -79,10 +75,6 @@ contract RfqtV2Test is Test, ForkUtils, TestUtils { // Set the first transformation to transform ETH into WETH transformations[0].data = abi.encode(LibERC20Transformer.ETH_TOKEN_ADDRESS, 1e18); - /*////////////////////////////////////////////////////////////// - FillQuoteTransformer - //////////////////////////////////////////////////////////////*/ - transformations[1].deploymentNonce = _findTransformerNonce( address(fillQuoteTransformer), address(addresses.exchangeProxyTransformerDeployer) diff --git a/contracts/zero-ex/tests/forked/SwapEthForERC20Test.t.sol b/contracts/zero-ex/tests/forked/SwapEthForERC20Test.t.sol index bc210a27ce..751cd722b0 100644 --- a/contracts/zero-ex/tests/forked/SwapEthForERC20Test.t.sol +++ b/contracts/zero-ex/tests/forked/SwapEthForERC20Test.t.sol @@ -166,15 +166,12 @@ contract SwapEthForERC20Test is Test, ForkUtils, TestUtils { ); assert(IERC20TokenV06(tokens.USDT).balanceOf(address(this)) > 0); } else { - emit log_string("Liquidity Source Not available on this chain"); + emit log_string("Liquidity Source not available on this chain"); } } /* solhint-enable function-max-lines */ - /*////////////////////////////////////////////////////////////// - Sampler Dispatch - //////////////////////////////////////////////////////////////*/ // get a real quote from uniswap function sampleLiquiditySource( uint256 amount, diff --git a/contracts/zero-ex/tests/forked/WrapEthTest.t.sol b/contracts/zero-ex/tests/forked/WrapEthTest.t.sol index 84437c41c4..956034e496 100644 --- a/contracts/zero-ex/tests/forked/WrapEthTest.t.sol +++ b/contracts/zero-ex/tests/forked/WrapEthTest.t.sol @@ -13,11 +13,12 @@ */ pragma solidity ^0.6; - pragma experimental ABIEncoderV2; import "../utils/ForkUtils.sol"; import "../utils/TestUtils.sol"; +import "../utils/DeployZeroEx.sol"; +import "forge-std/Test.sol"; import "src/IZeroEx.sol"; import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol"; import "src/features/TransformERC20Feature.sol"; @@ -26,72 +27,43 @@ import "src/transformers/WethTransformer.sol"; import "src/transformers/FillQuoteTransformer.sol"; import "src/transformers/bridges/BridgeProtocols.sol"; import "src/transformers/bridges/EthereumBridgeAdapter.sol"; -import "src/transformers/bridges/PolygonBridgeAdapter.sol"; -import "src/transformers/bridges/ArbitrumBridgeAdapter.sol"; -import "src/transformers/bridges/OptimismBridgeAdapter.sol"; -import "src/transformers/bridges/AvalancheBridgeAdapter.sol"; -import "src/transformers/bridges/FantomBridgeAdapter.sol"; -import "src/transformers/bridges/CeloBridgeAdapter.sol"; -import "src/features/OtcOrdersFeature.sol"; +import "src/IZeroEx.sol"; + +contract WrapEth is Test, ForkUtils, TestUtils { + DeployZeroEx.ZeroExDeployed zeroExDeployed; -contract WrapEthTest is Test, ForkUtils, TestUtils { - /*////////////////////////////////////////////////////////////// - Rpc Setup - //////////////////////////////////////////////////////////////*/ function setUp() public { - _setup(); - } - - function test_transformERC20Forked() public { - log_string("TransformERC20Tests"); - for (uint256 i = 0; i < chains.length; i++) { - vm.selectFork(forkIds[chains[i]]); - log_named_string(" Selecting Fork On", chains[i]); - _wrapNativeToken(chains[i], indexChainsByChain[chains[i]]); - } - } - - function logAddresses(string memory chainName, string memory chainId) public { - bytes memory details = json.parseRaw(chainId); - addresses = abi.decode(details, (ContractAddresses)); - } - - function _wrapNativeToken(string memory chainName, string memory chainId) public onlyForked { - bytes memory details = json.parseRaw(chainId); - addresses = abi.decode(details, (ContractAddresses)); - + zeroExDeployed = new DeployZeroEx().deployZeroEx(); vm.deal(address(this), 1e19); + } + function test_transformERC20() public { emit log_string("-----Preparing ETH->WETH transformation through TransformERC20()-----"); emit log_string(" --Building Up Transformations--"); ITransformERC20Feature.Transformation[] memory transformations = new ITransformERC20Feature.Transformation[](1); - emit log_named_address( - " Finding TransformerDeployer nonce @", - address(addresses.exchangeProxyTransformerDeployer) - ); + emit log_named_address(" Finding TransformerDeployer nonce @", address(zeroExDeployed.transformerDeployer)); emit log_named_uint( " Deployer nonce", _findTransformerNonce( - address(addresses.transformers.wethTransformer), - address(addresses.exchangeProxyTransformerDeployer) + address(zeroExDeployed.transformers.wethTransformer), + address(zeroExDeployed.transformerDeployer) ) ); transformations[0].deploymentNonce = _findTransformerNonce( - address(addresses.transformers.wethTransformer), - address(addresses.exchangeProxyTransformerDeployer) + address(zeroExDeployed.transformers.wethTransformer), + address(zeroExDeployed.transformerDeployer) ); transformations[0].data = abi.encode(LibERC20Transformer.ETH_TOKEN_ADDRESS, 1e18); emit log_string(" ---Calling TransformERC20()---"); uint256 balanceETHBefore = address(this).balance; - uint256 balanceWETHBefore = IERC20TokenV06(addresses.etherToken).balanceOf(address(this)); - - IZeroEx(payable(addresses.exchangeProxy)).transformERC20{value: 1e18}( + uint256 balanceWETHBefore = zeroExDeployed.weth.balanceOf(address(this)); + zeroExDeployed.zeroEx.transformERC20{value: 1e18}( // input token IERC20TokenV06(LibERC20Transformer.ETH_TOKEN_ADDRESS), // output token - IERC20TokenV06(address(addresses.etherToken)), + IERC20TokenV06(address(zeroExDeployed.weth)), // input token amount 1e18, // min output token amount @@ -99,12 +71,11 @@ contract WrapEthTest is Test, ForkUtils, TestUtils { // list of transform transformations ); - log_named_uint(" NativeAsset balance before", balanceETHBefore); - log_named_uint(" ERC-20 balance before", balanceWETHBefore); - log_named_uint(" NativeAsset balance after", balanceETHBefore - address(this).balance); - log_named_uint( - " ERC-20 balance after", - IERC20TokenV06(addresses.etherToken).balanceOf(address(this)) - balanceWETHBefore - ); + assert(zeroExDeployed.weth.balanceOf(address(this)) == 1e18); + emit log_string(" Successful Transformation Complete"); + emit log_named_uint(" ETH BALANCE BEFORE:", balanceETHBefore); + emit log_named_uint(" ETH BALANCE AFTER:", address(this).balance); + emit log_named_uint(" WETH BALANCE BEFORE:", balanceWETHBefore); + emit log_named_uint(" WETH BALANCE AFTER:", zeroExDeployed.weth.balanceOf(address(this))); } } diff --git a/contracts/zero-ex/tests/BaseTest.sol b/contracts/zero-ex/tests/utils/BaseTest.sol similarity index 94% rename from contracts/zero-ex/tests/BaseTest.sol rename to contracts/zero-ex/tests/utils/BaseTest.sol index 7165e2a93a..75adf0b71b 100644 --- a/contracts/zero-ex/tests/BaseTest.sol +++ b/contracts/zero-ex/tests/utils/BaseTest.sol @@ -16,8 +16,8 @@ pragma solidity ^0.6.5; pragma experimental ABIEncoderV2; import "forge-std/Test.sol"; -import "../contracts/src/ZeroEx.sol"; -import "../contracts/src/migrations/InitialMigration.sol"; +import "../../contracts/src/ZeroEx.sol"; +import "../../contracts/src/migrations/InitialMigration.sol"; contract BaseTest is Test { address payable internal account1 = payable(vm.addr(1)); diff --git a/contracts/zero-ex/tests/utils/SwapEthForERC20Test.t.sol b/contracts/zero-ex/tests/utils/SwapEthForERC20Test.t.sol deleted file mode 100644 index 751cd722b0..0000000000 --- a/contracts/zero-ex/tests/utils/SwapEthForERC20Test.t.sol +++ /dev/null @@ -1,195 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -/* - Copyright 2023 ZeroEx Intl. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -pragma solidity ^0.6; - -pragma experimental ABIEncoderV2; - -import "../utils/ForkUtils.sol"; -import "../utils/TestUtils.sol"; -import "src/IZeroEx.sol"; -import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol"; -import "src/features/TransformERC20Feature.sol"; -import "src/external/TransformerDeployer.sol"; -import "src/transformers/WethTransformer.sol"; -import "src/transformers/FillQuoteTransformer.sol"; -import "src/transformers/bridges/BridgeProtocols.sol"; -import "src/features/OtcOrdersFeature.sol"; - -contract SwapEthForERC20Test is Test, ForkUtils, TestUtils { - function setUp() public { - //get out addresses.json file that defines contract addresses for each chain we are currently deployed on - _setup(); - } - - function test_swapEthForERC20OnUniswap() public { - log_string("SwapEthForERC20OnUniswap"); - for (uint256 i = 0; i < chains.length; i++) { - //skip fantom/avax failing test - if (i == 3 || i == 4) { - continue; - } - vm.selectFork(forkIds[chains[i]]); - log_named_string(" Selecting Fork On", chains[i]); - labelAddresses( - chains[i], - indexChainsByChain[chains[i]], - getTokens(i), - getContractAddresses(i), - getLiquiditySourceAddresses(i) - ); - swapOnUniswap(getTokens(i), getContractAddresses(i), getLiquiditySourceAddresses(i)); - } - } - - /* solhint-disable function-max-lines */ - function swapOnUniswap( - TokenAddresses memory tokens, - ContractAddresses memory addresses, - LiquiditySources memory sources - ) public onlyForked { - if (sources.UniswapV2Router != address(0)) { - // Create our list of transformations, let's do WethTransformer and FillQuoteTransformer - ITransformERC20Feature.Transformation[] - memory transformations = new ITransformERC20Feature.Transformation[](2); - - /*////////////////////////////////////////////////////////////// - WethTransformer - //////////////////////////////////////////////////////////////*/ - - // Use our cheeky search helper to find the nonce rather than hardcode it - transformations[0].deploymentNonce = _findTransformerNonce( - address(addresses.transformers.wethTransformer), - address(addresses.exchangeProxyTransformerDeployer) - ); - emit log_named_uint(" WethTransformer nonce", transformations[0].deploymentNonce); - createNewFQT( - tokens.WrappedNativeToken, - addresses.exchangeProxy, - addresses.exchangeProxyTransformerDeployer - ); - // Set the first transformation to transform ETH into WETH - transformations[0].data = abi.encode(LibERC20Transformer.ETH_TOKEN_ADDRESS, 1e18); - - /*////////////////////////////////////////////////////////////// - FillQuoteTransformer - //////////////////////////////////////////////////////////////*/ - - transformations[1].deploymentNonce = _findTransformerNonce( - address(fillQuoteTransformer), - address(addresses.exchangeProxyTransformerDeployer) - ); - emit log_named_uint(" FillQuoteTransformer nonce", transformations[1].deploymentNonce); - // Set up the FillQuoteTransformer data - FillQuoteTransformer.TransformData memory fqtData; - fqtData.side = FillQuoteTransformer.Side.Sell; - fqtData.sellToken = IERC20TokenV06(address(tokens.WrappedNativeToken)); - fqtData.buyToken = IERC20TokenV06(address(tokens.USDT)); - // the FQT has a sequence, e.g first RFQ then Limit then Bridge - // since solidity doesn't support arrays of different types, this is one simple solution - // We use a Bridge order type here as we will fill on UniswapV2 - fqtData.fillSequence = new FillQuoteTransformer.OrderType[](1); - fqtData.fillSequence[0] = FillQuoteTransformer.OrderType.Bridge; - // The amount to fill - fqtData.fillAmount = 1e18; - - /*////////////////////////////////////////////////////////////// - Sampling - //////////////////////////////////////////////////////////////*/ - - uint256 amountOut = sampleLiquiditySource( - fqtData.fillAmount, - address(fqtData.sellToken), - address(fqtData.buyToken), - sources.UniswapV2Router - ); - - /*////////////////////////////////////////////////////////////// - BridgeAdapter - //////////////////////////////////////////////////////////////*/ - // Now let's set up a UniswapV2 fill - fqtData.bridgeOrders = new IBridgeAdapter.BridgeOrder[](1); - IBridgeAdapter.BridgeOrder memory order; - // The ID is shifted so we can concat - // e.g - // or for forks - order.source = bytes32(uint256(BridgeProtocols.UNISWAPV2) << 128); - // How much we want to fill on this order, which can be different to the total - // e.g 50/50 split this would be half - order.takerTokenAmount = 1e18; - // Set this low as the price of ETH/USDT can change - order.makerTokenAmount = amountOut; - // The data needed specifically for the source to fill, - // e.g for UniswapV2 it is the router contract and a path. See MixinUniswapV2 - address[] memory uniPath = new address[](2); - uniPath[0] = address(tokens.WrappedNativeToken); - uniPath[1] = address(tokens.USDT); - order.bridgeData = abi.encode(address(sources.UniswapV2Router), uniPath); - fqtData.bridgeOrders[0] = order; - // Now encode the FQT data into the transformation - transformations[1].data = abi.encode(fqtData); - - vm.deal(address(this), 1e18); - uint256 balanceETHBefore = address(this).balance; - uint256 balanceERC20Before = IERC20TokenV06(tokens.USDT).balanceOf(address(this)); - - IZeroEx(payable(addresses.exchangeProxy)).transformERC20{value: 1e18}( - // input token - IERC20TokenV06(LibERC20Transformer.ETH_TOKEN_ADDRESS), - // output token - IERC20TokenV06(address(tokens.USDT)), - // input token amount - 1e18, - // min output token amount - order.makerTokenAmount, - // list of transform - transformations - ); - - log_named_uint(" NativeAsset balance before", balanceETHBefore); - log_named_uint(" ERC-20 balance before", balanceERC20Before); - log_named_uint(" NativeAsset balance after", balanceETHBefore - address(this).balance); - log_named_uint( - " ERC-20 balance after", - IERC20TokenV06(tokens.USDT).balanceOf(address(this)) - balanceERC20Before - ); - assert(IERC20TokenV06(tokens.USDT).balanceOf(address(this)) > 0); - } else { - emit log_string("Liquidity Source not available on this chain"); - } - } - - /* solhint-enable function-max-lines */ - - // get a real quote from uniswap - function sampleLiquiditySource( - uint256 amount, - address takerToken, - address makerToken, - address router - ) public returns (uint256 makerTokenAmounts) { - address[] memory path = new address[](2); - path[0] = address(takerToken); - path[1] = address(makerToken); - uint256[] memory amounts = new uint256[](1); - amounts[0] = amount; - uint256 out = sampleSellsFromUniswapV2(router, path, amounts)[0]; - - log_string(" Sampling Uniswap for tokens"); - log_named_address(" ", takerToken); - log_string(" -> "); - log_named_address(" ", makerToken); - return out; - } -}