aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/test/tutorials/arbitrage.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts/test/tutorials/arbitrage.ts')
-rw-r--r--packages/contracts/test/tutorials/arbitrage.ts39
1 files changed, 23 insertions, 16 deletions
diff --git a/packages/contracts/test/tutorials/arbitrage.ts b/packages/contracts/test/tutorials/arbitrage.ts
index 7da84ddb9..94589c43a 100644
--- a/packages/contracts/test/tutorials/arbitrage.ts
+++ b/packages/contracts/test/tutorials/arbitrage.ts
@@ -27,6 +27,10 @@ describe('Arbitrage', () => {
let maker: string;
let edMaker: string;
let edFrontRunner: string;
+ let amountGet: BigNumber;
+ let amountGive: BigNumber;
+ let makerTokenAmount: BigNumber;
+ let takerTokenAmount: BigNumber;
const feeRecipient = ZeroEx.NULL_ADDRESS;
const INITIAL_BALANCE = ZeroEx.toBaseUnitAmount(new BigNumber(10000), 18);
const INITIAL_ALLOWANCE = ZeroEx.toBaseUnitAmount(new BigNumber(10000), 18);
@@ -42,6 +46,10 @@ describe('Arbitrage', () => {
let zeroEx: ZeroEx;
+ // From a bird's eye view - we create two orders.
+ // 0x order of 1 ZRX (maker) for 1 WETH (taker)
+ // ED order of 2 WETH (tokenGive) for 1 ZRX (tokenGet)
+ // And then we do an atomic arbitrage between them which gives us 1 WETH.
before(async () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
[coinbase, maker, edMaker, edFrontRunner] = accounts;
@@ -69,14 +77,16 @@ describe('Arbitrage', () => {
});
exWrapper = new ExchangeWrapper(exchange, zeroEx);
+ makerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), 18);
+ takerTokenAmount = makerTokenAmount;
const defaultOrderParams = {
exchangeContractAddress: exchange.address,
maker,
feeRecipient,
makerToken: zrx.address,
takerToken: weth.address,
- makerTokenAmount: ZeroEx.toBaseUnitAmount(new BigNumber(1), 18),
- takerTokenAmount: ZeroEx.toBaseUnitAmount(new BigNumber(1), 18),
+ makerTokenAmount,
+ takerTokenAmount,
makerFee: new BigNumber(0),
takerFee: new BigNumber(0),
};
@@ -91,22 +101,22 @@ describe('Arbitrage', () => {
await arbitrage.setAllowances(zrx.address, { from: coinbase });
// Give some tokens to arbitrage contract
- await weth.setBalance(arbitrage.address, ZeroEx.toBaseUnitAmount(new BigNumber(1), 18), { from: coinbase });
+ await weth.setBalance(arbitrage.address, takerTokenAmount, { from: coinbase });
// Fund the maker on exchange side
- await zrx.setBalance(maker, ZeroEx.toBaseUnitAmount(new BigNumber(1), 18), { from: coinbase });
+ await zrx.setBalance(maker, makerTokenAmount, { from: coinbase });
// Set the allowance for the maker on Exchange side
await zrx.approve(tokenTransferProxy.address, INITIAL_ALLOWANCE, { from: maker });
- const amountGive = ZeroEx.toBaseUnitAmount(new BigNumber(2), 18);
+ amountGive = ZeroEx.toBaseUnitAmount(new BigNumber(2), 18);
// Fund the maker on EtherDelta side
- await weth.setBalance(edMaker, ZeroEx.toBaseUnitAmount(new BigNumber(2), 18), { from: coinbase });
+ await weth.setBalance(edMaker, amountGive, { from: coinbase });
// 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 });
- const amountGet = ZeroEx.toBaseUnitAmount(new BigNumber(1), 18);
+ amountGet = makerTokenAmount;
// Fund the front runner on EtherDelta side
await zrx.setBalance(edFrontRunner, amountGet, { from: coinbase });
// Set the allowance for the front-runner on EtherDelta side
@@ -128,19 +138,16 @@ describe('Arbitrage', () => {
let s: string[];
let tokenGet: string;
let tokenGive: string;
- let amountGet: BigNumber;
- let amountGive: BigNumber;
let expires: BigNumber;
let nonce: BigNumber;
let edSignature: ECSignature;
before(async () => {
order = await orderFactory.newSignedOrderAsync();
tokenGet = zrx.address;
- amountGet = ZeroEx.toBaseUnitAmount(new BigNumber(1), 18);
tokenGive = weth.address;
- amountGive = ZeroEx.toBaseUnitAmount(new BigNumber(2), 18);
const blockNumber = await web3Wrapper.getBlockNumberAsync();
- expires = new BigNumber(blockNumber + 10);
+ const ED_ORDER_EXPIRATION_IN_BLOCKS = 10;
+ expires = new BigNumber(blockNumber + ED_ORDER_EXPIRATION_IN_BLOCKS);
nonce = new BigNumber(42);
const edOrderHash = `0x${crypto
.solSHA256([etherDelta.address, tokenGet, amountGet, tokenGive, amountGive, expires, nonce])
@@ -155,8 +162,8 @@ describe('Arbitrage', () => {
order.params.feeRecipient,
edMaker,
];
- const fillTakerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), 18);
- const edFillAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), 18);
+ const fillTakerTokenAmount = takerTokenAmount;
+ const edFillAmount = makerTokenAmount;
values = [
order.params.makerTokenAmount,
order.params.takerTokenAmount,
@@ -179,7 +186,7 @@ describe('Arbitrage', () => {
const txHash = await arbitrage.makeAtomicTrade(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(ZeroEx.toBaseUnitAmount(new BigNumber(2), 18));
+ expect(postBalance).to.be.bignumber.equal(amountGive);
});
it('should fail and revert if front-runned', async () => {
const preBalance = await weth.balanceOf(arbitrage.address);
@@ -195,7 +202,7 @@ describe('Arbitrage', () => {
edSignature.v,
edSignature.r,
edSignature.s,
- ZeroEx.toBaseUnitAmount(new BigNumber(1), 18),
+ amountGet,
{ from: edFrontRunner },
);
// tslint:disable-next-line:await-promise