Upgrade to typescript v4.2.2 (#188)

* upgrade to typescript v4.2.2

* prettier; remove outdated test
This commit is contained in:
Xianny 2021-03-30 13:26:05 -07:00 committed by GitHub
parent 525bc8197b
commit 7bf009fbf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
50 changed files with 58 additions and 426 deletions

View File

@ -76,7 +76,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -1,354 +0,0 @@
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

@ -81,7 +81,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -79,7 +79,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/assert": "^3.0.21", "@0x/assert": "^3.0.21",

View File

@ -60,7 +60,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -77,7 +77,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -79,7 +79,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18" "@0x/base-contract": "^6.2.18"

View File

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

View File

@ -81,7 +81,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18" "@0x/base-contract": "^6.2.18"

View File

@ -87,7 +87,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -77,7 +77,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -85,7 +85,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

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 async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract 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 async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract 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 async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>;
public abstract async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; public abstract 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 async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; public abstract 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 async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; public abstract 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

@ -18,6 +18,7 @@ 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 };
} }
@ -27,7 +28,6 @@ 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

@ -87,7 +87,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -90,7 +90,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/asset-swapper": "^6.3.0", "@0x/asset-swapper": "^6.3.0",

View File

@ -63,11 +63,9 @@ 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

@ -19,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 InstanceType<typeof role>; return actors.filter(actor => actor.mixins.includes(role.name)) as Array<InstanceType<typeof role>>;
} }

View File

@ -75,7 +75,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -84,7 +84,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -4,6 +4,7 @@ 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 {
@ -259,5 +260,3 @@ export class AggregatedStats {
export interface AggregatedStatsByEpoch { export interface AggregatedStatsByEpoch {
[epoch: string]: AggregatedStats; [epoch: string]: AggregatedStats;
} }
export type Numberish = Numberish;

View File

@ -12,7 +12,6 @@ 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;
@ -24,7 +23,7 @@ blockchainTests.resets('Exchange Unit Tests', env => {
before(async () => { before(async () => {
// Set up addresses for testing. // Set up addresses for testing.
[nonOwner, owner, nonExchange, exchange, nonAuthority, authority] = await env.getAccountAddressesAsync(); [, 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 as any) as BigNumber, totalReward: reward,
membersStake: pool.membersStake, membersStake: pool.membersStake,
}); });
}); });

View File

@ -12,17 +12,13 @@ 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,
@ -211,4 +207,3 @@ blockchainTests('LibCobbDouglas unit tests', env => {
}); });
}); });
}); });
// tslint:enable:no-unnecessary-type-assertion

View File

@ -39,7 +39,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/assert": "^3.0.21", "@0x/assert": "^3.0.21",

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, mapKeys) : value; result[currentKey] = _.isObject(value) ? replaceKeysDeep(value as {}, mapKeys) : (value as {});
}); });
} }

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 any) as Order; } as Order; // tslint:disable-line:no-object-literal-type-assertion
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,7 +30,8 @@ export const orderUtils = {
return cancel; return cancel;
}, },
createOrderWithoutSignature(signedOrder: SignedOrder): Order { createOrderWithoutSignature(signedOrder: SignedOrder): Order {
return _.omit(signedOrder, ['signature']) as Order; const { signature, ...order } = signedOrder;
return order;
}, },
createBatchMatchOrders(signedOrdersLeft: SignedOrder[], signedOrdersRight: SignedOrder[]): BatchMatchOrder { createBatchMatchOrders(signedOrdersLeft: SignedOrder[], signedOrdersRight: SignedOrder[]): BatchMatchOrder {
return { return {

View File

@ -69,7 +69,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -76,7 +76,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -79,7 +79,7 @@
"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": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",

View File

@ -9,7 +9,6 @@ blockchainTests.resets('CurveLiquidityProvider feature', env => {
let sellToken: TestMintableERC20TokenContract; let sellToken: TestMintableERC20TokenContract;
let buyToken: TestMintableERC20TokenContract; let buyToken: TestMintableERC20TokenContract;
let testCurve: TestCurveContract; let testCurve: TestCurveContract;
let owner: string;
let taker: string; let taker: string;
const RECIPIENT = hexUtils.random(20); const RECIPIENT = hexUtils.random(20);
const SELL_AMOUNT = getRandomInteger('1e6', '1e18'); const SELL_AMOUNT = getRandomInteger('1e6', '1e18');
@ -24,7 +23,7 @@ blockchainTests.resets('CurveLiquidityProvider feature', env => {
const { ZERO_AMOUNT } = constants; const { ZERO_AMOUNT } = constants;
before(async () => { before(async () => {
[owner, taker] = await env.getAccountAddressesAsync(); [, taker] = await env.getAccountAddressesAsync();
[sellToken, buyToken] = await Promise.all( [sellToken, buyToken] = await Promise.all(
new Array(2) new Array(2)
.fill(0) .fill(0)

View File

@ -15,7 +15,6 @@ blockchainTests.resets('MooniswapLiquidityProvider feature', env => {
let buyToken: TestMintableERC20TokenContract; let buyToken: TestMintableERC20TokenContract;
let weth: TestWethContract; let weth: TestWethContract;
let testMooniswap: TestMooniswapContract; let testMooniswap: TestMooniswapContract;
let owner: string;
let taker: string; let taker: string;
let mooniswapData: string; let mooniswapData: string;
const RECIPIENT = hexUtils.random(20); const RECIPIENT = hexUtils.random(20);
@ -25,7 +24,7 @@ blockchainTests.resets('MooniswapLiquidityProvider feature', env => {
const BUY_AMOUNT = getRandomInteger('1e18', '10e18'); const BUY_AMOUNT = getRandomInteger('1e18', '10e18');
before(async () => { before(async () => {
[owner, taker] = await env.getAccountAddressesAsync(); [, taker] = await env.getAccountAddressesAsync();
[sellToken, buyToken] = await Promise.all( [sellToken, buyToken] = await Promise.all(
new Array(2) new Array(2)
.fill(0) .fill(0)

View File

@ -10,13 +10,12 @@ import {
} from './wrappers'; } from './wrappers';
blockchainTests.resets('PermissionlessTransformerDeployer', env => { blockchainTests.resets('PermissionlessTransformerDeployer', env => {
let owner: string;
let sender: string; let sender: string;
let deployer: PermissionlessTransformerDeployerContract; let deployer: PermissionlessTransformerDeployerContract;
const deployBytes = artifacts.TestPermissionlessTransformerDeployerTransformer.compilerOutput.evm.bytecode.object; const deployBytes = artifacts.TestPermissionlessTransformerDeployerTransformer.compilerOutput.evm.bytecode.object;
before(async () => { before(async () => {
[owner, sender] = await env.getAccountAddressesAsync(); [, sender] = await env.getAccountAddressesAsync();
deployer = await PermissionlessTransformerDeployerContract.deployFrom0xArtifactAsync( deployer = await PermissionlessTransformerDeployerContract.deployFrom0xArtifactAsync(
artifacts.PermissionlessTransformerDeployer, artifacts.PermissionlessTransformerDeployer,
env.provider, env.provider,

View File

@ -9,13 +9,12 @@ import {
} from './wrappers'; } from './wrappers';
blockchainTests.resets('TransformerDeployer', env => { blockchainTests.resets('TransformerDeployer', env => {
let owner: string;
let authority: string; let authority: string;
let deployer: TransformerDeployerContract; let deployer: TransformerDeployerContract;
const deployBytes = artifacts.TestTransformerDeployerTransformer.compilerOutput.evm.bytecode.object; const deployBytes = artifacts.TestTransformerDeployerTransformer.compilerOutput.evm.bytecode.object;
before(async () => { before(async () => {
[owner, authority] = await env.getAccountAddressesAsync(); [, authority] = await env.getAccountAddressesAsync();
deployer = await TransformerDeployerContract.deployFrom0xArtifactAsync( deployer = await TransformerDeployerContract.deployFrom0xArtifactAsync(
artifacts.TransformerDeployer, artifacts.TransformerDeployer,
env.provider, env.provider,

View File

@ -77,7 +77,7 @@
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
"prettier": "~1.16.3", "prettier": "~1.16.3",
"source-map-support": "^0.5.6", "source-map-support": "^0.5.6",
"typescript": "3.0.1", "typescript": "4.2.2",
"wsrun": "^2.2.0" "wsrun": "^2.2.0"
}, },
"resolutions": { "resolutions": {

View File

@ -89,7 +89,6 @@
"devDependencies": { "devDependencies": {
"@0x/base-contract": "^6.2.18", "@0x/base-contract": "^6.2.18",
"@0x/contracts-asset-proxy": "^3.7.8", "@0x/contracts-asset-proxy": "^3.7.8",
"@0x/contracts-erc20": "^3.3.4",
"@0x/contracts-exchange": "^3.2.27", "@0x/contracts-exchange": "^3.2.27",
"@0x/contracts-exchange-libs": "^4.3.26", "@0x/contracts-exchange-libs": "^4.3.26",
"@0x/contracts-gen": "^2.0.32", "@0x/contracts-gen": "^2.0.32",
@ -118,7 +117,7 @@
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typemoq": "^2.1.0", "typemoq": "^2.1.0",
"typescript": "3.0.1" "typescript": "4.2.2"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@ -104,16 +104,14 @@ export const FEE_QUOTE_SOURCES = [ERC20BridgeSource.Uniswap, ERC20BridgeSource.U
// HACK(mzhu25): Limit and RFQ orders need to be treated as different sources // HACK(mzhu25): Limit and RFQ orders need to be treated as different sources
// when computing the exchange proxy gas overhead. // when computing the exchange proxy gas overhead.
export const SOURCE_FLAGS: { [source in ERC20BridgeSource]: number } & { export const SOURCE_FLAGS: { [key in ERC20BridgeSource]: number } & {
RfqOrder: number; RfqOrder: number;
LimitOrder: number; LimitOrder: number;
} = Object.assign( } = Object.assign(
{}, {},
...['RfqOrder', 'LimitOrder', ...Object.values(ERC20BridgeSource)].map( ...['RfqOrder', 'LimitOrder', ...Object.values(ERC20BridgeSource)].map((source, index) => ({
(source: ERC20BridgeSource | 'RfqOrder' | 'LimitOrder', index) => ({ [source]: source === ERC20BridgeSource.Native ? 0 : 1 << index,
[source]: source === ERC20BridgeSource.Native ? 0 : 1 << index, })),
}),
),
); );
const MIRROR_WRAPPED_TOKENS = { const MIRROR_WRAPPED_TOKENS = {

View File

@ -30,7 +30,7 @@
"devDependencies": { "devDependencies": {
"gitpkg": "https://github.com/0xProject/gitpkg.git", "gitpkg": "https://github.com/0xProject/gitpkg.git",
"shx": "^0.2.2", "shx": "^0.2.2",
"typescript": "3.0.1" "typescript": "4.2.2"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@ -36,7 +36,7 @@
"lodash": "^4.17.11", "lodash": "^4.17.11",
"mocha": "^6.2.0", "mocha": "^6.2.0",
"shx": "^0.2.2", "shx": "^0.2.2",
"typescript": "3.0.1" "typescript": "4.2.2"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

View File

@ -48,7 +48,7 @@
"mocha": "^6.2.0", "mocha": "^6.2.0",
"shx": "^0.2.2", "shx": "^0.2.2",
"tslint": "5.11.0", "tslint": "5.11.0",
"typescript": "3.0.1" "typescript": "4.2.2"
}, },
"private": true, "private": true,
"publishConfig": { "publishConfig": {

View File

@ -52,7 +52,7 @@
"gitpkg": "https://github.com/0xProject/gitpkg.git", "gitpkg": "https://github.com/0xProject/gitpkg.git",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "3.0.1" "typescript": "4.2.2"
}, },
"dependencies": { "dependencies": {
"@0x/assert": "^3.0.21", "@0x/assert": "^3.0.21",

View File

@ -62,7 +62,7 @@
"shx": "^0.2.2", "shx": "^0.2.2",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "3.0.1", "typescript": "4.2.2",
"web3-provider-engine": "14.0.6", "web3-provider-engine": "14.0.6",
"yargs": "^10.0.3" "yargs": "^10.0.3"
}, },

View File

@ -64,7 +64,7 @@
"sinon": "^4.0.0", "sinon": "^4.0.0",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "3.0.1", "typescript": "4.2.2",
"web3-provider-engine": "14.0.6" "web3-provider-engine": "14.0.6"
}, },
"dependencies": { "dependencies": {

View File

@ -142,7 +142,7 @@ export const eip712Utils = {
_.omit(mtx, 'domain'), _.omit(mtx, 'domain'),
// tslint:disable-next-line: custom-no-magic-numbers // tslint:disable-next-line: custom-no-magic-numbers
v => (BigNumber.isBigNumber(v) ? v.toString(10) : v), v => (BigNumber.isBigNumber(v) ? v.toString(10) : v),
) as EIP712Object, ) as EIP712Object, // tslint:disable-line:no-unnecessary-type-assertion
{ {
...constants.MAINNET_EXCHANGE_PROXY_DOMAIN, ...constants.MAINNET_EXCHANGE_PROXY_DOMAIN,
...mtx.domain, ...mtx.domain,

View File

@ -58,7 +58,7 @@
"sinon": "^4.0.0", "sinon": "^4.0.0",
"tslint": "5.11.0", "tslint": "5.11.0",
"typedoc": "~0.16.11", "typedoc": "~0.16.11",
"typescript": "3.0.1", "typescript": "4.2.2",
"web3-provider-engine": "14.0.6" "web3-provider-engine": "14.0.6"
}, },
"dependencies": { "dependencies": {

View File

@ -12338,14 +12338,15 @@ typeorm@0.2.7:
yargonaut "^1.1.2" yargonaut "^1.1.2"
yargs "^11.1.0" yargs "^11.1.0"
typescript@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb"
typescript@3.7.x: typescript@3.7.x:
version "3.7.5" version "3.7.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
typescript@4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c"
integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==
typescript@^3.8.3: typescript@^3.8.3:
version "3.9.7" version "3.9.7"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"