Skip to content

Commit

Permalink
Add Merlin chain (#591)
Browse files Browse the repository at this point in the history
  • Loading branch information
Doctor-Cyclone authored Mar 22, 2024
2 parents 1fa7a01 + a549448 commit 9112069
Show file tree
Hide file tree
Showing 14 changed files with 83 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rubic-sdk",
"version": "5.7.2",
"version": "5.8.0",
"description": "Simplify dApp creation",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
7 changes: 7 additions & 0 deletions src/common/tokens/constants/native-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -418,5 +418,12 @@ export const nativeTokensList: Record<BlockchainName, Token> = {
name: 'ZEN',
symbol: 'ZEN',
decimals: 18
}),
[BLOCKCHAIN_NAME.MERLIN]: new Token({
blockchain: BLOCKCHAIN_NAME.MERLIN,
address: EvmWeb3Pure.nativeTokenAddress,
name: 'Bitcoin',
symbol: 'BTC',
decimals: 18
})
};
1 change: 1 addition & 0 deletions src/common/tokens/constants/wrapped-addresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export const wrappedAddress: Partial<Record<EvmBlockchainName, string>> = {
[BLOCKCHAIN_NAME.BLAST]: '0x4300000000000000000000000000000000000004',
[BLOCKCHAIN_NAME.KROMA]: '0x4200000000000000000000000000000000000001',
[BLOCKCHAIN_NAME.HORIZEN_EON]: '0xF5cB8652a84329A2016A386206761f455bCEDab6',
[BLOCKCHAIN_NAME.MERLIN]: '0xF6D226f9Dc15d9bB51182815b320D3fBE324e1bA',
// Testnet
[BLOCKCHAIN_NAME.GOERLI]: '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6',
[BLOCKCHAIN_NAME.SCROLL_SEPOLIA]: '0x5300000000000000000000000000000000000004',
Expand Down
7 changes: 7 additions & 0 deletions src/common/tokens/constants/wrapped-native-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -401,5 +401,12 @@ export const wrappedNativeTokensList: Partial<Record<EvmBlockchainName, Token>>
name: 'Wrapped ZEN',
symbol: 'WZEN',
decimals: 18
}),
[BLOCKCHAIN_NAME.MERLIN]: new Token({
blockchain: BLOCKCHAIN_NAME.MERLIN,
address: '0xF6D226f9Dc15d9bB51182815b320D3fBE324e1bA',
name: 'Wrapped BTC',
symbol: 'WBTC',
decimals: 18
})
};
3 changes: 2 additions & 1 deletion src/core/blockchain/models/blockchain-name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ export const EVM_BLOCKCHAIN_NAME = {
ZETACHAIN: 'ZETACHAIN',
BLAST: 'BLAST',
KROMA: 'KROMA',
HORIZEN_EON: 'HORIZEN_EON'
HORIZEN_EON: 'HORIZEN_EON',
MERLIN: 'MERLIN'
} as const;

export const BLOCKCHAIN_NAME = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ export const blockchainId: Record<BlockchainName, number> = {
[BLOCKCHAIN_NAME.BLAST]: 81457,
[BLOCKCHAIN_NAME.KROMA]: 255,
[BLOCKCHAIN_NAME.HORIZEN_EON]: 7332,
[BLOCKCHAIN_NAME.MERLIN]: 4200,
// Tesnents
[BLOCKCHAIN_NAME.GOERLI]: 5,
[BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN_TESTNET]: 87,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@ export const MULTICALL_ADDRESSES: Record<Web3PublicSupportedBlockchain, string>
[BLOCKCHAIN_NAME.ZETACHAIN]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.HOLESKY]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.BLAST]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.HORIZEN_EON]: '0x4ea6779581bDAcd376724A52070bE89FfB74eC39'
[BLOCKCHAIN_NAME.HORIZEN_EON]: '0x4ea6779581bDAcd376724A52070bE89FfB74eC39',
[BLOCKCHAIN_NAME.MERLIN]: '0x45CFd6FB7999328F189aaD2739Fba4Be6C45E5bf'
};
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export const symbiosisCrossChainSupportedBlockchains = [
BLOCKCHAIN_NAME.METIS,
BLOCKCHAIN_NAME.BITCOIN,
BLOCKCHAIN_NAME.BLAST,
BLOCKCHAIN_NAME.MERLIN,
// Testnets
BLOCKCHAIN_NAME.GOERLI,
BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN_TESTNET,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ export class SymbiosisCrossChainProvider extends CrossChainProvider {
}

private handleMinAmountError(err: SymbiosisError): RubicSdkError | null {
const msg = err.error.message || '';
const msg = err.error?.message || '';

if (msg.includes('too low')) {
const [, minAmount] = msg.toLowerCase().split('min amount: ') as [string, string];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { IzumiBscProvider } from 'src/features/on-chain/calculation-manager/prov
import { IzumiLineaProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/linea/izumi-linea/izumi-linea-provider';
import { IzumiMantaPacificProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/manta-pacific/izumi-manta-pacific/izumi-manta-pacific-provider';
import { IzumiMantleProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/mantle/izumi-mantle/izumi-mantle-provider';
import { MerlinSwapMerlinProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/merlin/merlin-swap/merlin-swap-merlin-provider';
import { IzumiZetachainProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/zetachain/izumi-zetachain/izumi-zetachain-provider';
import { IzumiZksyncProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/zksync/izumi-zksync/izumi-zksync-provider';

Expand All @@ -18,6 +19,7 @@ export const izumiTradeProviders = [
IzumiMantaPacificProvider,
IzumiZetachainProvider,
IzumiKromaProvider,
IzumiArbitrumProvider
IzumiArbitrumProvider,
MerlinSwapMerlinProvider
// IzumiBlastProvider
];
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export const ON_CHAIN_TRADE_TYPE = {

MAVERICK: 'MAVERICK',
MDEX: 'MDEX',
MERLIN_SWAP: 'MERLIN_SWAP',
MESH_SWAP: 'MESH_SWAP',
MM_FINANCE: 'MM_FINANCE',
MOJITO_SWAP: 'MOJITO_SWAP',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ export abstract class IzumiProvider extends EvmOnChainProvider {
} catch {}
}

return new IzumiTrade(tradeStruct, fullOptions.providerAddress);
return this.getProviderTrade(tradeStruct, fullOptions.providerAddress);
}

public getProviderTrade(tradeStruct: IzumiTradeStruct, providerAddress: string): IzumiTrade {
return new IzumiTrade(tradeStruct, providerAddress);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { wrappedNativeTokensList } from 'src/common/tokens/constants/wrapped-native-tokens';
import { BLOCKCHAIN_NAME } from 'src/core/blockchain/models/blockchain-name';
import {
ON_CHAIN_TRADE_TYPE,
OnChainTradeType
} from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type';
import { IzumiProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/common/izumi-abstract/izumi-provider';
import { IzumiTrade } from 'src/features/on-chain/calculation-manager/providers/dexes/common/izumi-abstract/izumi-trade';
import { IzumiTradeStruct } from 'src/features/on-chain/calculation-manager/providers/dexes/common/izumi-abstract/models/izumi-trade-struct';
import { MerlinSwapMerlinTrade } from 'src/features/on-chain/calculation-manager/providers/dexes/merlin/merlin-swap/merlin-swap-merlin-trade';

export class MerlinSwapMerlinProvider extends IzumiProvider {
public readonly blockchain = BLOCKCHAIN_NAME.MERLIN;

protected readonly dexAddress = '0x1aFa5D7f89743219576Ef48a9826261bE6378a68';

public get type(): OnChainTradeType {
return ON_CHAIN_TRADE_TYPE.MERLIN_SWAP;
}

public getProviderTrade(tradeStruct: IzumiTradeStruct, providerAddress: string): IzumiTrade {
return new MerlinSwapMerlinTrade(tradeStruct, providerAddress);
}

protected readonly config = {
maxTransitTokens: 2,
quoterAddress: '0xD5f164e44057e8004266cc2EABc670cDFa3E0Fd2',
liquidityManagerAddress: '0x261507940678Bf22d8ee96c31dF4a642294c0467',
routingTokenAddresses: [
wrappedNativeTokensList[BLOCKCHAIN_NAME.MERLIN]!.address, // WBTC
'0x480e158395cc5b41e5584347c495584ca2caf78d', // VOYA
'0x7a677e59dc2c8a42d6af3a62748c5595034a008b', // HUHU
'0x0a3bb08b3a15a19b4de82f8acfc862606fb69a2d', // iUSD
'0xb880fd278198bd590252621d4cd071b1842e9bcd', // M-BTC
'0x62e99191071fc1c5947cf1e21aa95708dcc51adb' // Owl
],
multicallAddress: '0x7a524c7e82874226F0b51aade60A1BE4D430Cf0F',
supportedFees: [10000, 3000, 500]
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {
ON_CHAIN_TRADE_TYPE,
OnChainTradeType
} from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type';
import { IzumiTrade } from 'src/features/on-chain/calculation-manager/providers/dexes/common/izumi-abstract/izumi-trade';

export class MerlinSwapMerlinTrade extends IzumiTrade {
public get type(): OnChainTradeType {
return ON_CHAIN_TRADE_TYPE.MERLIN_SWAP;
}
}

0 comments on commit 9112069

Please sign in to comment.