diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c4c2457efb..4cd269da45 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,19 +1,21 @@ name: publish on: - workflow_dispatch: - inputs: - ci_status: - description: 'required CI status' - default: 'success' - required: true - prerelease: - description: 'prerelease name' - required: false + workflow_dispatch: + inputs: + ci_status: + description: 'required CI status' + default: 'success' + required: true + prerelease: + description: 'prerelease name' + required: false jobs: publish: runs-on: ubuntu-latest + env: + PublishBranch: publish/${{github.ref_name }}-${{ github.run_id }}-${{ github.run_number }} steps: - name: 'check successful status' run: | @@ -28,16 +30,20 @@ jobs: version: nightly - uses: actions/checkout@v2 with: - ref: ${{ github.ref }} - fetch-depth: 0 + ref: ${{ github.ref }} + fetch-depth: 0 - uses: actions/setup-node@v1 with: - node-version: 16 + node-version: 16 - uses: actions/setup-python@v2 - name: 'configure git' run: | git config --global user.email "github-actions@github.com" git config --global user.name "Github Actions" + - name: 'Checkout new branch' + run: | + git checkout -b $PublishBranch + git push -u origin $PublishBranch - name: 'install dependencies' run: | yarn -D @@ -49,9 +55,23 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} GITHUB_TOKEN: ${{ github.token }} PUBLISH_PRERELEASE: ${{ github.event.inputs.prerelease }} - - name: 'merge into main branch' - if: github.event.inputs.prerelease == '' # unless it's a prerelease + - name: 'Create PR to merge into ref branch' run: | - git checkout main && \ - git merge ${{ github.ref }} && \ - git push + gh pr create \ + -B ${{ github.ref_name }} \ + -H $PublishBranch \ + --title "Publish: CHANGELOG and Package Version Updates into ${{ github.ref_name }}" \ + --body "Syncing CHANGELOG and package version updates from publish action ${{github.run_id}}-${{github.run_number}} into ${{ github.ref_name}} branch" \ + --reviewer ${{ github.actor }} + env: + GITHUB_TOKEN: ${{ github.token }} + - name: 'Create PR to merge ref branch into main' + run: | + gh pr create \ + -B main \ + -H ${{ github.ref_name }} \ + --title "Publish: Sync ${{ github.ref_name }} into main " \ + --body "Syncing ${{ github.ref_name }} back into main after publish action. NOTE: this PR should be merged after CHANGELOG and package version updates have been merged into ${{ github.ref_name }}" \ + --reviewer ${{ github.actor }} + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.gitignore b/.gitignore index 9937ee084b..a4524b1792 100644 --- a/.gitignore +++ b/.gitignore @@ -84,6 +84,9 @@ TODO.md # IDE file .vscode .idea +*~ +.\#* +\#*\# # generated contract artifacts/ generated-artifacts/ diff --git a/contracts/erc20/CHANGELOG.json b/contracts/erc20/CHANGELOG.json index 74eb45c966..27daa70ea5 100644 --- a/contracts/erc20/CHANGELOG.json +++ b/contracts/erc20/CHANGELOG.json @@ -1,4 +1,49 @@ [ + { + "timestamp": 1693346928, + "version": "4.0.13", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1692368658, + "version": "4.0.12", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1691617396, + "version": "4.0.11", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689974915, + "version": "4.0.10", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689791426, + "version": "4.0.9", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "timestamp": 1683749017, "version": "4.0.8", diff --git a/contracts/erc20/CHANGELOG.md b/contracts/erc20/CHANGELOG.md index 3e5df407d7..779d52a9f8 100644 --- a/contracts/erc20/CHANGELOG.md +++ b/contracts/erc20/CHANGELOG.md @@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v4.0.13 - _August 29, 2023_ + + * Dependencies updated + +## v4.0.12 - _August 18, 2023_ + + * Dependencies updated + +## v4.0.11 - _August 9, 2023_ + + * Dependencies updated + +## v4.0.10 - _July 21, 2023_ + + * Dependencies updated + +## v4.0.9 - _July 19, 2023_ + + * Dependencies updated + ## v4.0.8 - _May 10, 2023_ * Dependencies updated diff --git a/contracts/erc20/package.json b/contracts/erc20/package.json index ec7636ba3e..65444e72a4 100644 --- a/contracts/erc20/package.json +++ b/contracts/erc20/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contracts-erc20", - "version": "4.0.8", + "version": "4.0.13", "engines": { "node": ">=6.12" }, @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/0xProject/protocol", "devDependencies": { - "@0x/contracts-utils": "^4.8.46", + "@0x/contracts-utils": "^4.8.51", "@0x/ts-doc-gen": "^0.0.28", "typedoc": "~0.16.11" }, diff --git a/contracts/test-utils/CHANGELOG.json b/contracts/test-utils/CHANGELOG.json index ce77fa55de..5814d6c10c 100644 --- a/contracts/test-utils/CHANGELOG.json +++ b/contracts/test-utils/CHANGELOG.json @@ -1,4 +1,49 @@ [ + { + "timestamp": 1693346928, + "version": "5.4.59", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1692368658, + "version": "5.4.58", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1691617396, + "version": "5.4.57", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689974915, + "version": "5.4.56", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689791426, + "version": "5.4.55", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "timestamp": 1683749017, "version": "5.4.54", diff --git a/contracts/test-utils/CHANGELOG.md b/contracts/test-utils/CHANGELOG.md index 8a4189378e..cda787a637 100644 --- a/contracts/test-utils/CHANGELOG.md +++ b/contracts/test-utils/CHANGELOG.md @@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v5.4.59 - _August 29, 2023_ + + * Dependencies updated + +## v5.4.58 - _August 18, 2023_ + + * Dependencies updated + +## v5.4.57 - _August 9, 2023_ + + * Dependencies updated + +## v5.4.56 - _July 21, 2023_ + + * Dependencies updated + +## v5.4.55 - _July 19, 2023_ + + * Dependencies updated + ## v5.4.54 - _May 10, 2023_ * Dependencies updated diff --git a/contracts/test-utils/package.json b/contracts/test-utils/package.json index bd14f54eee..0d6228c2dc 100644 --- a/contracts/test-utils/package.json +++ b/contracts/test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contracts-test-utils", - "version": "5.4.54", + "version": "5.4.59", "engines": { "node": ">=6.12" }, @@ -41,7 +41,7 @@ "dependencies": { "@0x/assert": "^3.0.36", "@0x/base-contract": "^7.0.0", - "@0x/contract-addresses": "^8.7.0", + "@0x/contract-addresses": "^8.12.0", "@0x/dev-utils": "^5.0.2", "@0x/json-schemas": "^6.4.4", "@0x/order-utils": "^10.4.28", diff --git a/contracts/treasury/CHANGELOG.json b/contracts/treasury/CHANGELOG.json index 15d4b0f5b4..f975b697b6 100644 --- a/contracts/treasury/CHANGELOG.json +++ b/contracts/treasury/CHANGELOG.json @@ -1,4 +1,49 @@ [ + { + "timestamp": 1693346928, + "version": "1.4.53", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1692368658, + "version": "1.4.52", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1691617396, + "version": "1.4.51", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689974915, + "version": "1.4.50", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689791426, + "version": "1.4.49", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "timestamp": 1683749017, "version": "1.4.48", diff --git a/contracts/treasury/CHANGELOG.md b/contracts/treasury/CHANGELOG.md index 63973fbfe0..0b3d885cdb 100644 --- a/contracts/treasury/CHANGELOG.md +++ b/contracts/treasury/CHANGELOG.md @@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v1.4.53 - _August 29, 2023_ + + * Dependencies updated + +## v1.4.52 - _August 18, 2023_ + + * Dependencies updated + +## v1.4.51 - _August 9, 2023_ + + * Dependencies updated + +## v1.4.50 - _July 21, 2023_ + + * Dependencies updated + +## v1.4.49 - _July 19, 2023_ + + * Dependencies updated + ## v1.4.48 - _May 10, 2023_ * Dependencies updated diff --git a/contracts/treasury/package.json b/contracts/treasury/package.json index 48a9ee05cd..07cd2caa8f 100644 --- a/contracts/treasury/package.json +++ b/contracts/treasury/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contracts-treasury", - "version": "1.4.48", + "version": "1.4.53", "engines": { "node": ">=6.12" }, @@ -46,12 +46,12 @@ "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury", "devDependencies": { "@0x/abi-gen": "^5.8.5", - "@0x/contract-addresses": "^8.7.0", + "@0x/contract-addresses": "^8.12.0", "@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-erc20": "3.3.57", "@0x/contracts-gen": "^2.0.50", "@0x/contracts-staking": "^2.0.45", - "@0x/contracts-test-utils": "^5.4.54", + "@0x/contracts-test-utils": "^5.4.59", "@0x/sol-compiler": "^4.8.2", "@0x/ts-doc-gen": "^0.0.28", "@types/isomorphic-fetch": "^0.0.35", @@ -73,7 +73,7 @@ }, "dependencies": { "@0x/base-contract": "^7.0.0", - "@0x/protocol-utils": "^11.22.2", + "@0x/protocol-utils": "^11.24.1", "@0x/subproviders": "^8.0.1", "@0x/types": "^3.3.7", "@0x/typescript-typings": "^5.3.1", diff --git a/contracts/utils/CHANGELOG.json b/contracts/utils/CHANGELOG.json index cd6f1de357..5611e58731 100644 --- a/contracts/utils/CHANGELOG.json +++ b/contracts/utils/CHANGELOG.json @@ -1,4 +1,49 @@ [ + { + "timestamp": 1693346928, + "version": "4.8.51", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1692368658, + "version": "4.8.50", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1691617396, + "version": "4.8.49", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689974915, + "version": "4.8.48", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689791426, + "version": "4.8.47", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "timestamp": 1683749017, "version": "4.8.46", diff --git a/contracts/utils/CHANGELOG.md b/contracts/utils/CHANGELOG.md index 54ba0a4db1..82f914a811 100644 --- a/contracts/utils/CHANGELOG.md +++ b/contracts/utils/CHANGELOG.md @@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v4.8.51 - _August 29, 2023_ + + * Dependencies updated + +## v4.8.50 - _August 18, 2023_ + + * Dependencies updated + +## v4.8.49 - _August 9, 2023_ + + * Dependencies updated + +## v4.8.48 - _July 21, 2023_ + + * Dependencies updated + +## v4.8.47 - _July 19, 2023_ + + * Dependencies updated + ## v4.8.46 - _May 10, 2023_ * Dependencies updated diff --git a/contracts/utils/package.json b/contracts/utils/package.json index fc02b5bbe1..0422eebc8f 100644 --- a/contracts/utils/package.json +++ b/contracts/utils/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contracts-utils", - "version": "4.8.46", + "version": "4.8.51", "engines": { "node": ">=6.12" }, @@ -45,7 +45,7 @@ "devDependencies": { "@0x/abi-gen": "^5.8.5", "@0x/contracts-gen": "^2.0.50", - "@0x/contracts-test-utils": "^5.4.54", + "@0x/contracts-test-utils": "^5.4.59", "@0x/dev-utils": "^5.0.2", "@0x/order-utils": "^10.4.28", "@0x/sol-compiler": "^4.8.2", diff --git a/contracts/zero-ex/CHANGELOG.json b/contracts/zero-ex/CHANGELOG.json index 941af42efd..a3d4e3c4cd 100644 --- a/contracts/zero-ex/CHANGELOG.json +++ b/contracts/zero-ex/CHANGELOG.json @@ -1,4 +1,40 @@ [ + { + "version": "0.48.0", + "changes": [ + { + "note": "Add VelodromeV2 support on Base" + } + ], + "timestamp": 1693346928 + }, + { + "version": "0.47.0", + "changes": [ + { + "note": "Add MaverickV1 support on Ethereum, BSC, and Base" + } + ], + "timestamp": 1692368658 + }, + { + "version": "0.46.0", + "changes": [ + { + "note": "Add VelodromeV2 support on Optimism" + } + ], + "timestamp": 1691617396 + }, + { + "timestamp": 1689974915, + "version": "0.45.1", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "version": "0.45.0", "changes": [ @@ -7,8 +43,15 @@ }, { "note": "Remove Shell and MStable support" + }, + { + "note": "Add Base Mainnet and Goerli BridgeAdapters" + }, + { + "note": "Add Uniswap V3 support on Avalanche and BSC" } - ] + ], + "timestamp": 1689791426 }, { "version": "0.44.0", diff --git a/contracts/zero-ex/CHANGELOG.md b/contracts/zero-ex/CHANGELOG.md index b2a79a29bd..5e8478fadb 100644 --- a/contracts/zero-ex/CHANGELOG.md +++ b/contracts/zero-ex/CHANGELOG.md @@ -5,6 +5,29 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v0.48.0 - _August 29, 2023_ + + * Add VelodromeV2 support on Base + +## v0.47.0 - _August 18, 2023_ + + * Add MaverickV1 support on Ethereum, BSC, and Base + +## v0.46.0 - _August 9, 2023_ + + * Add VelodromeV2 support on Optimism + +## v0.45.1 - _July 21, 2023_ + + * Dependencies updated + +## v0.45.0 - _July 19, 2023_ + + * Remove Bancor V1 support + * Remove Shell and MStable support + * Add Base Mainnet and Goerli BridgeAdapters + * Add Uniswap V3 support on Avalanche and BSC + ## v0.44.0 - _May 10, 2023_ * Add Trader Joe V2 MixIn to Arbitrum diff --git a/contracts/zero-ex/compiler.json b/contracts/zero-ex/compiler.json index 23ef6ed955..0bbd20919b 100644 --- a/contracts/zero-ex/compiler.json +++ b/contracts/zero-ex/compiler.json @@ -115,6 +115,8 @@ "./contracts/src/transformers/bridges/ArbitrumBridgeAdapter.sol", "./contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol", "./contracts/src/transformers/bridges/BSCBridgeAdapter.sol", + "./contracts/src/transformers/bridges/BaseBridgeAdapter.sol", + "./contracts/src/transformers/bridges/BaseGoerliBridgeAdapter.sol", "./contracts/src/transformers/bridges/BridgeProtocols.sol", "./contracts/src/transformers/bridges/CeloBridgeAdapter.sol", "./contracts/src/transformers/bridges/EthereumBridgeAdapter.sol", diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol b/contracts/zero-ex/contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol index f2ce9879c6..c8f836b565 100644 --- a/contracts/zero-ex/contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol +++ b/contracts/zero-ex/contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol @@ -28,6 +28,7 @@ import "./mixins/MixinNerve.sol"; import "./mixins/MixinPlatypus.sol"; import "./mixins/MixinTraderJoeV2.sol"; import "./mixins/MixinUniswapV2.sol"; +import "./mixins/MixinUniswapV3.sol"; import "./mixins/MixinWOOFi.sol"; import "./mixins/MixinZeroExBridge.sol"; @@ -44,6 +45,7 @@ contract AvalancheBridgeAdapter is MixinPlatypus, MixinTraderJoeV2, MixinUniswapV2, + MixinUniswapV3, MixinWOOFi, MixinZeroExBridge { @@ -72,6 +74,11 @@ contract AvalancheBridgeAdapter is return (0, true); } boughtAmount = _tradeUniswapV2(buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.UNISWAPV3) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeUniswapV3(sellToken, sellAmount, order.bridgeData); } else if (protocolId == BridgeProtocols.NERVE) { if (dryRun) { return (0, true); diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/BSCBridgeAdapter.sol b/contracts/zero-ex/contracts/src/transformers/bridges/BSCBridgeAdapter.sol index de7809a9a6..00a79320ca 100644 --- a/contracts/zero-ex/contracts/src/transformers/bridges/BSCBridgeAdapter.sol +++ b/contracts/zero-ex/contracts/src/transformers/bridges/BSCBridgeAdapter.sol @@ -22,9 +22,11 @@ import "./mixins/MixinDodo.sol"; import "./mixins/MixinDodoV2.sol"; import "./mixins/MixinKyberDmm.sol"; import "./mixins/MixinKyberElastic.sol"; +import "./mixins/MixinMaverickV1.sol"; import "./mixins/MixinMooniswap.sol"; import "./mixins/MixinNerve.sol"; import "./mixins/MixinUniswapV2.sol"; +import "./mixins/MixinUniswapV3.sol"; import "./mixins/MixinWOOFi.sol"; import "./mixins/MixinZeroExBridge.sol"; @@ -35,9 +37,11 @@ contract BSCBridgeAdapter is MixinDodoV2, MixinKyberDmm, MixinKyberElastic, + MixinMaverickV1, MixinMooniswap, MixinNerve, MixinUniswapV2, + MixinUniswapV3, MixinWOOFi, MixinZeroExBridge { @@ -61,6 +65,11 @@ contract BSCBridgeAdapter is return (0, true); } boughtAmount = _tradeUniswapV2(buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.UNISWAPV3) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeUniswapV3(sellToken, sellAmount, order.bridgeData); } else if (protocolId == BridgeProtocols.MOONISWAP) { if (dryRun) { return (0, true); @@ -96,6 +105,11 @@ contract BSCBridgeAdapter is return (0, true); } boughtAmount = _tradeWOOFi(sellToken, buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.MAVERICKV1) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeMaverickV1(sellToken, buyToken, sellAmount, order.bridgeData); } else if (protocolId == BridgeProtocols.UNKNOWN) { if (dryRun) { return (0, true); diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/BaseBridgeAdapter.sol b/contracts/zero-ex/contracts/src/transformers/bridges/BaseBridgeAdapter.sol new file mode 100644 index 0000000000..aec3042eb4 --- /dev/null +++ b/contracts/zero-ex/contracts/src/transformers/bridges/BaseBridgeAdapter.sol @@ -0,0 +1,93 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "./AbstractBridgeAdapter.sol"; +import "./BridgeProtocols.sol"; +import "./mixins/MixinUniswapV3.sol"; +import "./mixins/MixinUniswapV2.sol"; +import "./mixins/MixinBalancerV2Batch.sol"; +import "./mixins/MixinCurve.sol"; +import "./mixins/MixinCurveV2.sol"; +import "./mixins/MixinMaverickV1.sol"; +import "./mixins/MixinSolidly.sol"; +import "./mixins/MixinVelodromeV2.sol"; + +contract BaseBridgeAdapter is + AbstractBridgeAdapter(8453, "Base"), + MixinUniswapV3, + MixinUniswapV2, + MixinBalancerV2Batch, + MixinCurve, + MixinCurveV2, + MixinMaverickV1, + MixinSolidly, + MixinVelodromeV2 +{ + constructor(IEtherToken weth) public MixinCurve(weth) {} + + function _trade( + BridgeOrder memory order, + IERC20Token sellToken, + IERC20Token buyToken, + uint256 sellAmount, + bool dryRun + ) internal override returns (uint256 boughtAmount, bool supportedSource) { + uint128 protocolId = uint128(uint256(order.source) >> 128); + if (protocolId == BridgeProtocols.CURVE) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeCurve(sellToken, buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.CURVEV2) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeCurveV2(sellToken, buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.UNISWAPV3) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeUniswapV3(sellToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.UNISWAPV2) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeUniswapV2(buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.SOLIDLY) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeSolidly(sellToken, buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.BALANCERV2BATCH) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeBalancerV2Batch(sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.MAVERICKV1) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeMaverickV1(sellToken, buyToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.VELODROMEV2) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeVelodromeV2(sellToken, sellAmount, order.bridgeData); + } + emit BridgeFill(order.source, sellToken, buyToken, sellAmount, boughtAmount); + } +} diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/BaseGoerliBridgeAdapter.sol b/contracts/zero-ex/contracts/src/transformers/bridges/BaseGoerliBridgeAdapter.sol new file mode 100644 index 0000000000..c77e1278b6 --- /dev/null +++ b/contracts/zero-ex/contracts/src/transformers/bridges/BaseGoerliBridgeAdapter.sol @@ -0,0 +1,45 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "./AbstractBridgeAdapter.sol"; +import "./BridgeProtocols.sol"; +import "./mixins/MixinUniswapV3.sol"; +import "./mixins/MixinUniswapV2.sol"; + +contract BaseGoerliBridgeAdapter is AbstractBridgeAdapter(84531, "Base Goerli"), MixinUniswapV3, MixinUniswapV2 { + function _trade( + BridgeOrder memory order, + IERC20Token sellToken, + IERC20Token buyToken, + uint256 sellAmount, + bool dryRun + ) internal override returns (uint256 boughtAmount, bool supportedSource) { + uint128 protocolId = uint128(uint256(order.source) >> 128); + if (protocolId == BridgeProtocols.UNISWAPV3) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeUniswapV3(sellToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.UNISWAPV2) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeUniswapV2(buyToken, sellAmount, order.bridgeData); + } + emit BridgeFill(order.source, sellToken, buyToken, sellAmount, boughtAmount); + } +} diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/BridgeProtocols.sol b/contracts/zero-ex/contracts/src/transformers/bridges/BridgeProtocols.sol index 85e5897219..6cd62ad9d4 100644 --- a/contracts/zero-ex/contracts/src/transformers/bridges/BridgeProtocols.sol +++ b/contracts/zero-ex/contracts/src/transformers/bridges/BridgeProtocols.sol @@ -57,4 +57,6 @@ library BridgeProtocols { uint128 internal constant KYBERELASTIC = 33; uint128 internal constant BARTER = 34; uint128 internal constant TRADERJOEV2 = 35; + uint128 internal constant VELODROMEV2 = 36; + uint128 internal constant MAVERICKV1 = 37; } diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/EthereumBridgeAdapter.sol b/contracts/zero-ex/contracts/src/transformers/bridges/EthereumBridgeAdapter.sol index ea5be816b0..d2ce9c2304 100644 --- a/contracts/zero-ex/contracts/src/transformers/bridges/EthereumBridgeAdapter.sol +++ b/contracts/zero-ex/contracts/src/transformers/bridges/EthereumBridgeAdapter.sol @@ -32,6 +32,7 @@ import "./mixins/MixinKyberDmm.sol"; import "./mixins/MixinKyberElastic.sol"; import "./mixins/MixinLido.sol"; import "./mixins/MixinMakerPSM.sol"; +import "./mixins/MixinMaverickV1.sol"; import "./mixins/MixinNerve.sol"; import "./mixins/MixinSynthetix.sol"; import "./mixins/MixinUniswap.sol"; @@ -56,6 +57,7 @@ contract EthereumBridgeAdapter is MixinKyberElastic, MixinLido, MixinMakerPSM, + MixinMaverickV1, MixinNerve, MixinSynthetix, MixinUniswap, @@ -175,6 +177,11 @@ contract EthereumBridgeAdapter is return (0, true); } boughtAmount = _tradeBarter(sellToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.MAVERICKV1) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeMaverickV1(sellToken, buyToken, sellAmount, order.bridgeData); } else if (protocolId == BridgeProtocols.UNKNOWN) { if (dryRun) { return (0, true); diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/OptimismBridgeAdapter.sol b/contracts/zero-ex/contracts/src/transformers/bridges/OptimismBridgeAdapter.sol index 224dd6f9d4..82081a15ca 100644 --- a/contracts/zero-ex/contracts/src/transformers/bridges/OptimismBridgeAdapter.sol +++ b/contracts/zero-ex/contracts/src/transformers/bridges/OptimismBridgeAdapter.sol @@ -26,6 +26,7 @@ import "./mixins/MixinNerve.sol"; import "./mixins/MixinSolidly.sol"; import "./mixins/MixinSynthetix.sol"; import "./mixins/MixinUniswapV3.sol"; +import "./mixins/MixinVelodromeV2.sol"; import "./mixins/MixinWOOFi.sol"; import "./mixins/MixinZeroExBridge.sol"; @@ -39,6 +40,7 @@ contract OptimismBridgeAdapter is MixinNerve, MixinSynthetix, MixinUniswapV3, + MixinVelodromeV2, MixinSolidly, MixinWOOFi, MixinZeroExBridge @@ -109,6 +111,11 @@ contract OptimismBridgeAdapter is return (0, true); } boughtAmount = _tradeKyberElastic(sellToken, sellAmount, order.bridgeData); + } else if (protocolId == BridgeProtocols.VELODROMEV2) { + if (dryRun) { + return (0, true); + } + boughtAmount = _tradeVelodromeV2(sellToken, sellAmount, order.bridgeData); } emit BridgeFill(order.source, sellToken, buyToken, sellAmount, boughtAmount); diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinMaverickV1.sol b/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinMaverickV1.sol new file mode 100644 index 0000000000..60a8ef5abf --- /dev/null +++ b/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinMaverickV1.sol @@ -0,0 +1,63 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "@0x/contracts-erc20/src/v06/LibERC20TokenV06.sol"; +import "@0x/contracts-erc20/src/IERC20Token.sol"; + +interface IMaverickV1Router { + struct ExactInputSingleParams { + address tokenIn; + address tokenOut; + address pool; + address recipient; + uint256 deadline; + uint256 amountIn; + uint256 amountOutMinimum; + uint256 sqrtPriceLimitD18; + } + + function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); +} + +contract MixinMaverickV1 { + using LibERC20TokenV06 for IERC20Token; + + function _tradeMaverickV1( + IERC20Token sellToken, + IERC20Token buyToken, + uint256 sellAmount, + bytes memory bridgeData + ) internal returns (uint256 boughtAmount) { + (IMaverickV1Router router, address pool) = abi.decode(bridgeData, (IMaverickV1Router, address)); + + // Grant the MaverickV1 router an allowance to sell the sellToken + sellToken.approveIfBelow(address(router), sellAmount); + + boughtAmount = router.exactInputSingle( + IMaverickV1Router.ExactInputSingleParams({ + tokenIn: address(sellToken), + tokenOut: address(buyToken), + pool: pool, + recipient: address(this), + deadline: block.timestamp, + amountIn: sellAmount, + amountOutMinimum: 1, + sqrtPriceLimitD18: 0 + }) + ); + } +} diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinUniswapV3.sol b/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinUniswapV3.sol index 1aedd28cc0..660938a8db 100644 --- a/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinUniswapV3.sol +++ b/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinUniswapV3.sol @@ -31,6 +31,18 @@ interface IUniswapV3Router { function exactInput(ExactInputParams memory params) external payable returns (uint256 amountOut); } +// https://github.com/Uniswap/swap-router-contracts/blob/main/contracts/interfaces/IV3SwapRouter.sol +interface IUniswapV3Router2 { + struct ExactInputParams { + bytes path; + address recipient; + uint256 amountIn; + uint256 amountOutMinimum; + } + + function exactInput(ExactInputParams memory params) external payable returns (uint256 amountOut); +} + contract MixinUniswapV3 { using LibERC20TokenV06 for IERC20Token; @@ -39,19 +51,30 @@ contract MixinUniswapV3 { uint256 sellAmount, bytes memory bridgeData ) internal returns (uint256 boughtAmount) { - (IUniswapV3Router router, bytes memory path) = abi.decode(bridgeData, (IUniswapV3Router, bytes)); + (address router, bytes memory path, uint256 routerVersion) = abi.decode(bridgeData, (address, bytes, uint256)); // Grant the Uniswap router an allowance to sell the sell token. - sellToken.approveIfBelow(address(router), sellAmount); + sellToken.approveIfBelow(router, sellAmount); - boughtAmount = router.exactInput( - IUniswapV3Router.ExactInputParams({ - path: path, - recipient: address(this), - deadline: block.timestamp, - amountIn: sellAmount, - amountOutMinimum: 1 - }) - ); + if (routerVersion != 2) { + boughtAmount = IUniswapV3Router(router).exactInput( + IUniswapV3Router.ExactInputParams({ + path: path, + recipient: address(this), + deadline: block.timestamp, + amountIn: sellAmount, + amountOutMinimum: 1 + }) + ); + } else { + boughtAmount = IUniswapV3Router2(router).exactInput( + IUniswapV3Router2.ExactInputParams({ + path: path, + recipient: address(this), + amountIn: sellAmount, + amountOutMinimum: 1 + }) + ); + } } } diff --git a/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinVelodromeV2.sol b/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinVelodromeV2.sol new file mode 100644 index 0000000000..baa34ccc92 --- /dev/null +++ b/contracts/zero-ex/contracts/src/transformers/bridges/mixins/MixinVelodromeV2.sol @@ -0,0 +1,69 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "@0x/contracts-erc20/src/v06/LibERC20TokenV06.sol"; +import "@0x/contracts-erc20/src/IERC20Token.sol"; + +interface IVelodromeV2Router { + struct Route { + address from; + address to; + bool stable; + address factory; + } + + /// @notice Swap one token for another + /// @param amountIn Amount of token in + /// @param amountOutMin Minimum amount of desired token received + /// @param routes Array of trade routes used in the swap + /// @param to Recipient of the tokens received + /// @param deadline Deadline to receive tokens + /// @return amounts Array of amounts returned per route + function swapExactTokensForTokens( + uint256 amountIn, + uint256 amountOutMin, + Route[] calldata routes, + address to, + uint256 deadline + ) external returns (uint256[] memory amounts); +} + +contract MixinVelodromeV2 { + using LibERC20TokenV06 for IERC20Token; + + function _tradeVelodromeV2( + IERC20Token sellToken, + uint256 sellAmount, + bytes memory bridgeData + ) internal returns (uint256 boughtAmount) { + (IVelodromeV2Router router, IVelodromeV2Router.Route[] memory routes) = abi.decode( + bridgeData, + (IVelodromeV2Router, IVelodromeV2Router.Route[]) + ); + sellToken.approveIfBelow(address(router), sellAmount); + + uint256[] memory amounts = router.swapExactTokensForTokens( + sellAmount, + 1, + routes, + address(this), + block.timestamp + 1 + ); + + return amounts[amounts.length - 1]; + } +} diff --git a/contracts/zero-ex/package.json b/contracts/zero-ex/package.json index 06530d1b7b..6934a9df0b 100644 --- a/contracts/zero-ex/package.json +++ b/contracts/zero-ex/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contracts-zero-ex", - "version": "0.44.0", + "version": "0.48.0", "engines": { "node": ">=6.12" }, @@ -36,9 +36,9 @@ "typechain": "typechain --target=ethers-v5 --out-dir='typechain-wrappers' './foundry-artifacts/**/*.json'" }, "config": { - "publicInterfaceContracts": "IZeroEx,ZeroEx,FullMigration,InitialMigration,IFlashWallet,IERC20Transformer,IOwnableFeature,ISimpleFunctionRegistryFeature,ITransformERC20Feature,FillQuoteTransformer,PayTakerTransformer,PositiveSlippageFeeTransformer,WethTransformer,OwnableFeature,SimpleFunctionRegistryFeature,TransformERC20Feature,AffiliateFeeTransformer,MetaTransactionsFeature,LogMetadataTransformer,LiquidityProviderFeature,ILiquidityProviderFeature,NativeOrdersFeature,INativeOrdersFeature,FeeCollectorController,FeeCollector,CurveLiquidityProvider,BatchFillNativeOrdersFeature,IBatchFillNativeOrdersFeature,MultiplexFeature,IMultiplexFeature,OtcOrdersFeature,IOtcOrdersFeature,AvalancheBridgeAdapter,BSCBridgeAdapter,CeloBridgeAdapter,EthereumBridgeAdapter,FantomBridgeAdapter,OptimismBridgeAdapter,PolygonBridgeAdapter,MetaTransactionsFeatureV2", + "publicInterfaceContracts": "IZeroEx,ZeroEx,FullMigration,InitialMigration,IFlashWallet,IERC20Transformer,IOwnableFeature,ISimpleFunctionRegistryFeature,ITransformERC20Feature,FillQuoteTransformer,PayTakerTransformer,PositiveSlippageFeeTransformer,WethTransformer,OwnableFeature,SimpleFunctionRegistryFeature,TransformERC20Feature,AffiliateFeeTransformer,MetaTransactionsFeature,LogMetadataTransformer,LiquidityProviderFeature,ILiquidityProviderFeature,NativeOrdersFeature,INativeOrdersFeature,FeeCollectorController,FeeCollector,CurveLiquidityProvider,BatchFillNativeOrdersFeature,IBatchFillNativeOrdersFeature,MultiplexFeature,IMultiplexFeature,OtcOrdersFeature,IOtcOrdersFeature,AvalancheBridgeAdapter,BaseGoerliBridgeAdapter,BaseBridgeAdapter,BSCBridgeAdapter,CeloBridgeAdapter,EthereumBridgeAdapter,FantomBridgeAdapter,OptimismBridgeAdapter,PolygonBridgeAdapter,MetaTransactionsFeatureV2", "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.", - "abis": "./test/generated-artifacts/@(AbstractBridgeAdapter|AffiliateFeeTransformer|ArbitrumBridgeAdapter|AvalancheBridgeAdapter|BSCBridgeAdapter|BatchFillNativeOrdersFeature|BootstrapFeature|BridgeProtocols|CeloBridgeAdapter|CurveLiquidityProvider|ERC1155OrdersFeature|ERC165Feature|ERC721OrdersFeature|EthereumBridgeAdapter|FantomBridgeAdapter|FeeCollector|FeeCollectorController|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinERC1155Spender|FixinERC721Spender|FixinProtocolFees|FixinReentrancyGuard|FixinTokenSpender|FlashWallet|FullMigration|FundRecoveryFeature|IBatchFillNativeOrdersFeature|IBootstrapFeature|IBridgeAdapter|IERC1155OrdersFeature|IERC1155Token|IERC165Feature|IERC20Bridge|IERC20Transformer|IERC721OrdersFeature|IERC721Token|IFeature|IFeeRecipient|IFlashWallet|IFundRecoveryFeature|ILiquidityProvider|ILiquidityProviderFeature|ILiquidityProviderSandbox|IMetaTransactionsFeature|IMetaTransactionsFeatureV2|IMooniswapPool|IMultiplexFeature|INativeOrdersEvents|INativeOrdersFeature|IOtcOrdersFeature|IOwnableFeature|IPancakeSwapFeature|IPropertyValidator|ISimpleFunctionRegistryFeature|IStaking|ITakerCallback|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IUniswapV2Pair|IUniswapV3Feature|IUniswapV3Pool|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC1155OrdersStorage|LibERC20Transformer|LibERC721OrdersStorage|LibFeeCollector|LibLiquidityProviderRichErrors|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibNFTOrder|LibNFTOrdersRichErrors|LibNativeOrder|LibNativeOrdersRichErrors|LibNativeOrdersStorage|LibOtcOrdersStorage|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignature|LibSignatureRichErrors|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LiquidityProviderSandbox|LogMetadataTransformer|MetaTransactionsFeature|MetaTransactionsFeatureV2|MixinAaveV2|MixinBalancer|MixinBalancerV2Batch|MixinBancorV3|MixinCompound|MixinCryptoCom|MixinCurve|MixinCurveV2|MixinDodo|MixinDodoV2|MixinGMX|MixinKyberDmm|MixinLido|MixinMakerPSM|MixinMooniswap|MixinNerve|MixinPlatypus|MixinSolidly|MixinSynthetix|MixinUniswap|MixinUniswapV2|MixinUniswapV3|MixinZeroExBridge|MooniswapLiquidityProvider|MultiplexFeature|MultiplexLiquidityProvider|MultiplexOtc|MultiplexRfq|MultiplexTransformERC20|MultiplexUniswapV2|MultiplexUniswapV3|NFTOrders|NativeOrdersCancellation|NativeOrdersFeature|NativeOrdersInfo|NativeOrdersProtocolFees|NativeOrdersSettlement|OptimismBridgeAdapter|OtcOrdersFeature|OwnableFeature|PancakeSwapFeature|PayTakerTransformer|PermissionlessTransformerDeployer|PolygonBridgeAdapter|PositiveSlippageFeeTransformer|SimpleFunctionRegistryFeature|TestCurve|TestDelegateCaller|TestFeeCollectorController|TestFeeRecipient|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFixinProtocolFees|TestFixinTokenSpender|TestFullMigration|TestInitialMigration|TestLibNativeOrder|TestLibSignature|TestLiquidityProvider|TestMetaTransactionsNativeOrdersFeature|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC1155Token|TestMintableERC20Token|TestMintableERC721Token|TestMooniswap|TestNFTOrderPresigner|TestNativeOrdersFeature|TestNoEthRecipient|TestOrderSignerRegistryWithContractWallet|TestPermissionlessTransformerDeployerSuicidal|TestPermissionlessTransformerDeployerTransformer|TestPropertyValidator|TestRfqOriginRegistration|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestStaking|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestUniswapV2Factory|TestUniswapV2Pool|TestUniswapV3Factory|TestUniswapV3Feature|TestUniswapV3Pool|TestWeth|TestWethTransformerHost|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|UniswapV3Feature|WethTransformer|ZeroEx|ZeroExOptimized).json" + "abis": "./test/generated-artifacts/@(AbstractBridgeAdapter|AffiliateFeeTransformer|ArbitrumBridgeAdapter|AvalancheBridgeAdapter|BSCBridgeAdapter|BaseBridgeAdapter|BaseGoerliBridgeAdapter|BatchFillNativeOrdersFeature|BootstrapFeature|BridgeProtocols|CeloBridgeAdapter|CurveLiquidityProvider|ERC1155OrdersFeature|ERC165Feature|ERC721OrdersFeature|EthereumBridgeAdapter|FantomBridgeAdapter|FeeCollector|FeeCollectorController|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinERC1155Spender|FixinERC721Spender|FixinProtocolFees|FixinReentrancyGuard|FixinTokenSpender|FlashWallet|FullMigration|FundRecoveryFeature|IBatchFillNativeOrdersFeature|IBootstrapFeature|IBridgeAdapter|IERC1155OrdersFeature|IERC1155Token|IERC165Feature|IERC20Bridge|IERC20Transformer|IERC721OrdersFeature|IERC721Token|IFeature|IFeeRecipient|IFlashWallet|IFundRecoveryFeature|ILiquidityProvider|ILiquidityProviderFeature|ILiquidityProviderSandbox|IMetaTransactionsFeature|IMetaTransactionsFeatureV2|IMooniswapPool|IMultiplexFeature|INativeOrdersEvents|INativeOrdersFeature|IOtcOrdersFeature|IOwnableFeature|IPancakeSwapFeature|IPropertyValidator|ISimpleFunctionRegistryFeature|IStaking|ITakerCallback|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IUniswapV2Pair|IUniswapV3Feature|IUniswapV3Pool|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC1155OrdersStorage|LibERC20Transformer|LibERC721OrdersStorage|LibFeeCollector|LibLiquidityProviderRichErrors|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibNFTOrder|LibNFTOrdersRichErrors|LibNativeOrder|LibNativeOrdersRichErrors|LibNativeOrdersStorage|LibOtcOrdersStorage|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignature|LibSignatureRichErrors|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LiquidityProviderSandbox|LogMetadataTransformer|MetaTransactionsFeature|MetaTransactionsFeatureV2|MixinAaveV2|MixinBalancer|MixinBalancerV2Batch|MixinBancorV3|MixinCompound|MixinCryptoCom|MixinCurve|MixinCurveV2|MixinDodo|MixinDodoV2|MixinGMX|MixinKyberDmm|MixinLido|MixinMakerPSM|MixinMooniswap|MixinNerve|MixinPlatypus|MixinSolidly|MixinSynthetix|MixinUniswap|MixinUniswapV2|MixinUniswapV3|MixinZeroExBridge|MooniswapLiquidityProvider|MultiplexFeature|MultiplexLiquidityProvider|MultiplexOtc|MultiplexRfq|MultiplexTransformERC20|MultiplexUniswapV2|MultiplexUniswapV3|NFTOrders|NativeOrdersCancellation|NativeOrdersFeature|NativeOrdersInfo|NativeOrdersProtocolFees|NativeOrdersSettlement|OptimismBridgeAdapter|OtcOrdersFeature|OwnableFeature|PancakeSwapFeature|PayTakerTransformer|PermissionlessTransformerDeployer|PolygonBridgeAdapter|PositiveSlippageFeeTransformer|SimpleFunctionRegistryFeature|TestCurve|TestDelegateCaller|TestFeeCollectorController|TestFeeRecipient|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFixinProtocolFees|TestFixinTokenSpender|TestFullMigration|TestInitialMigration|TestLibNativeOrder|TestLibSignature|TestLiquidityProvider|TestMetaTransactionsNativeOrdersFeature|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC1155Token|TestMintableERC20Token|TestMintableERC721Token|TestMooniswap|TestNFTOrderPresigner|TestNativeOrdersFeature|TestNoEthRecipient|TestOrderSignerRegistryWithContractWallet|TestPermissionlessTransformerDeployerSuicidal|TestPermissionlessTransformerDeployerTransformer|TestPropertyValidator|TestRfqOriginRegistration|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestStaking|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestUniswapV2Factory|TestUniswapV2Pool|TestUniswapV3Factory|TestUniswapV3Feature|TestUniswapV3Pool|TestWeth|TestWethTransformerHost|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|UniswapV3Feature|WethTransformer|ZeroEx|ZeroExOptimized).json" }, "repository": { "type": "git", @@ -51,10 +51,10 @@ "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex", "devDependencies": { "@0x/abi-gen": "^5.8.5", - "@0x/contract-addresses": "^8.7.0", + "@0x/contract-addresses": "^8.12.0", "@0x/contracts-erc20": "^3.3.57", "@0x/contracts-gen": "^2.0.50", - "@0x/contracts-test-utils": "^5.4.54", + "@0x/contracts-test-utils": "^5.4.59", "@0x/dev-utils": "^5.0.2", "@0x/order-utils": "^10.4.28", "@0x/sol-compiler": "^4.8.2", @@ -80,7 +80,7 @@ }, "dependencies": { "@0x/base-contract": "^7.0.0", - "@0x/protocol-utils": "^11.22.2", + "@0x/protocol-utils": "^11.24.1", "@0x/subproviders": "^8.0.1", "@0x/types": "^3.3.7", "@0x/typescript-typings": "^5.3.1", diff --git a/contracts/zero-ex/src/artifacts.ts b/contracts/zero-ex/src/artifacts.ts index 654429c0bc..3211f56c39 100644 --- a/contracts/zero-ex/src/artifacts.ts +++ b/contracts/zero-ex/src/artifacts.ts @@ -7,6 +7,8 @@ import { ContractArtifact } from 'ethereum-types'; import * as AffiliateFeeTransformer from '../generated-artifacts/AffiliateFeeTransformer.json'; import * as AvalancheBridgeAdapter from '../generated-artifacts/AvalancheBridgeAdapter.json'; +import * as BaseBridgeAdapter from '../generated-artifacts/BaseBridgeAdapter.json'; +import * as BaseGoerliBridgeAdapter from '../generated-artifacts/BaseGoerliBridgeAdapter.json'; import * as BatchFillNativeOrdersFeature from '../generated-artifacts/BatchFillNativeOrdersFeature.json'; import * as BSCBridgeAdapter from '../generated-artifacts/BSCBridgeAdapter.json'; import * as CeloBridgeAdapter from '../generated-artifacts/CeloBridgeAdapter.json'; @@ -79,6 +81,8 @@ export const artifacts = { OtcOrdersFeature: OtcOrdersFeature as ContractArtifact, IOtcOrdersFeature: IOtcOrdersFeature as ContractArtifact, AvalancheBridgeAdapter: AvalancheBridgeAdapter as ContractArtifact, + BaseGoerliBridgeAdapter: BaseGoerliBridgeAdapter as ContractArtifact, + BaseBridgeAdapter: BaseBridgeAdapter as ContractArtifact, BSCBridgeAdapter: BSCBridgeAdapter as ContractArtifact, CeloBridgeAdapter: CeloBridgeAdapter as ContractArtifact, EthereumBridgeAdapter: EthereumBridgeAdapter as ContractArtifact, diff --git a/contracts/zero-ex/src/wrappers.ts b/contracts/zero-ex/src/wrappers.ts index 785fbe514b..cab7ff3d91 100644 --- a/contracts/zero-ex/src/wrappers.ts +++ b/contracts/zero-ex/src/wrappers.ts @@ -6,6 +6,8 @@ export * from '../generated-wrappers/affiliate_fee_transformer'; export * from '../generated-wrappers/avalanche_bridge_adapter'; export * from '../generated-wrappers/b_s_c_bridge_adapter'; +export * from '../generated-wrappers/base_bridge_adapter'; +export * from '../generated-wrappers/base_goerli_bridge_adapter'; export * from '../generated-wrappers/batch_fill_native_orders_feature'; export * from '../generated-wrappers/celo_bridge_adapter'; export * from '../generated-wrappers/curve_liquidity_provider'; diff --git a/contracts/zero-ex/test/artifacts.ts b/contracts/zero-ex/test/artifacts.ts index ec9e2389a2..c3de614bcb 100644 --- a/contracts/zero-ex/test/artifacts.ts +++ b/contracts/zero-ex/test/artifacts.ts @@ -9,6 +9,8 @@ import * as AbstractBridgeAdapter from '../test/generated-artifacts/AbstractBrid import * as AffiliateFeeTransformer from '../test/generated-artifacts/AffiliateFeeTransformer.json'; import * as ArbitrumBridgeAdapter from '../test/generated-artifacts/ArbitrumBridgeAdapter.json'; import * as AvalancheBridgeAdapter from '../test/generated-artifacts/AvalancheBridgeAdapter.json'; +import * as BaseBridgeAdapter from '../test/generated-artifacts/BaseBridgeAdapter.json'; +import * as BaseGoerliBridgeAdapter from '../test/generated-artifacts/BaseGoerliBridgeAdapter.json'; import * as BatchFillNativeOrdersFeature from '../test/generated-artifacts/BatchFillNativeOrdersFeature.json'; import * as BootstrapFeature from '../test/generated-artifacts/BootstrapFeature.json'; import * as BridgeProtocols from '../test/generated-artifacts/BridgeProtocols.json'; @@ -319,6 +321,8 @@ export const artifacts = { ArbitrumBridgeAdapter: ArbitrumBridgeAdapter as ContractArtifact, AvalancheBridgeAdapter: AvalancheBridgeAdapter as ContractArtifact, BSCBridgeAdapter: BSCBridgeAdapter as ContractArtifact, + BaseBridgeAdapter: BaseBridgeAdapter as ContractArtifact, + BaseGoerliBridgeAdapter: BaseGoerliBridgeAdapter as ContractArtifact, BridgeProtocols: BridgeProtocols as ContractArtifact, CeloBridgeAdapter: CeloBridgeAdapter as ContractArtifact, EthereumBridgeAdapter: EthereumBridgeAdapter as ContractArtifact, diff --git a/contracts/zero-ex/test/wrappers.ts b/contracts/zero-ex/test/wrappers.ts index 0956860c25..084945b18b 100644 --- a/contracts/zero-ex/test/wrappers.ts +++ b/contracts/zero-ex/test/wrappers.ts @@ -8,6 +8,8 @@ export * from '../test/generated-wrappers/affiliate_fee_transformer'; export * from '../test/generated-wrappers/arbitrum_bridge_adapter'; export * from '../test/generated-wrappers/avalanche_bridge_adapter'; export * from '../test/generated-wrappers/b_s_c_bridge_adapter'; +export * from '../test/generated-wrappers/base_bridge_adapter'; +export * from '../test/generated-wrappers/base_goerli_bridge_adapter'; export * from '../test/generated-wrappers/batch_fill_native_orders_feature'; export * from '../test/generated-wrappers/bootstrap_feature'; export * from '../test/generated-wrappers/bridge_protocols'; diff --git a/contracts/zero-ex/tests/transformers/bridges/AvalancheBridgeAdapterTest.t.sol b/contracts/zero-ex/tests/transformers/bridges/AvalancheBridgeAdapterTest.t.sol new file mode 100644 index 0000000000..feba5de135 --- /dev/null +++ b/contracts/zero-ex/tests/transformers/bridges/AvalancheBridgeAdapterTest.t.sol @@ -0,0 +1,35 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "forge-std/Test.sol"; +import "../../../contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol"; +import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol"; + +contract AvalancheBridgeAdapterTest is Test { + address constant WAVAX = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7; + + AvalancheBridgeAdapter private adapter; + + function setUp() public { + vm.chainId(43114); + adapter = new AvalancheBridgeAdapter(IEtherToken(WAVAX)); + } + + function testSupportsUniswapV3() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.UNISWAPV3) << 128))); + } +} diff --git a/contracts/zero-ex/tests/transformers/bridges/BSCBridgeAdapterTest.t.sol b/contracts/zero-ex/tests/transformers/bridges/BSCBridgeAdapterTest.t.sol new file mode 100644 index 0000000000..f9d9867d7e --- /dev/null +++ b/contracts/zero-ex/tests/transformers/bridges/BSCBridgeAdapterTest.t.sol @@ -0,0 +1,39 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "forge-std/Test.sol"; +import "../../../contracts/src/transformers/bridges/BSCBridgeAdapter.sol"; +import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol"; + +contract BSCBridgeAdapterTest is Test { + address constant WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c; + + BSCBridgeAdapter private adapter; + + function setUp() public { + vm.chainId(56); + adapter = new BSCBridgeAdapter(IEtherToken(WBNB)); + } + + function testSupportsUniswapV3() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.UNISWAPV3) << 128))); + } + + function testSupportMaverickV1() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.MAVERICKV1) << 128))); + } +} diff --git a/contracts/zero-ex/tests/transformers/bridges/BaseBridgeAdapterTest.t.sol b/contracts/zero-ex/tests/transformers/bridges/BaseBridgeAdapterTest.t.sol new file mode 100644 index 0000000000..c9a708cfbb --- /dev/null +++ b/contracts/zero-ex/tests/transformers/bridges/BaseBridgeAdapterTest.t.sol @@ -0,0 +1,47 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "forge-std/Test.sol"; +import "../../../contracts/src/transformers/bridges/BaseBridgeAdapter.sol"; +import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol"; + +contract BaseBridgeAdapterTest is Test { + address constant WETH = 0x4200000000000000000000000000000000000006; + + BaseBridgeAdapter private adapter; + + function setUp() public { + vm.chainId(8453); + adapter = new BaseBridgeAdapter(IEtherToken(WETH)); + } + + function testSupportsUniswapV3() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.UNISWAPV3) << 128))); + } + + function testSupportMaverickV1() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.MAVERICKV1) << 128))); + } + + function testSupportSolidly() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.SOLIDLY) << 128))); + } + + function testSupportVelodromeV2() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.VELODROMEV2) << 128))); + } +} diff --git a/contracts/zero-ex/tests/transformers/bridges/EthereumBridgeAdapterTest.t.sol b/contracts/zero-ex/tests/transformers/bridges/EthereumBridgeAdapterTest.t.sol new file mode 100644 index 0000000000..ea5808cb02 --- /dev/null +++ b/contracts/zero-ex/tests/transformers/bridges/EthereumBridgeAdapterTest.t.sol @@ -0,0 +1,39 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "forge-std/Test.sol"; +import "../../../contracts/src/transformers/bridges/EthereumBridgeAdapter.sol"; +import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol"; + +contract EthereumBridgeAdapterTest is Test { + address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; + + EthereumBridgeAdapter private adapter; + + function setUp() public { + vm.chainId(1); + adapter = new EthereumBridgeAdapter(IEtherToken(WETH)); + } + + function testSupportsUniswapV3() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.UNISWAPV3) << 128))); + } + + function testSupportMaverickV1() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.MAVERICKV1) << 128))); + } +} diff --git a/contracts/zero-ex/tests/transformers/bridges/OptimismBridgeAdapterTest.t.sol b/contracts/zero-ex/tests/transformers/bridges/OptimismBridgeAdapterTest.t.sol new file mode 100644 index 0000000000..d82758d7c0 --- /dev/null +++ b/contracts/zero-ex/tests/transformers/bridges/OptimismBridgeAdapterTest.t.sol @@ -0,0 +1,35 @@ +// 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.5; +pragma experimental ABIEncoderV2; + +import "forge-std/Test.sol"; +import "../../../contracts/src/transformers/bridges/OptimismBridgeAdapter.sol"; +import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol"; + +contract OptimismBridgeAdapterTest is Test { + address constant WETH = 0x4200000000000000000000000000000000000006; + + OptimismBridgeAdapter private adapter; + + function setUp() public { + vm.chainId(10); + adapter = new OptimismBridgeAdapter(IEtherToken(WETH)); + } + + function testSupportVelodromeV2() public { + assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.VELODROMEV2) << 128))); + } +} diff --git a/contracts/zero-ex/tsconfig.json b/contracts/zero-ex/tsconfig.json index ab33e86988..7f8a163219 100644 --- a/contracts/zero-ex/tsconfig.json +++ b/contracts/zero-ex/tsconfig.json @@ -6,6 +6,8 @@ "generated-artifacts/AffiliateFeeTransformer.json", "generated-artifacts/AvalancheBridgeAdapter.json", "generated-artifacts/BSCBridgeAdapter.json", + "generated-artifacts/BaseBridgeAdapter.json", + "generated-artifacts/BaseGoerliBridgeAdapter.json", "generated-artifacts/BatchFillNativeOrdersFeature.json", "generated-artifacts/CeloBridgeAdapter.json", "generated-artifacts/CurveLiquidityProvider.json", @@ -48,6 +50,8 @@ "test/generated-artifacts/ArbitrumBridgeAdapter.json", "test/generated-artifacts/AvalancheBridgeAdapter.json", "test/generated-artifacts/BSCBridgeAdapter.json", + "test/generated-artifacts/BaseBridgeAdapter.json", + "test/generated-artifacts/BaseGoerliBridgeAdapter.json", "test/generated-artifacts/BatchFillNativeOrdersFeature.json", "test/generated-artifacts/BootstrapFeature.json", "test/generated-artifacts/BridgeProtocols.json", diff --git a/docs/guides/nft_guide.rst b/docs/guides/nft_guide.rst index d6299bafe8..05ede796ed 100644 --- a/docs/guides/nft_guide.rst +++ b/docs/guides/nft_guide.rst @@ -15,6 +15,7 @@ Create an ERC721Order The following code snippet shows how to construct a basic ERC721 sell order in JavaScript. In the following example, the seller indicates that they would like to receive ether by providing the sentinel value `0xeee...`` as the `erc20Token`. .. code-block:: javascript + const { ERC721Order, NFTOrder } = require("@0x/protocol-utils"); const utils = require("@0x/utils"); @@ -48,6 +49,7 @@ The following code snippet shows how to construct a basic ERC721 sell order in J An ERC721 sell order can be created similarly. Note that buy orders must use WETH instead of ether, because the ERC20 `transferFrom` functionality is needed to execute a buy order. .. code-block:: javascript + const { ERC721Order, NFTOrder } = require("@0x/protocol-utils"); const utils = require("@0x/utils"); @@ -97,6 +99,7 @@ Fees are paid by the **buyer**, denominated in the asset paid by the buyer, and The following code snippet shows how to create an ERC721 order with a single fee. Multiple fees can be specified by providing multiple fee objects in the order fees field. .. code-block:: javascript + const { ERC721Order, NFTOrder } = require("@0x/protocol-utils"); const utils = require("@0x/utils"); @@ -130,6 +133,7 @@ The following code snippet shows how to create an ERC721 order with a single fee In 0x V4, it is possible to create a bid for any NFT in a particular collection. The following code snippet shows how to create an order to buy any CryptoCoven $WITCH. .. code-block:: javascript + const { ERC721Order, NFTOrder } = require("@0x/protocol-utils"); const utils = require("@0x/utils"); @@ -169,6 +173,7 @@ Off-chain orders must be signed by the order maker to be filled. For on-chain or Signing an order with a private key is easy: the `ERC721Order` and `ERC1155Order` classes from `@0x/protocol-utils` expose a `getSignatureWithKey` function that take a 0x-prefixed private key string. .. code-block:: javascript + const { ERC721Order, NFTOrder, SignatureType } = require("@0x/protocol-utils"); const utils = require("@0x/utils"); @@ -196,6 +201,7 @@ Signing an order with a private key is easy: the `ERC721Order` and `ERC1155Order **Signing with ethers** .. code-block:: javascript + const { ERC721Order, NFTOrder, SignatureType } = require("@0x/protocol-utils"); const utils = require("@0x/utils"); const { ethers } = require("ethers"); @@ -243,6 +249,7 @@ Signing an order with a private key is easy: the `ERC721Order` and `ERC1155Order Orders can be simultaneously "signed" and listed on-chain using the `preSignERC721Order` or `preSignERC1155Order` functions. Orders can only be signed by the maker address specified in the order. .. code-block:: solidity + /// @dev Approves an ERC721 order on-chain. After pre-signing /// the order, the `PRESIGNED` signature type will become /// valid for that order and signer. @@ -260,6 +267,7 @@ Orders can be simultaneously "signed" and listed on-chain using the `preSignERC7 If an order has been pre-signed, it can be filled by providing a “null” signature with the PRESIGNED signature type (see `LibSignature.sol `_): .. code-block:: solidity + LibSignature.Signature({ signatureType: LibSignature.SignatureType.PRESIGNED, v: uint8(0), @@ -270,6 +278,7 @@ If an order has been pre-signed, it can be filled by providing a “null” sign The pre-sign functions emit the entire order as an event, so that the order is easily indexable by subgraphs and thus easily indexable by subgraphs and thus easily discoverable without the need for an off-chain database. .. code-block:: solidity + /// @dev Emitted when an `ERC721Order` is pre-signed. /// Contains all the fields of the order. event ERC721OrderPreSigned( @@ -311,6 +320,7 @@ Filling an ERC721 Order The basic functions used for filling NFT orders are the following: .. code-block:: solidity + /// @dev Sells an ERC721 asset to fill the given order. /// @param buyOrder The ERC721 buy order. /// @param signature The order signature from the maker. @@ -407,6 +417,7 @@ Cancelling an ERC721 Order All orders, whether off-chain or on-chain, can only be cancelled on-chain. The following contract functions are used to cancel individual ERC721 and ERC1155 orders. .. code-block:: solidity + /// @dev Cancel a single ERC721 order by its nonce. The caller /// should be the maker of the order. Silently succeeds if /// an order with the same nonce has already been filled or @@ -427,6 +438,7 @@ Note that if there are multiple outstanding orders with the same nonce, calling The following functions can be used to cancel multiple orders. .. code-block:: solidity + /// @dev Cancel multiple ERC721 orders by their nonces. The caller /// should be the maker of the orders. Silently succeeds if /// an order with the same nonce has already been filled or diff --git a/packages/contract-addresses/CHANGELOG.json b/packages/contract-addresses/CHANGELOG.json index 115a5facc9..1d43102d58 100644 --- a/packages/contract-addresses/CHANGELOG.json +++ b/packages/contract-addresses/CHANGELOG.json @@ -1,4 +1,52 @@ [ + { + "version": "8.12.0", + "changes": [ + { + "note": "Add VelodromeV2 support on Base" + } + ], + "timestamp": 1693346928 + }, + { + "version": "8.11.0", + "changes": [ + { + "note": "Add MaverickV1 support on Ethereum, BSC, and Base" + } + ], + "timestamp": 1692368658 + }, + { + "version": "8.10.0", + "changes": [ + { + "note": "Add VelodromeV2 support on Optimism" + } + ], + "timestamp": 1691617396 + }, + { + "version": "8.9.0", + "changes": [ + { + "note": "Add Uniswap V3 router v2 support in Base FillQuoteTransformer" + } + ], + "timestamp": 1689974915 + }, + { + "version": "8.8.0", + "changes": [ + { + "note": "Add Base mainnet addresses" + }, + { + "note": "Add UniswapV3 support in Avalanche and BSC FillQuoteTransformers" + } + ], + "timestamp": 1689791426 + }, { "version": "8.7.0", "changes": [ diff --git a/packages/contract-addresses/CHANGELOG.md b/packages/contract-addresses/CHANGELOG.md index 09b910ff6a..8a0a34a69f 100644 --- a/packages/contract-addresses/CHANGELOG.md +++ b/packages/contract-addresses/CHANGELOG.md @@ -6,6 +6,22 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v8.12.0 - _August 29, 2023_ + + * Add VelodromeV2 support on Base +## v8.11.0 - _August 18, 2023_ + + * Add MaverickV1 support on Ethereum, BSC, and Base +## v8.10.0 - _August 9, 2023_ + + * Add VelodromeV2 support on Optimism +## v8.9.0 - _July 21, 2023_ + + * Add Uniswap V3 router v2 support in Base FillQuoteTransformer +## v8.8.0 - _July 19, 2023_ + + * Add Base mainnet addresses + * Add UniswapV3 support in Avalanche and BSC FillQuoteTransformers ## v8.7.0 - _May 10, 2023_ * Add Trader Joe V2 MixIn to Arbitrum diff --git a/packages/contract-addresses/addresses.json b/packages/contract-addresses/addresses.json index f27f3c4326..2f03d6f541 100644 --- a/packages/contract-addresses/addresses.json +++ b/packages/contract-addresses/addresses.json @@ -18,7 +18,7 @@ "wethTransformer": "0xb2bc06a4efb20fc6553a69dbfa49b7be938034a7", "payTakerTransformer": "0xea500d073652336a58846ada15c25f2c6d2d241f", "affiliateFeeTransformer": "0x8146cbbe327364b13d0699f2ced39c637f92501a", - "fillQuoteTransformer": "0x21c3bee93fad436dedd29f971dc4fdf82f3e3a3a", + "fillQuoteTransformer": "0x2fd08c1f9fc8406c1d7e3a799a13883a7e7949f0", "positiveSlippageFeeTransformer": "0x818a4a855bfeb16c305cb65e8d4fb239a308bc48" } }, @@ -64,7 +64,7 @@ "wethTransformer": "0xac3d95668c092e895cd83a9cbafe9c7d9906471f", "payTakerTransformer": "0x7e788f3a3e39cdd1944ba111fafc5fb7e59b5e90", "affiliateFeeTransformer": "0x043300d113de0c64684ab89c56a45cd94c7ef54c", - "fillQuoteTransformer": "0x43d10801db01c28093265ef9b77d532e553fa578", + "fillQuoteTransformer": "0x6073f12fc63bcc64bd4fed5d44aa1035e37d68ee", "positiveSlippageFeeTransformer": "0x6ff35e8cbaf56d8a8f6bf9963b902a4576243030" } }, @@ -156,7 +156,7 @@ "wethTransformer": "0x9b8b52391071d71cd4ad1e61d7f273268fa34c6c", "payTakerTransformer": "0xb9a4c32547bc3cdc2ee2fb13cc1a0717dac9888f", "affiliateFeeTransformer": "0x105679f99d668001370b4621ad8648ac570c860f", - "fillQuoteTransformer": "0x886e4f97d7e06ab66dba574a7a861046dcf7ae4f", + "fillQuoteTransformer": "0x463fe1a80acb62ce1e4f0a4f7b83df674c2cce2c", "positiveSlippageFeeTransformer": "0xadbfdc58a24b6dbc16f21541800f43dd6e282250" } }, @@ -225,7 +225,7 @@ "wethTransformer": "0x02ce7af6520e2862f961f5d7eda746642865179c", "payTakerTransformer": "0xa6c3ca183a67fcb4299fb4199c12ca74874ca489", "affiliateFeeTransformer": "0x3102aea537ecb6f164550b094663c82a8c53a972", - "fillQuoteTransformer": "0xd140adb61d4e3e3978d4f32ac6b92240ff6e3a6e", + "fillQuoteTransformer": "0x521f3184ab27abde4a34e744a908b1a08dc8ef91", "positiveSlippageFeeTransformer": "0x9a4947d3fb77a7afc2c9cd6714bbae96dddde059" } }, @@ -251,5 +251,28 @@ "fillQuoteTransformer": "0x4a8815c2fc605e3b01aee52aade4d096c4e862c6", "positiveSlippageFeeTransformer": "0x20f935b037e8490d8027f2751f9452725eee01ad" } + }, + "8453": { + "zrxToken": "0x0000000000000000000000000000000000000000", + "etherToken": "0x4200000000000000000000000000000000000006", + "zeroExGovernor": "0xecc4f2a8e0fd933623b2ea4ad84bffd12cb1286c", + "zrxVault": "0x0000000000000000000000000000000000000000", + "staking": "0x0000000000000000000000000000000000000000", + "stakingProxy": "0x0000000000000000000000000000000000000000", + "erc20BridgeProxy": "0x0000000000000000000000000000000000000000", + "erc20BridgeSampler": "0x0000000000000000000000000000000000000000", + "exchangeProxyGovernor": "0xecc4f2a8e0fd933623b2ea4ad84bffd12cb1286c", + "exchangeProxy": "0xdef1c0ded9bec7f1a1670819833240f027b25eff", + "exchangeProxyTransformerDeployer": "0x58bca53ebba1aaf25f0edcd8dad6421872fe20b2", + "exchangeProxyFlashWallet": "0xdb6f1920a889355780af7570773609bd8cb1f498", + "exchangeProxyLiquidityProviderSandbox": "0x0000000000000000000000000000000000000000", + "zrxTreasury": "0x0000000000000000000000000000000000000000", + "transformers": { + "wethTransformer": "0x63186ea36e78ecbf0128e448362f1b81e9bf7412", + "payTakerTransformer": "0x5cc22a0e06ea11097c612a962e63674b90e96099", + "affiliateFeeTransformer": "0x9e52d8b32d835206d09810c310593bcc77264066", + "fillQuoteTransformer": "0x2c46d57bb5af87a13a51dd5b62ba7d3bc7e12e9c", + "positiveSlippageFeeTransformer": "0xf98a130d3b4029c70e6d93098cb82a003421341e" + } } } diff --git a/packages/contract-addresses/package.json b/packages/contract-addresses/package.json index c88e0da621..3e3d6aaeb5 100644 --- a/packages/contract-addresses/package.json +++ b/packages/contract-addresses/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contract-addresses", - "version": "8.7.0", + "version": "8.12.0", "engines": { "node": ">=6.12" }, diff --git a/packages/contract-addresses/src/index.ts b/packages/contract-addresses/src/index.ts index 87566204ba..c29a383d82 100644 --- a/packages/contract-addresses/src/index.ts +++ b/packages/contract-addresses/src/index.ts @@ -36,6 +36,7 @@ export enum ChainId { Celo = 42220, Optimism = 10, Arbitrum = 42161, + Base = 8453, } /** diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json index 6fd50750c0..d936f4dbbd 100644 --- a/packages/contract-wrappers/CHANGELOG.json +++ b/packages/contract-wrappers/CHANGELOG.json @@ -1,4 +1,49 @@ [ + { + "timestamp": 1693346928, + "version": "13.23.7", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1692368658, + "version": "13.23.6", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1691617396, + "version": "13.23.5", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689974915, + "version": "13.23.4", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689791426, + "version": "13.23.3", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "timestamp": 1683749017, "version": "13.23.2", diff --git a/packages/contract-wrappers/CHANGELOG.md b/packages/contract-wrappers/CHANGELOG.md index 15c893c698..93b9f3f9c3 100644 --- a/packages/contract-wrappers/CHANGELOG.md +++ b/packages/contract-wrappers/CHANGELOG.md @@ -6,6 +6,21 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v13.23.7 - _August 29, 2023_ + + * Dependencies updated +## v13.23.6 - _August 18, 2023_ + + * Dependencies updated +## v13.23.5 - _August 9, 2023_ + + * Dependencies updated +## v13.23.4 - _July 21, 2023_ + + * Dependencies updated +## v13.23.3 - _July 19, 2023_ + + * Dependencies updated ## v13.23.2 - _May 10, 2023_ * Dependencies updated diff --git a/packages/contract-wrappers/package.json b/packages/contract-wrappers/package.json index 4efaec9a81..76c8115884 100644 --- a/packages/contract-wrappers/package.json +++ b/packages/contract-wrappers/package.json @@ -1,6 +1,6 @@ { "name": "@0x/contract-wrappers", - "version": "13.23.2", + "version": "13.23.7", "engines": { "node": ">=6.12" }, @@ -59,7 +59,7 @@ "dependencies": { "@0x/assert": "^3.0.36", "@0x/base-contract": "^7.0.0", - "@0x/contract-addresses": "^8.7.0", + "@0x/contract-addresses": "^8.12.0", "@0x/json-schemas": "^6.4.4", "@0x/types": "^3.3.7", "@0x/utils": "^7.0.0", diff --git a/packages/protocol-utils/CHANGELOG.json b/packages/protocol-utils/CHANGELOG.json index 3f3c95be51..062d8b6470 100644 --- a/packages/protocol-utils/CHANGELOG.json +++ b/packages/protocol-utils/CHANGELOG.json @@ -1,4 +1,49 @@ [ + { + "timestamp": 1693346928, + "version": "11.24.1", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "version": "11.24.0", + "changes": [ + { + "note": "Add MaverickV1 support on Ethereum, BSC, and Base" + } + ], + "timestamp": 1692368658 + }, + { + "version": "11.23.0", + "changes": [ + { + "note": "Add VelodromeV2 support on Optimism" + } + ], + "timestamp": 1691617396 + }, + { + "timestamp": 1689974915, + "version": "11.22.4", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, + { + "timestamp": 1689791426, + "version": "11.22.3", + "changes": [ + { + "note": "Dependencies updated" + } + ] + }, { "timestamp": 1683749017, "version": "11.22.2", diff --git a/packages/protocol-utils/CHANGELOG.md b/packages/protocol-utils/CHANGELOG.md index e606922b5f..8cfc04fb90 100644 --- a/packages/protocol-utils/CHANGELOG.md +++ b/packages/protocol-utils/CHANGELOG.md @@ -6,6 +6,21 @@ Edit the package's CHANGELOG.json file only. CHANGELOG +## v11.24.1 - _August 29, 2023_ + + * Dependencies updated +## v11.24.0 - _August 18, 2023_ + + * Add MaverickV1 support on Ethereum, BSC, and Base +## v11.23.0 - _August 9, 2023_ + + * Add VelodromeV2 support on Optimism +## v11.22.4 - _July 21, 2023_ + + * Dependencies updated +## v11.22.3 - _July 19, 2023_ + + * Dependencies updated ## v11.22.2 - _May 10, 2023_ * Dependencies updated diff --git a/packages/protocol-utils/package.json b/packages/protocol-utils/package.json index b14e55a128..5ff865b2d9 100644 --- a/packages/protocol-utils/package.json +++ b/packages/protocol-utils/package.json @@ -1,6 +1,6 @@ { "name": "@0x/protocol-utils", - "version": "11.22.2", + "version": "11.24.1", "engines": { "node": ">=6.12" }, @@ -62,8 +62,8 @@ }, "dependencies": { "@0x/assert": "^3.0.36", - "@0x/contract-addresses": "^8.7.0", - "@0x/contract-wrappers": "^13.23.2", + "@0x/contract-addresses": "^8.12.0", + "@0x/contract-wrappers": "^13.23.7", "@0x/json-schemas": "^6.4.4", "@0x/subproviders": "^8.0.1", "@0x/utils": "^7.0.0", diff --git a/packages/protocol-utils/src/transformer_utils.ts b/packages/protocol-utils/src/transformer_utils.ts index ec875941da..0fa0b2c9cc 100644 --- a/packages/protocol-utils/src/transformer_utils.ts +++ b/packages/protocol-utils/src/transformer_utils.ts @@ -166,6 +166,8 @@ export enum BridgeProtocol { KyberElastic, Barter, TraderJoeV2, + VelodromeV2, + MaverickV1, } /**