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:
		@@ -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": [
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 [];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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',
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user