Deprecate abi-gen-wrappers (#2370)
* generate wrappers in @0x/contract-wrappers and delete abi-gen-wrappers * trim exports from contract-wrappers * separate contract-wrappers tests to get rid of dependency cycle * remove dummy token contracts * temporarily skip coordinator test until we can upgrade coordinator server
This commit is contained in:
137
packages/contract-wrappers-test/test/calldata_decoder_test.ts
Normal file
137
packages/contract-wrappers-test/test/calldata_decoder_test.ts
Normal file
@@ -0,0 +1,137 @@
|
||||
import { constants, OrderFactory } from '@0x/contracts-test-utils';
|
||||
import { BlockchainLifecycle } from '@0x/dev-utils';
|
||||
import { migrateOnceAsync } from '@0x/migrations';
|
||||
import { SignedOrder } from '@0x/types';
|
||||
import { addressUtils, BigNumber } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import 'mocha';
|
||||
|
||||
import { ContractAddresses, ContractWrappers } from '@0x/contract-wrappers';
|
||||
|
||||
import { chaiSetup } from './utils/chai_setup';
|
||||
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
|
||||
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||
|
||||
describe('ABI Decoding Calldata', () => {
|
||||
const defaultERC20MakerAssetAddress = addressUtils.generatePseudoRandomAddress();
|
||||
const matchOrdersSignature =
|
||||
'matchOrders((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),bytes,bytes)';
|
||||
const chainId: number = constants.TESTRPC_CHAIN_ID;
|
||||
let signedOrderLeft: SignedOrder;
|
||||
let signedOrderRight: SignedOrder;
|
||||
let orderLeft = {};
|
||||
let orderRight = {};
|
||||
let matchOrdersTxData: string;
|
||||
let contractAddresses: ContractAddresses;
|
||||
let contractWrappers: ContractWrappers;
|
||||
|
||||
before(async () => {
|
||||
// Create accounts
|
||||
const accounts = await web3Wrapper.getAvailableAddressesAsync();
|
||||
const [makerAddressLeft, makerAddressRight] = accounts;
|
||||
const [privateKeyLeft, privateKeyRight] = constants.TESTRPC_PRIVATE_KEYS;
|
||||
const exchangeAddress = addressUtils.generatePseudoRandomAddress();
|
||||
const feeRecipientAddress = addressUtils.generatePseudoRandomAddress();
|
||||
const domainInfo = {
|
||||
exchangeAddress,
|
||||
chainId,
|
||||
};
|
||||
|
||||
contractAddresses = await migrateOnceAsync(provider);
|
||||
await blockchainLifecycle.startAsync();
|
||||
const config = {
|
||||
chainId: constants.TESTRPC_CHAIN_ID,
|
||||
contractAddresses,
|
||||
blockPollingIntervalMs: 10,
|
||||
};
|
||||
contractWrappers = new ContractWrappers(provider, config);
|
||||
|
||||
// Create orders to match.
|
||||
// Values are arbitrary, with the exception of maker addresses (generated above).
|
||||
orderLeft = {
|
||||
makerAddress: makerAddressLeft,
|
||||
makerAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
makerAssetAmount: new BigNumber(10),
|
||||
takerAddress: '0x0000000000000000000000000000000000000000',
|
||||
takerAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
takerAssetAmount: new BigNumber(1),
|
||||
feeRecipientAddress,
|
||||
makerFee: new BigNumber(0),
|
||||
takerFee: new BigNumber(0),
|
||||
makerFeeAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
takerFeeAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
senderAddress: '0x0000000000000000000000000000000000000000',
|
||||
expirationTimeSeconds: new BigNumber(1549498915),
|
||||
salt: new BigNumber(217),
|
||||
};
|
||||
orderRight = {
|
||||
makerAddress: makerAddressRight,
|
||||
makerAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
makerAssetAmount: new BigNumber(1),
|
||||
takerAddress: '0x0000000000000000000000000000000000000000',
|
||||
takerAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
takerAssetAmount: new BigNumber(8),
|
||||
feeRecipientAddress,
|
||||
makerFee: new BigNumber(0),
|
||||
takerFee: new BigNumber(0),
|
||||
makerFeeAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
takerFeeAssetData: await contractWrappers.devUtils
|
||||
.encodeERC20AssetData(defaultERC20MakerAssetAddress)
|
||||
.callAsync(),
|
||||
senderAddress: '0x0000000000000000000000000000000000000000',
|
||||
expirationTimeSeconds: new BigNumber(1549498915),
|
||||
salt: new BigNumber(50010),
|
||||
};
|
||||
const orderFactoryLeft = new OrderFactory(privateKeyLeft, orderLeft);
|
||||
signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync(domainInfo);
|
||||
const orderFactoryRight = new OrderFactory(privateKeyRight, orderRight);
|
||||
signedOrderRight = await orderFactoryRight.newSignedOrderAsync(domainInfo);
|
||||
// Encode match orders transaction
|
||||
matchOrdersTxData = contractWrappers.exchange
|
||||
.matchOrders(signedOrderLeft, signedOrderRight, signedOrderLeft.signature, signedOrderRight.signature)
|
||||
.getABIEncodedTransactionData();
|
||||
});
|
||||
|
||||
describe('decode', () => {
|
||||
it('should successfully decode Exchange.matchOrders calldata', async () => {
|
||||
const contractName = 'Exchange';
|
||||
const decodedTxData = contractWrappers
|
||||
.getAbiDecoder()
|
||||
.decodeCalldataOrThrow(matchOrdersTxData, contractName);
|
||||
const expectedFunctionName = 'matchOrders';
|
||||
const expectedFunctionArguments = {
|
||||
leftOrder: orderLeft,
|
||||
rightOrder: orderRight,
|
||||
leftSignature: signedOrderLeft.signature,
|
||||
rightSignature: signedOrderRight.signature,
|
||||
};
|
||||
expect(decodedTxData.functionName).to.be.equal(expectedFunctionName);
|
||||
expect(decodedTxData.functionSignature).to.be.equal(matchOrdersSignature);
|
||||
expect(decodedTxData.functionArguments).to.be.deep.equal(expectedFunctionArguments);
|
||||
});
|
||||
it('should throw if cannot decode calldata', async () => {
|
||||
const badTxData = '0x01020304';
|
||||
expect(() => {
|
||||
contractWrappers.getAbiDecoder().decodeCalldataOrThrow(badTxData);
|
||||
}).to.throw("No functions registered for selector '0x01020304'");
|
||||
});
|
||||
});
|
||||
});
|
6
packages/contract-wrappers-test/test/global_hooks.ts
Normal file
6
packages/contract-wrappers-test/test/global_hooks.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
before('set up mocha', async function(): Promise<void> {
|
||||
// HACK: Since the migrations take longer then our global mocha timeout limit
|
||||
// we manually increase it for this before hook.
|
||||
const mochaTestTimeoutMs = 500000;
|
||||
this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
|
||||
});
|
1
packages/contract-wrappers-test/test/utils/chai_setup.ts
Normal file
1
packages/contract-wrappers-test/test/utils/chai_setup.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { chaiSetup } from '@0x/dev-utils';
|
18
packages/contract-wrappers-test/test/utils/constants.ts
Normal file
18
packages/contract-wrappers-test/test/utils/constants.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { BigNumber } from '@0x/utils';
|
||||
|
||||
export const constants = {
|
||||
NULL_ADDRESS: '0x0000000000000000000000000000000000000000',
|
||||
ROPSTEN_CHAIN_ID: 3,
|
||||
KOVAN_CHAIN_ID: 42,
|
||||
AWAIT_TRANSACTION_MINED_MS: 0,
|
||||
KOVAN_RPC_URL: 'https://kovan.infura.io/',
|
||||
ROPSTEN_RPC_URL: 'https://ropsten.infura.io/',
|
||||
ZRX_DECIMALS: 18,
|
||||
DUMMY_TOKEN_NAME: '',
|
||||
DUMMY_TOKEN_SYMBOL: '',
|
||||
DUMMY_TOKEN_DECIMALS: 18,
|
||||
DUMMY_TOKEN_TOTAL_SUPPLY: new BigNumber(10 ** 27), // tslint:disable-line:custom-no-magic-numbers
|
||||
NUM_DUMMY_ERC20_TO_DEPLOY: 3,
|
||||
NUM_DUMMY_ERC721_TO_DEPLOY: 1,
|
||||
ZERO_AMOUNT: new BigNumber(0),
|
||||
};
|
12
packages/contract-wrappers-test/test/utils/web3_wrapper.ts
Normal file
12
packages/contract-wrappers-test/test/utils/web3_wrapper.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { devConstants, web3Factory } from '@0x/dev-utils';
|
||||
import { Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { Web3Wrapper } from '@0x/web3-wrapper';
|
||||
|
||||
const txDefaults = {
|
||||
from: devConstants.TESTRPC_FIRST_ADDRESS,
|
||||
gas: devConstants.GAS_LIMIT,
|
||||
};
|
||||
const provider: Web3ProviderEngine = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
|
||||
const web3Wrapper = new Web3Wrapper(provider);
|
||||
|
||||
export { provider, web3Wrapper, txDefaults };
|
Reference in New Issue
Block a user