Files
protocol/apps-node/api/test/asset-swapper/contracts/bridge_adapter_test.ts

305 lines
12 KiB
TypeScript

import { ChainId } from '@0x/contract-addresses';
import { blockchainTests } from '@0x/contracts-test-utils';
import {
artifacts as zeroExArtifacts,
AvalancheBridgeAdapterContract,
BSCBridgeAdapterContract,
CeloBridgeAdapterContract,
EthereumBridgeAdapterContract,
FantomBridgeAdapterContract,
OptimismBridgeAdapterContract,
PolygonBridgeAdapterContract,
} from '@0x/contracts-zero-ex';
import {
BUY_SOURCE_FILTER_BY_CHAIN_ID,
ERC20BridgeSource,
SELL_SOURCE_FILTER_BY_CHAIN_ID,
} from '../../../src/asset-swapper';
import { getErc20BridgeSourceToBridgeSource } from '../../../src/asset-swapper/utils/market_operation_utils/orders';
import { constants } from '../../../src/asset-swapper/constants';
import { expect } from 'chai';
blockchainTests('Bridge adapter source compatibility tests', (env) => {
describe('Avalanche', () => {
let adapter: AvalancheBridgeAdapterContract;
before(async () => {
adapter = await AvalancheBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.AvalancheBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Avalanche].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Avalanche].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
describe('BSC', () => {
let adapter: BSCBridgeAdapterContract;
before(async () => {
adapter = await BSCBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.BSCBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.BSC].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.BSC].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
describe('Celo', () => {
let adapter: CeloBridgeAdapterContract;
before(async () => {
adapter = await CeloBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.CeloBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Celo].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Celo].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
describe('Ethereum', () => {
let adapter: EthereumBridgeAdapterContract;
before(async () => {
adapter = await EthereumBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.EthereumBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Mainnet].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Mainnet].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
describe('Fantom', () => {
let adapter: FantomBridgeAdapterContract;
before(async () => {
adapter = await FantomBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.FantomBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Fantom].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Fantom].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
describe('Optimism', () => {
let adapter: OptimismBridgeAdapterContract;
before(async () => {
adapter = await OptimismBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.OptimismBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Optimism].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Optimism].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
describe('Polygon', () => {
let adapter: PolygonBridgeAdapterContract;
before(async () => {
adapter = await PolygonBridgeAdapterContract.deployFrom0xArtifactAsync(
zeroExArtifacts.PolygonBridgeAdapter,
env.provider,
env.txDefaults,
zeroExArtifacts,
constants.NULL_ADDRESS,
);
});
it('sell sources', async () => {
const sellSources = SELL_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Polygon].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
sellSources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
it('buy sources', async () => {
const buySources = BUY_SOURCE_FILTER_BY_CHAIN_ID[ChainId.Polygon].exclude([
ERC20BridgeSource.Native,
ERC20BridgeSource.MultiHop,
]).sources;
return Promise.all(
buySources.map(async (source) => {
const isSupported = await adapter
.isSupportedSource(getErc20BridgeSourceToBridgeSource(source))
.callAsync();
expect(isSupported).to.be.true;
}),
);
});
});
});