@crypto-dex-sdk/parachains-bifrost
Version:
Zenlink Parachains Impl for Bifrost
305 lines (299 loc) • 8.65 kB
JavaScript
// libs/constants/address.ts
import { addressToZenlinkAssetId, isZenlinkAddress } from "@crypto-dex-sdk/format";
var PAIR_ADDRESSES = {
// BNC-KSM
"2001-0-0-2001-2-516": {
address: "2001-2-2216203126272",
account: "eCSrvaystgdffuJxPVZUZmUBqiz2nXKWuUWHQBPqvJFeDh1"
},
// KSM-AUSD
"2001-2-516-2001-2-770": {
address: "2001-2-3307158636032",
account: "eCSrvaystgdffuJxPVTJc2eQMgp9PnuPh7mMaQ6KbTynFRM"
},
// KSM-VSKSM
"2001-2-516-2001-2-1028": {
address: "2001-2-4415260198400",
account: "eCSrvaystgdffuJxPVW4UMxAXMuTpU3jkCJeiqppyfoi6SG"
},
// BNC-ZLK
"2001-0-0-2001-2-519": {
address: "2001-2-2229088028160",
account: "eCSrvaystgdffuJxPVU5NQfnXRohvjWF9u8VaeUWRg1mn1y"
},
// KAR-ZLK
"2001-2-518-2001-2-519": {
address: "2001-2-2229121975808",
account: "eCSrvaystgdffuJxPVRWqnxeKZJ3dWu8qJYidgLLStXXkiG"
},
// KSM-RMRK
"2001-2-516-2001-2-521": {
address: "2001-2-2237711779328",
account: "eCSrvaystgdffuJxPVU9u7Vv2AVjXTAEwbuujLggS6t6HoE"
},
// VKSM-KSM
"2001-2-260-2001-2-516": {
address: "2001-2-2216220165632",
account: "eCSrvaystgdffuJxPVYKf8H8UYnHGNRdVGUvj1SWSiatWMq"
},
// BNC-USDT
"2001-0-0-2001-2-2048": {
address: "2001-2-8796093023744",
account: "eCSrvaystgdffuJxPVN8LrN9JeAtrYVV1usKGABuUhYdqYw"
},
// BNC-VBNC
"2001-0-0-2001-2-257": {
address: "2001-2-1103806596608",
account: "eCSrvaystgdffuJxPVZ7pEK8ZMmZ7Nwg2144eZYgWdx4g6v"
},
// KSM-KBTC
"2001-2-516-2001-2-2050": {
address: "2001-2-8804716774912",
account: "eCSrvaystgdffuJxPVPy4UFedBDC5ZVsx7jsR8jPLZkyno1"
},
// vKSM-USDT
"2001-2-260-2001-2-2048": {
address: "2001-2-8796110063104",
account: "eCSrvaystgdffuJxPVNFYzcsVNZLG9E8TgSkUG1GcjD519E"
},
// MOVR-VMOVR
"2001-2-266-2001-2-522": {
address: "2001-2-2241990362624",
account: "eCSrvaystgdffuJxPVQfmrQY3XBfm6FPSBj1nJwmT48ASum"
},
// BNC-DOT
"2030-0-0-2030-2-2048": {
address: "2030-2-8796093023744",
account: "eCSrvaystgdffuJxPVTne2cjBdWDh6yPvzt8RdkFdihjqS1"
},
// GLMR-vGLMR
"2030-2-2049-2030-2-2305": {
address: "2030-2-9900033902080",
account: "eCSrvaystgdffuJxPVbKj318eoUb12vu85hWk7CQFktdf79"
},
// vDOT-vsDOT
"2030-2-2304-2030-2-2560": {
address: "2030-2-10995267274240",
account: "eCSrvaystgdffuJxPVS4SfFvaM26m6tAxwDLPvawBAYbnJd"
},
// FIL-vFIL
"2030-2-2052-2030-2-2308": {
address: "2030-2-9912919000576",
account: "eCSrvaystgdffuJxPVPVePp3f8Zegp8AuNsTv4FApKHtAt9"
},
// DOT-vDOT
"2030-2-2048-2030-2-2304": {
address: "2030-2-9895738869248",
account: "eCSrvaystgdffuJxPVRct68qJUZs1sFz762d7d37KJvb7Pz"
}
};
var pairAddressToAssets = Object.entries(PAIR_ADDRESSES).reduce(
(acc, [assetsAddress, { address }]) => {
const addresses = (assetsAddress.match(/\d+(-\d+)(-\d+)/g) || []).filter(isZenlinkAddress);
const assetsId = addresses.map(addressToZenlinkAssetId);
acc[address] = assetsId;
return acc;
},
{}
);
// libs/formats/currency.ts
import { ParachainId as ParachainId2 } from "@crypto-dex-sdk/chain";
import { addressToZenlinkAssetId as addressToZenlinkAssetId2, zenlinkAssetIdToAddress as zenlinkAssetIdToAddress2 } from "@crypto-dex-sdk/format";
// libs/parseNodePrimitivesCurrency.ts
import { ParachainId } from "@crypto-dex-sdk/chain";
import { zenlinkAssetIdToAddress } from "@crypto-dex-sdk/format";
var NodeCurrencyId = {
0: "Native",
1: "XCM",
2: "Stellar",
3: "ZenlinkLPToken"
};
function parseAssetU8(assetIndex) {
return (assetIndex & 65280) >> 8;
}
function parseAssetType(assetIndex) {
return assetIndex & 255;
}
function parseNodePrimitivesCurrency2(asset) {
const { chainId, assetIndex } = asset;
if (chainId === ParachainId.BIFROST_KUSAMA || chainId === ParachainId.BIFROST_POLKADOT)
return parseNodePrimitivesCurrency(asset);
const assetTypeU8 = parseAssetU8(assetIndex);
const assetSymbol = parseAssetType(assetIndex);
const nodeCurrencyId = NodeCurrencyId[assetTypeU8];
if (!nodeCurrencyId)
throw new Error("invalid asset");
if (nodeCurrencyId === "ZenlinkLPToken") {
const [asset0, asset1] = pairAddressToAssets[zenlinkAssetIdToAddress(asset)];
const asset0Type = parseAssetType(asset0.assetIndex).toString();
const asset0U8 = parseAssetU8(asset0.assetIndex);
const asset1Type = parseAssetType(asset1.assetIndex).toString();
const asset1U8 = parseAssetU8(asset1.assetIndex);
return {
[nodeCurrencyId]: [
asset0Type,
asset0U8,
asset1Type,
asset1U8
]
};
}
return { [nodeCurrencyId]: assetSymbol };
}
// libs/formats/currency.ts
var NodeCurrencyId2 = {
0: "Native",
1: "VToken",
2: "Token",
3: "Stable",
4: "VSToken",
5: "VSBond",
6: "LPToken",
7: "ForeignAsset",
8: "Token2",
9: "VToken2",
10: "VSToken2",
11: "VSBond2",
12: "StableLpToken"
};
var NodeCurrencyIdType = {
Native: 0,
VToken: 1,
Token: 2,
Stable: 3,
VSToken: 4,
VSBond: 5,
LPToken: 6,
ForeignAsset: 7,
Token2: 8,
VToken2: 9,
VSToken2: 10,
VSBond2: 11,
StableLpToken: 12
};
var NodeTokenSymbol = {
0: "ASG",
1: "BNC",
2: "KUSD",
3: "DOT",
4: "KSM",
5: "ETH",
6: "KAR",
7: "ZLK",
8: "PHA",
9: "RMRK",
10: "MOVR"
};
var NodeTokenSymbolIndex = {
ASG: 0,
BNC: 1,
KUSD: 2,
DOT: 3,
KSM: 4,
ETH: 5,
KAR: 6,
ZLK: 7,
PHA: 8,
RMRK: 9,
MOVR: 10
};
var TokenType2 = [7, 8, 9, 10, 12];
function parseAssetU82(assetIndex) {
return (assetIndex & 65280) >> 8;
}
function parseAssetType2(assetIndex) {
return assetIndex & 255;
}
function parseToTokenIndex(type, index) {
if (type === 0)
return 0;
return (type << 8) + index;
}
function parseSymbolOrIndexToIndex(symbolIndex) {
return typeof symbolIndex === "number" ? symbolIndex : NodeTokenSymbolIndex[symbolIndex];
}
function parseNodePrimitivesCurrency(asset) {
const { chainId, assetIndex } = asset;
if (chainId === ParachainId2.AMPLITUDE || chainId === ParachainId2.PENDULUM)
return parseNodePrimitivesCurrency2(asset);
const assetTypeU8 = parseAssetU82(assetIndex);
const nodeCurrencyId = NodeCurrencyId2[assetTypeU8];
if (!nodeCurrencyId)
throw new Error("invalid asset");
if (TokenType2.includes(assetTypeU8))
return { [nodeCurrencyId]: parseAssetType2(assetIndex) };
if (nodeCurrencyId === "LPToken") {
const [asset0, asset1] = pairAddressToAssets[zenlinkAssetIdToAddress2(asset)];
const asset0U8 = parseAssetU82(asset0.assetIndex);
const asset1U8 = parseAssetU82(asset1.assetIndex);
return {
[nodeCurrencyId]: [
NodeTokenSymbol[parseAssetType2(asset0.assetIndex)],
asset0U8,
NodeTokenSymbol[parseAssetType2(asset1.assetIndex)],
asset1U8
]
};
}
return { [nodeCurrencyId]: NodeTokenSymbol[parseAssetType2(assetIndex)] };
}
function addressToNodeCurrency(address) {
return parseNodePrimitivesCurrency(addressToZenlinkAssetId2(address));
}
function nodePrimitiveCurrencyToZenlinkProtocolPrimitivesAssetId(currency, chainId) {
const [tokenType, tokenSymbol] = Object.entries(currency)[0];
const tokenIndex = parseToTokenIndex(
NodeCurrencyIdType[tokenType],
parseSymbolOrIndexToIndex(tokenSymbol)
);
return {
chainId,
assetType: tokenIndex === 0 ? 0 : 2,
assetIndex: tokenIndex
};
}
// libs/utils.ts
import { addressToZenlinkAssetId as addressToZenlinkAssetId3 } from "@crypto-dex-sdk/format";
function isNativeCurrency(currency) {
const { assetType, assetIndex } = addressToZenlinkAssetId3(currency.wrapped.address);
return assetType === 0 && assetIndex === 0;
}
// SwapRouter.ts
import { addressToZenlinkAssetId as addressToZenlinkAssetId4 } from "@crypto-dex-sdk/format";
var SwapRouter = class {
/**
* Cannot be constructed.
*/
constructor() {
}
static swapCallParameters(trade, options) {
const methodName = "swapExactAssetsForAssets";
const args = [
trade.inputAmount.quotient.toString(),
trade.minimumAmountOut(options.allowedSlippage).quotient.toString(),
trade.route.tokenPath.map((token) => addressToZenlinkAssetId4(token.address)),
options.recipient,
options.deadline
];
return {
extrinsic: [
options.api.tx.zenlinkProtocol[methodName](...args)
]
};
}
};
export {
NodeCurrencyId2 as NodeCurrencyId,
NodeCurrencyIdType,
NodeTokenSymbol,
NodeTokenSymbolIndex,
PAIR_ADDRESSES,
SwapRouter,
TokenType2,
addressToNodeCurrency,
isNativeCurrency,
nodePrimitiveCurrencyToZenlinkProtocolPrimitivesAssetId,
pairAddressToAssets,
parseNodePrimitivesCurrency,
parseSymbolOrIndexToIndex
};