protocol/packages/asset-swapper/test/contracts/bridge_adapter_test.ts
mzhu25 cf8fc0ff8e
Split up BridgeAdapter by chain [TKR-402] (#487)
* Split up BridgeAdapter by chain

* Fix BridgeProtocols enum

* Add isSupportedSource to bridge adapter contracts

* Add bridge adapter tests

* Fix FQT test
2022-05-25 14:18:24 -04:00

299 lines
12 KiB
TypeScript

import { ChainId } from '@0x/contract-addresses';
import { blockchainTests, constants, describe, expect } 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';
import { getErc20BridgeSourceToBridgeSource } from '../../src/utils/market_operation_utils/orders';
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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).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, `${source} is not supported`).to.be.true();
}),
);
});
});
});