Implement blockchain.portalOrderToZeroExOrder

This commit is contained in:
Leonid Logvinov
2018-02-08 18:28:54 +01:00
parent ec198343b5
commit 43cf8d30bd
2 changed files with 22 additions and 30 deletions

View File

@@ -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<BigNumber> {
utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses);

View File

@@ -518,21 +518,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> {
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<FillOrderProps, FillOrderState> {
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);