diff options
author | Fabio Berger <me@fabioberger.com> | 2018-08-14 04:01:32 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-08-14 04:01:32 +0800 |
commit | 9d3c287918389d07f884245bd1bc968955768b6f (patch) | |
tree | 460fded537c7d64154972b7d14332f88554d14c0 /packages/contract-wrappers/src/utils/assert.ts | |
parent | c2b5fe3d844d35966c5498326000bd8317fb547c (diff) | |
parent | 15e15f994a1b18cf2e9be151194c826d53a01601 (diff) | |
download | dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.tar dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.tar.gz dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.tar.bz2 dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.tar.lz dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.tar.xz dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.tar.zst dexon-sol-tools-9d3c287918389d07f884245bd1bc968955768b6f.zip |
Merge branch 'sol-cov-fixes' of github.com:0xProject/0x-monorepo into sol-cov-fixes
* 'sol-cov-fixes' of github.com:0xProject/0x-monorepo: (49 commits)
Add @return comments
Import marshaller directly
Update comment about ethers checksummed address behavior
Add packages/coverage/.gitkeep file
Update CI config and package.json to run @0xproject/utils tests on CI
Update remaining CHANGELOG.json files
Change amir picture
Update CHANGELOG.json for contract-wrappers
Update ethers typings for TypeScript 2.9.2
Update CHANGELOG.json for base-contract
Move some ethers-related types to typescript-typings/ethers
Apply prettier
Add strictArgumentEncodingCheck to BaseContract and use it in contract templates
fix(monorepo-scripts): Fix typo in git tag command
feat(monorepo-scripts): Add confirmation prompt before publishing
fix comments and styling for MixinSignatureValidator
Update TypeScript to version 2.9.2
Use asm for hashEIP712Message, increment free memory pointer after asm hashing functions
Fix comments, styling, and optimize hashOrder
Remove assertion comments
...
Diffstat (limited to 'packages/contract-wrappers/src/utils/assert.ts')
-rw-r--r-- | packages/contract-wrappers/src/utils/assert.ts | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/packages/contract-wrappers/src/utils/assert.ts b/packages/contract-wrappers/src/utils/assert.ts index 842b16fa0..183642170 100644 --- a/packages/contract-wrappers/src/utils/assert.ts +++ b/packages/contract-wrappers/src/utils/assert.ts @@ -1,11 +1,14 @@ import { assert as sharedAssert } from '@0xproject/assert'; // HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here import { Schema } from '@0xproject/json-schemas'; // tslint:disable-line:no-unused-variable -import { isValidSignatureAsync } from '@0xproject/order-utils'; -import { ECSignature } from '@0xproject/types'; // tslint:disable-line:no-unused-variable +import { assetDataUtils, isValidSignatureAsync } from '@0xproject/order-utils'; +import { ECSignature, Order } from '@0xproject/types'; // tslint:disable-line:no-unused-variable import { BigNumber } from '@0xproject/utils'; // tslint:disable-line:no-unused-variable import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Provider } from 'ethereum-types'; +import * as _ from 'lodash'; + +import { constants } from './constants'; export const assert = { ...sharedAssert, @@ -16,12 +19,12 @@ export const assert = { signerAddress: string, ): Promise<void> { const isValid = await isValidSignatureAsync(provider, orderHash, signature, signerAddress); - this.assert(isValid, `Expected order with hash '${orderHash}' to have a valid signature`); + sharedAssert.assert(isValid, `Expected order with hash '${orderHash}' to have a valid signature`); }, isValidSubscriptionToken(variableName: string, subscriptionToken: string): void { const uuidRegex = new RegExp('^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$'); const isValid = uuidRegex.test(subscriptionToken); - this.assert(isValid, `Expected ${variableName} to be a valid subscription token`); + sharedAssert.assert(isValid, `Expected ${variableName} to be a valid subscription token`); }, async isSenderAddressAsync( variableName: string, @@ -35,4 +38,53 @@ export const assert = { `Specified ${variableName} ${senderAddressHex} isn't available through the supplied web3 provider`, ); }, + ordersCanBeUsedForForwarderContract(orders: Order[], etherTokenAddress: string): void { + sharedAssert.assert(!_.isEmpty(orders), 'Expected at least 1 signed order. Found no orders'); + assert.ordersHaveAtMostOneUniqueValueForProperty(orders, 'makerAssetData'); + assert.allTakerAssetDatasAreErc20Token(orders, etherTokenAddress); + assert.allTakerAddressesAreNull(orders); + }, + feeOrdersCanBeUsedForForwarderContract(orders: Order[], zrxTokenAddress: string, etherTokenAddress: string): void { + if (!_.isEmpty(orders)) { + assert.allMakerAssetDatasAreErc20Token(orders, zrxTokenAddress); + assert.allTakerAssetDatasAreErc20Token(orders, etherTokenAddress); + } + }, + allTakerAddressesAreNull(orders: Order[]): void { + assert.ordersHaveAtMostOneUniqueValueForProperty(orders, 'takerAddress', constants.NULL_ADDRESS); + }, + allMakerAssetDatasAreErc20Token(orders: Order[], tokenAddress: string): void { + assert.ordersHaveAtMostOneUniqueValueForProperty( + orders, + 'makerAssetData', + assetDataUtils.encodeERC20AssetData(tokenAddress), + ); + }, + allTakerAssetDatasAreErc20Token(orders: Order[], tokenAddress: string): void { + assert.ordersHaveAtMostOneUniqueValueForProperty( + orders, + 'takerAssetData', + assetDataUtils.encodeERC20AssetData(tokenAddress), + ); + }, + /* + * Asserts that all the orders have the same value for the provided propertyName + * If the value parameter is provided, this asserts that all orders have the prope + */ + ordersHaveAtMostOneUniqueValueForProperty(orders: Order[], propertyName: string, value?: any): void { + const allValues = _.map(orders, order => _.get(order, propertyName)); + sharedAssert.hasAtMostOneUniqueValue( + allValues, + `Expected all orders to have the same ${propertyName} field. Found the following ${propertyName} values: ${JSON.stringify( + allValues, + )}`, + ); + if (!_.isUndefined(value)) { + const firstValue = _.head(allValues); + sharedAssert.assert( + firstValue === value, + `Expected all orders to have a ${propertyName} field with value: ${value}. Found: ${firstValue}`, + ); + } + }, }; |