Fix tests
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
"Yarn workspaces do not link binaries correctly so we need to reference them directly https://github.com/yarnpkg/yarn/issues/3846",
|
||||
"compile":
|
||||
"node ../deployer/lib/src/cli.js compile --contracts ${npm_package_config_contracts} --contracts-dir src/contracts --artifacts-dir ../migrations/src/artifacts",
|
||||
"clean": "shx rm -rf ./lib",
|
||||
"clean": "shx rm -rf ./lib ./src/contract_wrappers/generated",
|
||||
"generate_contract_wrappers":
|
||||
"node ../abi-gen/lib/index.js --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
||||
"lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
|
||||
@@ -30,9 +30,9 @@
|
||||
},
|
||||
"config": {
|
||||
"abis":
|
||||
"../migrations/src/artifacts/@(DummyERC20Token|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|AssetProxyDispatcher|ERC20Proxy|ERC721Proxy|DummyERC721Token|LibBytes).json",
|
||||
"../migrations/src/artifacts/@(DummyERC20Token|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|TestAssetProxyDispatcher|ERC20Proxy|ERC721Proxy|DummyERC721Token|LibBytes|Authorizable).json",
|
||||
"contracts":
|
||||
"Exchange,DummyERC20Token,ZRXToken,WETH9,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,TokenRegistry,AssetProxyDispatcher,ERC20Proxy,ERC721Proxy,DummyERC721Token,LibBytes"
|
||||
"Exchange,DummyERC20Token,ZRXToken,WETH9,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,TokenRegistry,TestAssetProxyDispatcher,ERC20Proxy,ERC721Proxy,DummyERC721Token,LibBytes,Authorizable"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
|
||||
Copyright 2018 ZeroEx Intl.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity ^0.4.21;
|
||||
|
||||
import "../../protocol/Exchange/MixinAssetProxyDispatcher.sol";
|
||||
|
||||
contract TestAssetProxyDispatcher is MixinAssetProxyDispatcher {
|
||||
function publicDispatchTransferFrom(
|
||||
bytes memory assetMetadata,
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount)
|
||||
public
|
||||
{
|
||||
dispatchTransferFrom(assetMetadata, from, to, amount);
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import { constants } from './constants';
|
||||
import { formatters } from './formatters';
|
||||
import { LogDecoder } from './log_decoder';
|
||||
import { orderUtils } from './order_utils';
|
||||
import { SignedOrder } from './types';
|
||||
import { AssetProxyId, SignedOrder } from './types';
|
||||
|
||||
export class ExchangeWrapper {
|
||||
private _exchange: ExchangeContract;
|
||||
@@ -189,7 +189,24 @@ export class ExchangeWrapper {
|
||||
const tx = await this._getTxWithDecodedExchangeLogsAsync(txHash);
|
||||
return tx;
|
||||
}
|
||||
|
||||
public async registerAssetProxyAsync(
|
||||
assetProxyId: AssetProxyId,
|
||||
assetProxyAddress: string,
|
||||
from: string,
|
||||
opts: { oldAssetProxyAddressIfExists?: string } = {},
|
||||
): Promise<TransactionReceiptWithDecodedLogs> {
|
||||
const oldAssetProxyAddress = _.isUndefined(opts.oldAssetProxyAddressIfExists)
|
||||
? ZeroEx.NULL_ADDRESS
|
||||
: opts.oldAssetProxyAddressIfExists;
|
||||
const txHash = await this._exchange.registerAssetProxy.sendTransactionAsync(
|
||||
assetProxyId,
|
||||
assetProxyAddress,
|
||||
oldAssetProxyAddress,
|
||||
{ from },
|
||||
);
|
||||
const tx = await this._getTxWithDecodedExchangeLogsAsync(txHash);
|
||||
return tx;
|
||||
}
|
||||
public async getOrderHashAsync(signedOrder: SignedOrder): Promise<string> {
|
||||
const order = orderUtils.getOrderStruct(signedOrder);
|
||||
const orderHash = await this._exchange.getOrderHash.callAsync(order);
|
||||
|
||||
@@ -93,11 +93,12 @@ export enum ContractName {
|
||||
AccountLevels = 'AccountLevels',
|
||||
EtherDelta = 'EtherDelta',
|
||||
Arbitrage = 'Arbitrage',
|
||||
AssetProxyDispatcher = 'AssetProxyDispatcher',
|
||||
TestAssetProxyDispatcher = 'TestAssetProxyDispatcher',
|
||||
ERC20Proxy = 'ERC20Proxy',
|
||||
ERC721Proxy = 'ERC721Proxy',
|
||||
DummyERC721Token = 'DummyERC721Token',
|
||||
LibBytes = 'LibBytes',
|
||||
Authorizable = 'Authorizable',
|
||||
}
|
||||
|
||||
export interface Artifact {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||
import * as chai from 'chai';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher';
|
||||
import { AuthorizableContract } from '../../src/contract_wrappers/generated/authorizable';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ContractName } from '../../src/utils/types';
|
||||
import { chaiSetup } from '../utils/chai_setup';
|
||||
@@ -14,21 +14,17 @@ chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||
|
||||
describe('AssetProxyDispatcher (Authorization Methods)', () => {
|
||||
describe('Authorizable', () => {
|
||||
let owner: string;
|
||||
let notOwner: string;
|
||||
let address: string;
|
||||
let assetProxyDispatcher: AssetProxyDispatcherContract;
|
||||
let authorizable: AuthorizableContract;
|
||||
before(async () => {
|
||||
const accounts = await web3Wrapper.getAvailableAddressesAsync();
|
||||
owner = address = accounts[0];
|
||||
notOwner = accounts[1];
|
||||
const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher);
|
||||
assetProxyDispatcher = new AssetProxyDispatcherContract(
|
||||
assetProxyDispatcherInstance.abi,
|
||||
assetProxyDispatcherInstance.address,
|
||||
provider,
|
||||
);
|
||||
const authorizableInstance = await deployer.deployAsync(ContractName.Authorizable);
|
||||
authorizable = new AuthorizableContract(authorizableInstance.abi, authorizableInstance.address, provider);
|
||||
});
|
||||
beforeEach(async () => {
|
||||
await blockchainLifecycle.startAsync();
|
||||
@@ -39,44 +35,44 @@ describe('AssetProxyDispatcher (Authorization Methods)', () => {
|
||||
describe('addAuthorizedAddress', () => {
|
||||
it('should throw if not called by owner', async () => {
|
||||
return expect(
|
||||
assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }),
|
||||
authorizable.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
it('should allow owner to add an authorized address', async () => {
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
const isAuthorized = await assetProxyDispatcher.authorized.callAsync(address);
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
const isAuthorized = await authorizable.authorized.callAsync(address);
|
||||
expect(isAuthorized).to.be.true();
|
||||
});
|
||||
it('should throw if owner attempts to authorize a duplicate address', async () => {
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
return expect(
|
||||
assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
|
||||
authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
});
|
||||
|
||||
describe('removeAuthorizedAddress', () => {
|
||||
it('should throw if not called by owner', async () => {
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
return expect(
|
||||
assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
authorizable.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: notOwner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
|
||||
it('should allow owner to remove an authorized address', async () => {
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
|
||||
await authorizable.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: owner,
|
||||
});
|
||||
const isAuthorized = await assetProxyDispatcher.authorized.callAsync(address);
|
||||
const isAuthorized = await authorizable.authorized.callAsync(address);
|
||||
expect(isAuthorized).to.be.false();
|
||||
});
|
||||
|
||||
it('should throw if owner attempts to remove an address that is not authorized', async () => {
|
||||
return expect(
|
||||
assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
authorizable.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: owner,
|
||||
}),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
@@ -85,19 +81,19 @@ describe('AssetProxyDispatcher (Authorization Methods)', () => {
|
||||
|
||||
describe('getAuthorizedAddresses', () => {
|
||||
it('should return all authorized addresses', async () => {
|
||||
const initial = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
|
||||
const initial = await authorizable.getAuthorizedAddresses.callAsync();
|
||||
expect(initial).to.have.length(0);
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, {
|
||||
await authorizable.addAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: owner,
|
||||
});
|
||||
const afterAdd = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
|
||||
const afterAdd = await authorizable.getAuthorizedAddresses.callAsync();
|
||||
expect(afterAdd).to.have.length(1);
|
||||
expect(afterAdd).to.include(address);
|
||||
|
||||
await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
await authorizable.removeAuthorizedAddress.sendTransactionAsync(address, {
|
||||
from: owner,
|
||||
});
|
||||
const afterRemove = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
|
||||
const afterRemove = await authorizable.getAuthorizedAddresses.callAsync();
|
||||
expect(afterRemove).to.have.length(0);
|
||||
});
|
||||
});
|
||||
@@ -4,7 +4,6 @@ import { BigNumber } from '@0xproject/utils';
|
||||
import * as chai from 'chai';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher';
|
||||
import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token';
|
||||
import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token';
|
||||
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
|
||||
@@ -25,7 +24,7 @@ const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||
describe('Asset Transfer Proxies', () => {
|
||||
let owner: string;
|
||||
let notAuthorized: string;
|
||||
let assetProxyDispatcherAddress: string;
|
||||
let exchangeAddress: string;
|
||||
let makerAddress: string;
|
||||
let takerAddress: string;
|
||||
|
||||
@@ -40,13 +39,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
|
||||
before(async () => {
|
||||
const accounts = await web3Wrapper.getAvailableAddressesAsync();
|
||||
const usedAddresses = ([
|
||||
owner,
|
||||
notAuthorized,
|
||||
assetProxyDispatcherAddress,
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
] = accounts);
|
||||
const usedAddresses = ([owner, notAuthorized, exchangeAddress, makerAddress, takerAddress] = accounts);
|
||||
|
||||
erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner);
|
||||
erc721Wrapper = new ERC721Wrapper(deployer, provider, usedAddresses, owner);
|
||||
@@ -54,7 +47,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
[zrx] = await erc20Wrapper.deployDummyERC20TokensAsync();
|
||||
erc20Proxy = await erc20Wrapper.deployERC20ProxyAsync();
|
||||
await erc20Wrapper.setBalancesAndAllowancesAsync();
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcherAddress, {
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, {
|
||||
from: owner,
|
||||
});
|
||||
|
||||
@@ -63,7 +56,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
await erc721Wrapper.setBalancesAndAllowancesAsync();
|
||||
const erc721Balances = await erc721Wrapper.getBalancesAsync();
|
||||
erc721MakerTokenId = erc721Balances[makerAddress][erc721Token.address][0];
|
||||
await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcherAddress, {
|
||||
await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, {
|
||||
from: owner,
|
||||
});
|
||||
});
|
||||
@@ -85,7 +78,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: assetProxyDispatcherAddress },
|
||||
{ from: exchangeAddress },
|
||||
);
|
||||
// Verify transfer was successful
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -108,7 +101,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: assetProxyDispatcherAddress },
|
||||
{ from: exchangeAddress },
|
||||
);
|
||||
// Verify transfer was successful
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -169,7 +162,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: assetProxyDispatcherAddress },
|
||||
{ from: exchangeAddress },
|
||||
);
|
||||
// Verify transfer was successful
|
||||
const newOwnerMakerAsset = await erc721Token.ownerOf.callAsync(erc721MakerTokenId);
|
||||
@@ -191,7 +184,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: assetProxyDispatcherAddress },
|
||||
{ from: exchangeAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
@@ -211,7 +204,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: assetProxyDispatcherAddress },
|
||||
{ from: exchangeAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
@@ -5,7 +5,6 @@ import * as chai from 'chai';
|
||||
import ethUtil = require('ethereumjs-util');
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher';
|
||||
import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token';
|
||||
import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token';
|
||||
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
|
||||
@@ -51,7 +50,6 @@ describe('Exchange core', () => {
|
||||
let zrx: DummyERC20TokenContract;
|
||||
let erc721Token: DummyERC721TokenContract;
|
||||
let exchange: ExchangeContract;
|
||||
let assetProxyDispatcher: AssetProxyDispatcherContract;
|
||||
let erc20Proxy: ERC20ProxyContract;
|
||||
let erc721Proxy: ERC721ProxyContract;
|
||||
|
||||
@@ -88,44 +86,24 @@ describe('Exchange core', () => {
|
||||
erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address];
|
||||
erc721TakerAssetIds = erc721Balances[takerAddress][erc721Token.address];
|
||||
|
||||
const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher);
|
||||
assetProxyDispatcher = new AssetProxyDispatcherContract(
|
||||
assetProxyDispatcherInstance.abi,
|
||||
assetProxyDispatcherInstance.address,
|
||||
provider,
|
||||
);
|
||||
const prevERC20ProxyAddress = ZeroEx.NULL_ADDRESS;
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC20,
|
||||
erc20Proxy.address,
|
||||
prevERC20ProxyAddress,
|
||||
{ from: owner },
|
||||
);
|
||||
const prevERC721ProxyAddress = ZeroEx.NULL_ADDRESS;
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC721,
|
||||
erc721Proxy.address,
|
||||
prevERC721ProxyAddress,
|
||||
{ from: owner },
|
||||
);
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, {
|
||||
from: owner,
|
||||
});
|
||||
await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, {
|
||||
from: owner,
|
||||
});
|
||||
|
||||
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
||||
assetProxyDispatcher.address,
|
||||
assetProxyUtils.encodeERC20ProxyData(zrx.address),
|
||||
]);
|
||||
exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
|
||||
zeroEx = new ZeroEx(provider, {
|
||||
exchangeContractAddress: exchange.address,
|
||||
networkId: constants.TESTRPC_NETWORK_ID,
|
||||
});
|
||||
exchangeWrapper = new ExchangeWrapper(exchange, zeroEx);
|
||||
await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC20, erc20Proxy.address, owner);
|
||||
await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC721, erc721Proxy.address, owner);
|
||||
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, {
|
||||
from: owner,
|
||||
});
|
||||
await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, {
|
||||
from: owner,
|
||||
});
|
||||
|
||||
defaultMakerAssetAddress = erc20TokenA.address;
|
||||
defaultTakerAssetAddress = erc20TokenB.address;
|
||||
@@ -467,35 +445,6 @@ describe('Exchange core', () => {
|
||||
expect(orderUtils.getOrderHashHex(signedOrder)).to.be.equal(logArgs.orderHash);
|
||||
});
|
||||
|
||||
it('should log 1 event with the correct arguments when order has no feeRecipient', async () => {
|
||||
signedOrder = orderFactory.newSignedOrder({
|
||||
feeRecipientAddress: ZeroEx.NULL_ADDRESS,
|
||||
});
|
||||
const divisor = 2;
|
||||
const res = await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount: signedOrder.takerAssetAmount.div(divisor),
|
||||
});
|
||||
expect(res.logs).to.have.length(1);
|
||||
|
||||
const log = res.logs[0] as LogWithDecodedArgs<FillContractEventArgs>;
|
||||
const logArgs = log.args;
|
||||
const expectedFilledMakerAssetAmount = signedOrder.makerAssetAmount.div(divisor);
|
||||
const expectedFilledTakerAssetAmount = signedOrder.takerAssetAmount.div(divisor);
|
||||
const expectedFeeMPaid = new BigNumber(0);
|
||||
const expectedFeeTPaid = new BigNumber(0);
|
||||
|
||||
expect(signedOrder.makerAddress).to.be.equal(logArgs.makerAddress);
|
||||
expect(takerAddress).to.be.equal(logArgs.takerAddress);
|
||||
expect(signedOrder.feeRecipientAddress).to.be.equal(logArgs.feeRecipientAddress);
|
||||
expect(signedOrder.makerAssetData).to.be.equal(logArgs.makerAssetData);
|
||||
expect(signedOrder.takerAssetData).to.be.equal(logArgs.takerAssetData);
|
||||
expect(expectedFilledMakerAssetAmount).to.be.bignumber.equal(logArgs.makerAssetFilledAmount);
|
||||
expect(expectedFilledTakerAssetAmount).to.be.bignumber.equal(logArgs.takerAssetFilledAmount);
|
||||
expect(expectedFeeMPaid).to.be.bignumber.equal(logArgs.makerFeePaid);
|
||||
expect(expectedFeeTPaid).to.be.bignumber.equal(logArgs.takerFeePaid);
|
||||
expect(orderUtils.getOrderHashHex(signedOrder)).to.be.equal(logArgs.orderHash);
|
||||
});
|
||||
|
||||
it('should throw when taker is specified and order is claimed by other', async () => {
|
||||
signedOrder = orderFactory.newSignedOrder({
|
||||
takerAddress: feeRecipientAddress,
|
||||
|
||||
@@ -4,10 +4,10 @@ import { BigNumber } from '@0xproject/utils';
|
||||
import * as chai from 'chai';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher';
|
||||
import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token';
|
||||
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
|
||||
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
|
||||
import { TestAssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/test_asset_proxy_dispatcher';
|
||||
import { assetProxyUtils } from '../../src/utils/asset_proxy_utils';
|
||||
import { constants } from '../../src/utils/constants';
|
||||
import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
|
||||
@@ -25,14 +25,13 @@ describe('AssetProxyDispatcher', () => {
|
||||
let owner: string;
|
||||
let notOwner: string;
|
||||
let notAuthorized: string;
|
||||
let exchangeAddress: string;
|
||||
let makerAddress: string;
|
||||
let takerAddress: string;
|
||||
|
||||
let zrx: DummyERC20TokenContract;
|
||||
let erc20Proxy: ERC20ProxyContract;
|
||||
let erc721Proxy: ERC721ProxyContract;
|
||||
let assetProxyDispatcher: AssetProxyDispatcherContract;
|
||||
let assetProxyDispatcher: TestAssetProxyDispatcherContract;
|
||||
|
||||
let erc20Wrapper: ERC20Wrapper;
|
||||
let erc721Wrapper: ERC721Wrapper;
|
||||
@@ -40,7 +39,7 @@ describe('AssetProxyDispatcher', () => {
|
||||
before(async () => {
|
||||
// Setup accounts & addresses
|
||||
const accounts = await web3Wrapper.getAvailableAddressesAsync();
|
||||
const usedAddresses = ([owner, notOwner, exchangeAddress, makerAddress, takerAddress] = accounts);
|
||||
const usedAddresses = ([owner, notOwner, makerAddress, takerAddress] = accounts);
|
||||
notAuthorized = notOwner;
|
||||
|
||||
erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner);
|
||||
@@ -52,15 +51,12 @@ describe('AssetProxyDispatcher', () => {
|
||||
|
||||
erc721Proxy = await erc721Wrapper.deployERC721ProxyAsync();
|
||||
|
||||
const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher);
|
||||
assetProxyDispatcher = new AssetProxyDispatcherContract(
|
||||
const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.TestAssetProxyDispatcher);
|
||||
assetProxyDispatcher = new TestAssetProxyDispatcherContract(
|
||||
assetProxyDispatcherInstance.abi,
|
||||
assetProxyDispatcherInstance.address,
|
||||
provider,
|
||||
);
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, {
|
||||
from: owner,
|
||||
});
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, {
|
||||
from: owner,
|
||||
});
|
||||
@@ -219,7 +215,7 @@ describe('AssetProxyDispatcher', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('transferFrom', () => {
|
||||
describe('dispatchTransferFrom', () => {
|
||||
it('should dispatch transfer to registered proxy', async () => {
|
||||
// Register ERC20 proxy
|
||||
const prevProxyAddress = ZeroEx.NULL_ADDRESS;
|
||||
@@ -234,12 +230,12 @@ describe('AssetProxyDispatcher', () => {
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const erc20Balances = await erc20Wrapper.getBalancesAsync();
|
||||
const amount = new BigNumber(10);
|
||||
await assetProxyDispatcher.transferFrom.sendTransactionAsync(
|
||||
await assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: exchangeAddress },
|
||||
{ from: owner },
|
||||
);
|
||||
// Verify transfer was successful
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
@@ -258,37 +254,12 @@ describe('AssetProxyDispatcher', () => {
|
||||
const erc20Balances = await erc20Wrapper.getBalancesAsync();
|
||||
const amount = new BigNumber(10);
|
||||
return expect(
|
||||
assetProxyDispatcher.transferFrom.sendTransactionAsync(
|
||||
assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: exchangeAddress },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
|
||||
it('should throw on transfer if requesting address is not authorized', async () => {
|
||||
// Register ERC20 proxy
|
||||
const prevProxyAddress = ZeroEx.NULL_ADDRESS;
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC20,
|
||||
erc20Proxy.address,
|
||||
prevProxyAddress,
|
||||
{ from: owner },
|
||||
);
|
||||
// Construct metadata for ERC20 proxy
|
||||
const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
|
||||
// Perform a transfer from makerAddress to takerAddress
|
||||
const erc20Balances = await erc20Wrapper.getBalancesAsync();
|
||||
const amount = new BigNumber(10);
|
||||
return expect(
|
||||
assetProxyDispatcher.transferFrom.sendTransactionAsync(
|
||||
encodedProxyMetadata,
|
||||
makerAddress,
|
||||
takerAddress,
|
||||
amount,
|
||||
{ from: notAuthorized },
|
||||
{ from: owner },
|
||||
),
|
||||
).to.be.rejectedWith(constants.REVERT);
|
||||
});
|
||||
@@ -29,10 +29,7 @@ describe('Exchange helpers', () => {
|
||||
before(async () => {
|
||||
const accounts = await web3Wrapper.getAvailableAddressesAsync();
|
||||
const makerAddress = accounts[0];
|
||||
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
||||
ZeroEx.NULL_ADDRESS,
|
||||
AssetProxyId.ERC20,
|
||||
]);
|
||||
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [AssetProxyId.ERC20]);
|
||||
const exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
|
||||
const zeroEx = new ZeroEx(provider, { networkId: constants.TESTRPC_NETWORK_ID });
|
||||
exchangeWrapper = new ExchangeWrapper(exchange, zeroEx);
|
||||
|
||||
@@ -6,7 +6,6 @@ import * as chai from 'chai';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher';
|
||||
import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token';
|
||||
import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token';
|
||||
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
|
||||
@@ -45,7 +44,6 @@ describe('Exchange wrappers', () => {
|
||||
let zrx: DummyERC20TokenContract;
|
||||
let erc721Token: DummyERC721TokenContract;
|
||||
let exchange: ExchangeContract;
|
||||
let assetProxyDispatcher: AssetProxyDispatcherContract;
|
||||
let erc20Proxy: ERC20ProxyContract;
|
||||
let erc721Proxy: ERC721ProxyContract;
|
||||
|
||||
@@ -81,44 +79,24 @@ describe('Exchange wrappers', () => {
|
||||
erc721MakerAssetId = erc721Balances[makerAddress][erc721Token.address][0];
|
||||
erc721TakerAssetId = erc721Balances[takerAddress][erc721Token.address][0];
|
||||
|
||||
const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher);
|
||||
assetProxyDispatcher = new AssetProxyDispatcherContract(
|
||||
assetProxyDispatcherInstance.abi,
|
||||
assetProxyDispatcherInstance.address,
|
||||
provider,
|
||||
);
|
||||
const prevERC20ProxyAddress = ZeroEx.NULL_ADDRESS;
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC20,
|
||||
erc20Proxy.address,
|
||||
prevERC20ProxyAddress,
|
||||
{ from: owner },
|
||||
);
|
||||
const prevERC721ProxyAddress = ZeroEx.NULL_ADDRESS;
|
||||
await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync(
|
||||
AssetProxyId.ERC721,
|
||||
erc721Proxy.address,
|
||||
prevERC721ProxyAddress,
|
||||
{ from: owner },
|
||||
);
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, {
|
||||
from: owner,
|
||||
});
|
||||
await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, {
|
||||
from: owner,
|
||||
});
|
||||
|
||||
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
||||
assetProxyDispatcher.address,
|
||||
assetProxyUtils.encodeERC20ProxyData(zrx.address),
|
||||
]);
|
||||
exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
|
||||
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
|
||||
zeroEx = new ZeroEx(provider, {
|
||||
exchangeContractAddress: exchange.address,
|
||||
networkId: constants.TESTRPC_NETWORK_ID,
|
||||
});
|
||||
exchangeWrapper = new ExchangeWrapper(exchange, zeroEx);
|
||||
await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC20, erc20Proxy.address, owner);
|
||||
await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC721, erc721Proxy.address, owner);
|
||||
|
||||
await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, {
|
||||
from: owner,
|
||||
});
|
||||
await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, {
|
||||
from: owner,
|
||||
});
|
||||
|
||||
defaultMakerAssetAddress = erc20TokenA.address;
|
||||
defaultTakerAssetAddress = erc20TokenB.address;
|
||||
|
||||
Reference in New Issue
Block a user