From 9b3680780fab26543331524870eba75eea08a426 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 14:41:40 +0100 Subject: Rename expiration to expirationUnixTimestampSec --- packages/website/ts/components/fill_order.tsx | 16 ++++++++-------- packages/website/ts/components/portal.tsx | 16 ++++++++++++---- packages/website/ts/containers/portal.tsx | 4 ++-- packages/website/ts/redux/dispatcher.ts | 4 ++-- packages/website/ts/redux/reducer.ts | 4 ++-- packages/website/ts/schemas/order_schema.ts | 13 +++++++++++-- packages/website/ts/types.ts | 11 +++++++++++ packages/website/ts/utils/utils.ts | 6 +++--- 8 files changed, 51 insertions(+), 23 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 97f616be2..c0b16f251 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -20,7 +20,7 @@ import { VisualOrder } from 'ts/components/visual_order'; import { Dispatcher } from 'ts/redux/dispatcher'; import { orderSchema } from 'ts/schemas/order_schema'; import { SchemaValidator } from 'ts/schemas/validator'; -import { AlertTypes, BlockchainErrs, Order, Token, TokenByAddress, WebsitePaths } from 'ts/types'; +import { AlertTypes, BlockchainErrs, SerializedOrder, Token, TokenByAddress, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; import { constants } from 'ts/utils/constants'; import { errorReporter } from 'ts/utils/error_reporter'; @@ -34,7 +34,7 @@ interface FillOrderProps { networkId: number; userAddress: string; tokenByAddress: TokenByAddress; - initialOrder: Order; + initialOrder: SerializedOrder; dispatcher: Dispatcher; lastForceTokenStateRefetch: number; } @@ -45,7 +45,7 @@ interface FillOrderState { globalErrMsg: string; orderJSON: string; orderJSONErrMsg: string; - parsedOrder: Order; + parsedOrder: SerializedOrder; didFillOrderSucceed: boolean; didCancelOrderSucceed: boolean; unavailableTakerAmount: BigNumber; @@ -204,7 +204,7 @@ export class FillOrder extends React.Component { const orderTaker = !_.isEmpty(this.state.parsedOrder.taker.address) ? this.state.parsedOrder.taker.address : this.props.userAddress; - const parsedOrderExpiration = new BigNumber(this.state.parsedOrder.expiration); + const parsedOrderExpiration = new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec); const exchangeRate = orderMakerAmount.div(orderTakerAmount); let orderReceiveAmount = 0; @@ -402,7 +402,7 @@ export class FillOrder extends React.Component { } private async _validateFillOrderFireAndForgetAsync(orderJSON: string) { let orderJSONErrMsg = ''; - let parsedOrder: Order; + let parsedOrder: SerializedOrder; try { const order = JSON.parse(orderJSON); const validationResult = this._validator.validate(order, orderSchema); @@ -416,7 +416,7 @@ export class FillOrder extends React.Component { const exchangeContractAddr = this.props.blockchain.getExchangeContractAddressIfExists(); const makerAmount = new BigNumber(parsedOrder.maker.amount); const takerAmount = new BigNumber(parsedOrder.taker.amount); - const expiration = new BigNumber(parsedOrder.expiration); + const expiration = new BigNumber(parsedOrder.expirationUnixTimestampSec); const salt = new BigNumber(parsedOrder.salt); const parsedMakerFee = new BigNumber(parsedOrder.maker.feeAmount); const parsedTakerFee = new BigNumber(parsedOrder.taker.feeAmount); @@ -538,7 +538,7 @@ export class FillOrder extends React.Component { new BigNumber(parsedOrder.taker.amount), new BigNumber(parsedOrder.maker.feeAmount), new BigNumber(parsedOrder.taker.feeAmount), - new BigNumber(this.state.parsedOrder.expiration), + new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), parsedOrder.feeRecipient, parsedOrder.signature, new BigNumber(parsedOrder.salt), @@ -641,7 +641,7 @@ export class FillOrder extends React.Component { takerTokenAmount, new BigNumber(parsedOrder.maker.feeAmount), new BigNumber(parsedOrder.taker.feeAmount), - new BigNumber(this.state.parsedOrder.expiration), + new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), parsedOrder.feeRecipient, parsedOrder.signature, new BigNumber(parsedOrder.salt), diff --git a/packages/website/ts/components/portal.tsx b/packages/website/ts/components/portal.tsx index 92589f75c..6727645fc 100644 --- a/packages/website/ts/components/portal.tsx +++ b/packages/website/ts/components/portal.tsx @@ -23,7 +23,15 @@ import { localStorage } from 'ts/local_storage/local_storage'; import { Dispatcher } from 'ts/redux/dispatcher'; import { orderSchema } from 'ts/schemas/order_schema'; import { SchemaValidator } from 'ts/schemas/validator'; -import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, TokenByAddress, WebsitePaths } from 'ts/types'; +import { + BlockchainErrs, + HashData, + ProviderType, + ScreenWidths, + SerializedOrder, + TokenByAddress, + WebsitePaths, +} from 'ts/types'; import { colors } from 'ts/utils/colors'; import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; @@ -48,7 +56,7 @@ export interface PortalAllProps { userEtherBalance: BigNumber; userAddress: string; shouldBlockchainErrDialogBeOpen: boolean; - userSuppliedOrderCache: Order; + userSuppliedOrderCache: SerializedOrder; location: Location; flashMessage?: string | React.ReactNode; lastForceTokenStateRefetch: number; @@ -66,7 +74,7 @@ interface PortalAllState { export class Portal extends React.Component { private _blockchain: Blockchain; - private _sharedOrderIfExists: Order; + private _sharedOrderIfExists: SerializedOrder; private _throttledScreenWidthUpdate: () => void; public static hasAlreadyDismissedWethNotice() { const didDismissWethNotice = localStorage.getItemIfExists(constants.LOCAL_STORAGE_KEY_DISMISS_WETH_NOTICE); @@ -349,7 +357,7 @@ export class Portal extends React.Component { isWethNoticeDialogOpen: false, }); } - private _getSharedOrderIfExists(): Order | undefined { + private _getSharedOrderIfExists(): SerializedOrder | undefined { const queryString = window.location.search; if (queryString.length === 0) { return undefined; diff --git a/packages/website/ts/containers/portal.tsx b/packages/website/ts/containers/portal.tsx index bcca0d70f..4638de2f8 100644 --- a/packages/website/ts/containers/portal.tsx +++ b/packages/website/ts/containers/portal.tsx @@ -6,7 +6,7 @@ import { Dispatch } from 'redux'; import { Portal as PortalComponent, PortalAllProps as PortalComponentAllProps } from 'ts/components/portal'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, Side, TokenByAddress } from 'ts/types'; +import { BlockchainErrs, HashData, ProviderType, ScreenWidths, SerializedOrder, Side, TokenByAddress } from 'ts/types'; import { constants } from 'ts/utils/constants'; interface ConnectedState { @@ -24,7 +24,7 @@ interface ConnectedState { screenWidth: ScreenWidths; shouldBlockchainErrDialogBeOpen: boolean; userAddress: string; - userSuppliedOrderCache: Order; + userSuppliedOrderCache: SerializedOrder; flashMessage?: string | React.ReactNode; } diff --git a/packages/website/ts/redux/dispatcher.ts b/packages/website/ts/redux/dispatcher.ts index 87415b285..ba54347b1 100644 --- a/packages/website/ts/redux/dispatcher.ts +++ b/packages/website/ts/redux/dispatcher.ts @@ -5,9 +5,9 @@ import { ActionTypes, AssetToken, BlockchainErrs, - Order, ProviderType, ScreenWidths, + SerializedOrder, Side, SideToAssetToken, SignatureData, @@ -49,7 +49,7 @@ export class Dispatcher { type: ActionTypes.UpdateOrderSalt, }); } - public updateUserSuppliedOrderCache(order: Order) { + public updateUserSuppliedOrderCache(order: SerializedOrder) { this._dispatch({ data: order, type: ActionTypes.UpdateUserSuppliedOrderCache, diff --git a/packages/website/ts/redux/reducer.ts b/packages/website/ts/redux/reducer.ts index 7b0b03dae..8c640fdb7 100644 --- a/packages/website/ts/redux/reducer.ts +++ b/packages/website/ts/redux/reducer.ts @@ -6,9 +6,9 @@ import { Action, ActionTypes, BlockchainErrs, - Order, ProviderType, ScreenWidths, + SerializedOrder, Side, SideToAssetToken, SignatureData, @@ -40,7 +40,7 @@ export interface State { userAddress: string; userEtherBalance: BigNumber; // Note: cache of supplied orderJSON in fill order step. Do not use for anything else. - userSuppliedOrderCache: Order; + userSuppliedOrderCache: SerializedOrder; // Docs docsVersion: string; diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index bfbf9eb8b..1d9e96fee 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -5,11 +5,20 @@ export const orderSchema = { taker: { $ref: '/OrderTaker' }, salt: { type: 'string' }, signature: { $ref: '/SignatureData' }, - expiration: { type: 'string' }, + expirationUnixTimestampSec: { type: 'string' }, feeRecipient: { type: 'string' }, exchangeContract: { type: 'string' }, networkId: { type: 'number' }, }, - required: ['maker', 'taker', 'salt', 'signature', 'expiration', 'feeRecipient', 'exchangeContract', 'networkId'], + required: [ + 'maker', + 'taker', + 'salt', + 'signature', + 'expirationUnixTimestampSec', + 'feeRecipient', + 'exchangeContract', + 'networkId', + ], type: 'object', }; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index c48c88cae..4ac972783 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -80,6 +80,17 @@ export interface Order { networkId: number; } +export interface SerializedOrder { + maker: OrderParty; + taker: OrderParty; + expirationUnixTimestampSec: string; + feeRecipient: string; + salt: string; + signature: SignatureData; + exchangeContract: string; + networkId: number; +} + export interface Fill { logIndex: number; maker: string; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 7e69b1c5f..794df8dc7 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -7,8 +7,8 @@ import * as moment from 'moment'; import { EtherscanLinkSuffixes, Networks, - Order, ScreenWidths, + SerializedOrder, Side, SideToAssetToken, SignatureData, @@ -71,7 +71,7 @@ export const utils = { signatureData: SignatureData, tokenByAddress: TokenByAddress, orderSalt: BigNumber, - ): Order { + ): SerializedOrder { const makerToken = tokenByAddress[sideToAssetToken[Side.Deposit].address]; const takerToken = tokenByAddress[sideToAssetToken[Side.Receive].address]; const order = { @@ -97,7 +97,7 @@ export const utils = { amount: sideToAssetToken[Side.Receive].amount.toString(), feeAmount: takerFee.toString(), }, - expiration: orderExpiryTimestamp.toString(), + expirationUnixTimestampSec: orderExpiryTimestamp.toString(), feeRecipient, salt: orderSalt.toString(), signature: signatureData, -- cgit v1.2.3 From 4d509331893066de7630e76ac19f3795a1ab637b Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 14:48:59 +0100 Subject: Rename exchangeContract to exchangeContractAddress --- packages/website/ts/components/fill_order.tsx | 4 ++-- packages/website/ts/schemas/order_schema.ts | 4 ++-- packages/website/ts/types.ts | 2 +- packages/website/ts/utils/utils.ts | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index c0b16f251..88e39b1d3 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -422,7 +422,7 @@ export class FillOrder extends React.Component { const parsedTakerFee = new BigNumber(parsedOrder.taker.feeAmount); const zeroExOrder: ZeroExOrder = { - exchangeContractAddress: parsedOrder.exchangeContract, + exchangeContractAddress: parsedOrder.exchangeContractAddress, expirationUnixTimestampSec: expiration, feeRecipient: parsedOrder.feeRecipient, maker: parsedOrder.maker.address, @@ -443,7 +443,7 @@ export class FillOrder extends React.Component { orderJSONErrMsg = `This order was made on another Ethereum network (id: ${parsedOrder.networkId}). Connect to this network to fill.`; parsedOrder = undefined; - } else if (exchangeContractAddr !== parsedOrder.exchangeContract) { + } else if (exchangeContractAddr !== parsedOrder.exchangeContractAddress) { orderJSONErrMsg = 'This order was made using a deprecated 0x Exchange contract.'; parsedOrder = undefined; } else if (orderHash !== signature.hash) { diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index 1d9e96fee..a7fbae411 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -7,7 +7,7 @@ export const orderSchema = { signature: { $ref: '/SignatureData' }, expirationUnixTimestampSec: { type: 'string' }, feeRecipient: { type: 'string' }, - exchangeContract: { type: 'string' }, + exchangeContractAddress: { type: 'string' }, networkId: { type: 'number' }, }, required: [ @@ -17,7 +17,7 @@ export const orderSchema = { 'signature', 'expirationUnixTimestampSec', 'feeRecipient', - 'exchangeContract', + 'exchangeContractAddress', 'networkId', ], type: 'object', diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 4ac972783..b64d164a1 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -87,7 +87,7 @@ export interface SerializedOrder { feeRecipient: string; salt: string; signature: SignatureData; - exchangeContract: string; + exchangeContractAddress: string; networkId: number; } diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 794df8dc7..db153d47a 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -60,9 +60,9 @@ export const utils = { }, generateOrder( networkId: number, - exchangeContract: string, + exchangeContractAddress: string, sideToAssetToken: SideToAssetToken, - orderExpiryTimestamp: BigNumber, + expirationUnixTimestampSec: BigNumber, orderTakerAddress: string, orderMakerAddress: string, makerFee: BigNumber, @@ -97,11 +97,11 @@ export const utils = { amount: sideToAssetToken[Side.Receive].amount.toString(), feeAmount: takerFee.toString(), }, - expirationUnixTimestampSec: orderExpiryTimestamp.toString(), + expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), feeRecipient, salt: orderSalt.toString(), signature: signatureData, - exchangeContract, + exchangeContractAddress, networkId, }; return order; -- cgit v1.2.3 From 18dc5d17b552f03294c6ea13ae0d2cdcc72ac0fd Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 14:54:37 +0100 Subject: Rename signature to ecSignature --- packages/website/ts/components/fill_order.tsx | 10 +++++----- packages/website/ts/schemas/order_schema.ts | 4 ++-- packages/website/ts/types.ts | 2 +- packages/website/ts/utils/utils.ts | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 88e39b1d3..33c88f61e 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -437,7 +437,7 @@ export class FillOrder extends React.Component { }; const orderHash = ZeroEx.getOrderHashHex(zeroExOrder); - const signature = parsedOrder.signature; + const signature = parsedOrder.ecSignature; const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.maker.address); if (this.props.networkId !== parsedOrder.networkId) { orderJSONErrMsg = `This order was made on another Ethereum network @@ -478,7 +478,7 @@ export class FillOrder extends React.Component { // Clear cache entry if user updates orderJSON to invalid entry this.props.dispatcher.updateUserSuppliedOrderCache(undefined); } else { - const orderHash = parsedOrder.signature.hash; + const orderHash = parsedOrder.ecSignature.hash; unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const isMakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( parsedOrder.maker.token.address, @@ -540,7 +540,7 @@ export class FillOrder extends React.Component { new BigNumber(parsedOrder.taker.feeAmount), new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), parsedOrder.feeRecipient, - parsedOrder.signature, + parsedOrder.ecSignature, new BigNumber(parsedOrder.salt), ); if (_.isEmpty(globalErrMsg)) { @@ -618,7 +618,7 @@ export class FillOrder extends React.Component { }); const parsedOrder = this.state.parsedOrder; - const orderHash = parsedOrder.signature.hash; + const orderHash = parsedOrder.ecSignature.hash; const takerAddress = this.props.userAddress; if (_.isUndefined(takerAddress)) { @@ -643,7 +643,7 @@ export class FillOrder extends React.Component { new BigNumber(parsedOrder.taker.feeAmount), new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), parsedOrder.feeRecipient, - parsedOrder.signature, + parsedOrder.ecSignature, new BigNumber(parsedOrder.salt), ); const unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index a7fbae411..430f707da 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -4,7 +4,7 @@ export const orderSchema = { maker: { $ref: '/OrderTaker' }, taker: { $ref: '/OrderTaker' }, salt: { type: 'string' }, - signature: { $ref: '/SignatureData' }, + ecSignature: { $ref: '/SignatureData' }, expirationUnixTimestampSec: { type: 'string' }, feeRecipient: { type: 'string' }, exchangeContractAddress: { type: 'string' }, @@ -14,7 +14,7 @@ export const orderSchema = { 'maker', 'taker', 'salt', - 'signature', + 'ecSignature', 'expirationUnixTimestampSec', 'feeRecipient', 'exchangeContractAddress', diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index b64d164a1..dad2e734f 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -86,7 +86,7 @@ export interface SerializedOrder { expirationUnixTimestampSec: string; feeRecipient: string; salt: string; - signature: SignatureData; + ecSignature: SignatureData; exchangeContractAddress: string; networkId: number; } diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index db153d47a..7204586c6 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -68,7 +68,7 @@ export const utils = { makerFee: BigNumber, takerFee: BigNumber, feeRecipient: string, - signatureData: SignatureData, + ecSignature: SignatureData, tokenByAddress: TokenByAddress, orderSalt: BigNumber, ): SerializedOrder { @@ -100,7 +100,7 @@ export const utils = { expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), feeRecipient, salt: orderSalt.toString(), - signature: signatureData, + ecSignature, exchangeContractAddress, networkId, }; -- cgit v1.2.3 From 1c9428cbba873fe8d5bd18b2cb10522cbdb17a3f Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 15:02:41 +0100 Subject: Move .taker.feeAmount to .takerFee and .maker.feeAmount to .makerFee --- packages/website/ts/components/fill_order.tsx | 12 ++++++------ packages/website/ts/schemas/order_schema.ts | 4 ++++ packages/website/ts/schemas/order_taker_schema.ts | 3 +-- packages/website/ts/types.ts | 12 ++++++++++-- packages/website/ts/utils/utils.ts | 4 ++-- 5 files changed, 23 insertions(+), 12 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 33c88f61e..7cef247a3 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -418,8 +418,8 @@ export class FillOrder extends React.Component { const takerAmount = new BigNumber(parsedOrder.taker.amount); const expiration = new BigNumber(parsedOrder.expirationUnixTimestampSec); const salt = new BigNumber(parsedOrder.salt); - const parsedMakerFee = new BigNumber(parsedOrder.maker.feeAmount); - const parsedTakerFee = new BigNumber(parsedOrder.taker.feeAmount); + const parsedMakerFee = new BigNumber(parsedOrder.makerFee); + const parsedTakerFee = new BigNumber(parsedOrder.takerFee); const zeroExOrder: ZeroExOrder = { exchangeContractAddress: parsedOrder.exchangeContractAddress, @@ -536,8 +536,8 @@ export class FillOrder extends React.Component { parsedOrder.taker.token.address, new BigNumber(parsedOrder.maker.amount), new BigNumber(parsedOrder.taker.amount), - new BigNumber(parsedOrder.maker.feeAmount), - new BigNumber(parsedOrder.taker.feeAmount), + new BigNumber(parsedOrder.makerFee), + new BigNumber(parsedOrder.takerFee), new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), parsedOrder.feeRecipient, parsedOrder.ecSignature, @@ -639,8 +639,8 @@ export class FillOrder extends React.Component { parsedOrder.taker.token.address, new BigNumber(parsedOrder.maker.amount), takerTokenAmount, - new BigNumber(parsedOrder.maker.feeAmount), - new BigNumber(parsedOrder.taker.feeAmount), + new BigNumber(parsedOrder.makerFee), + new BigNumber(parsedOrder.takerFee), new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), parsedOrder.feeRecipient, parsedOrder.ecSignature, diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index 430f707da..e69891df1 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -3,6 +3,8 @@ export const orderSchema = { properties: { maker: { $ref: '/OrderTaker' }, taker: { $ref: '/OrderTaker' }, + makerFee: { type: 'string' }, + takerFee: { type: 'string' }, salt: { type: 'string' }, ecSignature: { $ref: '/SignatureData' }, expirationUnixTimestampSec: { type: 'string' }, @@ -13,6 +15,8 @@ export const orderSchema = { required: [ 'maker', 'taker', + 'makerFee', + 'takerFee', 'salt', 'ecSignature', 'expirationUnixTimestampSec', diff --git a/packages/website/ts/schemas/order_taker_schema.ts b/packages/website/ts/schemas/order_taker_schema.ts index c784c29c5..c8d56a417 100644 --- a/packages/website/ts/schemas/order_taker_schema.ts +++ b/packages/website/ts/schemas/order_taker_schema.ts @@ -4,8 +4,7 @@ export const orderTakerSchema = { address: { type: 'string' }, token: { $ref: '/Token' }, amount: { type: 'string' }, - feeAmount: { type: 'string' }, }, - required: ['address', 'token', 'amount', 'feeAmount'], + required: ['address', 'token', 'amount'], type: 'object', }; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index dad2e734f..28822d484 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -80,9 +80,17 @@ export interface Order { networkId: number; } +export interface SerializedOrderParty { + address: string; + token: OrderToken; + amount: string; +} + export interface SerializedOrder { - maker: OrderParty; - taker: OrderParty; + maker: SerializedOrderParty; + taker: SerializedOrderParty; + makerFee: string; + takerFee: string; expirationUnixTimestampSec: string; feeRecipient: string; salt: string; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 7204586c6..b615ba646 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -75,6 +75,8 @@ export const utils = { const makerToken = tokenByAddress[sideToAssetToken[Side.Deposit].address]; const takerToken = tokenByAddress[sideToAssetToken[Side.Receive].address]; const order = { + makerFee: makerFee.toString(), + takerFee: takerFee.toString(), maker: { address: orderMakerAddress, token: { @@ -84,7 +86,6 @@ export const utils = { address: makerToken.address, }, amount: sideToAssetToken[Side.Deposit].amount.toString(), - feeAmount: makerFee.toString(), }, taker: { address: orderTakerAddress, @@ -95,7 +96,6 @@ export const utils = { address: takerToken.address, }, amount: sideToAssetToken[Side.Receive].amount.toString(), - feeAmount: takerFee.toString(), }, expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), feeRecipient, -- cgit v1.2.3 From 223df8006a30a95db544a2af080224a4d9d2d474 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 15:09:06 +0100 Subject: Move .taker.amount to .takerTokenAmount and .maker.amount to .makerTokenAmount --- packages/website/ts/components/fill_order.tsx | 24 +++++++++++------------ packages/website/ts/schemas/order_schema.ts | 4 ++++ packages/website/ts/schemas/order_taker_schema.ts | 3 +-- packages/website/ts/types.ts | 3 ++- packages/website/ts/utils/utils.ts | 4 ++-- 5 files changed, 21 insertions(+), 17 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 7cef247a3..06a7932f6 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -184,8 +184,8 @@ export class FillOrder extends React.Component { private _renderVisualOrder() { const takerTokenAddress = this.state.parsedOrder.taker.token.address; const takerToken = this.props.tokenByAddress[takerTokenAddress]; - const orderTakerAmount = new BigNumber(this.state.parsedOrder.taker.amount); - const orderMakerAmount = new BigNumber(this.state.parsedOrder.maker.amount); + const orderTakerAmount = new BigNumber(this.state.parsedOrder.takerTokenAmount); + const orderMakerAmount = new BigNumber(this.state.parsedOrder.makerTokenAmount); const takerAssetToken = { amount: orderTakerAmount.minus(this.state.unavailableTakerAmount), symbol: takerToken.symbol, @@ -414,8 +414,8 @@ export class FillOrder extends React.Component { parsedOrder = order; const exchangeContractAddr = this.props.blockchain.getExchangeContractAddressIfExists(); - const makerAmount = new BigNumber(parsedOrder.maker.amount); - const takerAmount = new BigNumber(parsedOrder.taker.amount); + const makerAmount = new BigNumber(parsedOrder.makerTokenAmount); + const takerAmount = new BigNumber(parsedOrder.takerTokenAmount); const expiration = new BigNumber(parsedOrder.expirationUnixTimestampSec); const salt = new BigNumber(parsedOrder.salt); const parsedMakerFee = new BigNumber(parsedOrder.makerFee); @@ -534,8 +534,8 @@ export class FillOrder extends React.Component { parsedOrder.taker.address, parsedOrder.maker.token.address, parsedOrder.taker.token.address, - new BigNumber(parsedOrder.maker.amount), - new BigNumber(parsedOrder.taker.amount), + new BigNumber(parsedOrder.makerTokenAmount), + new BigNumber(parsedOrder.takerTokenAmount), new BigNumber(parsedOrder.makerFee), new BigNumber(parsedOrder.takerFee), new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), @@ -572,7 +572,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Fill Order Success', label: eventLabel, - value: parsedOrder.taker.amount, + value: parsedOrder.takerTokenAmount, }); // After fill completes, let's force fetch the token balances this.props.dispatcher.forceTokenStateRefetch(); @@ -591,7 +591,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Fill Order Failure', label: eventLabel, - value: parsedOrder.taker.amount, + value: parsedOrder.takerTokenAmount, }); const errMsg = `${err}`; if (utils.didUserDenyWeb3Request(errMsg)) { @@ -630,14 +630,14 @@ export class FillOrder extends React.Component { } let globalErrMsg = ''; - const takerTokenAmount = new BigNumber(parsedOrder.taker.amount); + const takerTokenAmount = new BigNumber(parsedOrder.takerTokenAmount); const signedOrder = this.props.blockchain.portalOrderToSignedOrder( parsedOrder.maker.address, parsedOrder.taker.address, parsedOrder.maker.token.address, parsedOrder.taker.token.address, - new BigNumber(parsedOrder.maker.amount), + new BigNumber(parsedOrder.makerTokenAmount), takerTokenAmount, new BigNumber(parsedOrder.makerFee), new BigNumber(parsedOrder.takerFee), @@ -674,7 +674,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Cancel Order Success', label: eventLabel, - value: parsedOrder.maker.amount, + value: parsedOrder.makerTokenAmount, }); return; } catch (err) { @@ -689,7 +689,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Cancel Order Failure', label: eventLabel, - value: parsedOrder.maker.amount, + value: parsedOrder.makerTokenAmount, }); globalErrMsg = 'Failed to cancel order, please refresh and try again'; utils.consoleLog(`${err}`); diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index e69891df1..ccf4af671 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -5,6 +5,8 @@ export const orderSchema = { taker: { $ref: '/OrderTaker' }, makerFee: { type: 'string' }, takerFee: { type: 'string' }, + makerTokenAmount: { type: 'string' }, + takerTokenAmount: { type: 'string' }, salt: { type: 'string' }, ecSignature: { $ref: '/SignatureData' }, expirationUnixTimestampSec: { type: 'string' }, @@ -17,6 +19,8 @@ export const orderSchema = { 'taker', 'makerFee', 'takerFee', + 'makerTokenAmount', + 'takerTokenAmount', 'salt', 'ecSignature', 'expirationUnixTimestampSec', diff --git a/packages/website/ts/schemas/order_taker_schema.ts b/packages/website/ts/schemas/order_taker_schema.ts index c8d56a417..bce71f74b 100644 --- a/packages/website/ts/schemas/order_taker_schema.ts +++ b/packages/website/ts/schemas/order_taker_schema.ts @@ -3,8 +3,7 @@ export const orderTakerSchema = { properties: { address: { type: 'string' }, token: { $ref: '/Token' }, - amount: { type: 'string' }, }, - required: ['address', 'token', 'amount'], + required: ['address', 'token'], type: 'object', }; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 28822d484..823f6f785 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -83,7 +83,6 @@ export interface Order { export interface SerializedOrderParty { address: string; token: OrderToken; - amount: string; } export interface SerializedOrder { @@ -91,6 +90,8 @@ export interface SerializedOrder { taker: SerializedOrderParty; makerFee: string; takerFee: string; + makerTokenAmount: string; + takerTokenAmount: string; expirationUnixTimestampSec: string; feeRecipient: string; salt: string; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index b615ba646..cc0689868 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -77,6 +77,8 @@ export const utils = { const order = { makerFee: makerFee.toString(), takerFee: takerFee.toString(), + makerTokenAmount: sideToAssetToken[Side.Deposit].amount.toString(), + takerTokenAmount: sideToAssetToken[Side.Receive].amount.toString(), maker: { address: orderMakerAddress, token: { @@ -85,7 +87,6 @@ export const utils = { decimals: makerToken.decimals, address: makerToken.address, }, - amount: sideToAssetToken[Side.Deposit].amount.toString(), }, taker: { address: orderTakerAddress, @@ -95,7 +96,6 @@ export const utils = { decimals: takerToken.decimals, address: takerToken.address, }, - amount: sideToAssetToken[Side.Receive].amount.toString(), }, expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), feeRecipient, -- cgit v1.2.3 From 10fb6061ccf66bd117ba13ea2ed1cfe7373096d0 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 15:26:53 +0100 Subject: Introduce makerToken and takerToken fields for unsigned token metadata --- packages/website/ts/components/fill_order.tsx | 71 +++++++++++------------ packages/website/ts/schemas/order_schema.ts | 12 +++- packages/website/ts/schemas/order_taker_schema.ts | 9 --- packages/website/ts/schemas/token_schema.ts | 3 +- packages/website/ts/schemas/validator.ts | 2 - packages/website/ts/types.ts | 15 +++-- packages/website/ts/utils/utils.ts | 28 ++++----- 7 files changed, 68 insertions(+), 72 deletions(-) delete mode 100644 packages/website/ts/schemas/order_taker_schema.ts (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 06a7932f6..674110b75 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -182,7 +182,7 @@ export class FillOrder extends React.Component { ); } private _renderVisualOrder() { - const takerTokenAddress = this.state.parsedOrder.taker.token.address; + const takerTokenAddress = this.state.parsedOrder.takerTokenAddress; const takerToken = this.props.tokenByAddress[takerTokenAddress]; const orderTakerAmount = new BigNumber(this.state.parsedOrder.takerTokenAmount); const orderMakerAmount = new BigNumber(this.state.parsedOrder.makerTokenAmount); @@ -190,8 +190,8 @@ export class FillOrder extends React.Component { amount: orderTakerAmount.minus(this.state.unavailableTakerAmount), symbol: takerToken.symbol, }; - const fillToken = this.props.tokenByAddress[takerToken.address]; - const makerTokenAddress = this.state.parsedOrder.maker.token.address; + const fillToken = this.props.tokenByAddress[takerTokenAddress]; + const makerTokenAddress = this.state.parsedOrder.makerTokenAddress; const makerToken = this.props.tokenByAddress[makerTokenAddress]; const makerAssetToken = { amount: orderMakerAmount.times(takerAssetToken.amount).div(orderTakerAmount), @@ -201,8 +201,8 @@ export class FillOrder extends React.Component { amount: this.props.orderFillAmount, symbol: takerToken.symbol, }; - const orderTaker = !_.isEmpty(this.state.parsedOrder.taker.address) - ? this.state.parsedOrder.taker.address + const orderTaker = !_.isEmpty(this.state.parsedOrder.taker) + ? this.state.parsedOrder.taker : this.props.userAddress; const parsedOrderExpiration = new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec); const exchangeRate = orderMakerAmount.div(orderTakerAmount); @@ -213,7 +213,7 @@ export class FillOrder extends React.Component { orderReceiveAmount = this._formatCurrencyAmount(orderReceiveAmountBigNumber, makerToken.decimals); } const isUserMaker = - !_.isUndefined(this.state.parsedOrder) && this.state.parsedOrder.maker.address === this.props.userAddress; + !_.isUndefined(this.state.parsedOrder) && this.state.parsedOrder.maker === this.props.userAddress; const expiryDate = utils.convertToReadableDateTimeFromUnixTimestamp(parsedOrderExpiration); return (
@@ -224,13 +224,10 @@ export class FillOrder extends React.Component { Maker:
- +
- +
@@ -238,7 +235,7 @@ export class FillOrder extends React.Component {
{ return; } - const makerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.maker.token.address]; - const takerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.taker.token.address]; + const makerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.makerTokenAddress]; + const takerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.takerTokenAddress]; - const tokensToTrack = []; + const tokensToTrack: Token[] = []; const isUnseenMakerToken = _.isUndefined(makerTokenIfExists); const isMakerTokenTracked = !_.isUndefined(makerTokenIfExists) && makerTokenIfExists.isTracked; if (isUnseenMakerToken) { tokensToTrack.push({ - ...this.state.parsedOrder.maker.token, + ...this.state.parsedOrder.makerToken, + address: this.state.parsedOrder.makerTokenAddress, iconUrl: undefined, isTracked: false, isRegistered: false, @@ -381,7 +379,8 @@ export class FillOrder extends React.Component { const isTakerTokenTracked = !_.isUndefined(takerTokenIfExists) && takerTokenIfExists.isTracked; if (isUnseenTakerToken) { tokensToTrack.push({ - ...this.state.parsedOrder.taker.token, + ...this.state.parsedOrder.takerToken, + address: this.state.parsedOrder.takerTokenAddress, iconUrl: undefined, isTracked: false, isRegistered: false, @@ -425,20 +424,20 @@ export class FillOrder extends React.Component { exchangeContractAddress: parsedOrder.exchangeContractAddress, expirationUnixTimestampSec: expiration, feeRecipient: parsedOrder.feeRecipient, - maker: parsedOrder.maker.address, + maker: parsedOrder.maker, makerFee: parsedMakerFee, - makerTokenAddress: parsedOrder.maker.token.address, + makerTokenAddress: parsedOrder.makerTokenAddress, makerTokenAmount: makerAmount, salt, - taker: _.isEmpty(parsedOrder.taker.address) ? constants.NULL_ADDRESS : parsedOrder.taker.address, + taker: _.isEmpty(parsedOrder.taker) ? constants.NULL_ADDRESS : parsedOrder.taker, takerFee: parsedTakerFee, - takerTokenAddress: parsedOrder.taker.token.address, + takerTokenAddress: parsedOrder.takerTokenAddress, takerTokenAmount: takerAmount, }; const orderHash = ZeroEx.getOrderHashHex(zeroExOrder); const signature = parsedOrder.ecSignature; - const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.maker.address); + const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.maker); if (this.props.networkId !== parsedOrder.networkId) { orderJSONErrMsg = `This order was made on another Ethereum network (id: ${parsedOrder.networkId}). Connect to this network to fill.`; @@ -481,10 +480,10 @@ export class FillOrder extends React.Component { const orderHash = parsedOrder.ecSignature.hash; unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const isMakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( - parsedOrder.maker.token.address, + parsedOrder.makerTokenAddress, ); const isTakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( - parsedOrder.taker.token.address, + parsedOrder.takerTokenAddress, ); this.setState({ isMakerTokenAddressInRegistry, @@ -530,10 +529,10 @@ export class FillOrder extends React.Component { } const signedOrder = this.props.blockchain.portalOrderToSignedOrder( - parsedOrder.maker.address, - parsedOrder.taker.address, - parsedOrder.maker.token.address, - parsedOrder.taker.token.address, + parsedOrder.maker, + parsedOrder.taker, + parsedOrder.makerTokenAddress, + parsedOrder.takerTokenAddress, new BigNumber(parsedOrder.makerTokenAmount), new BigNumber(parsedOrder.takerTokenAmount), new BigNumber(parsedOrder.makerFee), @@ -551,7 +550,7 @@ export class FillOrder extends React.Component { this.props.userAddress, ); } catch (err) { - globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.taker.address); + globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.taker); } } if (!_.isEmpty(globalErrMsg)) { @@ -562,7 +561,7 @@ export class FillOrder extends React.Component { return; } const networkName = constants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${parsedOrder.taker.token.symbol}-${networkName}`; + const eventLabel = `${parsedOrder.takerToken.symbol}-${networkName}`; try { const orderFilledAmount: BigNumber = await this.props.blockchain.fillOrderAsync( signedOrder, @@ -633,10 +632,10 @@ export class FillOrder extends React.Component { const takerTokenAmount = new BigNumber(parsedOrder.takerTokenAmount); const signedOrder = this.props.blockchain.portalOrderToSignedOrder( - parsedOrder.maker.address, - parsedOrder.taker.address, - parsedOrder.maker.token.address, - parsedOrder.taker.token.address, + parsedOrder.maker, + parsedOrder.taker, + parsedOrder.makerTokenAddress, + parsedOrder.takerTokenAddress, new BigNumber(parsedOrder.makerTokenAmount), takerTokenAmount, new BigNumber(parsedOrder.makerFee), @@ -651,7 +650,7 @@ export class FillOrder extends React.Component { try { await this.props.blockchain.validateCancelOrderThrowIfInvalidAsync(signedOrder, availableTakerTokenAmount); } catch (err) { - globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.taker.address); + globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.taker); } if (!_.isEmpty(globalErrMsg)) { this.setState({ @@ -661,7 +660,7 @@ export class FillOrder extends React.Component { return; } const networkName = constants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${parsedOrder.maker.token.symbol}-${networkName}`; + const eventLabel = `${parsedOrder.makerToken.symbol}-${networkName}`; try { await this.props.blockchain.cancelOrderAsync(signedOrder, availableTakerTokenAmount); this.setState({ diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index ccf4af671..6ddc9e445 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -1,8 +1,12 @@ export const orderSchema = { id: '/Order', properties: { - maker: { $ref: '/OrderTaker' }, - taker: { $ref: '/OrderTaker' }, + maker: { type: 'string' }, + taker: { type: 'string' }, + makerTokenAddress: { type: 'string' }, + takerTokenAddress: { type: 'string' }, + makerToken: { $ref: '/Token' }, + takerToken: { $ref: '/Token' }, makerFee: { type: 'string' }, takerFee: { type: 'string' }, makerTokenAmount: { type: 'string' }, @@ -17,6 +21,10 @@ export const orderSchema = { required: [ 'maker', 'taker', + 'makerTokenAddress', + 'takerTokenAddress', + 'makerToken', + 'takerToken', 'makerFee', 'takerFee', 'makerTokenAmount', diff --git a/packages/website/ts/schemas/order_taker_schema.ts b/packages/website/ts/schemas/order_taker_schema.ts deleted file mode 100644 index bce71f74b..000000000 --- a/packages/website/ts/schemas/order_taker_schema.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const orderTakerSchema = { - id: '/OrderTaker', - properties: { - address: { type: 'string' }, - token: { $ref: '/Token' }, - }, - required: ['address', 'token'], - type: 'object', -}; diff --git a/packages/website/ts/schemas/token_schema.ts b/packages/website/ts/schemas/token_schema.ts index 92b53a463..34cd6f676 100644 --- a/packages/website/ts/schemas/token_schema.ts +++ b/packages/website/ts/schemas/token_schema.ts @@ -4,8 +4,7 @@ export const tokenSchema = { name: { type: 'string' }, symbol: { type: 'string' }, decimals: { type: 'number' }, - address: { type: 'string' }, }, - required: ['name', 'symbol', 'decimals', 'address'], + required: ['name', 'symbol', 'decimals'], type: 'object', }; diff --git a/packages/website/ts/schemas/validator.ts b/packages/website/ts/schemas/validator.ts index 5177501c6..e2ffc7b79 100644 --- a/packages/website/ts/schemas/validator.ts +++ b/packages/website/ts/schemas/validator.ts @@ -1,6 +1,5 @@ import { Schema as JSONSchema, Validator } from 'jsonschema'; import { orderSchema } from 'ts/schemas/order_schema'; -import { orderTakerSchema } from 'ts/schemas/order_taker_schema'; import { signatureDataSchema } from 'ts/schemas/signature_data_schema'; import { tokenSchema } from 'ts/schemas/token_schema'; @@ -10,7 +9,6 @@ export class SchemaValidator { this._validator = new Validator(); this._validator.addSchema(signatureDataSchema as JSONSchema, signatureDataSchema.id); this._validator.addSchema(tokenSchema as JSONSchema, tokenSchema.id); - this._validator.addSchema(orderTakerSchema as JSONSchema, orderTakerSchema.id); this._validator.addSchema(orderSchema as JSONSchema, orderSchema.id); } public validate(instance: object, schema: Schema) { diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 823f6f785..42788d0e4 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -80,14 +80,19 @@ export interface Order { networkId: number; } -export interface SerializedOrderParty { - address: string; - token: OrderToken; +export interface SerializedOrderToken { + name: string; + symbol: string; + decimals: number; } export interface SerializedOrder { - maker: SerializedOrderParty; - taker: SerializedOrderParty; + maker: string; + taker: string; + makerTokenAddress: string; + takerTokenAddress: string; + makerToken: SerializedOrderToken; + takerToken: SerializedOrderToken; makerFee: string; takerFee: string; makerTokenAmount: string; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index cc0689868..447a92fec 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -75,27 +75,23 @@ export const utils = { const makerToken = tokenByAddress[sideToAssetToken[Side.Deposit].address]; const takerToken = tokenByAddress[sideToAssetToken[Side.Receive].address]; const order = { + maker: orderMakerAddress, + taker: orderTakerAddress, makerFee: makerFee.toString(), takerFee: takerFee.toString(), makerTokenAmount: sideToAssetToken[Side.Deposit].amount.toString(), takerTokenAmount: sideToAssetToken[Side.Receive].amount.toString(), - maker: { - address: orderMakerAddress, - token: { - name: makerToken.name, - symbol: makerToken.symbol, - decimals: makerToken.decimals, - address: makerToken.address, - }, + makerTokenAddress: makerToken.address, + takerTokenAddress: takerToken.address, + makerToken: { + name: makerToken.name, + symbol: makerToken.symbol, + decimals: makerToken.decimals, }, - taker: { - address: orderTakerAddress, - token: { - name: takerToken.name, - symbol: takerToken.symbol, - decimals: takerToken.decimals, - address: takerToken.address, - }, + takerToken: { + name: takerToken.name, + symbol: takerToken.symbol, + decimals: takerToken.decimals, }, expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), feeRecipient, -- cgit v1.2.3 From 3c7ebe2697f728b6f90d837cc202e5c1ed1a2182 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 16:11:51 +0100 Subject: Remove unused types and take their names --- packages/website/ts/components/fill_order.tsx | 8 ++++---- packages/website/ts/components/portal.tsx | 16 ++++----------- packages/website/ts/containers/portal.tsx | 4 ++-- packages/website/ts/redux/dispatcher.ts | 4 ++-- packages/website/ts/redux/reducer.ts | 4 ++-- packages/website/ts/types.ts | 29 ++------------------------- packages/website/ts/utils/utils.ts | 4 ++-- 7 files changed, 18 insertions(+), 51 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 674110b75..ceb06c95a 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -20,7 +20,7 @@ import { VisualOrder } from 'ts/components/visual_order'; import { Dispatcher } from 'ts/redux/dispatcher'; import { orderSchema } from 'ts/schemas/order_schema'; import { SchemaValidator } from 'ts/schemas/validator'; -import { AlertTypes, BlockchainErrs, SerializedOrder, Token, TokenByAddress, WebsitePaths } from 'ts/types'; +import { AlertTypes, BlockchainErrs, Order, Token, TokenByAddress, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; import { constants } from 'ts/utils/constants'; import { errorReporter } from 'ts/utils/error_reporter'; @@ -34,7 +34,7 @@ interface FillOrderProps { networkId: number; userAddress: string; tokenByAddress: TokenByAddress; - initialOrder: SerializedOrder; + initialOrder: Order; dispatcher: Dispatcher; lastForceTokenStateRefetch: number; } @@ -45,7 +45,7 @@ interface FillOrderState { globalErrMsg: string; orderJSON: string; orderJSONErrMsg: string; - parsedOrder: SerializedOrder; + parsedOrder: Order; didFillOrderSucceed: boolean; didCancelOrderSucceed: boolean; unavailableTakerAmount: BigNumber; @@ -401,7 +401,7 @@ export class FillOrder extends React.Component { } private async _validateFillOrderFireAndForgetAsync(orderJSON: string) { let orderJSONErrMsg = ''; - let parsedOrder: SerializedOrder; + let parsedOrder: Order; try { const order = JSON.parse(orderJSON); const validationResult = this._validator.validate(order, orderSchema); diff --git a/packages/website/ts/components/portal.tsx b/packages/website/ts/components/portal.tsx index 6727645fc..92589f75c 100644 --- a/packages/website/ts/components/portal.tsx +++ b/packages/website/ts/components/portal.tsx @@ -23,15 +23,7 @@ import { localStorage } from 'ts/local_storage/local_storage'; import { Dispatcher } from 'ts/redux/dispatcher'; import { orderSchema } from 'ts/schemas/order_schema'; import { SchemaValidator } from 'ts/schemas/validator'; -import { - BlockchainErrs, - HashData, - ProviderType, - ScreenWidths, - SerializedOrder, - TokenByAddress, - WebsitePaths, -} from 'ts/types'; +import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, TokenByAddress, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; @@ -56,7 +48,7 @@ export interface PortalAllProps { userEtherBalance: BigNumber; userAddress: string; shouldBlockchainErrDialogBeOpen: boolean; - userSuppliedOrderCache: SerializedOrder; + userSuppliedOrderCache: Order; location: Location; flashMessage?: string | React.ReactNode; lastForceTokenStateRefetch: number; @@ -74,7 +66,7 @@ interface PortalAllState { export class Portal extends React.Component { private _blockchain: Blockchain; - private _sharedOrderIfExists: SerializedOrder; + private _sharedOrderIfExists: Order; private _throttledScreenWidthUpdate: () => void; public static hasAlreadyDismissedWethNotice() { const didDismissWethNotice = localStorage.getItemIfExists(constants.LOCAL_STORAGE_KEY_DISMISS_WETH_NOTICE); @@ -357,7 +349,7 @@ export class Portal extends React.Component { isWethNoticeDialogOpen: false, }); } - private _getSharedOrderIfExists(): SerializedOrder | undefined { + private _getSharedOrderIfExists(): Order | undefined { const queryString = window.location.search; if (queryString.length === 0) { return undefined; diff --git a/packages/website/ts/containers/portal.tsx b/packages/website/ts/containers/portal.tsx index 4638de2f8..bcca0d70f 100644 --- a/packages/website/ts/containers/portal.tsx +++ b/packages/website/ts/containers/portal.tsx @@ -6,7 +6,7 @@ import { Dispatch } from 'redux'; import { Portal as PortalComponent, PortalAllProps as PortalComponentAllProps } from 'ts/components/portal'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { BlockchainErrs, HashData, ProviderType, ScreenWidths, SerializedOrder, Side, TokenByAddress } from 'ts/types'; +import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, Side, TokenByAddress } from 'ts/types'; import { constants } from 'ts/utils/constants'; interface ConnectedState { @@ -24,7 +24,7 @@ interface ConnectedState { screenWidth: ScreenWidths; shouldBlockchainErrDialogBeOpen: boolean; userAddress: string; - userSuppliedOrderCache: SerializedOrder; + userSuppliedOrderCache: Order; flashMessage?: string | React.ReactNode; } diff --git a/packages/website/ts/redux/dispatcher.ts b/packages/website/ts/redux/dispatcher.ts index ba54347b1..87415b285 100644 --- a/packages/website/ts/redux/dispatcher.ts +++ b/packages/website/ts/redux/dispatcher.ts @@ -5,9 +5,9 @@ import { ActionTypes, AssetToken, BlockchainErrs, + Order, ProviderType, ScreenWidths, - SerializedOrder, Side, SideToAssetToken, SignatureData, @@ -49,7 +49,7 @@ export class Dispatcher { type: ActionTypes.UpdateOrderSalt, }); } - public updateUserSuppliedOrderCache(order: SerializedOrder) { + public updateUserSuppliedOrderCache(order: Order) { this._dispatch({ data: order, type: ActionTypes.UpdateUserSuppliedOrderCache, diff --git a/packages/website/ts/redux/reducer.ts b/packages/website/ts/redux/reducer.ts index 8c640fdb7..7b0b03dae 100644 --- a/packages/website/ts/redux/reducer.ts +++ b/packages/website/ts/redux/reducer.ts @@ -6,9 +6,9 @@ import { Action, ActionTypes, BlockchainErrs, + Order, ProviderType, ScreenWidths, - SerializedOrder, Side, SideToAssetToken, SignatureData, @@ -40,7 +40,7 @@ export interface State { userAddress: string; userEtherBalance: BigNumber; // Note: cache of supplied orderJSON in fill order step. Do not use for anything else. - userSuppliedOrderCache: SerializedOrder; + userSuppliedOrderCache: Order; // Docs docsVersion: string; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 42788d0e4..c1fb7111f 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -59,40 +59,15 @@ export interface OrderToken { name: string; symbol: string; decimals: number; - address: string; -} - -export interface OrderParty { - address: string; - token: OrderToken; - amount: string; - feeAmount: string; } export interface Order { - maker: OrderParty; - taker: OrderParty; - expiration: string; - feeRecipient: string; - salt: string; - signature: SignatureData; - exchangeContract: string; - networkId: number; -} - -export interface SerializedOrderToken { - name: string; - symbol: string; - decimals: number; -} - -export interface SerializedOrder { maker: string; taker: string; makerTokenAddress: string; takerTokenAddress: string; - makerToken: SerializedOrderToken; - takerToken: SerializedOrderToken; + makerToken: OrderToken; + takerToken: OrderToken; makerFee: string; takerFee: string; makerTokenAmount: string; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 447a92fec..2f1b2cce3 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -7,8 +7,8 @@ import * as moment from 'moment'; import { EtherscanLinkSuffixes, Networks, + Order, ScreenWidths, - SerializedOrder, Side, SideToAssetToken, SignatureData, @@ -71,7 +71,7 @@ export const utils = { ecSignature: SignatureData, tokenByAddress: TokenByAddress, orderSalt: BigNumber, - ): SerializedOrder { + ): Order { const makerToken = tokenByAddress[sideToAssetToken[Side.Deposit].address]; const takerToken = tokenByAddress[sideToAssetToken[Side.Receive].address]; const order = { -- cgit v1.2.3 From ae14b0a71d70f057efb9cbd4d180aca76a3ad5d1 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 16:13:09 +0100 Subject: Reuse ECSignature --- packages/website/ts/types.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index c1fb7111f..2526ca669 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -1,3 +1,4 @@ +import { ECSignature } from '0x.js'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; @@ -34,11 +35,8 @@ export interface SideToAssetToken { [side: string]: AssetToken; } -export interface SignatureData { +export interface SignatureData extends ECSignature { hash: string; - r: string; - s: string; - v: number; } export interface HashData { -- cgit v1.2.3 From 69f5f5e94627458f4eb41f4150cfa3d140658d09 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 20:26:13 +0100 Subject: Split Order into signedOrder and metadata --- packages/website/ts/components/fill_order.tsx | 146 +++++++++++---------- packages/website/ts/schemas/metadata_schema.ts | 10 ++ packages/website/ts/schemas/order_schema.ts | 37 +----- packages/website/ts/schemas/signed_order_schema.ts | 34 +++++ packages/website/ts/schemas/validator.ts | 4 + packages/website/ts/types.ts | 14 +- packages/website/ts/utils/utils.ts | 48 +++---- 7 files changed, 164 insertions(+), 129 deletions(-) create mode 100644 packages/website/ts/schemas/metadata_schema.ts create mode 100644 packages/website/ts/schemas/signed_order_schema.ts (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index ceb06c95a..ad3d6bf74 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -182,16 +182,16 @@ export class FillOrder extends React.Component { ); } private _renderVisualOrder() { - const takerTokenAddress = this.state.parsedOrder.takerTokenAddress; + const takerTokenAddress = this.state.parsedOrder.signedOrder.takerTokenAddress; const takerToken = this.props.tokenByAddress[takerTokenAddress]; - const orderTakerAmount = new BigNumber(this.state.parsedOrder.takerTokenAmount); - const orderMakerAmount = new BigNumber(this.state.parsedOrder.makerTokenAmount); + const orderTakerAmount = new BigNumber(this.state.parsedOrder.signedOrder.takerTokenAmount); + const orderMakerAmount = new BigNumber(this.state.parsedOrder.signedOrder.makerTokenAmount); const takerAssetToken = { amount: orderTakerAmount.minus(this.state.unavailableTakerAmount), symbol: takerToken.symbol, }; const fillToken = this.props.tokenByAddress[takerTokenAddress]; - const makerTokenAddress = this.state.parsedOrder.makerTokenAddress; + const makerTokenAddress = this.state.parsedOrder.signedOrder.makerTokenAddress; const makerToken = this.props.tokenByAddress[makerTokenAddress]; const makerAssetToken = { amount: orderMakerAmount.times(takerAssetToken.amount).div(orderTakerAmount), @@ -201,10 +201,10 @@ export class FillOrder extends React.Component { amount: this.props.orderFillAmount, symbol: takerToken.symbol, }; - const orderTaker = !_.isEmpty(this.state.parsedOrder.taker) - ? this.state.parsedOrder.taker + const orderTaker = !_.isEmpty(this.state.parsedOrder.signedOrder.taker) + ? this.state.parsedOrder.signedOrder.taker : this.props.userAddress; - const parsedOrderExpiration = new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec); + const parsedOrderExpiration = new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec); const exchangeRate = orderMakerAmount.div(orderTakerAmount); let orderReceiveAmount = 0; @@ -213,7 +213,8 @@ export class FillOrder extends React.Component { orderReceiveAmount = this._formatCurrencyAmount(orderReceiveAmountBigNumber, makerToken.decimals); } const isUserMaker = - !_.isUndefined(this.state.parsedOrder) && this.state.parsedOrder.maker === this.props.userAddress; + !_.isUndefined(this.state.parsedOrder) && + this.state.parsedOrder.signedOrder.maker === this.props.userAddress; const expiryDate = utils.convertToReadableDateTimeFromUnixTimestamp(parsedOrderExpiration); return (
@@ -224,10 +225,13 @@ export class FillOrder extends React.Component { Maker:
- +
- +
@@ -235,7 +239,7 @@ export class FillOrder extends React.Component {
{ return; } - const makerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.makerTokenAddress]; - const takerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.takerTokenAddress]; + const makerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.signedOrder.makerTokenAddress]; + const takerTokenIfExists = this.props.tokenByAddress[this.state.parsedOrder.signedOrder.takerTokenAddress]; const tokensToTrack: Token[] = []; const isUnseenMakerToken = _.isUndefined(makerTokenIfExists); const isMakerTokenTracked = !_.isUndefined(makerTokenIfExists) && makerTokenIfExists.isTracked; if (isUnseenMakerToken) { tokensToTrack.push({ - ...this.state.parsedOrder.makerToken, - address: this.state.parsedOrder.makerTokenAddress, + ...this.state.parsedOrder.metadata.makerToken, + address: this.state.parsedOrder.signedOrder.makerTokenAddress, iconUrl: undefined, isTracked: false, isRegistered: false, @@ -379,8 +383,8 @@ export class FillOrder extends React.Component { const isTakerTokenTracked = !_.isUndefined(takerTokenIfExists) && takerTokenIfExists.isTracked; if (isUnseenTakerToken) { tokensToTrack.push({ - ...this.state.parsedOrder.takerToken, - address: this.state.parsedOrder.takerTokenAddress, + ...this.state.parsedOrder.metadata.takerToken, + address: this.state.parsedOrder.signedOrder.takerTokenAddress, iconUrl: undefined, isTracked: false, isRegistered: false, @@ -413,36 +417,38 @@ export class FillOrder extends React.Component { parsedOrder = order; const exchangeContractAddr = this.props.blockchain.getExchangeContractAddressIfExists(); - const makerAmount = new BigNumber(parsedOrder.makerTokenAmount); - const takerAmount = new BigNumber(parsedOrder.takerTokenAmount); - const expiration = new BigNumber(parsedOrder.expirationUnixTimestampSec); - const salt = new BigNumber(parsedOrder.salt); - const parsedMakerFee = new BigNumber(parsedOrder.makerFee); - const parsedTakerFee = new BigNumber(parsedOrder.takerFee); + const makerAmount = new BigNumber(parsedOrder.signedOrder.makerTokenAmount); + const takerAmount = new BigNumber(parsedOrder.signedOrder.takerTokenAmount); + const expiration = new BigNumber(parsedOrder.signedOrder.expirationUnixTimestampSec); + const salt = new BigNumber(parsedOrder.signedOrder.salt); + const parsedMakerFee = new BigNumber(parsedOrder.signedOrder.makerFee); + const parsedTakerFee = new BigNumber(parsedOrder.signedOrder.takerFee); const zeroExOrder: ZeroExOrder = { - exchangeContractAddress: parsedOrder.exchangeContractAddress, + exchangeContractAddress: parsedOrder.signedOrder.exchangeContractAddress, expirationUnixTimestampSec: expiration, - feeRecipient: parsedOrder.feeRecipient, - maker: parsedOrder.maker, + feeRecipient: parsedOrder.signedOrder.feeRecipient, + maker: parsedOrder.signedOrder.maker, makerFee: parsedMakerFee, - makerTokenAddress: parsedOrder.makerTokenAddress, + makerTokenAddress: parsedOrder.signedOrder.makerTokenAddress, makerTokenAmount: makerAmount, salt, - taker: _.isEmpty(parsedOrder.taker) ? constants.NULL_ADDRESS : parsedOrder.taker, + taker: _.isEmpty(parsedOrder.signedOrder.taker) + ? constants.NULL_ADDRESS + : parsedOrder.signedOrder.taker, takerFee: parsedTakerFee, - takerTokenAddress: parsedOrder.takerTokenAddress, + takerTokenAddress: parsedOrder.signedOrder.takerTokenAddress, takerTokenAmount: takerAmount, }; const orderHash = ZeroEx.getOrderHashHex(zeroExOrder); - const signature = parsedOrder.ecSignature; - const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.maker); - if (this.props.networkId !== parsedOrder.networkId) { + const signature = parsedOrder.signedOrder.ecSignature; + const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.signedOrder.maker); + if (this.props.networkId !== parsedOrder.metadata.networkId) { orderJSONErrMsg = `This order was made on another Ethereum network - (id: ${parsedOrder.networkId}). Connect to this network to fill.`; + (id: ${parsedOrder.metadata.networkId}). Connect to this network to fill.`; parsedOrder = undefined; - } else if (exchangeContractAddr !== parsedOrder.exchangeContractAddress) { + } else if (exchangeContractAddr !== parsedOrder.signedOrder.exchangeContractAddress) { orderJSONErrMsg = 'This order was made using a deprecated 0x Exchange contract.'; parsedOrder = undefined; } else if (orderHash !== signature.hash) { @@ -477,13 +483,13 @@ export class FillOrder extends React.Component { // Clear cache entry if user updates orderJSON to invalid entry this.props.dispatcher.updateUserSuppliedOrderCache(undefined); } else { - const orderHash = parsedOrder.ecSignature.hash; + const orderHash = parsedOrder.signedOrder.ecSignature.hash; unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const isMakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( - parsedOrder.makerTokenAddress, + parsedOrder.signedOrder.makerTokenAddress, ); const isTakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( - parsedOrder.takerTokenAddress, + parsedOrder.signedOrder.takerTokenAddress, ); this.setState({ isMakerTokenAddressInRegistry, @@ -529,18 +535,18 @@ export class FillOrder extends React.Component { } const signedOrder = this.props.blockchain.portalOrderToSignedOrder( - parsedOrder.maker, - parsedOrder.taker, - parsedOrder.makerTokenAddress, - parsedOrder.takerTokenAddress, - new BigNumber(parsedOrder.makerTokenAmount), - new BigNumber(parsedOrder.takerTokenAmount), - new BigNumber(parsedOrder.makerFee), - new BigNumber(parsedOrder.takerFee), - new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), - parsedOrder.feeRecipient, - parsedOrder.ecSignature, - new BigNumber(parsedOrder.salt), + parsedOrder.signedOrder.maker, + parsedOrder.signedOrder.taker, + parsedOrder.signedOrder.makerTokenAddress, + parsedOrder.signedOrder.takerTokenAddress, + new BigNumber(parsedOrder.signedOrder.makerTokenAmount), + new BigNumber(parsedOrder.signedOrder.takerTokenAmount), + new BigNumber(parsedOrder.signedOrder.makerFee), + new BigNumber(parsedOrder.signedOrder.takerFee), + new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), + parsedOrder.signedOrder.feeRecipient, + parsedOrder.signedOrder.ecSignature, + new BigNumber(parsedOrder.signedOrder.salt), ); if (_.isEmpty(globalErrMsg)) { try { @@ -550,7 +556,7 @@ export class FillOrder extends React.Component { this.props.userAddress, ); } catch (err) { - globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.taker); + globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.signedOrder.taker); } } if (!_.isEmpty(globalErrMsg)) { @@ -561,7 +567,7 @@ export class FillOrder extends React.Component { return; } const networkName = constants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${parsedOrder.takerToken.symbol}-${networkName}`; + const eventLabel = `${parsedOrder.metadata.takerToken.symbol}-${networkName}`; try { const orderFilledAmount: BigNumber = await this.props.blockchain.fillOrderAsync( signedOrder, @@ -571,7 +577,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Fill Order Success', label: eventLabel, - value: parsedOrder.takerTokenAmount, + value: parsedOrder.signedOrder.takerTokenAmount, }); // After fill completes, let's force fetch the token balances this.props.dispatcher.forceTokenStateRefetch(); @@ -590,7 +596,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Fill Order Failure', label: eventLabel, - value: parsedOrder.takerTokenAmount, + value: parsedOrder.signedOrder.takerTokenAmount, }); const errMsg = `${err}`; if (utils.didUserDenyWeb3Request(errMsg)) { @@ -617,7 +623,7 @@ export class FillOrder extends React.Component { }); const parsedOrder = this.state.parsedOrder; - const orderHash = parsedOrder.ecSignature.hash; + const orderHash = parsedOrder.signedOrder.ecSignature.hash; const takerAddress = this.props.userAddress; if (_.isUndefined(takerAddress)) { @@ -629,28 +635,28 @@ export class FillOrder extends React.Component { } let globalErrMsg = ''; - const takerTokenAmount = new BigNumber(parsedOrder.takerTokenAmount); + const takerTokenAmount = new BigNumber(parsedOrder.signedOrder.takerTokenAmount); const signedOrder = this.props.blockchain.portalOrderToSignedOrder( - parsedOrder.maker, - parsedOrder.taker, - parsedOrder.makerTokenAddress, - parsedOrder.takerTokenAddress, - new BigNumber(parsedOrder.makerTokenAmount), + parsedOrder.signedOrder.maker, + parsedOrder.signedOrder.taker, + parsedOrder.signedOrder.makerTokenAddress, + parsedOrder.signedOrder.takerTokenAddress, + new BigNumber(parsedOrder.signedOrder.makerTokenAmount), takerTokenAmount, - new BigNumber(parsedOrder.makerFee), - new BigNumber(parsedOrder.takerFee), - new BigNumber(this.state.parsedOrder.expirationUnixTimestampSec), - parsedOrder.feeRecipient, - parsedOrder.ecSignature, - new BigNumber(parsedOrder.salt), + new BigNumber(parsedOrder.signedOrder.makerFee), + new BigNumber(parsedOrder.signedOrder.takerFee), + new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), + parsedOrder.signedOrder.feeRecipient, + parsedOrder.signedOrder.ecSignature, + new BigNumber(parsedOrder.signedOrder.salt), ); const unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const availableTakerTokenAmount = takerTokenAmount.minus(unavailableTakerAmount); try { await this.props.blockchain.validateCancelOrderThrowIfInvalidAsync(signedOrder, availableTakerTokenAmount); } catch (err) { - globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.taker); + globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.signedOrder.taker); } if (!_.isEmpty(globalErrMsg)) { this.setState({ @@ -660,7 +666,7 @@ export class FillOrder extends React.Component { return; } const networkName = constants.NETWORK_NAME_BY_ID[this.props.networkId]; - const eventLabel = `${parsedOrder.makerToken.symbol}-${networkName}`; + const eventLabel = `${parsedOrder.metadata.makerToken.symbol}-${networkName}`; try { await this.props.blockchain.cancelOrderAsync(signedOrder, availableTakerTokenAmount); this.setState({ @@ -673,7 +679,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Cancel Order Success', label: eventLabel, - value: parsedOrder.makerTokenAmount, + value: parsedOrder.signedOrder.makerTokenAmount, }); return; } catch (err) { @@ -688,7 +694,7 @@ export class FillOrder extends React.Component { category: 'Portal', action: 'Cancel Order Failure', label: eventLabel, - value: parsedOrder.makerTokenAmount, + value: parsedOrder.signedOrder.makerTokenAmount, }); globalErrMsg = 'Failed to cancel order, please refresh and try again'; utils.consoleLog(`${err}`); diff --git a/packages/website/ts/schemas/metadata_schema.ts b/packages/website/ts/schemas/metadata_schema.ts new file mode 100644 index 000000000..272b23fbd --- /dev/null +++ b/packages/website/ts/schemas/metadata_schema.ts @@ -0,0 +1,10 @@ +export const orderMetadataSchema = { + id: '/OrderMetadata', + properties: { + makerToken: { $ref: '/Token' }, + takerToken: { $ref: '/Token' }, + networkId: { type: 'number' }, + }, + required: ['makerToken', 'takerToken', 'networkId'], + type: 'object', +}; diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index 6ddc9e445..0c5a6d425 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -1,40 +1,9 @@ export const orderSchema = { id: '/Order', properties: { - maker: { type: 'string' }, - taker: { type: 'string' }, - makerTokenAddress: { type: 'string' }, - takerTokenAddress: { type: 'string' }, - makerToken: { $ref: '/Token' }, - takerToken: { $ref: '/Token' }, - makerFee: { type: 'string' }, - takerFee: { type: 'string' }, - makerTokenAmount: { type: 'string' }, - takerTokenAmount: { type: 'string' }, - salt: { type: 'string' }, - ecSignature: { $ref: '/SignatureData' }, - expirationUnixTimestampSec: { type: 'string' }, - feeRecipient: { type: 'string' }, - exchangeContractAddress: { type: 'string' }, - networkId: { type: 'number' }, + signedOrder: { $ref: '/SignedOrder' }, + metadata: { $ref: '/OrderMetadata' }, }, - required: [ - 'maker', - 'taker', - 'makerTokenAddress', - 'takerTokenAddress', - 'makerToken', - 'takerToken', - 'makerFee', - 'takerFee', - 'makerTokenAmount', - 'takerTokenAmount', - 'salt', - 'ecSignature', - 'expirationUnixTimestampSec', - 'feeRecipient', - 'exchangeContractAddress', - 'networkId', - ], + required: ['signedOrder', 'metadata'], type: 'object', }; diff --git a/packages/website/ts/schemas/signed_order_schema.ts b/packages/website/ts/schemas/signed_order_schema.ts new file mode 100644 index 000000000..385008ab8 --- /dev/null +++ b/packages/website/ts/schemas/signed_order_schema.ts @@ -0,0 +1,34 @@ +export const signedOrderSchema = { + id: '/SignedOrder', + properties: { + maker: { type: 'string' }, + taker: { type: 'string' }, + makerTokenAddress: { type: 'string' }, + takerTokenAddress: { type: 'string' }, + makerFee: { type: 'string' }, + takerFee: { type: 'string' }, + makerTokenAmount: { type: 'string' }, + takerTokenAmount: { type: 'string' }, + salt: { type: 'string' }, + ecSignature: { $ref: '/SignatureData' }, + expirationUnixTimestampSec: { type: 'string' }, + feeRecipient: { type: 'string' }, + exchangeContractAddress: { type: 'string' }, + }, + required: [ + 'maker', + 'taker', + 'makerTokenAddress', + 'takerTokenAddress', + 'makerFee', + 'takerFee', + 'makerTokenAmount', + 'takerTokenAmount', + 'salt', + 'ecSignature', + 'expirationUnixTimestampSec', + 'feeRecipient', + 'exchangeContractAddress', + ], + type: 'object', +}; diff --git a/packages/website/ts/schemas/validator.ts b/packages/website/ts/schemas/validator.ts index e2ffc7b79..14061e2a3 100644 --- a/packages/website/ts/schemas/validator.ts +++ b/packages/website/ts/schemas/validator.ts @@ -1,6 +1,8 @@ import { Schema as JSONSchema, Validator } from 'jsonschema'; +import { orderMetadataSchema } from 'ts/schemas/metadata_schema'; import { orderSchema } from 'ts/schemas/order_schema'; import { signatureDataSchema } from 'ts/schemas/signature_data_schema'; +import { signedOrderSchema } from 'ts/schemas/signed_order_schema'; import { tokenSchema } from 'ts/schemas/token_schema'; export class SchemaValidator { @@ -9,6 +11,8 @@ export class SchemaValidator { this._validator = new Validator(); this._validator.addSchema(signatureDataSchema as JSONSchema, signatureDataSchema.id); this._validator.addSchema(tokenSchema as JSONSchema, tokenSchema.id); + this._validator.addSchema(orderMetadataSchema as JSONSchema, orderMetadataSchema.id); + this._validator.addSchema(signedOrderSchema as JSONSchema, signedOrderSchema.id); this._validator.addSchema(orderSchema as JSONSchema, orderSchema.id); } public validate(instance: object, schema: Schema) { diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 2526ca669..9281310d1 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -59,13 +59,11 @@ export interface OrderToken { decimals: number; } -export interface Order { +export interface SignedOrder { maker: string; taker: string; makerTokenAddress: string; takerTokenAddress: string; - makerToken: OrderToken; - takerToken: OrderToken; makerFee: string; takerFee: string; makerTokenAmount: string; @@ -75,7 +73,17 @@ export interface Order { salt: string; ecSignature: SignatureData; exchangeContractAddress: string; +} + +export interface OrderMetadata { networkId: number; + makerToken: OrderToken; + takerToken: OrderToken; +} + +export interface Order { + signedOrder: SignedOrder; + metadata: OrderMetadata; } export interface Fill { diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 2f1b2cce3..279b2c1b2 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -75,30 +75,34 @@ export const utils = { const makerToken = tokenByAddress[sideToAssetToken[Side.Deposit].address]; const takerToken = tokenByAddress[sideToAssetToken[Side.Receive].address]; const order = { - maker: orderMakerAddress, - taker: orderTakerAddress, - makerFee: makerFee.toString(), - takerFee: takerFee.toString(), - makerTokenAmount: sideToAssetToken[Side.Deposit].amount.toString(), - takerTokenAmount: sideToAssetToken[Side.Receive].amount.toString(), - makerTokenAddress: makerToken.address, - takerTokenAddress: takerToken.address, - makerToken: { - name: makerToken.name, - symbol: makerToken.symbol, - decimals: makerToken.decimals, + signedOrder: { + maker: orderMakerAddress, + taker: orderTakerAddress, + makerFee: makerFee.toString(), + takerFee: takerFee.toString(), + makerTokenAmount: sideToAssetToken[Side.Deposit].amount.toString(), + takerTokenAmount: sideToAssetToken[Side.Receive].amount.toString(), + makerTokenAddress: makerToken.address, + takerTokenAddress: takerToken.address, + expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), + feeRecipient, + salt: orderSalt.toString(), + ecSignature, + exchangeContractAddress, }, - takerToken: { - name: takerToken.name, - symbol: takerToken.symbol, - decimals: takerToken.decimals, + metadata: { + networkId, + makerToken: { + name: makerToken.name, + symbol: makerToken.symbol, + decimals: makerToken.decimals, + }, + takerToken: { + name: takerToken.name, + symbol: takerToken.symbol, + decimals: takerToken.decimals, + }, }, - expirationUnixTimestampSec: expirationUnixTimestampSec.toString(), - feeRecipient, - salt: orderSalt.toString(), - ecSignature, - exchangeContractAddress, - networkId, }; return order; }, -- cgit v1.2.3 From e6f2c7a382e2e7e940f430f350240cb2f703bdcd Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 20:38:30 +0100 Subject: Remove networkId from orderJSON --- packages/website/ts/components/fill_order.tsx | 10 ++-------- packages/website/ts/components/fill_order_json.tsx | 2 -- .../ts/components/generate_order/generate_order_form.tsx | 2 -- packages/website/ts/components/order_json.tsx | 3 --- packages/website/ts/schemas/metadata_schema.ts | 3 +-- packages/website/ts/types.ts | 1 - packages/website/ts/utils/utils.ts | 2 -- 7 files changed, 3 insertions(+), 20 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index ad3d6bf74..d2c36ff0c 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -109,7 +109,6 @@ export class FillOrder extends React.Component { @@ -136,7 +135,6 @@ export class FillOrder extends React.Component { @@ -444,12 +442,8 @@ export class FillOrder extends React.Component { const signature = parsedOrder.signedOrder.ecSignature; const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.signedOrder.maker); - if (this.props.networkId !== parsedOrder.metadata.networkId) { - orderJSONErrMsg = `This order was made on another Ethereum network - (id: ${parsedOrder.metadata.networkId}). Connect to this network to fill.`; - parsedOrder = undefined; - } else if (exchangeContractAddr !== parsedOrder.signedOrder.exchangeContractAddress) { - orderJSONErrMsg = 'This order was made using a deprecated 0x Exchange contract.'; + if (exchangeContractAddr !== parsedOrder.signedOrder.exchangeContractAddress) { + orderJSONErrMsg = 'This order was made on another network or using a deprecated Exchange contract'; parsedOrder = undefined; } else if (orderHash !== signature.hash) { orderJSONErrMsg = 'Order hash does not match supplied plaintext values'; diff --git a/packages/website/ts/components/fill_order_json.tsx b/packages/website/ts/components/fill_order_json.tsx index f8e43481a..877b65116 100644 --- a/packages/website/ts/components/fill_order_json.tsx +++ b/packages/website/ts/components/fill_order_json.tsx @@ -12,7 +12,6 @@ import { utils } from 'ts/utils/utils'; interface FillOrderJSONProps { blockchain: Blockchain; tokenByAddress: TokenByAddress; - networkId: number; orderJSON: string; onFillOrderJSONChanged: (event: any) => void; } @@ -43,7 +42,6 @@ export class FillOrderJSON extends React.Component @@ -329,7 +328,6 @@ export class GenerateOrderForm extends React.Component { } public render() { const order = utils.generateOrder( - this.props.networkId, this.props.exchangeContractIfExists, this.props.sideToAssetToken, this.props.orderExpiryTimestamp, @@ -162,7 +160,6 @@ You can see and fill it here: ${this.state.shareLink}`); } private _getOrderUrl() { const order = utils.generateOrder( - this.props.networkId, this.props.exchangeContractIfExists, this.props.sideToAssetToken, this.props.orderExpiryTimestamp, diff --git a/packages/website/ts/schemas/metadata_schema.ts b/packages/website/ts/schemas/metadata_schema.ts index 272b23fbd..ff3bea13a 100644 --- a/packages/website/ts/schemas/metadata_schema.ts +++ b/packages/website/ts/schemas/metadata_schema.ts @@ -3,8 +3,7 @@ export const orderMetadataSchema = { properties: { makerToken: { $ref: '/Token' }, takerToken: { $ref: '/Token' }, - networkId: { type: 'number' }, }, - required: ['makerToken', 'takerToken', 'networkId'], + required: ['makerToken', 'takerToken'], type: 'object', }; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 9281310d1..a628ebec1 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -76,7 +76,6 @@ export interface SignedOrder { } export interface OrderMetadata { - networkId: number; makerToken: OrderToken; takerToken: OrderToken; } diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 279b2c1b2..eaff5c658 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -59,7 +59,6 @@ export const utils = { return formattedDate; }, generateOrder( - networkId: number, exchangeContractAddress: string, sideToAssetToken: SideToAssetToken, expirationUnixTimestampSec: BigNumber, @@ -91,7 +90,6 @@ export const utils = { exchangeContractAddress, }, metadata: { - networkId, makerToken: { name: makerToken.name, symbol: makerToken.symbol, -- cgit v1.2.3 From 8fba0477a69317c19b3446c76a17cb3adbf447d7 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 7 Feb 2018 20:58:19 +0100 Subject: Remove hash from signatureData --- packages/website/ts/blockchain.ts | 13 +++++-------- packages/website/ts/components/fill_order.tsx | 11 ++++------- packages/website/ts/components/fill_order_json.tsx | 5 ++--- .../components/generate_order/generate_order_form.tsx | 17 ++++------------- packages/website/ts/components/order_json.tsx | 9 +++++---- packages/website/ts/containers/generate_order_form.tsx | 5 +++-- packages/website/ts/redux/dispatcher.ts | 8 ++++---- packages/website/ts/redux/reducer.ts | 11 +++++------ packages/website/ts/schemas/signature_data_schema.ts | 3 +-- packages/website/ts/types.ts | 4 ++-- packages/website/ts/utils/utils.ts | 4 ++-- 11 files changed, 37 insertions(+), 53 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 099efb405..697ff4f10 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -2,6 +2,7 @@ import { BlockParam, BlockRange, DecodedLogEvent, + ECSignature, ExchangeContractEventArgs, ExchangeEvents, IndexedFilterValues, @@ -299,10 +300,9 @@ export class Blockchain { takerFee: BigNumber, expirationUnixTimestampSec: BigNumber, feeRecipient: string, - signatureData: SignatureData, + ecSignature: ECSignature, salt: BigNumber, ): SignedOrder { - const ecSignature = signatureData; const exchangeContractAddress = this.getExchangeContractAddressIfExists(); const takerOrNullAddress = _.isEmpty(taker) ? constants.NULL_ADDRESS : taker; const signedOrder = { @@ -413,7 +413,7 @@ export class Blockchain { return newTokenBalancePromise; } - public async signOrderHashAsync(orderHash: string): Promise { + public async signOrderHashAsync(orderHash: string): Promise { utils.assert(!_.isUndefined(this._zeroEx), 'ZeroEx must be instantiated.'); const makerAddress = this._userAddress; // If makerAddress is undefined, this means they have a web3 instance injected into their browser @@ -436,11 +436,8 @@ export class Blockchain { makerAddress, shouldAddPersonalMessagePrefix, ); - const signatureData = _.extend({}, ecSignature, { - hash: orderHash, - }); - this._dispatcher.updateSignatureData(signatureData); - return signatureData; + this._dispatcher.updateECSignature(ecSignature); + return ecSignature; } public async mintTestTokensAsync(token: Token) { utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index d2c36ff0c..4252747ec 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -404,6 +404,7 @@ export class FillOrder extends React.Component { private async _validateFillOrderFireAndForgetAsync(orderJSON: string) { let orderJSONErrMsg = ''; let parsedOrder: Order; + let orderHash: string; try { const order = JSON.parse(orderJSON); const validationResult = this._validator.validate(order, orderSchema); @@ -438,16 +439,13 @@ export class FillOrder extends React.Component { takerTokenAddress: parsedOrder.signedOrder.takerTokenAddress, takerTokenAmount: takerAmount, }; - const orderHash = ZeroEx.getOrderHashHex(zeroExOrder); + orderHash = ZeroEx.getOrderHashHex(zeroExOrder); const signature = parsedOrder.signedOrder.ecSignature; - const isValidSignature = ZeroEx.isValidSignature(signature.hash, signature, parsedOrder.signedOrder.maker); + const isValidSignature = ZeroEx.isValidSignature(orderHash, signature, parsedOrder.signedOrder.maker); if (exchangeContractAddr !== parsedOrder.signedOrder.exchangeContractAddress) { orderJSONErrMsg = 'This order was made on another network or using a deprecated Exchange contract'; parsedOrder = undefined; - } else if (orderHash !== signature.hash) { - orderJSONErrMsg = 'Order hash does not match supplied plaintext values'; - parsedOrder = undefined; } else if (!isValidSignature) { orderJSONErrMsg = 'Order signature is invalid'; parsedOrder = undefined; @@ -477,7 +475,6 @@ export class FillOrder extends React.Component { // Clear cache entry if user updates orderJSON to invalid entry this.props.dispatcher.updateUserSuppliedOrderCache(undefined); } else { - const orderHash = parsedOrder.signedOrder.ecSignature.hash; unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const isMakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( parsedOrder.signedOrder.makerTokenAddress, @@ -617,7 +614,6 @@ export class FillOrder extends React.Component { }); const parsedOrder = this.state.parsedOrder; - const orderHash = parsedOrder.signedOrder.ecSignature.hash; const takerAddress = this.props.userAddress; if (_.isUndefined(takerAddress)) { @@ -645,6 +641,7 @@ export class FillOrder extends React.Component { parsedOrder.signedOrder.ecSignature, new BigNumber(parsedOrder.signedOrder.salt), ); + const orderHash = ZeroEx.getOrderHashHex(signedOrder); const unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const availableTakerTokenAmount = takerTokenAmount.minus(unavailableTakerAmount); try { diff --git a/packages/website/ts/components/fill_order_json.tsx b/packages/website/ts/components/fill_order_json.tsx index 877b65116..7d5351ec4 100644 --- a/packages/website/ts/components/fill_order_json.tsx +++ b/packages/website/ts/components/fill_order_json.tsx @@ -33,8 +33,7 @@ export class FillOrderJSON extends React.Component { this.props.orderMakerFee, this.props.orderTakerFee, this.props.orderFeeRecipient, - this.props.orderSignatureData, + this.props.orderECSignature, this.props.tokenByAddress, this.props.orderSalt, ); @@ -168,7 +169,7 @@ You can see and fill it here: ${this.state.shareLink}`); this.props.orderMakerFee, this.props.orderTakerFee, this.props.orderFeeRecipient, - this.props.orderSignatureData, + this.props.orderECSignature, this.props.tokenByAddress, this.props.orderSalt, ); diff --git a/packages/website/ts/containers/generate_order_form.tsx b/packages/website/ts/containers/generate_order_form.tsx index 57863dbae..2cdb7b810 100644 --- a/packages/website/ts/containers/generate_order_form.tsx +++ b/packages/website/ts/containers/generate_order_form.tsx @@ -1,3 +1,4 @@ +import { ECSignature } from '0x.js'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; import * as React from 'react'; @@ -18,7 +19,7 @@ interface ConnectedState { blockchainErr: BlockchainErrs; blockchainIsLoaded: boolean; orderExpiryTimestamp: BigNumber; - orderSignatureData: SignatureData; + orderECSignature: ECSignature; userAddress: string; orderTakerAddress: string; orderSalt: BigNumber; @@ -32,7 +33,7 @@ const mapStateToProps = (state: State, ownProps: GenerateOrderFormProps): Connec blockchainErr: state.blockchainErr, blockchainIsLoaded: state.blockchainIsLoaded, orderExpiryTimestamp: state.orderExpiryTimestamp, - orderSignatureData: state.orderSignatureData, + orderECSignature: state.orderECSignature, orderTakerAddress: state.orderTakerAddress, orderSalt: state.orderSalt, networkId: state.networkId, diff --git a/packages/website/ts/redux/dispatcher.ts b/packages/website/ts/redux/dispatcher.ts index 87415b285..925f2aa29 100644 --- a/packages/website/ts/redux/dispatcher.ts +++ b/packages/website/ts/redux/dispatcher.ts @@ -1,3 +1,4 @@ +import { ECSignature } from '0x.js'; import { BigNumber } from '@0xproject/utils'; import { Dispatch } from 'redux'; import { State } from 'ts/redux/reducer'; @@ -10,7 +11,6 @@ import { ScreenWidths, Side, SideToAssetToken, - SignatureData, Token, TokenByAddress, } from 'ts/types'; @@ -148,10 +148,10 @@ export class Dispatcher { type: ActionTypes.ForceTokenStateRefetch, }); } - public updateSignatureData(signatureData: SignatureData) { + public updateECSignature(ecSignature: ECSignature) { this._dispatch({ - data: signatureData, - type: ActionTypes.UpdateOrderSignatureData, + data: ecSignature, + type: ActionTypes.UpdateOrderECSignature, }); } public updateUserEtherBalance(balance: BigNumber) { diff --git a/packages/website/ts/redux/reducer.ts b/packages/website/ts/redux/reducer.ts index 7b0b03dae..cab8cbfe6 100644 --- a/packages/website/ts/redux/reducer.ts +++ b/packages/website/ts/redux/reducer.ts @@ -1,4 +1,4 @@ -import { ZeroEx } from '0x.js'; +import { ECSignature, ZeroEx } from '0x.js'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; import * as moment from 'moment'; @@ -29,7 +29,7 @@ export interface State { orderExpiryTimestamp: BigNumber; orderFillAmount: BigNumber; orderTakerAddress: string; - orderSignatureData: SignatureData; + orderECSignature: ECSignature; orderSalt: BigNumber; nodeVersion: string; screenWidth: ScreenWidths; @@ -59,8 +59,7 @@ const INITIAL_STATE: State = { networkId: undefined, orderExpiryTimestamp: utils.initialOrderExpiryUnixTimestampSec(), orderFillAmount: undefined, - orderSignatureData: { - hash: '', + orderECSignature: { r: '', s: '', v: 27, @@ -188,10 +187,10 @@ export function reducer(state: State = INITIAL_STATE, action: Action) { lastForceTokenStateRefetch: moment().unix(), }; - case ActionTypes.UpdateOrderSignatureData: { + case ActionTypes.UpdateOrderECSignature: { return { ...state, - orderSignatureData: action.data, + orderECSignature: action.data, }; } diff --git a/packages/website/ts/schemas/signature_data_schema.ts b/packages/website/ts/schemas/signature_data_schema.ts index 8d3f15926..7852abfef 100644 --- a/packages/website/ts/schemas/signature_data_schema.ts +++ b/packages/website/ts/schemas/signature_data_schema.ts @@ -1,11 +1,10 @@ export const signatureDataSchema = { id: '/SignatureData', properties: { - hash: { type: 'string' }, r: { type: 'string' }, s: { type: 'string' }, v: { type: 'number' }, }, - required: ['hash', 'r', 's', 'v'], + required: ['r', 's', 'v'], type: 'object', }; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index a628ebec1..2b255f523 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -71,7 +71,7 @@ export interface SignedOrder { expirationUnixTimestampSec: string; feeRecipient: string; salt: string; - ecSignature: SignatureData; + ecSignature: ECSignature; exchangeContractAddress: string; } @@ -123,7 +123,7 @@ export enum ActionTypes { UpdateChosenAssetTokenAddress = 'UPDATE_CHOSEN_ASSET_TOKEN_ADDRESS', UpdateOrderTakerAddress = 'UPDATE_ORDER_TAKER_ADDRESS', UpdateOrderSalt = 'UPDATE_ORDER_SALT', - UpdateOrderSignatureData = 'UPDATE_ORDER_SIGNATURE_DATA', + UpdateOrderECSignature = 'UPDATE_ORDER_EC_SIGNATURE', UpdateTokenByAddress = 'UPDATE_TOKEN_BY_ADDRESS', RemoveTokenFromTokenByAddress = 'REMOVE_TOKEN_FROM_TOKEN_BY_ADDRESS', ForceTokenStateRefetch = 'FORCE_TOKEN_STATE_REFETCH', diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index eaff5c658..bf6b70f84 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -1,4 +1,4 @@ -import { ExchangeContractErrs, ZeroExError } from '0x.js'; +import { ECSignature, ExchangeContractErrs, ZeroExError } from '0x.js'; import { BigNumber } from '@0xproject/utils'; import deepEqual = require('deep-equal'); import isMobile = require('is-mobile'); @@ -67,7 +67,7 @@ export const utils = { makerFee: BigNumber, takerFee: BigNumber, feeRecipient: string, - ecSignature: SignatureData, + ecSignature: ECSignature, tokenByAddress: TokenByAddress, orderSalt: BigNumber, ): Order { -- cgit v1.2.3 From 1233c33116a389f34ac90768c5ef43c8bbfbf514 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 8 Feb 2018 16:23:20 +0100 Subject: Address feedback --- packages/website/ts/blockchain.ts | 34 ----------- packages/website/ts/components/fill_order.tsx | 71 ++++++++++------------ .../generate_order/generate_order_form.tsx | 17 +++--- packages/website/ts/components/portal.tsx | 3 +- packages/website/ts/components/visual_order.tsx | 2 - .../website/ts/containers/generate_order_form.tsx | 2 +- packages/website/ts/redux/reducer.ts | 3 +- packages/website/ts/schemas/metadata_schema.ts | 4 +- packages/website/ts/schemas/order_schema.ts | 2 +- .../website/ts/schemas/signature_data_schema.ts | 10 --- packages/website/ts/schemas/signed_order_schema.ts | 34 ----------- packages/website/ts/schemas/token_schema.ts | 2 +- packages/website/ts/schemas/validator.ts | 23 +++---- packages/website/ts/types.ts | 4 -- packages/website/ts/utils/utils.ts | 3 +- 15 files changed, 57 insertions(+), 157 deletions(-) delete mode 100644 packages/website/ts/schemas/signature_data_schema.ts delete mode 100644 packages/website/ts/schemas/signed_order_schema.ts (limited to 'packages') diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 697ff4f10..ae79651d5 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -39,7 +39,6 @@ import { ProviderType, Side, SideToAssetToken, - SignatureData, Token, TokenByAddress, } from 'ts/types'; @@ -289,39 +288,6 @@ export class Blockchain { }), ); } - public portalOrderToSignedOrder( - maker: string, - taker: string, - makerTokenAddress: string, - takerTokenAddress: string, - makerTokenAmount: BigNumber, - takerTokenAmount: BigNumber, - makerFee: BigNumber, - takerFee: BigNumber, - expirationUnixTimestampSec: BigNumber, - feeRecipient: string, - ecSignature: ECSignature, - salt: BigNumber, - ): SignedOrder { - const exchangeContractAddress = this.getExchangeContractAddressIfExists(); - const takerOrNullAddress = _.isEmpty(taker) ? constants.NULL_ADDRESS : taker; - const signedOrder = { - ecSignature, - exchangeContractAddress, - expirationUnixTimestampSec, - feeRecipient, - maker, - makerFee, - makerTokenAddress, - makerTokenAmount, - salt, - taker: takerOrNullAddress, - takerFee, - takerTokenAddress, - takerTokenAmount, - }; - return signedOrder; - } public async fillOrderAsync(signedOrder: SignedOrder, fillTakerTokenAmount: BigNumber): Promise { utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 4252747ec..2582581b1 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -19,7 +19,7 @@ import { Identicon } from 'ts/components/ui/identicon'; import { VisualOrder } from 'ts/components/visual_order'; import { Dispatcher } from 'ts/redux/dispatcher'; import { orderSchema } from 'ts/schemas/order_schema'; -import { SchemaValidator } from 'ts/schemas/validator'; +import { validator } from 'ts/schemas/validator'; import { AlertTypes, BlockchainErrs, Order, Token, TokenByAddress, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; import { constants } from 'ts/utils/constants'; @@ -59,7 +59,6 @@ interface FillOrderState { } export class FillOrder extends React.Component { - private _validator: SchemaValidator; private _isUnmounted: boolean; constructor(props: FillOrderProps) { super(props); @@ -82,7 +81,6 @@ export class FillOrder extends React.Component { isConfirmingTokenTracking: false, tokensToTrack: [], }; - this._validator = new SchemaValidator(); } public componentWillMount() { if (!_.isEmpty(this.state.orderJSON)) { @@ -199,9 +197,6 @@ export class FillOrder extends React.Component { amount: this.props.orderFillAmount, symbol: takerToken.symbol, }; - const orderTaker = !_.isEmpty(this.state.parsedOrder.signedOrder.taker) - ? this.state.parsedOrder.signedOrder.taker - : this.props.userAddress; const parsedOrderExpiration = new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec); const exchangeRate = orderMakerAmount.div(orderTakerAmount); @@ -236,8 +231,6 @@ export class FillOrder extends React.Component {
{ let orderHash: string; try { const order = JSON.parse(orderJSON); - const validationResult = this._validator.validate(order, orderSchema); + const validationResult = validator.validate(order, orderSchema); if (validationResult.errors.length > 0) { orderJSONErrMsg = 'Submitted order JSON is not a valid order'; utils.consoleLog(`Unexpected order JSON validation error: ${validationResult.errors.join(', ')}`); @@ -415,7 +408,6 @@ export class FillOrder extends React.Component { } parsedOrder = order; - const exchangeContractAddr = this.props.blockchain.getExchangeContractAddressIfExists(); const makerAmount = new BigNumber(parsedOrder.signedOrder.makerTokenAmount); const takerAmount = new BigNumber(parsedOrder.signedOrder.takerTokenAmount); const expiration = new BigNumber(parsedOrder.signedOrder.expirationUnixTimestampSec); @@ -441,6 +433,7 @@ export class FillOrder extends React.Component { }; orderHash = ZeroEx.getOrderHashHex(zeroExOrder); + const exchangeContractAddr = this.props.blockchain.getExchangeContractAddressIfExists(); const signature = parsedOrder.signedOrder.ecSignature; const isValidSignature = ZeroEx.isValidSignature(orderHash, signature, parsedOrder.signedOrder.maker); if (exchangeContractAddr !== parsedOrder.signedOrder.exchangeContractAddress) { @@ -525,20 +518,21 @@ export class FillOrder extends React.Component { globalErrMsg = 'You must specify a fill amount'; } - const signedOrder = this.props.blockchain.portalOrderToSignedOrder( - parsedOrder.signedOrder.maker, - parsedOrder.signedOrder.taker, - parsedOrder.signedOrder.makerTokenAddress, - parsedOrder.signedOrder.takerTokenAddress, - new BigNumber(parsedOrder.signedOrder.makerTokenAmount), - new BigNumber(parsedOrder.signedOrder.takerTokenAmount), - new BigNumber(parsedOrder.signedOrder.makerFee), - new BigNumber(parsedOrder.signedOrder.takerFee), - new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), - parsedOrder.signedOrder.feeRecipient, - parsedOrder.signedOrder.ecSignature, - new BigNumber(parsedOrder.signedOrder.salt), - ); + const signedOrder = { + exchangeContractAddress: this.props.blockchain.getExchangeContractAddressIfExists(), + maker: parsedOrder.signedOrder.maker, + taker: _.isEmpty(parsedOrder.signedOrder.taker) ? constants.NULL_ADDRESS : parsedOrder.signedOrder.taker, + makerTokenAddress: parsedOrder.signedOrder.makerTokenAddress, + takerTokenAddress: parsedOrder.signedOrder.takerTokenAddress, + makerTokenAmount: new BigNumber(parsedOrder.signedOrder.makerTokenAmount), + takerTokenAmount: new BigNumber(parsedOrder.signedOrder.takerTokenAmount), + makerFee: new BigNumber(parsedOrder.signedOrder.makerFee), + takerFee: new BigNumber(parsedOrder.signedOrder.takerFee), + expirationUnixTimestampSec: new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), + feeRecipient: parsedOrder.signedOrder.feeRecipient, + ecSignature: parsedOrder.signedOrder.ecSignature, + salt: new BigNumber(parsedOrder.signedOrder.salt), + }; if (_.isEmpty(globalErrMsg)) { try { await this.props.blockchain.validateFillOrderThrowIfInvalidAsync( @@ -627,20 +621,21 @@ export class FillOrder extends React.Component { const takerTokenAmount = new BigNumber(parsedOrder.signedOrder.takerTokenAmount); - const signedOrder = this.props.blockchain.portalOrderToSignedOrder( - parsedOrder.signedOrder.maker, - parsedOrder.signedOrder.taker, - parsedOrder.signedOrder.makerTokenAddress, - parsedOrder.signedOrder.takerTokenAddress, - new BigNumber(parsedOrder.signedOrder.makerTokenAmount), - takerTokenAmount, - new BigNumber(parsedOrder.signedOrder.makerFee), - new BigNumber(parsedOrder.signedOrder.takerFee), - new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), - parsedOrder.signedOrder.feeRecipient, - parsedOrder.signedOrder.ecSignature, - new BigNumber(parsedOrder.signedOrder.salt), - ); + const signedOrder = { + exchangeContractAddress: this.props.blockchain.getExchangeContractAddressIfExists(), + maker: parsedOrder.signedOrder.maker, + taker: parsedOrder.signedOrder.taker, + makerTokenAddress: parsedOrder.signedOrder.makerTokenAddress, + takerTokenAddress: parsedOrder.signedOrder.takerTokenAddress, + makerTokenAmount: new BigNumber(parsedOrder.signedOrder.makerTokenAmount), + takerTokenAmount: new BigNumber(parsedOrder.signedOrder.takerTokenAmount), + makerFee: new BigNumber(parsedOrder.signedOrder.makerFee), + takerFee: new BigNumber(parsedOrder.signedOrder.takerFee), + expirationUnixTimestampSec: new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), + feeRecipient: parsedOrder.signedOrder.feeRecipient, + ecSignature: parsedOrder.signedOrder.ecSignature, + salt: new BigNumber(parsedOrder.signedOrder.salt), + }; const orderHash = ZeroEx.getOrderHashHex(signedOrder); const unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const availableTakerTokenAmount = takerTokenAmount.minus(unavailableTakerAmount); diff --git a/packages/website/ts/components/generate_order/generate_order_form.tsx b/packages/website/ts/components/generate_order/generate_order_form.tsx index 5f1cf3c8e..fcabd4844 100644 --- a/packages/website/ts/components/generate_order/generate_order_form.tsx +++ b/packages/website/ts/components/generate_order/generate_order_form.tsx @@ -18,7 +18,7 @@ import { LifeCycleRaisedButton } from 'ts/components/ui/lifecycle_raised_button' import { SwapIcon } from 'ts/components/ui/swap_icon'; import { Dispatcher } from 'ts/redux/dispatcher'; import { orderSchema } from 'ts/schemas/order_schema'; -import { SchemaValidator } from 'ts/schemas/validator'; +import { validator } from 'ts/schemas/validator'; import { AlertTypes, BlockchainErrs, HashData, Side, SideToAssetToken, Token, TokenByAddress } from 'ts/types'; import { colors } from 'ts/utils/colors'; import { constants } from 'ts/utils/constants'; @@ -55,7 +55,6 @@ interface GenerateOrderFormState { } export class GenerateOrderForm extends React.Component { - private _validator: SchemaValidator; constructor(props: GenerateOrderFormProps) { super(props); this.state = { @@ -63,7 +62,6 @@ export class GenerateOrderForm extends React.Component \ specified, anyone is able to fill it.'; const exchangeContractIfExists = this.props.blockchain.getExchangeContractAddressIfExists(); + const initialTakerAddress = + this.props.orderTakerAddress === ZeroEx.NULL_ADDRESS ? '' : this.props.orderTakerAddress; return (

Generate an order

@@ -159,7 +159,7 @@ export class GenerateOrderForm extends React.Component
@@ -317,7 +317,7 @@ export class GenerateOrderForm extends React.Component 0) { globalErrMsg = 'Order signing failed. Please refresh and try again'; utils.consoleLog(`Unexpected error occured: Order validation failed: @@ -356,7 +356,8 @@ export class GenerateOrderForm extends React.Component { return undefined; } - const validator = new SchemaValidator(); const order = JSON.parse(decodeURIComponent(orderPair[1])); const validationResult = validator.validate(order, orderSchema); if (validationResult.errors.length > 0) { diff --git a/packages/website/ts/components/visual_order.tsx b/packages/website/ts/components/visual_order.tsx index 092954086..ec2d47f39 100644 --- a/packages/website/ts/components/visual_order.tsx +++ b/packages/website/ts/components/visual_order.tsx @@ -8,8 +8,6 @@ import { utils } from 'ts/utils/utils'; const PRECISION = 5; interface VisualOrderProps { - orderTakerAddress: string; - orderMakerAddress: string; makerAssetToken: AssetToken; takerAssetToken: AssetToken; makerToken: Token; diff --git a/packages/website/ts/containers/generate_order_form.tsx b/packages/website/ts/containers/generate_order_form.tsx index 2cdb7b810..8c5deb690 100644 --- a/packages/website/ts/containers/generate_order_form.tsx +++ b/packages/website/ts/containers/generate_order_form.tsx @@ -7,7 +7,7 @@ import { Blockchain } from 'ts/blockchain'; import { GenerateOrderForm as GenerateOrderFormComponent } from 'ts/components/generate_order/generate_order_form'; import { Dispatcher } from 'ts/redux/dispatcher'; import { State } from 'ts/redux/reducer'; -import { BlockchainErrs, HashData, SideToAssetToken, SignatureData, TokenByAddress } from 'ts/types'; +import { BlockchainErrs, HashData, SideToAssetToken, TokenByAddress } from 'ts/types'; interface GenerateOrderFormProps { blockchain: Blockchain; diff --git a/packages/website/ts/redux/reducer.ts b/packages/website/ts/redux/reducer.ts index cab8cbfe6..c2a21dc07 100644 --- a/packages/website/ts/redux/reducer.ts +++ b/packages/website/ts/redux/reducer.ts @@ -11,7 +11,6 @@ import { ScreenWidths, Side, SideToAssetToken, - SignatureData, TokenByAddress, } from 'ts/types'; import { utils } from 'ts/utils/utils'; @@ -64,7 +63,7 @@ const INITIAL_STATE: State = { s: '', v: 27, }, - orderTakerAddress: '', + orderTakerAddress: ZeroEx.NULL_ADDRESS, orderSalt: ZeroEx.generatePseudoRandomSalt(), nodeVersion: undefined, screenWidth: utils.getScreenWidth(), diff --git a/packages/website/ts/schemas/metadata_schema.ts b/packages/website/ts/schemas/metadata_schema.ts index ff3bea13a..cd4045d10 100644 --- a/packages/website/ts/schemas/metadata_schema.ts +++ b/packages/website/ts/schemas/metadata_schema.ts @@ -1,8 +1,8 @@ export const orderMetadataSchema = { id: '/OrderMetadata', properties: { - makerToken: { $ref: '/Token' }, - takerToken: { $ref: '/Token' }, + makerToken: { $ref: '/PortalTokenMetadata' }, + takerToken: { $ref: '/PortalTokenMetadata' }, }, required: ['makerToken', 'takerToken'], type: 'object', diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts index 0c5a6d425..4d427d8ce 100644 --- a/packages/website/ts/schemas/order_schema.ts +++ b/packages/website/ts/schemas/order_schema.ts @@ -1,5 +1,5 @@ export const orderSchema = { - id: '/Order', + id: '/PortalOrder', properties: { signedOrder: { $ref: '/SignedOrder' }, metadata: { $ref: '/OrderMetadata' }, diff --git a/packages/website/ts/schemas/signature_data_schema.ts b/packages/website/ts/schemas/signature_data_schema.ts deleted file mode 100644 index 7852abfef..000000000 --- a/packages/website/ts/schemas/signature_data_schema.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const signatureDataSchema = { - id: '/SignatureData', - properties: { - r: { type: 'string' }, - s: { type: 'string' }, - v: { type: 'number' }, - }, - required: ['r', 's', 'v'], - type: 'object', -}; diff --git a/packages/website/ts/schemas/signed_order_schema.ts b/packages/website/ts/schemas/signed_order_schema.ts deleted file mode 100644 index 385008ab8..000000000 --- a/packages/website/ts/schemas/signed_order_schema.ts +++ /dev/null @@ -1,34 +0,0 @@ -export const signedOrderSchema = { - id: '/SignedOrder', - properties: { - maker: { type: 'string' }, - taker: { type: 'string' }, - makerTokenAddress: { type: 'string' }, - takerTokenAddress: { type: 'string' }, - makerFee: { type: 'string' }, - takerFee: { type: 'string' }, - makerTokenAmount: { type: 'string' }, - takerTokenAmount: { type: 'string' }, - salt: { type: 'string' }, - ecSignature: { $ref: '/SignatureData' }, - expirationUnixTimestampSec: { type: 'string' }, - feeRecipient: { type: 'string' }, - exchangeContractAddress: { type: 'string' }, - }, - required: [ - 'maker', - 'taker', - 'makerTokenAddress', - 'takerTokenAddress', - 'makerFee', - 'takerFee', - 'makerTokenAmount', - 'takerTokenAmount', - 'salt', - 'ecSignature', - 'expirationUnixTimestampSec', - 'feeRecipient', - 'exchangeContractAddress', - ], - type: 'object', -}; diff --git a/packages/website/ts/schemas/token_schema.ts b/packages/website/ts/schemas/token_schema.ts index 34cd6f676..4d1febfee 100644 --- a/packages/website/ts/schemas/token_schema.ts +++ b/packages/website/ts/schemas/token_schema.ts @@ -1,5 +1,5 @@ export const tokenSchema = { - id: '/Token', + id: '/PortalTokenMetadata', properties: { name: { type: 'string' }, symbol: { type: 'string' }, diff --git a/packages/website/ts/schemas/validator.ts b/packages/website/ts/schemas/validator.ts index 14061e2a3..f0b5e6676 100644 --- a/packages/website/ts/schemas/validator.ts +++ b/packages/website/ts/schemas/validator.ts @@ -1,21 +1,12 @@ +import { SchemaValidator } from '@0xproject/json-schemas'; import { Schema as JSONSchema, Validator } from 'jsonschema'; import { orderMetadataSchema } from 'ts/schemas/metadata_schema'; import { orderSchema } from 'ts/schemas/order_schema'; -import { signatureDataSchema } from 'ts/schemas/signature_data_schema'; -import { signedOrderSchema } from 'ts/schemas/signed_order_schema'; import { tokenSchema } from 'ts/schemas/token_schema'; -export class SchemaValidator { - private _validator: Validator; - constructor() { - this._validator = new Validator(); - this._validator.addSchema(signatureDataSchema as JSONSchema, signatureDataSchema.id); - this._validator.addSchema(tokenSchema as JSONSchema, tokenSchema.id); - this._validator.addSchema(orderMetadataSchema as JSONSchema, orderMetadataSchema.id); - this._validator.addSchema(signedOrderSchema as JSONSchema, signedOrderSchema.id); - this._validator.addSchema(orderSchema as JSONSchema, orderSchema.id); - } - public validate(instance: object, schema: Schema) { - return this._validator.validate(instance, schema); - } -} +const validator = new SchemaValidator(); +validator.addSchema(tokenSchema); +validator.addSchema(orderMetadataSchema); +validator.addSchema(orderSchema); + +export { validator }; diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 2b255f523..19fc24852 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -35,10 +35,6 @@ export interface SideToAssetToken { [side: string]: AssetToken; } -export interface SignatureData extends ECSignature { - hash: string; -} - export interface HashData { depositAmount: BigNumber; depositTokenContractAddr: string; diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index bf6b70f84..68eb7c813 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -1,4 +1,4 @@ -import { ECSignature, ExchangeContractErrs, ZeroExError } from '0x.js'; +import { ECSignature, ExchangeContractErrs, ZeroEx, ZeroExError } from '0x.js'; import { BigNumber } from '@0xproject/utils'; import deepEqual = require('deep-equal'); import isMobile = require('is-mobile'); @@ -11,7 +11,6 @@ import { ScreenWidths, Side, SideToAssetToken, - SignatureData, Token, TokenByAddress, } from 'ts/types'; -- cgit v1.2.3 From ec198343b551020cfed321937d680af59c2ce127 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 8 Feb 2018 18:07:38 +0100 Subject: Make naming of schemas consistent --- packages/website/ts/components/fill_order.tsx | 4 ++-- .../ts/components/generate_order/generate_order_form.tsx | 4 ++-- packages/website/ts/components/portal.tsx | 4 ++-- packages/website/ts/schemas/order_schema.ts | 9 --------- packages/website/ts/schemas/portal_order_schema.ts | 9 +++++++++ packages/website/ts/schemas/portal_token_metadata.ts | 10 ++++++++++ packages/website/ts/schemas/token_schema.ts | 10 ---------- packages/website/ts/schemas/validator.ts | 8 ++++---- 8 files changed, 29 insertions(+), 29 deletions(-) delete mode 100644 packages/website/ts/schemas/order_schema.ts create mode 100644 packages/website/ts/schemas/portal_order_schema.ts create mode 100644 packages/website/ts/schemas/portal_token_metadata.ts delete mode 100644 packages/website/ts/schemas/token_schema.ts (limited to 'packages') diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 2582581b1..063c57688 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -18,7 +18,7 @@ import { EthereumAddress } from 'ts/components/ui/ethereum_address'; import { Identicon } from 'ts/components/ui/identicon'; import { VisualOrder } from 'ts/components/visual_order'; import { Dispatcher } from 'ts/redux/dispatcher'; -import { orderSchema } from 'ts/schemas/order_schema'; +import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; import { validator } from 'ts/schemas/validator'; import { AlertTypes, BlockchainErrs, Order, Token, TokenByAddress, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; @@ -400,7 +400,7 @@ export class FillOrder extends React.Component { let orderHash: string; try { const order = JSON.parse(orderJSON); - const validationResult = validator.validate(order, orderSchema); + const validationResult = validator.validate(order, portalOrderSchema); if (validationResult.errors.length > 0) { orderJSONErrMsg = 'Submitted order JSON is not a valid order'; utils.consoleLog(`Unexpected order JSON validation error: ${validationResult.errors.join(', ')}`); diff --git a/packages/website/ts/components/generate_order/generate_order_form.tsx b/packages/website/ts/components/generate_order/generate_order_form.tsx index fcabd4844..a3f222784 100644 --- a/packages/website/ts/components/generate_order/generate_order_form.tsx +++ b/packages/website/ts/components/generate_order/generate_order_form.tsx @@ -17,7 +17,7 @@ import { HelpTooltip } from 'ts/components/ui/help_tooltip'; import { LifeCycleRaisedButton } from 'ts/components/ui/lifecycle_raised_button'; import { SwapIcon } from 'ts/components/ui/swap_icon'; import { Dispatcher } from 'ts/redux/dispatcher'; -import { orderSchema } from 'ts/schemas/order_schema'; +import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; import { validator } from 'ts/schemas/validator'; import { AlertTypes, BlockchainErrs, HashData, Side, SideToAssetToken, Token, TokenByAddress } from 'ts/types'; import { colors } from 'ts/utils/colors'; @@ -331,7 +331,7 @@ export class GenerateOrderForm extends React.Component 0) { globalErrMsg = 'Order signing failed. Please refresh and try again'; utils.consoleLog(`Unexpected error occured: Order validation failed: diff --git a/packages/website/ts/components/portal.tsx b/packages/website/ts/components/portal.tsx index 0d4fb8fdc..0409f28c0 100644 --- a/packages/website/ts/components/portal.tsx +++ b/packages/website/ts/components/portal.tsx @@ -21,7 +21,7 @@ import { FlashMessage } from 'ts/components/ui/flash_message'; import { GenerateOrderForm } from 'ts/containers/generate_order_form'; import { localStorage } from 'ts/local_storage/local_storage'; import { Dispatcher } from 'ts/redux/dispatcher'; -import { orderSchema } from 'ts/schemas/order_schema'; +import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; import { validator } from 'ts/schemas/validator'; import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, TokenByAddress, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; @@ -368,7 +368,7 @@ export class Portal extends React.Component { } const order = JSON.parse(decodeURIComponent(orderPair[1])); - const validationResult = validator.validate(order, orderSchema); + const validationResult = validator.validate(order, portalOrderSchema); if (validationResult.errors.length > 0) { utils.consoleLog(`Invalid shared order: ${validationResult.errors}`); return undefined; diff --git a/packages/website/ts/schemas/order_schema.ts b/packages/website/ts/schemas/order_schema.ts deleted file mode 100644 index 4d427d8ce..000000000 --- a/packages/website/ts/schemas/order_schema.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const orderSchema = { - id: '/PortalOrder', - properties: { - signedOrder: { $ref: '/SignedOrder' }, - metadata: { $ref: '/OrderMetadata' }, - }, - required: ['signedOrder', 'metadata'], - type: 'object', -}; diff --git a/packages/website/ts/schemas/portal_order_schema.ts b/packages/website/ts/schemas/portal_order_schema.ts new file mode 100644 index 000000000..ea8aeabc6 --- /dev/null +++ b/packages/website/ts/schemas/portal_order_schema.ts @@ -0,0 +1,9 @@ +export const portalOrderSchema = { + id: '/PortalOrder', + properties: { + signedOrder: { $ref: '/SignedOrder' }, + metadata: { $ref: '/OrderMetadata' }, + }, + required: ['signedOrder', 'metadata'], + type: 'object', +}; diff --git a/packages/website/ts/schemas/portal_token_metadata.ts b/packages/website/ts/schemas/portal_token_metadata.ts new file mode 100644 index 000000000..0455c2ac1 --- /dev/null +++ b/packages/website/ts/schemas/portal_token_metadata.ts @@ -0,0 +1,10 @@ +export const portalTokenMetadataSchema = { + id: '/PortalTokenMetadata', + properties: { + name: { type: 'string' }, + symbol: { type: 'string' }, + decimals: { type: 'number' }, + }, + required: ['name', 'symbol', 'decimals'], + type: 'object', +}; diff --git a/packages/website/ts/schemas/token_schema.ts b/packages/website/ts/schemas/token_schema.ts deleted file mode 100644 index 4d1febfee..000000000 --- a/packages/website/ts/schemas/token_schema.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const tokenSchema = { - id: '/PortalTokenMetadata', - properties: { - name: { type: 'string' }, - symbol: { type: 'string' }, - decimals: { type: 'number' }, - }, - required: ['name', 'symbol', 'decimals'], - type: 'object', -}; diff --git a/packages/website/ts/schemas/validator.ts b/packages/website/ts/schemas/validator.ts index f0b5e6676..dac0f0098 100644 --- a/packages/website/ts/schemas/validator.ts +++ b/packages/website/ts/schemas/validator.ts @@ -1,12 +1,12 @@ import { SchemaValidator } from '@0xproject/json-schemas'; import { Schema as JSONSchema, Validator } from 'jsonschema'; import { orderMetadataSchema } from 'ts/schemas/metadata_schema'; -import { orderSchema } from 'ts/schemas/order_schema'; -import { tokenSchema } from 'ts/schemas/token_schema'; +import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; +import { portalTokenMetadataSchema } from 'ts/schemas/portal_token_metadata'; const validator = new SchemaValidator(); -validator.addSchema(tokenSchema); +validator.addSchema(portalTokenMetadataSchema); validator.addSchema(orderMetadataSchema); -validator.addSchema(orderSchema); +validator.addSchema(portalOrderSchema); export { validator }; -- cgit v1.2.3 From 43cf8d30bdab025cdcda888897d35b25ad455031 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 8 Feb 2018 18:28:54 +0100 Subject: Implement blockchain.portalOrderToZeroExOrder --- packages/website/ts/blockchain.ts | 20 +++++++++++++++++ packages/website/ts/components/fill_order.tsx | 32 ++------------------------- 2 files changed, 22 insertions(+), 30 deletions(-) (limited to 'packages') diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index ae79651d5..db3872a32 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -36,6 +36,7 @@ import { BlockchainErrs, ContractInstance, EtherscanLinkSuffixes, + Order as PortalOrder, ProviderType, Side, SideToAssetToken, @@ -288,6 +289,25 @@ export class Blockchain { }), ); } + public portalOrderToZeroExOrder(portalOrder: PortalOrder): SignedOrder { + const exchangeContractAddress = this.getExchangeContractAddressIfExists(); + const zeroExSignedOrder = { + exchangeContractAddress, + maker: portalOrder.signedOrder.maker, + taker: portalOrder.signedOrder.taker, + makerTokenAddress: portalOrder.signedOrder.makerTokenAddress, + takerTokenAddress: portalOrder.signedOrder.takerTokenAddress, + makerTokenAmount: new BigNumber(portalOrder.signedOrder.makerTokenAmount), + takerTokenAmount: new BigNumber(portalOrder.signedOrder.takerTokenAmount), + makerFee: new BigNumber(portalOrder.signedOrder.makerFee), + takerFee: new BigNumber(portalOrder.signedOrder.takerFee), + expirationUnixTimestampSec: new BigNumber(portalOrder.signedOrder.expirationUnixTimestampSec), + feeRecipient: portalOrder.signedOrder.feeRecipient, + ecSignature: portalOrder.signedOrder.ecSignature, + salt: new BigNumber(portalOrder.signedOrder.salt), + }; + return zeroExSignedOrder; + } public async fillOrderAsync(signedOrder: SignedOrder, fillTakerTokenAmount: BigNumber): Promise { utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx index 063c57688..51e44134c 100644 --- a/packages/website/ts/components/fill_order.tsx +++ b/packages/website/ts/components/fill_order.tsx @@ -518,21 +518,7 @@ export class FillOrder extends React.Component { globalErrMsg = 'You must specify a fill amount'; } - const signedOrder = { - exchangeContractAddress: this.props.blockchain.getExchangeContractAddressIfExists(), - maker: parsedOrder.signedOrder.maker, - taker: _.isEmpty(parsedOrder.signedOrder.taker) ? constants.NULL_ADDRESS : parsedOrder.signedOrder.taker, - makerTokenAddress: parsedOrder.signedOrder.makerTokenAddress, - takerTokenAddress: parsedOrder.signedOrder.takerTokenAddress, - makerTokenAmount: new BigNumber(parsedOrder.signedOrder.makerTokenAmount), - takerTokenAmount: new BigNumber(parsedOrder.signedOrder.takerTokenAmount), - makerFee: new BigNumber(parsedOrder.signedOrder.makerFee), - takerFee: new BigNumber(parsedOrder.signedOrder.takerFee), - expirationUnixTimestampSec: new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), - feeRecipient: parsedOrder.signedOrder.feeRecipient, - ecSignature: parsedOrder.signedOrder.ecSignature, - salt: new BigNumber(parsedOrder.signedOrder.salt), - }; + const signedOrder = this.props.blockchain.portalOrderToZeroExOrder(parsedOrder); if (_.isEmpty(globalErrMsg)) { try { await this.props.blockchain.validateFillOrderThrowIfInvalidAsync( @@ -621,21 +607,7 @@ export class FillOrder extends React.Component { const takerTokenAmount = new BigNumber(parsedOrder.signedOrder.takerTokenAmount); - const signedOrder = { - exchangeContractAddress: this.props.blockchain.getExchangeContractAddressIfExists(), - maker: parsedOrder.signedOrder.maker, - taker: parsedOrder.signedOrder.taker, - makerTokenAddress: parsedOrder.signedOrder.makerTokenAddress, - takerTokenAddress: parsedOrder.signedOrder.takerTokenAddress, - makerTokenAmount: new BigNumber(parsedOrder.signedOrder.makerTokenAmount), - takerTokenAmount: new BigNumber(parsedOrder.signedOrder.takerTokenAmount), - makerFee: new BigNumber(parsedOrder.signedOrder.makerFee), - takerFee: new BigNumber(parsedOrder.signedOrder.takerFee), - expirationUnixTimestampSec: new BigNumber(this.state.parsedOrder.signedOrder.expirationUnixTimestampSec), - feeRecipient: parsedOrder.signedOrder.feeRecipient, - ecSignature: parsedOrder.signedOrder.ecSignature, - salt: new BigNumber(parsedOrder.signedOrder.salt), - }; + const signedOrder = this.props.blockchain.portalOrderToZeroExOrder(parsedOrder); const orderHash = ZeroEx.getOrderHashHex(signedOrder); const unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); const availableTakerTokenAmount = takerTokenAmount.minus(unavailableTakerAmount); -- cgit v1.2.3