diff --git a/contracts/zero-ex/CHANGELOG.json b/contracts/zero-ex/CHANGELOG.json index db20cf6126..0741408a5e 100644 --- a/contracts/zero-ex/CHANGELOG.json +++ b/contracts/zero-ex/CHANGELOG.json @@ -41,6 +41,10 @@ { "note": "Remove protocol fees from all RFQ orders and add `taker` field to RFQ orders", "pr": 45 + }, + { + "note": "Fix getRfqOrderInfo() to return status INVALID when missing txOrigin", + "pr": 50 } ] }, diff --git a/contracts/zero-ex/contracts/src/features/NativeOrdersFeature.sol b/contracts/zero-ex/contracts/src/features/NativeOrdersFeature.sol index c48c40bfdc..d089e41c48 100644 --- a/contracts/zero-ex/contracts/src/features/NativeOrdersFeature.sol +++ b/contracts/zero-ex/contracts/src/features/NativeOrdersFeature.sol @@ -651,6 +651,11 @@ contract NativeOrdersFeature is order.salt, minValidSalt ); + + // Check for missing txOrigin. + if (order.txOrigin == address(0)) { + orderInfo.status = LibNativeOrder.OrderStatus.INVALID; + } } /// @dev Get the canonical hash of a limit order. diff --git a/contracts/zero-ex/test/features/native_orders_feature_test.ts b/contracts/zero-ex/test/features/native_orders_feature_test.ts index 20cf623012..c170ac8a8c 100644 --- a/contracts/zero-ex/test/features/native_orders_feature_test.ts +++ b/contracts/zero-ex/test/features/native_orders_feature_test.ts @@ -365,6 +365,16 @@ blockchainTests.resets('NativeOrdersFeature', env => { takerTokenFilledAmount: fillAmount, }); }); + + it('invalid origin', async () => { + const order = getTestRfqOrder({ txOrigin: NULL_ADDRESS }); + const info = await zeroEx.getRfqOrderInfo(order).callAsync(); + assertOrderInfoEquals(info, { + status: OrderStatus.Invalid, + orderHash: order.getHash(), + takerTokenFilledAmount: ZERO_AMOUNT, + }); + }); }); describe('cancelLimitOrder()', async () => { @@ -1216,7 +1226,7 @@ blockchainTests.resets('NativeOrdersFeature', env => { const order = getTestRfqOrder({ txOrigin: NULL_ADDRESS }); const tx = fillRfqOrderAsync(order, order.takerAmount, notTaker); return expect(tx).to.revertWith( - new RevertErrors.OrderNotFillableByOriginError(order.getHash(), notTaker, order.txOrigin), + new RevertErrors.OrderNotFillableError(order.getHash(), OrderStatus.Invalid), ); });