Compare commits

..

5 Commits

Author SHA1 Message Date
Github Actions
2a6d66cc2a Publish
- @0x/contracts-asset-proxy@3.7.8-multiplex.0
 - @0x/contracts-broker@1.1.26-multiplex.0
 - @0x/contracts-coordinator@3.1.27-multiplex.0
 - @0x/contracts-dev-utils@1.3.25-multiplex.0
 - @0x/contracts-erc1155@2.1.26-multiplex.0
 - @0x/contracts-erc20@3.3.5-multiplex.0
 - @0x/contracts-erc721@3.1.26-multiplex.0
 - @0x/contracts-exchange-forwarder@4.2.27-multiplex.0
 - @0x/contracts-exchange-libs@4.3.26-multiplex.0
 - @0x/contracts-exchange@3.2.27-multiplex.0
 - @0x/contracts-extensions@6.2.21-multiplex.0
 - @0x/contracts-integrations@2.7.29-multiplex.0
 - @0x/contracts-multisig@4.1.27-multiplex.0
 - @0x/contracts-staking@2.0.34-multiplex.0
 - @0x/contracts-test-utils@5.3.23-multiplex.0
 - @0x/contracts-treasury@1.1.0-multiplex
 - @0x/contracts-utils@4.7.5-multiplex.0
 - @0x/contracts-zero-ex@0.20.0-multiplex
 - @0x/asset-swapper@6.3.0-multiplex
 - @0x/contract-artifacts@3.13.0-multiplex
 - @0x/contract-wrappers-test@12.2.38-multiplex.0
 - @0x/contract-wrappers@13.14.0-multiplex
 - @0x/migrations@7.0.1-multiplex.0
 - @0x/order-utils@10.4.18-multiplex.0
 - @0x/protocol-utils@1.3.1-multiplex.0
2021-03-16 22:15:04 +00:00
Github Actions
b02992a373 Updated CHANGELOGS & MD docs 2021-03-16 22:14:58 +00:00
Michael Zhu
92ad924965 Update changelogs 2021-03-16 14:47:42 -07:00
Michael Zhu
138383e95c Address PR feedback 2021-03-16 14:46:12 -07:00
Michael Zhu
0487cb7d39 Update asset-swapper to support MultiplexFeature 2021-03-16 14:46:12 -07:00
380 changed files with 8288 additions and 28313 deletions

View File

@@ -1,25 +1,25 @@
version: 2.1 version: 2
jobs: jobs:
build: build:
resource_class: xlarge resource_class: medium+
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
environment: environment:
NODE_OPTIONS: '--max-old-space-size=16384' CONTRACTS_COMMIT_HASH: '9ed05f5'
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- checkout - checkout
- run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV
- run: - run:
name: install-yarn name: install-yarn
command: npm install --force --global yarn@1.22.0 command: npm install --force --global yarn@1.17.0
- run: - run:
name: yarn name: yarn
command: yarn --frozen-lockfile --ignore-engines install || yarn --frozen-lockfile --ignore-engines install command: yarn --frozen-lockfile --ignore-engines install || yarn --frozen-lockfile --ignore-engines install
- setup_remote_docker - setup_remote_docker
- run: yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci - run: yarn build:ci
- run: yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts - run: yarn build:ts
- save_cache: - save_cache:
key: repo-{{ .Environment.CIRCLE_SHA1 }} key: repo-{{ .Environment.CIRCLE_SHA1 }}
paths: paths:
@@ -31,59 +31,57 @@ jobs:
test-exchange-ganache: test-exchange-ganache:
resource_class: medium+ resource_class: medium+
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun -p @0x/contracts-exchange -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contracts-exchange
test-integrations-ganache: test-integrations-ganache:
resource_class: medium+ resource_class: medium+
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun -p @0x/contracts-integrations -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contracts-integrations
test-contracts-staking-ganache: test-contracts-staking-ganache:
resource_class: medium+ resource_class: medium+
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun -p @0x/contracts-staking -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contracts-staking
test-contracts-extra-ganache: test-contracts-extra-ganache:
resource_class: medium+ resource_class: medium+
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun -p @0x/contracts-exchange-forwarder -p @0x/contracts-coordinator -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contracts-exchange-forwarder @0x/contracts-coordinator
test-contracts-rest-ganache: test-contracts-rest-ganache:
resource_class: medium+ resource_class: medium+
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun -p @0x/contracts-multisig -p @0x/contracts-utils -p @0x/contracts-exchange-libs -p @0x/contracts-erc20 -p @0x/contracts-erc721 -p @0x/contracts-erc1155 -p @0x/contracts-asset-proxy -p @0x/contracts-broker -p @0x/contracts-zero-ex -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contracts-multisig @0x/contracts-utils @0x/contracts-exchange-libs @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-erc1155 @0x/contracts-asset-proxy @0x/contracts-broker @0x/contracts-zero-ex
test-publish: test-publish:
resource_class: large resource_class: medium+
environment:
NODE_OPTIONS: '--max-old-space-size=6442'
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
- image: 0xorg/verdaccio - image: 0xorg/verdaccio
working_directory: ~/repo working_directory: ~/repo
steps: steps:
@@ -97,7 +95,7 @@ jobs:
path: ~/.npm/_logs path: ~/.npm/_logs
test-doc-generation: test-doc-generation:
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
@@ -108,18 +106,18 @@ jobs:
no_output_timeout: 1200 no_output_timeout: 1200
test-rest: test-rest:
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- repo-{{ .Environment.CIRCLE_SHA1 }} - repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun -p @0x/contracts-test-utils -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contracts-test-utils
- run: yarn wsrun -p @0x/contract-artifacts -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contract-artifacts
- run: yarn wsrun -p @0x/contract-wrappers-test -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/contract-wrappers-test
- run: yarn wsrun -p @0x/migrations -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/migrations
- run: yarn wsrun -p @0x/order-utils -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/order-utils
- run: yarn wsrun -p @0x/asset-swapper -m --serial -c test:circleci - run: yarn wsrun test:circleci @0x/asset-swapper
- save_cache: - save_cache:
key: coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }} key: coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }}
paths: paths:
@@ -136,7 +134,7 @@ jobs:
resource_class: large resource_class: large
working_directory: ~/repo working_directory: ~/repo
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
@@ -147,7 +145,7 @@ jobs:
- run: yarn diff_md_docs:ci - run: yarn diff_md_docs:ci
submit-coverage: submit-coverage:
docker: docker:
- image: node:12 - image: nikolaik/python-nodejs:python3.7-nodejs10
working_directory: ~/repo working_directory: ~/repo
steps: steps:
- restore_cache: - restore_cache:

View File

@@ -3,6 +3,5 @@
"tabWidth": 4, "tabWidth": 4,
"singleQuote": true, "singleQuote": true,
"trailingComma": "all", "trailingComma": "all",
"bracketSpacing": true, "bracketSpacing": true
"arrowParens": "avoid"
} }

View File

@@ -49,6 +49,7 @@
| Package | Version | | Package | Version |
| ------: | :------ | | ------: | :------ |
<!-- For example: <!-- For example:
| `0x.js` | 2.0.4 | | `0x.js` | 2.0.4 |
| `Exchange Contract` | v2 | | `Exchange Contract` | v2 |

View File

@@ -43,12 +43,12 @@ These packages are all under development. See [/contracts/README.md](/contracts/
#### 0x-specific packages #### 0x-specific packages
| Package | Version | Description | | Package | Version | Description |
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| [`@0x/contract-addresses`](/packages/contract-addresses) | [![npm](https://img.shields.io/npm/v/@0x/contract-addresses.svg)](https://www.npmjs.com/package/@0x/contract-addresses) | A tiny utility library for getting known deployed contract addresses for a particular network. | | [`@0x/contract-addresses`](/packages/contract-addresses) | [![npm](https://img.shields.io/npm/v/@0x/contract-addresses.svg)](https://www.npmjs.com/package/@0x/contract-addresses) | A tiny utility library for getting known deployed contract addresses for a particular network. |
| [`@0x/contract-wrappers`](/packages/contract-wrappers) | [![npm](https://img.shields.io/npm/v/@0x/contract-wrappers.svg)](https://www.npmjs.com/package/@0x/contract-wrappers) | JS/TS wrappers for interacting with the 0x smart contracts | | [`@0x/contract-wrappers`](/packages/contract-wrappers) | [![npm](https://img.shields.io/npm/v/@0x/contract-wrappers.svg)](https://www.npmjs.com/package/@0x/contract-wrappers) | JS/TS wrappers for interacting with the 0x smart contracts |
| [`@0x/order-utils`](/packages/order-utils) | [![npm](https://img.shields.io/npm/v/@0x/order-utils.svg)](https://www.npmjs.com/package/@0x/order-utils) | A set of utilities for generating, parsing, signing and validating 0x orders | | [`@0x/order-utils`](/packages/order-utils) | [![npm](https://img.shields.io/npm/v/@0x/order-utils.svg)](https://www.npmjs.com/package/@0x/order-utils) | A set of utilities for generating, parsing, signing and validating 0x orders |
| [`@0x/migrations`](/packages/migrations) | [![npm](https://img.shields.io/npm/v/@0x/migrations.svg)](https://www.npmjs.com/package/@0x/migrations) | Migration tool for deploying 0x smart contracts on private testnets | | [`@0x/migrations`](/packages/migrations) | [![npm](https://img.shields.io/npm/v/@0x/migrations.svg)](https://www.npmjs.com/package/@0x/migrations) | Migration tool for deploying 0x smart contracts on private testnets |
| [`@0x/contract-artifacts`](/packages/contract-artifacts) | [![npm](https://img.shields.io/npm/v/@0x/contract-artifacts.svg)](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts | | | [`@0x/contract-artifacts`](/packages/contract-artifacts) | [![npm](https://img.shields.io/npm/v/@0x/contract-artifacts.svg)](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts | |
## Usage ## Usage

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "3.7.19", "version": "3.7.8-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "3.7.18",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "3.7.17",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "3.7.16",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "3.7.15",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "3.7.14",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "3.7.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "3.7.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "3.7.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "3.7.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "3.7.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "3.7.8",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v3.7.19 - _August 16, 2021_ ## v3.7.8-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v3.7.18 - _August 11, 2021_
* Dependencies updated
## v3.7.17 - _August 6, 2021_
* Dependencies updated
## v3.7.16 - _June 22, 2021_
* Dependencies updated
## v3.7.15 - _June 11, 2021_
* Dependencies updated
## v3.7.14 - _June 2, 2021_
* Dependencies updated
## v3.7.13 - _May 25, 2021_
* Dependencies updated
## v3.7.12 - _May 21, 2021_
* Dependencies updated
## v3.7.11 - _May 5, 2021_
* Dependencies updated
## v3.7.10 - _April 28, 2021_
* Dependencies updated
## v3.7.9 - _April 1, 2021_
* Dependencies updated
## v3.7.8 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-asset-proxy", "name": "@0x/contracts-asset-proxy",
"version": "3.7.19", "version": "3.7.8-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -51,15 +51,15 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contract-wrappers": "^13.17.4", "@0x/contract-wrappers": "^13.14.0-multiplex",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -67,7 +67,7 @@
"chai-as-promised": "^7.1.0", "chai-as-promised": "^7.1.0",
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereumjs-util": "^7.0.10", "ethereumjs-util": "^5.1.1",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
@@ -76,20 +76,20 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-erc1155": "^2.1.37", "@0x/contracts-erc1155": "^2.1.26-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-erc721": "^3.1.37", "@0x/contracts-erc721": "^3.1.26-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"lodash": "^4.17.11" "lodash": "^4.17.11"
}, },
"publishConfig": { "publishConfig": {

View File

@@ -0,0 +1,354 @@
import { ContractTxFunctionObj } from '@0x/contract-wrappers';
import {
blockchainTests,
constants,
expect,
filterLogsToArguments,
getRandomInteger,
randomAddress,
shortZip,
} from '@0x/contracts-test-utils';
import { BigNumber, hexUtils, NULL_ADDRESS } from '@0x/utils';
import { DecodedLogs } from 'ethereum-types';
import * as _ from 'lodash';
import { DexForwarderBridgeCall, dexForwarderBridgeDataEncoder } from '../src/dex_forwarder_bridge';
import { artifacts } from './artifacts';
import {
TestDexForwarderBridgeBridgeTransferFromCalledEventArgs as BtfCalledEventArgs,
TestDexForwarderBridgeContract,
TestDexForwarderBridgeEvents as TestEvents,
} from './wrappers';
const { ZERO_AMOUNT } = constants;
blockchainTests.resets('DexForwarderBridge unit tests', env => {
let testContract: TestDexForwarderBridgeContract;
let inputToken: string;
let outputToken: string;
const BRIDGE_SUCCESS = '0xdc1600f3';
const BRIDGE_FAILURE = '0xffffffff';
const BRIDGE_REVERT_ERROR = 'oopsie';
const NOT_AUTHORIZED_REVERT = 'DexForwarderBridge/SENDER_NOT_AUTHORIZED';
const DEFAULTS = {
toAddress: randomAddress(),
};
before(async () => {
testContract = await TestDexForwarderBridgeContract.deployFrom0xArtifactAsync(
artifacts.TestDexForwarderBridge,
env.provider,
env.txDefaults,
artifacts,
);
// Create test tokens.
[inputToken, outputToken] = [
await callAndTransactAsync(testContract.createToken()),
await callAndTransactAsync(testContract.createToken()),
];
await callAndTransactAsync(testContract.setAuthorized(env.txDefaults.from as string));
});
async function callAndTransactAsync<TResult>(fnCall: ContractTxFunctionObj<TResult>): Promise<TResult> {
const result = await fnCall.callAsync();
await fnCall.awaitTransactionSuccessAsync({}, { shouldValidate: false });
return result;
}
function getRandomBridgeCall(
bridgeAddress: string,
fields: Partial<DexForwarderBridgeCall> = {},
): DexForwarderBridgeCall {
return {
target: bridgeAddress,
inputTokenAmount: getRandomInteger(1, '100e18'),
outputTokenAmount: getRandomInteger(1, '100e18'),
bridgeData: hexUtils.leftPad(inputToken),
...fields,
};
}
describe('bridgeTransferFrom()', () => {
let goodBridgeCalls: DexForwarderBridgeCall[];
let revertingBridgeCall: DexForwarderBridgeCall;
let failingBridgeCall: DexForwarderBridgeCall;
let allBridgeCalls: DexForwarderBridgeCall[];
let totalFillableOutputAmount: BigNumber;
let totalFillableInputAmount: BigNumber;
let recipientOutputBalance: BigNumber;
beforeEach(async () => {
goodBridgeCalls = [];
for (let i = 0; i < 4; ++i) {
goodBridgeCalls.push(await createBridgeCallAsync({ returnCode: BRIDGE_SUCCESS }));
}
revertingBridgeCall = await createBridgeCallAsync({ revertError: BRIDGE_REVERT_ERROR });
failingBridgeCall = await createBridgeCallAsync({ returnCode: BRIDGE_FAILURE });
allBridgeCalls = _.shuffle([failingBridgeCall, revertingBridgeCall, ...goodBridgeCalls]);
totalFillableInputAmount = BigNumber.sum(...goodBridgeCalls.map(c => c.inputTokenAmount));
totalFillableOutputAmount = BigNumber.sum(...goodBridgeCalls.map(c => c.outputTokenAmount));
// Grant the taker some output tokens.
await testContract.setTokenBalance(
outputToken,
DEFAULTS.toAddress,
(recipientOutputBalance = getRandomInteger(1, '100e18')),
);
});
async function setForwarderInputBalanceAsync(amount: BigNumber): Promise<void> {
await testContract
.setTokenBalance(inputToken, testContract.address, amount)
.awaitTransactionSuccessAsync({}, { shouldValidate: false });
}
async function createBridgeCallAsync(
opts: Partial<{
returnCode: string;
revertError: string;
callFields: Partial<DexForwarderBridgeCall>;
outputFillAmount: BigNumber;
}>,
): Promise<DexForwarderBridgeCall> {
const { returnCode, revertError, callFields, outputFillAmount } = {
returnCode: BRIDGE_SUCCESS,
revertError: '',
...opts,
};
const bridge = await callAndTransactAsync(testContract.createBridge(returnCode, revertError));
const call = getRandomBridgeCall(bridge, callFields);
await testContract
.setBridgeTransferAmount(call.target, outputFillAmount || call.outputTokenAmount)
.awaitTransactionSuccessAsync({}, { shouldValidate: false });
return call;
}
async function callBridgeTransferFromAsync(opts: {
bridgeData: string;
sellAmount?: BigNumber;
buyAmount?: BigNumber;
}): Promise<DecodedLogs> {
// Fund the forwarder with input tokens to sell.
await setForwarderInputBalanceAsync(opts.sellAmount || totalFillableInputAmount);
const call = testContract.bridgeTransferFrom(
outputToken,
testContract.address,
DEFAULTS.toAddress,
opts.buyAmount || totalFillableOutputAmount,
opts.bridgeData,
);
const returnCode = await call.callAsync();
if (returnCode !== BRIDGE_SUCCESS) {
throw new Error('Expected BRIDGE_SUCCESS');
}
const receipt = await call.awaitTransactionSuccessAsync({}, { shouldValidate: false });
// tslint:disable-next-line: no-unnecessary-type-assertion
return receipt.logs as DecodedLogs;
}
it('succeeds with no bridge calls and no input balance', async () => {
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls: [],
});
await callBridgeTransferFromAsync({ bridgeData, sellAmount: ZERO_AMOUNT });
});
it('succeeds with bridge calls and no input balance', async () => {
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls: allBridgeCalls,
});
await callBridgeTransferFromAsync({ bridgeData, sellAmount: ZERO_AMOUNT });
});
it('succeeds with no bridge calls and an input balance', async () => {
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls: [],
});
await callBridgeTransferFromAsync({
bridgeData,
sellAmount: new BigNumber(1),
});
});
it('succeeds if entire input token balance is not consumed', async () => {
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls: allBridgeCalls,
});
await callBridgeTransferFromAsync({
bridgeData,
sellAmount: totalFillableInputAmount.plus(1),
});
});
it('fails if not authorized', async () => {
const calls = goodBridgeCalls.slice(0, 1);
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
await callAndTransactAsync(testContract.setAuthorized(NULL_ADDRESS));
return expect(callBridgeTransferFromAsync({ bridgeData, sellAmount: new BigNumber(1) })).to.revertWith(
NOT_AUTHORIZED_REVERT,
);
});
it('succeeds with one bridge call', async () => {
const calls = goodBridgeCalls.slice(0, 1);
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
await callBridgeTransferFromAsync({ bridgeData, sellAmount: calls[0].inputTokenAmount });
});
it('succeeds with many bridge calls', async () => {
const calls = goodBridgeCalls;
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
await callBridgeTransferFromAsync({ bridgeData });
});
it('swallows a failing bridge call', async () => {
const calls = _.shuffle([...goodBridgeCalls, failingBridgeCall]);
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
await callBridgeTransferFromAsync({ bridgeData });
});
it('consumes input tokens for output tokens', async () => {
const calls = allBridgeCalls;
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
await callBridgeTransferFromAsync({ bridgeData });
const currentBridgeInputBalance = await testContract
.balanceOf(inputToken, testContract.address)
.callAsync();
expect(currentBridgeInputBalance).to.bignumber.eq(0);
const currentRecipientOutputBalance = await testContract
.balanceOf(outputToken, DEFAULTS.toAddress)
.callAsync();
expect(currentRecipientOutputBalance).to.bignumber.eq(totalFillableOutputAmount);
});
it("transfers only up to each call's input amount to each bridge", async () => {
const calls = goodBridgeCalls;
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
const logs = await callBridgeTransferFromAsync({ bridgeData });
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
for (const [call, btf] of shortZip(goodBridgeCalls, btfs)) {
expect(btf.inputTokenBalance).to.bignumber.eq(call.inputTokenAmount);
}
});
it('transfers only up to outstanding sell amount to each bridge', async () => {
// Prepend an extra bridge call.
const calls = [
await createBridgeCallAsync({
callFields: {
inputTokenAmount: new BigNumber(1),
outputTokenAmount: new BigNumber(1),
},
}),
...goodBridgeCalls,
];
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
const logs = await callBridgeTransferFromAsync({ bridgeData });
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length + 1);
// The last call will receive 1 less token.
const lastCall = calls.slice(-1)[0];
const lastBtf = btfs.slice(-1)[0];
expect(lastBtf.inputTokenBalance).to.bignumber.eq(lastCall.inputTokenAmount.minus(1));
});
it('recoups funds from a bridge that fails', async () => {
// Prepend a call that will take the whole input amount but will
// fail.
const badCall = await createBridgeCallAsync({
callFields: { inputTokenAmount: totalFillableInputAmount },
returnCode: BRIDGE_FAILURE,
});
const calls = [badCall, ...goodBridgeCalls];
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
const logs = await callBridgeTransferFromAsync({ bridgeData });
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length);
});
it('recoups funds from a bridge that reverts', async () => {
// Prepend a call that will take the whole input amount but will
// revert.
const badCall = await createBridgeCallAsync({
callFields: { inputTokenAmount: totalFillableInputAmount },
revertError: BRIDGE_REVERT_ERROR,
});
const calls = [badCall, ...goodBridgeCalls];
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
const logs = await callBridgeTransferFromAsync({ bridgeData });
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length);
});
it('recoups funds from a bridge that under-pays', async () => {
// Prepend a call that will take the whole input amount but will
// underpay the output amount..
const badCall = await createBridgeCallAsync({
callFields: {
inputTokenAmount: totalFillableInputAmount,
outputTokenAmount: new BigNumber(2),
},
outputFillAmount: new BigNumber(1),
});
const calls = [badCall, ...goodBridgeCalls];
const bridgeData = dexForwarderBridgeDataEncoder.encode({
inputToken,
calls,
});
const logs = await callBridgeTransferFromAsync({ bridgeData });
const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled);
expect(btfs).to.be.length(goodBridgeCalls.length);
});
});
describe('executeBridgeCall()', () => {
it('cannot be called externally', async () => {
return expect(
testContract
.executeBridgeCall(
randomAddress(),
randomAddress(),
randomAddress(),
randomAddress(),
new BigNumber(1),
new BigNumber(1),
constants.NULL_BYTES,
)
.callAsync(),
).to.revertWith('DexForwarderBridge/ONLY_SELF');
});
});
});

View File

@@ -168,7 +168,7 @@ describe('StaticCallProxy', () => {
it('should revert if the hash of the output is different than expected expected', async () => { it('should revert if the hash of the output is different than expected expected', async () => {
const staticCallData = staticCallTarget.isOddNumber(new BigNumber(0)).getABIEncodedTransactionData(); const staticCallData = staticCallTarget.isOddNumber(new BigNumber(0)).getABIEncodedTransactionData();
const trueAsBuffer = ethUtil.toBuffer('0x0000000000000000000000000000000000000000000000000000000000000001'); const trueAsBuffer = ethUtil.toBuffer('0x0000000000000000000000000000000000000000000000000000000000000001');
const expectedResultHash = ethUtil.bufferToHex(ethUtil.keccak256(trueAsBuffer)); const expectedResultHash = ethUtil.bufferToHex(ethUtil.sha3(trueAsBuffer));
const assetData = assetDataInterface const assetData = assetDataInterface
.StaticCall(staticCallTarget.address, staticCallData, expectedResultHash) .StaticCall(staticCallTarget.address, staticCallData, expectedResultHash)
.getABIEncodedTransactionData(); .getABIEncodedTransactionData();
@@ -199,7 +199,7 @@ describe('StaticCallProxy', () => {
it('should be successful if a function call with one static input returns the correct value', async () => { it('should be successful if a function call with one static input returns the correct value', async () => {
const staticCallData = staticCallTarget.isOddNumber(new BigNumber(1)).getABIEncodedTransactionData(); const staticCallData = staticCallTarget.isOddNumber(new BigNumber(1)).getABIEncodedTransactionData();
const trueAsBuffer = ethUtil.toBuffer('0x0000000000000000000000000000000000000000000000000000000000000001'); const trueAsBuffer = ethUtil.toBuffer('0x0000000000000000000000000000000000000000000000000000000000000001');
const expectedResultHash = ethUtil.bufferToHex(ethUtil.keccak256(trueAsBuffer)); const expectedResultHash = ethUtil.bufferToHex(ethUtil.sha3(trueAsBuffer));
const assetData = assetDataInterface const assetData = assetDataInterface
.StaticCall(staticCallTarget.address, staticCallData, expectedResultHash) .StaticCall(staticCallTarget.address, staticCallData, expectedResultHash)
.getABIEncodedTransactionData(); .getABIEncodedTransactionData();
@@ -232,7 +232,7 @@ describe('StaticCallProxy', () => {
const offset = '0000000000000000000000000000000000000000000000000000000000000020'; const offset = '0000000000000000000000000000000000000000000000000000000000000020';
const encodedExpectedResultWithOffset = `0x${offset}${abiEncoder.encode(expectedResults).slice(2)}`; const encodedExpectedResultWithOffset = `0x${offset}${abiEncoder.encode(expectedResults).slice(2)}`;
const expectedResultHash = ethUtil.bufferToHex( const expectedResultHash = ethUtil.bufferToHex(
ethUtil.keccak256(ethUtil.toBuffer(encodedExpectedResultWithOffset)), ethUtil.sha3(ethUtil.toBuffer(encodedExpectedResultWithOffset)),
); );
const assetData = assetDataInterface const assetData = assetDataInterface
.StaticCall(staticCallTarget.address, staticCallData, expectedResultHash) .StaticCall(staticCallTarget.address, staticCallData, expectedResultHash)

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "1.1.37", "version": "1.1.26-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "1.1.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "1.1.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "1.1.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "1.1.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "1.1.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "1.1.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "1.1.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "1.1.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "1.1.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "1.1.27",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "1.1.26",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v1.1.37 - _August 16, 2021_ ## v1.1.26-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v1.1.36 - _August 11, 2021_
* Dependencies updated
## v1.1.35 - _August 6, 2021_
* Dependencies updated
## v1.1.34 - _June 22, 2021_
* Dependencies updated
## v1.1.33 - _June 11, 2021_
* Dependencies updated
## v1.1.32 - _June 2, 2021_
* Dependencies updated
## v1.1.31 - _May 25, 2021_
* Dependencies updated
## v1.1.30 - _May 21, 2021_
* Dependencies updated
## v1.1.29 - _May 5, 2021_
* Dependencies updated
## v1.1.28 - _April 28, 2021_
* Dependencies updated
## v1.1.27 - _April 1, 2021_
* Dependencies updated
## v1.1.26 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-broker", "name": "@0x/contracts-broker",
"version": "1.1.37", "version": "1.1.26-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -51,20 +51,20 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-erc721": "^3.1.37", "@0x/contracts-erc721": "^3.1.26-multiplex.0",
"@0x/contracts-exchange": "^3.2.38", "@0x/contracts-exchange": "^3.2.27-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -81,14 +81,14 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"ethereum-types": "^3.5.0" "ethereum-types": "^3.4.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -7,10 +7,7 @@ export interface GodsUnchainedProperties {
quality: BigNumber | number; quality: BigNumber | number;
} }
const propertyDataEncoder = AbiEncoder.create([ const propertyDataEncoder = AbiEncoder.create([{ name: 'proto', type: 'uint16' }, { name: 'quality', type: 'uint8' }]);
{ name: 'proto', type: 'uint16' },
{ name: 'quality', type: 'uint8' },
]);
const brokerDataEncoder = AbiEncoder.create([ const brokerDataEncoder = AbiEncoder.create([
{ name: 'godsUnchainedAddress', type: 'address' }, { name: 'godsUnchainedAddress', type: 'address' },
{ name: 'validatorAddress', type: 'address' }, { name: 'validatorAddress', type: 'address' },

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "3.1.38", "version": "3.1.27-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "3.1.37",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "3.1.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "3.1.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "3.1.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "3.1.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "3.1.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "3.1.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "3.1.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "3.1.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "3.1.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "3.1.27",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v3.1.38 - _August 16, 2021_ ## v3.1.27-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v3.1.37 - _August 11, 2021_
* Dependencies updated
## v3.1.36 - _August 6, 2021_
* Dependencies updated
## v3.1.35 - _June 22, 2021_
* Dependencies updated
## v3.1.34 - _June 11, 2021_
* Dependencies updated
## v3.1.33 - _June 2, 2021_
* Dependencies updated
## v3.1.32 - _May 25, 2021_
* Dependencies updated
## v3.1.31 - _May 21, 2021_
* Dependencies updated
## v3.1.30 - _May 5, 2021_
* Dependencies updated
## v3.1.29 - _April 28, 2021_
* Dependencies updated
## v3.1.28 - _April 1, 2021_
* Dependencies updated
## v3.1.27 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-coordinator", "name": "@0x/contracts-coordinator",
"version": "3.1.38", "version": "3.1.27-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,17 +52,17 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-dev-utils": "^1.3.36", "@0x/contracts-dev-utils": "^1.3.25-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -79,20 +79,20 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/assert": "^3.0.27", "@0x/assert": "^3.0.21",
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contract-addresses": "^6.6.0", "@0x/contract-addresses": "^5.11.0",
"@0x/contracts-exchange": "^3.2.38", "@0x/contracts-exchange": "^3.2.27-multiplex.0",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/json-schemas": "^6.1.3", "@0x/json-schemas": "^5.4.1",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"http-status-codes": "^1.3.2" "http-status-codes": "^1.3.2"
}, },
"publishConfig": { "publishConfig": {

View File

@@ -1,4 +1,8 @@
import { assert as sharedAssert } from '@0x/assert'; import { assert as sharedAssert } from '@0x/assert';
// HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here
import { Schema } from '@0x/json-schemas'; // tslint:disable-line:no-unused-variable
import { Order } from '@0x/types'; // tslint:disable-line:no-unused-variable
import { BigNumber } from '@0x/utils'; // tslint:disable-line:no-unused-variable
import { Web3Wrapper } from '@0x/web3-wrapper'; import { Web3Wrapper } from '@0x/web3-wrapper';
export const assert = { export const assert = {

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "1.3.36", "version": "1.3.25-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "1.3.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "1.3.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "1.3.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "1.3.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "1.3.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "1.3.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "1.3.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "1.3.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "1.3.27",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "1.3.26",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "1.3.25",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v1.3.36 - _August 16, 2021_ ## v1.3.25-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v1.3.35 - _August 11, 2021_
* Dependencies updated
## v1.3.34 - _August 6, 2021_
* Dependencies updated
## v1.3.33 - _June 22, 2021_
* Dependencies updated
## v1.3.32 - _June 11, 2021_
* Dependencies updated
## v1.3.31 - _June 2, 2021_
* Dependencies updated
## v1.3.30 - _May 25, 2021_
* Dependencies updated
## v1.3.29 - _May 21, 2021_
* Dependencies updated
## v1.3.28 - _May 5, 2021_
* Dependencies updated
## v1.3.27 - _April 28, 2021_
* Dependencies updated
## v1.3.26 - _April 1, 2021_
* Dependencies updated
## v1.3.25 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-dev-utils", "name": "@0x/contracts-dev-utils",
"version": "1.3.36", "version": "1.3.25-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -41,18 +41,18 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/assert": "^3.0.27", "@0x/assert": "^3.0.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"ethers": "~4.0.4", "ethers": "~4.0.4",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
"shx": "^0.2.2", "shx": "^0.2.2",
@@ -60,10 +60,10 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@types/node": "12.12.54" "@types/node": "12.12.54"
}, },
"publishConfig": { "publishConfig": {

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "2.1.37", "version": "2.1.26-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "2.1.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "2.1.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "2.1.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "2.1.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "2.1.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "2.1.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "2.1.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "2.1.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "2.1.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "2.1.27",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "2.1.26",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v2.1.37 - _August 16, 2021_ ## v2.1.26-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v2.1.36 - _August 11, 2021_
* Dependencies updated
## v2.1.35 - _August 6, 2021_
* Dependencies updated
## v2.1.34 - _June 22, 2021_
* Dependencies updated
## v2.1.33 - _June 11, 2021_
* Dependencies updated
## v2.1.32 - _June 2, 2021_
* Dependencies updated
## v2.1.31 - _May 25, 2021_
* Dependencies updated
## v2.1.30 - _May 21, 2021_
* Dependencies updated
## v2.1.29 - _May 5, 2021_
* Dependencies updated
## v2.1.28 - _April 28, 2021_
* Dependencies updated
## v2.1.27 - _April 1, 2021_
* Dependencies updated
## v2.1.26 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-erc1155", "name": "@0x/contracts-erc1155",
"version": "2.1.37", "version": "2.1.26-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,15 +52,15 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -68,7 +68,7 @@
"chai-as-promised": "^7.1.0", "chai-as-promised": "^7.1.0",
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
@@ -77,13 +77,13 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"lodash": "^4.17.11" "lodash": "^4.17.11"
}, },
"publishConfig": { "publishConfig": {

View File

@@ -1,107 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "3.3.16", "version": "3.3.5-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "3.3.15",
"changes": [
{
"note": "Add ethers as a dependency",
"pr": 305
}
],
"timestamp": 1628665757
},
{
"timestamp": 1628225642,
"version": "3.3.14",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "3.3.13",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "3.3.12",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "3.3.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "3.3.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "3.3.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "3.3.8",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "3.3.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "3.3.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "3.3.5",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v3.3.16 - _August 16, 2021_ ## v3.3.5-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v3.3.15 - _August 11, 2021_
* Add ethers as a dependency (#305)
## v3.3.14 - _August 6, 2021_
* Dependencies updated
## v3.3.13 - _June 22, 2021_
* Dependencies updated
## v3.3.12 - _June 11, 2021_
* Dependencies updated
## v3.3.11 - _June 2, 2021_
* Dependencies updated
## v3.3.10 - _May 25, 2021_
* Dependencies updated
## v3.3.9 - _May 21, 2021_
* Dependencies updated
## v3.3.8 - _May 5, 2021_
* Dependencies updated
## v3.3.7 - _April 28, 2021_
* Dependencies updated
## v3.3.6 - _April 1, 2021_
* Dependencies updated
## v3.3.5 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -28,7 +28,7 @@ library LibERC20TokenV06 {
bytes constant private DECIMALS_CALL_DATA = hex"313ce567"; bytes constant private DECIMALS_CALL_DATA = hex"313ce567";
/// @dev Calls `IERC20TokenV06(token).approve()`. /// @dev Calls `IERC20TokenV06(token).approve()`.
/// Reverts if the return data is invalid or the call reverts. /// Reverts if the result fails `isSuccessfulResult()` or the call reverts.
/// @param token The address of the token contract. /// @param token The address of the token contract.
/// @param spender The address that receives an allowance. /// @param spender The address that receives an allowance.
/// @param allowance The allowance to set. /// @param allowance The allowance to set.
@@ -49,7 +49,7 @@ library LibERC20TokenV06 {
/// @dev Calls `IERC20TokenV06(token).approve()` and sets the allowance to the /// @dev Calls `IERC20TokenV06(token).approve()` and sets the allowance to the
/// maximum if the current approval is not already >= an amount. /// maximum if the current approval is not already >= an amount.
/// Reverts if the return data is invalid or the call reverts. /// Reverts if the result fails `isSuccessfulResult()` or the call reverts.
/// @param token The address of the token contract. /// @param token The address of the token contract.
/// @param spender The address that receives an allowance. /// @param spender The address that receives an allowance.
/// @param amount The minimum allowance needed. /// @param amount The minimum allowance needed.
@@ -66,7 +66,7 @@ library LibERC20TokenV06 {
} }
/// @dev Calls `IERC20TokenV06(token).transfer()`. /// @dev Calls `IERC20TokenV06(token).transfer()`.
/// Reverts if the return data is invalid or the call reverts. /// Reverts if the result fails `isSuccessfulResult()` or the call reverts.
/// @param token The address of the token contract. /// @param token The address of the token contract.
/// @param to The address that receives the tokens /// @param to The address that receives the tokens
/// @param amount Number of tokens to transfer. /// @param amount Number of tokens to transfer.
@@ -86,7 +86,7 @@ library LibERC20TokenV06 {
} }
/// @dev Calls `IERC20TokenV06(token).transferFrom()`. /// @dev Calls `IERC20TokenV06(token).transferFrom()`.
/// Reverts if the return data is invalid or the call reverts. /// Reverts if the result fails `isSuccessfulResult()` or the call reverts.
/// @param token The address of the token contract. /// @param token The address of the token contract.
/// @param from The owner of the tokens. /// @param from The owner of the tokens.
/// @param to The address that receives the tokens /// @param to The address that receives the tokens
@@ -168,6 +168,27 @@ library LibERC20TokenV06 {
} }
} }
/// @dev Check if the data returned by a non-static call to an ERC20 token
/// is a successful result. Supported functions are `transfer()`,
/// `transferFrom()`, and `approve()`.
/// @param resultData The raw data returned by a non-static call to the ERC20 token.
/// @return isSuccessful Whether the result data indicates success.
function isSuccessfulResult(bytes memory resultData)
internal
pure
returns (bool isSuccessful)
{
if (resultData.length == 0) {
return true;
}
if (resultData.length >= 32) {
uint256 result = LibBytesV06.readUint256(resultData, 0);
if (result == 1) {
return true;
}
}
}
/// @dev Executes a call on address `target` with calldata `callData` /// @dev Executes a call on address `target` with calldata `callData`
/// and asserts that either nothing was returned or a single boolean /// and asserts that either nothing was returned or a single boolean
/// was returned equal to `true`. /// was returned equal to `true`.
@@ -180,31 +201,9 @@ library LibERC20TokenV06 {
private private
{ {
(bool didSucceed, bytes memory resultData) = target.call(callData); (bool didSucceed, bytes memory resultData) = target.call(callData);
// Revert if the call reverted. if (didSucceed && isSuccessfulResult(resultData)) {
if (!didSucceed) {
LibRichErrorsV06.rrevert(resultData);
}
// If we get back 0 returndata, this may be a non-standard ERC-20 that
// does not return a boolean. Check that it at least contains code.
if (resultData.length == 0) {
uint256 size;
assembly { size := extcodesize(target) }
require(size > 0, "invalid token address, contains no code");
return; return;
} }
// If we get back at least 32 bytes, we know the target address
// contains code, and we assume it is a token that returned a boolean
// success value, which must be true.
if (resultData.length >= 32) {
uint256 result = LibBytesV06.readUint256(resultData, 0);
if (result == 1) {
return;
} else {
LibRichErrorsV06.rrevert(resultData);
}
}
// If 0 < returndatasize < 32, the target is a contract, but not a
// valid token.
LibRichErrorsV06.rrevert(resultData); LibRichErrorsV06.rrevert(resultData);
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-erc20", "name": "@0x/contracts-erc20",
"version": "3.3.16", "version": "3.3.5-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -51,18 +51,18 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -70,7 +70,7 @@
"chai-as-promised": "^7.1.0", "chai-as-promised": "^7.1.0",
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
@@ -79,11 +79,10 @@
"solhint": "^1.4.1", "solhint": "^1.4.1",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18"
"ethers": "~4.0.4"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -39,8 +39,8 @@ describe('EtherToken', () => {
artifacts.WETH9, artifacts.WETH9,
provider, provider,
{ {
...txDefaults,
gasPrice, gasPrice,
...txDefaults,
}, },
artifacts, artifacts,
); );

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "3.1.37", "version": "3.1.26-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "3.1.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "3.1.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "3.1.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "3.1.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "3.1.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "3.1.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "3.1.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "3.1.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "3.1.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "3.1.27",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "3.1.26",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v3.1.37 - _August 16, 2021_ ## v3.1.26-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v3.1.36 - _August 11, 2021_
* Dependencies updated
## v3.1.35 - _August 6, 2021_
* Dependencies updated
## v3.1.34 - _June 22, 2021_
* Dependencies updated
## v3.1.33 - _June 11, 2021_
* Dependencies updated
## v3.1.32 - _June 2, 2021_
* Dependencies updated
## v3.1.31 - _May 25, 2021_
* Dependencies updated
## v3.1.30 - _May 21, 2021_
* Dependencies updated
## v3.1.29 - _May 5, 2021_
* Dependencies updated
## v3.1.28 - _April 28, 2021_
* Dependencies updated
## v3.1.27 - _April 1, 2021_
* Dependencies updated
## v3.1.26 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-erc721", "name": "@0x/contracts-erc721",
"version": "3.1.37", "version": "3.1.26-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,18 +52,18 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -71,7 +71,7 @@
"chai-as-promised": "^7.1.0", "chai-as-promised": "^7.1.0",
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
@@ -81,10 +81,10 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0" "@0x/base-contract": "^6.2.18"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "4.2.38", "version": "4.2.27-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "4.2.37",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "4.2.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "4.2.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "4.2.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "4.2.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "4.2.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "4.2.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "4.2.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "4.2.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "4.2.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "4.2.27",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v4.2.38 - _August 16, 2021_ ## v4.2.27-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v4.2.37 - _August 11, 2021_
* Dependencies updated
## v4.2.36 - _August 6, 2021_
* Dependencies updated
## v4.2.35 - _June 22, 2021_
* Dependencies updated
## v4.2.34 - _June 11, 2021_
* Dependencies updated
## v4.2.33 - _June 2, 2021_
* Dependencies updated
## v4.2.32 - _May 25, 2021_
* Dependencies updated
## v4.2.31 - _May 21, 2021_
* Dependencies updated
## v4.2.30 - _May 5, 2021_
* Dependencies updated
## v4.2.29 - _April 28, 2021_
* Dependencies updated
## v4.2.28 - _April 1, 2021_
* Dependencies updated
## v4.2.27 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-exchange-forwarder", "name": "@0x/contracts-exchange-forwarder",
"version": "4.2.38", "version": "4.2.27-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,25 +52,25 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-dev-utils": "^1.3.36", "@0x/contracts-dev-utils": "^1.3.25-multiplex.0",
"@0x/contracts-erc1155": "^2.1.37", "@0x/contracts-erc1155": "^2.1.26-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-erc721": "^3.1.37", "@0x/contracts-erc721": "^3.1.26-multiplex.0",
"@0x/contracts-exchange": "^3.2.38", "@0x/contracts-exchange": "^3.2.27-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -87,12 +87,12 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"ethereum-types": "^3.5.0" "ethereum-types": "^3.4.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "4.3.37", "version": "4.3.26-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "4.3.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "4.3.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "4.3.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "4.3.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "4.3.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "4.3.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "4.3.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "4.3.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "4.3.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "4.3.27",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "4.3.26",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v4.3.37 - _August 16, 2021_ ## v4.3.26-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v4.3.36 - _August 11, 2021_
* Dependencies updated
## v4.3.35 - _August 6, 2021_
* Dependencies updated
## v4.3.34 - _June 22, 2021_
* Dependencies updated
## v4.3.33 - _June 11, 2021_
* Dependencies updated
## v4.3.32 - _June 2, 2021_
* Dependencies updated
## v4.3.31 - _May 25, 2021_
* Dependencies updated
## v4.3.30 - _May 21, 2021_
* Dependencies updated
## v4.3.29 - _May 5, 2021_
* Dependencies updated
## v4.3.28 - _April 28, 2021_
* Dependencies updated
## v4.3.27 - _April 1, 2021_
* Dependencies updated
## v4.3.26 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-exchange-libs", "name": "@0x/contracts-exchange-libs",
"version": "4.3.37", "version": "4.3.26-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,14 +52,14 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/subproviders": "^6.5.3", "@0x/subproviders": "^6.4.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -67,7 +67,7 @@
"chai-as-promised": "^7.1.0", "chai-as-promised": "^7.1.0",
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereumjs-util": "^7.0.10", "ethereumjs-util": "^5.1.1",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
@@ -77,17 +77,17 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"ethereum-types": "^3.5.0" "ethereum-types": "^3.4.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "3.2.38", "version": "3.2.27-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "3.2.37",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "3.2.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "3.2.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "3.2.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "3.2.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "3.2.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "3.2.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "3.2.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "3.2.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "3.2.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "3.2.27",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v3.2.38 - _August 16, 2021_ ## v3.2.27-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v3.2.37 - _August 11, 2021_
* Dependencies updated
## v3.2.36 - _August 6, 2021_
* Dependencies updated
## v3.2.35 - _June 22, 2021_
* Dependencies updated
## v3.2.34 - _June 11, 2021_
* Dependencies updated
## v3.2.33 - _June 2, 2021_
* Dependencies updated
## v3.2.32 - _May 25, 2021_
* Dependencies updated
## v3.2.31 - _May 21, 2021_
* Dependencies updated
## v3.2.30 - _May 5, 2021_
* Dependencies updated
## v3.2.29 - _April 28, 2021_
* Dependencies updated
## v3.2.28 - _April 1, 2021_
* Dependencies updated
## v3.2.27 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-exchange", "name": "@0x/contracts-exchange",
"version": "3.2.38", "version": "3.2.27-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,21 +52,21 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-multisig": "^4.1.38", "@0x/contracts-multisig": "^4.1.27-multiplex.0",
"@0x/contracts-staking": "^2.0.45", "@0x/contracts-staking": "^2.0.34-multiplex.0",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -74,8 +74,8 @@
"chai-as-promised": "^7.1.0", "chai-as-promised": "^7.1.0",
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"ethereumjs-util": "^7.0.10", "ethereumjs-util": "^5.1.1",
"js-combinatorics": "^0.5.3", "js-combinatorics": "^0.5.3",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
@@ -85,16 +85,16 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-dev-utils": "^1.3.36", "@0x/contracts-dev-utils": "^1.3.25-multiplex.0",
"@0x/contracts-erc1155": "^2.1.37", "@0x/contracts-erc1155": "^2.1.26-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-erc721": "^3.1.37", "@0x/contracts-erc721": "^3.1.26-multiplex.0",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"lodash": "^4.17.11" "lodash": "^4.17.11"
}, },
"publishConfig": { "publishConfig": {

View File

@@ -13,11 +13,7 @@ export const exchangeDataEncoder = {
.getABIEncodedTransactionData(); .getABIEncodedTransactionData();
} else if (constants.BATCH_FILL_FN_NAMES.indexOf(fnName) !== -1) { } else if (constants.BATCH_FILL_FN_NAMES.indexOf(fnName) !== -1) {
data = (exchangeInstance as any) data = (exchangeInstance as any)
[fnName]( [fnName](orders, orders.map(order => order.takerAssetAmount), orders.map(order => order.signature))
orders,
orders.map(order => order.takerAssetAmount),
orders.map(order => order.signature),
)
.getABIEncodedTransactionData(); .getABIEncodedTransactionData();
} else if (constants.MARKET_FILL_FN_NAMES.indexOf(fnName) !== -1) { } else if (constants.MARKET_FILL_FN_NAMES.indexOf(fnName) !== -1) {
const fillAsset = /Buy/.test(fnName) ? 'makerAssetAmount' : 'takerAssetAmount'; const fillAsset = /Buy/.test(fnName) ? 'makerAssetAmount' : 'takerAssetAmount';

View File

@@ -39,10 +39,7 @@ blockchainTests.resets('Reentrancy Tests', env => {
// Handle tuples. // Handle tuples.
if (item.type === 'tuple') { if (item.type === 'tuple') {
const tuple = item as TupleDataItem; const tuple = item as TupleDataItem;
return _.zipObject( return _.zipObject(tuple.components.map(c => c.name), tuple.components.map(createFunctionInputs));
tuple.components.map(c => c.name),
tuple.components.map(createFunctionInputs),
);
} }
// Handle strings. // Handle strings.
if (item.type === 'string') { if (item.type === 'string') {

View File

@@ -86,7 +86,7 @@ blockchainTests.resets('MixinSignatureValidator', env => {
const SIGNATURE_LENGTH = 65; const SIGNATURE_LENGTH = 65;
const generateRandomSignature = (): string => hexUtils.random(SIGNATURE_LENGTH); const generateRandomSignature = (): string => hexUtils.random(SIGNATURE_LENGTH);
const hashBytes = (bytesHex: string): string => hexUtils.hash(bytesHex); const hashBytes = (bytesHex: string): string => ethUtil.bufferToHex(ethUtil.sha3(ethUtil.toBuffer(bytesHex)));
const signDataHex = (dataHex: string, privateKey: Buffer): string => { const signDataHex = (dataHex: string, privateKey: Buffer): string => {
const ecSignature = ethUtil.ecsign(ethUtil.toBuffer(dataHex), privateKey); const ecSignature = ethUtil.ecsign(ethUtil.toBuffer(dataHex), privateKey);
return hexUtils.concat(ecSignature.v, ecSignature.r, ecSignature.s); return hexUtils.concat(ecSignature.v, ecSignature.r, ecSignature.s);

View File

@@ -12,12 +12,12 @@ export abstract class AbstractBalanceAndProxyAllowanceFetcher {
* @param userAddress Ethereum address for which to fetch the balance * @param userAddress Ethereum address for which to fetch the balance
* @return Balance amount in base units * @return Balance amount in base units
*/ */
public abstract getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>;
/** /**
* Get the 0x asset proxy allowance of assetData for userAddress * Get the 0x asset proxy allowance of assetData for userAddress
* @param assetData AssetData for which to fetch the allowance * @param assetData AssetData for which to fetch the allowance
* @param userAddress Ethereum address for which to fetch the allowance * @param userAddress Ethereum address for which to fetch the allowance
* @return Allowance amount in base units * @return Allowance amount in base units
*/ */
public abstract getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>;
} }

View File

@@ -1,8 +1,8 @@
import { BigNumber } from '@0x/utils'; import { BigNumber } from '@0x/utils';
export abstract class AbstractBalanceAndProxyAllowanceLazyStore { export abstract class AbstractBalanceAndProxyAllowanceLazyStore {
public abstract getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>;
public abstract getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>;
public abstract setBalance(assetData: string, userAddress: string, balance: BigNumber): void; public abstract setBalance(assetData: string, userAddress: string, balance: BigNumber): void;
public abstract deleteBalance(assetData: string, userAddress: string): void; public abstract deleteBalance(assetData: string, userAddress: string): void;
public abstract setProxyAllowance(assetData: string, userAddress: string, proxyAllowance: BigNumber): void; public abstract setProxyAllowance(assetData: string, userAddress: string, proxyAllowance: BigNumber): void;

View File

@@ -11,5 +11,5 @@ export abstract class AbstractOrderFilledCancelledFetcher {
* @param orderHash OrderHash of order we are interested in * @param orderHash OrderHash of order we are interested in
* @return FilledTakerAmount * @return FilledTakerAmount
*/ */
public abstract getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
} }

View File

@@ -1,7 +1,7 @@
import { BigNumber } from '@0x/utils'; import { BigNumber } from '@0x/utils';
export abstract class AbstractOrderFilledCancelledLazyStore { export abstract class AbstractOrderFilledCancelledLazyStore {
public abstract getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
public abstract setFilledTakerAmount(orderHash: string, balance: BigNumber): void; public abstract setFilledTakerAmount(orderHash: string, balance: BigNumber): void;
public abstract deleteFilledTakerAmount(orderHash: string): void; public abstract deleteFilledTakerAmount(orderHash: string): void;
public abstract setIsCancelled(orderHash: string, isCancelled: boolean): void; public abstract setIsCancelled(orderHash: string, isCancelled: boolean): void;

View File

@@ -109,11 +109,7 @@ export class ExchangeWrapper {
opts: { makerAssetFillAmount: BigNumber; gas?: number; gasPrice?: BigNumber }, opts: { makerAssetFillAmount: BigNumber; gas?: number; gasPrice?: BigNumber },
): Promise<TransactionReceiptWithDecodedLogs> { ): Promise<TransactionReceiptWithDecodedLogs> {
return this.exchangeContract return this.exchangeContract
.marketBuyOrdersNoThrow( .marketBuyOrdersNoThrow(orders, opts.makerAssetFillAmount, orders.map(signedOrder => signedOrder.signature))
orders,
opts.makerAssetFillAmount,
orders.map(signedOrder => signedOrder.signature),
)
.awaitTransactionSuccessAsync({ from, gas: opts.gas }); .awaitTransactionSuccessAsync({ from, gas: opts.gas });
} }
public async marketSellOrdersFillOrKillAsync( public async marketSellOrdersFillOrKillAsync(

View File

@@ -18,7 +18,6 @@ import {
IsolatedExchangeFillEventArgs as FillEventArgs, IsolatedExchangeFillEventArgs as FillEventArgs,
} from '../wrappers'; } from '../wrappers';
export { Order } from '@0x/types';
export interface AssetBalances { export interface AssetBalances {
[assetData: string]: { [address: string]: BigNumber }; [assetData: string]: { [address: string]: BigNumber };
} }
@@ -28,6 +27,7 @@ export interface IsolatedExchangeEvents {
transferFromCalls: DispatchTransferFromCallArgs[]; transferFromCalls: DispatchTransferFromCallArgs[];
} }
export type Order = Order;
export type Numberish = string | number | BigNumber; export type Numberish = string | number | BigNumber;
export const DEFAULT_GOOD_SIGNATURE = createGoodSignature(); export const DEFAULT_GOOD_SIGNATURE = createGoodSignature();

View File

@@ -12,6 +12,7 @@ import { ReferenceFunctions as UtilReferenceFunctions, SafeMathRevertErrors } fr
import { FillResults, Order } from '@0x/types'; import { FillResults, Order } from '@0x/types';
import { AnyRevertError, BigNumber, ExchangeRevertErrors, hexUtils, StringRevertError } from '@0x/utils'; import { AnyRevertError, BigNumber, ExchangeRevertErrors, hexUtils, StringRevertError } from '@0x/utils';
import { LogEntry, LogWithDecodedArgs } from 'ethereum-types'; import { LogEntry, LogWithDecodedArgs } from 'ethereum-types';
import * as ethjs from 'ethereumjs-util';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { artifacts } from './artifacts'; import { artifacts } from './artifacts';
@@ -103,7 +104,7 @@ blockchainTests('Exchange wrapper functions unit tests.', env => {
// Creates a deterministic order signature, even though no signature validation // Creates a deterministic order signature, even though no signature validation
// actually occurs in the test contract. // actually occurs in the test contract.
function createOrderSignature(order: Order): string { function createOrderSignature(order: Order): string {
return hexUtils.hash(orderHashUtils.getOrderHashHex(order)); return ethjs.bufferToHex(ethjs.sha3(ethjs.toBuffer(orderHashUtils.getOrderHashHex(order))));
} }
// Asserts that `_fillOrder()` was called in the same order and with the same // Asserts that `_fillOrder()` was called in the same order and with the same

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "6.2.32", "version": "6.2.21-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "6.2.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "6.2.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "6.2.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "6.2.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "6.2.27",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "6.2.26",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "6.2.25",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "6.2.24",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "6.2.23",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "6.2.22",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "6.2.21",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v6.2.32 - _August 16, 2021_ ## v6.2.21-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v6.2.31 - _August 11, 2021_
* Dependencies updated
## v6.2.30 - _August 6, 2021_
* Dependencies updated
## v6.2.29 - _June 22, 2021_
* Dependencies updated
## v6.2.28 - _June 11, 2021_
* Dependencies updated
## v6.2.27 - _June 2, 2021_
* Dependencies updated
## v6.2.26 - _May 25, 2021_
* Dependencies updated
## v6.2.25 - _May 21, 2021_
* Dependencies updated
## v6.2.24 - _May 5, 2021_
* Dependencies updated
## v6.2.23 - _April 28, 2021_
* Dependencies updated
## v6.2.22 - _April 1, 2021_
* Dependencies updated
## v6.2.21 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-extensions", "name": "@0x/contracts-extensions",
"version": "6.2.32", "version": "6.2.21-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -52,23 +52,23 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-dev-utils": "^1.3.36", "@0x/contracts-dev-utils": "^1.3.25-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-erc721": "^3.1.37", "@0x/contracts-erc721": "^3.1.26-multiplex.0",
"@0x/contracts-exchange": "^3.2.38", "@0x/contracts-exchange": "^3.2.27-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -77,7 +77,7 @@
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereumjs-abi": "0.6.5", "ethereumjs-abi": "0.6.5",
"ethereumjs-util": "^7.0.10", "ethereumjs-util": "^5.1.1",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"mocha": "^6.2.0", "mocha": "^6.2.0",
@@ -87,13 +87,13 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"ethereum-types": "^3.5.0" "ethereum-types": "^3.4.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-integrations", "name": "@0x/contracts-integrations",
"version": "2.7.64", "version": "2.7.29-multiplex.0",
"private": true, "private": true,
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
@@ -52,25 +52,25 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contract-addresses": "^6.6.0", "@0x/contract-addresses": "^5.11.0",
"@0x/contract-wrappers": "^13.17.4", "@0x/contract-wrappers": "^13.14.0-multiplex",
"@0x/contracts-broker": "^1.1.37", "@0x/contracts-broker": "^1.1.26-multiplex.0",
"@0x/contracts-coordinator": "^3.1.38", "@0x/contracts-coordinator": "^3.1.27-multiplex.0",
"@0x/contracts-dev-utils": "^1.3.36", "@0x/contracts-dev-utils": "^1.3.25-multiplex.0",
"@0x/contracts-exchange-forwarder": "^4.2.38", "@0x/contracts-exchange-forwarder": "^4.2.27-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/contracts-extensions": "^6.2.32", "@0x/contracts-extensions": "^6.2.21-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/coordinator-server": "^1.0.5", "@0x/coordinator-server": "^1.0.5",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/migrations": "^8.1.1", "@0x/migrations": "^7.0.1-multiplex.0",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/protocol-utils": "^1.8.2", "@0x/protocol-utils": "^1.3.1-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@azure/core-asynciterator-polyfill": "^1.0.0", "@azure/core-asynciterator-polyfill": "^1.0.0",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
@@ -90,26 +90,26 @@
"solhint": "^1.4.1", "solhint": "^1.4.1",
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/asset-swapper": "^16.25.0", "@0x/asset-swapper": "^6.3.0-multiplex",
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-erc1155": "^2.1.37", "@0x/contracts-erc1155": "^2.1.26-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-erc721": "^3.1.37", "@0x/contracts-erc721": "^3.1.26-multiplex.0",
"@0x/contracts-exchange": "^3.2.38", "@0x/contracts-exchange": "^3.2.27-multiplex.0",
"@0x/contracts-multisig": "^4.1.38", "@0x/contracts-multisig": "^4.1.27-multiplex.0",
"@0x/contracts-staking": "^2.0.45", "@0x/contracts-staking": "^2.0.34-multiplex.0",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-zero-ex": "^0.28.0", "@0x/contracts-zero-ex": "^0.20.0-multiplex",
"@0x/subproviders": "^6.5.3", "@0x/subproviders": "^6.4.1",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"ethereumjs-util": "^7.0.10", "ethereumjs-util": "^6.2.0",
"lodash": "^4.17.11" "lodash": "^4.17.11"
}, },
"publishConfig": { "publishConfig": {

View File

@@ -534,14 +534,9 @@ blockchainTests.skip('Coordinator Client', env => {
const signedOrders = [signedOrder, signedOrderWithDifferentFeeRecipient]; const signedOrders = [signedOrder, signedOrderWithDifferentFeeRecipient];
const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount]; const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount];
await coordinatorClient await coordinatorClient
.batchFillOrdersAsync( .batchFillOrdersAsync(signedOrders, takerAssetFillAmounts, signedOrders.map(o => o.signature), {
signedOrders, from: takerAddress,
takerAssetFillAmounts, })
signedOrders.map(o => o.signature),
{
from: takerAddress,
},
)
.then(res => { .then(res => {
expect(res).to.be.undefined(); expect(res).to.be.undefined();
}) })
@@ -575,14 +570,9 @@ blockchainTests.skip('Coordinator Client', env => {
const signedOrders = [signedOrder, signedOrderWithDifferentCoordinatorOperator]; const signedOrders = [signedOrder, signedOrderWithDifferentCoordinatorOperator];
const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount]; const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount];
await coordinatorClient await coordinatorClient
.batchFillOrdersAsync( .batchFillOrdersAsync(signedOrders, takerAssetFillAmounts, signedOrders.map(o => o.signature), {
signedOrders, from: takerAddress,
takerAssetFillAmounts, })
signedOrders.map(o => o.signature),
{
from: takerAddress,
},
)
.then(res => { .then(res => {
expect(res).to.be.undefined(); expect(res).to.be.undefined();
}) })
@@ -610,14 +600,9 @@ blockchainTests.skip('Coordinator Client', env => {
const signedOrders = [signedOrder, signedOrderWithDifferentCoordinatorOperator]; const signedOrders = [signedOrder, signedOrderWithDifferentCoordinatorOperator];
const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount]; const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount];
await coordinatorClient await coordinatorClient
.batchFillOrdersAsync( .batchFillOrdersAsync(signedOrders, takerAssetFillAmounts, signedOrders.map(o => o.signature), {
signedOrders, from: takerAddress,
takerAssetFillAmounts, })
signedOrders.map(o => o.signature),
{
from: takerAddress,
},
)
.then(res => { .then(res => {
expect(res).to.be.undefined(); expect(res).to.be.undefined();
}) })

View File

@@ -267,11 +267,7 @@ blockchainTests.resets('Coordinator integration tests', env => {
expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value); expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value);
await balanceStore.updateBalancesAsync(); await balanceStore.updateBalancesAsync();
balanceStore.assertEquals(expectedBalances); balanceStore.assertEquals(expectedBalances);
verifyEvents( verifyEvents(txReceipt, orders.map(order => expectedFillEvent(order)), ExchangeEvents.Fill);
txReceipt,
orders.map(order => expectedFillEvent(order)),
ExchangeEvents.Fill,
);
}); });
it(`${fnName} should fill the orders if called by approver (eth fee, no refund)`, async () => { it(`${fnName} should fill the orders if called by approver (eth fee, no refund)`, async () => {
await balanceStore.updateBalancesAsync(); await balanceStore.updateBalancesAsync();
@@ -284,11 +280,7 @@ blockchainTests.resets('Coordinator integration tests', env => {
expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value); expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value);
await balanceStore.updateBalancesAsync(); await balanceStore.updateBalancesAsync();
balanceStore.assertEquals(expectedBalances); balanceStore.assertEquals(expectedBalances);
verifyEvents( verifyEvents(txReceipt, orders.map(order => expectedFillEvent(order)), ExchangeEvents.Fill);
txReceipt,
orders.map(order => expectedFillEvent(order)),
ExchangeEvents.Fill,
);
}); });
it(`${fnName} should fill the orders if called by approver (mixed fees, refund)`, async () => { it(`${fnName} should fill the orders if called by approver (mixed fees, refund)`, async () => {
await balanceStore.updateBalancesAsync(); await balanceStore.updateBalancesAsync();
@@ -301,11 +293,7 @@ blockchainTests.resets('Coordinator integration tests', env => {
expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value); expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value);
await balanceStore.updateBalancesAsync(); await balanceStore.updateBalancesAsync();
balanceStore.assertEquals(expectedBalances); balanceStore.assertEquals(expectedBalances);
verifyEvents( verifyEvents(txReceipt, orders.map(order => expectedFillEvent(order)), ExchangeEvents.Fill);
txReceipt,
orders.map(order => expectedFillEvent(order)),
ExchangeEvents.Fill,
);
}); });
it(`${fnName} should revert with an invalid approval signature`, async () => { it(`${fnName} should revert with an invalid approval signature`, async () => {
const approvalSignature = hexUtils.concat( const approvalSignature = hexUtils.concat(
@@ -372,11 +360,7 @@ blockchainTests.resets('Coordinator integration tests', env => {
.executeTransaction(transaction, maker.address, transaction.signature, []) .executeTransaction(transaction, maker.address, transaction.signature, [])
.awaitTransactionSuccessAsync({ from: maker.address }); .awaitTransactionSuccessAsync({ from: maker.address });
verifyEvents( verifyEvents(txReceipt, orders.map(order => expectedCancelEvent(order)), ExchangeEvents.Cancel);
txReceipt,
orders.map(order => expectedCancelEvent(order)),
ExchangeEvents.Cancel,
);
}); });
it('cancelOrdersUpTo call should be successful without an approval', async () => { it('cancelOrdersUpTo call should be successful without an approval', async () => {
const data = exchangeDataEncoder.encodeOrdersToExchangeData(ExchangeFunctionName.CancelOrdersUpTo, []); const data = exchangeDataEncoder.encodeOrdersToExchangeData(ExchangeFunctionName.CancelOrdersUpTo, []);

View File

@@ -63,9 +63,11 @@ blockchainTests.fork('DevUtils dydx order validation tests', env => {
let dai: ERC20TokenContract; let dai: ERC20TokenContract;
let usdc: ERC20TokenContract; let usdc: ERC20TokenContract;
let devUtils: DevUtilsContract; let devUtils: DevUtilsContract;
let accountOwner: string;
let minMarginRatio: number; let minMarginRatio: number;
before(async () => { before(async () => {
[accountOwner] = await env.getAccountAddressesAsync();
dydx = new IDydxContract(DYDX_ADDRESS, env.provider, env.txDefaults); dydx = new IDydxContract(DYDX_ADDRESS, env.provider, env.txDefaults);
dai = new ERC20TokenContract(DAI_ADDRESS, env.provider, env.txDefaults); dai = new ERC20TokenContract(DAI_ADDRESS, env.provider, env.txDefaults);
usdc = new ERC20TokenContract(USDC_ADDRESS, env.provider, env.txDefaults); usdc = new ERC20TokenContract(USDC_ADDRESS, env.provider, env.txDefaults);

View File

@@ -186,13 +186,13 @@ blockchainTests.resets('LibAssetData', env => {
}); });
it('should decode multiasset data', async () => { it('should decode multiasset data', async () => {
expect( expect(await devUtils.decodeMultiAssetData(KNOWN_MULTI_ASSET_ENCODING.assetData).callAsync()).to.deep.equal(
await devUtils.decodeMultiAssetData(KNOWN_MULTI_ASSET_ENCODING.assetData).callAsync(), [
).to.deep.equal([ AssetProxyId.MultiAsset,
AssetProxyId.MultiAsset, KNOWN_MULTI_ASSET_ENCODING.amounts,
KNOWN_MULTI_ASSET_ENCODING.amounts, KNOWN_MULTI_ASSET_ENCODING.nestedAssetData,
KNOWN_MULTI_ASSET_ENCODING.nestedAssetData, ],
]); );
}); });
it('should encode StaticCall data', async () => { it('should encode StaticCall data', async () => {

View File

@@ -278,21 +278,15 @@ blockchainTests.resets('matchOrders integration tests', env => {
ExchangeRevertErrors.BatchMatchOrdersErrorCodes.InvalidLengthRightSignatures, ExchangeRevertErrors.BatchMatchOrdersErrorCodes.InvalidLengthRightSignatures,
); );
let tx = deployment.exchange let tx = deployment.exchange
.batchMatchOrders( .batchMatchOrders(leftOrders, rightOrders, leftOrders.map(order => order.signature), [
leftOrders, rightOrders[0].signature,
rightOrders, ])
leftOrders.map(order => order.signature),
[rightOrders[0].signature],
)
.awaitTransactionSuccessAsync({ from: matcher.address }); .awaitTransactionSuccessAsync({ from: matcher.address });
await expect(tx).to.revertWith(expectedError); await expect(tx).to.revertWith(expectedError);
tx = deployment.exchange tx = deployment.exchange
.batchMatchOrdersWithMaximalFill( .batchMatchOrdersWithMaximalFill(leftOrders, rightOrders, leftOrders.map(order => order.signature), [
leftOrders, rightOrders[0].signature,
rightOrders, ])
leftOrders.map(order => order.signature),
[rightOrders[0].signature],
)
.awaitTransactionSuccessAsync({ from: matcher.address }); .awaitTransactionSuccessAsync({ from: matcher.address });
return expect(tx).to.revertWith(expectedError); return expect(tx).to.revertWith(expectedError);
}); });
@@ -481,10 +475,7 @@ blockchainTests.resets('matchOrders integration tests', env => {
], ],
leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT], leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT], rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT],
matchIndices: [ matchIndices: [[0, 0], [1, 0]],
[0, 0],
[1, 0],
],
shouldMaximallyFill: false, shouldMaximallyFill: false,
}); });
}); });
@@ -533,10 +524,7 @@ blockchainTests.resets('matchOrders integration tests', env => {
], ],
leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT], leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT],
rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT], rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
matchIndices: [ matchIndices: [[0, 0], [0, 1]],
[0, 0],
[0, 1],
],
shouldMaximallyFill: false, shouldMaximallyFill: false,
}); });
}); });
@@ -638,11 +626,7 @@ blockchainTests.resets('matchOrders integration tests', env => {
], ],
leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT], leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT], rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
matchIndices: [ matchIndices: [[0, 0], [0, 1], [1, 1]],
[0, 0],
[0, 1],
[1, 1],
],
shouldMaximallyFill: false, shouldMaximallyFill: false,
}); });
}); });
@@ -817,11 +801,7 @@ blockchainTests.resets('matchOrders integration tests', env => {
], ],
leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT], leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT], rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
matchIndices: [ matchIndices: [[0, 0], [1, 0], [1, 1]],
[0, 0],
[1, 0],
[1, 1],
],
shouldMaximallyFill: true, shouldMaximallyFill: true,
}); });
}); });

View File

@@ -106,12 +106,7 @@ blockchainTests.fork.resets('Forwarder mainnet tests', env => {
orders[1].takerAssetAmount.dividedToIntegerBy(2), orders[1].takerAssetAmount.dividedToIntegerBy(2),
); );
const [wethSpentAmount, makerAssetAcquiredAmount] = await forwarder const [wethSpentAmount, makerAssetAcquiredAmount] = await forwarder
.marketSellOrdersWithEth( .marketSellOrdersWithEth(orders, orders.map(o => o.signature), [], [])
orders,
orders.map(o => o.signature),
[],
[],
)
.callAsync({ .callAsync({
from: takerAddress, from: takerAddress,
value: ethSellAmount, value: ethSellAmount,
@@ -166,13 +161,7 @@ blockchainTests.fork.resets('Forwarder mainnet tests', env => {
orders[1].makerAssetAmount.dividedToIntegerBy(2), orders[1].makerAssetAmount.dividedToIntegerBy(2),
); );
const [wethSpentAmount, makerAssetAcquiredAmount] = await forwarder const [wethSpentAmount, makerAssetAcquiredAmount] = await forwarder
.marketBuyOrdersWithEth( .marketBuyOrdersWithEth(orders, makerAssetBuyAmount, orders.map(o => o.signature), [], [])
orders,
makerAssetBuyAmount,
orders.map(o => o.signature),
[],
[],
)
.callAsync({ .callAsync({
from: takerAddress, from: takerAddress,
value: ethSellAmount, value: ethSellAmount,

View File

@@ -190,14 +190,9 @@ export function MakerMixin<TBase extends Constructor>(Base: TBase): TBase & Cons
rightTakerAssetData, rightTakerAssetData,
makerFeeAssetData, makerFeeAssetData,
takerFeeAssetData, takerFeeAssetData,
] = [ ] = [leftMakerToken, leftTakerToken, rightMakerToken, rightTakerToken, makerFeeToken, takerFeeToken].map(
leftMakerToken, token => encodeERC20AssetData(token.address),
leftTakerToken, );
rightMakerToken,
rightTakerToken,
makerFeeToken,
takerFeeToken,
].map(token => encodeERC20AssetData(token.address));
// Construct and sign the left order // Construct and sign the left order
const leftOrder = await this.signOrderAsync({ const leftOrder = await this.signOrderAsync({

View File

@@ -8,10 +8,7 @@ import { Actor, Constructor } from './base';
* Useful for BalanceStore. * Useful for BalanceStore.
*/ */
export function actorAddressesByName(actors: Actor[]): ObjectMap<string> { export function actorAddressesByName(actors: Actor[]): ObjectMap<string> {
return _.zipObject( return _.zipObject(actors.map(actor => actor.name), actors.map(actor => actor.address));
actors.map(actor => actor.name),
actors.map(actor => actor.address),
);
} }
/** /**
@@ -22,5 +19,5 @@ export function filterActorsByRole<TClass extends Constructor>(
actors: Actor[], actors: Actor[],
role: TClass, role: TClass,
): Array<InstanceType<typeof role>> { ): Array<InstanceType<typeof role>> {
return actors.filter(actor => actor.mixins.includes(role.name)) as Array<InstanceType<typeof role>>; return actors.filter(actor => actor.mixins.includes(role.name)) as InstanceType<typeof role>;
} }

View File

@@ -77,24 +77,19 @@ tests('Exchange signature validation fuzz tests', env => {
before(async () => { before(async () => {
chainId = await env.web3Wrapper.getChainIdAsync(); chainId = await env.web3Wrapper.getChainIdAsync();
accounts = await env.getAccountAddressesAsync(); accounts = await env.getAccountAddressesAsync();
privateKeys = _.zipObject( privateKeys = _.zipObject(accounts, accounts.map((a, i) => constants.TESTRPC_PRIVATE_KEYS[i]));
accounts,
accounts.map((a, i) => constants.TESTRPC_PRIVATE_KEYS[i]),
);
deployment = await DeploymentManager.deployAsync(env, { deployment = await DeploymentManager.deployAsync(env, {
numErc20TokensToDeploy: 0, numErc20TokensToDeploy: 0,
numErc721TokensToDeploy: 0, numErc721TokensToDeploy: 0,
numErc1155TokensToDeploy: 0, numErc1155TokensToDeploy: 0,
}); });
exchange = deployment.exchange; exchange = deployment.exchange;
walletContractAddress = ( walletContractAddress = (await TestSignatureValidationWalletContract.deployFrom0xArtifactAsync(
await TestSignatureValidationWalletContract.deployFrom0xArtifactAsync( artifacts.TestSignatureValidationWallet,
artifacts.TestSignatureValidationWallet, env.provider,
env.provider, env.txDefaults,
env.txDefaults, {},
{}, )).address;
)
).address;
// This just has to be a contract address that doesn't implement the // This just has to be a contract address that doesn't implement the
// wallet spec. // wallet spec.
notWalletContractAddress = exchange.address; notWalletContractAddress = exchange.address;
@@ -720,7 +715,7 @@ tests('Exchange signature validation fuzz tests', env => {
invalidTestTransactionMangledSignature(), invalidTestTransactionMangledSignature(),
]; ];
const simulationEnvironment = new SimulationEnvironment(deployment, new BlockchainBalanceStore({}, {}), []); const simulationEnvironment = new SimulationEnvironment(deployment, new BlockchainBalanceStore({}, {}), []);
const simulation = new (class extends Simulation { const simulation = new class extends Simulation {
// tslint:disable-next-line: prefer-function-over-method // tslint:disable-next-line: prefer-function-over-method
protected async *_assertionGenerator(): AsyncIterableIterator<AssertionResult | void> { protected async *_assertionGenerator(): AsyncIterableIterator<AssertionResult | void> {
while (true) { while (true) {
@@ -728,7 +723,7 @@ tests('Exchange signature validation fuzz tests', env => {
yield (await action!.next()).value; yield (await action!.next()).value;
} }
} }
})(simulationEnvironment); }(simulationEnvironment);
simulation.resets = true; simulation.resets = true;
return simulation.fuzzAsync(); return simulation.fuzzAsync();
}); });

View File

@@ -1,106 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "4.1.38", "version": "4.1.27-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "4.1.37",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "4.1.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "4.1.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "4.1.34",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "4.1.33",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "4.1.32",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "4.1.31",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "4.1.30",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619596077,
"version": "4.1.29",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "4.1.28",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "4.1.27",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v4.1.38 - _August 16, 2021_ ## v4.1.27-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v4.1.37 - _August 11, 2021_
* Dependencies updated
## v4.1.36 - _August 6, 2021_
* Dependencies updated
## v4.1.35 - _June 22, 2021_
* Dependencies updated
## v4.1.34 - _June 11, 2021_
* Dependencies updated
## v4.1.33 - _June 2, 2021_
* Dependencies updated
## v4.1.32 - _May 25, 2021_
* Dependencies updated
## v4.1.31 - _May 21, 2021_
* Dependencies updated
## v4.1.30 - _May 5, 2021_
* Dependencies updated
## v4.1.29 - _April 28, 2021_
* Dependencies updated
## v4.1.28 - _April 1, 2021_
* Dependencies updated
## v4.1.27 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-multisig", "name": "@0x/contracts-multisig",
"version": "4.1.38", "version": "4.1.27-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -49,18 +49,18 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
"@types/node": "12.12.54", "@types/node": "12.12.54",
@@ -75,12 +75,12 @@
"shx": "^0.2.2", "shx": "^0.2.2",
"solhint": "^1.4.1", "solhint": "^1.4.1",
"tslint": "5.11.0", "tslint": "5.11.0",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"ethereum-types": "^3.5.0" "ethereum-types": "^3.4.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -1,107 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "2.0.45", "version": "2.0.34-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "2.0.44",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "2.0.43",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "2.0.42",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "2.0.41",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "2.0.40",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "2.0.39",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "2.0.38",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "2.0.37",
"changes": [
{
"note": "Patch epoch finalization issue",
"pr": 221
}
],
"timestamp": 1620214333
},
{
"timestamp": 1619596077,
"version": "2.0.36",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "2.0.35",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "2.0.34",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v2.0.45 - _August 16, 2021_ ## v2.0.34-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v2.0.44 - _August 11, 2021_
* Dependencies updated
## v2.0.43 - _August 6, 2021_
* Dependencies updated
## v2.0.42 - _June 22, 2021_
* Dependencies updated
## v2.0.41 - _June 11, 2021_
* Dependencies updated
## v2.0.40 - _June 2, 2021_
* Dependencies updated
## v2.0.39 - _May 25, 2021_
* Dependencies updated
## v2.0.38 - _May 21, 2021_
* Dependencies updated
## v2.0.37 - _May 5, 2021_
* Patch epoch finalization issue (#221)
## v2.0.36 - _April 28, 2021_
* Dependencies updated
## v2.0.35 - _April 1, 2021_
* Dependencies updated
## v2.0.34 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,55 +0,0 @@
/*
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 "./interfaces/IStaking.sol";
import "./sys/MixinParams.sol";
import "./stake/MixinStake.sol";
import "./fees/MixinExchangeFees.sol";
contract StakingPatch is
IStaking,
MixinParams,
MixinStake,
MixinExchangeFees
{
/// @dev Initialize storage owned by this contract.
/// This function should not be called directly.
/// The StakingProxy contract will call it in `attachStakingContract()`.
function init()
public
onlyAuthorized
{
uint256 currentEpoch_ = currentEpoch;
uint256 prevEpoch = currentEpoch_.safeSub(1);
// Patch corrupted state
aggregatedStatsByEpoch[prevEpoch].numPoolsToFinalize = 0;
this.endEpoch();
uint256 lastPoolId_ = 57;
for (uint256 i = 1; i <= lastPoolId_; i++) {
this.finalizePool(bytes32(i));
}
// Ensure that current epoch's state is not corrupted
aggregatedStatsByEpoch[currentEpoch_].numPoolsToFinalize = 0;
}
}

View File

@@ -53,10 +53,6 @@ contract MixinExchangeFees is
{ {
_assertValidProtocolFee(protocolFee); _assertValidProtocolFee(protocolFee);
if (protocolFee == 0) {
return;
}
// Transfer the protocol fee to this address if it should be paid in // Transfer the protocol fee to this address if it should be paid in
// WETH. // WETH.
if (msg.value == 0) { if (msg.value == 0) {

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-staking", "name": "@0x/contracts-staking",
"version": "2.0.45", "version": "2.0.34-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -41,7 +41,7 @@
"config": { "config": {
"publicInterfaceContracts": "IStaking,IStakingEvents,IStakingProxy,IZrxVault,LibStakingRichErrors,Staking,StakingProxy,ZrxVault,TestStaking", "publicInterfaceContracts": "IStaking,IStakingEvents,IStakingProxy,IZrxVault,LibStakingRichErrors,Staking,StakingProxy,ZrxVault,TestStaking",
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.", "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
"abis": "./test/generated-artifacts/@(IStaking|IStakingEvents|IStakingProxy|IStorage|IStorageInit|IStructs|IZrxVault|LibCobbDouglas|LibFixedMath|LibFixedMathRichErrors|LibSafeDowncast|LibStakingRichErrors|MixinAbstract|MixinConstants|MixinCumulativeRewards|MixinDeploymentConstants|MixinExchangeFees|MixinExchangeManager|MixinFinalizer|MixinParams|MixinScheduler|MixinStake|MixinStakeBalances|MixinStakeStorage|MixinStakingPool|MixinStakingPoolRewards|MixinStorage|Staking|StakingPatch|StakingProxy|TestAssertStorageParams|TestCobbDouglas|TestCumulativeRewardTracking|TestDelegatorRewards|TestExchangeManager|TestFinalizer|TestInitTarget|TestLibFixedMath|TestLibSafeDowncast|TestMixinCumulativeRewards|TestMixinParams|TestMixinScheduler|TestMixinStake|TestMixinStakeBalances|TestMixinStakeStorage|TestMixinStakingPool|TestMixinStakingPoolRewards|TestProtocolFees|TestProxyDestination|TestStaking|TestStakingNoWETH|TestStakingProxy|TestStakingProxyUnit|TestStorageLayoutAndConstants|ZrxVault).json" "abis": "./test/generated-artifacts/@(IStaking|IStakingEvents|IStakingProxy|IStorage|IStorageInit|IStructs|IZrxVault|LibCobbDouglas|LibFixedMath|LibFixedMathRichErrors|LibSafeDowncast|LibStakingRichErrors|MixinAbstract|MixinConstants|MixinCumulativeRewards|MixinDeploymentConstants|MixinExchangeFees|MixinExchangeManager|MixinFinalizer|MixinParams|MixinScheduler|MixinStake|MixinStakeBalances|MixinStakeStorage|MixinStakingPool|MixinStakingPoolRewards|MixinStorage|Staking|StakingProxy|TestAssertStorageParams|TestCobbDouglas|TestCumulativeRewardTracking|TestDelegatorRewards|TestExchangeManager|TestFinalizer|TestInitTarget|TestLibFixedMath|TestLibSafeDowncast|TestMixinCumulativeRewards|TestMixinParams|TestMixinScheduler|TestMixinStake|TestMixinStakeBalances|TestMixinStakeStorage|TestMixinStakingPool|TestMixinStakingPoolRewards|TestProtocolFees|TestProxyDestination|TestStaking|TestStakingNoWETH|TestStakingProxy|TestStakingProxyUnit|TestStorageLayoutAndConstants|ZrxVault).json"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -53,20 +53,20 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-dev-utils": "^1.3.36", "@0x/contracts-dev-utils": "^1.3.25-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-exchange-libs": "^4.3.37", "@0x/contracts-exchange-libs": "^4.3.26-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-utils": "^4.7.16", "@0x/contracts-utils": "^4.7.5-multiplex.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/node": "12.12.54", "@types/node": "12.12.54",
"chai": "^4.0.1", "chai": "^4.0.1",
@@ -84,15 +84,15 @@
"truffle": "^5.0.32", "truffle": "^5.0.32",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"ethereumjs-util": "^7.0.10" "ethereumjs-util": "^5.1.1"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@@ -4,7 +4,6 @@ import { DecodedLogArgs, LogWithDecodedArgs } from 'ethereum-types';
import { constants as stakingConstants } from './constants'; import { constants as stakingConstants } from './constants';
export { Numberish } from '@0x/contracts-test-utils';
// tslint:disable:max-classes-per-file // tslint:disable:max-classes-per-file
export interface StakingParams { export interface StakingParams {
@@ -260,3 +259,5 @@ export class AggregatedStats {
export interface AggregatedStatsByEpoch { export interface AggregatedStatsByEpoch {
[epoch: string]: AggregatedStats; [epoch: string]: AggregatedStats;
} }
export type Numberish = Numberish;

View File

@@ -157,11 +157,11 @@ export class FinalizerActor extends BaseActor {
const delegators = delegatorsByPoolId[poolId]; const delegators = delegatorsByPoolId[poolId];
delegatorBalancesByPoolId[poolId] = {}; delegatorBalancesByPoolId[poolId] = {};
for (const delegator of delegators) { for (const delegator of delegators) {
delegatorBalancesByPoolId[poolId][delegator] = ( delegatorBalancesByPoolId[poolId][
await this._stakingApiWrapper.stakingContract delegator
.getStakeDelegatedToPoolByOwner(delegator, poolId) ] = (await this._stakingApiWrapper.stakingContract
.callAsync() .getStakeDelegatedToPoolByOwner(delegator, poolId)
).currentEpochBalance; .callAsync()).currentEpochBalance;
} }
} }
return delegatorBalancesByPoolId; return delegatorBalancesByPoolId;
@@ -253,10 +253,7 @@ export class FinalizerActor extends BaseActor {
const totalFeesCollected = BigNumber.sum(...activePools.map(p => p.feesCollected)); const totalFeesCollected = BigNumber.sum(...activePools.map(p => p.feesCollected));
const totalWeightedStake = BigNumber.sum(...activePools.map(p => p.weightedStake)); const totalWeightedStake = BigNumber.sum(...activePools.map(p => p.weightedStake));
if (totalRewards.eq(0) || totalFeesCollected.eq(0) || totalWeightedStake.eq(0)) { if (totalRewards.eq(0) || totalFeesCollected.eq(0) || totalWeightedStake.eq(0)) {
return _.zipObject( return _.zipObject(poolIds, _.times(poolIds.length, () => new BigNumber(0)));
poolIds,
_.times(poolIds.length, () => new BigNumber(0)),
);
} }
const rewards = await Promise.all( const rewards = await Promise.all(
activePools.map(async pool => activePools.map(async pool =>

View File

@@ -33,7 +33,6 @@ import * as MixinStakingPool from '../test/generated-artifacts/MixinStakingPool.
import * as MixinStakingPoolRewards from '../test/generated-artifacts/MixinStakingPoolRewards.json'; import * as MixinStakingPoolRewards from '../test/generated-artifacts/MixinStakingPoolRewards.json';
import * as MixinStorage from '../test/generated-artifacts/MixinStorage.json'; import * as MixinStorage from '../test/generated-artifacts/MixinStorage.json';
import * as Staking from '../test/generated-artifacts/Staking.json'; import * as Staking from '../test/generated-artifacts/Staking.json';
import * as StakingPatch from '../test/generated-artifacts/StakingPatch.json';
import * as StakingProxy from '../test/generated-artifacts/StakingProxy.json'; import * as StakingProxy from '../test/generated-artifacts/StakingProxy.json';
import * as TestAssertStorageParams from '../test/generated-artifacts/TestAssertStorageParams.json'; import * as TestAssertStorageParams from '../test/generated-artifacts/TestAssertStorageParams.json';
import * as TestCobbDouglas from '../test/generated-artifacts/TestCobbDouglas.json'; import * as TestCobbDouglas from '../test/generated-artifacts/TestCobbDouglas.json';
@@ -62,7 +61,6 @@ import * as TestStorageLayoutAndConstants from '../test/generated-artifacts/Test
import * as ZrxVault from '../test/generated-artifacts/ZrxVault.json'; import * as ZrxVault from '../test/generated-artifacts/ZrxVault.json';
export const artifacts = { export const artifacts = {
Staking: Staking as ContractArtifact, Staking: Staking as ContractArtifact,
StakingPatch: StakingPatch as ContractArtifact,
StakingProxy: StakingProxy as ContractArtifact, StakingProxy: StakingProxy as ContractArtifact,
ZrxVault: ZrxVault as ContractArtifact, ZrxVault: ZrxVault as ContractArtifact,
MixinExchangeFees: MixinExchangeFees as ContractArtifact, MixinExchangeFees: MixinExchangeFees as ContractArtifact,

View File

@@ -102,15 +102,13 @@ blockchainTests('Migration tests', env => {
}); });
it('should set the correct initial params', async () => { it('should set the correct initial params', async () => {
const stakingProxyContractAddress = ( const stakingProxyContractAddress = (await StakingProxyContract.deployFrom0xArtifactAsync(
await StakingProxyContract.deployFrom0xArtifactAsync( artifacts.StakingProxy,
artifacts.StakingProxy, env.provider,
env.provider, env.txDefaults,
env.txDefaults, artifacts,
artifacts, stakingContract.address,
stakingContract.address, )).address;
)
).address;
const stakingProxyContract = new StakingContract( const stakingProxyContract = new StakingContract(
stakingProxyContractAddress, stakingProxyContractAddress,

View File

@@ -1,66 +0,0 @@
import { blockchainTests, constants, expect, filterLogsToArguments } from '@0x/contracts-test-utils';
import { BigNumber, logUtils } from '@0x/utils';
import * as _ from 'lodash';
import { artifacts } from './artifacts';
import { StakingEvents, StakingPatchContract, StakingProxyContract, StakingProxyEvents } from './wrappers';
const abis = _.mapValues(artifacts, v => v.compilerOutput.abi);
const STAKING_PROXY = '0xa26e80e7dea86279c6d778d702cc413e6cffa777';
const STAKING_OWNER = '0x7d3455421bbc5ed534a83c88fd80387dc8271392';
const EXCHANGE_PROXY = '0xdef1c0ded9bec7f1a1670819833240f027b25eff';
blockchainTests.configure({
fork: {
unlockedAccounts: [STAKING_OWNER, EXCHANGE_PROXY],
},
});
blockchainTests.fork('Staking patch mainnet fork tests', env => {
let stakingProxyContract: StakingProxyContract;
let patchedStakingPatchContract: StakingPatchContract;
before(async () => {
stakingProxyContract = new StakingProxyContract(STAKING_PROXY, env.provider, undefined, abis);
patchedStakingPatchContract = await StakingPatchContract.deployFrom0xArtifactAsync(
artifacts.Staking,
env.provider,
env.txDefaults,
artifacts,
);
});
it('Staking proxy successfully attaches to patched logic', async () => {
const tx = await stakingProxyContract
.attachStakingContract(patchedStakingPatchContract.address)
.awaitTransactionSuccessAsync({ from: STAKING_OWNER, gasPrice: 0 }, { shouldValidate: false });
expect(filterLogsToArguments(tx.logs, StakingProxyEvents.StakingContractAttachedToProxy)).to.deep.equal([
{
newStakingPatchContractAddress: patchedStakingPatchContract.address,
},
]);
expect(filterLogsToArguments(tx.logs, StakingEvents.EpochEnded).length).to.equal(1);
expect(filterLogsToArguments(tx.logs, StakingEvents.EpochFinalized).length).to.equal(1);
logUtils.log(`${tx.gasUsed} gas used`);
});
it('Patched staking handles 0 gas protocol fees', async () => {
const staking = new StakingPatchContract(STAKING_PROXY, env.provider, undefined, abis);
const maker = '0x7b1886e49ab5433bb46f7258548092dc8cdca28b';
const zeroFeeTx = await staking
.payProtocolFee(maker, constants.NULL_ADDRESS, constants.ZERO_AMOUNT)
.awaitTransactionSuccessAsync({ from: EXCHANGE_PROXY, gasPrice: 0 }, { shouldValidate: false });
// StakingPoolEarnedRewardsInEpoch should _not_ be emitted for a zero protocol fee.
// tslint:disable-next-line:no-unused-expression
expect(filterLogsToArguments(zeroFeeTx.logs, StakingEvents.StakingPoolEarnedRewardsInEpoch)).to.be.empty;
// Coincidentally there's some ETH in the ExchangeProxy
const nonZeroFeeTx = await staking
.payProtocolFee(maker, constants.NULL_ADDRESS, new BigNumber(1))
.awaitTransactionSuccessAsync({ from: EXCHANGE_PROXY, gasPrice: 0, value: 1 }, { shouldValidate: false });
// StakingPoolEarnedRewardsInEpoch _should_ be emitted for a non-zero protocol fee.
expect(
filterLogsToArguments(nonZeroFeeTx.logs, StakingEvents.StakingPoolEarnedRewardsInEpoch),
).to.have.lengthOf(1);
});
});
// tslint:enable:no-unnecessary-type-assertion

View File

@@ -12,6 +12,7 @@ import {
blockchainTests.resets('Exchange Unit Tests', env => { blockchainTests.resets('Exchange Unit Tests', env => {
// Addresses // Addresses
let nonOwner: string;
let owner: string; let owner: string;
let nonExchange: string; let nonExchange: string;
let exchange: string; let exchange: string;
@@ -23,7 +24,7 @@ blockchainTests.resets('Exchange Unit Tests', env => {
before(async () => { before(async () => {
// Set up addresses for testing. // Set up addresses for testing.
[, owner, nonExchange, exchange, nonAuthority, authority] = await env.getAccountAddressesAsync(); [nonOwner, owner, nonExchange, exchange, nonAuthority, authority] = await env.getAccountAddressesAsync();
// Deploy the Exchange Manager contract. // Deploy the Exchange Manager contract.
exchangeManager = await TestExchangeManagerContract.deployFrom0xArtifactAsync( exchangeManager = await TestExchangeManagerContract.deployFrom0xArtifactAsync(

View File

@@ -543,7 +543,7 @@ blockchainTests.resets('Finalizer unit tests', env => {
const expectedPoolRewards = await calculatePoolRewardsAsync(INITIAL_BALANCE, pools); const expectedPoolRewards = await calculatePoolRewardsAsync(INITIAL_BALANCE, pools);
const [pool, reward] = _.sampleSize(shortZip(pools, expectedPoolRewards), 1)[0]; const [pool, reward] = _.sampleSize(shortZip(pools, expectedPoolRewards), 1)[0];
return assertUnfinalizedPoolRewardsAsync(pool.poolId, { return assertUnfinalizedPoolRewardsAsync(pool.poolId, {
totalReward: reward, totalReward: (reward as any) as BigNumber,
membersStake: pool.membersStake, membersStake: pool.membersStake,
}); });
}); });

View File

@@ -12,13 +12,17 @@ import * as _ from 'lodash';
import { artifacts } from '../artifacts'; import { artifacts } from '../artifacts';
import { TestCobbDouglasContract } from '../wrappers'; import { TestCobbDouglasContract } from '../wrappers';
// tslint:disable: no-unnecessary-type-assertion
blockchainTests('LibCobbDouglas unit tests', env => { blockchainTests('LibCobbDouglas unit tests', env => {
const FUZZ_COUNT = 1024; const FUZZ_COUNT = 1024;
const PRECISION = 15; const PRECISION = 15;
let testContract: TestCobbDouglasContract; let testContract: TestCobbDouglasContract;
let ownerAddress: string;
let notOwnerAddress: string;
before(async () => { before(async () => {
[ownerAddress, notOwnerAddress] = await env.getAccountAddressesAsync();
testContract = await TestCobbDouglasContract.deployFrom0xArtifactAsync( testContract = await TestCobbDouglasContract.deployFrom0xArtifactAsync(
artifacts.TestCobbDouglas, artifacts.TestCobbDouglas,
env.provider, env.provider,
@@ -207,3 +211,4 @@ blockchainTests('LibCobbDouglas unit tests', env => {
}); });
}); });
}); });
// tslint:enable:no-unnecessary-type-assertion

View File

@@ -31,7 +31,6 @@ export * from '../test/generated-wrappers/mixin_staking_pool';
export * from '../test/generated-wrappers/mixin_staking_pool_rewards'; export * from '../test/generated-wrappers/mixin_staking_pool_rewards';
export * from '../test/generated-wrappers/mixin_storage'; export * from '../test/generated-wrappers/mixin_storage';
export * from '../test/generated-wrappers/staking'; export * from '../test/generated-wrappers/staking';
export * from '../test/generated-wrappers/staking_patch';
export * from '../test/generated-wrappers/staking_proxy'; export * from '../test/generated-wrappers/staking_proxy';
export * from '../test/generated-wrappers/test_assert_storage_params'; export * from '../test/generated-wrappers/test_assert_storage_params';
export * from '../test/generated-wrappers/test_cobb_douglas'; export * from '../test/generated-wrappers/test_cobb_douglas';

View File

@@ -40,7 +40,6 @@
"test/generated-artifacts/MixinStakingPoolRewards.json", "test/generated-artifacts/MixinStakingPoolRewards.json",
"test/generated-artifacts/MixinStorage.json", "test/generated-artifacts/MixinStorage.json",
"test/generated-artifacts/Staking.json", "test/generated-artifacts/Staking.json",
"test/generated-artifacts/StakingPatch.json",
"test/generated-artifacts/StakingProxy.json", "test/generated-artifacts/StakingProxy.json",
"test/generated-artifacts/TestAssertStorageParams.json", "test/generated-artifacts/TestAssertStorageParams.json",
"test/generated-artifacts/TestCobbDouglas.json", "test/generated-artifacts/TestCobbDouglas.json",

View File

@@ -1,107 +1,7 @@
[ [
{ {
"timestamp": 1629079369, "timestamp": 1615932869,
"version": "5.4.8", "version": "5.3.23-multiplex.0",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "5.4.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628225642,
"version": "5.4.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1624356181,
"version": "5.4.5",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "5.4.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "5.4.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621944788,
"version": "5.4.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "5.4.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "5.4.0",
"changes": [
{
"note": "Set default ganache gas limit to 100e6",
"pr": 197
}
],
"timestamp": 1620214333
},
{
"timestamp": 1619596077,
"version": "5.3.25",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "5.3.24",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1616005394,
"version": "5.3.23",
"changes": [ "changes": [
{ {
"note": "Dependencies updated" "note": "Dependencies updated"

View File

@@ -5,51 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v5.4.8 - _August 16, 2021_ ## v5.3.23-multiplex.0 - _March 16, 2021_
* Dependencies updated
## v5.4.7 - _August 11, 2021_
* Dependencies updated
## v5.4.6 - _August 6, 2021_
* Dependencies updated
## v5.4.5 - _June 22, 2021_
* Dependencies updated
## v5.4.4 - _June 11, 2021_
* Dependencies updated
## v5.4.3 - _June 2, 2021_
* Dependencies updated
## v5.4.2 - _May 25, 2021_
* Dependencies updated
## v5.4.1 - _May 21, 2021_
* Dependencies updated
## v5.4.0 - _May 5, 2021_
* Set default ganache gas limit to 100e6 (#197)
## v5.3.25 - _April 28, 2021_
* Dependencies updated
## v5.3.24 - _April 1, 2021_
* Dependencies updated
## v5.3.23 - _March 17, 2021_
* Dependencies updated * Dependencies updated

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-test-utils", "name": "@0x/contracts-test-utils",
"version": "5.4.8", "version": "5.3.23-multiplex.0",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -34,28 +34,28 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils",
"devDependencies": { "devDependencies": {
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
"shx": "^0.2.2", "shx": "^0.2.2",
"tslint": "5.11.0", "tslint": "5.11.0",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/assert": "^3.0.27", "@0x/assert": "^3.0.21",
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/contract-addresses": "^6.6.0", "@0x/contract-addresses": "^5.11.0",
"@0x/dev-utils": "^4.2.7", "@0x/dev-utils": "^4.2.1",
"@0x/json-schemas": "^6.1.3", "@0x/json-schemas": "^5.4.1",
"@0x/order-utils": "^10.4.28", "@0x/order-utils": "^10.4.18-multiplex.0",
"@0x/sol-coverage": "^4.0.37", "@0x/sol-coverage": "^4.0.31",
"@0x/sol-profiler": "^4.1.27", "@0x/sol-profiler": "^4.1.21",
"@0x/sol-trace": "^3.0.37", "@0x/sol-trace": "^3.0.31",
"@0x/subproviders": "^6.5.3", "@0x/subproviders": "^6.4.1",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"@types/bn.js": "^4.11.0", "@types/bn.js": "^4.11.0",
"@types/js-combinatorics": "^0.5.29", "@types/js-combinatorics": "^0.5.29",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
@@ -67,8 +67,8 @@
"chai-bignumber": "^3.0.0", "chai-bignumber": "^3.0.0",
"decimal.js": "^10.2.0", "decimal.js": "^10.2.0",
"dirty-chai": "^2.0.1", "dirty-chai": "^2.0.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"ethereumjs-util": "^7.0.10", "ethereumjs-util": "^5.1.1",
"ethers": "~4.0.4", "ethers": "~4.0.4",
"js-combinatorics": "^0.5.3", "js-combinatorics": "^0.5.3",
"lodash": "^4.17.11", "lodash": "^4.17.11",

View File

@@ -77,7 +77,7 @@ export const constants = {
ZERO_AMOUNT: new BigNumber(0), ZERO_AMOUNT: new BigNumber(0),
PERCENTAGE_DENOMINATOR: new BigNumber(10).pow(18), PERCENTAGE_DENOMINATOR: new BigNumber(10).pow(18),
TIME_BUFFER: new BigNumber(1000), TIME_BUFFER: new BigNumber(1000),
KECCAK256_NULL: ethUtil.bufferToHex(ethUtil.keccak256(Buffer.alloc(0))), KECCAK256_NULL: ethUtil.addHexPrefix(ethUtil.bufferToHex(ethUtil.SHA3_NULL)),
MAX_UINT256_ROOT: new BigNumber('340282366920938463463374607431768211456'), MAX_UINT256_ROOT: new BigNumber('340282366920938463463374607431768211456'),
ONE_ETHER: new BigNumber(1e18), ONE_ETHER: new BigNumber(1e18),
EIP712_DOMAIN_NAME: '0x Protocol', EIP712_DOMAIN_NAME: '0x Protocol',

View File

@@ -14,6 +14,6 @@ export function shortZip<T1, T2>(a: T1[], b: T2[]): Array<[T1, T2]> {
export function replaceKeysDeep(obj: {}, mapKeys: (key: string) => string | void): _.Dictionary<{}> { export function replaceKeysDeep(obj: {}, mapKeys: (key: string) => string | void): _.Dictionary<{}> {
return _.transform(obj, (result, value, key) => { return _.transform(obj, (result, value, key) => {
const currentKey = mapKeys(key) || key; const currentKey = mapKeys(key) || key;
result[currentKey] = _.isObject(value) ? replaceKeysDeep(value as {}, mapKeys) : (value as {}); result[currentKey] = _.isObject(value) ? replaceKeysDeep(value, mapKeys) : value;
}); });
} }

View File

@@ -40,6 +40,6 @@ export function verifyEventsFromLogs<TEventArgs>(
const _logs = filterLogsToArguments<TEventArgs>(logs, eventName); const _logs = filterLogsToArguments<TEventArgs>(logs, eventName);
expect(_logs.length, `Number of ${eventName} events emitted`).to.eq(expectedEvents.length); expect(_logs.length, `Number of ${eventName} events emitted`).to.eq(expectedEvents.length);
_logs.forEach((log, index) => { _logs.forEach((log, index) => {
expect(log, `${eventName} event ${index}`).to.deep.equal({ ...log, ...expectedEvents[index] }); expect(log, `${eventName} event ${index}`).to.deep.equal(expectedEvents[index]);
}); });
} }

View File

@@ -22,14 +22,14 @@ export class OrderFactory {
): Promise<SignedOrder> { ): Promise<SignedOrder> {
const fifteenMinutesInSeconds = 15 * 60; const fifteenMinutesInSeconds = 15 * 60;
const currentBlockTimestamp = await getLatestBlockTimestampAsync(); const currentBlockTimestamp = await getLatestBlockTimestampAsync();
const order = { const order = ({
takerAddress: constants.NULL_ADDRESS, takerAddress: constants.NULL_ADDRESS,
senderAddress: constants.NULL_ADDRESS, senderAddress: constants.NULL_ADDRESS,
expirationTimeSeconds: new BigNumber(currentBlockTimestamp).plus(fifteenMinutesInSeconds), expirationTimeSeconds: new BigNumber(currentBlockTimestamp).plus(fifteenMinutesInSeconds),
salt: generatePseudoRandomSalt(), salt: generatePseudoRandomSalt(),
...this._defaultOrderParams, ...this._defaultOrderParams,
...customOrderParams, ...customOrderParams,
} as Order; // tslint:disable-line:no-object-literal-type-assertion } as any) as Order;
const orderHashBuff = orderHashUtils.getOrderHashBuffer(order); const orderHashBuff = orderHashUtils.getOrderHashBuffer(order);
const signature = signingUtils.signMessage(orderHashBuff, this._privateKey, signatureType); const signature = signingUtils.signMessage(orderHashBuff, this._privateKey, signatureType);
const signedOrder = { const signedOrder = {

View File

@@ -30,8 +30,7 @@ export const orderUtils = {
return cancel; return cancel;
}, },
createOrderWithoutSignature(signedOrder: SignedOrder): Order { createOrderWithoutSignature(signedOrder: SignedOrder): Order {
const { signature, ...order } = signedOrder; return _.omit(signedOrder, ['signature']) as Order;
return order;
}, },
createBatchMatchOrders(signedOrdersLeft: SignedOrder[], signedOrdersRight: SignedOrder[]): BatchMatchOrder { createBatchMatchOrders(signedOrdersLeft: SignedOrder[], signedOrdersRight: SignedOrder[]): BatchMatchOrder {
return { return {

View File

@@ -108,7 +108,9 @@ export async function testWithReferenceFuncAsync(
return expect.fail( return expect.fail(
actualError, actualError,
expectedError, expectedError,
`${testCaseString}: expected error message '${actualError.message}' to equal '${expectedError.message}'`, `${testCaseString}: expected error message '${actualError.message}' to equal '${
expectedError.message
}'`,
); );
} }
} }

View File

@@ -20,7 +20,6 @@ export let providerConfigs: Web3Config = {
shouldUseInProcessGanache: true, shouldUseInProcessGanache: true,
shouldAllowUnlimitedContractSize: true, shouldAllowUnlimitedContractSize: true,
hardfork: 'istanbul', hardfork: 'istanbul',
gasLimit: 100e6,
unlocked_accounts: [ unlocked_accounts: [
'0x6cc5f688a315f3dc28a7781717a9a798a59fda7b', '0x6cc5f688a315f3dc28a7781717a9a798a59fda7b',
'0x55dc8f21d20d4c6ed3c82916a438a413ca68e335', '0x55dc8f21d20d4c6ed3c82916a438a413ca68e335',

View File

@@ -57,7 +57,9 @@ describe('Order hashing', () => {
...order, ...order,
takerAddress: (null as any) as string, takerAddress: (null as any) as string,
}; };
const expectedErrorMessage = `Expected order to conform to schema`; const expectedErrorMessage = `Order taker must be of type string. If you want anyone to be able to fill an order - pass ${
constants.NULL_ADDRESS
}`;
expect(() => orderHashUtils.getOrderHashHex(orderWithInvalidtakerFormat)).to.throw(expectedErrorMessage); expect(() => orderHashUtils.getOrderHashHex(orderWithInvalidtakerFormat)).to.throw(expectedErrorMessage);
}); });
}); });

View File

@@ -1,151 +1,13 @@
[ [
{ {
"timestamp": 1629079369, "version": "1.1.0-multiplex",
"version": "1.3.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1628665757,
"version": "1.3.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "1.3.0",
"changes": [
{
"note": "Added proposal 1 params and test",
"pr": 298
}
],
"timestamp": 1628225642
},
{
"timestamp": 1624356181,
"version": "1.2.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1623382456,
"version": "1.2.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1622609597,
"version": "1.2.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "1.2.0",
"changes": [
{
"note": "Added proposal 0 params and test",
"pr": 252
}
],
"timestamp": 1622154125
},
{
"timestamp": 1621944788,
"version": "1.1.8",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1621600614,
"version": "1.1.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1620214333,
"version": "1.1.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "1.1.5",
"changes": [
{
"note": "Patched votingPower logic",
"pr": 214
}
],
"timestamp": 1619825976
},
{
"timestamp": 1619596077,
"version": "1.1.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1619481586,
"version": "1.1.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1618259868,
"version": "1.1.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1617311315,
"version": "1.1.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "1.1.0",
"changes": [ "changes": [
{ {
"note": "Make the proposal/quorum thresholds updatable", "note": "Make the proposal/quorum thresholds updatable",
"pr": 165 "pr": 165
} }
], ],
"timestamp": 1616005394 "timestamp": 1615932869
}, },
{ {
"timestamp": 1614141718, "timestamp": 1614141718,

View File

@@ -5,67 +5,7 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG CHANGELOG
## v1.3.2 - _August 16, 2021_ ## v1.1.0-multiplex - _March 16, 2021_
* Dependencies updated
## v1.3.1 - _August 11, 2021_
* Dependencies updated
## v1.3.0 - _August 6, 2021_
* Added proposal 1 params and test (#298)
## v1.2.3 - _June 22, 2021_
* Dependencies updated
## v1.2.2 - _June 11, 2021_
* Dependencies updated
## v1.2.1 - _June 2, 2021_
* Dependencies updated
## v1.2.0 - _May 27, 2021_
* Added proposal 0 params and test (#252)
## v1.1.8 - _May 25, 2021_
* Dependencies updated
## v1.1.7 - _May 21, 2021_
* Dependencies updated
## v1.1.6 - _May 5, 2021_
* Dependencies updated
## v1.1.5 - _April 30, 2021_
* Patched votingPower logic (#214)
## v1.1.4 - _April 28, 2021_
* Dependencies updated
## v1.1.3 - _April 26, 2021_
* Dependencies updated
## v1.1.2 - _April 12, 2021_
* Dependencies updated
## v1.1.1 - _April 1, 2021_
* Dependencies updated
## v1.1.0 - _March 17, 2021_
* Make the proposal/quorum thresholds updatable (#165) * Make the proposal/quorum thresholds updatable (#165)

View File

@@ -21,10 +21,13 @@ pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol"; import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
import "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.sol";
import "./IStaking.sol"; import "./IStaking.sol";
contract DefaultPoolOperator { contract DefaultPoolOperator {
using LibERC20TokenV06 for IERC20TokenV06;
// Immutables // Immutables
IStaking public immutable stakingProxy; IStaking public immutable stakingProxy;
IERC20TokenV06 public immutable weth; IERC20TokenV06 public immutable weth;
@@ -54,7 +57,7 @@ contract DefaultPoolOperator {
function returnStakingRewards() function returnStakingRewards()
external external
{ {
uint256 wethBalance = weth.balanceOf(address(this)); uint256 wethBalance = weth.compatBalanceOf(address(this));
weth.transfer(address(stakingProxy), wethBalance); weth.compatTransfer(address(stakingProxy), wethBalance);
} }
} }

View File

@@ -30,7 +30,6 @@ interface IZrxTreasury {
uint256 votingPeriod; uint256 votingPeriod;
uint256 proposalThreshold; uint256 proposalThreshold;
uint256 quorumThreshold; uint256 quorumThreshold;
bytes32 defaultPoolId;
} }
struct ProposedAction { struct ProposedAction {

View File

@@ -20,6 +20,8 @@
pragma solidity ^0.6.12; pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
import "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.sol";
import "@0x/contracts-utils/contracts/src/v06/LibBytesV06.sol"; import "@0x/contracts-utils/contracts/src/v06/LibBytesV06.sol";
import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol"; import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol";
import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol"; import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol";
@@ -30,6 +32,7 @@ import "./IZrxTreasury.sol";
contract ZrxTreasury is contract ZrxTreasury is
IZrxTreasury IZrxTreasury
{ {
using LibERC20TokenV06 for IERC20TokenV06;
using LibSafeMathV06 for uint256; using LibSafeMathV06 for uint256;
using LibRichErrorsV06 for bytes; using LibRichErrorsV06 for bytes;
using LibBytesV06 for bytes; using LibBytesV06 for bytes;
@@ -49,9 +52,11 @@ contract ZrxTreasury is
/// @dev Initializes the ZRX treasury and creates the default /// @dev Initializes the ZRX treasury and creates the default
/// staking pool. /// staking pool.
/// @param stakingProxy_ The 0x staking proxy contract. /// @param stakingProxy_ The 0x staking proxy contract.
/// @param weth_ The WETH token contract.
/// @param params Immutable treasury parameters. /// @param params Immutable treasury parameters.
constructor( constructor(
IStaking stakingProxy_, IStaking stakingProxy_,
IERC20TokenV06 weth_,
TreasuryParameters memory params TreasuryParameters memory params
) )
public public
@@ -61,12 +66,15 @@ contract ZrxTreasury is
"VOTING_PERIOD_TOO_LONG" "VOTING_PERIOD_TOO_LONG"
); );
stakingProxy = stakingProxy_; stakingProxy = stakingProxy_;
DefaultPoolOperator defaultPoolOperator_ = new DefaultPoolOperator(
stakingProxy_,
weth_
);
defaultPoolOperator = defaultPoolOperator_;
defaultPoolId = defaultPoolOperator_.poolId();
votingPeriod = params.votingPeriod; votingPeriod = params.votingPeriod;
proposalThreshold = params.proposalThreshold; proposalThreshold = params.proposalThreshold;
quorumThreshold = params.quorumThreshold; quorumThreshold = params.quorumThreshold;
defaultPoolId = params.defaultPoolId;
IStaking.Pool memory defaultPool = stakingProxy_.getStakingPool(params.defaultPoolId);
defaultPoolOperator = DefaultPoolOperator(defaultPool.operator);
} }
// solhint-disable // solhint-disable
@@ -278,12 +286,6 @@ contract ZrxTreasury is
// Add voting power for operated staking pools. // Add voting power for operated staking pools.
for (uint256 i = 0; i != operatedPoolIds.length; i++) { for (uint256 i = 0; i != operatedPoolIds.length; i++) {
for (uint256 j = 0; j != i; j++) {
require(
operatedPoolIds[i] != operatedPoolIds[j],
"getVotingPower/DUPLICATE_POOL_ID"
);
}
IStaking.Pool memory pool = stakingProxy.getStakingPool(operatedPoolIds[i]); IStaking.Pool memory pool = stakingProxy.getStakingPool(operatedPoolIds[i]);
require( require(
pool.operator == account, pool.operator == account,

View File

@@ -1,6 +1,6 @@
{ {
"name": "@0x/contracts-treasury", "name": "@0x/contracts-treasury",
"version": "1.3.2", "version": "1.1.0-multiplex",
"engines": { "engines": {
"node": ">=6.12" "node": ">=6.12"
}, },
@@ -46,16 +46,16 @@
}, },
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury", "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury",
"devDependencies": { "devDependencies": {
"@0x/abi-gen": "^5.6.0", "@0x/abi-gen": "^5.4.21",
"@0x/contract-addresses": "^6.6.0", "@0x/contract-addresses": "^5.11.0",
"@0x/contracts-asset-proxy": "^3.7.19", "@0x/contracts-asset-proxy": "^3.7.8-multiplex.0",
"@0x/contracts-erc20": "^3.3.16", "@0x/contracts-erc20": "^3.3.5-multiplex.0",
"@0x/contracts-gen": "^2.0.38", "@0x/contracts-gen": "^2.0.32",
"@0x/contracts-staking": "^2.0.45", "@0x/contracts-staking": "^2.0.34-multiplex.0",
"@0x/contracts-test-utils": "^5.4.8", "@0x/contracts-test-utils": "^5.3.23-multiplex.0",
"@0x/sol-compiler": "^4.7.3", "@0x/sol-compiler": "^4.6.1",
"@0x/ts-doc-gen": "^0.0.28", "@0x/ts-doc-gen": "^0.0.28",
"@0x/tslint-config": "^4.1.4", "@0x/tslint-config": "^4.1.3",
"@types/isomorphic-fetch": "^0.0.35", "@types/isomorphic-fetch": "^0.0.35",
"@types/lodash": "4.14.104", "@types/lodash": "4.14.104",
"@types/mocha": "^5.2.7", "@types/mocha": "^5.2.7",
@@ -69,18 +69,18 @@
"solhint": "^1.4.1", "solhint": "^1.4.1",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "4.2.2" "typescript": "3.0.1"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.4.0", "@0x/base-contract": "^6.2.18",
"@0x/protocol-utils": "^1.8.2", "@0x/protocol-utils": "^1.3.1-multiplex.0",
"@0x/subproviders": "^6.5.3", "@0x/subproviders": "^6.4.1",
"@0x/types": "^3.3.3", "@0x/types": "^3.3.1",
"@0x/typescript-typings": "^5.2.0", "@0x/typescript-typings": "^5.1.6",
"@0x/utils": "^6.4.3", "@0x/utils": "^6.2.0",
"@0x/web3-wrapper": "^7.5.3", "@0x/web3-wrapper": "^7.4.1",
"ethereum-types": "^3.5.0", "ethereum-types": "^3.4.0",
"ethereumjs-util": "^7.0.10" "ethereumjs-util": "^5.1.1"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

File diff suppressed because one or more lines are too long

View File

@@ -1,222 +0,0 @@
import { artifacts as erc20Artifacts, ERC20TokenEvents } from '@0x/contracts-erc20';
import { StakingContract, StakingProxyContract } from '@0x/contracts-staking';
import { blockchainTests, constants, verifyEventsFromLogs } from '@0x/contracts-test-utils';
import { BigNumber, hexUtils, logUtils } from '@0x/utils';
import * as _ from 'lodash';
import { proposals } from '../src/proposals';
import { artifacts } from './artifacts';
import { ZrxTreasuryContract, ZrxTreasuryEvents } from './wrappers';
const SUBGRAPH_URL = 'https://api.thegraph.com/subgraphs/name/mzhu25/zeroex-staking';
const STAKING_PROXY_ADDRESS = '0xa26e80e7dea86279c6d778d702cc413e6cffa777';
const TREASURY_ADDRESS = '0x0bb1810061c2f5b2088054ee184e6c79e1591101';
const PROPOSER = process.env.PROPOSER || constants.NULL_ADDRESS;
const VOTER = '0xba4f44e774158408e2dc6c5cb65bc995f0a89180';
const VOTER_OPERATED_POOLS = ['0x0000000000000000000000000000000000000000000000000000000000000017'];
blockchainTests.configure({
fork: {
unlockedAccounts: [PROPOSER, VOTER],
},
});
async function querySubgraphAsync(operatorAddress: string): Promise<string[]> {
const query = `
{
stakingActor(id: "${operatorAddress}") {
operatedPools {
id
}
}
}
`;
const response = await fetch(SUBGRAPH_URL, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
query,
}),
});
const {
data: { stakingActor },
} = await response.json();
if (stakingActor) {
return stakingActor.operatedPools.map((pool: { id: string }) => hexUtils.leftPad(pool.id));
} else {
return [];
}
}
blockchainTests.fork.skip('Treasury proposal mainnet fork tests', env => {
let staking: StakingContract;
let stakingProxy: StakingProxyContract;
let treasury: ZrxTreasuryContract;
let votingPeriod: BigNumber;
async function fastForwardToNextEpochAsync(): Promise<void> {
const epochEndTime = await staking.getCurrentEpochEarliestEndTimeInSeconds().callAsync();
const lastBlockTime = await env.web3Wrapper.getBlockTimestampAsync('latest');
const dt = Math.max(0, epochEndTime.minus(lastBlockTime).toNumber());
await env.web3Wrapper.increaseTimeAsync(dt);
// mine next block
await env.web3Wrapper.mineBlockAsync();
const lastPoolId = new BigNumber(await staking.lastPoolId().callAsync(), 16);
const batchExecuteCalldata = [
...[...new Array(lastPoolId.toNumber())].map((_x, i) =>
staking.finalizePool(hexUtils.leftPad(i + 1)).getABIEncodedTransactionData(),
),
staking.endEpoch().getABIEncodedTransactionData(),
...[...new Array(lastPoolId.toNumber())].map((_x, i) =>
staking.finalizePool(hexUtils.leftPad(i + 1)).getABIEncodedTransactionData(),
),
...[...new Array(lastPoolId.toNumber())].map((_x, i) =>
staking.finalizePool(hexUtils.leftPad(i + 1)).getABIEncodedTransactionData(),
),
];
await stakingProxy.batchExecute(batchExecuteCalldata).awaitTransactionSuccessAsync();
}
before(async () => {
const abis = _.mapValues({ ...artifacts, ...erc20Artifacts }, v => v.compilerOutput.abi);
treasury = new ZrxTreasuryContract(TREASURY_ADDRESS, env.provider, env.txDefaults, abis);
votingPeriod = await treasury.votingPeriod().callAsync();
staking = new StakingContract(STAKING_PROXY_ADDRESS, env.provider, env.txDefaults);
stakingProxy = new StakingProxyContract(STAKING_PROXY_ADDRESS, env.provider, env.txDefaults);
});
describe('Proposal 0', () => {
it('works', async () => {
const proposal = proposals[0];
let executionEpoch: BigNumber;
if (proposal.executionEpoch) {
executionEpoch = proposal.executionEpoch;
} else {
const currentEpoch = await staking.currentEpoch().callAsync();
executionEpoch = currentEpoch.plus(2);
}
const pools = await querySubgraphAsync(PROPOSER);
const proposeTx = treasury.propose(proposal.actions, executionEpoch, proposal.description, pools);
const calldata = proposeTx.getABIEncodedTransactionData();
logUtils.log('ZrxTreasury.propose calldata:');
logUtils.log(calldata);
const proposalId = await proposeTx.callAsync({ from: PROPOSER });
const receipt = await proposeTx.awaitTransactionSuccessAsync({ from: PROPOSER });
verifyEventsFromLogs(
receipt.logs,
[
{
...proposal,
proposalId,
executionEpoch,
proposer: PROPOSER,
operatedPoolIds: pools,
},
],
ZrxTreasuryEvents.ProposalCreated,
);
await fastForwardToNextEpochAsync();
await fastForwardToNextEpochAsync();
await treasury
.castVote(proposalId, true, VOTER_OPERATED_POOLS)
.awaitTransactionSuccessAsync({ from: VOTER });
await env.web3Wrapper.increaseTimeAsync(votingPeriod.plus(1).toNumber());
await env.web3Wrapper.mineBlockAsync();
const executeTx = await treasury.execute(proposalId, proposal.actions).awaitTransactionSuccessAsync();
verifyEventsFromLogs(
executeTx.logs,
[
{
proposalId,
},
],
ZrxTreasuryEvents.ProposalExecuted,
);
const recipient = '0xf9347f751a6a1467abc722ec7d80ba2698dd9d6c';
verifyEventsFromLogs(
executeTx.logs,
[
{
_from: TREASURY_ADDRESS,
_to: recipient,
_value: new BigNumber(400_000).times('1e18'),
},
],
ERC20TokenEvents.Transfer,
);
});
});
describe('Proposal 1', () => {
it('works', async () => {
const proposal = proposals[1];
let executionEpoch: BigNumber;
if (proposal.executionEpoch) {
executionEpoch = proposal.executionEpoch;
} else {
const currentEpoch = await staking.currentEpoch().callAsync();
executionEpoch = currentEpoch.plus(2);
}
const pools = await querySubgraphAsync(PROPOSER);
const proposeTx = treasury.propose(proposal.actions, executionEpoch, proposal.description, pools);
const calldata = proposeTx.getABIEncodedTransactionData();
logUtils.log('ZrxTreasury.propose calldata:');
logUtils.log(calldata);
const proposalId = await proposeTx.callAsync({ from: PROPOSER });
const receipt = await proposeTx.awaitTransactionSuccessAsync({ from: PROPOSER });
verifyEventsFromLogs(
receipt.logs,
[
{
...proposal,
proposalId,
executionEpoch,
proposer: PROPOSER,
operatedPoolIds: pools,
},
],
ZrxTreasuryEvents.ProposalCreated,
);
await fastForwardToNextEpochAsync();
await fastForwardToNextEpochAsync();
await treasury
.castVote(proposalId, true, VOTER_OPERATED_POOLS)
.awaitTransactionSuccessAsync({ from: VOTER });
await env.web3Wrapper.increaseTimeAsync(votingPeriod.plus(1).toNumber());
await env.web3Wrapper.mineBlockAsync();
const executeTx = await treasury.execute(proposalId, proposal.actions).awaitTransactionSuccessAsync();
verifyEventsFromLogs(
executeTx.logs,
[
{
proposalId,
},
],
ZrxTreasuryEvents.ProposalExecuted,
);
const recipient = '0xab66cc8fd10457ebc9d13b9760c835f0a4cbc487';
verifyEventsFromLogs(
executeTx.logs,
[
{
_from: TREASURY_ADDRESS,
_to: recipient,
_value: new BigNumber(330_813).times('1e18'),
},
{
_from: TREASURY_ADDRESS,
_to: recipient,
_value: new BigNumber(420000).times('1e18'),
},
],
ERC20TokenEvents.Transfer,
);
});
});
});

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