Miscellaneous fixes to RFQ origin registration (#48)

* Contracts can no longer call registerAllowedRfqOrigins()
* registerAllowedRfqOrigins() is now plural, registers an array of
addresses
This commit is contained in:
Steve Marx
2020-11-25 14:08:15 -05:00
committed by GitHub
parent 7591e99316
commit ad337271d3
8 changed files with 83 additions and 24 deletions

View File

@@ -8,7 +8,7 @@ import { IZeroExContract, IZeroExEvents } from '../../src/wrappers';
import { artifacts } from '../artifacts';
import { fullMigrateAsync } from '../utils/migration';
import { getRandomLimitOrder, getRandomRfqOrder } from '../utils/orders';
import { TestMintableERC20TokenContract } from '../wrappers';
import { TestMintableERC20TokenContract, TestRfqOriginRegistrationContract } from '../wrappers';
blockchainTests.resets('NativeOrdersFeature', env => {
const { NULL_ADDRESS, MAX_UINT256, ZERO_AMOUNT } = constants;
@@ -24,6 +24,7 @@ blockchainTests.resets('NativeOrdersFeature', env => {
let makerToken: TestMintableERC20TokenContract;
let takerToken: TestMintableERC20TokenContract;
let wethToken: TestMintableERC20TokenContract;
let testRfqOriginRegistration: TestRfqOriginRegistrationContract;
before(async () => {
let owner;
@@ -57,6 +58,12 @@ blockchainTests.resets('NativeOrdersFeature', env => {
takerToken.approve(zeroEx.address, MAX_UINT256).awaitTransactionSuccessAsync({ from: a }),
),
);
testRfqOriginRegistration = await TestRfqOriginRegistrationContract.deployFrom0xArtifactAsync(
artifacts.TestRfqOriginRegistration,
env.provider,
env.txDefaults,
artifacts,
);
});
function getTestLimitOrder(fields: Partial<LimitOrderFields> = {}): LimitOrder {
@@ -1048,6 +1055,15 @@ blockchainTests.resets('NativeOrdersFeature', env => {
expect(takerBalance).to.bignumber.eq(makerTokenFilledAmount);
}
describe('registerAllowedRfqOrigins()', () => {
it('cannot register through a contract', async () => {
const tx = testRfqOriginRegistration
.registerAllowedRfqOrigins(zeroEx.address, [], true)
.awaitTransactionSuccessAsync();
expect(tx).to.revertWith('NativeOrdersFeature/NO_CONTRACT_ORIGINS');
});
});
describe('fillRfqOrder()', () => {
it('can fully fill an order', async () => {
const order = getTestRfqOrder();
@@ -1155,18 +1171,18 @@ blockchainTests.resets('NativeOrdersFeature', env => {
const order = getTestRfqOrder();
const receipt = await zeroEx
.registerAllowedRfqOrigin(notTaker, true)
.registerAllowedRfqOrigins([notTaker], true)
.awaitTransactionSuccessAsync({ from: taker });
verifyEventsFromLogs(
receipt.logs,
[
{
origin: taker,
addr: notTaker,
addrs: [notTaker],
allowed: true,
},
],
IZeroExEvents.RfqOrderOriginAllowed,
IZeroExEvents.RfqOrderOriginsAllowed,
);
return fillRfqOrderAsync(order, order.takerAmount, notTaker);
});
@@ -1174,20 +1190,20 @@ blockchainTests.resets('NativeOrdersFeature', env => {
it('cannot fill an order with registered then unregistered tx.origin', async () => {
const order = getTestRfqOrder();
await zeroEx.registerAllowedRfqOrigin(notTaker, true).awaitTransactionSuccessAsync({ from: taker });
await zeroEx.registerAllowedRfqOrigins([notTaker], true).awaitTransactionSuccessAsync({ from: taker });
const receipt = await zeroEx
.registerAllowedRfqOrigin(notTaker, false)
.registerAllowedRfqOrigins([notTaker], false)
.awaitTransactionSuccessAsync({ from: taker });
verifyEventsFromLogs(
receipt.logs,
[
{
origin: taker,
addr: notTaker,
addrs: [notTaker],
allowed: false,
},
],
IZeroExEvents.RfqOrderOriginAllowed,
IZeroExEvents.RfqOrderOriginsAllowed,
);
const tx = fillRfqOrderAsync(order, order.takerAmount, notTaker);