diff options
| author | Brandon Millman <brandon.millman@gmail.com> | 2018-11-02 09:01:06 +0800 | 
|---|---|---|
| committer | Brandon Millman <brandon.millman@gmail.com> | 2018-11-03 00:59:17 +0800 | 
| commit | 4fda2a2d049843db7f87b930321c11c910e40ea3 (patch) | |
| tree | b0a6d9b2046fe485aff438fb07a39371e893c48b /packages | |
| parent | e7e9c2a2ebf32ed96e859c9c50a5c9614e372bc7 (diff) | |
| download | dexon-sol-tools-4fda2a2d049843db7f87b930321c11c910e40ea3.tar.gz dexon-sol-tools-4fda2a2d049843db7f87b930321c11c910e40ea3.tar.zst dexon-sol-tools-4fda2a2d049843db7f87b930321c11c910e40ea3.zip | |
fix(asset-buyer): fix default values being overriden and incorrect fee rounding
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/asset-buyer/CHANGELOG.json | 10 | ||||
| -rw-r--r-- | packages/asset-buyer/src/asset_buyer.ts | 33 | ||||
| -rw-r--r-- | packages/asset-buyer/src/utils/buy_quote_calculator.ts | 2 | 
3 files changed, 32 insertions, 13 deletions
| diff --git a/packages/asset-buyer/CHANGELOG.json b/packages/asset-buyer/CHANGELOG.json index 6ba2a0fd9..0d71bb84d 100644 --- a/packages/asset-buyer/CHANGELOG.json +++ b/packages/asset-buyer/CHANGELOG.json @@ -14,6 +14,16 @@              {                  "note": "No longer require that provided orders all have the same maker and taker asset data",                  "pr": 1197 +            }, +            { +                "note": +                    "Fix bug where `BuyQuoteInfo` objects could return `totalEthAmount` and `feeEthAmount` that were not whole numbers", +                "pr": 1207 +            }, +            { +                "note": +                    "Fix bug where default values for `AssetBuyer` public facing methods could get overriden by `undefined` values", +                "pr": 1207              }          ]      }, diff --git a/packages/asset-buyer/src/asset_buyer.ts b/packages/asset-buyer/src/asset_buyer.ts index 49743404f..934410c55 100644 --- a/packages/asset-buyer/src/asset_buyer.ts +++ b/packages/asset-buyer/src/asset_buyer.ts @@ -90,10 +90,11 @@ export class AssetBuyer {       * @return  An instance of AssetBuyer       */      constructor(provider: Provider, orderProvider: OrderProvider, options: Partial<AssetBuyerOpts> = {}) { -        const { networkId, orderRefreshIntervalMs, expiryBufferSeconds } = { -            ...constants.DEFAULT_ASSET_BUYER_OPTS, -            ...options, -        }; +        const { networkId, orderRefreshIntervalMs, expiryBufferSeconds } = _.merge( +            {}, +            constants.DEFAULT_ASSET_BUYER_OPTS, +            options, +        );          assert.isWeb3Provider('provider', provider);          assert.isValidOrderProvider('orderProvider', orderProvider);          assert.isNumber('networkId', networkId); @@ -122,10 +123,11 @@ export class AssetBuyer {          assetBuyAmount: BigNumber,          options: Partial<BuyQuoteRequestOpts> = {},      ): Promise<BuyQuote> { -        const { feePercentage, shouldForceOrderRefresh, slippagePercentage } = { -            ...constants.DEFAULT_BUY_QUOTE_REQUEST_OPTS, -            ...options, -        }; +        const { feePercentage, shouldForceOrderRefresh, slippagePercentage } = _.merge( +            {}, +            constants.DEFAULT_BUY_QUOTE_REQUEST_OPTS, +            options, +        );          assert.isString('assetData', assetData);          assert.isBigNumber('assetBuyAmount', assetBuyAmount);          assert.isValidPercentage('feePercentage', feePercentage); @@ -186,10 +188,11 @@ export class AssetBuyer {          buyQuote: BuyQuote,          options: Partial<BuyQuoteExecutionOpts> = {},      ): Promise<string> { -        const { ethAmount, takerAddress, feeRecipient, gasLimit, gasPrice } = { -            ...constants.DEFAULT_BUY_QUOTE_EXECUTION_OPTS, -            ...options, -        }; +        const { ethAmount, takerAddress, feeRecipient, gasLimit, gasPrice } = _.merge( +            {}, +            constants.DEFAULT_BUY_QUOTE_EXECUTION_OPTS, +            options, +        );          assert.isValidBuyQuote('buyQuote', buyQuote);          if (!_.isUndefined(ethAmount)) {              assert.isBigNumber('ethAmount', ethAmount); @@ -198,6 +201,12 @@ export class AssetBuyer {              assert.isETHAddressHex('takerAddress', takerAddress);          }          assert.isETHAddressHex('feeRecipient', feeRecipient); +        if (!_.isUndefined(gasLimit)) { +            assert.isNumber('gasLimit', gasLimit); +        } +        if (!_.isUndefined(gasPrice)) { +            assert.isBigNumber('gasPrice', gasPrice); +        }          const { orders, feeOrders, feePercentage, assetBuyAmount, worstCaseQuoteInfo } = buyQuote;          // if no takerAddress is provided, try to get one from the provider          let finalTakerAddress; diff --git a/packages/asset-buyer/src/utils/buy_quote_calculator.ts b/packages/asset-buyer/src/utils/buy_quote_calculator.ts index f94ab3fa4..6a67ed1ed 100644 --- a/packages/asset-buyer/src/utils/buy_quote_calculator.ts +++ b/packages/asset-buyer/src/utils/buy_quote_calculator.ts @@ -119,7 +119,7 @@ function calculateQuoteInfo(          ethAmountToBuyZrx = findEthAmountNeededToBuyZrx(feeOrdersAndFillableAmounts, zrxAmountToBuyAsset);      }      /// find the eth amount needed to buy the affiliate fee -    const ethAmountToBuyAffiliateFee = ethAmountToBuyAsset.mul(feePercentage); +    const ethAmountToBuyAffiliateFee = ethAmountToBuyAsset.mul(feePercentage).ceil();      const totalEthAmountWithoutAffiliateFee = ethAmountToBuyAsset.plus(ethAmountToBuyZrx);      const ethAmountTotal = totalEthAmountWithoutAffiliateFee.plus(ethAmountToBuyAffiliateFee);      // divide into the assetBuyAmount in order to find rate of makerAsset / WETH | 
