Add BiSwap (as UniV2 clone) on BSC (#471)

* Add BiSwap (as UniV2 clone) on BSC

* changelog PR number

* add BSW

* remove BiSwap from transformer_utils

* Do not initialize BalancerV2SwapInfoCache on unsupported chains [TKR-365] (#472)

* Do not initialize BalancerV2SwapInfoCache on unsupported chains
* Update CHANGELOG.json

* Updated CHANGELOGS & MD docs

* Publish

 - @0x/asset-swapper@16.57.3

* chore: Decomission SnowSwap [TKR-356] (#468)

* Decomission SnowSwap

* SnowSwap doesn't have much liquidity anymore (the largest pool has ~$50k)

* Update CHANGELOG.json

* Update CHANGELOG.json

* chore: Offboard Swerve Finance and LinkSwap [TKR-356] (#469)

* Offboard swerve

* Update CHANGELOG.json

* Offboard LinkSwap

* Remove unused import

* Fix CHANGELOG.json

* chore: Offboard Eth2Dai [TKR-356] (#470)

* Offboard Eth2Dai

* Update CHANGELOG.json

* feat: add IRfqClient (#467)

* add message to changelog for #467 (#474)

* Update saddle mainnet pools (#450)

* Add saddle v2 pools

* remove outdated pools

* add two saddle meta pools

* forgot changelog

* remove saddle metapools

* changelog update

* Fix a lint issue (#475)

* Updated CHANGELOGS & MD docs

* Publish

 - @0x/asset-swapper@16.59.0

* Add BiSwap (as UniV2 clone) on BSC

* rebase new changes for balv2, up changelog, quotes working

* remove Biswap from transformer_utils once again

Co-authored-by: Kyu <kyuhyun217@gmail.com>
Co-authored-by: Github Actions <github-actions@github.com>
Co-authored-by: phil-ociraptor <phil@0x.org>
Co-authored-by: Cece Z <me@cecez.xyz>
Co-authored-by: Noah Khamliche <noah@0xproject.com>
This commit is contained in:
Ido Kleinman 2022-05-16 17:11:23 -07:00 committed by GitHub
parent 6b2856424a
commit f55eaa867b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 1 deletions

View File

@ -1,4 +1,13 @@
[ [
{
"version": "16.60.0",
"changes": [
{
"note": "Add BiSwap on BSC",
"pr": 467
}
]
},
{ {
"version": "16.59.0", "version": "16.59.0",
"changes": [ "changes": [

View File

@ -6,6 +6,7 @@ import {
APESWAP_ROUTER_BY_CHAIN_ID, APESWAP_ROUTER_BY_CHAIN_ID,
BAKERYSWAP_ROUTER_BY_CHAIN_ID, BAKERYSWAP_ROUTER_BY_CHAIN_ID,
BELT_BSC_INFOS, BELT_BSC_INFOS,
BISWAP_ROUTER_BY_CHAIN_ID,
CAFESWAP_ROUTER_BY_CHAIN_ID, CAFESWAP_ROUTER_BY_CHAIN_ID,
CHEESESWAP_ROUTER_BY_CHAIN_ID, CHEESESWAP_ROUTER_BY_CHAIN_ID,
COMETHSWAP_ROUTER_BY_CHAIN_ID, COMETHSWAP_ROUTER_BY_CHAIN_ID,
@ -553,7 +554,8 @@ export function uniswapV2LikeRouterAddress(
| ERC20BridgeSource.UbeSwap | ERC20BridgeSource.UbeSwap
| ERC20BridgeSource.MorpheusSwap | ERC20BridgeSource.MorpheusSwap
| ERC20BridgeSource.SpookySwap | ERC20BridgeSource.SpookySwap
| ERC20BridgeSource.SpiritSwap, | ERC20BridgeSource.SpiritSwap
| ERC20BridgeSource.BiSwap,
): string { ): string {
switch (source) { switch (source) {
case ERC20BridgeSource.UniswapV2: case ERC20BridgeSource.UniswapV2:
@ -602,6 +604,8 @@ export function uniswapV2LikeRouterAddress(
return SPOOKYSWAP_ROUTER_BY_CHAIN_ID[chainId]; return SPOOKYSWAP_ROUTER_BY_CHAIN_ID[chainId];
case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpiritSwap:
return SPIRITSWAP_ROUTER_BY_CHAIN_ID[chainId]; return SPIRITSWAP_ROUTER_BY_CHAIN_ID[chainId];
case ERC20BridgeSource.BiSwap:
return BISWAP_ROUTER_BY_CHAIN_ID[chainId];
default: default:
throw new Error(`Unknown UniswapV2 like source ${source}`); throw new Error(`Unknown UniswapV2 like source ${source}`);
} }

View File

@ -146,6 +146,7 @@ export const SELL_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId<SourceFilters>(
ERC20BridgeSource.JetSwap, ERC20BridgeSource.JetSwap,
ERC20BridgeSource.ACryptos, ERC20BridgeSource.ACryptos,
ERC20BridgeSource.KyberDmm, ERC20BridgeSource.KyberDmm,
ERC20BridgeSource.BiSwap,
]), ]),
[ChainId.Polygon]: new SourceFilters([ [ChainId.Polygon]: new SourceFilters([
ERC20BridgeSource.SushiSwap, ERC20BridgeSource.SushiSwap,
@ -289,6 +290,7 @@ export const BUY_SOURCE_FILTER_BY_CHAIN_ID = valueByChainId<SourceFilters>(
ERC20BridgeSource.ACryptos, ERC20BridgeSource.ACryptos,
ERC20BridgeSource.KyberDmm, ERC20BridgeSource.KyberDmm,
ERC20BridgeSource.Synapse, ERC20BridgeSource.Synapse,
ERC20BridgeSource.BiSwap,
]), ]),
[ChainId.Polygon]: new SourceFilters([ [ChainId.Polygon]: new SourceFilters([
ERC20BridgeSource.SushiSwap, ERC20BridgeSource.SushiSwap,
@ -518,6 +520,7 @@ export const BSC_TOKENS = {
renBTC: '0xfce146bf3146100cfe5db4129cf6c82b0ef4ad8c', renBTC: '0xfce146bf3146100cfe5db4129cf6c82b0ef4ad8c',
pBTC: '0xed28a457a5a76596ac48d87c0f577020f6ea1c4c', pBTC: '0xed28a457a5a76596ac48d87c0f577020f6ea1c4c',
nUSD: '0x23b891e5c62e0955ae2bd185990103928ab817b3', nUSD: '0x23b891e5c62e0955ae2bd185990103928ab817b3',
BSW: '0x965F527D9159dCe6288a2219DB51fc6Eef120dD1',
}; };
export const POLYGON_TOKENS = { export const POLYGON_TOKENS = {
@ -1940,6 +1943,13 @@ export const KYBER_DMM_ROUTER_BY_CHAIN_ID = valueByChainId<string>(
NULL_ADDRESS, NULL_ADDRESS,
); );
export const BISWAP_ROUTER_BY_CHAIN_ID = valueByChainId<string>(
{
[ChainId.BSC]: '0x3a6d8ca21d1cf76f653a67577fa0d27453350dd8',
},
NULL_ADDRESS,
);
export const MOONISWAP_REGISTRIES_BY_CHAIN_ID = valueByChainId( export const MOONISWAP_REGISTRIES_BY_CHAIN_ID = valueByChainId(
{ {
[ChainId.Mainnet]: ['0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643'], [ChainId.Mainnet]: ['0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643'],
@ -2389,6 +2399,7 @@ export const DEFAULT_GAS_SCHEDULE: Required<FeeSchedule> = {
[ERC20BridgeSource.SushiSwap]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.SushiSwap]: uniswapV2CloneGasSchedule,
[ERC20BridgeSource.CryptoCom]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.CryptoCom]: uniswapV2CloneGasSchedule,
[ERC20BridgeSource.ShibaSwap]: uniswapV2CloneGasSchedule, [ERC20BridgeSource.ShibaSwap]: uniswapV2CloneGasSchedule,
[ERC20BridgeSource.BiSwap]: uniswapV2CloneGasSchedule,
[ERC20BridgeSource.Balancer]: () => 120e3, [ERC20BridgeSource.Balancer]: () => 120e3,
[ERC20BridgeSource.BalancerV2]: (fillData?: FillData) => { [ERC20BridgeSource.BalancerV2]: (fillData?: FillData) => {
return 100e3 + ((fillData as BalancerV2BatchSwapFillData).swapSteps.length - 1) * 50e3; return 100e3 + ((fillData as BalancerV2BatchSwapFillData).swapSteps.length - 1) * 50e3;

View File

@ -201,6 +201,8 @@ export function getErc20BridgeSourceToBridgeSource(source: ERC20BridgeSource): s
return encodeBridgeSourceId(BridgeProtocol.AaveV2, 'Geist'); return encodeBridgeSourceId(BridgeProtocol.AaveV2, 'Geist');
case ERC20BridgeSource.MobiusMoney: case ERC20BridgeSource.MobiusMoney:
return encodeBridgeSourceId(BridgeProtocol.Nerve, 'MobiusMoney'); return encodeBridgeSourceId(BridgeProtocol.Nerve, 'MobiusMoney');
case ERC20BridgeSource.BiSwap:
return encodeBridgeSourceId(BridgeProtocol.UniswapV2, 'BiSwap');
default: default:
throw new Error(AggregationError.NoBridgeForSource); throw new Error(AggregationError.NoBridgeForSource);
} }
@ -290,6 +292,7 @@ export function createBridgeDataForBridgeOrder(order: OptimizedMarketBridgeOrder
case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpiritSwap:
case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.SpookySwap:
case ERC20BridgeSource.MorpheusSwap: case ERC20BridgeSource.MorpheusSwap:
case ERC20BridgeSource.BiSwap:
const uniswapV2FillData = (order as OptimizedMarketBridgeOrder<UniswapV2FillData>).fillData; const uniswapV2FillData = (order as OptimizedMarketBridgeOrder<UniswapV2FillData>).fillData;
bridgeData = encoder.encode([uniswapV2FillData.router, uniswapV2FillData.tokenAddressPath]); bridgeData = encoder.encode([uniswapV2FillData.router, uniswapV2FillData.tokenAddressPath]);
break; break;
@ -497,6 +500,7 @@ export const BRIDGE_ENCODERS: {
[ERC20BridgeSource.SpiritSwap]: routerAddressPathEncoder, [ERC20BridgeSource.SpiritSwap]: routerAddressPathEncoder,
[ERC20BridgeSource.SpookySwap]: routerAddressPathEncoder, [ERC20BridgeSource.SpookySwap]: routerAddressPathEncoder,
[ERC20BridgeSource.MorpheusSwap]: routerAddressPathEncoder, [ERC20BridgeSource.MorpheusSwap]: routerAddressPathEncoder,
[ERC20BridgeSource.BiSwap]: routerAddressPathEncoder,
// Celo // Celo
[ERC20BridgeSource.UbeSwap]: routerAddressPathEncoder, [ERC20BridgeSource.UbeSwap]: routerAddressPathEncoder,
// BSC // BSC

View File

@ -1395,6 +1395,7 @@ export class SamplerOperations {
case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpiritSwap:
case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.SpookySwap:
case ERC20BridgeSource.MorpheusSwap: case ERC20BridgeSource.MorpheusSwap:
case ERC20BridgeSource.BiSwap:
const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source);
if (!isValidAddress(uniLikeRouter)) { if (!isValidAddress(uniLikeRouter)) {
return []; return [];
@ -1701,6 +1702,7 @@ export class SamplerOperations {
case ERC20BridgeSource.SpiritSwap: case ERC20BridgeSource.SpiritSwap:
case ERC20BridgeSource.SpookySwap: case ERC20BridgeSource.SpookySwap:
case ERC20BridgeSource.MorpheusSwap: case ERC20BridgeSource.MorpheusSwap:
case ERC20BridgeSource.BiSwap:
const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source); const uniLikeRouter = uniswapV2LikeRouterAddress(this.chainId, source);
if (!isValidAddress(uniLikeRouter)) { if (!isValidAddress(uniLikeRouter)) {
return []; return [];

View File

@ -70,6 +70,7 @@ export enum ERC20BridgeSource {
// BSC only // BSC only
PancakeSwap = 'PancakeSwap', PancakeSwap = 'PancakeSwap',
PancakeSwapV2 = 'PancakeSwap_V2', PancakeSwapV2 = 'PancakeSwap_V2',
BiSwap = 'BiSwap',
BakerySwap = 'BakerySwap', BakerySwap = 'BakerySwap',
Nerve = 'Nerve', Nerve = 'Nerve',
Belt = 'Belt', Belt = 'Belt',