Compare commits

..

26 Commits

Author SHA1 Message Date
Github Actions
c3ad42221e Publish
- @0x/contracts-asset-proxy@3.6.4
 - @0x/contracts-broker@1.1.12
 - @0x/contracts-coordinator@3.1.13
 - @0x/contracts-dev-utils@1.3.11
 - @0x/contracts-erc1155@2.1.13
 - @0x/contracts-erc20@3.2.7
 - @0x/contracts-erc721@3.1.13
 - @0x/contracts-exchange-forwarder@4.2.13
 - @0x/contracts-exchange-libs@4.3.13
 - @0x/contracts-exchange@3.2.13
 - @0x/contracts-extensions@6.2.7
 - @0x/contracts-integrations@2.7.6
 - @0x/contracts-multisig@4.1.13
 - @0x/contracts-staking@2.0.20
 - @0x/contracts-test-utils@5.3.10
 - @0x/contracts-utils@4.5.7
 - @0x/contracts-zero-ex@0.8.0
 - @0x/asset-swapper@5.0.2
 - @0x/contract-addresses@5.2.0
 - @0x/contract-wrappers-test@12.2.23
 - @0x/contract-wrappers@13.9.5
 - @0x/migrations@6.4.7
 - @0x/order-utils@10.4.5
2020-11-03 06:46:11 +00:00
Github Actions
602ac1f626 Updated CHANGELOGS & MD docs 2020-11-03 06:46:05 +00:00
Lawrence Forman
3126795efe @0x/contract-addresses: deploy FQT with CORRECT address (#29)
`@0x/contracts-zero-ex`: Trust `boughtAmount` returned by LP

Co-authored-by: Lawrence Forman <me@merklejerk.com>
2020-11-03 01:12:57 -05:00
Github Actions
dbcb221a59 Publish
- @0x/contracts-asset-proxy@3.6.3
 - @0x/contracts-broker@1.1.11
 - @0x/contracts-coordinator@3.1.12
 - @0x/contracts-dev-utils@1.3.10
 - @0x/contracts-erc1155@2.1.12
 - @0x/contracts-erc20@3.2.6
 - @0x/contracts-erc721@3.1.12
 - @0x/contracts-exchange-forwarder@4.2.12
 - @0x/contracts-exchange-libs@4.3.12
 - @0x/contracts-exchange@3.2.12
 - @0x/contracts-extensions@6.2.6
 - @0x/contracts-integrations@2.7.5
 - @0x/contracts-multisig@4.1.12
 - @0x/contracts-staking@2.0.19
 - @0x/contracts-test-utils@5.3.9
 - @0x/contracts-utils@4.5.6
 - @0x/contracts-zero-ex@0.7.0
 - @0x/asset-swapper@5.0.1
 - @0x/contract-addresses@5.1.0
 - @0x/contract-artifacts@3.8.2
 - @0x/contract-wrappers-test@12.2.22
 - @0x/contract-wrappers@13.9.4
 - @0x/migrations@6.4.6
 - @0x/order-utils@10.4.4
2020-11-03 04:16:44 +00:00
Github Actions
6bbc179f52 Updated CHANGELOGS & MD docs 2020-11-03 04:16:37 +00:00
Lawrence Forman
48e7a391c8 Deploy new FQT (#28)
* `@0x/contracts-zero-ex`: Change `ProtocolFeeUnfunded` event in FQT
`@0x/contracts-zero-ex`: Use new PLP interface in FQT.

* `@0x/contract-addresses`: Deploy new FQT

* fix failing FQT test

Co-authored-by: Lawrence Forman <me@merklejerk.com>
2020-11-02 21:47:25 -05:00
Github Actions
2334e64d0c Publish
- @0x/contracts-asset-proxy@3.6.2
 - @0x/contracts-broker@1.1.10
 - @0x/contracts-coordinator@3.1.11
 - @0x/contracts-dev-utils@1.3.9
 - @0x/contracts-erc1155@2.1.11
 - @0x/contracts-erc20@3.2.5
 - @0x/contracts-erc721@3.1.11
 - @0x/contracts-exchange-forwarder@4.2.11
 - @0x/contracts-exchange-libs@4.3.11
 - @0x/contracts-exchange@3.2.11
 - @0x/contracts-extensions@6.2.5
 - @0x/contracts-integrations@2.7.4
 - @0x/contracts-multisig@4.1.11
 - @0x/contracts-staking@2.0.18
 - @0x/contracts-test-utils@5.3.8
 - @0x/contracts-utils@4.5.5
 - @0x/contracts-zero-ex@0.6.0
 - @0x/asset-swapper@5.0.0
 - @0x/contract-artifacts@3.8.1
 - @0x/contract-wrappers-test@12.2.21
 - @0x/contract-wrappers@13.9.3
 - @0x/migrations@6.4.5
 - @0x/order-utils@10.4.3
2020-11-02 22:21:36 +00:00
Github Actions
14f920ee84 Updated CHANGELOGS & MD docs 2020-11-02 22:21:30 +00:00
Jacob Evans
e10a81023a feat: [asset-swapper] more hops via token adjacency (#24)
* feat: [asset-swapper] more hops via token adjacency

* fix lint

* CHANGELOG
2020-11-03 07:48:37 +10:00
Lawrence Forman
f4709ed1cb EP: Add LibSignature library (#21)
* `@0x/contracts-zero-ex`: Add `LibSignature` library

* `@0x/contracts-zero-ex`: Update package.json scripts

Co-authored-by: Lawrence Forman <me@merklejerk.com>
2020-10-29 17:47:17 -04:00
Daniel Pyrathon
e2e14a977a fix: [WIP] Adds RFQ price-aware comparison price to Quote Report (#18)
* Adds RFQ price-aware comparison price to Quote Report

* added linting fix

* added small lints

* better syntax
2020-10-29 08:48:01 -07:00
Jacob Evans
866f958a10 Update README.md 2020-10-29 17:12:23 +10:00
Jacob Evans
717db99b38 fix: Support Multiple Shells (#17)
* fix: Support Multiple Shells

* CHANGEGLOG
2020-10-29 17:09:23 +10:00
Lawrence Forman
02006118c7 Fix broken tools deps (#20)
* update tools deps to highest
add custom doc gen config

* remove phantom package in manifest

Co-authored-by: Lawrence Forman <me@merklejerk.com>
2020-10-29 16:33:16 +10:00
Steve Marx
9816019bc5 add protocol fees fixin (#2) 2020-10-28 17:10:59 -04:00
Github Actions
9c821dbfc3 Publish
- @0x/contracts-asset-proxy@3.6.1
 - @0x/contracts-broker@1.1.9
 - @0x/contracts-coordinator@3.1.10
 - @0x/contracts-dev-utils@1.3.8
 - @0x/contracts-erc1155@2.1.10
 - @0x/contracts-erc20@3.2.4
 - @0x/contracts-erc721@3.1.10
 - @0x/contracts-exchange-forwarder@4.2.10
 - @0x/contracts-exchange-libs@4.3.10
 - @0x/contracts-exchange@3.2.10
 - @0x/contracts-extensions@6.2.4
 - @0x/contracts-integrations@2.7.3
 - @0x/contracts-multisig@4.1.10
 - @0x/contracts-staking@2.0.17
 - @0x/contracts-test-utils@5.3.7
 - @0x/contracts-utils@4.5.4
 - @0x/contracts-zero-ex@0.5.1
 - @0x/asset-swapper@4.8.1
 - @0x/contract-addresses@5.0.1
 - @0x/contract-wrappers-test@12.2.20
 - @0x/contract-wrappers@13.9.2
 - @0x/migrations@6.4.4
 - @0x/order-utils@10.4.2
2020-10-28 02:10:57 +00:00
Github Actions
af1b890423 Updated CHANGELOGS & MD docs 2020-10-28 02:10:51 +00:00
Romain Butteaud
673835d2de fix: update kovan erc20BridgeSampler (#14)
* fix: update kovan erc20BridgeSampler

* fix update CHANGELOG
2020-10-27 17:51:51 -07:00
Greg Hysz
500b57e935 Adds Template for Specs (#12)
* Adds `docs` directory, along with boilerplate code and templates for readthedocs.org.

* docs: update orders spec

Co-authored-by: Lawrence Forman <me@merklejerk.com>
2020-10-27 16:31:15 -07:00
Jacob Evans
3f7d0580c1 Set the FeeSchedule to Required (#15) 2020-10-28 09:26:14 +10:00
Github Actions
a71c356bba Publish
- @0x/contracts-asset-proxy@3.6.0
 - @0x/contracts-broker@1.1.8
 - @0x/contracts-coordinator@3.1.9
 - @0x/contracts-dev-utils@1.3.7
 - @0x/contracts-erc1155@2.1.9
 - @0x/contracts-erc20@3.2.3
 - @0x/contracts-erc721@3.1.9
 - @0x/contracts-exchange-forwarder@4.2.9
 - @0x/contracts-exchange-libs@4.3.9
 - @0x/contracts-exchange@3.2.9
 - @0x/contracts-extensions@6.2.3
 - @0x/contracts-integrations@2.7.2
 - @0x/contracts-multisig@4.1.9
 - @0x/contracts-staking@2.0.16
 - @0x/contracts-test-utils@5.3.6
 - @0x/contracts-utils@4.5.3
 - @0x/contracts-zero-ex@0.5.0
 - @0x/asset-swapper@4.8.0
 - @0x/contract-addresses@5.0.0
 - @0x/contract-wrappers-test@12.2.19
 - @0x/contract-wrappers@13.9.1
 - @0x/migrations@6.4.3
 - @0x/order-utils@10.4.1
2020-10-27 21:13:56 +00:00
Github Actions
c3a95b7fb1 Updated CHANGELOGS & MD docs 2020-10-27 21:13:47 +00:00
Lawrence Forman
f01540fb35 fix publish 2020-10-27 16:42:30 -04:00
Daniel Pyrathon
689a8881c2 fix: Changed price-aware RFQ flag to be a argument parameter (#13)
* Changed price-aware RFQ flag to be a argument parameter

* prettified tests

* lint
2020-10-27 12:56:26 -07:00
Jacob Evans
99f5be8378 chore: [asset swapper] sampler Solidity 0.6 + Bridge addresses in AS (#4)
* Refactor excess interfaces

* Compiles on 0.6

* Refactored into try/catch

* Rebase and Refactored to v06

* Handle invalid registry in LP

* Update packages/asset-swapper/contracts/src/LiquidityProviderSampler.sol

Co-authored-by: Lawrence Forman <lawrence@0xproject.com>

* chore: [asset-swapper] Move Bridge Addresses and Gas schedule

* curve->pool

* lint

* Refactor to fix module load order

* Move FEE Schedule

* rollup: Swerve/Sushi/SnowSwap/DODO (#7)

* rollup: Swerve/Sushi

* DODO Rollup + Snowswap Swerve

* hardcode addresses temporarily

* rebase

* rename to SUSHISWAP_ROUTER

* CHANGELOGs

* CHANGELOGs

Co-authored-by: Lawrence Forman <lawrence@0xproject.com>
2020-10-27 15:16:09 +10:00
Lawrence Forman
8de0282d92 fix run:publish:gha package script 2020-10-23 17:11:56 -04:00
208 changed files with 6942 additions and 1734 deletions

View File

@@ -24,9 +24,9 @@ jobs:
ref: 'development'
fetch-depth: 0
- uses: actions/setup-node@v1
- uses: actions/setup-python@v2
with:
node-version: 10
- uses: actions/setup-python@v2
- name: 'configure git'
run: |
git config --global user.email "github-actions@github.com"

View File

@@ -82,4 +82,5 @@ lib
/packages/asset-swapper/test/generated-wrappers
package.json
packages/*/docs
docs/
*.sol

View File

@@ -8,7 +8,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume
[website-url]: https://0x.org
[![CircleCI](https://circleci.com/gh/0xProject/0x-monorepo.svg?style=svg&circle-token=61bf7cd8c9b4e11b132089dfcffdd1be277d1e0c)](https://circleci.com/gh/0xProject/0x-monorepo)
[![CircleCI](https://circleci.com/gh/0xProject/protocol.svg?style=svg&circle-token=61bf7cd8c9b4e11b132089dfcffdd1be277d1e0c)](https://circleci.com/gh/0xProject/protocool)
[![Coverage Status](https://coveralls.io/repos/github/0xProject/0x-monorepo/badge.svg?branch=development)](https://coveralls.io/github/0xProject/0x-monorepo?branch=development)
[![Discord](https://img.shields.io/badge/chat-discord.chat-yellow.svg?style=flat)](https://discordapp.com/invite/d3FTX3M)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
@@ -92,7 +92,7 @@ yarn build
To build a specific package:
```bash
PKG=@0x/web3-wrapper yarn build
PKG=@0x/contract-wrappers yarn build
```
To build all contracts packages:
@@ -115,7 +115,7 @@ To watch a specific package and all it's dependent packages:
PKG=[NPM_PACKAGE_NAME] yarn watch
e.g
PKG=@0x/web3-wrapper yarn watch
PKG=@0x/contract-wrappers yarn watch
```
### Clean
@@ -143,7 +143,7 @@ yarn rebuild
To re-build (clean & build) a specific package & it's deps:
```bash
PKG=0x.js yarn rebuild
PKG=@0x/contract-wrappers yarn rebuild
```
### Lint
@@ -157,7 +157,7 @@ yarn lint
Lint a specific package:
```bash
PKG=0x.js yarn lint
PKG=@0x/contract-wrappers yarn lint
```
### Run Tests
@@ -171,7 +171,7 @@ yarn test
Run a specific package's test:
```bash
PKG=@0x/web3-wrapper yarn test
PKG=@0x/contract-wrappers yarn test
```
Run all contracts packages tests:

View File

@@ -1,4 +1,50 @@
[
{
"timestamp": 1604385937,
"version": "3.6.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "3.6.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "3.6.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "3.6.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "3.6.0",
"changes": [
{
"note": "Add `SwerveBridge` and `SnowSwapBridge` (duplicate of `CurveBridge`)",
"pr": 2707
}
],
"timestamp": 1603833198
},
{
"version": "3.5.0",
"changes": [

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v3.6.4 - _November 3, 2020_
* Dependencies updated
## v3.6.3 - _November 3, 2020_
* Dependencies updated
## v3.6.2 - _November 2, 2020_
* Dependencies updated
## v3.6.1 - _October 28, 2020_
* Dependencies updated
## v3.6.0 - _October 27, 2020_
* Add `SwerveBridge` and `SnowSwapBridge` (duplicate of `CurveBridge`) (#2707)
## v3.5.0 - _October 21, 2020_
* Update `CurveBridge` to support more varied curves (#2633)

View File

@@ -51,16 +51,15 @@ contract ShellBridge is
external
returns (bytes4 success)
{
// Decode the bridge data to get the `fromTokenAddress`.
(address fromTokenAddress) = abi.decode(bridgeData, (address));
// Decode the bridge data to get the `fromTokenAddress` and `pool`.
(address fromTokenAddress, address pool) = abi.decode(bridgeData, (address, address));
uint256 fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this));
IShell exchange = IShell(_getShellAddress());
// Grant an allowance to the exchange to spend `fromTokenAddress` token.
LibERC20Token.approveIfBelow(fromTokenAddress, address(exchange), fromTokenBalance);
LibERC20Token.approveIfBelow(fromTokenAddress, pool, fromTokenBalance);
// Try to sell all of this contract's `fromTokenAddress` token balance.
uint256 boughtAmount = exchange.originSwap(
uint256 boughtAmount = IShell(pool).originSwap(
fromTokenAddress,
toTokenAddress,
fromTokenBalance,

View File

@@ -0,0 +1,119 @@
/*
Copyright 2019 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.5.9;
pragma experimental ABIEncoderV2;
import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol";
import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol";
import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol";
import "../interfaces/IERC20Bridge.sol";
import "../interfaces/ICurve.sol";
// solhint-disable not-rely-on-time
// solhint-disable space-after-comma
contract SnowSwapBridge is
IERC20Bridge,
IWallet,
DeploymentConstants
{
struct SnowSwapBridgeData {
address curveAddress;
bytes4 exchangeFunctionSelector;
address fromTokenAddress;
int128 fromCoinIdx;
int128 toCoinIdx;
}
/// @dev Callback for `ICurve`. Tries to buy `amount` of
/// `toTokenAddress` tokens by selling the entirety of the opposing asset
/// (DAI, USDC) to the Curve contract, then transfers the bought
/// tokens to `to`.
/// @param toTokenAddress The token to give to `to` (i.e DAI, USDC, USDT).
/// @param from The maker (this contract).
/// @param to The recipient of the bought tokens.
/// @param amount Minimum amount of `toTokenAddress` tokens to buy.
/// @param bridgeData The abi-encoeded "from" token address.
/// @return success The magic bytes if successful.
function bridgeTransferFrom(
address toTokenAddress,
address from,
address to,
uint256 amount,
bytes calldata bridgeData
)
external
returns (bytes4 success)
{
// Decode the bridge data to get the SnowSwap metadata.
SnowSwapBridgeData memory data = abi.decode(bridgeData, (SnowSwapBridgeData));
require(toTokenAddress != data.fromTokenAddress, "SnowSwapBridge/INVALID_PAIR");
uint256 fromTokenBalance = IERC20Token(data.fromTokenAddress).balanceOf(address(this));
// Grant an allowance to the exchange to spend `fromTokenAddress` token.
LibERC20Token.approveIfBelow(data.fromTokenAddress, data.curveAddress, fromTokenBalance);
// Try to sell all of this contract's `fromTokenAddress` token balance.
{
(bool didSucceed, bytes memory resultData) =
data.curveAddress.call(abi.encodeWithSelector(
data.exchangeFunctionSelector,
data.fromCoinIdx,
data.toCoinIdx,
// dx
fromTokenBalance,
// min dy
amount
));
if (!didSucceed) {
assembly { revert(add(resultData, 32), mload(resultData)) }
}
}
uint256 toTokenBalance = IERC20Token(toTokenAddress).balanceOf(address(this));
// Transfer the converted `toToken`s to `to`.
LibERC20Token.transfer(toTokenAddress, to, toTokenBalance);
emit ERC20BridgeTransfer(
data.fromTokenAddress,
toTokenAddress,
fromTokenBalance,
toTokenBalance,
from,
to
);
return BRIDGE_SUCCESS;
}
/// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker
/// and sign for itself in orders. Always succeeds.
/// @return magicValue Magic success bytes, always.
function isValidSignature(
bytes32,
bytes calldata
)
external
view
returns (bytes4 magicValue)
{
return LEGACY_WALLET_MAGIC_VALUE;
}
}

View File

@@ -0,0 +1,119 @@
/*
Copyright 2019 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.5.9;
pragma experimental ABIEncoderV2;
import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol";
import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol";
import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol";
import "../interfaces/IERC20Bridge.sol";
import "../interfaces/ICurve.sol";
// solhint-disable not-rely-on-time
// solhint-disable space-after-comma
contract SwerveBridge is
IERC20Bridge,
IWallet,
DeploymentConstants
{
struct SwerveBridgeData {
address curveAddress;
bytes4 exchangeFunctionSelector;
address fromTokenAddress;
int128 fromCoinIdx;
int128 toCoinIdx;
}
/// @dev Callback for `ICurve`. Tries to buy `amount` of
/// `toTokenAddress` tokens by selling the entirety of the opposing asset
/// (DAI, USDC) to the Curve contract, then transfers the bought
/// tokens to `to`.
/// @param toTokenAddress The token to give to `to` (i.e DAI, USDC, USDT).
/// @param from The maker (this contract).
/// @param to The recipient of the bought tokens.
/// @param amount Minimum amount of `toTokenAddress` tokens to buy.
/// @param bridgeData The abi-encoeded "from" token address.
/// @return success The magic bytes if successful.
function bridgeTransferFrom(
address toTokenAddress,
address from,
address to,
uint256 amount,
bytes calldata bridgeData
)
external
returns (bytes4 success)
{
// Decode the bridge data to get the SwerveBridgeData metadata.
SwerveBridgeData memory data = abi.decode(bridgeData, (SwerveBridgeData));
require(toTokenAddress != data.fromTokenAddress, "SwerveBridge/INVALID_PAIR");
uint256 fromTokenBalance = IERC20Token(data.fromTokenAddress).balanceOf(address(this));
// Grant an allowance to the exchange to spend `fromTokenAddress` token.
LibERC20Token.approveIfBelow(data.fromTokenAddress, data.curveAddress, fromTokenBalance);
// Try to sell all of this contract's `fromTokenAddress` token balance.
{
(bool didSucceed, bytes memory resultData) =
data.curveAddress.call(abi.encodeWithSelector(
data.exchangeFunctionSelector,
data.fromCoinIdx,
data.toCoinIdx,
// dx
fromTokenBalance,
// min dy
amount
));
if (!didSucceed) {
assembly { revert(add(resultData, 32), mload(resultData)) }
}
}
uint256 toTokenBalance = IERC20Token(toTokenAddress).balanceOf(address(this));
// Transfer the converted `toToken`s to `to`.
LibERC20Token.transfer(toTokenAddress, to, toTokenBalance);
emit ERC20BridgeTransfer(
data.fromTokenAddress,
toTokenAddress,
fromTokenBalance,
toTokenBalance,
from,
to
);
return BRIDGE_SUCCESS;
}
/// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker
/// and sign for itself in orders. Always succeeds.
/// @return magicValue Magic success bytes, always.
function isValidSignature(
bytes32,
bytes calldata
)
external
view
returns (bytes4 magicValue)
{
return LEGACY_WALLET_MAGIC_VALUE;
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-asset-proxy",
"version": "3.5.0",
"version": "3.6.4",
"engines": {
"node": ">=6.12"
},
@@ -38,7 +38,7 @@
"docs:json": "typedoc --excludePrivate --excludeExternals --excludeProtected --ignoreCompilerErrors --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES"
},
"config": {
"abis": "./test/generated-artifacts/@(BalancerBridge|BancorBridge|ChaiBridge|CreamBridge|CurveBridge|DODOBridge|DexForwarderBridge|DydxBridge|ERC1155Proxy|ERC20BridgeProxy|ERC20Proxy|ERC721Proxy|Eth2DaiBridge|IAssetData|IAssetProxy|IAssetProxyDispatcher|IAuthorizable|IBalancerPool|IBancorNetwork|IChai|ICurve|IDydx|IDydxBridge|IERC20Bridge|IEth2Dai|IGasToken|IKyberNetworkProxy|IMStable|IMooniswap|IShell|IUniswapExchange|IUniswapExchangeFactory|IUniswapV2Router01|KyberBridge|MStableBridge|MixinAssetProxyDispatcher|MixinAuthorizable|MixinGasToken|MooniswapBridge|MultiAssetProxy|Ownable|ShellBridge|StaticCallProxy|SushiSwapBridge|TestBancorBridge|TestChaiBridge|TestDexForwarderBridge|TestDydxBridge|TestERC20Bridge|TestEth2DaiBridge|TestKyberBridge|TestStaticCallTarget|TestUniswapBridge|TestUniswapV2Bridge|UniswapBridge|UniswapV2Bridge).json",
"abis": "./test/generated-artifacts/@(BalancerBridge|BancorBridge|ChaiBridge|CreamBridge|CurveBridge|DODOBridge|DexForwarderBridge|DydxBridge|ERC1155Proxy|ERC20BridgeProxy|ERC20Proxy|ERC721Proxy|Eth2DaiBridge|IAssetData|IAssetProxy|IAssetProxyDispatcher|IAuthorizable|IBalancerPool|IBancorNetwork|IChai|ICurve|IDydx|IDydxBridge|IERC20Bridge|IEth2Dai|IGasToken|IKyberNetworkProxy|IMStable|IMooniswap|IShell|IUniswapExchange|IUniswapExchangeFactory|IUniswapV2Router01|KyberBridge|MStableBridge|MixinAssetProxyDispatcher|MixinAuthorizable|MixinGasToken|MooniswapBridge|MultiAssetProxy|Ownable|ShellBridge|SnowSwapBridge|StaticCallProxy|SushiSwapBridge|SwerveBridge|TestBancorBridge|TestChaiBridge|TestDexForwarderBridge|TestDydxBridge|TestERC20Bridge|TestEth2DaiBridge|TestKyberBridge|TestStaticCallTarget|TestUniswapBridge|TestUniswapV2Bridge|UniswapBridge|UniswapV2Bridge).json",
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually."
},
"repository": {
@@ -51,13 +51,13 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contract-wrappers": "^13.9.0",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contract-wrappers": "^13.9.5",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@types/lodash": "4.14.104",
@@ -79,16 +79,16 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/contracts-erc1155": "^2.1.8",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-erc721": "^3.1.8",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/order-utils": "^10.4.0",
"@0x/types": "^3.2.4",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-erc1155": "^2.1.13",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-erc721": "^3.1.13",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/order-utils": "^10.4.5",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"ethereum-types": "^3.3.3",
"lodash": "^4.17.11"
},

View File

@@ -47,8 +47,10 @@ import * as MStableBridge from '../generated-artifacts/MStableBridge.json';
import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.json';
import * as Ownable from '../generated-artifacts/Ownable.json';
import * as ShellBridge from '../generated-artifacts/ShellBridge.json';
import * as SnowSwapBridge from '../generated-artifacts/SnowSwapBridge.json';
import * as StaticCallProxy from '../generated-artifacts/StaticCallProxy.json';
import * as SushiSwapBridge from '../generated-artifacts/SushiSwapBridge.json';
import * as SwerveBridge from '../generated-artifacts/SwerveBridge.json';
import * as TestBancorBridge from '../generated-artifacts/TestBancorBridge.json';
import * as TestChaiBridge from '../generated-artifacts/TestChaiBridge.json';
import * as TestDexForwarderBridge from '../generated-artifacts/TestDexForwarderBridge.json';
@@ -85,7 +87,9 @@ export const artifacts = {
MixinGasToken: MixinGasToken as ContractArtifact,
MooniswapBridge: MooniswapBridge as ContractArtifact,
ShellBridge: ShellBridge as ContractArtifact,
SnowSwapBridge: SnowSwapBridge as ContractArtifact,
SushiSwapBridge: SushiSwapBridge as ContractArtifact,
SwerveBridge: SwerveBridge as ContractArtifact,
UniswapBridge: UniswapBridge as ContractArtifact,
UniswapV2Bridge: UniswapV2Bridge as ContractArtifact,
IAssetData: IAssetData as ContractArtifact,

View File

@@ -45,8 +45,10 @@ export * from '../generated-wrappers/mooniswap_bridge';
export * from '../generated-wrappers/multi_asset_proxy';
export * from '../generated-wrappers/ownable';
export * from '../generated-wrappers/shell_bridge';
export * from '../generated-wrappers/snow_swap_bridge';
export * from '../generated-wrappers/static_call_proxy';
export * from '../generated-wrappers/sushi_swap_bridge';
export * from '../generated-wrappers/swerve_bridge';
export * from '../generated-wrappers/test_bancor_bridge';
export * from '../generated-wrappers/test_chai_bridge';
export * from '../generated-wrappers/test_dex_forwarder_bridge';

View File

@@ -47,8 +47,10 @@ import * as MStableBridge from '../test/generated-artifacts/MStableBridge.json';
import * as MultiAssetProxy from '../test/generated-artifacts/MultiAssetProxy.json';
import * as Ownable from '../test/generated-artifacts/Ownable.json';
import * as ShellBridge from '../test/generated-artifacts/ShellBridge.json';
import * as SnowSwapBridge from '../test/generated-artifacts/SnowSwapBridge.json';
import * as StaticCallProxy from '../test/generated-artifacts/StaticCallProxy.json';
import * as SushiSwapBridge from '../test/generated-artifacts/SushiSwapBridge.json';
import * as SwerveBridge from '../test/generated-artifacts/SwerveBridge.json';
import * as TestBancorBridge from '../test/generated-artifacts/TestBancorBridge.json';
import * as TestChaiBridge from '../test/generated-artifacts/TestChaiBridge.json';
import * as TestDexForwarderBridge from '../test/generated-artifacts/TestDexForwarderBridge.json';
@@ -85,7 +87,9 @@ export const artifacts = {
MixinGasToken: MixinGasToken as ContractArtifact,
MooniswapBridge: MooniswapBridge as ContractArtifact,
ShellBridge: ShellBridge as ContractArtifact,
SnowSwapBridge: SnowSwapBridge as ContractArtifact,
SushiSwapBridge: SushiSwapBridge as ContractArtifact,
SwerveBridge: SwerveBridge as ContractArtifact,
UniswapBridge: UniswapBridge as ContractArtifact,
UniswapV2Bridge: UniswapV2Bridge as ContractArtifact,
IAssetData: IAssetData as ContractArtifact,

View File

@@ -45,8 +45,10 @@ export * from '../test/generated-wrappers/mooniswap_bridge';
export * from '../test/generated-wrappers/multi_asset_proxy';
export * from '../test/generated-wrappers/ownable';
export * from '../test/generated-wrappers/shell_bridge';
export * from '../test/generated-wrappers/snow_swap_bridge';
export * from '../test/generated-wrappers/static_call_proxy';
export * from '../test/generated-wrappers/sushi_swap_bridge';
export * from '../test/generated-wrappers/swerve_bridge';
export * from '../test/generated-wrappers/test_bancor_bridge';
export * from '../test/generated-wrappers/test_chai_bridge';
export * from '../test/generated-wrappers/test_dex_forwarder_bridge';

View File

@@ -45,8 +45,10 @@
"generated-artifacts/MultiAssetProxy.json",
"generated-artifacts/Ownable.json",
"generated-artifacts/ShellBridge.json",
"generated-artifacts/SnowSwapBridge.json",
"generated-artifacts/StaticCallProxy.json",
"generated-artifacts/SushiSwapBridge.json",
"generated-artifacts/SwerveBridge.json",
"generated-artifacts/TestBancorBridge.json",
"generated-artifacts/TestChaiBridge.json",
"generated-artifacts/TestDexForwarderBridge.json",
@@ -101,8 +103,10 @@
"test/generated-artifacts/MultiAssetProxy.json",
"test/generated-artifacts/Ownable.json",
"test/generated-artifacts/ShellBridge.json",
"test/generated-artifacts/SnowSwapBridge.json",
"test/generated-artifacts/StaticCallProxy.json",
"test/generated-artifacts/SushiSwapBridge.json",
"test/generated-artifacts/SwerveBridge.json",
"test/generated-artifacts/TestBancorBridge.json",
"test/generated-artifacts/TestChaiBridge.json",
"test/generated-artifacts/TestDexForwarderBridge.json",

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "1.1.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "1.1.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "1.1.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "1.1.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "1.1.8",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "1.1.7",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.1.12 - _November 3, 2020_
* Dependencies updated
## v1.1.11 - _November 3, 2020_
* Dependencies updated
## v1.1.10 - _November 2, 2020_
* Dependencies updated
## v1.1.9 - _October 28, 2020_
* Dependencies updated
## v1.1.8 - _October 27, 2020_
* Dependencies updated
## v1.1.7 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-broker",
"version": "1.1.7",
"version": "1.1.12",
"engines": {
"node": ">=6.12"
},
@@ -51,20 +51,20 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-erc721": "^3.1.8",
"@0x/contracts-exchange": "^3.2.8",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-erc721": "^3.1.13",
"@0x/contracts-exchange": "^3.2.13",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/web3-wrapper": "^7.2.4",
"@0x/types": "^3.3.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -84,10 +84,10 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/order-utils": "^10.4.0",
"@0x/base-contract": "^6.2.11",
"@0x/order-utils": "^10.4.5",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/utils": "^6.1.0",
"ethereum-types": "^3.3.3"
},
"publishConfig": {

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "3.1.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "3.1.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "3.1.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "3.1.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "3.1.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "3.1.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v3.1.13 - _November 3, 2020_
* Dependencies updated
## v3.1.12 - _November 3, 2020_
* Dependencies updated
## v3.1.11 - _November 2, 2020_
* Dependencies updated
## v3.1.10 - _October 28, 2020_
* Dependencies updated
## v3.1.9 - _October 27, 2020_
* Dependencies updated
## v3.1.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-coordinator",
"version": "3.1.8",
"version": "3.1.13",
"engines": {
"node": ">=6.12"
},
@@ -52,17 +52,17 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-dev-utils": "^1.3.6",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-gen": "2.0.13",
"@0x/dev-utils": "^3.3.4",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-dev-utils": "^1.3.11",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-gen": "2.0.18",
"@0x/dev-utils": "^4.0.1",
"@0x/order-utils": "^10.4.5",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -82,16 +82,16 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/assert": "^3.0.13",
"@0x/base-contract": "^6.2.7",
"@0x/contract-addresses": "^4.12.0",
"@0x/contracts-exchange": "^3.2.8",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/json-schemas": "^5.2.3",
"@0x/types": "^3.2.4",
"@0x/assert": "^3.0.17",
"@0x/base-contract": "^6.2.11",
"@0x/contract-addresses": "^5.2.0",
"@0x/contracts-exchange": "^3.2.13",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/json-schemas": "^5.3.3",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/utils": "^6.1.0",
"ethereum-types": "^3.3.3",
"http-status-codes": "^1.3.2"
},

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "1.3.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "1.3.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "1.3.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "1.3.8",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "1.3.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "1.3.6",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.3.11 - _November 3, 2020_
* Dependencies updated
## v1.3.10 - _November 3, 2020_
* Dependencies updated
## v1.3.9 - _November 2, 2020_
* Dependencies updated
## v1.3.8 - _October 28, 2020_
* Dependencies updated
## v1.3.7 - _October 27, 2020_
* Dependencies updated
## v1.3.6 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-dev-utils",
"version": "1.3.6",
"version": "1.3.11",
"engines": {
"node": ">=6.12"
},
@@ -41,17 +41,17 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/assert": "^3.0.13",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/assert": "^3.0.17",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/utils": "^5.6.3",
"@0x/types": "^3.3.0",
"@0x/utils": "^6.1.0",
"ethereum-types": "^3.3.3",
"ethers": "~4.0.4",
"npm-run-all": "^4.1.2",
@@ -63,7 +63,7 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/base-contract": "^6.2.11",
"@types/node": "12.12.54"
},
"publishConfig": {

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "2.1.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "2.1.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "2.1.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "2.1.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "2.1.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "2.1.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v2.1.13 - _November 3, 2020_
* Dependencies updated
## v2.1.12 - _November 3, 2020_
* Dependencies updated
## v2.1.11 - _November 2, 2020_
* Dependencies updated
## v2.1.10 - _October 28, 2020_
* Dependencies updated
## v2.1.9 - _October 27, 2020_
* Dependencies updated
## v2.1.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-erc1155",
"version": "2.1.8",
"version": "2.1.13",
"engines": {
"node": ">=6.12"
},
@@ -52,14 +52,14 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
@@ -80,10 +80,10 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"lodash": "^4.17.11"
},
"publishConfig": {

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "3.2.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "3.2.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "3.2.5",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "3.2.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "3.2.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "3.2.2",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v3.2.7 - _November 3, 2020_
* Dependencies updated
## v3.2.6 - _November 3, 2020_
* Dependencies updated
## v3.2.5 - _November 2, 2020_
* Dependencies updated
## v3.2.4 - _October 28, 2020_
* Dependencies updated
## v3.2.3 - _October 27, 2020_
* Dependencies updated
## v3.2.2 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-erc20",
"version": "3.2.2",
"version": "3.2.7",
"engines": {
"node": ">=6.12"
},
@@ -51,18 +51,18 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -82,7 +82,7 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7"
"@0x/base-contract": "^6.2.11"
},
"publishConfig": {
"access": "public"

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "3.1.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "3.1.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "3.1.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "3.1.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "3.1.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "3.1.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v3.1.13 - _November 3, 2020_
* Dependencies updated
## v3.1.12 - _November 3, 2020_
* Dependencies updated
## v3.1.11 - _November 2, 2020_
* Dependencies updated
## v3.1.10 - _October 28, 2020_
* Dependencies updated
## v3.1.9 - _October 27, 2020_
* Dependencies updated
## v3.1.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-erc721",
"version": "3.1.8",
"version": "3.1.13",
"engines": {
"node": ">=6.12"
},
@@ -52,18 +52,18 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -84,7 +84,7 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7"
"@0x/base-contract": "^6.2.11"
},
"publishConfig": {
"access": "public"

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "4.2.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "4.2.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "4.2.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "4.2.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "4.2.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "4.2.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v4.2.13 - _November 3, 2020_
* Dependencies updated
## v4.2.12 - _November 3, 2020_
* Dependencies updated
## v4.2.11 - _November 2, 2020_
* Dependencies updated
## v4.2.10 - _October 28, 2020_
* Dependencies updated
## v4.2.9 - _October 27, 2020_
* Dependencies updated
## v4.2.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-exchange-forwarder",
"version": "4.2.8",
"version": "4.2.13",
"engines": {
"node": ">=6.12"
},
@@ -52,25 +52,25 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-dev-utils": "^1.3.6",
"@0x/contracts-erc1155": "^2.1.8",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-erc721": "^3.1.8",
"@0x/contracts-exchange": "^3.2.8",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-dev-utils": "^1.3.11",
"@0x/contracts-erc1155": "^2.1.13",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-erc721": "^3.1.13",
"@0x/contracts-exchange": "^3.2.13",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/order-utils": "^10.4.5",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/types": "^3.3.0",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -90,7 +90,7 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/base-contract": "^6.2.11",
"@0x/typescript-typings": "^5.1.5",
"ethereum-types": "^3.3.3"
},

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "4.3.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "4.3.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "4.3.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "4.3.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "4.3.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "4.3.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v4.3.13 - _November 3, 2020_
* Dependencies updated
## v4.3.12 - _November 3, 2020_
* Dependencies updated
## v4.3.11 - _November 2, 2020_
* Dependencies updated
## v4.3.10 - _October 28, 2020_
* Dependencies updated
## v4.3.9 - _October 27, 2020_
* Dependencies updated
## v4.3.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-exchange-libs",
"version": "4.3.8",
"version": "4.3.13",
"engines": {
"node": ">=6.12"
},
@@ -52,14 +52,14 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-gen": "2.0.13",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/subproviders": "^6.1.5",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-gen": "2.0.18",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/subproviders": "^6.1.9",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -80,13 +80,13 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/order-utils": "^10.4.0",
"@0x/types": "^3.2.4",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/order-utils": "^10.4.5",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/utils": "^6.1.0",
"ethereum-types": "^3.3.3"
},
"publishConfig": {

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "3.2.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "3.2.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "3.2.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "3.2.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "3.2.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "3.2.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v3.2.13 - _November 3, 2020_
* Dependencies updated
## v3.2.12 - _November 3, 2020_
* Dependencies updated
## v3.2.11 - _November 2, 2020_
* Dependencies updated
## v3.2.10 - _October 28, 2020_
* Dependencies updated
## v3.2.9 - _October 27, 2020_
* Dependencies updated
## v3.2.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-exchange",
"version": "3.2.8",
"version": "3.2.13",
"engines": {
"node": ">=6.12"
},
@@ -52,21 +52,21 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-multisig": "^4.1.8",
"@0x/contracts-staking": "^2.0.15",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-multisig": "^4.1.13",
"@0x/contracts-staking": "^2.0.20",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/web3-wrapper": "^7.2.4",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -88,13 +88,13 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/contracts-dev-utils": "^1.3.6",
"@0x/contracts-erc1155": "^2.1.8",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-erc721": "^3.1.8",
"@0x/order-utils": "^10.4.0",
"@0x/utils": "^5.6.3",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-dev-utils": "^1.3.11",
"@0x/contracts-erc1155": "^2.1.13",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-erc721": "^3.1.13",
"@0x/order-utils": "^10.4.5",
"@0x/utils": "^6.1.0",
"lodash": "^4.17.11"
},
"publishConfig": {

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "6.2.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "6.2.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "6.2.5",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "6.2.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "6.2.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "6.2.2",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v6.2.7 - _November 3, 2020_
* Dependencies updated
## v6.2.6 - _November 3, 2020_
* Dependencies updated
## v6.2.5 - _November 2, 2020_
* Dependencies updated
## v6.2.4 - _October 28, 2020_
* Dependencies updated
## v6.2.3 - _October 27, 2020_
* Dependencies updated
## v6.2.2 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-extensions",
"version": "6.2.2",
"version": "6.2.7",
"engines": {
"node": ">=6.12"
},
@@ -52,23 +52,23 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-dev-utils": "^1.3.6",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-erc721": "^3.1.8",
"@0x/contracts-exchange": "^3.2.8",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-dev-utils": "^1.3.11",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-erc721": "^3.1.13",
"@0x/contracts-exchange": "^3.2.13",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/order-utils": "^10.4.5",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/types": "^3.3.0",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -90,8 +90,8 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/typescript-typings": "^5.1.5",
"ethereum-types": "^3.3.3"
},

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "2.7.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "2.7.5",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "2.7.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "2.7.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "2.7.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603487270,
"version": "2.7.1",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v2.7.6 - _November 3, 2020_
* Dependencies updated
## v2.7.5 - _November 3, 2020_
* Dependencies updated
## v2.7.4 - _November 2, 2020_
* Dependencies updated
## v2.7.3 - _October 28, 2020_
* Dependencies updated
## v2.7.2 - _October 27, 2020_
* Dependencies updated
## v2.7.1 - _October 23, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-integrations",
"version": "2.7.1",
"version": "2.7.6",
"engines": {
"node": ">=6.12"
},
@@ -51,24 +51,24 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contract-addresses": "^4.12.0",
"@0x/contract-wrappers": "^13.9.0",
"@0x/contracts-broker": "^1.1.7",
"@0x/contracts-coordinator": "^3.1.8",
"@0x/contracts-dev-utils": "^1.3.6",
"@0x/contracts-exchange-forwarder": "^4.2.8",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/contracts-extensions": "^6.2.2",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-utils": "^4.5.2",
"@0x/abi-gen": "^5.4.7",
"@0x/contract-addresses": "^5.2.0",
"@0x/contract-wrappers": "^13.9.5",
"@0x/contracts-broker": "^1.1.12",
"@0x/contracts-coordinator": "^3.1.13",
"@0x/contracts-dev-utils": "^1.3.11",
"@0x/contracts-exchange-forwarder": "^4.2.13",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/contracts-extensions": "^6.2.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-utils": "^4.5.7",
"@0x/coordinator-server": "^1.0.5",
"@0x/dev-utils": "^3.3.4",
"@0x/migrations": "^6.4.2",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/dev-utils": "^4.0.1",
"@0x/migrations": "^6.4.7",
"@0x/order-utils": "^10.4.5",
"@0x/sol-compiler": "^4.2.7",
"@0x/tslint-config": "^4.1.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/web3-wrapper": "^7.2.8",
"@azure/core-asynciterator-polyfill": "^1.0.0",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
@@ -91,21 +91,21 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/asset-swapper": "^4.7.1",
"@0x/base-contract": "^6.2.7",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-erc1155": "^2.1.8",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-erc721": "^3.1.8",
"@0x/contracts-exchange": "^3.2.8",
"@0x/contracts-multisig": "^4.1.8",
"@0x/contracts-staking": "^2.0.15",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-zero-ex": "^0.4.0",
"@0x/subproviders": "^6.1.5",
"@0x/types": "^3.2.4",
"@0x/asset-swapper": "^5.0.2",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-erc1155": "^2.1.13",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-erc721": "^3.1.13",
"@0x/contracts-exchange": "^3.2.13",
"@0x/contracts-multisig": "^4.1.13",
"@0x/contracts-staking": "^2.0.20",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-zero-ex": "^0.8.0",
"@0x/subproviders": "^6.1.9",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/utils": "^6.1.0",
"ethereum-types": "^3.3.3",
"ethereumjs-util": "^6.2.0",
"lodash": "^4.17.11"

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "4.1.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "4.1.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "4.1.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "4.1.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "4.1.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "4.1.8",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v4.1.13 - _November 3, 2020_
* Dependencies updated
## v4.1.12 - _November 3, 2020_
* Dependencies updated
## v4.1.11 - _November 2, 2020_
* Dependencies updated
## v4.1.10 - _October 28, 2020_
* Dependencies updated
## v4.1.9 - _October 27, 2020_
* Dependencies updated
## v4.1.8 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-multisig",
"version": "4.1.8",
"version": "4.1.13",
"engines": {
"node": ">=6.12"
},
@@ -49,18 +49,18 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/types": "^3.3.0",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
"@types/node": "12.12.54",
@@ -78,7 +78,7 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/base-contract": "^6.2.11",
"@0x/typescript-typings": "^5.1.5",
"ethereum-types": "^3.3.3"
},

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "2.0.20",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "2.0.19",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "2.0.18",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "2.0.17",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "2.0.16",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "2.0.15",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v2.0.20 - _November 3, 2020_
* Dependencies updated
## v2.0.19 - _November 3, 2020_
* Dependencies updated
## v2.0.18 - _November 2, 2020_
* Dependencies updated
## v2.0.17 - _October 28, 2020_
* Dependencies updated
## v2.0.16 - _October 27, 2020_
* Dependencies updated
## v2.0.15 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-staking",
"version": "2.0.15",
"version": "2.0.20",
"engines": {
"node": ">=6.12"
},
@@ -53,20 +53,20 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-asset-proxy": "^3.5.0",
"@0x/contracts-dev-utils": "^1.3.6",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-exchange-libs": "^4.3.8",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-utils": "^4.5.2",
"@0x/dev-utils": "^3.3.4",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-asset-proxy": "^3.6.4",
"@0x/contracts-dev-utils": "^1.3.11",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-exchange-libs": "^4.3.13",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-utils": "^4.5.7",
"@0x/dev-utils": "^4.0.1",
"@0x/order-utils": "^10.4.5",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/web3-wrapper": "^7.2.4",
"@0x/types": "^3.3.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/lodash": "4.14.104",
"@types/node": "12.12.54",
"chai": "^4.0.1",
@@ -87,10 +87,10 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/base-contract": "^6.2.11",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/utils": "^6.1.0",
"ethereum-types": "^3.3.3",
"ethereumjs-util": "^5.1.1"
},

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "5.3.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "5.3.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "5.3.8",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "5.3.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "5.3.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603265572,
"version": "5.3.5",

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v5.3.10 - _November 3, 2020_
* Dependencies updated
## v5.3.9 - _November 3, 2020_
* Dependencies updated
## v5.3.8 - _November 2, 2020_
* Dependencies updated
## v5.3.7 - _October 28, 2020_
* Dependencies updated
## v5.3.6 - _October 27, 2020_
* Dependencies updated
## v5.3.5 - _October 21, 2020_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-test-utils",
"version": "5.3.5",
"version": "5.3.10",
"engines": {
"node": ">=6.12"
},
@@ -34,7 +34,7 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils",
"devDependencies": {
"@0x/sol-compiler": "^4.2.3",
"@0x/sol-compiler": "^4.2.7",
"@0x/tslint-config": "^4.1.3",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
@@ -42,20 +42,20 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/assert": "^3.0.13",
"@0x/base-contract": "^6.2.7",
"@0x/contract-addresses": "^4.12.0",
"@0x/dev-utils": "^3.3.4",
"@0x/json-schemas": "^5.2.3",
"@0x/order-utils": "^10.4.0",
"@0x/sol-coverage": "^4.0.14",
"@0x/sol-profiler": "^4.1.4",
"@0x/sol-trace": "^3.0.14",
"@0x/subproviders": "^6.1.5",
"@0x/types": "^3.2.4",
"@0x/assert": "^3.0.17",
"@0x/base-contract": "^6.2.11",
"@0x/contract-addresses": "^5.2.0",
"@0x/dev-utils": "^4.0.1",
"@0x/json-schemas": "^5.3.3",
"@0x/order-utils": "^10.4.5",
"@0x/sol-coverage": "^4.0.18",
"@0x/sol-profiler": "^4.1.8",
"@0x/sol-trace": "^3.0.18",
"@0x/subproviders": "^6.1.9",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/bn.js": "^4.11.0",
"@types/js-combinatorics": "^0.5.29",
"@types/lodash": "4.14.104",

View File

@@ -1,4 +1,49 @@
[
{
"timestamp": 1604385937,
"version": "4.5.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604376968,
"version": "4.5.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1604355662,
"version": "4.5.5",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603851023,
"version": "4.5.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1603833198,
"version": "4.5.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "4.5.2",
"changes": [

View File

@@ -5,6 +5,26 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v4.5.7 - _November 3, 2020_
* Dependencies updated
## v4.5.6 - _November 3, 2020_
* Dependencies updated
## v4.5.5 - _November 2, 2020_
* Dependencies updated
## v4.5.4 - _October 28, 2020_
* Dependencies updated
## v4.5.3 - _October 27, 2020_
* Dependencies updated
## v4.5.2 - _October 21, 2020_
* Add Ropsten and Rinkeby addresses to `DeploymentConstants` (#2656)

View File

@@ -56,8 +56,6 @@ contract DeploymentConstants {
address constant private MUSD_ADDRESS = 0xe2f2a5C287993345a840Db3B0845fbC70f5935a5;
/// @dev Mainnet address of the Mooniswap Registry contract
address constant private MOONISWAP_REGISTRY = 0x71CD6666064C3A1354a3B4dca5fA1E2D3ee7D303;
/// @dev Mainnet address of the Shell contract
address constant private SHELL_CONTRACT = 0x2E703D658f8dd21709a7B458967aB4081F8D3d05;
/// @dev Mainnet address of the DODO Registry (ZOO) contract
address constant private DODO_REGISTRY = 0x3A97247DF274a17C59A3bd12735ea3FcDFb49950;
/// @dev Mainnet address of the DODO Helper contract
@@ -303,16 +301,6 @@ contract DeploymentConstants {
return MOONISWAP_REGISTRY;
}
/// @dev An overridable way to retrieve the Shell contract address.
/// @return registry The Shell contract address.
function _getShellAddress()
internal
view
returns (address)
{
return SHELL_CONTRACT;
}
/// @dev An overridable way to retrieve the DODO Registry contract address.
/// @return registry The DODO Registry contract address.
function _getDODORegistryAddress()

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-utils",
"version": "4.5.2",
"version": "4.5.7",
"engines": {
"node": ">=6.12"
},
@@ -50,15 +50,15 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/utils",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/dev-utils": "^3.3.4",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/dev-utils": "^4.0.1",
"@0x/order-utils": "^10.4.5",
"@0x/sol-compiler": "^4.2.7",
"@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.2.4",
"@0x/web3-wrapper": "^7.2.4",
"@0x/types": "^3.3.0",
"@0x/web3-wrapper": "^7.2.8",
"@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7",
@@ -79,9 +79,9 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/base-contract": "^6.2.11",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/utils": "^6.1.0",
"bn.js": "^4.11.8",
"ethereum-types": "^3.3.3"
},

View File

@@ -1,4 +1,61 @@
[
{
"version": "0.8.0",
"changes": [
{
"note": "Trust LP boughtAmount return value",
"pr": 29
}
],
"timestamp": 1604385937
},
{
"version": "0.7.0",
"changes": [
{
"note": "Change `ProtocolFeeUnfunded` event in FQT",
"pr": 28
},
{
"note": "Use new PLP interface in FQT.",
"pr": 28
}
],
"timestamp": 1604376968
},
{
"version": "0.6.0",
"changes": [
{
"note": "Add support for collecting protocol fees in ETH or WETH",
"pr": 2
},
{
"note": "Add `LibSignature` library",
"pr": 21
}
],
"timestamp": 1604355662
},
{
"timestamp": 1603851023,
"version": "0.5.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "0.5.0",
"changes": [
{
"note": "Add `Swerve`, `SnowSwap`, `DODO` and `SushiSwap` into FQT",
"pr": 7
}
],
"timestamp": 1603833198
},
{
"version": "0.4.0",
"changes": [

View File

@@ -5,6 +5,28 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v0.8.0 - _November 3, 2020_
* Trust LP boughtAmount return value (#29)
## v0.7.0 - _November 3, 2020_
* Change `ProtocolFeeUnfunded` event in FQT (#28)
* Use new PLP interface in FQT. (#28)
## v0.6.0 - _November 2, 2020_
* Add support for collecting protocol fees in ETH or WETH (#2)
* Add `LibSignature` library (#21)
## v0.5.1 - _October 28, 2020_
* Dependencies updated
## v0.5.0 - _October 27, 2020_
* Add `Swerve`, `SnowSwap`, `DODO` and `SushiSwap` into FQT (#7)
## v0.4.0 - _October 23, 2020_
* Use the exchange proxy as the primary allowance target (#3)

View File

@@ -26,7 +26,8 @@ library LibSignatureRichErrors {
INVALID_LENGTH,
UNSUPPORTED,
ILLEGAL,
WRONG_SIGNER
WRONG_SIGNER,
BAD_SIGNATURE_DATA
}
// solhint-disable func-name-mixedcase
@@ -49,4 +50,19 @@ library LibSignatureRichErrors {
signature
);
}
function SignatureValidationError(
SignatureValidationErrorCodes code,
bytes32 hash
)
internal
pure
returns (bytes memory)
{
return abi.encodeWithSelector(
bytes4(keccak256("SignatureValidationError(uint8,bytes32)")),
code,
hash
);
}
}

View File

@@ -0,0 +1,65 @@
/*
Copyright 2020 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/contracts/src/v06/IEtherTokenV06.sol";
import "@0x/contracts-utils/contracts/src/v06/AuthorizableV06.sol";
import "../vendor/v3/IStaking.sol";
/// @dev The collector contract for protocol fees
contract FeeCollector is AuthorizableV06 {
/// @dev Allow ether transfers to the collector.
receive() external payable { }
constructor() public {
_addAuthorizedAddress(msg.sender);
}
/// @dev Approve the staking contract and join a pool. Only an authority
/// can call this.
/// @param weth The WETH contract.
/// @param staking The staking contract.
/// @param poolId The pool ID this contract is collecting fees for.
function initialize(
IEtherTokenV06 weth,
IStaking staking,
bytes32 poolId
)
external
onlyAuthorized
{
weth.approve(address(staking), type(uint256).max);
staking.joinStakingPoolAsMaker(poolId);
}
/// @dev Convert all held ether to WETH. Only an authority can call this.
/// @param weth The WETH contract.
function convertToWeth(
IEtherTokenV06 weth
)
external
onlyAuthorized
{
// Leave 1 wei behind to avoid expensive zero-->non-zero state change.
if (address(this).balance > 1) {
weth.deposit{value: address(this).balance - 1}();
}
}
}

View File

@@ -0,0 +1,151 @@
/*
Copyright 2020 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/errors/LibRichErrorsV06.sol";
import "../../errors/LibSignatureRichErrors.sol";
/// @dev A library for validating signatures.
library LibSignature {
using LibRichErrorsV06 for bytes;
// '\x19Ethereum Signed Message:\n32\x00\x00\x00\x00' in a word.
uint256 private constant ETH_SIGN_HASH_PREFIX =
0x19457468657265756d205369676e6564204d6573736167653a0a333200000000;
/// @dev Exclusive upper limit on ECDSA signatures 'R' values.
/// The valid range is given by fig (282) of the yellow paper.
uint256 private constant ECDSA_SIGNATURE_R_LIMIT =
uint256(0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141);
/// @dev Exclusive upper limit on ECDSA signatures 'S' values.
/// The valid range is given by fig (283) of the yellow paper.
uint256 private constant ECDSA_SIGNATURE_S_LIMIT = ECDSA_SIGNATURE_R_LIMIT / 2 + 1;
/// @dev Allowed signature types.
enum SignatureType {
ILLEGAL,
INVALID,
EIP712,
ETHSIGN
}
/// @dev Encoded EC signature.
struct Signature {
// How to validate the signature.
SignatureType signatureType;
// EC Signature data.
uint8 v;
// EC Signature data.
bytes32 r;
// EC Signature data.
bytes32 s;
}
/// @dev Retrieve the signer of a signature.
/// Throws if the signature can't be validated.
/// @param hash The hash that was signed.
/// @param signature The signature.
/// @return recovered The recovered signer address.
function getSignerOfHash(
bytes32 hash,
Signature memory signature
)
internal
pure
returns (address recovered)
{
// Ensure this is a signature type that can be validated against a hash.
_validateHashCompatibleSignature(hash, signature);
if (signature.signatureType == SignatureType.EIP712) {
// Signed using EIP712
recovered = ecrecover(
hash,
signature.v,
signature.r,
signature.s
);
} else if (signature.signatureType == SignatureType.ETHSIGN) {
// Signed using `eth_sign`
// Need to hash `hash` with "\x19Ethereum Signed Message:\n32" prefix
// in packed encoding.
bytes32 ethSignHash;
assembly {
// Use scratch space
mstore(0, ETH_SIGN_HASH_PREFIX) // length of 28 bytes
mstore(28, hash) // length of 32 bytes
ethSignHash := keccak256(0, 60)
}
recovered = ecrecover(
ethSignHash,
signature.v,
signature.r,
signature.s
);
}
// `recovered` can be null if the signature values are out of range.
if (recovered == address(0)) {
LibSignatureRichErrors.SignatureValidationError(
LibSignatureRichErrors.SignatureValidationErrorCodes.BAD_SIGNATURE_DATA,
hash
).rrevert();
}
}
/// @dev Validates that a signature is compatible with a hash signee.
/// @param hash The hash that was signed.
/// @param signature The signature.
function _validateHashCompatibleSignature(
bytes32 hash,
Signature memory signature
)
private
pure
{
// Ensure the r and s are within malleability limits.
if (uint256(signature.r) >= ECDSA_SIGNATURE_R_LIMIT ||
uint256(signature.s) >= ECDSA_SIGNATURE_S_LIMIT)
{
LibSignatureRichErrors.SignatureValidationError(
LibSignatureRichErrors.SignatureValidationErrorCodes.BAD_SIGNATURE_DATA,
hash
).rrevert();
}
// Always illegal signature.
if (signature.signatureType == SignatureType.ILLEGAL) {
LibSignatureRichErrors.SignatureValidationError(
LibSignatureRichErrors.SignatureValidationErrorCodes.ILLEGAL,
hash
).rrevert();
}
// Always invalid.
if (signature.signatureType == SignatureType.INVALID) {
LibSignatureRichErrors.SignatureValidationError(
LibSignatureRichErrors.SignatureValidationErrorCodes.ALWAYS_INVALID,
hash
).rrevert();
}
// Solidity should check that the signature type is within enum range for us
// when abi-decoding.
}
}

View File

@@ -27,6 +27,9 @@ import "../ITokenSpenderFeature.sol";
library LibTokenSpender {
using LibRichErrorsV06 for bytes;
// Mask of the lower 20 bytes of a bytes32.
uint256 constant private ADDRESS_MASK = 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff;
/// @dev Transfers ERC20 tokens from `owner` to `to`.
/// @param token The token to spend.
/// @param owner The owner of the tokens.
@@ -50,11 +53,11 @@ library LibTokenSpender {
// selector for transferFrom(address,address,uint256)
mstore(ptr, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
mstore(add(ptr, 0x04), owner)
mstore(add(ptr, 0x24), to)
mstore(add(ptr, 0x04), and(owner, ADDRESS_MASK))
mstore(add(ptr, 0x24), and(to, ADDRESS_MASK))
mstore(add(ptr, 0x44), amount)
success := call(gas(), token, 0, ptr, 0x64, 0, 0)
success := call(gas(), and(token, ADDRESS_MASK), 0, ptr, 0x64, 0, 0)
let rdsize := returndatasize()

View File

@@ -0,0 +1,114 @@
/*
Copyright 2020 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/contracts/src/v06/IEtherTokenV06.sol";
import "../external/FeeCollector.sol";
import "../features/libs/LibTokenSpender.sol";
/// @dev Helpers for collecting protocol fees.
abstract contract FixinProtocolFees {
bytes32 immutable feeCollectorCodeHash;
constructor() internal {
feeCollectorCodeHash = keccak256(type(FeeCollector).creationCode);
}
/// @dev Collect the specified protocol fee in either WETH or ETH. If
/// msg.value is non-zero, the fee will be paid in ETH. Otherwise,
/// this function attempts to transfer the fee in WETH. Either way,
/// The fee is stored in a per-pool fee collector contract.
/// @param poolId The pool ID for which a fee is being collected.
/// @param amount The amount of ETH/WETH to be collected.
/// @param weth The WETH token contract.
function _collectProtocolFee(
bytes32 poolId,
uint256 amount,
IERC20TokenV06 weth
)
internal
{
FeeCollector feeCollector = _getFeeCollector(poolId);
if (msg.value == 0) {
// WETH
LibTokenSpender.spendERC20Tokens(weth, msg.sender, address(feeCollector), amount);
} else {
// ETH
(bool success,) = address(feeCollector).call{value: amount}("");
require(success, "FixinProtocolFees/ETHER_TRANSFER_FALIED");
}
}
/// @dev Transfer fees for a given pool to the staking contract.
/// @param poolId Identifies the pool whose fees are being paid.
function _transferFeesForPool(
bytes32 poolId,
IStaking staking,
IEtherTokenV06 weth
)
internal
{
FeeCollector feeCollector = _getFeeCollector(poolId);
uint256 codeSize;
assembly {
codeSize := extcodesize(feeCollector)
}
if (codeSize == 0) {
// Create and initialize the contract if necessary.
new FeeCollector{salt: poolId}();
feeCollector.initialize(weth, staking, poolId);
}
if (address(feeCollector).balance > 1) {
feeCollector.convertToWeth(weth);
}
uint256 bal = weth.balanceOf(address(feeCollector));
if (bal > 1) {
// Leave 1 wei behind to avoid high SSTORE cost of zero-->non-zero.
staking.payProtocolFee(
address(feeCollector),
address(feeCollector),
bal - 1);
}
}
/// @dev Compute the CREATE2 address for a fee collector.
/// @param poolId The fee collector's pool ID.
function _getFeeCollector(
bytes32 poolId
)
internal
view
returns (FeeCollector)
{
// Compute the CREATE2 address for the fee collector.
address payable addr = address(uint256(keccak256(abi.encodePacked(
byte(0xff),
address(this),
poolId, // pool ID is salt
feeCollectorCodeHash
))));
return FeeCollector(addr);
}
}

View File

@@ -27,6 +27,7 @@ import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol";
import "@0x/contracts-utils/contracts/src/v06/LibMathV06.sol";
import "../errors/LibTransformERC20RichErrors.sol";
import "../vendor/v3/IExchange.sol";
import "../vendor/v3/LibOrderHash.sol";
import "./bridges/IBridgeAdapter.sol";
import "./Transformer.sol";
import "./LibERC20Transformer.sol";
@@ -104,13 +105,8 @@ contract FillQuoteTransformer is
/// @dev Emitted when a trade is skipped due to a lack of funds
/// to pay the 0x Protocol fee.
/// @param ethBalance The current eth balance.
/// @param ethNeeded The current eth balance required to pay
/// the protocol fee.
event ProtocolFeeUnfunded(
uint256 ethBalance,
uint256 ethNeeded
);
/// @param orderHash The hash of the order that was skipped.
event ProtocolFeeUnfunded(bytes32 orderHash);
/// @dev The Exchange ERC20Proxy ID.
bytes4 private constant ERC20_ASSET_PROXY_ID = 0xf47261b0;
@@ -450,7 +446,11 @@ contract FillQuoteTransformer is
}
// Emit an event if we do not have sufficient ETH to cover the protocol fee.
if (state.ethRemaining < state.protocolFee) {
emit ProtocolFeeUnfunded(state.ethRemaining, state.protocolFee);
bytes32 orderHash = LibOrderHash.getTypedDataHash(
order,
exchange.EIP712_EXCHANGE_DOMAIN_HASH()
);
emit ProtocolFeeUnfunded(orderHash);
return results;
}
try

View File

@@ -22,11 +22,13 @@ pragma experimental ABIEncoderV2;
import "./mixins/MixinAdapterAddresses.sol";
import "./mixins/MixinBalancer.sol";
import "./mixins/MixinCurve.sol";
import "./mixins/MixinDodo.sol";
import "./mixins/MixinKyber.sol";
import "./mixins/MixinMooniswap.sol";
import "./mixins/MixinMStable.sol";
import "./mixins/MixinOasis.sol";
import "./mixins/MixinShell.sol";
import "./mixins/MixinSushiswap.sol";
import "./mixins/MixinUniswap.sol";
import "./mixins/MixinUniswapV2.sol";
import "./mixins/MixinZeroExBridge.sol";
@@ -35,11 +37,13 @@ contract BridgeAdapter is
MixinAdapterAddresses,
MixinBalancer,
MixinCurve,
MixinDodo,
MixinKyber,
MixinMooniswap,
MixinMStable,
MixinOasis,
MixinShell,
MixinSushiswap,
MixinUniswap,
MixinUniswapV2,
MixinZeroExBridge
@@ -48,39 +52,29 @@ contract BridgeAdapter is
address private immutable BALANCER_BRIDGE_ADDRESS;
address private immutable CREAM_BRIDGE_ADDRESS;
address private immutable CURVE_BRIDGE_ADDRESS;
address private immutable DODO_BRIDGE_ADDRESS;
address private immutable KYBER_BRIDGE_ADDRESS;
address private immutable MOONISWAP_BRIDGE_ADDRESS;
address private immutable MSTABLE_BRIDGE_ADDRESS;
address private immutable OASIS_BRIDGE_ADDRESS;
address private immutable SHELL_BRIDGE_ADDRESS;
address private immutable SNOW_SWAP_BRIDGE_ADDRESS;
address private immutable SUSHISWAP_BRIDGE_ADDRESS;
address private immutable SWERVE_BRIDGE_ADDRESS;
address private immutable UNISWAP_BRIDGE_ADDRESS;
address private immutable UNISWAP_V2_BRIDGE_ADDRESS;
/// @dev Emitted when a trade occurs.
/// @param inputToken The token the bridge is converting from.
/// @param outputToken The token the bridge is converting to.
/// @param inputTokenAmount Amount of input token.
/// @param outputTokenAmount Amount of output token.
/// @param from The bridge address, indicating the underlying source of the fill.
/// @param to The `to` address, currrently `address(this)`
event ERC20BridgeTransfer(
IERC20TokenV06 inputToken,
IERC20TokenV06 outputToken,
uint256 inputTokenAmount,
uint256 outputTokenAmount,
address from,
address to
);
constructor(AdapterAddresses memory addresses)
public
MixinBalancer()
MixinCurve()
MixinDodo(addresses)
MixinKyber(addresses)
MixinMooniswap(addresses)
MixinMStable(addresses)
MixinOasis(addresses)
MixinShell(addresses)
MixinShell()
MixinSushiswap(addresses)
MixinUniswap(addresses)
MixinUniswapV2(addresses)
MixinZeroExBridge()
@@ -92,9 +86,13 @@ contract BridgeAdapter is
MSTABLE_BRIDGE_ADDRESS = addresses.mStableBridge;
OASIS_BRIDGE_ADDRESS = addresses.oasisBridge;
SHELL_BRIDGE_ADDRESS = addresses.shellBridge;
SUSHISWAP_BRIDGE_ADDRESS = addresses.sushiswapBridge;
SWERVE_BRIDGE_ADDRESS = addresses.swerveBridge;
UNISWAP_BRIDGE_ADDRESS = addresses.uniswapBridge;
UNISWAP_V2_BRIDGE_ADDRESS = addresses.uniswapV2Bridge;
CREAM_BRIDGE_ADDRESS = addresses.creamBridge;
SNOW_SWAP_BRIDGE_ADDRESS = addresses.snowSwapBridge;
DODO_BRIDGE_ADDRESS = addresses.dodoBridge;
}
function trade(
@@ -118,12 +116,20 @@ contract BridgeAdapter is
"BridgeAdapter/INVALID_BRIDGE_ADDRESS"
);
if (bridgeAddress == CURVE_BRIDGE_ADDRESS) {
if (bridgeAddress == CURVE_BRIDGE_ADDRESS ||
bridgeAddress == SWERVE_BRIDGE_ADDRESS ||
bridgeAddress == SNOW_SWAP_BRIDGE_ADDRESS) {
boughtAmount = _tradeCurve(
buyToken,
sellAmount,
bridgeData
);
} else if (bridgeAddress == SUSHISWAP_BRIDGE_ADDRESS) {
boughtAmount = _tradeSushiswap(
buyToken,
sellAmount,
bridgeData
);
} else if (bridgeAddress == UNISWAP_V2_BRIDGE_ADDRESS) {
boughtAmount = _tradeUniswapV2(
buyToken,
@@ -136,7 +142,8 @@ contract BridgeAdapter is
sellAmount,
bridgeData
);
} else if (bridgeAddress == BALANCER_BRIDGE_ADDRESS || bridgeAddress == CREAM_BRIDGE_ADDRESS) {
} else if (bridgeAddress == BALANCER_BRIDGE_ADDRESS ||
bridgeAddress == CREAM_BRIDGE_ADDRESS) {
boughtAmount = _tradeBalancer(
buyToken,
sellAmount,
@@ -172,6 +179,12 @@ contract BridgeAdapter is
sellAmount,
bridgeData
);
} else if (bridgeAddress == DODO_BRIDGE_ADDRESS) {
boughtAmount = _tradeDodo(
buyToken,
sellAmount,
bridgeData
);
} else {
boughtAmount = _tradeZeroExBridge(
bridgeAddress,
@@ -180,7 +193,8 @@ contract BridgeAdapter is
sellAmount,
bridgeData
);
// Do not emit an event. The bridge contract should emit one itself.
// Old bridge contracts should emit an `ERC20BridgeTransfer` themselves,
// otherwise an event will be emitted from `_tradeZeroExBridge`.
return boughtAmount;
}

View File

@@ -26,20 +26,25 @@ contract MixinAdapterAddresses
address balancerBridge;
address creamBridge;
address curveBridge;
address dodoBridge;
address kyberBridge;
address mooniswapBridge;
address mStableBridge;
address oasisBridge;
address shellBridge;
address snowSwapBridge;
address swerveBridge;
address sushiswapBridge;
address uniswapBridge;
address uniswapV2Bridge;
// Exchanges
address kyberNetworkProxy;
address oasis;
address sushiswapRouter;
address uniswapV2Router;
address uniswapExchangeFactory;
address mStable;
address shell;
address dodoHelper;
// Other
address weth;
}

View File

@@ -0,0 +1,97 @@
/*
Copyright 2020 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/contracts/src/v06/LibERC20TokenV06.sol";
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
import "./MixinAdapterAddresses.sol";
interface IDODOHelper {
function querySellQuoteToken(address dodo, uint256 amount) external view returns (uint256);
}
interface IDODO {
function sellBaseToken(uint256 amount, uint256 minReceiveQuote, bytes calldata data) external returns (uint256);
function buyBaseToken(uint256 amount, uint256 maxPayQuote, bytes calldata data) external returns (uint256);
}
contract MixinDodo is
MixinAdapterAddresses
{
using LibERC20TokenV06 for IERC20TokenV06;
/// @dev Mainnet address of the `DOODO Helper` contract.
IDODOHelper private immutable DODO_HELPER;
constructor(AdapterAddresses memory addresses)
public
{
DODO_HELPER = IDODOHelper(addresses.dodoHelper);
}
function _tradeDodo(
IERC20TokenV06 /* buyToken */,
uint256 sellAmount,
bytes memory bridgeData
)
internal
returns (uint256 boughtAmount)
{
(address fromTokenAddress,
address pool,
bool isSellBase) = abi.decode(bridgeData, (address, address, bool));
// Grant the Dodo pool contract an allowance to sell the first token.
IERC20TokenV06(fromTokenAddress).approveIfBelow(pool, sellAmount);
if (isSellBase) {
// Sell the Base token directly against the contract
boughtAmount = IDODO(pool).sellBaseToken(
// amount to sell
sellAmount,
// min receive amount
1,
new bytes(0)
);
} else {
// Need to re-calculate the sell quote amount into buyBase
boughtAmount = DODO_HELPER.querySellQuoteToken(
pool,
sellAmount
);
IDODO(pool).buyBaseToken(
// amount to buy
boughtAmount,
// max pay amount
sellAmount,
new bytes(0)
);
}
return boughtAmount;
}
}

View File

@@ -37,22 +37,11 @@ interface IShell {
returns (uint256 toAmount);
}
contract MixinShell is
MixinAdapterAddresses
{
using LibERC20TokenV06 for IERC20TokenV06;
/// @dev Mainnet address of the `Shell` contract.
IShell private immutable SHELL;
constructor(AdapterAddresses memory addresses)
public
{
SHELL = IShell(addresses.shell);
}
function _tradeShell(
IERC20TokenV06 buyToken,
uint256 sellAmount,
@@ -61,15 +50,15 @@ contract MixinShell is
internal
returns (uint256 boughtAmount)
{
(address fromTokenAddress) = abi.decode(bridgeData, (address));
(address fromTokenAddress, address pool) = abi.decode(bridgeData, (address, address));
// Grant the Shell contract an allowance to sell the first token.
IERC20TokenV06(fromTokenAddress).approveIfBelow(
address(SHELL),
pool,
sellAmount
);
uint256 buyAmount = SHELL.originSwap(
boughtAmount = IShell(pool).originSwap(
fromTokenAddress,
address(buyToken),
// Sell all tokens we hold.
@@ -79,6 +68,6 @@ contract MixinShell is
// deadline
block.timestamp + 1
);
return buyAmount;
return boughtAmount;
}
}

View File

@@ -0,0 +1,79 @@
/*
Copyright 2020 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/contracts/src/v06/LibERC20TokenV06.sol";
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
import "./MixinAdapterAddresses.sol";
import "./MixinUniswapV2.sol";
contract MixinSushiswap is
MixinAdapterAddresses
{
using LibERC20TokenV06 for IERC20TokenV06;
/// @dev Mainnet address of the `SushiswapRouter` contract.
IUniswapV2Router02 private immutable SUSHISWAP_ROUTER;
constructor(AdapterAddresses memory addresses)
public
{
SUSHISWAP_ROUTER = IUniswapV2Router02(addresses.sushiswapRouter);
}
function _tradeSushiswap(
IERC20TokenV06 buyToken,
uint256 sellAmount,
bytes memory bridgeData
)
internal
returns (uint256 boughtAmount)
{
// solhint-disable indent
address[] memory path = abi.decode(bridgeData, (address[]));
// solhint-enable indent
require(path.length >= 2, "SushiswapBridge/PATH_LENGTH_MUST_BE_AT_LEAST_TWO");
require(
path[path.length - 1] == address(buyToken),
"SushiswapBridge/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"
);
// Grant the Uniswap router an allowance to sell the first token.
IERC20TokenV06(path[0]).approveIfBelow(
address(SUSHISWAP_ROUTER),
sellAmount
);
uint[] memory amounts = SUSHISWAP_ROUTER.swapExactTokensForTokens(
// Sell all tokens we hold.
sellAmount,
// Minimum buy amount.
1,
// Convert to `buyToken` along this path.
path,
// Recipient is `this`.
address(this),
// Expires after this block.
block.timestamp
);
return amounts[amounts.length-1];
}
}

View File

@@ -21,32 +21,31 @@ pragma solidity ^0.6.5;
import "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.sol";
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol";
import "../../../vendor/ILiquidityProvider.sol";
import "../../../vendor/v3/IERC20Bridge.sol";
interface IERC20Bridge {
/// @dev Transfers `amount` of the ERC20 `buyToken` from `from` to `to`.
/// @param buyToken The address of the ERC20 token to transfer.
/// @param from Address to transfer asset from.
/// @param to Address to transfer asset to.
/// @param amount Amount of asset to transfer.
/// @param bridgeData Arbitrary asset data needed by the bridge contract.
/// @return success The magic bytes `0xdc1600f3` if successful.
function bridgeTransferFrom(
IERC20TokenV06 buyToken,
address from,
address to,
uint256 amount,
bytes calldata bridgeData
)
external
returns (bytes4 success);
}
contract MixinZeroExBridge {
using LibERC20TokenV06 for IERC20TokenV06;
using LibSafeMathV06 for uint256;
/// @dev Emitted when a trade occurs.
/// @param inputToken The token the bridge is converting from.
/// @param outputToken The token the bridge is converting to.
/// @param inputTokenAmount Amount of input token.
/// @param outputTokenAmount Amount of output token.
/// @param from The bridge address, indicating the underlying source of the fill.
/// @param to The `to` address, currrently `address(this)`
event ERC20BridgeTransfer(
IERC20TokenV06 inputToken,
IERC20TokenV06 outputToken,
uint256 inputTokenAmount,
uint256 outputTokenAmount,
address from,
address to
);
function _tradeZeroExBridge(
address bridgeAddress,
IERC20TokenV06 sellToken,
@@ -57,19 +56,37 @@ contract MixinZeroExBridge {
internal
returns (uint256 boughtAmount)
{
uint256 balanceBefore = buyToken.balanceOf(address(this));
// Trade the good old fashioned way
sellToken.compatTransfer(
bridgeAddress,
sellAmount
);
IERC20Bridge(bridgeAddress).bridgeTransferFrom(
buyToken,
address(bridgeAddress),
address(this),
1, // amount to transfer back from the bridge
bridgeData
);
boughtAmount = buyToken.balanceOf(address(this)).safeSub(balanceBefore);
try ILiquidityProvider(bridgeAddress).sellTokenForToken(
address(sellToken),
address(buyToken),
address(this), // recipient
1, // minBuyAmount
bridgeData
) returns (uint256 _boughtAmount) {
boughtAmount = _boughtAmount;
emit ERC20BridgeTransfer(
sellToken,
buyToken,
sellAmount,
boughtAmount,
bridgeAddress,
address(this)
);
} catch {
uint256 balanceBefore = buyToken.balanceOf(address(this));
IERC20Bridge(bridgeAddress).bridgeTransferFrom(
address(buyToken),
bridgeAddress,
address(this), // recipient
1, // minBuyAmount
bridgeData
);
boughtAmount = buyToken.balanceOf(address(this)).safeSub(balanceBefore);
}
}
}

View File

@@ -0,0 +1,92 @@
/*
Copyright 2020 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;
interface ILiquidityProvider {
/// @dev Trades `inputToken` for `outputToken`. The amount of `inputToken`
/// to sell must be transferred to the contract prior to calling this
/// function to trigger the trade.
/// @param inputToken The token being sold.
/// @param outputToken The token being bought.
/// @param recipient The recipient of the bought tokens.
/// @param minBuyAmount The minimum acceptable amount of `outputToken` to buy.
/// @param auxiliaryData Arbitrary auxiliary data supplied to the contract.
/// @return boughtAmount The amount of `outputToken` bought.
function sellTokenForToken(
address inputToken,
address outputToken,
address recipient,
uint256 minBuyAmount,
bytes calldata auxiliaryData
)
external
returns (uint256 boughtAmount);
/// @dev Trades ETH for token. ETH must either be attached to this function
/// call or sent to the contract prior to calling this function to
/// trigger the trade.
/// @param outputToken The token being bought.
/// @param recipient The recipient of the bought tokens.
/// @param minBuyAmount The minimum acceptable amount of `outputToken` to buy.
/// @param auxiliaryData Arbitrary auxiliary data supplied to the contract.
/// @return boughtAmount The amount of `outputToken` bought.
function sellEthForToken(
address outputToken,
address recipient,
uint256 minBuyAmount,
bytes calldata auxiliaryData
)
external
payable
returns (uint256 boughtAmount);
/// @dev Trades token for ETH. The token must be sent to the contract prior
/// to calling this function to trigger the trade.
/// @param inputToken The token being sold.
/// @param recipient The recipient of the bought tokens.
/// @param minBuyAmount The minimum acceptable amount of ETH to buy.
/// @param auxiliaryData Arbitrary auxiliary data supplied to the contract.
/// @return boughtAmount The amount of ETH bought.
function sellTokenForEth(
address inputToken,
address payable recipient,
uint256 minBuyAmount,
bytes calldata auxiliaryData
)
external
returns (uint256 boughtAmount);
/// @dev Quotes the amount of `outputToken` that would be obtained by
/// selling `sellAmount` of `inputToken`.
/// @param inputToken Address of the taker token (what to sell). Use
/// the wETH address if selling ETH.
/// @param outputToken Address of the maker token (what to buy). Use
/// the wETH address if buying ETH.
/// @param sellAmount Amount of `inputToken` to sell.
/// @return outputTokenAmount Amount of `outputToken` that would be obtained.
function getSellQuote(
address inputToken,
address outputToken,
uint256 sellAmount
)
external
view
returns (uint256 outputTokenAmount);
}

View File

@@ -104,4 +104,9 @@ interface IExchange {
external
view
returns (address proxyAddress);
function EIP712_EXCHANGE_DOMAIN_HASH()
external
view
returns (bytes32 domainHash);
}

View File

@@ -0,0 +1,24 @@
/*
Copyright 2020 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;
interface IStaking {
function joinStakingPoolAsMaker(bytes32) external;
function payProtocolFee(address, address, uint256) external payable;
}

View File

@@ -0,0 +1,167 @@
/*
Copyright 2020 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;
import "./IExchange.sol";
library LibOrderHash {
using LibOrderHash for IExchange.Order;
// Hash for the EIP712 Order Schema:
// keccak256(abi.encodePacked(
// "Order(",
// "address makerAddress,",
// "address takerAddress,",
// "address feeRecipientAddress,",
// "address senderAddress,",
// "uint256 makerAssetAmount,",
// "uint256 takerAssetAmount,",
// "uint256 makerFee,",
// "uint256 takerFee,",
// "uint256 expirationTimeSeconds,",
// "uint256 salt,",
// "bytes makerAssetData,",
// "bytes takerAssetData,",
// "bytes makerFeeAssetData,",
// "bytes takerFeeAssetData",
// ")"
// ))
bytes32 constant internal _EIP712_ORDER_SCHEMA_HASH =
0xf80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a7534;
/// @dev Calculates the EIP712 typed data hash of an order with a given domain separator.
/// @param order The order structure.
/// @param eip712ExchangeDomainHash Domain hash for the Exchange.
/// @return orderHash EIP712 typed data hash of the order.
function getTypedDataHash(IExchange.Order memory order, bytes32 eip712ExchangeDomainHash)
internal
pure
returns (bytes32 orderHash)
{
orderHash = _hashEIP712Message(
eip712ExchangeDomainHash,
order.getStructHash()
);
return orderHash;
}
/// @dev Calculates EIP712 hash of the order struct.
/// @param order The order structure.
/// @return result EIP712 hash of the order struct.
function getStructHash(IExchange.Order memory order)
internal
pure
returns (bytes32 result)
{
bytes32 schemaHash = _EIP712_ORDER_SCHEMA_HASH;
bytes memory makerAssetData = order.makerAssetData;
bytes memory takerAssetData = order.takerAssetData;
bytes memory makerFeeAssetData = order.makerFeeAssetData;
bytes memory takerFeeAssetData = order.takerFeeAssetData;
// Assembly for more efficiently computing:
// keccak256(abi.encodePacked(
// EIP712_ORDER_SCHEMA_HASH,
// uint256(order.makerAddress),
// uint256(order.takerAddress),
// uint256(order.feeRecipientAddress),
// uint256(order.senderAddress),
// order.makerAssetAmount,
// order.takerAssetAmount,
// order.makerFee,
// order.takerFee,
// order.expirationTimeSeconds,
// order.salt,
// keccak256(order.makerAssetData),
// keccak256(order.takerAssetData),
// keccak256(order.makerFeeAssetData),
// keccak256(order.takerFeeAssetData)
// ));
assembly {
// Assert order offset (this is an internal error that should never be triggered)
if lt(order, 32) {
invalid()
}
// Calculate memory addresses that will be swapped out before hashing
let pos1 := sub(order, 32)
let pos2 := add(order, 320)
let pos3 := add(order, 352)
let pos4 := add(order, 384)
let pos5 := add(order, 416)
// Backup
let temp1 := mload(pos1)
let temp2 := mload(pos2)
let temp3 := mload(pos3)
let temp4 := mload(pos4)
let temp5 := mload(pos5)
// Hash in place
mstore(pos1, schemaHash)
mstore(pos2, keccak256(add(makerAssetData, 32), mload(makerAssetData))) // store hash of makerAssetData
mstore(pos3, keccak256(add(takerAssetData, 32), mload(takerAssetData))) // store hash of takerAssetData
mstore(pos4, keccak256(add(makerFeeAssetData, 32), mload(makerFeeAssetData))) // store hash of makerFeeAssetData
mstore(pos5, keccak256(add(takerFeeAssetData, 32), mload(takerFeeAssetData))) // store hash of takerFeeAssetData
result := keccak256(pos1, 480)
// Restore
mstore(pos1, temp1)
mstore(pos2, temp2)
mstore(pos3, temp3)
mstore(pos4, temp4)
mstore(pos5, temp5)
}
return result;
}
/// @dev Calculates EIP712 encoding for a hash struct with a given domain hash.
/// @param eip712DomainHash Hash of the domain domain separator data, computed
/// with getDomainHash().
/// @param hashStruct The EIP712 hash struct.
/// @return result EIP712 hash applied to the given EIP712 Domain.
function _hashEIP712Message(bytes32 eip712DomainHash, bytes32 hashStruct)
internal
pure
returns (bytes32 result)
{
// Assembly for more efficient computing:
// keccak256(abi.encodePacked(
// EIP191_HEADER,
// EIP712_DOMAIN_HASH,
// hashStruct
// ));
assembly {
// Load free memory pointer
let memPtr := mload(64)
mstore(memPtr, 0x1901000000000000000000000000000000000000000000000000000000000000) // EIP191 header
mstore(add(memPtr, 2), eip712DomainHash) // EIP712 domain hash
mstore(add(memPtr, 34), hashStruct) // Hash of struct
// Compute hash
result := keccak256(memPtr, 66)
}
return result;
}
}

View File

@@ -35,6 +35,8 @@ contract TestFillQuoteTransformerExchange {
uint256 makerAssetMintRatio;
}
bytes32 public constant EIP712_EXCHANGE_DOMAIN_HASH = 0xaa81d881b1adbbf115e15b849cb9cdc643cad3c6a90f30eb505954af943247e6;
uint256 private constant PROTOCOL_FEE_MULTIPLIER = 1337;
using LibSafeMathV06 for uint256;

View File

@@ -0,0 +1,34 @@
/*
Copyright 2020 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 "../src/features/libs/LibSignature.sol";
contract TestLibSignature {
function getSignerOfHash(bytes32 hash, LibSignature.Signature calldata signature)
external
pure
returns (address signer)
{
return LibSignature.getSignerOfHash(hash, signature);
}
}

View File

@@ -0,0 +1,55 @@
/*
Copyright 2020 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 "../src/fixins/FixinProtocolFees.sol";
contract TestProtocolFees is FixinProtocolFees {
function collectProtocolFee(
bytes32 poolId,
uint256 amount,
IERC20TokenV06 weth
)
external
payable
{
_collectProtocolFee(poolId, amount, weth);
}
function transferFeesForPool(
bytes32 poolId,
IStaking staking,
IEtherTokenV06 weth
)
external
{
_transferFeesForPool(poolId, staking, weth);
}
function getFeeCollector(
bytes32 poolId
)
external
view
returns (FeeCollector)
{
return _getFeeCollector(poolId);
}
}

View File

@@ -0,0 +1,49 @@
/*
Copyright 2020 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/contracts/src/v06/IEtherTokenV06.sol";
contract TestStaking {
mapping(address => bytes32) public poolForMaker;
mapping(bytes32 => uint256) public balanceForPool;
IEtherTokenV06 immutable weth;
constructor(IEtherTokenV06 _weth) public {
weth = _weth;
}
function joinStakingPoolAsMaker(bytes32 poolId) external {
poolForMaker[msg.sender] = poolId;
}
function payProtocolFee(
address makerAddress,
address payerAddress,
uint256 amount
)
external
payable
{
require(weth.transferFrom(payerAddress, address(this), amount));
balanceForPool[poolForMaker[makerAddress]] += amount;
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-zero-ex",
"version": "0.4.0",
"version": "0.8.0",
"engines": {
"node": ">=6.12"
},
@@ -10,8 +10,9 @@
"test": "test"
},
"scripts": {
"build": "yarn pre_build && tsc -b",
"build": "yarn pre_build && yarn build:ts",
"build:ci": "yarn build",
"build:ts": "tsc -b",
"pre_build": "run-s compile contracts:gen generate_contract_wrappers contracts:copy",
"test": "yarn run_mocha",
"rebuild_and_test": "run-s build test",
@@ -41,7 +42,7 @@
"config": {
"publicInterfaceContracts": "IZeroEx,ZeroEx,FullMigration,InitialMigration,IFlashWallet,IAllowanceTarget,IERC20Transformer,IOwnableFeature,ISimpleFunctionRegistryFeature,ITokenSpenderFeature,ITransformERC20Feature,FillQuoteTransformer,PayTakerTransformer,WethTransformer,OwnableFeature,SimpleFunctionRegistryFeature,TransformERC20Feature,TokenSpenderFeature,AffiliateFeeTransformer,SignatureValidatorFeature,MetaTransactionsFeature,LogMetadataTransformer,BridgeAdapter,LiquidityProviderFeature",
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
"abis": "./test/generated-artifacts/@(AffiliateFeeTransformer|AllowanceTarget|BootstrapFeature|BridgeAdapter|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinReentrancyGuard|FlashWallet|FullMigration|IAllowanceTarget|IBootstrapFeature|IBridgeAdapter|IERC20Bridge|IERC20Transformer|IExchange|IFeature|IFlashWallet|IGasToken|ILiquidityProviderFeature|IMetaTransactionsFeature|IOwnableFeature|ISignatureValidatorFeature|ISimpleFunctionRegistryFeature|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC20Transformer|LibLiquidityProviderRichErrors|LibLiquidityProviderStorage|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignatureRichErrors|LibSignedCallData|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibSpenderRichErrors|LibStorage|LibTokenSpender|LibTokenSpenderStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LogMetadataTransformer|MetaTransactionsFeature|MixinAdapterAddresses|MixinBalancer|MixinCurve|MixinKyber|MixinMStable|MixinMooniswap|MixinOasis|MixinShell|MixinUniswap|MixinUniswapV2|MixinZeroExBridge|OwnableFeature|PayTakerTransformer|SignatureValidatorFeature|SimpleFunctionRegistryFeature|TestBridge|TestCallTarget|TestDelegateCaller|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFullMigration|TestInitialMigration|TestLibTokenSpender|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC20Token|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestTokenSpender|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestWeth|TestWethTransformerHost|TestZeroExFeature|TokenSpenderFeature|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|WethTransformer|ZeroEx).json"
"abis": "./test/generated-artifacts/@(AffiliateFeeTransformer|AllowanceTarget|BootstrapFeature|BridgeAdapter|FeeCollector|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinProtocolFees|FixinReentrancyGuard|FlashWallet|FullMigration|IAllowanceTarget|IBootstrapFeature|IBridgeAdapter|IERC20Bridge|IERC20Transformer|IExchange|IFeature|IFlashWallet|IGasToken|ILiquidityProvider|ILiquidityProviderFeature|IMetaTransactionsFeature|IOwnableFeature|ISignatureValidatorFeature|ISimpleFunctionRegistryFeature|IStaking|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC20Transformer|LibLiquidityProviderRichErrors|LibLiquidityProviderStorage|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibOrderHash|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignature|LibSignatureRichErrors|LibSignedCallData|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibSpenderRichErrors|LibStorage|LibTokenSpender|LibTokenSpenderStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LogMetadataTransformer|MetaTransactionsFeature|MixinAdapterAddresses|MixinBalancer|MixinCurve|MixinDodo|MixinKyber|MixinMStable|MixinMooniswap|MixinOasis|MixinShell|MixinSushiswap|MixinUniswap|MixinUniswapV2|MixinZeroExBridge|OwnableFeature|PayTakerTransformer|SignatureValidatorFeature|SimpleFunctionRegistryFeature|TestBridge|TestCallTarget|TestDelegateCaller|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFullMigration|TestInitialMigration|TestLibSignature|TestLibTokenSpender|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC20Token|TestProtocolFees|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestStaking|TestTokenSpender|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestWeth|TestWethTransformerHost|TestZeroExFeature|TokenSpenderFeature|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|WethTransformer|ZeroEx).json"
},
"repository": {
"type": "git",
@@ -53,13 +54,12 @@
},
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex",
"devDependencies": {
"@0x/abi-gen": "^5.4.3",
"@0x/contracts-erc20": "^3.2.2",
"@0x/contracts-gen": "2.0.13",
"@0x/contracts-test-utils": "^5.3.5",
"@0x/dev-utils": "^3.3.4",
"@0x/order-utils": "^10.4.0",
"@0x/sol-compiler": "^4.2.3",
"@0x/abi-gen": "^5.4.7",
"@0x/contracts-erc20": "^3.2.7",
"@0x/contracts-gen": "2.0.18",
"@0x/contracts-test-utils": "^5.3.10",
"@0x/dev-utils": "^4.0.1",
"@0x/sol-compiler": "^4.2.7",
"@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.3",
"@types/lodash": "4.14.104",
@@ -75,12 +75,13 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^6.2.7",
"@0x/subproviders": "^6.1.5",
"@0x/types": "^3.2.4",
"@0x/base-contract": "^6.2.11",
"@0x/order-utils": "^10.4.5",
"@0x/subproviders": "^6.1.9",
"@0x/types": "^3.3.0",
"@0x/typescript-typings": "^5.1.5",
"@0x/utils": "^5.6.3",
"@0x/web3-wrapper": "^7.2.4",
"@0x/utils": "^6.1.0",
"@0x/web3-wrapper": "^7.2.8",
"ethereum-types": "^3.3.3",
"ethereumjs-util": "^5.1.1"
},

View File

@@ -32,6 +32,7 @@ export { artifacts } from './artifacts';
export * from './migration';
export * from './nonce_utils';
export * from './signed_call_data';
export * from './signature_utils';
export {
AffiliateFeeTransformerContract,
BridgeAdapterContract,
@@ -48,3 +49,6 @@ export {
WethTransformerContract,
ZeroExContract,
} from './wrappers';
export * from './revert_errors';
export { EIP712TypedData } from '@0x/types';
export { SupportedProvider } from '@0x/subproviders';

View File

@@ -0,0 +1,30 @@
// TODO(dorothy-zbornak): Move these into `@0x/protocol-utils` whenever that
// becomes a thing.
// tslint:disable:max-classes-per-file
import { RevertError } from '@0x/utils';
export enum SignatureValidationErrorCodes {
AlwaysInvalid = 0,
InvalidLength = 1,
Unsupported = 2,
Illegal = 3,
WrongSigner = 4,
BadSignatureData = 5,
}
// tslint:disable:max-classes-per-file
export class SignatureValidationError extends RevertError {
constructor(code?: SignatureValidationErrorCodes, hash?: string) {
super('SignatureValidationError', 'SignatureValidationError(uint8 code, bytes32 hash)', {
code,
hash,
});
}
}
const types = [SignatureValidationError];
// Register the types we've defined.
for (const type of types) {
RevertError.registerType(type);
}

View File

@@ -0,0 +1,113 @@
import { signatureUtils } from '@0x/order-utils';
import { SupportedProvider } from '@0x/subproviders';
import { EIP712TypedData } from '@0x/types';
import { hexUtils, signTypedDataUtils } from '@0x/utils';
import * as ethjs from 'ethereumjs-util';
/**
* Valid signature types on the Exchange Proxy.
*/
export enum SignatureType {
Illegal = 0,
Invalid = 1,
EIP712 = 2,
EthSign = 3,
}
/**
* Represents a raw EC signature.
*/
export interface ECSignature {
v: number;
r: string;
s: string;
}
/**
* A complete signature on the Exchange Proxy.
*/
export interface Signature extends ECSignature {
signatureType: SignatureType;
}
/**
* Sign a hash with the EthSign signature type on a provider.
*/
export async function ethSignHashFromProviderAsync(
signer: string,
hash: string,
provider: SupportedProvider,
): Promise<Signature> {
const signatureBytes = await signatureUtils.ecSignHashAsync(provider, hash, signer);
const parsed = parsePackedSignatureBytes(signatureBytes);
assertSignatureType(parsed, SignatureType.EthSign);
return parsed;
}
/**
* Sign a hash with the EthSign signature type, given a private key.
*/
export function ethSignHashWithKey(hash: string, key: string): Signature {
const ethHash = hexUtils.toHex(
ethjs.sha3(hexUtils.concat(ethjs.toBuffer('\x19Ethereum Signed Message:\n32'), hash)),
);
return {
...ecSignHashWithKey(ethHash, key),
signatureType: SignatureType.EthSign,
};
}
/**
* Sign a typed data object with the EIP712 signature type, given a private key.
*/
export function eip712SignTypedDataWithKey(typedData: EIP712TypedData, key: string): Signature {
const hash = hexUtils.toHex(signTypedDataUtils.generateTypedDataHash(typedData));
return {
...ecSignHashWithKey(hash, key),
signatureType: SignatureType.EIP712,
};
}
/**
* Sign an EIP712 hash with the EIP712 signature type, given a private key.
*/
export function eip712SignHashWithKey(hash: string, key: string): Signature {
return {
...ecSignHashWithKey(hash, key),
signatureType: SignatureType.EIP712,
};
}
/**
* Generate the EC signature for a hash given a private key.
*/
export function ecSignHashWithKey(hash: string, key: string): ECSignature {
const { v, r, s } = ethjs.ecsign(ethjs.toBuffer(hash), ethjs.toBuffer(key));
return {
v,
r: ethjs.bufferToHex(r),
s: ethjs.bufferToHex(s),
};
}
function assertSignatureType(signature: Signature, expectedType: SignatureType): void {
if (signature.signatureType !== expectedType) {
throw new Error(`Expected signature type to be ${expectedType} but received ${signature.signatureType}.`);
}
}
function parsePackedSignatureBytes(signatureBytes: string): Signature {
if (hexUtils.size(signatureBytes) !== 66) {
throw new Error(`Expected packed signatureBytes to be 66 bytes long: ${signatureBytes}`);
}
const typeId = parseInt(signatureBytes.slice(-2), 16) as SignatureType;
if (!Object.values(SignatureType).includes(typeId)) {
throw new Error(`Invalid signatureBytes type ID detected: ${typeId}`);
}
return {
signatureType: typeId,
v: parseInt(signatureBytes.slice(2, 4), 16),
r: hexUtils.slice(signatureBytes, 1, 33),
s: hexUtils.slice(signatureBytes, 33),
};
}

View File

@@ -9,9 +9,11 @@ import * as AffiliateFeeTransformer from '../test/generated-artifacts/AffiliateF
import * as AllowanceTarget from '../test/generated-artifacts/AllowanceTarget.json';
import * as BootstrapFeature from '../test/generated-artifacts/BootstrapFeature.json';
import * as BridgeAdapter from '../test/generated-artifacts/BridgeAdapter.json';
import * as FeeCollector from '../test/generated-artifacts/FeeCollector.json';
import * as FillQuoteTransformer from '../test/generated-artifacts/FillQuoteTransformer.json';
import * as FixinCommon from '../test/generated-artifacts/FixinCommon.json';
import * as FixinEIP712 from '../test/generated-artifacts/FixinEIP712.json';
import * as FixinProtocolFees from '../test/generated-artifacts/FixinProtocolFees.json';
import * as FixinReentrancyGuard from '../test/generated-artifacts/FixinReentrancyGuard.json';
import * as FlashWallet from '../test/generated-artifacts/FlashWallet.json';
import * as FullMigration from '../test/generated-artifacts/FullMigration.json';
@@ -24,12 +26,14 @@ import * as IExchange from '../test/generated-artifacts/IExchange.json';
import * as IFeature from '../test/generated-artifacts/IFeature.json';
import * as IFlashWallet from '../test/generated-artifacts/IFlashWallet.json';
import * as IGasToken from '../test/generated-artifacts/IGasToken.json';
import * as ILiquidityProvider from '../test/generated-artifacts/ILiquidityProvider.json';
import * as ILiquidityProviderFeature from '../test/generated-artifacts/ILiquidityProviderFeature.json';
import * as IMetaTransactionsFeature from '../test/generated-artifacts/IMetaTransactionsFeature.json';
import * as InitialMigration from '../test/generated-artifacts/InitialMigration.json';
import * as IOwnableFeature from '../test/generated-artifacts/IOwnableFeature.json';
import * as ISignatureValidatorFeature from '../test/generated-artifacts/ISignatureValidatorFeature.json';
import * as ISimpleFunctionRegistryFeature from '../test/generated-artifacts/ISimpleFunctionRegistryFeature.json';
import * as IStaking from '../test/generated-artifacts/IStaking.json';
import * as ITestSimpleFunctionRegistryFeature from '../test/generated-artifacts/ITestSimpleFunctionRegistryFeature.json';
import * as ITokenSpenderFeature from '../test/generated-artifacts/ITokenSpenderFeature.json';
import * as ITransformERC20Feature from '../test/generated-artifacts/ITransformERC20Feature.json';
@@ -43,11 +47,13 @@ import * as LibLiquidityProviderStorage from '../test/generated-artifacts/LibLiq
import * as LibMetaTransactionsRichErrors from '../test/generated-artifacts/LibMetaTransactionsRichErrors.json';
import * as LibMetaTransactionsStorage from '../test/generated-artifacts/LibMetaTransactionsStorage.json';
import * as LibMigrate from '../test/generated-artifacts/LibMigrate.json';
import * as LibOrderHash from '../test/generated-artifacts/LibOrderHash.json';
import * as LibOwnableRichErrors from '../test/generated-artifacts/LibOwnableRichErrors.json';
import * as LibOwnableStorage from '../test/generated-artifacts/LibOwnableStorage.json';
import * as LibProxyRichErrors from '../test/generated-artifacts/LibProxyRichErrors.json';
import * as LibProxyStorage from '../test/generated-artifacts/LibProxyStorage.json';
import * as LibReentrancyGuardStorage from '../test/generated-artifacts/LibReentrancyGuardStorage.json';
import * as LibSignature from '../test/generated-artifacts/LibSignature.json';
import * as LibSignatureRichErrors from '../test/generated-artifacts/LibSignatureRichErrors.json';
import * as LibSignedCallData from '../test/generated-artifacts/LibSignedCallData.json';
import * as LibSimpleFunctionRegistryRichErrors from '../test/generated-artifacts/LibSimpleFunctionRegistryRichErrors.json';
@@ -65,11 +71,13 @@ import * as MetaTransactionsFeature from '../test/generated-artifacts/MetaTransa
import * as MixinAdapterAddresses from '../test/generated-artifacts/MixinAdapterAddresses.json';
import * as MixinBalancer from '../test/generated-artifacts/MixinBalancer.json';
import * as MixinCurve from '../test/generated-artifacts/MixinCurve.json';
import * as MixinDodo from '../test/generated-artifacts/MixinDodo.json';
import * as MixinKyber from '../test/generated-artifacts/MixinKyber.json';
import * as MixinMooniswap from '../test/generated-artifacts/MixinMooniswap.json';
import * as MixinMStable from '../test/generated-artifacts/MixinMStable.json';
import * as MixinOasis from '../test/generated-artifacts/MixinOasis.json';
import * as MixinShell from '../test/generated-artifacts/MixinShell.json';
import * as MixinSushiswap from '../test/generated-artifacts/MixinSushiswap.json';
import * as MixinUniswap from '../test/generated-artifacts/MixinUniswap.json';
import * as MixinUniswapV2 from '../test/generated-artifacts/MixinUniswapV2.json';
import * as MixinZeroExBridge from '../test/generated-artifacts/MixinZeroExBridge.json';
@@ -85,13 +93,16 @@ import * as TestFillQuoteTransformerExchange from '../test/generated-artifacts/T
import * as TestFillQuoteTransformerHost from '../test/generated-artifacts/TestFillQuoteTransformerHost.json';
import * as TestFullMigration from '../test/generated-artifacts/TestFullMigration.json';
import * as TestInitialMigration from '../test/generated-artifacts/TestInitialMigration.json';
import * as TestLibSignature from '../test/generated-artifacts/TestLibSignature.json';
import * as TestLibTokenSpender from '../test/generated-artifacts/TestLibTokenSpender.json';
import * as TestMetaTransactionsTransformERC20Feature from '../test/generated-artifacts/TestMetaTransactionsTransformERC20Feature.json';
import * as TestMigrator from '../test/generated-artifacts/TestMigrator.json';
import * as TestMintableERC20Token from '../test/generated-artifacts/TestMintableERC20Token.json';
import * as TestMintTokenERC20Transformer from '../test/generated-artifacts/TestMintTokenERC20Transformer.json';
import * as TestProtocolFees from '../test/generated-artifacts/TestProtocolFees.json';
import * as TestSimpleFunctionRegistryFeatureImpl1 from '../test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl1.json';
import * as TestSimpleFunctionRegistryFeatureImpl2 from '../test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl2.json';
import * as TestStaking from '../test/generated-artifacts/TestStaking.json';
import * as TestTokenSpender from '../test/generated-artifacts/TestTokenSpender.json';
import * as TestTokenSpenderERC20Token from '../test/generated-artifacts/TestTokenSpenderERC20Token.json';
import * as TestTransformerBase from '../test/generated-artifacts/TestTransformerBase.json';
@@ -122,6 +133,7 @@ export const artifacts = {
LibTransformERC20RichErrors: LibTransformERC20RichErrors as ContractArtifact,
LibWalletRichErrors: LibWalletRichErrors as ContractArtifact,
AllowanceTarget: AllowanceTarget as ContractArtifact,
FeeCollector: FeeCollector as ContractArtifact,
FlashWallet: FlashWallet as ContractArtifact,
IAllowanceTarget: IAllowanceTarget as ContractArtifact,
IFlashWallet: IFlashWallet as ContractArtifact,
@@ -145,10 +157,12 @@ export const artifacts = {
TokenSpenderFeature: TokenSpenderFeature as ContractArtifact,
TransformERC20Feature: TransformERC20Feature as ContractArtifact,
UniswapFeature: UniswapFeature as ContractArtifact,
LibSignature: LibSignature as ContractArtifact,
LibSignedCallData: LibSignedCallData as ContractArtifact,
LibTokenSpender: LibTokenSpender as ContractArtifact,
FixinCommon: FixinCommon as ContractArtifact,
FixinEIP712: FixinEIP712 as ContractArtifact,
FixinProtocolFees: FixinProtocolFees as ContractArtifact,
FixinReentrancyGuard: FixinReentrancyGuard as ContractArtifact,
FullMigration: FullMigration as ContractArtifact,
InitialMigration: InitialMigration as ContractArtifact,
@@ -176,17 +190,22 @@ export const artifacts = {
MixinAdapterAddresses: MixinAdapterAddresses as ContractArtifact,
MixinBalancer: MixinBalancer as ContractArtifact,
MixinCurve: MixinCurve as ContractArtifact,
MixinDodo: MixinDodo as ContractArtifact,
MixinKyber: MixinKyber as ContractArtifact,
MixinMStable: MixinMStable as ContractArtifact,
MixinMooniswap: MixinMooniswap as ContractArtifact,
MixinOasis: MixinOasis as ContractArtifact,
MixinShell: MixinShell as ContractArtifact,
MixinSushiswap: MixinSushiswap as ContractArtifact,
MixinUniswap: MixinUniswap as ContractArtifact,
MixinUniswapV2: MixinUniswapV2 as ContractArtifact,
MixinZeroExBridge: MixinZeroExBridge as ContractArtifact,
ILiquidityProvider: ILiquidityProvider as ContractArtifact,
IERC20Bridge: IERC20Bridge as ContractArtifact,
IExchange: IExchange as ContractArtifact,
IGasToken: IGasToken as ContractArtifact,
IStaking: IStaking as ContractArtifact,
LibOrderHash: LibOrderHash as ContractArtifact,
ITestSimpleFunctionRegistryFeature: ITestSimpleFunctionRegistryFeature as ContractArtifact,
TestBridge: TestBridge as ContractArtifact,
TestCallTarget: TestCallTarget as ContractArtifact,
@@ -196,13 +215,16 @@ export const artifacts = {
TestFillQuoteTransformerHost: TestFillQuoteTransformerHost as ContractArtifact,
TestFullMigration: TestFullMigration as ContractArtifact,
TestInitialMigration: TestInitialMigration as ContractArtifact,
TestLibSignature: TestLibSignature as ContractArtifact,
TestLibTokenSpender: TestLibTokenSpender as ContractArtifact,
TestMetaTransactionsTransformERC20Feature: TestMetaTransactionsTransformERC20Feature as ContractArtifact,
TestMigrator: TestMigrator as ContractArtifact,
TestMintTokenERC20Transformer: TestMintTokenERC20Transformer as ContractArtifact,
TestMintableERC20Token: TestMintableERC20Token as ContractArtifact,
TestProtocolFees: TestProtocolFees as ContractArtifact,
TestSimpleFunctionRegistryFeatureImpl1: TestSimpleFunctionRegistryFeatureImpl1 as ContractArtifact,
TestSimpleFunctionRegistryFeatureImpl2: TestSimpleFunctionRegistryFeatureImpl2 as ContractArtifact,
TestStaking: TestStaking as ContractArtifact,
TestTokenSpender: TestTokenSpender as ContractArtifact,
TestTokenSpenderERC20Token: TestTokenSpenderERC20Token as ContractArtifact,
TestTransformERC20: TestTransformERC20 as ContractArtifact,

View File

@@ -0,0 +1,98 @@
import { blockchainTests, expect } from '@0x/contracts-test-utils';
import { hexUtils } from '@0x/utils';
import * as ethjs from 'ethereumjs-util';
import { SignatureValidationError, SignatureValidationErrorCodes } from '../src/revert_errors';
import { eip712SignHashWithKey, ethSignHashWithKey, SignatureType } from '../src/signature_utils';
import { artifacts } from './artifacts';
import { TestLibSignatureContract } from './wrappers';
const EMPTY_REVERT = 'reverted with no data';
blockchainTests.resets('LibSignature library', env => {
let testLib: TestLibSignatureContract;
let signerKey: string;
let signer: string;
before(async () => {
signerKey = hexUtils.random();
signer = ethjs.bufferToHex(ethjs.privateToAddress(ethjs.toBuffer(signerKey)));
testLib = await TestLibSignatureContract.deployFrom0xArtifactAsync(
artifacts.TestLibSignature,
env.provider,
env.txDefaults,
artifacts,
);
});
describe('getSignerOfHash()', () => {
it('can recover the signer of an EIP712 signature', async () => {
const hash = hexUtils.random();
const sig = eip712SignHashWithKey(hash, signerKey);
const recovered = await testLib.getSignerOfHash(hash, sig).callAsync();
expect(recovered).to.eq(signer);
});
it('can recover the signer of an EthSign signature', async () => {
const hash = hexUtils.random();
const sig = ethSignHashWithKey(hash, signerKey);
const recovered = await testLib.getSignerOfHash(hash, sig).callAsync();
expect(recovered).to.eq(signer);
});
it('throws if the signature type is out of range', async () => {
const hash = hexUtils.random();
const badType = (Object.values(SignatureType).slice(-1)[0] as number) + 1;
const sig = {
...ethSignHashWithKey(hash, signerKey),
signatureType: badType,
};
return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.be.rejectedWith(EMPTY_REVERT);
});
it('throws if the signature data is malformed', async () => {
const hash = hexUtils.random();
const sig = {
...ethSignHashWithKey(hash, signerKey),
v: 1,
};
return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
new SignatureValidationError(SignatureValidationErrorCodes.BadSignatureData, hash),
);
});
it('throws if an EC value is out of range', async () => {
const hash = hexUtils.random();
const sig = {
...ethSignHashWithKey(hash, signerKey),
r: '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141',
};
return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
new SignatureValidationError(SignatureValidationErrorCodes.BadSignatureData, hash),
);
});
it('throws if the type is Illegal', async () => {
const hash = hexUtils.random();
const sig = {
...ethSignHashWithKey(hash, signerKey),
signatureType: SignatureType.Illegal,
};
return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
new SignatureValidationError(SignatureValidationErrorCodes.Illegal, hash),
);
});
it('throws if the type is Invalid', async () => {
const hash = hexUtils.random();
const sig = {
...ethSignHashWithKey(hash, signerKey),
signatureType: SignatureType.Invalid,
};
return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
new SignatureValidationError(SignatureValidationErrorCodes.AlwaysInvalid, hash),
);
});
});
});

View File

@@ -0,0 +1,75 @@
import { blockchainTests, constants, expect } from '@0x/contracts-test-utils';
import { BigNumber, hexUtils } from '@0x/utils';
import { artifacts } from './artifacts';
import { TestProtocolFeesContract, TestStakingContract, TestWethContract } from './wrappers';
blockchainTests.resets('ProtocolFees', env => {
let payer: string;
let protocolFees: TestProtocolFeesContract;
let staking: TestStakingContract;
let weth: TestWethContract;
before(async () => {
[payer] = await env.getAccountAddressesAsync();
protocolFees = await TestProtocolFeesContract.deployFrom0xArtifactAsync(
artifacts.TestProtocolFees,
env.provider,
env.txDefaults,
artifacts,
);
weth = await TestWethContract.deployFrom0xArtifactAsync(
artifacts.TestWeth,
env.provider,
env.txDefaults,
artifacts,
);
staking = await TestStakingContract.deployFrom0xArtifactAsync(
artifacts.TestStaking,
env.provider,
env.txDefaults,
artifacts,
weth.address,
);
await weth.mint(payer, constants.ONE_ETHER).awaitTransactionSuccessAsync();
await weth.approve(protocolFees.address, constants.ONE_ETHER).awaitTransactionSuccessAsync({ from: payer });
});
describe('_collectProtocolFee()', () => {
it('can collect a protocol fee multiple times', async () => {
const poolId = hexUtils.random();
const amount1 = new BigNumber(123456);
const amount2 = new BigNumber(456789);
// Transfer amount1 via WETH.
await protocolFees
.collectProtocolFee(poolId, amount1, weth.address)
.awaitTransactionSuccessAsync({ from: payer });
// Send to staking contract.
await protocolFees
.transferFeesForPool(poolId, staking.address, weth.address)
.awaitTransactionSuccessAsync();
// Transfer amount2 via ETH.
await protocolFees
.collectProtocolFee(poolId, amount2, weth.address)
.awaitTransactionSuccessAsync({ from: payer, value: amount2 });
// Send to staking contract again.
await protocolFees
.transferFeesForPool(poolId, staking.address, weth.address)
.awaitTransactionSuccessAsync();
const balance = await staking.balanceForPool(poolId).callAsync();
const wethBalance = await weth.balanceOf(staking.address).callAsync();
// Check that staking accounted for the collected ether properly.
expect(balance).to.bignumber.eq(wethBalance);
// We leave 1 wei behind, of both ETH and WETH, for gas reasons.
const total = amount1.plus(amount2).minus(2);
return expect(balance).to.bignumber.eq(total);
});
});
});

View File

@@ -65,17 +65,22 @@ blockchainTests.resets('FillQuoteTransformer', env => {
mooniswapBridge: NULL_ADDRESS,
mStableBridge: NULL_ADDRESS,
oasisBridge: NULL_ADDRESS,
sushiswapBridge: NULL_ADDRESS,
swerveBridge: NULL_ADDRESS,
uniswapBridge: NULL_ADDRESS,
uniswapV2Bridge: NULL_ADDRESS,
kyberNetworkProxy: NULL_ADDRESS,
oasis: NULL_ADDRESS,
sushiswapRouter: NULL_ADDRESS,
uniswapV2Router: NULL_ADDRESS,
uniswapExchangeFactory: NULL_ADDRESS,
mStable: NULL_ADDRESS,
weth: NULL_ADDRESS,
shellBridge: NULL_ADDRESS,
shell: NULL_ADDRESS,
creamBridge: NULL_ADDRESS,
dodoBridge: NULL_ADDRESS,
dodoHelper: NULL_ADDRESS,
snowSwapBridge: NULL_ADDRESS,
},
);
transformer = await FillQuoteTransformerContract.deployFrom0xArtifactAsync(

View File

@@ -7,9 +7,11 @@ export * from '../test/generated-wrappers/affiliate_fee_transformer';
export * from '../test/generated-wrappers/allowance_target';
export * from '../test/generated-wrappers/bootstrap_feature';
export * from '../test/generated-wrappers/bridge_adapter';
export * from '../test/generated-wrappers/fee_collector';
export * from '../test/generated-wrappers/fill_quote_transformer';
export * from '../test/generated-wrappers/fixin_common';
export * from '../test/generated-wrappers/fixin_e_i_p712';
export * from '../test/generated-wrappers/fixin_protocol_fees';
export * from '../test/generated-wrappers/fixin_reentrancy_guard';
export * from '../test/generated-wrappers/flash_wallet';
export * from '../test/generated-wrappers/full_migration';
@@ -22,11 +24,13 @@ export * from '../test/generated-wrappers/i_exchange';
export * from '../test/generated-wrappers/i_feature';
export * from '../test/generated-wrappers/i_flash_wallet';
export * from '../test/generated-wrappers/i_gas_token';
export * from '../test/generated-wrappers/i_liquidity_provider';
export * from '../test/generated-wrappers/i_liquidity_provider_feature';
export * from '../test/generated-wrappers/i_meta_transactions_feature';
export * from '../test/generated-wrappers/i_ownable_feature';
export * from '../test/generated-wrappers/i_signature_validator_feature';
export * from '../test/generated-wrappers/i_simple_function_registry_feature';
export * from '../test/generated-wrappers/i_staking';
export * from '../test/generated-wrappers/i_test_simple_function_registry_feature';
export * from '../test/generated-wrappers/i_token_spender_feature';
export * from '../test/generated-wrappers/i_transform_erc20_feature';
@@ -41,11 +45,13 @@ export * from '../test/generated-wrappers/lib_liquidity_provider_storage';
export * from '../test/generated-wrappers/lib_meta_transactions_rich_errors';
export * from '../test/generated-wrappers/lib_meta_transactions_storage';
export * from '../test/generated-wrappers/lib_migrate';
export * from '../test/generated-wrappers/lib_order_hash';
export * from '../test/generated-wrappers/lib_ownable_rich_errors';
export * from '../test/generated-wrappers/lib_ownable_storage';
export * from '../test/generated-wrappers/lib_proxy_rich_errors';
export * from '../test/generated-wrappers/lib_proxy_storage';
export * from '../test/generated-wrappers/lib_reentrancy_guard_storage';
export * from '../test/generated-wrappers/lib_signature';
export * from '../test/generated-wrappers/lib_signature_rich_errors';
export * from '../test/generated-wrappers/lib_signed_call_data';
export * from '../test/generated-wrappers/lib_simple_function_registry_rich_errors';
@@ -63,11 +69,13 @@ export * from '../test/generated-wrappers/meta_transactions_feature';
export * from '../test/generated-wrappers/mixin_adapter_addresses';
export * from '../test/generated-wrappers/mixin_balancer';
export * from '../test/generated-wrappers/mixin_curve';
export * from '../test/generated-wrappers/mixin_dodo';
export * from '../test/generated-wrappers/mixin_kyber';
export * from '../test/generated-wrappers/mixin_m_stable';
export * from '../test/generated-wrappers/mixin_mooniswap';
export * from '../test/generated-wrappers/mixin_oasis';
export * from '../test/generated-wrappers/mixin_shell';
export * from '../test/generated-wrappers/mixin_sushiswap';
export * from '../test/generated-wrappers/mixin_uniswap';
export * from '../test/generated-wrappers/mixin_uniswap_v2';
export * from '../test/generated-wrappers/mixin_zero_ex_bridge';
@@ -83,13 +91,16 @@ export * from '../test/generated-wrappers/test_fill_quote_transformer_exchange';
export * from '../test/generated-wrappers/test_fill_quote_transformer_host';
export * from '../test/generated-wrappers/test_full_migration';
export * from '../test/generated-wrappers/test_initial_migration';
export * from '../test/generated-wrappers/test_lib_signature';
export * from '../test/generated-wrappers/test_lib_token_spender';
export * from '../test/generated-wrappers/test_meta_transactions_transform_erc20_feature';
export * from '../test/generated-wrappers/test_migrator';
export * from '../test/generated-wrappers/test_mint_token_erc20_transformer';
export * from '../test/generated-wrappers/test_mintable_erc20_token';
export * from '../test/generated-wrappers/test_protocol_fees';
export * from '../test/generated-wrappers/test_simple_function_registry_feature_impl1';
export * from '../test/generated-wrappers/test_simple_function_registry_feature_impl2';
export * from '../test/generated-wrappers/test_staking';
export * from '../test/generated-wrappers/test_token_spender';
export * from '../test/generated-wrappers/test_token_spender_erc20_token';
export * from '../test/generated-wrappers/test_transform_erc20';

View File

@@ -31,9 +31,11 @@
"test/generated-artifacts/AllowanceTarget.json",
"test/generated-artifacts/BootstrapFeature.json",
"test/generated-artifacts/BridgeAdapter.json",
"test/generated-artifacts/FeeCollector.json",
"test/generated-artifacts/FillQuoteTransformer.json",
"test/generated-artifacts/FixinCommon.json",
"test/generated-artifacts/FixinEIP712.json",
"test/generated-artifacts/FixinProtocolFees.json",
"test/generated-artifacts/FixinReentrancyGuard.json",
"test/generated-artifacts/FlashWallet.json",
"test/generated-artifacts/FullMigration.json",
@@ -46,11 +48,13 @@
"test/generated-artifacts/IFeature.json",
"test/generated-artifacts/IFlashWallet.json",
"test/generated-artifacts/IGasToken.json",
"test/generated-artifacts/ILiquidityProvider.json",
"test/generated-artifacts/ILiquidityProviderFeature.json",
"test/generated-artifacts/IMetaTransactionsFeature.json",
"test/generated-artifacts/IOwnableFeature.json",
"test/generated-artifacts/ISignatureValidatorFeature.json",
"test/generated-artifacts/ISimpleFunctionRegistryFeature.json",
"test/generated-artifacts/IStaking.json",
"test/generated-artifacts/ITestSimpleFunctionRegistryFeature.json",
"test/generated-artifacts/ITokenSpenderFeature.json",
"test/generated-artifacts/ITransformERC20Feature.json",
@@ -65,11 +69,13 @@
"test/generated-artifacts/LibMetaTransactionsRichErrors.json",
"test/generated-artifacts/LibMetaTransactionsStorage.json",
"test/generated-artifacts/LibMigrate.json",
"test/generated-artifacts/LibOrderHash.json",
"test/generated-artifacts/LibOwnableRichErrors.json",
"test/generated-artifacts/LibOwnableStorage.json",
"test/generated-artifacts/LibProxyRichErrors.json",
"test/generated-artifacts/LibProxyStorage.json",
"test/generated-artifacts/LibReentrancyGuardStorage.json",
"test/generated-artifacts/LibSignature.json",
"test/generated-artifacts/LibSignatureRichErrors.json",
"test/generated-artifacts/LibSignedCallData.json",
"test/generated-artifacts/LibSimpleFunctionRegistryRichErrors.json",
@@ -87,11 +93,13 @@
"test/generated-artifacts/MixinAdapterAddresses.json",
"test/generated-artifacts/MixinBalancer.json",
"test/generated-artifacts/MixinCurve.json",
"test/generated-artifacts/MixinDodo.json",
"test/generated-artifacts/MixinKyber.json",
"test/generated-artifacts/MixinMStable.json",
"test/generated-artifacts/MixinMooniswap.json",
"test/generated-artifacts/MixinOasis.json",
"test/generated-artifacts/MixinShell.json",
"test/generated-artifacts/MixinSushiswap.json",
"test/generated-artifacts/MixinUniswap.json",
"test/generated-artifacts/MixinUniswapV2.json",
"test/generated-artifacts/MixinZeroExBridge.json",
@@ -107,13 +115,16 @@
"test/generated-artifacts/TestFillQuoteTransformerHost.json",
"test/generated-artifacts/TestFullMigration.json",
"test/generated-artifacts/TestInitialMigration.json",
"test/generated-artifacts/TestLibSignature.json",
"test/generated-artifacts/TestLibTokenSpender.json",
"test/generated-artifacts/TestMetaTransactionsTransformERC20Feature.json",
"test/generated-artifacts/TestMigrator.json",
"test/generated-artifacts/TestMintTokenERC20Transformer.json",
"test/generated-artifacts/TestMintableERC20Token.json",
"test/generated-artifacts/TestProtocolFees.json",
"test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl1.json",
"test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl2.json",
"test/generated-artifacts/TestStaking.json",
"test/generated-artifacts/TestTokenSpender.json",
"test/generated-artifacts/TestTokenSpenderERC20Token.json",
"test/generated-artifacts/TestTransformERC20.json",

64
doc-gen-config.json Normal file
View File

@@ -0,0 +1,64 @@
{
"docJsonVersion": "0.0.1",
"externalTypeMap": {
"Array": true,
"BigNumber": true,
"Error": true,
"ErrorConstructor": true,
"Buffer": true,
"solc.StandardContractOutput": true,
"solc.CompilerSettings": true,
"Schema": true,
"Uint8Array": true,
"GanacheOpts": true,
"keystore": true,
"Ganache.GanacheOpts": true,
"PromiseWithTransactionHash": true,
"Buy": true,
"Sell": true,
"TFillData": true,
"IterableIterator": true,
"Set": true,
"Exclude": true
},
"ignoredExcessiveTypes": [
"NonceSubproviderErrors",
"Web3WrapperErrors",
"AssetBuyerError",
"ContractError",
"SubscriptionErrors",
"TypedDataError",
"SwapQuoterError",
"SwapQuoteConsumerError",
"SwapQuoteGetOutputOpts",
"SwapQuoteExecutionOpts",
"ForwarderError",
"CoordinatorServerError",
"CoordinatorServerCancellationResponse",
"EventCallback",
"IndexedFilterValues",
"OrderInfo",
"TransactionOpts",
"ContractEvent",
"SendTransactionOpts",
"AwaitTransactionOpts",
"ContractFunctionObj",
"ContractTxFunctionObj",
"EventCallback ",
"EnvVars",
"GlobalStakeByStatus",
"OwnerStakeByStatus",
"StakingPoolById",
"AssetData",
"SingleAssetData",
"ERC20AssetData",
"ERC20BridgeAssetData",
"ERC721AssetData",
"ERC1155AssetData",
"MultiAssetData",
"StaticCallAssetData",
"MultiAssetDataWithRecursiveDecoding",
"OrderPrunerPermittedFeeTypes"
],
"typesOnlyLibraries": ["@0x/protocol-types"]
}

1
docs/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
_build*

177
docs/Makefile Normal file
View File

@@ -0,0 +1,177 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ReadtheDocsTemplate.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ReadtheDocsTemplate.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/ReadtheDocsTemplate"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ReadtheDocsTemplate"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

18
docs/README.md Normal file
View File

@@ -0,0 +1,18 @@
### Dependencies
```bash
pip3 install sphinx recommonmark
```
### Syntax
Documentation can be written in [Markdown](https://en.wikipedia.org/wiki/Markdown) (.md) or [Restructured Text](https://en.wikipedia.org/wiki/ReStructuredText) (.rst).
### Build and Test
```bash
cd docs
make html
open _build/html/index.html
```
### Tips
* Generate RST tables [here](https://www.tablesgenerator.com/text_tables#).
* Set your editor's ruler to `100` characters.

13
docs/_static/theme_overrides.css vendored Normal file
View File

@@ -0,0 +1,13 @@
/* override table width restrictions */
@media screen and (min-width: 767px) {
.wy-table-responsive table td {
/* !important prevents the common CSS stylesheets from overriding
this as on RTD they are loaded after this stylesheet */
white-space: normal !important;
}
.wy-table-responsive {
overflow: visible !important;
}
}

View File

@@ -0,0 +1,3 @@
###############################
Audits
###############################

View File

@@ -0,0 +1,3 @@
###############################
Bounties
###############################

View File

@@ -0,0 +1,3 @@
###############################
Contributing
###############################

Some files were not shown because too many files have changed in this diff Show More