Compare commits
1 Commits
developmen
...
exp/DCAOrd
Author | SHA1 | Date | |
---|---|---|---|
|
2851637ee4 |
61
.github/workflows/ci.yml
vendored
61
.github/workflows/ci.yml
vendored
@ -83,30 +83,28 @@ jobs:
|
|||||||
-p @0x/order-utils \
|
-p @0x/order-utils \
|
||||||
-m --serial -c test:ci
|
-m --serial -c test:ci
|
||||||
|
|
||||||
# NOTE: disabled as ZRXToken.sol did not compile with the latest forge.
|
|
||||||
# TODO: re-enable once the issue is resolved.
|
|
||||||
- name: Run Forge build for erc20
|
- name: Run Forge build for erc20
|
||||||
working-directory: contracts/erc20
|
working-directory: contracts/erc20
|
||||||
run: |
|
run: |
|
||||||
forge --version
|
forge --version
|
||||||
forge build --sizes --skip ZRXToken
|
forge build --sizes
|
||||||
|
|
||||||
# - name: Run Forge tests for erc20
|
- name: Run Forge tests for erc20
|
||||||
# working-directory: contracts/erc20
|
working-directory: contracts/erc20
|
||||||
# run: |
|
run: |
|
||||||
# forge test -vvv --gas-report
|
forge test -vvv --gas-report
|
||||||
|
|
||||||
# - name: Run Forge coverage for erc20
|
- name: Run Forge coverage for erc20
|
||||||
# working-directory: contracts/erc20
|
working-directory: contracts/erc20
|
||||||
# run: |
|
run: |
|
||||||
# forge coverage --report summary --report lcov
|
forge coverage --report summary --report lcov
|
||||||
|
|
||||||
# - name: Upload the coverage report to Coveralls
|
- name: Upload the coverage report to Coveralls
|
||||||
# uses: coverallsapp/github-action@master
|
uses: coverallsapp/github-action@master
|
||||||
# with:
|
with:
|
||||||
# github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# base-path: ./contracts/erc20/
|
base-path: ./contracts/erc20/
|
||||||
# path-to-lcov: ./contracts/erc20/lcov.info
|
path-to-lcov: ./contracts/erc20/lcov.info
|
||||||
|
|
||||||
- name: Run Forge build for zero-ex
|
- name: Run Forge build for zero-ex
|
||||||
working-directory: contracts/zero-ex
|
working-directory: contracts/zero-ex
|
||||||
@ -144,20 +142,19 @@ jobs:
|
|||||||
forge --version
|
forge --version
|
||||||
forge build --sizes
|
forge build --sizes
|
||||||
|
|
||||||
# TODO: re-enable once the issue is resolved.
|
- name: Run Forge tests on governance contracts
|
||||||
# - name: Run Forge tests on governance contracts
|
working-directory: ./contracts/governance
|
||||||
# working-directory: ./contracts/governance
|
run: |
|
||||||
# run: |
|
forge test -vvv --gas-report
|
||||||
# forge test -vvv --gas-report
|
|
||||||
|
|
||||||
# - name: Run Forge coverage on governance contracts
|
- name: Run Forge coverage on governance contracts
|
||||||
# working-directory: ./contracts/governance
|
working-directory: ./contracts/governance
|
||||||
# run: |
|
run: |
|
||||||
# forge coverage --report lcov
|
forge coverage --report lcov
|
||||||
|
|
||||||
# - name: Upload the coverage report to Coveralls
|
- name: Upload the coverage report to Coveralls
|
||||||
# uses: coverallsapp/github-action@master
|
uses: coverallsapp/github-action@master
|
||||||
# with:
|
with:
|
||||||
# github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# base-path: ./contracts/governance/
|
base-path: ./contracts/governance/
|
||||||
# path-to-lcov: ./contracts/governance/lcov.info
|
path-to-lcov: ./contracts/governance/lcov.info
|
||||||
|
30
.github/workflows/publish.yml
vendored
30
.github/workflows/publish.yml
vendored
@ -14,8 +14,6 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
|
||||||
PublishBranch: publish/${{github.ref_name }}-${{ github.run_id }}-${{ github.run_number }}
|
|
||||||
steps:
|
steps:
|
||||||
- name: 'check successful status'
|
- name: 'check successful status'
|
||||||
run: |
|
run: |
|
||||||
@ -40,10 +38,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git config --global user.email "github-actions@github.com"
|
git config --global user.email "github-actions@github.com"
|
||||||
git config --global user.name "Github Actions"
|
git config --global user.name "Github Actions"
|
||||||
- name: 'Checkout new branch'
|
|
||||||
run: |
|
|
||||||
git checkout -b $PublishBranch
|
|
||||||
git push -u origin $PublishBranch
|
|
||||||
- name: 'install dependencies'
|
- name: 'install dependencies'
|
||||||
run: |
|
run: |
|
||||||
yarn -D
|
yarn -D
|
||||||
@ -55,23 +49,9 @@ jobs:
|
|||||||
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
|
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
PUBLISH_PRERELEASE: ${{ github.event.inputs.prerelease }}
|
PUBLISH_PRERELEASE: ${{ github.event.inputs.prerelease }}
|
||||||
- name: 'Create PR to merge into ref branch'
|
- name: 'merge into main branch'
|
||||||
|
if: github.event.inputs.prerelease == '' # unless it's a prerelease
|
||||||
run: |
|
run: |
|
||||||
gh pr create \
|
git checkout main && \
|
||||||
-B ${{ github.ref_name }} \
|
git merge ${{ github.ref }} && \
|
||||||
-H $PublishBranch \
|
git push
|
||||||
--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 }}
|
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -84,9 +84,6 @@ TODO.md
|
|||||||
# IDE file
|
# IDE file
|
||||||
.vscode
|
.vscode
|
||||||
.idea
|
.idea
|
||||||
*~
|
|
||||||
.\#*
|
|
||||||
\#*\#
|
|
||||||
|
|
||||||
# generated contract artifacts/
|
# generated contract artifacts/
|
||||||
generated-artifacts/
|
generated-artifacts/
|
||||||
|
@ -1,58 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"timestamp": 1700094997,
|
|
||||||
"version": "4.0.14",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Dependencies updated"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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,
|
"timestamp": 1683749017,
|
||||||
"version": "4.0.8",
|
"version": "4.0.8",
|
||||||
|
@ -5,30 +5,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v4.0.14 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Dependencies updated
|
|
||||||
|
|
||||||
## 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_
|
## v4.0.8 - _May 10, 2023_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contracts-erc20",
|
"name": "@0x/contracts-erc20",
|
||||||
"version": "4.0.14",
|
"version": "4.0.8",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/protocol",
|
"homepage": "https://github.com/0xProject/protocol",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0x/contracts-utils": "^4.8.52",
|
"@0x/contracts-utils": "^4.8.46",
|
||||||
"@0x/ts-doc-gen": "^0.0.28",
|
"@0x/ts-doc-gen": "^0.0.28",
|
||||||
"typedoc": "~0.16.11"
|
"typedoc": "~0.16.11"
|
||||||
},
|
},
|
||||||
|
@ -1,58 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"timestamp": 1700094997,
|
|
||||||
"version": "5.4.60",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Dependencies updated"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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,
|
"timestamp": 1683749017,
|
||||||
"version": "5.4.54",
|
"version": "5.4.54",
|
||||||
|
@ -5,30 +5,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v5.4.60 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Dependencies updated
|
|
||||||
|
|
||||||
## 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_
|
## v5.4.54 - _May 10, 2023_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contracts-test-utils",
|
"name": "@0x/contracts-test-utils",
|
||||||
"version": "5.4.60",
|
"version": "5.4.54",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -41,7 +41,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0x/assert": "^3.0.36",
|
"@0x/assert": "^3.0.36",
|
||||||
"@0x/base-contract": "^7.0.0",
|
"@0x/base-contract": "^7.0.0",
|
||||||
"@0x/contract-addresses": "^8.13.0",
|
"@0x/contract-addresses": "^8.7.0",
|
||||||
"@0x/dev-utils": "^5.0.2",
|
"@0x/dev-utils": "^5.0.2",
|
||||||
"@0x/json-schemas": "^6.4.4",
|
"@0x/json-schemas": "^6.4.4",
|
||||||
"@0x/order-utils": "^10.4.28",
|
"@0x/order-utils": "^10.4.28",
|
||||||
|
@ -1,58 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"timestamp": 1700094997,
|
|
||||||
"version": "1.4.54",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Dependencies updated"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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,
|
"timestamp": 1683749017,
|
||||||
"version": "1.4.48",
|
"version": "1.4.48",
|
||||||
|
@ -5,30 +5,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v1.4.54 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Dependencies updated
|
|
||||||
|
|
||||||
## 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_
|
## v1.4.48 - _May 10, 2023_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contracts-treasury",
|
"name": "@0x/contracts-treasury",
|
||||||
"version": "1.4.54",
|
"version": "1.4.48",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -46,12 +46,12 @@
|
|||||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury",
|
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0x/abi-gen": "^5.8.5",
|
"@0x/abi-gen": "^5.8.5",
|
||||||
"@0x/contract-addresses": "^8.13.0",
|
"@0x/contract-addresses": "^8.7.0",
|
||||||
"@0x/contracts-asset-proxy": "^3.7.19",
|
"@0x/contracts-asset-proxy": "^3.7.19",
|
||||||
"@0x/contracts-erc20": "3.3.57",
|
"@0x/contracts-erc20": "3.3.57",
|
||||||
"@0x/contracts-gen": "^2.0.50",
|
"@0x/contracts-gen": "^2.0.50",
|
||||||
"@0x/contracts-staking": "^2.0.45",
|
"@0x/contracts-staking": "^2.0.45",
|
||||||
"@0x/contracts-test-utils": "^5.4.60",
|
"@0x/contracts-test-utils": "^5.4.54",
|
||||||
"@0x/sol-compiler": "^4.8.2",
|
"@0x/sol-compiler": "^4.8.2",
|
||||||
"@0x/ts-doc-gen": "^0.0.28",
|
"@0x/ts-doc-gen": "^0.0.28",
|
||||||
"@types/isomorphic-fetch": "^0.0.35",
|
"@types/isomorphic-fetch": "^0.0.35",
|
||||||
@ -73,7 +73,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0x/base-contract": "^7.0.0",
|
"@0x/base-contract": "^7.0.0",
|
||||||
"@0x/protocol-utils": "^11.24.2",
|
"@0x/protocol-utils": "^11.22.2",
|
||||||
"@0x/subproviders": "^8.0.1",
|
"@0x/subproviders": "^8.0.1",
|
||||||
"@0x/types": "^3.3.7",
|
"@0x/types": "^3.3.7",
|
||||||
"@0x/typescript-typings": "^5.3.1",
|
"@0x/typescript-typings": "^5.3.1",
|
||||||
|
@ -1,58 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"timestamp": 1700094997,
|
|
||||||
"version": "4.8.52",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Dependencies updated"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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,
|
"timestamp": 1683749017,
|
||||||
"version": "4.8.46",
|
"version": "4.8.46",
|
||||||
|
@ -5,30 +5,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v4.8.52 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Dependencies updated
|
|
||||||
|
|
||||||
## 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_
|
## v4.8.46 - _May 10, 2023_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contracts-utils",
|
"name": "@0x/contracts-utils",
|
||||||
"version": "4.8.52",
|
"version": "4.8.46",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -45,7 +45,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0x/abi-gen": "^5.8.5",
|
"@0x/abi-gen": "^5.8.5",
|
||||||
"@0x/contracts-gen": "^2.0.50",
|
"@0x/contracts-gen": "^2.0.50",
|
||||||
"@0x/contracts-test-utils": "^5.4.60",
|
"@0x/contracts-test-utils": "^5.4.54",
|
||||||
"@0x/dev-utils": "^5.0.2",
|
"@0x/dev-utils": "^5.0.2",
|
||||||
"@0x/order-utils": "^10.4.28",
|
"@0x/order-utils": "^10.4.28",
|
||||||
"@0x/sol-compiler": "^4.8.2",
|
"@0x/sol-compiler": "^4.8.2",
|
||||||
|
@ -1,67 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"version": "0.49.0",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Allowlist Sepolia in AbstractBridgeAdapter"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"timestamp": 1700094997
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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": [
|
|
||||||
{
|
|
||||||
"note": "Remove Bancor V1 support"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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",
|
"version": "0.44.0",
|
||||||
"changes": [
|
"changes": [
|
||||||
|
@ -5,33 +5,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v0.49.0 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Allowlist Sepolia in AbstractBridgeAdapter
|
|
||||||
|
|
||||||
## 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_
|
## v0.44.0 - _May 10, 2023_
|
||||||
|
|
||||||
* Add Trader Joe V2 MixIn to Arbitrum
|
* Add Trader Joe V2 MixIn to Arbitrum
|
||||||
|
@ -115,8 +115,6 @@
|
|||||||
"./contracts/src/transformers/bridges/ArbitrumBridgeAdapter.sol",
|
"./contracts/src/transformers/bridges/ArbitrumBridgeAdapter.sol",
|
||||||
"./contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol",
|
"./contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol",
|
||||||
"./contracts/src/transformers/bridges/BSCBridgeAdapter.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/BridgeProtocols.sol",
|
||||||
"./contracts/src/transformers/bridges/CeloBridgeAdapter.sol",
|
"./contracts/src/transformers/bridges/CeloBridgeAdapter.sol",
|
||||||
"./contracts/src/transformers/bridges/EthereumBridgeAdapter.sol",
|
"./contracts/src/transformers/bridges/EthereumBridgeAdapter.sol",
|
||||||
@ -127,6 +125,7 @@
|
|||||||
"./contracts/src/transformers/bridges/mixins/MixinAaveV2.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinAaveV2.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBalancer.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinBalancer.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBalancerV2Batch.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinBalancerV2Batch.sol",
|
||||||
|
"./contracts/src/transformers/bridges/mixins/MixinBancor.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinBancorV3.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinBancorV3.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinCompound.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinCompound.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinCryptoCom.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinCryptoCom.sol",
|
||||||
@ -137,10 +136,12 @@
|
|||||||
"./contracts/src/transformers/bridges/mixins/MixinGMX.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinGMX.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinKyberDmm.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinKyberDmm.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinLido.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinLido.sol",
|
||||||
|
"./contracts/src/transformers/bridges/mixins/MixinMStable.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinMakerPSM.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinMakerPSM.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinMooniswap.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinMooniswap.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinNerve.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinNerve.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinPlatypus.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinPlatypus.sol",
|
||||||
|
"./contracts/src/transformers/bridges/mixins/MixinShell.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinSolidly.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinSolidly.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinSynthetix.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinSynthetix.sol",
|
||||||
"./contracts/src/transformers/bridges/mixins/MixinUniswap.sol",
|
"./contracts/src/transformers/bridges/mixins/MixinUniswap.sol",
|
||||||
|
@ -12,24 +12,25 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma solidity ^0.6.5;
|
pragma solidity ^0.6;
|
||||||
pragma experimental ABIEncoderV2;
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
import "forge-std/Test.sol";
|
import "forge-std/Test.sol";
|
||||||
import "../../../contracts/src/transformers/bridges/OptimismBridgeAdapter.sol";
|
import "forge-std/Script.sol";
|
||||||
import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol";
|
import "@0x/contracts-erc20/src/IERC20Token.sol";
|
||||||
|
|
||||||
contract OptimismBridgeAdapterTest is Test {
|
contract DealMe is Test, Script {
|
||||||
address constant WETH = 0x4200000000000000000000000000000000000006;
|
function setUp() public {}
|
||||||
|
|
||||||
OptimismBridgeAdapter private adapter;
|
function run() public {
|
||||||
|
// set approval
|
||||||
|
vm.startBroadcast(0x6879fAb591ed0d62537A3Cac9D7cd41218445a84);
|
||||||
|
|
||||||
function setUp() public {
|
IERC20Token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48).approve(
|
||||||
vm.chainId(10);
|
0xDef1C0ded9bec7F1a1670819833240f027b25EfF,
|
||||||
adapter = new OptimismBridgeAdapter(IEtherToken(WETH));
|
type(uint256).max
|
||||||
}
|
);
|
||||||
|
|
||||||
function testSupportVelodromeV2() public {
|
vm.stopBroadcast();
|
||||||
assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.VELODROMEV2) << 128)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,24 +12,27 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma solidity ^0.6.5;
|
pragma solidity ^0.6;
|
||||||
pragma experimental ABIEncoderV2;
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
import "forge-std/Test.sol";
|
import "forge-std/Test.sol";
|
||||||
import "../../../contracts/src/transformers/bridges/AvalancheBridgeAdapter.sol";
|
import "forge-std/Script.sol";
|
||||||
import "../../../contracts/src/transformers/bridges/BridgeProtocols.sol";
|
import "@0x/contracts-erc20/src/IERC20Token.sol";
|
||||||
|
|
||||||
contract AvalancheBridgeAdapterTest is Test {
|
contract DealMe is Test, Script {
|
||||||
address constant WAVAX = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;
|
function setUp() public {}
|
||||||
|
|
||||||
AvalancheBridgeAdapter private adapter;
|
function run() public {
|
||||||
|
vm.startBroadcast(0x47ac0Fb4F2D84898e4D9E7b4DaB3C24507a6D503);
|
||||||
|
|
||||||
function setUp() public {
|
IERC20Token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48).transfer(
|
||||||
vm.chainId(43114);
|
0x6879fAb591ed0d62537A3Cac9D7cd41218445a84,
|
||||||
adapter = new AvalancheBridgeAdapter(IEtherToken(WAVAX));
|
1000e6
|
||||||
}
|
);
|
||||||
|
|
||||||
function testSupportsUniswapV3() public {
|
(0x6879fAb591ed0d62537A3Cac9D7cd41218445a84).transfer(1 ether);
|
||||||
assertTrue(adapter.isSupportedSource(bytes32(uint256(BridgeProtocols.UNISWAPV3) << 128)));
|
(0xb985d345c4bb8121cE2d18583b2a28e98D56d04b).transfer(1 ether);
|
||||||
|
|
||||||
|
vm.stopBroadcast();
|
||||||
}
|
}
|
||||||
}
|
}
|
83
contracts/zero-ex/contracts/scripts/Debugger.sol
Normal file
83
contracts/zero-ex/contracts/scripts/Debugger.sol
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
// 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 "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.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 TraceCalldata is Test, ForkUtils, TestUtils {
|
||||||
|
using LibERC20TokenV06 for IERC20TokenV06;
|
||||||
|
|
||||||
|
function setUp() public {
|
||||||
|
_setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_traceZeroExCall() public {
|
||||||
|
log_string("TraceExchangeProxyCall");
|
||||||
|
for (uint256 i = 0; i < 1; 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]);
|
||||||
|
vm.deal(address(this), 1e18);
|
||||||
|
labelAddresses(
|
||||||
|
chains[i],
|
||||||
|
indexChainsByChain[chains[i]],
|
||||||
|
getTokens(i),
|
||||||
|
getContractAddresses(i),
|
||||||
|
getLiquiditySourceAddresses(i)
|
||||||
|
);
|
||||||
|
swapWithOtcOrder(getTokens(i), getContractAddresses(i), getLiquiditySourceAddresses(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* solhint-disable function-max-lines */
|
||||||
|
function swapWithOtcOrder(
|
||||||
|
TokenAddresses memory tokens,
|
||||||
|
ContractAddresses memory addresses,
|
||||||
|
LiquiditySources memory sources
|
||||||
|
) public onlyForked {
|
||||||
|
IZERO_EX = IZeroEx(addresses.exchangeProxy);
|
||||||
|
address taker = address(0xd00d00cAca000000000000000000000000001337);
|
||||||
|
vm.label(taker, "API Quote Taker");
|
||||||
|
deal(address(tokens.USDT), taker, 100e30);
|
||||||
|
//deal(address(tokens.WrappedNativeToken), taker, 100e30);
|
||||||
|
vm.startPrank(taker);
|
||||||
|
IERC20TokenV06(tokens.USDT).approveIfBelow(address(addresses.exchangeProxy), uint256(-1));
|
||||||
|
//IERC20TokenV06(tokens.WrappedNativeToken).approveIfBelow(address(taker), uint256(-1));
|
||||||
|
|
||||||
|
//emit log_address(address(tokens.WrappedNativeToken));
|
||||||
|
IERC20TokenV06(tokens.USDT).balanceOf(taker);
|
||||||
|
IERC20TokenV06(tokens.WrappedNativeToken).balanceOf(taker);
|
||||||
|
(bool success, bytes memory result) = addresses.exchangeProxy.call(
|
||||||
|
hex"7a1eb1b9000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000003dd141a0000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000003e711b8000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000a3f14cb81e6edb7b1249755dd20e2bfb23597fd70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00d00caca0000000000000000000000000013370000000063f50e17000000000000000200000000000000000000000063f50da10000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000001c543148f2a2124e690f19ab0042906b437f954a52b9fbef6019c3968befac860466a819bd38bb6c60c5341f65d3e596d17573c80fc78a3a837d7ed6392b66e783000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000003e711b80000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000003e6b1b23900000000000000000000000000000000000000000000000000000003e711b800000000000000000000000000af0b0000f0210d0f421f0009c72406703b50506b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00d00caca0000000000000000000000000013370000000063f50dfb000000000000001f00000000000000000000000063f50da20000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000001beb5fbe9aa7694028216b8d81e613a41a9cf8b9135729d33acf77a692c4b0123547884cb6bae49c9ac885204ae11ce6fd4fff3961c04be142933b0c1b2e99072d869584cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ebba8e3ba63f50e10"
|
||||||
|
);
|
||||||
|
emit log_named_bytes("", result);
|
||||||
|
vm.stopPrank();
|
||||||
|
}
|
||||||
|
}
|
39
contracts/zero-ex/contracts/scripts/Deploy.sol
Normal file
39
contracts/zero-ex/contracts/scripts/Deploy.sol
Normal file
@ -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;
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
|
import "forge-std/Test.sol";
|
||||||
|
import "forge-std/Script.sol";
|
||||||
|
import "src/features/DCAFeature.sol";
|
||||||
|
import "src/IZeroEx.sol";
|
||||||
|
import "src/ZeroEx.sol";
|
||||||
|
|
||||||
|
contract DeployDCAFeature is Test, Script {
|
||||||
|
ZeroEx public ZERO_EX = ZeroEx(0xDef1C0ded9bec7F1a1670819833240f027b25EfF);
|
||||||
|
IZeroEx public IZERO_EX = IZeroEx(address(ZERO_EX));
|
||||||
|
|
||||||
|
function setUp() public {}
|
||||||
|
|
||||||
|
function run() public {
|
||||||
|
vm.startBroadcast(IZERO_EX.owner());
|
||||||
|
|
||||||
|
DCAFeature feature = new DCAFeature(address(ZERO_EX));
|
||||||
|
|
||||||
|
IZERO_EX.migrate(address(feature), abi.encodeWithSelector(DCAFeature.migrate.selector), IZERO_EX.owner());
|
||||||
|
|
||||||
|
vm.stopBroadcast();
|
||||||
|
}
|
||||||
|
}
|
68
contracts/zero-ex/contracts/scripts/TestDeploy.sol
Normal file
68
contracts/zero-ex/contracts/scripts/TestDeploy.sol
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
// 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 "forge-std/Test.sol";
|
||||||
|
import "forge-std/Script.sol";
|
||||||
|
import "src/features/DCAFeature.sol";
|
||||||
|
import "src/features/interfaces/IDCAFeature.sol";
|
||||||
|
import "src/IZeroEx.sol";
|
||||||
|
import "src/ZeroEx.sol";
|
||||||
|
|
||||||
|
contract TestDeploy is Test, Script {
|
||||||
|
ZeroEx public ZERO_EX = ZeroEx(0xDef1C0ded9bec7F1a1670819833240f027b25EfF);
|
||||||
|
IZeroEx public IZERO_EX = IZeroEx(address(ZERO_EX));
|
||||||
|
|
||||||
|
function setUp() public {}
|
||||||
|
|
||||||
|
function run() public {
|
||||||
|
uint256 signerPrivateKey = 0xA11CE;
|
||||||
|
address signer = vm.addr(signerPrivateKey);
|
||||||
|
|
||||||
|
IDCAFeature.DCAData memory dcaData = IDCAFeature.DCAData({
|
||||||
|
buyToken: IERC20Token(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2),
|
||||||
|
sellToken: IERC20Token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48),
|
||||||
|
sellAmount: 100,
|
||||||
|
interval: 600,
|
||||||
|
numFills: 12,
|
||||||
|
startTime: block.timestamp,
|
||||||
|
signer: payable(signer)
|
||||||
|
});
|
||||||
|
|
||||||
|
bytes32 dcahash = IDCAFeature(address(ZERO_EX)).getDCAHash(dcaData);
|
||||||
|
(uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, dcahash);
|
||||||
|
|
||||||
|
LibSignature.Signature memory signature = LibSignature.Signature({
|
||||||
|
signatureType: LibSignature.SignatureType.EIP712,
|
||||||
|
v: v,
|
||||||
|
r: r,
|
||||||
|
s: s
|
||||||
|
});
|
||||||
|
|
||||||
|
ITransformERC20Feature.Transformation[] memory transformations = new ITransformERC20Feature.Transformation[](0);
|
||||||
|
|
||||||
|
bytes memory swapCalldata = abi.encodeWithSelector(
|
||||||
|
IZERO_EX.transformERC20.selector,
|
||||||
|
dcaData.sellToken,
|
||||||
|
dcaData.buyToken,
|
||||||
|
1e18,
|
||||||
|
1e18,
|
||||||
|
transformations
|
||||||
|
);
|
||||||
|
|
||||||
|
IDCAFeature(address(ZERO_EX)).fillDCATransaction(dcaData, signature, swapCalldata);
|
||||||
|
}
|
||||||
|
}
|
284
contracts/zero-ex/contracts/src/features/DCAFeature.sol
Normal file
284
contracts/zero-ex/contracts/src/features/DCAFeature.sol
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
// 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-utils/contracts/src/v06/LibBytesV06.sol";
|
||||||
|
import "../fixins/FixinCommon.sol";
|
||||||
|
import "../fixins/FixinEIP712.sol";
|
||||||
|
import "./interfaces/IFeature.sol";
|
||||||
|
import "./interfaces/IDCAFeature.sol";
|
||||||
|
import "./libs/LibSignature.sol";
|
||||||
|
import "../migrations/LibMigrate.sol";
|
||||||
|
import "./interfaces/ITransformERC20Feature.sol";
|
||||||
|
|
||||||
|
import "forge-std/Test.sol";
|
||||||
|
|
||||||
|
/// @dev DCA feature.
|
||||||
|
contract DCAFeature is IFeature, IDCAFeature, FixinCommon, FixinEIP712 {
|
||||||
|
using LibBytesV06 for bytes;
|
||||||
|
using LibRichErrorsV06 for bytes;
|
||||||
|
|
||||||
|
/// @dev Describes the state of the DCA.
|
||||||
|
struct ExecuteState {
|
||||||
|
// Hash of the DCA order.
|
||||||
|
bytes32 hash;
|
||||||
|
// The DCA order data;
|
||||||
|
DCAData dca;
|
||||||
|
// The DCA signature (by `dca.signer`).
|
||||||
|
LibSignature.Signature signature;
|
||||||
|
// The calldata to fill for the current iteration of the DCA.
|
||||||
|
bytes swapCalldata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Arguments for a `TransformERC20.transformERC20()` call.
|
||||||
|
struct ExternalTransformERC20Args {
|
||||||
|
IERC20Token inputToken;
|
||||||
|
IERC20Token outputToken;
|
||||||
|
uint256 inputTokenAmount;
|
||||||
|
uint256 minOutputTokenAmount;
|
||||||
|
ITransformERC20Feature.Transformation[] transformations;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Name of this feature.
|
||||||
|
string public constant override FEATURE_NAME = "DCA";
|
||||||
|
/// @dev Version of this feature.
|
||||||
|
uint256 public immutable override FEATURE_VERSION = _encodeVersion(1, 0, 0);
|
||||||
|
/// @dev EIP712 typehash of the `DCAData` struct.
|
||||||
|
bytes32 public constant DCA_DATA_TYPEHASH =
|
||||||
|
keccak256(
|
||||||
|
"DCAData("
|
||||||
|
"address buyToken,"
|
||||||
|
"address sellToken,"
|
||||||
|
"uint256 sellAmount,"
|
||||||
|
"uint256 interval,"
|
||||||
|
"uint256 numFills,"
|
||||||
|
"uint256 startTime,"
|
||||||
|
"address signer"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
/// @dev number of fills executed per DCA order.
|
||||||
|
mapping(bytes32 => uint256) public numFilled;
|
||||||
|
|
||||||
|
constructor(address zeroExAddress) public FixinCommon() FixinEIP712(zeroExAddress) {}
|
||||||
|
|
||||||
|
function migrate() external returns (bytes4 success) {
|
||||||
|
_registerFeatureFunction(this.fillDCATransaction.selector);
|
||||||
|
_registerFeatureFunction(this.getDCAHash.selector);
|
||||||
|
return LibMigrate.MIGRATE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillDCATransaction(
|
||||||
|
DCAData calldata dcaData,
|
||||||
|
LibSignature.Signature calldata signature,
|
||||||
|
bytes calldata swapCallData
|
||||||
|
) public override returns (bytes memory returnResult) {
|
||||||
|
ExecuteState memory state;
|
||||||
|
state.dca = dcaData;
|
||||||
|
state.hash = getDCAHash(dcaData);
|
||||||
|
state.signature = signature;
|
||||||
|
state.swapCalldata = swapCallData;
|
||||||
|
|
||||||
|
returnResult = _fillDCATransaction(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Get the EIP712 hash of a dca order.
|
||||||
|
/// @param dca The DCA order.
|
||||||
|
/// @return dcaHash the EIP712 hash of 'dca'.
|
||||||
|
function getDCAHash(DCAData memory dca) public view override returns (bytes32 dcaHash) {
|
||||||
|
return
|
||||||
|
_getEIP712Hash(
|
||||||
|
keccak256(
|
||||||
|
abi.encode(
|
||||||
|
DCA_DATA_TYPEHASH,
|
||||||
|
dca.buyToken,
|
||||||
|
dca.sellToken,
|
||||||
|
dca.sellAmount,
|
||||||
|
dca.interval,
|
||||||
|
dca.numFills,
|
||||||
|
dca.startTime,
|
||||||
|
dca.signer
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _fillDCATransaction(ExecuteState memory state) private returns (bytes memory returnResult) {
|
||||||
|
_validateDCATransaction(state);
|
||||||
|
|
||||||
|
// get balances of sellToken and buyToken before we execute calldata
|
||||||
|
uint256 sellTokenBalanceBefore = state.dca.sellToken.balanceOf(state.dca.signer);
|
||||||
|
uint256 buyTokenBalanceBefore = state.dca.buyToken.balanceOf(state.dca.signer);
|
||||||
|
|
||||||
|
// execute the calldata
|
||||||
|
bytes4 selector = state.swapCalldata.readBytes4(0);
|
||||||
|
if (selector == ITransformERC20Feature.transformERC20.selector) {
|
||||||
|
returnResult = _executeTransformERC20Call(state);
|
||||||
|
} else {
|
||||||
|
revert("Unsupported swap function");
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the balances of the sellToken and buyToken after we execute the calldata
|
||||||
|
uint256 sellTokenBalanceAfter = state.dca.sellToken.balanceOf(state.dca.signer);
|
||||||
|
uint256 buyTokenBalanceAfter = state.dca.buyToken.balanceOf(state.dca.signer);
|
||||||
|
// validate deltas
|
||||||
|
if (sellTokenBalanceAfter > sellTokenBalanceBefore) {
|
||||||
|
revert("Sell token balance increased");
|
||||||
|
}
|
||||||
|
if (sellTokenBalanceBefore - sellTokenBalanceAfter != state.dca.sellAmount) {
|
||||||
|
revert("Sell token balance delta does not match sell amount");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buyTokenBalanceAfter < buyTokenBalanceBefore) {
|
||||||
|
revert("Buy token balance decreased");
|
||||||
|
}
|
||||||
|
// TODO query oracle to ensure minslippage is achieved
|
||||||
|
|
||||||
|
// update storage to show that we have executed the order
|
||||||
|
numFilled[state.hash] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _validateDCATransaction(ExecuteState memory state) private view {
|
||||||
|
// validate that the signature
|
||||||
|
if (LibSignature.getSignerOfHash(state.hash, state.signature) != state.dca.signer) {
|
||||||
|
LibSignatureRichErrors
|
||||||
|
.SignatureValidationError(
|
||||||
|
LibSignatureRichErrors.SignatureValidationErrorCodes.WRONG_SIGNER,
|
||||||
|
state.hash,
|
||||||
|
state.dca.signer,
|
||||||
|
// TODO: Remove this field from SignatureValidationError
|
||||||
|
// when rich reverts are part of the protocol repo.
|
||||||
|
""
|
||||||
|
)
|
||||||
|
.rrevert();
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if all DCA orders have been executed already
|
||||||
|
if (numFilled[state.hash] == state.dca.numFills) {
|
||||||
|
revert("All DCA orders have been executed already");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that DCA order is within the right time window
|
||||||
|
uint256 endTime = state.dca.startTime + (state.dca.interval * state.dca.numFills);
|
||||||
|
if (block.timestamp < state.dca.startTime || block.timestamp > endTime) {
|
||||||
|
revert("Invalid time window");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint256 currTime = block.timestamp;
|
||||||
|
uint256 currFill = (state.dca.numFills * (currTime - state.dca.startTime)) / (endTime - state.dca.startTime); // zero-indexed
|
||||||
|
uint256 currWindowMidpoint = ((currFill + 1) * (endTime - state.dca.startTime)) / state.dca.numFills;
|
||||||
|
currWindowMidpoint = currWindowMidpoint + state.dca.startTime;
|
||||||
|
uint256 halfWindowSizeSeconds = 150; // 2.5 minutes
|
||||||
|
|
||||||
|
uint256 currWindowStart = currWindowMidpoint < halfWindowSizeSeconds
|
||||||
|
? 0
|
||||||
|
: currWindowMidpoint - halfWindowSizeSeconds;
|
||||||
|
uint256 currWindowEnd = currWindowMidpoint + halfWindowSizeSeconds;
|
||||||
|
|
||||||
|
if (currTime < currWindowStart || currTime > currWindowEnd) {
|
||||||
|
console.log(
|
||||||
|
"currTime=%d, currWindowMidpoint=%d, halfWindow=%d",
|
||||||
|
currTime,
|
||||||
|
currWindowMidpoint,
|
||||||
|
halfWindowSizeSeconds
|
||||||
|
);
|
||||||
|
revert("Invalid time window 2");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Execute a `ITransformERC20Feature.transformERC20()` meta-transaction call
|
||||||
|
/// by decoding the call args and translating the call to the internal
|
||||||
|
/// `ITransformERC20Feature._transformERC20()` variant, where we can override
|
||||||
|
/// the taker address.
|
||||||
|
function _executeTransformERC20Call(ExecuteState memory state) private returns (bytes memory returnResult) {
|
||||||
|
// HACK(dorothy-zbornak): `abi.decode()` with the individual args
|
||||||
|
// will cause a stack overflow. But we can prefix the call data with an
|
||||||
|
// offset to transform it into the encoding for the equivalent single struct arg,
|
||||||
|
// since decoding a single struct arg consumes far less stack space than
|
||||||
|
// decoding multiple struct args.
|
||||||
|
|
||||||
|
// Where the encoding for multiple args (with the selector ommitted)
|
||||||
|
// would typically look like:
|
||||||
|
// | argument | offset |
|
||||||
|
// |--------------------------|---------|
|
||||||
|
// | inputToken | 0 |
|
||||||
|
// | outputToken | 32 |
|
||||||
|
// | inputTokenAmount | 64 |
|
||||||
|
// | minOutputTokenAmount | 96 |
|
||||||
|
// | transformations (offset) | 128 | = 32
|
||||||
|
// | transformations (data) | 160 |
|
||||||
|
|
||||||
|
// We will ABI-decode a single struct arg copy with the layout:
|
||||||
|
// | argument | offset |
|
||||||
|
// |--------------------------|---------|
|
||||||
|
// | (arg 1 offset) | 0 | = 32
|
||||||
|
// | inputToken | 32 |
|
||||||
|
// | outputToken | 64 |
|
||||||
|
// | inputTokenAmount | 96 |
|
||||||
|
// | minOutputTokenAmount | 128 |
|
||||||
|
// | transformations (offset) | 160 | = 32
|
||||||
|
// | transformations (data) | 192 |
|
||||||
|
|
||||||
|
ExternalTransformERC20Args memory args;
|
||||||
|
{
|
||||||
|
bytes memory encodedStructArgs = new bytes(state.swapCalldata.length - 4 + 32);
|
||||||
|
// Copy the args data from the original, after the new struct offset prefix.
|
||||||
|
bytes memory fromCallData = state.swapCalldata;
|
||||||
|
assert(fromCallData.length >= 160);
|
||||||
|
uint256 fromMem;
|
||||||
|
uint256 toMem;
|
||||||
|
assembly {
|
||||||
|
// Prefix the calldata with a struct offset,
|
||||||
|
// which points to just one word over.
|
||||||
|
mstore(add(encodedStructArgs, 32), 32)
|
||||||
|
// Copy everything after the selector.
|
||||||
|
fromMem := add(fromCallData, 36)
|
||||||
|
// Start copying after the struct offset.
|
||||||
|
toMem := add(encodedStructArgs, 64)
|
||||||
|
}
|
||||||
|
LibBytesV06.memCopy(toMem, fromMem, fromCallData.length - 4);
|
||||||
|
// Decode call args for `ITransformERC20Feature.transformERC20()` as a struct.
|
||||||
|
args = abi.decode(encodedStructArgs, (ExternalTransformERC20Args));
|
||||||
|
}
|
||||||
|
// Call `ITransformERC20Feature._transformERC20()` (internal variant).
|
||||||
|
return
|
||||||
|
_callSelf(
|
||||||
|
abi.encodeWithSelector(
|
||||||
|
ITransformERC20Feature._transformERC20.selector,
|
||||||
|
ITransformERC20Feature.TransformERC20Args({
|
||||||
|
taker: state.dca.signer, // taker is mtx signer
|
||||||
|
inputToken: args.inputToken,
|
||||||
|
outputToken: args.outputToken,
|
||||||
|
inputTokenAmount: args.inputTokenAmount,
|
||||||
|
minOutputTokenAmount: args.minOutputTokenAmount,
|
||||||
|
transformations: args.transformations,
|
||||||
|
useSelfBalance: false,
|
||||||
|
recipient: state.dca.signer
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @dev Make an arbitrary internal, meta-transaction call.
|
||||||
|
/// Warning: Do not let unadulterated `callData` into this function.
|
||||||
|
function _callSelf(bytes memory callData) private returns (bytes memory returnResult) {
|
||||||
|
bool success;
|
||||||
|
(success, returnResult) = address(this).call(callData);
|
||||||
|
if (!success) {
|
||||||
|
console.logBytes(returnResult);
|
||||||
|
revert("Swap execution failed ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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 "@0x/contracts-erc20/src/IERC20Token.sol";
|
||||||
|
import "../libs/LibSignature.sol";
|
||||||
|
|
||||||
|
/// @dev DCA feature.
|
||||||
|
interface IDCAFeature {
|
||||||
|
struct DCAData {
|
||||||
|
// The token to buy.
|
||||||
|
IERC20Token buyToken;
|
||||||
|
// The token to sell.
|
||||||
|
IERC20Token sellToken;
|
||||||
|
// The amount of sellToken to sell.
|
||||||
|
uint256 sellAmount;
|
||||||
|
// The amount of time between each fill in seconds.
|
||||||
|
uint256 interval;
|
||||||
|
// The number of fills to execute.
|
||||||
|
uint256 numFills;
|
||||||
|
// The start time of the DCA order in Unix epoch seconds.
|
||||||
|
uint256 startTime;
|
||||||
|
// Signer of the DCA. On whose behalf to execute the DCA.
|
||||||
|
address payable signer;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillDCATransaction(
|
||||||
|
DCAData calldata dcaData,
|
||||||
|
LibSignature.Signature calldata signature,
|
||||||
|
bytes calldata swapCallData
|
||||||
|
) external returns (bytes memory returnResult);
|
||||||
|
|
||||||
|
function getDCAHash(DCAData calldata dcaData) external view returns (bytes32 dcaHash);
|
||||||
|
}
|
@ -23,14 +23,12 @@ abstract contract AbstractBridgeAdapter is IBridgeAdapter {
|
|||||||
assembly {
|
assembly {
|
||||||
chainId := chainid()
|
chainId := chainid()
|
||||||
}
|
}
|
||||||
// Skip chain id validation on Ganache (1337), Anvil (31337), Goerli (5), Mumbai (80001), Base Goerli (84531),
|
// Skip chain id validation on Ganache (1337), Anvil (31337), Goerli (5), Mumbai (80001), Base Goerli (84531)
|
||||||
// Sepolia (11155111)
|
|
||||||
bool skipValidation = (chainId == 1337 ||
|
bool skipValidation = (chainId == 1337 ||
|
||||||
chainId == 31337 ||
|
chainId == 31337 ||
|
||||||
chainId == 5 ||
|
chainId == 5 ||
|
||||||
chainId == 80001 ||
|
chainId == 80001 ||
|
||||||
chainId == 84531 ||
|
chainId == 84531);
|
||||||
chainId == 11155111);
|
|
||||||
|
|
||||||
if (chainId != expectedChainId && !skipValidation) {
|
if (chainId != expectedChainId && !skipValidation) {
|
||||||
revert(string(abi.encodePacked(expectedChainName, "BridgeAdapter.constructor: wrong chain ID")));
|
revert(string(abi.encodePacked(expectedChainName, "BridgeAdapter.constructor: wrong chain ID")));
|
||||||
|
@ -28,7 +28,6 @@ import "./mixins/MixinNerve.sol";
|
|||||||
import "./mixins/MixinPlatypus.sol";
|
import "./mixins/MixinPlatypus.sol";
|
||||||
import "./mixins/MixinTraderJoeV2.sol";
|
import "./mixins/MixinTraderJoeV2.sol";
|
||||||
import "./mixins/MixinUniswapV2.sol";
|
import "./mixins/MixinUniswapV2.sol";
|
||||||
import "./mixins/MixinUniswapV3.sol";
|
|
||||||
import "./mixins/MixinWOOFi.sol";
|
import "./mixins/MixinWOOFi.sol";
|
||||||
import "./mixins/MixinZeroExBridge.sol";
|
import "./mixins/MixinZeroExBridge.sol";
|
||||||
|
|
||||||
@ -45,7 +44,6 @@ contract AvalancheBridgeAdapter is
|
|||||||
MixinPlatypus,
|
MixinPlatypus,
|
||||||
MixinTraderJoeV2,
|
MixinTraderJoeV2,
|
||||||
MixinUniswapV2,
|
MixinUniswapV2,
|
||||||
MixinUniswapV3,
|
|
||||||
MixinWOOFi,
|
MixinWOOFi,
|
||||||
MixinZeroExBridge
|
MixinZeroExBridge
|
||||||
{
|
{
|
||||||
@ -74,11 +72,6 @@ contract AvalancheBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeUniswapV2(buyToken, sellAmount, order.bridgeData);
|
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) {
|
} else if (protocolId == BridgeProtocols.NERVE) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
|
@ -22,11 +22,9 @@ import "./mixins/MixinDodo.sol";
|
|||||||
import "./mixins/MixinDodoV2.sol";
|
import "./mixins/MixinDodoV2.sol";
|
||||||
import "./mixins/MixinKyberDmm.sol";
|
import "./mixins/MixinKyberDmm.sol";
|
||||||
import "./mixins/MixinKyberElastic.sol";
|
import "./mixins/MixinKyberElastic.sol";
|
||||||
import "./mixins/MixinMaverickV1.sol";
|
|
||||||
import "./mixins/MixinMooniswap.sol";
|
import "./mixins/MixinMooniswap.sol";
|
||||||
import "./mixins/MixinNerve.sol";
|
import "./mixins/MixinNerve.sol";
|
||||||
import "./mixins/MixinUniswapV2.sol";
|
import "./mixins/MixinUniswapV2.sol";
|
||||||
import "./mixins/MixinUniswapV3.sol";
|
|
||||||
import "./mixins/MixinWOOFi.sol";
|
import "./mixins/MixinWOOFi.sol";
|
||||||
import "./mixins/MixinZeroExBridge.sol";
|
import "./mixins/MixinZeroExBridge.sol";
|
||||||
|
|
||||||
@ -37,11 +35,9 @@ contract BSCBridgeAdapter is
|
|||||||
MixinDodoV2,
|
MixinDodoV2,
|
||||||
MixinKyberDmm,
|
MixinKyberDmm,
|
||||||
MixinKyberElastic,
|
MixinKyberElastic,
|
||||||
MixinMaverickV1,
|
|
||||||
MixinMooniswap,
|
MixinMooniswap,
|
||||||
MixinNerve,
|
MixinNerve,
|
||||||
MixinUniswapV2,
|
MixinUniswapV2,
|
||||||
MixinUniswapV3,
|
|
||||||
MixinWOOFi,
|
MixinWOOFi,
|
||||||
MixinZeroExBridge
|
MixinZeroExBridge
|
||||||
{
|
{
|
||||||
@ -65,11 +61,6 @@ contract BSCBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeUniswapV2(buyToken, sellAmount, order.bridgeData);
|
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) {
|
} else if (protocolId == BridgeProtocols.MOONISWAP) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
@ -105,11 +96,6 @@ contract BSCBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeWOOFi(sellToken, buyToken, sellAmount, order.bridgeData);
|
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) {
|
} else if (protocolId == BridgeProtocols.UNKNOWN) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
|
@ -1,93 +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.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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +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.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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -57,6 +57,4 @@ library BridgeProtocols {
|
|||||||
uint128 internal constant KYBERELASTIC = 33;
|
uint128 internal constant KYBERELASTIC = 33;
|
||||||
uint128 internal constant BARTER = 34;
|
uint128 internal constant BARTER = 34;
|
||||||
uint128 internal constant TRADERJOEV2 = 35;
|
uint128 internal constant TRADERJOEV2 = 35;
|
||||||
uint128 internal constant VELODROMEV2 = 36;
|
|
||||||
uint128 internal constant MAVERICKV1 = 37;
|
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import "./BridgeProtocols.sol";
|
|||||||
import "./mixins/MixinAaveV2.sol";
|
import "./mixins/MixinAaveV2.sol";
|
||||||
import "./mixins/MixinBalancer.sol";
|
import "./mixins/MixinBalancer.sol";
|
||||||
import "./mixins/MixinBalancerV2Batch.sol";
|
import "./mixins/MixinBalancerV2Batch.sol";
|
||||||
|
import "./mixins/MixinBancor.sol";
|
||||||
import "./mixins/MixinBancorV3.sol";
|
import "./mixins/MixinBancorV3.sol";
|
||||||
import "./mixins/MixinBarter.sol";
|
import "./mixins/MixinBarter.sol";
|
||||||
import "./mixins/MixinCompound.sol";
|
import "./mixins/MixinCompound.sol";
|
||||||
@ -32,8 +33,9 @@ import "./mixins/MixinKyberDmm.sol";
|
|||||||
import "./mixins/MixinKyberElastic.sol";
|
import "./mixins/MixinKyberElastic.sol";
|
||||||
import "./mixins/MixinLido.sol";
|
import "./mixins/MixinLido.sol";
|
||||||
import "./mixins/MixinMakerPSM.sol";
|
import "./mixins/MixinMakerPSM.sol";
|
||||||
import "./mixins/MixinMaverickV1.sol";
|
import "./mixins/MixinMStable.sol";
|
||||||
import "./mixins/MixinNerve.sol";
|
import "./mixins/MixinNerve.sol";
|
||||||
|
import "./mixins/MixinShell.sol";
|
||||||
import "./mixins/MixinSynthetix.sol";
|
import "./mixins/MixinSynthetix.sol";
|
||||||
import "./mixins/MixinUniswap.sol";
|
import "./mixins/MixinUniswap.sol";
|
||||||
import "./mixins/MixinUniswapV2.sol";
|
import "./mixins/MixinUniswapV2.sol";
|
||||||
@ -45,6 +47,7 @@ contract EthereumBridgeAdapter is
|
|||||||
MixinAaveV2,
|
MixinAaveV2,
|
||||||
MixinBalancer,
|
MixinBalancer,
|
||||||
MixinBalancerV2Batch,
|
MixinBalancerV2Batch,
|
||||||
|
MixinBancor,
|
||||||
MixinBancorV3,
|
MixinBancorV3,
|
||||||
MixinBarter,
|
MixinBarter,
|
||||||
MixinCompound,
|
MixinCompound,
|
||||||
@ -57,8 +60,9 @@ contract EthereumBridgeAdapter is
|
|||||||
MixinKyberElastic,
|
MixinKyberElastic,
|
||||||
MixinLido,
|
MixinLido,
|
||||||
MixinMakerPSM,
|
MixinMakerPSM,
|
||||||
MixinMaverickV1,
|
MixinMStable,
|
||||||
MixinNerve,
|
MixinNerve,
|
||||||
|
MixinShell,
|
||||||
MixinSynthetix,
|
MixinSynthetix,
|
||||||
MixinUniswap,
|
MixinUniswap,
|
||||||
MixinUniswapV2,
|
MixinUniswapV2,
|
||||||
@ -67,7 +71,15 @@ contract EthereumBridgeAdapter is
|
|||||||
{
|
{
|
||||||
constructor(
|
constructor(
|
||||||
IEtherToken weth
|
IEtherToken weth
|
||||||
) public MixinBancorV3(weth) MixinCompound(weth) MixinCurve(weth) MixinLido(weth) MixinUniswap(weth) {}
|
)
|
||||||
|
public
|
||||||
|
MixinBancor(weth)
|
||||||
|
MixinBancorV3(weth)
|
||||||
|
MixinCompound(weth)
|
||||||
|
MixinCurve(weth)
|
||||||
|
MixinLido(weth)
|
||||||
|
MixinUniswap(weth)
|
||||||
|
{}
|
||||||
|
|
||||||
function _trade(
|
function _trade(
|
||||||
BridgeOrder memory order,
|
BridgeOrder memory order,
|
||||||
@ -117,6 +129,16 @@ contract EthereumBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeMakerPsm(sellToken, buyToken, sellAmount, order.bridgeData);
|
boughtAmount = _tradeMakerPsm(sellToken, buyToken, sellAmount, order.bridgeData);
|
||||||
|
} else if (protocolId == BridgeProtocols.MSTABLE) {
|
||||||
|
if (dryRun) {
|
||||||
|
return (0, true);
|
||||||
|
}
|
||||||
|
boughtAmount = _tradeMStable(sellToken, buyToken, sellAmount, order.bridgeData);
|
||||||
|
} else if (protocolId == BridgeProtocols.SHELL) {
|
||||||
|
if (dryRun) {
|
||||||
|
return (0, true);
|
||||||
|
}
|
||||||
|
boughtAmount = _tradeShell(sellToken, buyToken, sellAmount, order.bridgeData);
|
||||||
} else if (protocolId == BridgeProtocols.DODO) {
|
} else if (protocolId == BridgeProtocols.DODO) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
@ -132,6 +154,11 @@ contract EthereumBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeCryptoCom(buyToken, sellAmount, order.bridgeData);
|
boughtAmount = _tradeCryptoCom(buyToken, sellAmount, order.bridgeData);
|
||||||
|
} else if (protocolId == BridgeProtocols.BANCOR) {
|
||||||
|
if (dryRun) {
|
||||||
|
return (0, true);
|
||||||
|
}
|
||||||
|
boughtAmount = _tradeBancor(buyToken, sellAmount, order.bridgeData);
|
||||||
} else if (protocolId == BridgeProtocols.NERVE) {
|
} else if (protocolId == BridgeProtocols.NERVE) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
@ -177,11 +204,6 @@ contract EthereumBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeBarter(sellToken, sellAmount, order.bridgeData);
|
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) {
|
} else if (protocolId == BridgeProtocols.UNKNOWN) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
|
@ -26,7 +26,6 @@ import "./mixins/MixinNerve.sol";
|
|||||||
import "./mixins/MixinSolidly.sol";
|
import "./mixins/MixinSolidly.sol";
|
||||||
import "./mixins/MixinSynthetix.sol";
|
import "./mixins/MixinSynthetix.sol";
|
||||||
import "./mixins/MixinUniswapV3.sol";
|
import "./mixins/MixinUniswapV3.sol";
|
||||||
import "./mixins/MixinVelodromeV2.sol";
|
|
||||||
import "./mixins/MixinWOOFi.sol";
|
import "./mixins/MixinWOOFi.sol";
|
||||||
import "./mixins/MixinZeroExBridge.sol";
|
import "./mixins/MixinZeroExBridge.sol";
|
||||||
|
|
||||||
@ -40,7 +39,6 @@ contract OptimismBridgeAdapter is
|
|||||||
MixinNerve,
|
MixinNerve,
|
||||||
MixinSynthetix,
|
MixinSynthetix,
|
||||||
MixinUniswapV3,
|
MixinUniswapV3,
|
||||||
MixinVelodromeV2,
|
|
||||||
MixinSolidly,
|
MixinSolidly,
|
||||||
MixinWOOFi,
|
MixinWOOFi,
|
||||||
MixinZeroExBridge
|
MixinZeroExBridge
|
||||||
@ -111,11 +109,6 @@ contract OptimismBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeKyberElastic(sellToken, sellAmount, order.bridgeData);
|
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);
|
emit BridgeFill(order.source, sellToken, buyToken, sellAmount, boughtAmount);
|
||||||
|
@ -26,6 +26,7 @@ import "./mixins/MixinDodo.sol";
|
|||||||
import "./mixins/MixinDodoV2.sol";
|
import "./mixins/MixinDodoV2.sol";
|
||||||
import "./mixins/MixinKyberDmm.sol";
|
import "./mixins/MixinKyberDmm.sol";
|
||||||
import "./mixins/MixinKyberElastic.sol";
|
import "./mixins/MixinKyberElastic.sol";
|
||||||
|
import "./mixins/MixinMStable.sol";
|
||||||
import "./mixins/MixinNerve.sol";
|
import "./mixins/MixinNerve.sol";
|
||||||
import "./mixins/MixinSolidly.sol";
|
import "./mixins/MixinSolidly.sol";
|
||||||
import "./mixins/MixinUniswapV2.sol";
|
import "./mixins/MixinUniswapV2.sol";
|
||||||
@ -44,6 +45,7 @@ contract PolygonBridgeAdapter is
|
|||||||
MixinDodoV2,
|
MixinDodoV2,
|
||||||
MixinKyberDmm,
|
MixinKyberDmm,
|
||||||
MixinKyberElastic,
|
MixinKyberElastic,
|
||||||
|
MixinMStable,
|
||||||
MixinNerve,
|
MixinNerve,
|
||||||
MixinUniswapV2,
|
MixinUniswapV2,
|
||||||
MixinUniswapV3,
|
MixinUniswapV3,
|
||||||
@ -86,6 +88,11 @@ contract PolygonBridgeAdapter is
|
|||||||
return (0, true);
|
return (0, true);
|
||||||
}
|
}
|
||||||
boughtAmount = _tradeBalancerV2Batch(sellAmount, order.bridgeData);
|
boughtAmount = _tradeBalancerV2Batch(sellAmount, order.bridgeData);
|
||||||
|
} else if (protocolId == BridgeProtocols.MSTABLE) {
|
||||||
|
if (dryRun) {
|
||||||
|
return (0, true);
|
||||||
|
}
|
||||||
|
boughtAmount = _tradeMStable(sellToken, buyToken, sellAmount, order.bridgeData);
|
||||||
} else if (protocolId == BridgeProtocols.DODO) {
|
} else if (protocolId == BridgeProtocols.DODO) {
|
||||||
if (dryRun) {
|
if (dryRun) {
|
||||||
return (0, true);
|
return (0, true);
|
||||||
|
@ -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 "@0x/contracts-erc20/src/v06/LibERC20TokenV06.sol";
|
||||||
|
import "@0x/contracts-erc20/src/IERC20Token.sol";
|
||||||
|
import "@0x/contracts-erc20/src/IEtherToken.sol";
|
||||||
|
import "../IBridgeAdapter.sol";
|
||||||
|
|
||||||
|
interface IBancorNetwork {
|
||||||
|
function convertByPath(
|
||||||
|
IERC20Token[] calldata _path,
|
||||||
|
uint256 _amount,
|
||||||
|
uint256 _minReturn,
|
||||||
|
address _beneficiary,
|
||||||
|
address _affiliateAccount,
|
||||||
|
uint256 _affiliateFee
|
||||||
|
) external payable returns (uint256);
|
||||||
|
}
|
||||||
|
|
||||||
|
contract MixinBancor {
|
||||||
|
/// @dev Bancor ETH pseudo-address.
|
||||||
|
IERC20Token public constant BANCOR_ETH_ADDRESS = IERC20Token(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
|
||||||
|
IEtherToken private immutable WETH;
|
||||||
|
|
||||||
|
constructor(IEtherToken weth) public {
|
||||||
|
WETH = weth;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _tradeBancor(
|
||||||
|
IERC20Token buyToken,
|
||||||
|
uint256 sellAmount,
|
||||||
|
bytes memory bridgeData
|
||||||
|
) internal returns (uint256 boughtAmount) {
|
||||||
|
// Decode the bridge data.
|
||||||
|
IBancorNetwork bancorNetworkAddress;
|
||||||
|
IERC20Token[] memory path;
|
||||||
|
{
|
||||||
|
address[] memory _path;
|
||||||
|
(bancorNetworkAddress, _path) = abi.decode(bridgeData, (IBancorNetwork, address[]));
|
||||||
|
// To get around `abi.decode()` not supporting interface array types.
|
||||||
|
assembly {
|
||||||
|
path := _path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require(path.length >= 2, "MixinBancor/PATH_LENGTH_MUST_BE_AT_LEAST_TWO");
|
||||||
|
require(
|
||||||
|
path[path.length - 1] == buyToken || (path[path.length - 1] == BANCOR_ETH_ADDRESS && buyToken == WETH),
|
||||||
|
"MixinBancor/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"
|
||||||
|
);
|
||||||
|
|
||||||
|
uint256 payableAmount = 0;
|
||||||
|
// If it's ETH in the path then withdraw from WETH
|
||||||
|
// The Bancor path will have ETH as the 0xeee address
|
||||||
|
// Bancor expects to be paid in ETH not WETH
|
||||||
|
if (path[0] == BANCOR_ETH_ADDRESS) {
|
||||||
|
WETH.withdraw(sellAmount);
|
||||||
|
payableAmount = sellAmount;
|
||||||
|
} else {
|
||||||
|
// Grant an allowance to the Bancor Network.
|
||||||
|
LibERC20TokenV06.approveIfBelow(path[0], address(bancorNetworkAddress), sellAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the tokens
|
||||||
|
boughtAmount = bancorNetworkAddress.convertByPath{value: payableAmount}(
|
||||||
|
path, // path originating with source token and terminating in destination token
|
||||||
|
sellAmount, // amount of source token to trade
|
||||||
|
1, // minimum amount of destination token expected to receive
|
||||||
|
address(this), // beneficiary
|
||||||
|
address(0), // affiliateAccount; no fee paid
|
||||||
|
0 // affiliateFee; no fee paid
|
||||||
|
);
|
||||||
|
if (path[path.length - 1] == BANCOR_ETH_ADDRESS) {
|
||||||
|
WETH.deposit{value: boughtAmount}();
|
||||||
|
}
|
||||||
|
|
||||||
|
return boughtAmount;
|
||||||
|
}
|
||||||
|
}
|
@ -1,63 +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.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
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,57 @@
|
|||||||
|
// 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 IShell {
|
||||||
|
function originSwap(
|
||||||
|
IERC20Token from,
|
||||||
|
IERC20Token to,
|
||||||
|
uint256 fromAmount,
|
||||||
|
uint256 minTargetAmount,
|
||||||
|
uint256 deadline
|
||||||
|
) external returns (uint256 toAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
contract MixinShell {
|
||||||
|
using LibERC20TokenV06 for IERC20Token;
|
||||||
|
|
||||||
|
function _tradeShell(
|
||||||
|
IERC20Token sellToken,
|
||||||
|
IERC20Token buyToken,
|
||||||
|
uint256 sellAmount,
|
||||||
|
bytes memory bridgeData
|
||||||
|
) internal returns (uint256 boughtAmount) {
|
||||||
|
IShell pool = abi.decode(bridgeData, (IShell));
|
||||||
|
|
||||||
|
// Grant the Shell contract an allowance to sell the first token.
|
||||||
|
IERC20Token(sellToken).approveIfBelow(address(pool), sellAmount);
|
||||||
|
|
||||||
|
boughtAmount = pool.originSwap(
|
||||||
|
sellToken,
|
||||||
|
buyToken,
|
||||||
|
// Sell all tokens we hold.
|
||||||
|
sellAmount,
|
||||||
|
// Minimum buy amount.
|
||||||
|
1,
|
||||||
|
// deadline
|
||||||
|
block.timestamp + 1
|
||||||
|
);
|
||||||
|
return boughtAmount;
|
||||||
|
}
|
||||||
|
}
|
@ -31,18 +31,6 @@ interface IUniswapV3Router {
|
|||||||
function exactInput(ExactInputParams memory params) external payable returns (uint256 amountOut);
|
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 {
|
contract MixinUniswapV3 {
|
||||||
using LibERC20TokenV06 for IERC20Token;
|
using LibERC20TokenV06 for IERC20Token;
|
||||||
|
|
||||||
@ -51,13 +39,12 @@ contract MixinUniswapV3 {
|
|||||||
uint256 sellAmount,
|
uint256 sellAmount,
|
||||||
bytes memory bridgeData
|
bytes memory bridgeData
|
||||||
) internal returns (uint256 boughtAmount) {
|
) internal returns (uint256 boughtAmount) {
|
||||||
(address router, bytes memory path, uint256 routerVersion) = abi.decode(bridgeData, (address, bytes, uint256));
|
(IUniswapV3Router router, bytes memory path) = abi.decode(bridgeData, (IUniswapV3Router, bytes));
|
||||||
|
|
||||||
// Grant the Uniswap router an allowance to sell the sell token.
|
// Grant the Uniswap router an allowance to sell the sell token.
|
||||||
sellToken.approveIfBelow(router, sellAmount);
|
sellToken.approveIfBelow(address(router), sellAmount);
|
||||||
|
|
||||||
if (routerVersion != 2) {
|
boughtAmount = router.exactInput(
|
||||||
boughtAmount = IUniswapV3Router(router).exactInput(
|
|
||||||
IUniswapV3Router.ExactInputParams({
|
IUniswapV3Router.ExactInputParams({
|
||||||
path: path,
|
path: path,
|
||||||
recipient: address(this),
|
recipient: address(this),
|
||||||
@ -66,15 +53,5 @@ contract MixinUniswapV3 {
|
|||||||
amountOutMinimum: 1
|
amountOutMinimum: 1
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
boughtAmount = IUniswapV3Router2(router).exactInput(
|
|
||||||
IUniswapV3Router2.ExactInputParams({
|
|
||||||
path: path,
|
|
||||||
recipient: address(this),
|
|
||||||
amountIn: sellAmount,
|
|
||||||
amountOutMinimum: 1
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,69 +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.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];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contracts-zero-ex",
|
"name": "@0x/contracts-zero-ex",
|
||||||
"version": "0.49.0",
|
"version": "0.44.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -36,9 +36,9 @@
|
|||||||
"typechain": "typechain --target=ethers-v5 --out-dir='typechain-wrappers' './foundry-artifacts/**/*.json'"
|
"typechain": "typechain --target=ethers-v5 --out-dir='typechain-wrappers' './foundry-artifacts/**/*.json'"
|
||||||
},
|
},
|
||||||
"config": {
|
"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,BaseGoerliBridgeAdapter,BaseBridgeAdapter,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,BSCBridgeAdapter,CeloBridgeAdapter,EthereumBridgeAdapter,FantomBridgeAdapter,OptimismBridgeAdapter,PolygonBridgeAdapter,MetaTransactionsFeatureV2",
|
||||||
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
|
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
|
||||||
"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"
|
"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|MixinBancor|MixinBancorV3|MixinCompound|MixinCryptoCom|MixinCurve|MixinCurveV2|MixinDodo|MixinDodoV2|MixinGMX|MixinKyberDmm|MixinLido|MixinMStable|MixinMakerPSM|MixinMooniswap|MixinNerve|MixinPlatypus|MixinShell|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": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -51,10 +51,10 @@
|
|||||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex",
|
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0x/abi-gen": "^5.8.5",
|
"@0x/abi-gen": "^5.8.5",
|
||||||
"@0x/contract-addresses": "^8.13.0",
|
"@0x/contract-addresses": "^8.7.0",
|
||||||
"@0x/contracts-erc20": "^3.3.57",
|
"@0x/contracts-erc20": "^3.3.57",
|
||||||
"@0x/contracts-gen": "^2.0.50",
|
"@0x/contracts-gen": "^2.0.50",
|
||||||
"@0x/contracts-test-utils": "^5.4.60",
|
"@0x/contracts-test-utils": "^5.4.54",
|
||||||
"@0x/dev-utils": "^5.0.2",
|
"@0x/dev-utils": "^5.0.2",
|
||||||
"@0x/order-utils": "^10.4.28",
|
"@0x/order-utils": "^10.4.28",
|
||||||
"@0x/sol-compiler": "^4.8.2",
|
"@0x/sol-compiler": "^4.8.2",
|
||||||
@ -80,7 +80,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0x/base-contract": "^7.0.0",
|
"@0x/base-contract": "^7.0.0",
|
||||||
"@0x/protocol-utils": "^11.24.2",
|
"@0x/protocol-utils": "^11.22.2",
|
||||||
"@0x/subproviders": "^8.0.1",
|
"@0x/subproviders": "^8.0.1",
|
||||||
"@0x/types": "^3.3.7",
|
"@0x/types": "^3.3.7",
|
||||||
"@0x/typescript-typings": "^5.3.1",
|
"@0x/typescript-typings": "^5.3.1",
|
||||||
|
@ -7,8 +7,6 @@ import { ContractArtifact } from 'ethereum-types';
|
|||||||
|
|
||||||
import * as AffiliateFeeTransformer from '../generated-artifacts/AffiliateFeeTransformer.json';
|
import * as AffiliateFeeTransformer from '../generated-artifacts/AffiliateFeeTransformer.json';
|
||||||
import * as AvalancheBridgeAdapter from '../generated-artifacts/AvalancheBridgeAdapter.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 BatchFillNativeOrdersFeature from '../generated-artifacts/BatchFillNativeOrdersFeature.json';
|
||||||
import * as BSCBridgeAdapter from '../generated-artifacts/BSCBridgeAdapter.json';
|
import * as BSCBridgeAdapter from '../generated-artifacts/BSCBridgeAdapter.json';
|
||||||
import * as CeloBridgeAdapter from '../generated-artifacts/CeloBridgeAdapter.json';
|
import * as CeloBridgeAdapter from '../generated-artifacts/CeloBridgeAdapter.json';
|
||||||
@ -81,8 +79,6 @@ export const artifacts = {
|
|||||||
OtcOrdersFeature: OtcOrdersFeature as ContractArtifact,
|
OtcOrdersFeature: OtcOrdersFeature as ContractArtifact,
|
||||||
IOtcOrdersFeature: IOtcOrdersFeature as ContractArtifact,
|
IOtcOrdersFeature: IOtcOrdersFeature as ContractArtifact,
|
||||||
AvalancheBridgeAdapter: AvalancheBridgeAdapter as ContractArtifact,
|
AvalancheBridgeAdapter: AvalancheBridgeAdapter as ContractArtifact,
|
||||||
BaseGoerliBridgeAdapter: BaseGoerliBridgeAdapter as ContractArtifact,
|
|
||||||
BaseBridgeAdapter: BaseBridgeAdapter as ContractArtifact,
|
|
||||||
BSCBridgeAdapter: BSCBridgeAdapter as ContractArtifact,
|
BSCBridgeAdapter: BSCBridgeAdapter as ContractArtifact,
|
||||||
CeloBridgeAdapter: CeloBridgeAdapter as ContractArtifact,
|
CeloBridgeAdapter: CeloBridgeAdapter as ContractArtifact,
|
||||||
EthereumBridgeAdapter: EthereumBridgeAdapter as ContractArtifact,
|
EthereumBridgeAdapter: EthereumBridgeAdapter as ContractArtifact,
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
export * from '../generated-wrappers/affiliate_fee_transformer';
|
export * from '../generated-wrappers/affiliate_fee_transformer';
|
||||||
export * from '../generated-wrappers/avalanche_bridge_adapter';
|
export * from '../generated-wrappers/avalanche_bridge_adapter';
|
||||||
export * from '../generated-wrappers/b_s_c_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/batch_fill_native_orders_feature';
|
||||||
export * from '../generated-wrappers/celo_bridge_adapter';
|
export * from '../generated-wrappers/celo_bridge_adapter';
|
||||||
export * from '../generated-wrappers/curve_liquidity_provider';
|
export * from '../generated-wrappers/curve_liquidity_provider';
|
||||||
|
@ -9,8 +9,6 @@ import * as AbstractBridgeAdapter from '../test/generated-artifacts/AbstractBrid
|
|||||||
import * as AffiliateFeeTransformer from '../test/generated-artifacts/AffiliateFeeTransformer.json';
|
import * as AffiliateFeeTransformer from '../test/generated-artifacts/AffiliateFeeTransformer.json';
|
||||||
import * as ArbitrumBridgeAdapter from '../test/generated-artifacts/ArbitrumBridgeAdapter.json';
|
import * as ArbitrumBridgeAdapter from '../test/generated-artifacts/ArbitrumBridgeAdapter.json';
|
||||||
import * as AvalancheBridgeAdapter from '../test/generated-artifacts/AvalancheBridgeAdapter.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 BatchFillNativeOrdersFeature from '../test/generated-artifacts/BatchFillNativeOrdersFeature.json';
|
||||||
import * as BootstrapFeature from '../test/generated-artifacts/BootstrapFeature.json';
|
import * as BootstrapFeature from '../test/generated-artifacts/BootstrapFeature.json';
|
||||||
import * as BridgeProtocols from '../test/generated-artifacts/BridgeProtocols.json';
|
import * as BridgeProtocols from '../test/generated-artifacts/BridgeProtocols.json';
|
||||||
@ -111,6 +109,7 @@ import * as MetaTransactionsFeatureV2 from '../test/generated-artifacts/MetaTran
|
|||||||
import * as MixinAaveV2 from '../test/generated-artifacts/MixinAaveV2.json';
|
import * as MixinAaveV2 from '../test/generated-artifacts/MixinAaveV2.json';
|
||||||
import * as MixinBalancer from '../test/generated-artifacts/MixinBalancer.json';
|
import * as MixinBalancer from '../test/generated-artifacts/MixinBalancer.json';
|
||||||
import * as MixinBalancerV2Batch from '../test/generated-artifacts/MixinBalancerV2Batch.json';
|
import * as MixinBalancerV2Batch from '../test/generated-artifacts/MixinBalancerV2Batch.json';
|
||||||
|
import * as MixinBancor from '../test/generated-artifacts/MixinBancor.json';
|
||||||
import * as MixinBancorV3 from '../test/generated-artifacts/MixinBancorV3.json';
|
import * as MixinBancorV3 from '../test/generated-artifacts/MixinBancorV3.json';
|
||||||
import * as MixinCompound from '../test/generated-artifacts/MixinCompound.json';
|
import * as MixinCompound from '../test/generated-artifacts/MixinCompound.json';
|
||||||
import * as MixinCryptoCom from '../test/generated-artifacts/MixinCryptoCom.json';
|
import * as MixinCryptoCom from '../test/generated-artifacts/MixinCryptoCom.json';
|
||||||
@ -123,8 +122,10 @@ import * as MixinKyberDmm from '../test/generated-artifacts/MixinKyberDmm.json';
|
|||||||
import * as MixinLido from '../test/generated-artifacts/MixinLido.json';
|
import * as MixinLido from '../test/generated-artifacts/MixinLido.json';
|
||||||
import * as MixinMakerPSM from '../test/generated-artifacts/MixinMakerPSM.json';
|
import * as MixinMakerPSM from '../test/generated-artifacts/MixinMakerPSM.json';
|
||||||
import * as MixinMooniswap from '../test/generated-artifacts/MixinMooniswap.json';
|
import * as MixinMooniswap from '../test/generated-artifacts/MixinMooniswap.json';
|
||||||
|
import * as MixinMStable from '../test/generated-artifacts/MixinMStable.json';
|
||||||
import * as MixinNerve from '../test/generated-artifacts/MixinNerve.json';
|
import * as MixinNerve from '../test/generated-artifacts/MixinNerve.json';
|
||||||
import * as MixinPlatypus from '../test/generated-artifacts/MixinPlatypus.json';
|
import * as MixinPlatypus from '../test/generated-artifacts/MixinPlatypus.json';
|
||||||
|
import * as MixinShell from '../test/generated-artifacts/MixinShell.json';
|
||||||
import * as MixinSolidly from '../test/generated-artifacts/MixinSolidly.json';
|
import * as MixinSolidly from '../test/generated-artifacts/MixinSolidly.json';
|
||||||
import * as MixinSynthetix from '../test/generated-artifacts/MixinSynthetix.json';
|
import * as MixinSynthetix from '../test/generated-artifacts/MixinSynthetix.json';
|
||||||
import * as MixinUniswap from '../test/generated-artifacts/MixinUniswap.json';
|
import * as MixinUniswap from '../test/generated-artifacts/MixinUniswap.json';
|
||||||
@ -321,8 +322,6 @@ export const artifacts = {
|
|||||||
ArbitrumBridgeAdapter: ArbitrumBridgeAdapter as ContractArtifact,
|
ArbitrumBridgeAdapter: ArbitrumBridgeAdapter as ContractArtifact,
|
||||||
AvalancheBridgeAdapter: AvalancheBridgeAdapter as ContractArtifact,
|
AvalancheBridgeAdapter: AvalancheBridgeAdapter as ContractArtifact,
|
||||||
BSCBridgeAdapter: BSCBridgeAdapter as ContractArtifact,
|
BSCBridgeAdapter: BSCBridgeAdapter as ContractArtifact,
|
||||||
BaseBridgeAdapter: BaseBridgeAdapter as ContractArtifact,
|
|
||||||
BaseGoerliBridgeAdapter: BaseGoerliBridgeAdapter as ContractArtifact,
|
|
||||||
BridgeProtocols: BridgeProtocols as ContractArtifact,
|
BridgeProtocols: BridgeProtocols as ContractArtifact,
|
||||||
CeloBridgeAdapter: CeloBridgeAdapter as ContractArtifact,
|
CeloBridgeAdapter: CeloBridgeAdapter as ContractArtifact,
|
||||||
EthereumBridgeAdapter: EthereumBridgeAdapter as ContractArtifact,
|
EthereumBridgeAdapter: EthereumBridgeAdapter as ContractArtifact,
|
||||||
@ -333,6 +332,7 @@ export const artifacts = {
|
|||||||
MixinAaveV2: MixinAaveV2 as ContractArtifact,
|
MixinAaveV2: MixinAaveV2 as ContractArtifact,
|
||||||
MixinBalancer: MixinBalancer as ContractArtifact,
|
MixinBalancer: MixinBalancer as ContractArtifact,
|
||||||
MixinBalancerV2Batch: MixinBalancerV2Batch as ContractArtifact,
|
MixinBalancerV2Batch: MixinBalancerV2Batch as ContractArtifact,
|
||||||
|
MixinBancor: MixinBancor as ContractArtifact,
|
||||||
MixinBancorV3: MixinBancorV3 as ContractArtifact,
|
MixinBancorV3: MixinBancorV3 as ContractArtifact,
|
||||||
MixinCompound: MixinCompound as ContractArtifact,
|
MixinCompound: MixinCompound as ContractArtifact,
|
||||||
MixinCryptoCom: MixinCryptoCom as ContractArtifact,
|
MixinCryptoCom: MixinCryptoCom as ContractArtifact,
|
||||||
@ -343,10 +343,12 @@ export const artifacts = {
|
|||||||
MixinGMX: MixinGMX as ContractArtifact,
|
MixinGMX: MixinGMX as ContractArtifact,
|
||||||
MixinKyberDmm: MixinKyberDmm as ContractArtifact,
|
MixinKyberDmm: MixinKyberDmm as ContractArtifact,
|
||||||
MixinLido: MixinLido as ContractArtifact,
|
MixinLido: MixinLido as ContractArtifact,
|
||||||
|
MixinMStable: MixinMStable as ContractArtifact,
|
||||||
MixinMakerPSM: MixinMakerPSM as ContractArtifact,
|
MixinMakerPSM: MixinMakerPSM as ContractArtifact,
|
||||||
MixinMooniswap: MixinMooniswap as ContractArtifact,
|
MixinMooniswap: MixinMooniswap as ContractArtifact,
|
||||||
MixinNerve: MixinNerve as ContractArtifact,
|
MixinNerve: MixinNerve as ContractArtifact,
|
||||||
MixinPlatypus: MixinPlatypus as ContractArtifact,
|
MixinPlatypus: MixinPlatypus as ContractArtifact,
|
||||||
|
MixinShell: MixinShell as ContractArtifact,
|
||||||
MixinSolidly: MixinSolidly as ContractArtifact,
|
MixinSolidly: MixinSolidly as ContractArtifact,
|
||||||
MixinSynthetix: MixinSynthetix as ContractArtifact,
|
MixinSynthetix: MixinSynthetix as ContractArtifact,
|
||||||
MixinUniswap: MixinUniswap as ContractArtifact,
|
MixinUniswap: MixinUniswap as ContractArtifact,
|
||||||
|
@ -8,8 +8,6 @@ export * from '../test/generated-wrappers/affiliate_fee_transformer';
|
|||||||
export * from '../test/generated-wrappers/arbitrum_bridge_adapter';
|
export * from '../test/generated-wrappers/arbitrum_bridge_adapter';
|
||||||
export * from '../test/generated-wrappers/avalanche_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/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/batch_fill_native_orders_feature';
|
||||||
export * from '../test/generated-wrappers/bootstrap_feature';
|
export * from '../test/generated-wrappers/bootstrap_feature';
|
||||||
export * from '../test/generated-wrappers/bridge_protocols';
|
export * from '../test/generated-wrappers/bridge_protocols';
|
||||||
@ -109,6 +107,7 @@ export * from '../test/generated-wrappers/meta_transactions_feature_v2';
|
|||||||
export * from '../test/generated-wrappers/mixin_aave_v2';
|
export * from '../test/generated-wrappers/mixin_aave_v2';
|
||||||
export * from '../test/generated-wrappers/mixin_balancer';
|
export * from '../test/generated-wrappers/mixin_balancer';
|
||||||
export * from '../test/generated-wrappers/mixin_balancer_v2_batch';
|
export * from '../test/generated-wrappers/mixin_balancer_v2_batch';
|
||||||
|
export * from '../test/generated-wrappers/mixin_bancor';
|
||||||
export * from '../test/generated-wrappers/mixin_bancor_v3';
|
export * from '../test/generated-wrappers/mixin_bancor_v3';
|
||||||
export * from '../test/generated-wrappers/mixin_compound';
|
export * from '../test/generated-wrappers/mixin_compound';
|
||||||
export * from '../test/generated-wrappers/mixin_crypto_com';
|
export * from '../test/generated-wrappers/mixin_crypto_com';
|
||||||
@ -119,10 +118,12 @@ export * from '../test/generated-wrappers/mixin_dodo_v2';
|
|||||||
export * from '../test/generated-wrappers/mixin_g_m_x';
|
export * from '../test/generated-wrappers/mixin_g_m_x';
|
||||||
export * from '../test/generated-wrappers/mixin_kyber_dmm';
|
export * from '../test/generated-wrappers/mixin_kyber_dmm';
|
||||||
export * from '../test/generated-wrappers/mixin_lido';
|
export * from '../test/generated-wrappers/mixin_lido';
|
||||||
|
export * from '../test/generated-wrappers/mixin_m_stable';
|
||||||
export * from '../test/generated-wrappers/mixin_maker_p_s_m';
|
export * from '../test/generated-wrappers/mixin_maker_p_s_m';
|
||||||
export * from '../test/generated-wrappers/mixin_mooniswap';
|
export * from '../test/generated-wrappers/mixin_mooniswap';
|
||||||
export * from '../test/generated-wrappers/mixin_nerve';
|
export * from '../test/generated-wrappers/mixin_nerve';
|
||||||
export * from '../test/generated-wrappers/mixin_platypus';
|
export * from '../test/generated-wrappers/mixin_platypus';
|
||||||
|
export * from '../test/generated-wrappers/mixin_shell';
|
||||||
export * from '../test/generated-wrappers/mixin_solidly';
|
export * from '../test/generated-wrappers/mixin_solidly';
|
||||||
export * from '../test/generated-wrappers/mixin_synthetix';
|
export * from '../test/generated-wrappers/mixin_synthetix';
|
||||||
export * from '../test/generated-wrappers/mixin_uniswap';
|
export * from '../test/generated-wrappers/mixin_uniswap';
|
||||||
|
115
contracts/zero-ex/tests/DCATest.t.sol
Normal file
115
contracts/zero-ex/tests/DCATest.t.sol
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
// 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 "forge-std/StdUtils.sol";
|
||||||
|
import "./utils/LocalTest.sol";
|
||||||
|
import "../contracts/src/features/DCAFeature.sol";
|
||||||
|
import "../contracts/src/features/interfaces/IDCAFeature.sol";
|
||||||
|
import "@0x/contracts-erc20/src/IERC20Token.sol";
|
||||||
|
import "../contracts/src/fixins/FixinEIP712.sol";
|
||||||
|
import "../contracts/src/features/libs/LibSignature.sol";
|
||||||
|
|
||||||
|
contract DCAFeatureTest is LocalTest {
|
||||||
|
function test_validateSignature() public {
|
||||||
|
uint256 signerPrivateKey = 0xA11CE;
|
||||||
|
address signer = vm.addr(signerPrivateKey);
|
||||||
|
|
||||||
|
IDCAFeature.DCAData memory dcaData = IDCAFeature.DCAData({
|
||||||
|
buyToken: IERC20Token(address(0)),
|
||||||
|
sellToken: IERC20Token(address(0)),
|
||||||
|
sellAmount: 100,
|
||||||
|
interval: 100,
|
||||||
|
numFills: 8,
|
||||||
|
startTime: block.timestamp,
|
||||||
|
signer: payable(signer)
|
||||||
|
});
|
||||||
|
|
||||||
|
bytes32 dcaHash = zeroExDeployed.features.dcaFeature.getDCAHash(dcaData);
|
||||||
|
(uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, dcaHash);
|
||||||
|
|
||||||
|
LibSignature.Signature memory signature = LibSignature.Signature({
|
||||||
|
signatureType: LibSignature.SignatureType.EIP712,
|
||||||
|
v: v,
|
||||||
|
r: r,
|
||||||
|
s: s
|
||||||
|
});
|
||||||
|
|
||||||
|
assertEq(LibSignature.getSignerOfHash(dcaHash, signature), dcaData.signer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_checkNumFilled() public {
|
||||||
|
// check that if user signed order to execute order two times, we expect
|
||||||
|
// a revert on the third try
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_timeWindow() public {
|
||||||
|
// spoof the blockchain timestmap and expect a revert if we're outside
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_dcaSwap() public {
|
||||||
|
uint256 signerPrivateKey = 0xA11CE;
|
||||||
|
address signer = vm.addr(signerPrivateKey);
|
||||||
|
|
||||||
|
IDCAFeature.DCAData memory dcaData = IDCAFeature.DCAData({
|
||||||
|
// buyToken: IERC20Token(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2),
|
||||||
|
// sellToken: IERC20Token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48),
|
||||||
|
buyToken: zrx,
|
||||||
|
sellToken: dai,
|
||||||
|
sellAmount: 100,
|
||||||
|
interval: 600,
|
||||||
|
numFills: 12,
|
||||||
|
startTime: block.timestamp,
|
||||||
|
signer: payable(signer)
|
||||||
|
});
|
||||||
|
vm.warp(600); // warp the blockchain 10 minutes into the future
|
||||||
|
|
||||||
|
bytes32 dcaHash = zeroExDeployed.features.dcaFeature.getDCAHash(dcaData);
|
||||||
|
(uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, dcaHash);
|
||||||
|
|
||||||
|
LibSignature.Signature memory signature = LibSignature.Signature({
|
||||||
|
signatureType: LibSignature.SignatureType.EIP712,
|
||||||
|
v: v,
|
||||||
|
r: r,
|
||||||
|
s: s
|
||||||
|
});
|
||||||
|
|
||||||
|
ITransformERC20Feature.Transformation[] memory transformations = new ITransformERC20Feature.Transformation[](1);
|
||||||
|
transformations[0] = ITransformERC20Feature.Transformation(
|
||||||
|
uint32(transformerNonce),
|
||||||
|
abi.encode(address(dcaData.sellToken), address(dcaData.buyToken), 0, 1e18, 0)
|
||||||
|
);
|
||||||
|
console.log(transformerNonce);
|
||||||
|
|
||||||
|
_mintTo(address(dcaData.sellToken), signer, 1e18);
|
||||||
|
vm.prank(signer);
|
||||||
|
dcaData.sellToken.approve(address(zeroExDeployed.zeroEx), 1e18);
|
||||||
|
|
||||||
|
bytes memory swapCalldata = abi.encodeWithSelector(
|
||||||
|
zeroExDeployed.zeroEx.transformERC20.selector,
|
||||||
|
dcaData.sellToken,
|
||||||
|
dcaData.buyToken,
|
||||||
|
1e18,
|
||||||
|
1e18,
|
||||||
|
transformations
|
||||||
|
);
|
||||||
|
|
||||||
|
assertEq(dai.balanceOf(signer), 1e18);
|
||||||
|
|
||||||
|
IDCAFeature(address(zeroExDeployed.zeroEx)).fillDCATransaction(dcaData, signature, swapCalldata);
|
||||||
|
}
|
||||||
|
}
|
@ -263,7 +263,6 @@ contract MetaTransactionTest is LocalTest {
|
|||||||
function test_transformERC20() external {
|
function test_transformERC20() external {
|
||||||
bytes memory transformCallData = _transformERC20Call(zrx, dai, USER_ADDRESS);
|
bytes memory transformCallData = _transformERC20Call(zrx, dai, USER_ADDRESS);
|
||||||
IMetaTransactionsFeatureV2.MetaTransactionDataV2 memory mtxData = _getMetaTransaction(transformCallData);
|
IMetaTransactionsFeatureV2.MetaTransactionDataV2 memory mtxData = _getMetaTransaction(transformCallData);
|
||||||
LibSignature.Signature memory sig = _mtxSignature(mtxData);
|
|
||||||
|
|
||||||
assertEq(dai.balanceOf(USER_ADDRESS), 1e18);
|
assertEq(dai.balanceOf(USER_ADDRESS), 1e18);
|
||||||
vm.expectEmit(true, false, false, true);
|
vm.expectEmit(true, false, false, true);
|
||||||
@ -274,8 +273,10 @@ contract MetaTransactionTest is LocalTest {
|
|||||||
address(this)
|
address(this)
|
||||||
);
|
);
|
||||||
|
|
||||||
IMetaTransactionsFeatureV2(address(zeroExDeployed.zeroEx)).executeMetaTransactionV2(mtxData, sig);
|
IMetaTransactionsFeatureV2(address(zeroExDeployed.zeroEx)).executeMetaTransactionV2(
|
||||||
|
mtxData,
|
||||||
|
_mtxSignature(mtxData)
|
||||||
|
);
|
||||||
assertEq(zrx.balanceOf(USER_ADDRESS), 1e18);
|
assertEq(zrx.balanceOf(USER_ADDRESS), 1e18);
|
||||||
assertEq(dai.balanceOf(USER_ADDRESS), 0);
|
assertEq(dai.balanceOf(USER_ADDRESS), 0);
|
||||||
assertEq(weth.balanceOf(address(this)), 1);
|
assertEq(weth.balanceOf(address(this)), 1);
|
||||||
@ -284,7 +285,6 @@ contract MetaTransactionTest is LocalTest {
|
|||||||
function test_rfqOrder() external {
|
function test_rfqOrder() external {
|
||||||
bytes memory callData = _makeTestRfqOrder(zrx, dai, signerAddress, USER_ADDRESS, signerKey);
|
bytes memory callData = _makeTestRfqOrder(zrx, dai, signerAddress, USER_ADDRESS, signerKey);
|
||||||
IMetaTransactionsFeatureV2.MetaTransactionDataV2 memory mtxData = _getMetaTransaction(callData);
|
IMetaTransactionsFeatureV2.MetaTransactionDataV2 memory mtxData = _getMetaTransaction(callData);
|
||||||
LibSignature.Signature memory sig = _mtxSignature(mtxData);
|
|
||||||
|
|
||||||
assertEq(dai.balanceOf(USER_ADDRESS), 1e18);
|
assertEq(dai.balanceOf(USER_ADDRESS), 1e18);
|
||||||
vm.expectEmit(true, false, false, true);
|
vm.expectEmit(true, false, false, true);
|
||||||
@ -295,7 +295,10 @@ contract MetaTransactionTest is LocalTest {
|
|||||||
address(this)
|
address(this)
|
||||||
);
|
);
|
||||||
|
|
||||||
IMetaTransactionsFeatureV2(address(zeroExDeployed.zeroEx)).executeMetaTransactionV2(mtxData, sig);
|
IMetaTransactionsFeatureV2(address(zeroExDeployed.zeroEx)).executeMetaTransactionV2(
|
||||||
|
mtxData,
|
||||||
|
_mtxSignature(mtxData)
|
||||||
|
);
|
||||||
|
|
||||||
assertEq(zrx.balanceOf(signerAddress), 0);
|
assertEq(zrx.balanceOf(signerAddress), 0);
|
||||||
assertEq(zrx.balanceOf(USER_ADDRESS), 1e18);
|
assertEq(zrx.balanceOf(USER_ADDRESS), 1e18);
|
||||||
@ -307,7 +310,6 @@ contract MetaTransactionTest is LocalTest {
|
|||||||
function test_fillLimitOrder() external {
|
function test_fillLimitOrder() external {
|
||||||
bytes memory callData = _makeTestLimitOrder(zrx, dai, signerAddress, USER_ADDRESS, signerKey);
|
bytes memory callData = _makeTestLimitOrder(zrx, dai, signerAddress, USER_ADDRESS, signerKey);
|
||||||
IMetaTransactionsFeatureV2.MetaTransactionDataV2 memory mtxData = _getMetaTransaction(callData);
|
IMetaTransactionsFeatureV2.MetaTransactionDataV2 memory mtxData = _getMetaTransaction(callData);
|
||||||
LibSignature.Signature memory sig = _mtxSignature(mtxData);
|
|
||||||
|
|
||||||
assertEq(dai.balanceOf(USER_ADDRESS), 1e18);
|
assertEq(dai.balanceOf(USER_ADDRESS), 1e18);
|
||||||
vm.expectEmit(true, false, false, true);
|
vm.expectEmit(true, false, false, true);
|
||||||
@ -318,7 +320,10 @@ contract MetaTransactionTest is LocalTest {
|
|||||||
address(this)
|
address(this)
|
||||||
);
|
);
|
||||||
|
|
||||||
IMetaTransactionsFeatureV2(address(zeroExDeployed.zeroEx)).executeMetaTransactionV2(mtxData, sig);
|
IMetaTransactionsFeatureV2(address(zeroExDeployed.zeroEx)).executeMetaTransactionV2(
|
||||||
|
mtxData,
|
||||||
|
_mtxSignature(mtxData)
|
||||||
|
);
|
||||||
|
|
||||||
assertEq(zrx.balanceOf(signerAddress), 0);
|
assertEq(zrx.balanceOf(signerAddress), 0);
|
||||||
assertEq(zrx.balanceOf(USER_ADDRESS), 1e18);
|
assertEq(zrx.balanceOf(USER_ADDRESS), 1e18);
|
||||||
|
@ -1,39 +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.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)));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +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.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)));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +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.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)));
|
|
||||||
}
|
|
||||||
}
|
|
@ -29,6 +29,7 @@ import "src/features/TransformERC20Feature.sol";
|
|||||||
import "src/features/OtcOrdersFeature.sol";
|
import "src/features/OtcOrdersFeature.sol";
|
||||||
import "src/features/MetaTransactionsFeature.sol";
|
import "src/features/MetaTransactionsFeature.sol";
|
||||||
import "src/features/MetaTransactionsFeatureV2.sol";
|
import "src/features/MetaTransactionsFeatureV2.sol";
|
||||||
|
import "src/features/DCAFeature.sol";
|
||||||
import "src/features/nft_orders/ERC1155OrdersFeature.sol";
|
import "src/features/nft_orders/ERC1155OrdersFeature.sol";
|
||||||
import "src/features/nft_orders/ERC721OrdersFeature.sol";
|
import "src/features/nft_orders/ERC721OrdersFeature.sol";
|
||||||
import "src/features/UniswapFeature.sol";
|
import "src/features/UniswapFeature.sol";
|
||||||
@ -70,6 +71,7 @@ contract DeployZeroEx is Test {
|
|||||||
TransformERC20Feature transformERC20Feature;
|
TransformERC20Feature transformERC20Feature;
|
||||||
MetaTransactionsFeature metaTransactionsFeature;
|
MetaTransactionsFeature metaTransactionsFeature;
|
||||||
MetaTransactionsFeatureV2 metaTransactionsFeatureV2;
|
MetaTransactionsFeatureV2 metaTransactionsFeatureV2;
|
||||||
|
DCAFeature dcaFeature;
|
||||||
ERC1155OrdersFeature erc1155OrdersFeature;
|
ERC1155OrdersFeature erc1155OrdersFeature;
|
||||||
ERC721OrdersFeature erc721OrdersFeature;
|
ERC721OrdersFeature erc721OrdersFeature;
|
||||||
MultiplexFeature multiplexFeature;
|
MultiplexFeature multiplexFeature;
|
||||||
@ -139,6 +141,7 @@ contract DeployZeroEx is Test {
|
|||||||
"MetaTransactionsFeatureV2",
|
"MetaTransactionsFeatureV2",
|
||||||
address(ZERO_EX_DEPLOYED.features.metaTransactionsFeatureV2)
|
address(ZERO_EX_DEPLOYED.features.metaTransactionsFeatureV2)
|
||||||
);
|
);
|
||||||
|
emit log_named_address("DCAFeature", address(ZERO_EX_DEPLOYED.features.dcaFeature));
|
||||||
emit log_named_address("ERC1155OrdersFeature", address(ZERO_EX_DEPLOYED.features.erc1155OrdersFeature));
|
emit log_named_address("ERC1155OrdersFeature", address(ZERO_EX_DEPLOYED.features.erc1155OrdersFeature));
|
||||||
emit log_named_address("ERC721OrdersFeature", address(ZERO_EX_DEPLOYED.features.erc721OrdersFeature));
|
emit log_named_address("ERC721OrdersFeature", address(ZERO_EX_DEPLOYED.features.erc721OrdersFeature));
|
||||||
emit log_named_address("TransformERC20Feature", address(ZERO_EX_DEPLOYED.features.transformERC20Feature));
|
emit log_named_address("TransformERC20Feature", address(ZERO_EX_DEPLOYED.features.transformERC20Feature));
|
||||||
@ -229,6 +232,8 @@ contract DeployZeroEx is Test {
|
|||||||
ZERO_EX_DEPLOY_CONFIG.sushiswapPairInitCodeHash
|
ZERO_EX_DEPLOY_CONFIG.sushiswapPairInitCodeHash
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ZERO_EX_DEPLOYED.features.dcaFeature = new DCAFeature(address(ZERO_EX));
|
||||||
|
|
||||||
initialMigration.initializeZeroEx(
|
initialMigration.initializeZeroEx(
|
||||||
payable(address(this)),
|
payable(address(this)),
|
||||||
ZERO_EX,
|
ZERO_EX,
|
||||||
@ -285,6 +290,11 @@ contract DeployZeroEx is Test {
|
|||||||
abi.encodeWithSelector(MetaTransactionsFeatureV2.migrate.selector),
|
abi.encodeWithSelector(MetaTransactionsFeatureV2.migrate.selector),
|
||||||
address(this)
|
address(this)
|
||||||
);
|
);
|
||||||
|
IZERO_EX.migrate(
|
||||||
|
address(ZERO_EX_DEPLOYED.features.dcaFeature),
|
||||||
|
abi.encodeWithSelector(DCAFeature.migrate.selector),
|
||||||
|
address(this)
|
||||||
|
);
|
||||||
IZERO_EX.migrate(
|
IZERO_EX.migrate(
|
||||||
address(ZERO_EX_DEPLOYED.features.erc1155OrdersFeature),
|
address(ZERO_EX_DEPLOYED.features.erc1155OrdersFeature),
|
||||||
abi.encodeWithSelector(ERC1155OrdersFeature.migrate.selector),
|
abi.encodeWithSelector(ERC1155OrdersFeature.migrate.selector),
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
"generated-artifacts/AffiliateFeeTransformer.json",
|
"generated-artifacts/AffiliateFeeTransformer.json",
|
||||||
"generated-artifacts/AvalancheBridgeAdapter.json",
|
"generated-artifacts/AvalancheBridgeAdapter.json",
|
||||||
"generated-artifacts/BSCBridgeAdapter.json",
|
"generated-artifacts/BSCBridgeAdapter.json",
|
||||||
"generated-artifacts/BaseBridgeAdapter.json",
|
|
||||||
"generated-artifacts/BaseGoerliBridgeAdapter.json",
|
|
||||||
"generated-artifacts/BatchFillNativeOrdersFeature.json",
|
"generated-artifacts/BatchFillNativeOrdersFeature.json",
|
||||||
"generated-artifacts/CeloBridgeAdapter.json",
|
"generated-artifacts/CeloBridgeAdapter.json",
|
||||||
"generated-artifacts/CurveLiquidityProvider.json",
|
"generated-artifacts/CurveLiquidityProvider.json",
|
||||||
@ -50,8 +48,6 @@
|
|||||||
"test/generated-artifacts/ArbitrumBridgeAdapter.json",
|
"test/generated-artifacts/ArbitrumBridgeAdapter.json",
|
||||||
"test/generated-artifacts/AvalancheBridgeAdapter.json",
|
"test/generated-artifacts/AvalancheBridgeAdapter.json",
|
||||||
"test/generated-artifacts/BSCBridgeAdapter.json",
|
"test/generated-artifacts/BSCBridgeAdapter.json",
|
||||||
"test/generated-artifacts/BaseBridgeAdapter.json",
|
|
||||||
"test/generated-artifacts/BaseGoerliBridgeAdapter.json",
|
|
||||||
"test/generated-artifacts/BatchFillNativeOrdersFeature.json",
|
"test/generated-artifacts/BatchFillNativeOrdersFeature.json",
|
||||||
"test/generated-artifacts/BootstrapFeature.json",
|
"test/generated-artifacts/BootstrapFeature.json",
|
||||||
"test/generated-artifacts/BridgeProtocols.json",
|
"test/generated-artifacts/BridgeProtocols.json",
|
||||||
@ -151,6 +147,7 @@
|
|||||||
"test/generated-artifacts/MixinAaveV2.json",
|
"test/generated-artifacts/MixinAaveV2.json",
|
||||||
"test/generated-artifacts/MixinBalancer.json",
|
"test/generated-artifacts/MixinBalancer.json",
|
||||||
"test/generated-artifacts/MixinBalancerV2Batch.json",
|
"test/generated-artifacts/MixinBalancerV2Batch.json",
|
||||||
|
"test/generated-artifacts/MixinBancor.json",
|
||||||
"test/generated-artifacts/MixinBancorV3.json",
|
"test/generated-artifacts/MixinBancorV3.json",
|
||||||
"test/generated-artifacts/MixinCompound.json",
|
"test/generated-artifacts/MixinCompound.json",
|
||||||
"test/generated-artifacts/MixinCryptoCom.json",
|
"test/generated-artifacts/MixinCryptoCom.json",
|
||||||
@ -161,10 +158,12 @@
|
|||||||
"test/generated-artifacts/MixinGMX.json",
|
"test/generated-artifacts/MixinGMX.json",
|
||||||
"test/generated-artifacts/MixinKyberDmm.json",
|
"test/generated-artifacts/MixinKyberDmm.json",
|
||||||
"test/generated-artifacts/MixinLido.json",
|
"test/generated-artifacts/MixinLido.json",
|
||||||
|
"test/generated-artifacts/MixinMStable.json",
|
||||||
"test/generated-artifacts/MixinMakerPSM.json",
|
"test/generated-artifacts/MixinMakerPSM.json",
|
||||||
"test/generated-artifacts/MixinMooniswap.json",
|
"test/generated-artifacts/MixinMooniswap.json",
|
||||||
"test/generated-artifacts/MixinNerve.json",
|
"test/generated-artifacts/MixinNerve.json",
|
||||||
"test/generated-artifacts/MixinPlatypus.json",
|
"test/generated-artifacts/MixinPlatypus.json",
|
||||||
|
"test/generated-artifacts/MixinShell.json",
|
||||||
"test/generated-artifacts/MixinSolidly.json",
|
"test/generated-artifacts/MixinSolidly.json",
|
||||||
"test/generated-artifacts/MixinSynthetix.json",
|
"test/generated-artifacts/MixinSynthetix.json",
|
||||||
"test/generated-artifacts/MixinUniswap.json",
|
"test/generated-artifacts/MixinUniswap.json",
|
||||||
|
@ -66,8 +66,3 @@ Note: Some addresses have changed across various networks
|
|||||||
Avalanche, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://snowtrace.io/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
Avalanche, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://snowtrace.io/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
||||||
Fantom, `0xdef189deaef76e379df891899eb5a00a94cbc250 <https://ftmscan.com/address/0xdef189deaef76e379df891899eb5a00a94cbc250>`__
|
Fantom, `0xdef189deaef76e379df891899eb5a00a94cbc250 <https://ftmscan.com/address/0xdef189deaef76e379df891899eb5a00a94cbc250>`__
|
||||||
Celo, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://explorer.celo.org/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
Celo, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://explorer.celo.org/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
||||||
Arbitrum, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://arbiscan.io/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
|
||||||
Base, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://basescan.org/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
|
||||||
zkEVM, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://zkevm.polygonscan.com/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
|
||||||
Sepolia, `0xdef1c0ded9bec7f1a1670819833240f027b25eff <https://sepolia.etherscan.io/address/0xdef1c0ded9bec7f1a1670819833240f027b25eff>`__
|
|
||||||
Mumbai, `0xf471d32cb40837bf24529fcf17418fc1a4807626 <https://mumbai.polygonscan.com/address/0xf471d32cb40837bf24529fcf17418fc1a4807626>`__
|
|
||||||
|
@ -15,7 +15,6 @@ 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`.
|
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
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
||||||
const utils = require("@0x/utils");
|
const utils = require("@0x/utils");
|
||||||
|
|
||||||
@ -49,7 +48,6 @@ 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.
|
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
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
||||||
const utils = require("@0x/utils");
|
const utils = require("@0x/utils");
|
||||||
|
|
||||||
@ -99,7 +97,6 @@ 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.
|
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
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
||||||
const utils = require("@0x/utils");
|
const utils = require("@0x/utils");
|
||||||
|
|
||||||
@ -133,7 +130,6 @@ 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.
|
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
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
const { ERC721Order, NFTOrder } = require("@0x/protocol-utils");
|
||||||
const utils = require("@0x/utils");
|
const utils = require("@0x/utils");
|
||||||
|
|
||||||
@ -173,7 +169,6 @@ 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.
|
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
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { ERC721Order, NFTOrder, SignatureType } = require("@0x/protocol-utils");
|
const { ERC721Order, NFTOrder, SignatureType } = require("@0x/protocol-utils");
|
||||||
const utils = require("@0x/utils");
|
const utils = require("@0x/utils");
|
||||||
|
|
||||||
@ -201,7 +196,6 @@ Signing an order with a private key is easy: the `ERC721Order` and `ERC1155Order
|
|||||||
**Signing with ethers**
|
**Signing with ethers**
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { ERC721Order, NFTOrder, SignatureType } = require("@0x/protocol-utils");
|
const { ERC721Order, NFTOrder, SignatureType } = require("@0x/protocol-utils");
|
||||||
const utils = require("@0x/utils");
|
const utils = require("@0x/utils");
|
||||||
const { ethers } = require("ethers");
|
const { ethers } = require("ethers");
|
||||||
@ -249,7 +243,6 @@ 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.
|
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
|
.. code-block:: solidity
|
||||||
|
|
||||||
/// @dev Approves an ERC721 order on-chain. After pre-signing
|
/// @dev Approves an ERC721 order on-chain. After pre-signing
|
||||||
/// the order, the `PRESIGNED` signature type will become
|
/// the order, the `PRESIGNED` signature type will become
|
||||||
/// valid for that order and signer.
|
/// valid for that order and signer.
|
||||||
@ -267,7 +260,6 @@ 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 <https://github.com/0xProject/protocol/blob/refactor/nft-orders/contracts/zero-ex/contracts/src/features/libs/LibSignature.sol#L42-L61>`_):
|
If an order has been pre-signed, it can be filled by providing a “null” signature with the PRESIGNED signature type (see `LibSignature.sol <https://github.com/0xProject/protocol/blob/refactor/nft-orders/contracts/zero-ex/contracts/src/features/libs/LibSignature.sol#L42-L61>`_):
|
||||||
|
|
||||||
.. code-block:: solidity
|
.. code-block:: solidity
|
||||||
|
|
||||||
LibSignature.Signature({
|
LibSignature.Signature({
|
||||||
signatureType: LibSignature.SignatureType.PRESIGNED,
|
signatureType: LibSignature.SignatureType.PRESIGNED,
|
||||||
v: uint8(0),
|
v: uint8(0),
|
||||||
@ -278,7 +270,6 @@ 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.
|
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
|
.. code-block:: solidity
|
||||||
|
|
||||||
/// @dev Emitted when an `ERC721Order` is pre-signed.
|
/// @dev Emitted when an `ERC721Order` is pre-signed.
|
||||||
/// Contains all the fields of the order.
|
/// Contains all the fields of the order.
|
||||||
event ERC721OrderPreSigned(
|
event ERC721OrderPreSigned(
|
||||||
@ -320,7 +311,6 @@ Filling an ERC721 Order
|
|||||||
The basic functions used for filling NFT orders are the following:
|
The basic functions used for filling NFT orders are the following:
|
||||||
|
|
||||||
.. code-block:: solidity
|
.. code-block:: solidity
|
||||||
|
|
||||||
/// @dev Sells an ERC721 asset to fill the given order.
|
/// @dev Sells an ERC721 asset to fill the given order.
|
||||||
/// @param buyOrder The ERC721 buy order.
|
/// @param buyOrder The ERC721 buy order.
|
||||||
/// @param signature The order signature from the maker.
|
/// @param signature The order signature from the maker.
|
||||||
@ -417,7 +407,6 @@ 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.
|
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
|
.. code-block:: solidity
|
||||||
|
|
||||||
/// @dev Cancel a single ERC721 order by its nonce. The caller
|
/// @dev Cancel a single ERC721 order by its nonce. The caller
|
||||||
/// should be the maker of the order. Silently succeeds if
|
/// should be the maker of the order. Silently succeeds if
|
||||||
/// an order with the same nonce has already been filled or
|
/// an order with the same nonce has already been filled or
|
||||||
@ -438,7 +427,6 @@ Note that if there are multiple outstanding orders with the same nonce, calling
|
|||||||
The following functions can be used to cancel multiple orders.
|
The following functions can be used to cancel multiple orders.
|
||||||
|
|
||||||
.. code-block:: solidity
|
.. code-block:: solidity
|
||||||
|
|
||||||
/// @dev Cancel multiple ERC721 orders by their nonces. The caller
|
/// @dev Cancel multiple ERC721 orders by their nonces. The caller
|
||||||
/// should be the maker of the orders. Silently succeeds if
|
/// should be the maker of the orders. Silently succeeds if
|
||||||
/// an order with the same nonce has already been filled or
|
/// an order with the same nonce has already been filled or
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"opRetro": {
|
|
||||||
"projectId": "0x0fad18f37ecec4f4f4ca18e60c353eb11462363e8aa14562b5d96af54108d106"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,61 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"version": "8.13.0",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Add Sepolia addresses"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"timestamp": 1700094997
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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",
|
"version": "8.7.0",
|
||||||
"changes": [
|
"changes": [
|
||||||
|
@ -6,25 +6,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v8.13.0 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Add Sepolia addresses
|
|
||||||
## 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_
|
## v8.7.0 - _May 10, 2023_
|
||||||
|
|
||||||
* Add Trader Joe V2 MixIn to Arbitrum
|
* Add Trader Joe V2 MixIn to Arbitrum
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"wethTransformer": "0xb2bc06a4efb20fc6553a69dbfa49b7be938034a7",
|
"wethTransformer": "0xb2bc06a4efb20fc6553a69dbfa49b7be938034a7",
|
||||||
"payTakerTransformer": "0xea500d073652336a58846ada15c25f2c6d2d241f",
|
"payTakerTransformer": "0xea500d073652336a58846ada15c25f2c6d2d241f",
|
||||||
"affiliateFeeTransformer": "0x8146cbbe327364b13d0699f2ced39c637f92501a",
|
"affiliateFeeTransformer": "0x8146cbbe327364b13d0699f2ced39c637f92501a",
|
||||||
"fillQuoteTransformer": "0x2fd08c1f9fc8406c1d7e3a799a13883a7e7949f0",
|
"fillQuoteTransformer": "0x21c3bee93fad436dedd29f971dc4fdf82f3e3a3a",
|
||||||
"positiveSlippageFeeTransformer": "0x818a4a855bfeb16c305cb65e8d4fb239a308bc48"
|
"positiveSlippageFeeTransformer": "0x818a4a855bfeb16c305cb65e8d4fb239a308bc48"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -64,7 +64,7 @@
|
|||||||
"wethTransformer": "0xac3d95668c092e895cd83a9cbafe9c7d9906471f",
|
"wethTransformer": "0xac3d95668c092e895cd83a9cbafe9c7d9906471f",
|
||||||
"payTakerTransformer": "0x7e788f3a3e39cdd1944ba111fafc5fb7e59b5e90",
|
"payTakerTransformer": "0x7e788f3a3e39cdd1944ba111fafc5fb7e59b5e90",
|
||||||
"affiliateFeeTransformer": "0x043300d113de0c64684ab89c56a45cd94c7ef54c",
|
"affiliateFeeTransformer": "0x043300d113de0c64684ab89c56a45cd94c7ef54c",
|
||||||
"fillQuoteTransformer": "0x6073f12fc63bcc64bd4fed5d44aa1035e37d68ee",
|
"fillQuoteTransformer": "0x43d10801db01c28093265ef9b77d532e553fa578",
|
||||||
"positiveSlippageFeeTransformer": "0x6ff35e8cbaf56d8a8f6bf9963b902a4576243030"
|
"positiveSlippageFeeTransformer": "0x6ff35e8cbaf56d8a8f6bf9963b902a4576243030"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -156,7 +156,7 @@
|
|||||||
"wethTransformer": "0x9b8b52391071d71cd4ad1e61d7f273268fa34c6c",
|
"wethTransformer": "0x9b8b52391071d71cd4ad1e61d7f273268fa34c6c",
|
||||||
"payTakerTransformer": "0xb9a4c32547bc3cdc2ee2fb13cc1a0717dac9888f",
|
"payTakerTransformer": "0xb9a4c32547bc3cdc2ee2fb13cc1a0717dac9888f",
|
||||||
"affiliateFeeTransformer": "0x105679f99d668001370b4621ad8648ac570c860f",
|
"affiliateFeeTransformer": "0x105679f99d668001370b4621ad8648ac570c860f",
|
||||||
"fillQuoteTransformer": "0x463fe1a80acb62ce1e4f0a4f7b83df674c2cce2c",
|
"fillQuoteTransformer": "0x886e4f97d7e06ab66dba574a7a861046dcf7ae4f",
|
||||||
"positiveSlippageFeeTransformer": "0xadbfdc58a24b6dbc16f21541800f43dd6e282250"
|
"positiveSlippageFeeTransformer": "0xadbfdc58a24b6dbc16f21541800f43dd6e282250"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -225,7 +225,7 @@
|
|||||||
"wethTransformer": "0x02ce7af6520e2862f961f5d7eda746642865179c",
|
"wethTransformer": "0x02ce7af6520e2862f961f5d7eda746642865179c",
|
||||||
"payTakerTransformer": "0xa6c3ca183a67fcb4299fb4199c12ca74874ca489",
|
"payTakerTransformer": "0xa6c3ca183a67fcb4299fb4199c12ca74874ca489",
|
||||||
"affiliateFeeTransformer": "0x3102aea537ecb6f164550b094663c82a8c53a972",
|
"affiliateFeeTransformer": "0x3102aea537ecb6f164550b094663c82a8c53a972",
|
||||||
"fillQuoteTransformer": "0x521f3184ab27abde4a34e744a908b1a08dc8ef91",
|
"fillQuoteTransformer": "0xd140adb61d4e3e3978d4f32ac6b92240ff6e3a6e",
|
||||||
"positiveSlippageFeeTransformer": "0x9a4947d3fb77a7afc2c9cd6714bbae96dddde059"
|
"positiveSlippageFeeTransformer": "0x9a4947d3fb77a7afc2c9cd6714bbae96dddde059"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -251,51 +251,5 @@
|
|||||||
"fillQuoteTransformer": "0x4a8815c2fc605e3b01aee52aade4d096c4e862c6",
|
"fillQuoteTransformer": "0x4a8815c2fc605e3b01aee52aade4d096c4e862c6",
|
||||||
"positiveSlippageFeeTransformer": "0x20f935b037e8490d8027f2751f9452725eee01ad"
|
"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"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"11155111": {
|
|
||||||
"zrxToken": "0x0000000000000000000000000000000000000000",
|
|
||||||
"etherToken": "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
|
|
||||||
"zeroExGovernor": "0x5c1f7772ce24d942b85e9b6576f7b5ef70686f5a",
|
|
||||||
"zrxVault": "0x0000000000000000000000000000000000000000",
|
|
||||||
"staking": "0x0000000000000000000000000000000000000000",
|
|
||||||
"stakingProxy": "0x0000000000000000000000000000000000000000",
|
|
||||||
"erc20BridgeProxy": "0x0000000000000000000000000000000000000000",
|
|
||||||
"erc20BridgeSampler": "0x0000000000000000000000000000000000000000",
|
|
||||||
"exchangeProxyGovernor": "0x5c1f7772ce24d942b85e9b6576f7b5ef70686f5a",
|
|
||||||
"exchangeProxy": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
|
|
||||||
"exchangeProxyTransformerDeployer": "0x58bca53ebba1aaf25f0edcd8dad6421872fe20b2",
|
|
||||||
"exchangeProxyFlashWallet": "0xdb6f1920a889355780af7570773609bd8cb1f498",
|
|
||||||
"exchangeProxyLiquidityProviderSandbox": "0x0000000000000000000000000000000000000000",
|
|
||||||
"zrxTreasury": "0x0000000000000000000000000000000000000000",
|
|
||||||
"transformers": {
|
|
||||||
"wethTransformer": "0xf98a130d3b4029c70e6d93098cb82a003421341e",
|
|
||||||
"payTakerTransformer": "0x44e0f3975e95387f3866dd7cab1f51050394a3d1",
|
|
||||||
"affiliateFeeTransformer": "0x5cc22a0e06ea11097c612a962e63674b90e96099",
|
|
||||||
"fillQuoteTransformer": "0x63186ea36e78ecbf0128e448362f1b81e9bf7412",
|
|
||||||
"positiveSlippageFeeTransformer": "0x9e52d8b32d835206d09810c310593bcc77264066"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contract-addresses",
|
"name": "@0x/contract-addresses",
|
||||||
"version": "8.13.0",
|
"version": "8.7.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
import addresses from '../addresses.json';
|
import addresses from '../addresses.json';
|
||||||
|
|
||||||
export interface ContractAddresses {
|
export interface ContractAddresses {
|
||||||
erc20BridgeProxy: string;
|
zrxToken: string;
|
||||||
erc20BridgeSampler: string;
|
|
||||||
etherToken: string;
|
etherToken: string;
|
||||||
exchangeProxy: string;
|
zeroExGovernor: string;
|
||||||
exchangeProxyFlashWallet: string;
|
zrxVault: string;
|
||||||
exchangeProxyGovernor: string;
|
|
||||||
exchangeProxyLiquidityProviderSandbox: string;
|
|
||||||
exchangeProxyTransformerDeployer: string;
|
|
||||||
staking: string;
|
staking: string;
|
||||||
stakingProxy: string;
|
stakingProxy: string;
|
||||||
|
erc20BridgeProxy: string;
|
||||||
|
erc20BridgeSampler: string;
|
||||||
|
exchangeProxyGovernor: string;
|
||||||
|
exchangeProxy: string;
|
||||||
|
exchangeProxyTransformerDeployer: string;
|
||||||
|
exchangeProxyFlashWallet: string;
|
||||||
|
exchangeProxyLiquidityProviderSandbox: string;
|
||||||
|
zrxTreasury: string;
|
||||||
transformers: {
|
transformers: {
|
||||||
wethTransformer: string;
|
wethTransformer: string;
|
||||||
payTakerTransformer: string;
|
payTakerTransformer: string;
|
||||||
@ -18,33 +22,20 @@ export interface ContractAddresses {
|
|||||||
affiliateFeeTransformer: string;
|
affiliateFeeTransformer: string;
|
||||||
positiveSlippageFeeTransformer: string;
|
positiveSlippageFeeTransformer: string;
|
||||||
};
|
};
|
||||||
zeroExGovernor: string;
|
|
||||||
zrxToken: string;
|
|
||||||
zrxTreasury: string;
|
|
||||||
zrxVault: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ChainId {
|
export enum ChainId {
|
||||||
Mainnet = 1,
|
Mainnet = 1,
|
||||||
Goerli = 5,
|
Goerli = 5,
|
||||||
Optimism = 10,
|
Ganache = 1337,
|
||||||
BSC = 56,
|
BSC = 56,
|
||||||
Polygon = 137,
|
Polygon = 137,
|
||||||
Fantom = 250,
|
|
||||||
Ganache = 1337,
|
|
||||||
Base = 8453,
|
|
||||||
Arbitrum = 42161,
|
|
||||||
Avalanche = 43114,
|
|
||||||
Celo = 42220,
|
|
||||||
PolygonMumbai = 80001,
|
PolygonMumbai = 80001,
|
||||||
Sepolia = 11155111
|
Avalanche = 43114,
|
||||||
}
|
Fantom = 250,
|
||||||
|
Celo = 42220,
|
||||||
/**
|
Optimism = 10,
|
||||||
* Narrow a JavaScript number to a Chain ID.
|
Arbitrum = 42161,
|
||||||
*/
|
|
||||||
export function isChainId(chainId: number): chainId is ChainId {
|
|
||||||
return Object.values(ChainId).includes(chainId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,7 +2,7 @@ import * as chai from 'chai';
|
|||||||
import { bufferToHex, rlphash } from 'ethereumjs-util';
|
import { bufferToHex, rlphash } from 'ethereumjs-util';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
|
|
||||||
import { ChainId, getContractAddressesForChainOrThrow, isChainId } from '../src';
|
import { ChainId, getContractAddressesForChainOrThrow } from '../src';
|
||||||
|
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
@ -68,12 +68,3 @@ describe('addresses.json sanity test', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("isChainId", () => {
|
|
||||||
it("should return true for existing chain ids", () => {
|
|
||||||
expect(isChainId(1)).to.be.true;
|
|
||||||
});
|
|
||||||
it("should return false for non-existing chain ids", () => {
|
|
||||||
expect(isChainId(666)).to.be.false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
@ -1,58 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"timestamp": 1700094997,
|
|
||||||
"version": "13.23.8",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Dependencies updated"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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,
|
"timestamp": 1683749017,
|
||||||
"version": "13.23.2",
|
"version": "13.23.2",
|
||||||
|
@ -6,24 +6,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v13.23.8 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Dependencies updated
|
|
||||||
## 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_
|
## v13.23.2 - _May 10, 2023_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/contract-wrappers",
|
"name": "@0x/contract-wrappers",
|
||||||
"version": "13.23.8",
|
"version": "13.23.2",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -59,7 +59,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0x/assert": "^3.0.36",
|
"@0x/assert": "^3.0.36",
|
||||||
"@0x/base-contract": "^7.0.0",
|
"@0x/base-contract": "^7.0.0",
|
||||||
"@0x/contract-addresses": "^8.13.0",
|
"@0x/contract-addresses": "^8.7.0",
|
||||||
"@0x/json-schemas": "^6.4.4",
|
"@0x/json-schemas": "^6.4.4",
|
||||||
"@0x/types": "^3.3.7",
|
"@0x/types": "^3.3.7",
|
||||||
"@0x/utils": "^7.0.0",
|
"@0x/utils": "^7.0.0",
|
||||||
|
@ -1,58 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"timestamp": 1700094997,
|
|
||||||
"version": "11.24.2",
|
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"note": "Dependencies updated"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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,
|
"timestamp": 1683749017,
|
||||||
"version": "11.22.2",
|
"version": "11.22.2",
|
||||||
|
@ -6,24 +6,6 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
## v11.24.2 - _November 16, 2023_
|
|
||||||
|
|
||||||
* Dependencies updated
|
|
||||||
## 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_
|
## v11.22.2 - _May 10, 2023_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0x/protocol-utils",
|
"name": "@0x/protocol-utils",
|
||||||
"version": "11.24.2",
|
"version": "11.22.2",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.12"
|
"node": ">=6.12"
|
||||||
},
|
},
|
||||||
@ -62,8 +62,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0x/assert": "^3.0.36",
|
"@0x/assert": "^3.0.36",
|
||||||
"@0x/contract-addresses": "^8.13.0",
|
"@0x/contract-addresses": "^8.7.0",
|
||||||
"@0x/contract-wrappers": "^13.23.8",
|
"@0x/contract-wrappers": "^13.23.2",
|
||||||
"@0x/json-schemas": "^6.4.4",
|
"@0x/json-schemas": "^6.4.4",
|
||||||
"@0x/subproviders": "^8.0.1",
|
"@0x/subproviders": "^8.0.1",
|
||||||
"@0x/utils": "^7.0.0",
|
"@0x/utils": "^7.0.0",
|
||||||
|
@ -166,8 +166,6 @@ export enum BridgeProtocol {
|
|||||||
KyberElastic,
|
KyberElastic,
|
||||||
Barter,
|
Barter,
|
||||||
TraderJoeV2,
|
TraderJoeV2,
|
||||||
VelodromeV2,
|
|
||||||
MaverickV1,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user