aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts')
-rw-r--r--packages/contracts/package.json4
-rw-r--r--packages/contracts/test/tutorials/arbitrage.ts84
2 files changed, 49 insertions, 39 deletions
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index 7cac30069..ca1715d0e 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -17,13 +17,13 @@
"compile:comment": "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 src/artifacts",
"clean": "shx rm -rf ./lib",
- "generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
+ "generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|Arbitrage|EtherDelta|AccountLevels).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
"migrate": "node ../deployer/lib/src/cli.js migrate",
"lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
"test:circleci": "yarn test"
},
"config": {
- "contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,TokenTransferProxy,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry"
+ "contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,TokenTransferProxy,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry,Arbitrage,EtherDelta,AccountLevels"
},
"repository": {
"type": "git",
diff --git a/packages/contracts/test/tutorials/arbitrage.ts b/packages/contracts/test/tutorials/arbitrage.ts
index 94589c43a..2bafbff0b 100644
--- a/packages/contracts/test/tutorials/arbitrage.ts
+++ b/packages/contracts/test/tutorials/arbitrage.ts
@@ -1,4 +1,4 @@
-import { ECSignature, ZeroEx } from '0x.js';
+import { ECSignature, SignedOrder, ZeroEx } from '0x.js';
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -6,11 +6,13 @@ import * as chai from 'chai';
import ethUtil = require('ethereumjs-util');
import * as Web3 from 'web3';
+import { ArbitrageContract } from '../../src/contract_wrappers/generated/arbitrage';
+import { EtherDeltaContract } from '../../src/contract_wrappers/generated/ether_delta';
+import { ExchangeContract } from '../../src/contract_wrappers/generated/exchange';
import { Balances } from '../../util/balances';
import { constants } from '../../util/constants';
import { crypto } from '../../util/crypto';
import { ExchangeWrapper } from '../../util/exchange_wrapper';
-import { Order } from '../../util/order';
import { OrderFactory } from '../../util/order_factory';
import { BalancesByOwner, ContractName, ExchangeContractErrs } from '../../util/types';
import { chaiSetup } from '../utils/chai_setup';
@@ -37,10 +39,10 @@ describe('Arbitrage', () => {
let weth: Web3.ContractInstance;
let zrx: Web3.ContractInstance;
- let arbitrage: Web3.ContractInstance;
- let etherDelta: Web3.ContractInstance;
+ let arbitrage: ArbitrageContract;
+ let etherDelta: EtherDeltaContract;
- let order: Order;
+ let signedOrder: SignedOrder;
let exWrapper: ExchangeWrapper;
let orderFactory: OrderFactory;
@@ -60,7 +62,7 @@ describe('Arbitrage', () => {
const edMakerFee = 0;
const edTakerFee = 0;
const edFeeRebate = 0;
- etherDelta = await deployer.deployAsync(ContractName.EtherDelta, [
+ const etherDeltaInstance = await deployer.deployAsync(ContractName.EtherDelta, [
edAdminAddress,
feeRecipient,
accountLevels.address,
@@ -68,13 +70,18 @@ describe('Arbitrage', () => {
edTakerFee,
edFeeRebate,
]);
+ etherDelta = new EtherDeltaContract(web3Wrapper, etherDeltaInstance.abi, etherDeltaInstance.address);
const tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
- const exchange = await deployer.deployAsync(ContractName.Exchange, [zrx.address, tokenTransferProxy.address]);
- await tokenTransferProxy.addAuthorizedAddress(exchange.address, { from: accounts[0] });
+ const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
+ zrx.address,
+ tokenTransferProxy.address,
+ ]);
+ await tokenTransferProxy.addAuthorizedAddress(exchangeInstance.address, { from: accounts[0] });
zeroEx = new ZeroEx(web3.currentProvider, {
- exchangeContractAddress: exchange.address,
+ exchangeContractAddress: exchangeInstance.address,
networkId: constants.TESTRPC_NETWORK_ID,
});
+ const exchange = new ExchangeContract(web3Wrapper, exchangeInstance.abi, exchangeInstance.address);
exWrapper = new ExchangeWrapper(exchange, zeroEx);
makerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), 18);
@@ -83,22 +90,23 @@ describe('Arbitrage', () => {
exchangeContractAddress: exchange.address,
maker,
feeRecipient,
- makerToken: zrx.address,
- takerToken: weth.address,
+ makerTokenAddress: zrx.address,
+ takerTokenAddress: weth.address,
makerTokenAmount,
takerTokenAmount,
makerFee: new BigNumber(0),
takerFee: new BigNumber(0),
};
- orderFactory = new OrderFactory(web3Wrapper, defaultOrderParams);
- arbitrage = await deployer.deployAsync(ContractName.Arbitrage, [
+ orderFactory = new OrderFactory(zeroEx, defaultOrderParams);
+ const arbitrageInstance = await deployer.deployAsync(ContractName.Arbitrage, [
exchange.address,
etherDelta.address,
tokenTransferProxy.address,
]);
+ arbitrage = new ArbitrageContract(web3Wrapper, arbitrageInstance.abi, arbitrageInstance.address);
// Enable arbitrage and withdrawals of tokens
- await arbitrage.setAllowances(weth.address, { from: coinbase });
- await arbitrage.setAllowances(zrx.address, { from: coinbase });
+ await arbitrage.setAllowances.sendTransactionAsync(weth.address, { from: coinbase });
+ await arbitrage.setAllowances.sendTransactionAsync(zrx.address, { from: coinbase });
// Give some tokens to arbitrage contract
await weth.setBalance(arbitrage.address, takerTokenAmount, { from: coinbase });
@@ -114,7 +122,7 @@ describe('Arbitrage', () => {
// Set the allowance for the maker on EtherDelta side
await weth.approve(etherDelta.address, INITIAL_ALLOWANCE, { from: edMaker });
// Deposit maker funds into EtherDelta
- await etherDelta.depositToken(weth.address, amountGive, { from: edMaker });
+ await etherDelta.depositToken.sendTransactionAsync(weth.address, amountGive, { from: edMaker });
amountGet = makerTokenAmount;
// Fund the front runner on EtherDelta side
@@ -122,7 +130,7 @@ describe('Arbitrage', () => {
// Set the allowance for the front-runner on EtherDelta side
await zrx.approve(etherDelta.address, INITIAL_ALLOWANCE, { from: edFrontRunner });
// Deposit front runner funds into EtherDelta
- await etherDelta.depositToken(zrx.address, amountGet, { from: edFrontRunner });
+ await etherDelta.depositToken.sendTransactionAsync(zrx.address, amountGet, { from: edFrontRunner });
});
beforeEach(async () => {
await blockchainLifecycle.startAsync();
@@ -142,7 +150,7 @@ describe('Arbitrage', () => {
let nonce: BigNumber;
let edSignature: ECSignature;
before(async () => {
- order = await orderFactory.newSignedOrderAsync();
+ signedOrder = await orderFactory.newSignedOrderAsync();
tokenGet = zrx.address;
tokenGive = weth.address;
const blockNumber = await web3Wrapper.getBlockNumberAsync();
@@ -155,22 +163,22 @@ describe('Arbitrage', () => {
const shouldAddPersonalMessagePrefix = false;
edSignature = await zeroEx.signOrderHashAsync(edOrderHash, edMaker, shouldAddPersonalMessagePrefix);
addresses = [
- order.params.maker,
- order.params.taker,
- order.params.makerToken,
- order.params.takerToken,
- order.params.feeRecipient,
+ signedOrder.maker,
+ signedOrder.taker,
+ signedOrder.makerTokenAddress,
+ signedOrder.takerTokenAddress,
+ signedOrder.feeRecipient,
edMaker,
];
const fillTakerTokenAmount = takerTokenAmount;
const edFillAmount = makerTokenAmount;
values = [
- order.params.makerTokenAmount,
- order.params.takerTokenAmount,
- order.params.makerFee,
- order.params.takerFee,
- order.params.expirationTimestampInSec,
- order.params.salt,
+ signedOrder.makerTokenAmount,
+ signedOrder.takerTokenAmount,
+ signedOrder.makerFee,
+ signedOrder.takerFee,
+ signedOrder.expirationUnixTimestampSec,
+ signedOrder.salt,
fillTakerTokenAmount,
amountGet,
amountGive,
@@ -178,12 +186,14 @@ describe('Arbitrage', () => {
nonce,
edFillAmount,
];
- v = [order.params.v as number, edSignature.v];
- r = [order.params.r as string, edSignature.r];
- s = [order.params.s as string, edSignature.s];
+ v = [signedOrder.ecSignature.v, edSignature.v];
+ r = [signedOrder.ecSignature.r, edSignature.r];
+ s = [signedOrder.ecSignature.s, edSignature.s];
});
it('should successfully execute the arbitrage if not front-runned', async () => {
- const txHash = await arbitrage.makeAtomicTrade(addresses, values, v, r, s, { from: coinbase });
+ const txHash = await arbitrage.makeAtomicTrade.sendTransactionAsync(addresses, values, v, r, s, {
+ from: coinbase,
+ });
const res = await zeroEx.awaitTransactionMinedAsync(txHash);
const postBalance = await weth.balanceOf(arbitrage.address);
expect(postBalance).to.be.bignumber.equal(amountGive);
@@ -191,7 +201,7 @@ describe('Arbitrage', () => {
it('should fail and revert if front-runned', async () => {
const preBalance = await weth.balanceOf(arbitrage.address);
// Front-running transaction
- await etherDelta.trade(
+ await etherDelta.trade.sendTransactionAsync(
tokenGet,
amountGet,
tokenGive,
@@ -206,9 +216,9 @@ describe('Arbitrage', () => {
{ from: edFrontRunner },
);
// tslint:disable-next-line:await-promise
- await expect(arbitrage.makeAtomicTrade(addresses, values, v, r, s, { from: coinbase })).to.be.rejectedWith(
- constants.REVERT,
- );
+ await expect(
+ arbitrage.makeAtomicTrade.sendTransactionAsync(addresses, values, v, r, s, { from: coinbase }),
+ ).to.be.rejectedWith(constants.REVERT);
const postBalance = await weth.balanceOf(arbitrage.address);
expect(preBalance).to.be.bignumber.equal(postBalance);
});