Files
protocol/lib/test/erc20-bridge-sampler.js
T
Daniel Pyrathon a23d0a7f4c gitpkg
2020-03-02 14:47:48 -08:00

1319 lines
71 KiB
JavaScript

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
var __values = (this && this.__values) || function (o) {
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
if (m) return m.call(o);
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
};
var _this = this;
Object.defineProperty(exports, "__esModule", { value: true });
var contracts_test_utils_1 = require("@0x/contracts-test-utils");
var utils_1 = require("@0x/utils");
var _ = require("lodash");
var artifacts_1 = require("./artifacts");
var wrappers_1 = require("./wrappers");
contracts_test_utils_1.blockchainTests('erc20-bridge-sampler', function (env) {
var testContract;
var RATE_DENOMINATOR = contracts_test_utils_1.constants.ONE_ETHER;
var MIN_RATE = new utils_1.BigNumber('0.01');
var MAX_RATE = new utils_1.BigNumber('100');
var MIN_DECIMALS = 4;
var MAX_DECIMALS = 20;
var WETH_ADDRESS = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';
var KYBER_SALT = '0x0ff3ca9d46195c39f9a12afb74207b4970349fb3cfb1e459bbf170298d326bc7';
var ETH2DAI_SALT = '0xb713b61bb9bb2958a0f5d1534b21e94fc68c4c0c034b0902ed844f2f6cd1b4f7';
var UNISWAP_BASE_SALT = '0x1d6a6a0506b0b4a554b907a4c29d9f4674e461989d9c1921feb17b26716385ab';
var ERC20_PROXY_ID = '0xf47261b0';
var INVALID_TOKEN_PAIR_ERROR = 'ERC20BridgeSampler/INVALID_TOKEN_PAIR';
var MAKER_TOKEN = contracts_test_utils_1.randomAddress();
var TAKER_TOKEN = contracts_test_utils_1.randomAddress();
before(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, wrappers_1.TestERC20BridgeSamplerContract.deployFrom0xArtifactAsync(artifacts_1.artifacts.TestERC20BridgeSampler, env.provider, env.txDefaults, {})];
case 1:
testContract = _a.sent();
return [2 /*return*/];
}
});
}); });
function getPackedHash() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return utils_1.hexUtils.hash(utils_1.hexUtils.concat.apply(utils_1.hexUtils, __spread(args.map(function (a) { return utils_1.hexUtils.toHex(a); }))));
}
function getUniswapExchangeSalt(tokenAddress) {
return getPackedHash(UNISWAP_BASE_SALT, tokenAddress);
}
function getDeterministicRate(salt, sellToken, buyToken) {
var hash = getPackedHash(salt, sellToken, buyToken);
var _minRate = RATE_DENOMINATOR.times(MIN_RATE);
var _maxRate = RATE_DENOMINATOR.times(MAX_RATE);
return new utils_1.BigNumber(hash)
.mod(_maxRate.minus(_minRate))
.plus(_minRate)
.div(RATE_DENOMINATOR);
}
function getDeterministicTokenDecimals(token) {
if (token === WETH_ADDRESS) {
return 18;
}
// HACK(dorothy-zbornak): Linter will complain about the addition not being
// between two numbers, even though they are.
// tslint:disable-next-line restrict-plus-operands
return new utils_1.BigNumber(getPackedHash(token)).mod(MAX_DECIMALS - MIN_DECIMALS).toNumber() + MIN_DECIMALS;
}
function getDeterministicSellQuote(salt, sellToken, buyToken, sellAmount) {
var sellBase = new utils_1.BigNumber(10).pow(getDeterministicTokenDecimals(sellToken));
var buyBase = new utils_1.BigNumber(10).pow(getDeterministicTokenDecimals(buyToken));
var rate = getDeterministicRate(salt, sellToken, buyToken);
return sellAmount
.times(rate)
.times(buyBase)
.dividedToIntegerBy(sellBase);
}
function getDeterministicBuyQuote(salt, sellToken, buyToken, buyAmount) {
var sellBase = new utils_1.BigNumber(10).pow(getDeterministicTokenDecimals(sellToken));
var buyBase = new utils_1.BigNumber(10).pow(getDeterministicTokenDecimals(buyToken));
var rate = getDeterministicRate(salt, sellToken, buyToken);
return buyAmount
.times(sellBase)
.dividedToIntegerBy(rate)
.dividedToIntegerBy(buyBase);
}
function areAddressesEqual(a, b) {
return a.toLowerCase() === b.toLowerCase();
}
function getDeterministicUniswapSellQuote(sellToken, buyToken, sellAmount) {
if (areAddressesEqual(buyToken, WETH_ADDRESS)) {
return getDeterministicSellQuote(getUniswapExchangeSalt(sellToken), sellToken, WETH_ADDRESS, sellAmount);
}
if (areAddressesEqual(sellToken, WETH_ADDRESS)) {
return getDeterministicSellQuote(getUniswapExchangeSalt(buyToken), buyToken, WETH_ADDRESS, sellAmount);
}
var ethBought = getDeterministicSellQuote(getUniswapExchangeSalt(sellToken), sellToken, WETH_ADDRESS, sellAmount);
return getDeterministicSellQuote(getUniswapExchangeSalt(buyToken), buyToken, WETH_ADDRESS, ethBought);
}
function getDeterministicUniswapBuyQuote(sellToken, buyToken, buyAmount) {
if (areAddressesEqual(buyToken, WETH_ADDRESS)) {
return getDeterministicBuyQuote(getUniswapExchangeSalt(sellToken), WETH_ADDRESS, sellToken, buyAmount);
}
if (areAddressesEqual(sellToken, WETH_ADDRESS)) {
return getDeterministicBuyQuote(getUniswapExchangeSalt(buyToken), WETH_ADDRESS, buyToken, buyAmount);
}
var ethSold = getDeterministicBuyQuote(getUniswapExchangeSalt(buyToken), WETH_ADDRESS, buyToken, buyAmount);
return getDeterministicBuyQuote(getUniswapExchangeSalt(sellToken), WETH_ADDRESS, sellToken, ethSold);
}
function getDeterministicSellQuotes(sellToken, buyToken, sources, sampleAmounts) {
var e_1, _a, e_2, _b;
var quotes = [];
try {
for (var sources_1 = __values(sources), sources_1_1 = sources_1.next(); !sources_1_1.done; sources_1_1 = sources_1.next()) {
var source = sources_1_1.value;
var sampleOutputs = [];
try {
for (var sampleAmounts_1 = __values(sampleAmounts), sampleAmounts_1_1 = sampleAmounts_1.next(); !sampleAmounts_1_1.done; sampleAmounts_1_1 = sampleAmounts_1.next()) {
var amount = sampleAmounts_1_1.value;
if (source === 'Kyber' || source === 'Eth2Dai') {
sampleOutputs.push(getDeterministicSellQuote(source === 'Kyber' ? KYBER_SALT : ETH2DAI_SALT, sellToken, buyToken, amount));
}
else if (source === 'Uniswap') {
sampleOutputs.push(getDeterministicUniswapSellQuote(sellToken, buyToken, amount));
}
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (sampleAmounts_1_1 && !sampleAmounts_1_1.done && (_b = sampleAmounts_1.return)) _b.call(sampleAmounts_1);
}
finally { if (e_2) throw e_2.error; }
}
quotes.push(sampleOutputs);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);
}
finally { if (e_1) throw e_1.error; }
}
return quotes;
}
function getDeterministicBuyQuotes(sellToken, buyToken, sources, sampleAmounts) {
var e_3, _a, e_4, _b;
var quotes = [];
try {
for (var sources_2 = __values(sources), sources_2_1 = sources_2.next(); !sources_2_1.done; sources_2_1 = sources_2.next()) {
var source = sources_2_1.value;
var sampleOutputs = [];
try {
for (var sampleAmounts_2 = __values(sampleAmounts), sampleAmounts_2_1 = sampleAmounts_2.next(); !sampleAmounts_2_1.done; sampleAmounts_2_1 = sampleAmounts_2.next()) {
var amount = sampleAmounts_2_1.value;
if (source === 'Eth2Dai') {
sampleOutputs.push(getDeterministicBuyQuote(ETH2DAI_SALT, sellToken, buyToken, amount));
}
else if (source === 'Uniswap') {
sampleOutputs.push(getDeterministicUniswapBuyQuote(sellToken, buyToken, amount));
}
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (sampleAmounts_2_1 && !sampleAmounts_2_1.done && (_b = sampleAmounts_2.return)) _b.call(sampleAmounts_2);
}
finally { if (e_4) throw e_4.error; }
}
quotes.push(sampleOutputs);
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (sources_2_1 && !sources_2_1.done && (_a = sources_2.return)) _a.call(sources_2);
}
finally { if (e_3) throw e_3.error; }
}
return quotes;
}
function getDeterministicFillableTakerAssetAmount(order) {
var hash = getPackedHash(utils_1.hexUtils.leftPad(order.salt));
var orderStatus = new utils_1.BigNumber(hash).mod(100).toNumber() > 90 ? 5 : 3;
var isValidSignature = !!new utils_1.BigNumber(hash).mod(2).toNumber();
if (orderStatus !== 3 || !isValidSignature) {
return contracts_test_utils_1.constants.ZERO_AMOUNT;
}
return order.takerAssetAmount.minus(new utils_1.BigNumber(hash).mod(order.takerAssetAmount));
}
function getDeterministicFillableMakerAssetAmount(order) {
var takerAmount = getDeterministicFillableTakerAssetAmount(order);
return order.makerAssetAmount
.times(takerAmount)
.div(order.takerAssetAmount)
.integerValue(utils_1.BigNumber.ROUND_UP);
}
function getERC20AssetData(tokenAddress) {
return utils_1.hexUtils.concat(ERC20_PROXY_ID, utils_1.hexUtils.leftPad(tokenAddress));
}
function getSampleAmounts(tokenAddress, count) {
var tokenDecimals = getDeterministicTokenDecimals(tokenAddress);
var _upperLimit = contracts_test_utils_1.getRandomPortion(contracts_test_utils_1.getRandomInteger(1, 1000).times(Math.pow(10, tokenDecimals)));
var _count = count || _.random(1, 16);
var d = _upperLimit.div(_count);
return _.times(_count, function (i) { return d.times((i + 1) / _count).integerValue(); });
}
function createOrder(makerToken, takerToken) {
return {
chainId: 1337,
exchangeAddress: contracts_test_utils_1.randomAddress(),
makerAddress: contracts_test_utils_1.randomAddress(),
takerAddress: contracts_test_utils_1.randomAddress(),
senderAddress: contracts_test_utils_1.randomAddress(),
feeRecipientAddress: contracts_test_utils_1.randomAddress(),
makerAssetAmount: contracts_test_utils_1.getRandomInteger(1, 1e18),
takerAssetAmount: contracts_test_utils_1.getRandomInteger(1, 1e18),
makerFee: contracts_test_utils_1.getRandomInteger(1, 1e18),
takerFee: contracts_test_utils_1.getRandomInteger(1, 1e18),
makerAssetData: getERC20AssetData(makerToken),
takerAssetData: getERC20AssetData(takerToken),
makerFeeAssetData: getERC20AssetData(contracts_test_utils_1.randomAddress()),
takerFeeAssetData: getERC20AssetData(contracts_test_utils_1.randomAddress()),
salt: new utils_1.BigNumber(utils_1.hexUtils.random()),
expirationTimeSeconds: contracts_test_utils_1.getRandomInteger(0, Math.pow(2, 32)),
};
}
function createOrders(makerToken, takerToken, count) {
return _.times(count || _.random(1, 16), function () { return createOrder(makerToken, takerToken); });
}
function enableFailTriggerAsync() {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.enableFailTrigger().awaitTransactionSuccessAsync({ value: 1 })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
}
describe('getOrderFillableTakerAssetAmounts()', function () {
it('returns the expected amount for each order', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, expected, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN);
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
expected = orders.map(getDeterministicFillableTakerAssetAmount);
return [4 /*yield*/, testContract.getOrderFillableTakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq(expected);
return [2 /*return*/];
}
});
}); });
it('returns empty for no orders', function () { return __awaiter(_this, void 0, void 0, function () {
var actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.getOrderFillableTakerAssetAmounts([], []).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('returns zero for an order with zero maker asset amount', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, 1);
orders[0].makerAssetAmount = contracts_test_utils_1.constants.ZERO_AMOUNT;
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
return [4 /*yield*/, testContract.getOrderFillableTakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([contracts_test_utils_1.constants.ZERO_AMOUNT]);
return [2 /*return*/];
}
});
}); });
it('returns zero for an order with zero taker asset amount', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, 1);
orders[0].takerAssetAmount = contracts_test_utils_1.constants.ZERO_AMOUNT;
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
return [4 /*yield*/, testContract.getOrderFillableTakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([contracts_test_utils_1.constants.ZERO_AMOUNT]);
return [2 /*return*/];
}
});
}); });
it('returns zero for an order with an empty signature', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, 1);
signatures = _.times(orders.length, function () { return contracts_test_utils_1.constants.NULL_BYTES; });
return [4 /*yield*/, testContract.getOrderFillableTakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([contracts_test_utils_1.constants.ZERO_AMOUNT]);
return [2 /*return*/];
}
});
}); });
});
describe('getOrderFillableMakerAssetAmounts()', function () {
it('returns the expected amount for each order', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, expected, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN);
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
expected = orders.map(getDeterministicFillableMakerAssetAmount);
return [4 /*yield*/, testContract.getOrderFillableMakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq(expected);
return [2 /*return*/];
}
});
}); });
it('returns empty for no orders', function () { return __awaiter(_this, void 0, void 0, function () {
var actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.getOrderFillableMakerAssetAmounts([], []).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('returns zero for an order with zero maker asset amount', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, 1);
orders[0].makerAssetAmount = contracts_test_utils_1.constants.ZERO_AMOUNT;
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
return [4 /*yield*/, testContract.getOrderFillableMakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([contracts_test_utils_1.constants.ZERO_AMOUNT]);
return [2 /*return*/];
}
});
}); });
it('returns zero for an order with zero taker asset amount', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, 1);
orders[0].takerAssetAmount = contracts_test_utils_1.constants.ZERO_AMOUNT;
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
return [4 /*yield*/, testContract.getOrderFillableMakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([contracts_test_utils_1.constants.ZERO_AMOUNT]);
return [2 /*return*/];
}
});
}); });
it('returns zero for an order with an empty signature', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, 1);
signatures = _.times(orders.length, function () { return contracts_test_utils_1.constants.NULL_BYTES; });
return [4 /*yield*/, testContract.getOrderFillableMakerAssetAmounts(orders, signatures).callAsync()];
case 1:
actual = _a.sent();
contracts_test_utils_1.expect(actual).to.deep.eq([contracts_test_utils_1.constants.ZERO_AMOUNT]);
return [2 /*return*/];
}
});
}); });
});
contracts_test_utils_1.blockchainTests.resets('sampleSellsFromKyberNetwork()', function () {
before(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.createTokenExchanges([MAKER_TOKEN, TAKER_TOKEN]).awaitTransactionSuccessAsync()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('throws if tokens are the same', function () { return __awaiter(_this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
tx = testContract.sampleSellsFromKyberNetwork(MAKER_TOKEN, MAKER_TOKEN, []).callAsync();
return [2 /*return*/, contracts_test_utils_1.expect(tx).to.revertWith(INVALID_TOKEN_PAIR_ERROR)];
});
}); });
it('can return no quotes', function () { return __awaiter(_this, void 0, void 0, function () {
var quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.sampleSellsFromKyberNetwork(TAKER_TOKEN, MAKER_TOKEN, []).callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('can quote token - token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(TAKER_TOKEN, MAKER_TOKEN, ['Kyber'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromKyberNetwork(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromKyberNetwork(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote token -> ETH', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(TAKER_TOKEN, WETH_ADDRESS, ['Kyber'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromKyberNetwork(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> ETH fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromKyberNetwork(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote ETH -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(WETH_ADDRESS, TAKER_TOKEN, ['Kyber'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromKyberNetwork(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if ETH -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromKyberNetwork(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
});
contracts_test_utils_1.blockchainTests.resets('sampleSellsFromEth2Dai()', function () {
before(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.createTokenExchanges([MAKER_TOKEN, TAKER_TOKEN]).awaitTransactionSuccessAsync()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('throws if tokens are the same', function () { return __awaiter(_this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
tx = testContract.sampleSellsFromEth2Dai(MAKER_TOKEN, MAKER_TOKEN, []).callAsync();
return [2 /*return*/, contracts_test_utils_1.expect(tx).to.revertWith(INVALID_TOKEN_PAIR_ERROR)];
});
}); });
it('can return no quotes', function () { return __awaiter(_this, void 0, void 0, function () {
var quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.sampleSellsFromEth2Dai(TAKER_TOKEN, MAKER_TOKEN, []).callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('can quote token -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(TAKER_TOKEN, MAKER_TOKEN, ['Eth2Dai'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromEth2Dai(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromEth2Dai(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote token -> ETH', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(TAKER_TOKEN, WETH_ADDRESS, ['Eth2Dai'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromEth2Dai(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> ETH fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromEth2Dai(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote ETH -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(WETH_ADDRESS, TAKER_TOKEN, ['Eth2Dai'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromEth2Dai(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if ETH -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromEth2Dai(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
});
contracts_test_utils_1.blockchainTests.resets('sampleBuysFromEth2Dai()', function () {
before(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.createTokenExchanges([MAKER_TOKEN, TAKER_TOKEN]).awaitTransactionSuccessAsync()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('throws if tokens are the same', function () { return __awaiter(_this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
tx = testContract.sampleBuysFromEth2Dai(MAKER_TOKEN, MAKER_TOKEN, []).callAsync();
return [2 /*return*/, contracts_test_utils_1.expect(tx).to.revertWith(INVALID_TOKEN_PAIR_ERROR)];
});
}); });
it('can return no quotes', function () { return __awaiter(_this, void 0, void 0, function () {
var quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.sampleBuysFromEth2Dai(TAKER_TOKEN, MAKER_TOKEN, []).callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('can quote token -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
_a = __read(getDeterministicBuyQuotes(TAKER_TOKEN, MAKER_TOKEN, ['Eth2Dai'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleBuysFromEth2Dai(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleBuysFromEth2Dai(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote token -> ETH', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
_a = __read(getDeterministicBuyQuotes(TAKER_TOKEN, WETH_ADDRESS, ['Eth2Dai'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleBuysFromEth2Dai(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> ETH fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleBuysFromEth2Dai(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote ETH -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
_a = __read(getDeterministicBuyQuotes(WETH_ADDRESS, TAKER_TOKEN, ['Eth2Dai'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleBuysFromEth2Dai(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if ETH -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleBuysFromEth2Dai(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
});
contracts_test_utils_1.blockchainTests.resets('sampleSellsFromUniswap()', function () {
before(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.createTokenExchanges([MAKER_TOKEN, TAKER_TOKEN]).awaitTransactionSuccessAsync()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('throws if tokens are the same', function () { return __awaiter(_this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
tx = testContract.sampleSellsFromUniswap(MAKER_TOKEN, MAKER_TOKEN, []).callAsync();
return [2 /*return*/, contracts_test_utils_1.expect(tx).to.revertWith(INVALID_TOKEN_PAIR_ERROR)];
});
}); });
it('can return no quotes', function () { return __awaiter(_this, void 0, void 0, function () {
var quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.sampleSellsFromUniswap(TAKER_TOKEN, MAKER_TOKEN, []).callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('can quote token -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(TAKER_TOKEN, MAKER_TOKEN, ['Uniswap'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote token -> ETH', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(TAKER_TOKEN, WETH_ADDRESS, ['Uniswap'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> ETH fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote ETH -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
_a = __read(getDeterministicSellQuotes(WETH_ADDRESS, TAKER_TOKEN, ['Uniswap'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if ETH -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if no exchange exists for the maker token', function () { return __awaiter(_this, void 0, void 0, function () {
var nonExistantToken, sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
nonExistantToken = contracts_test_utils_1.randomAddress();
sampleAmounts = getSampleAmounts(TAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(TAKER_TOKEN, nonExistantToken, sampleAmounts)
.callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if no exchange exists for the taker token', function () { return __awaiter(_this, void 0, void 0, function () {
var nonExistantToken, sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
nonExistantToken = contracts_test_utils_1.randomAddress();
sampleAmounts = getSampleAmounts(nonExistantToken);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, testContract
.sampleSellsFromUniswap(nonExistantToken, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
});
contracts_test_utils_1.blockchainTests.resets('sampleBuysFromUniswap()', function () {
before(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.createTokenExchanges([MAKER_TOKEN, TAKER_TOKEN]).awaitTransactionSuccessAsync()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('throws if tokens are the same', function () { return __awaiter(_this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
tx = testContract.sampleBuysFromUniswap(MAKER_TOKEN, MAKER_TOKEN, []).callAsync();
return [2 /*return*/, contracts_test_utils_1.expect(tx).to.revertWith(INVALID_TOKEN_PAIR_ERROR)];
});
}); });
it('can return no quotes', function () { return __awaiter(_this, void 0, void 0, function () {
var quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, testContract.sampleBuysFromUniswap(TAKER_TOKEN, MAKER_TOKEN, []).callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq([]);
return [2 /*return*/];
}
});
}); });
it('can quote token -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
_a = __read(getDeterministicBuyQuotes(TAKER_TOKEN, MAKER_TOKEN, ['Uniswap'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(TAKER_TOKEN, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote token -> ETH', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
_a = __read(getDeterministicBuyQuotes(TAKER_TOKEN, WETH_ADDRESS, ['Uniswap'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if token -> ETH fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(TAKER_TOKEN, WETH_ADDRESS, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('can quote ETH -> token', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, _a, expectedQuotes, quotes;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
_a = __read(getDeterministicBuyQuotes(WETH_ADDRESS, TAKER_TOKEN, ['Uniswap'], sampleAmounts), 1), expectedQuotes = _a[0];
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _b.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if ETH -> token fails', function () { return __awaiter(_this, void 0, void 0, function () {
var sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, enableFailTriggerAsync()];
case 1:
_a.sent();
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(WETH_ADDRESS, TAKER_TOKEN, sampleAmounts)
.callAsync()];
case 2:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if no exchange exists for the maker token', function () { return __awaiter(_this, void 0, void 0, function () {
var nonExistantToken, sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
nonExistantToken = contracts_test_utils_1.randomAddress();
sampleAmounts = getSampleAmounts(nonExistantToken);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(TAKER_TOKEN, nonExistantToken, sampleAmounts)
.callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
it('returns zero if no exchange exists for the taker token', function () { return __awaiter(_this, void 0, void 0, function () {
var nonExistantToken, sampleAmounts, expectedQuotes, quotes;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
nonExistantToken = contracts_test_utils_1.randomAddress();
sampleAmounts = getSampleAmounts(MAKER_TOKEN);
expectedQuotes = _.times(sampleAmounts.length, function () { return contracts_test_utils_1.constants.ZERO_AMOUNT; });
return [4 /*yield*/, testContract
.sampleBuysFromUniswap(nonExistantToken, MAKER_TOKEN, sampleAmounts)
.callAsync()];
case 1:
quotes = _a.sent();
contracts_test_utils_1.expect(quotes).to.deep.eq(expectedQuotes);
return [2 /*return*/];
}
});
}); });
});
describe('batchCall()', function () {
it('can call one function', function () { return __awaiter(_this, void 0, void 0, function () {
var orders, signatures, expected, calls, r, actual;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN);
signatures = _.times(orders.length, function (i) { return utils_1.hexUtils.random(); });
expected = orders.map(getDeterministicFillableTakerAssetAmount);
calls = [
testContract.getOrderFillableTakerAssetAmounts(orders, signatures).getABIEncodedTransactionData(),
];
return [4 /*yield*/, testContract.batchCall(calls).callAsync()];
case 1:
r = _a.sent();
contracts_test_utils_1.expect(r).to.be.length(1);
actual = testContract.getABIDecodedReturnData('getOrderFillableTakerAssetAmounts', r[0]);
contracts_test_utils_1.expect(actual).to.deep.eq(expected);
return [2 /*return*/];
}
});
}); });
it('can call two functions', function () { return __awaiter(_this, void 0, void 0, function () {
var numOrders, orders, signatures, expecteds, calls, r;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
numOrders = _.random(1, 10);
orders = _.times(2, function () { return createOrders(MAKER_TOKEN, TAKER_TOKEN, numOrders); });
signatures = _.times(numOrders, function (i) { return utils_1.hexUtils.random(); });
expecteds = [
orders[0].map(getDeterministicFillableTakerAssetAmount),
orders[1].map(getDeterministicFillableMakerAssetAmount),
];
calls = [
testContract.getOrderFillableTakerAssetAmounts(orders[0], signatures).getABIEncodedTransactionData(),
testContract.getOrderFillableMakerAssetAmounts(orders[1], signatures).getABIEncodedTransactionData(),
];
return [4 /*yield*/, testContract.batchCall(calls).callAsync()];
case 1:
r = _a.sent();
contracts_test_utils_1.expect(r).to.be.length(2);
contracts_test_utils_1.expect(testContract.getABIDecodedReturnData('getOrderFillableTakerAssetAmounts', r[0])).to.deep.eq(expecteds[0]);
contracts_test_utils_1.expect(testContract.getABIDecodedReturnData('getOrderFillableMakerAssetAmounts', r[1])).to.deep.eq(expecteds[1]);
return [2 /*return*/];
}
});
}); });
it('can make recursive calls', function () { return __awaiter(_this, void 0, void 0, function () {
var numOrders, orders, signatures, expected, r;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
numOrders = _.random(1, 10);
orders = createOrders(MAKER_TOKEN, TAKER_TOKEN, numOrders);
signatures = _.times(numOrders, function (i) { return utils_1.hexUtils.random(); });
expected = orders.map(getDeterministicFillableTakerAssetAmount);
return [4 /*yield*/, testContract
.batchCall([
testContract
.batchCall([
testContract
.getOrderFillableTakerAssetAmounts(orders, signatures)
.getABIEncodedTransactionData(),
])
.getABIEncodedTransactionData(),
])
.callAsync()];
case 1:
r = _a.sent();
contracts_test_utils_1.expect(r).to.be.length(1);
r = testContract.getABIDecodedReturnData('batchCall', r[0]);
contracts_test_utils_1.expect(r).to.be.length(1);
contracts_test_utils_1.expect(testContract.getABIDecodedReturnData('getOrderFillableTakerAssetAmounts', r[0])).to.deep.eq(expected);
return [2 /*return*/];
}
});
}); });
});
});
//# sourceMappingURL=erc20-bridge-sampler.js.map