UNPKG

@xlink-network/xlink-sdk

Version:
1 lines 8.46 kB
{"version":3,"sources":["../src/utils/types/TransferProphet.ts"],"sourcesContent":["import {\n SDKNumber,\n SDKNumberifyNestly,\n toSDKNumberOrUndefined,\n} from \"../../xlinkSdkUtils/types\"\nimport { BigNumber } from \"../BigNumber\"\nimport { last } from \"../arrayHelpers\"\nimport { KnownRoute } from \"../buildSupportedRoutes\"\nimport {\n applyTransferProphet,\n applyTransferProphets,\n composeTransferProphets,\n} from \"../feeRateHelpers\"\nimport { checkNever, isNotNull, OneOrMore } from \"../typeHelpers\"\nimport { KnownChainId, KnownTokenId } from \"./knownIds\"\n\nexport type TransferProphetAggregated<\n T extends Readonly<TransferProphet[]> = OneOrMore<TransferProphet>,\n> = TransferProphet & {\n transferProphets: T\n}\n\nexport type TransferProphet_Fee_Rate = {\n type: \"rate\"\n token: KnownTokenId.KnownToken\n rate: BigNumber\n minimumAmount: BigNumber\n}\nexport type TransferProphet_Fee_Fixed = {\n type: \"fixed\"\n token: KnownTokenId.KnownToken\n amount: BigNumber\n}\nexport type TransferProphet_Fee =\n | TransferProphet_Fee_Rate\n | TransferProphet_Fee_Fixed\n\nexport interface TransferProphet {\n isPaused: boolean\n bridgeToken: KnownTokenId.KnownToken\n minBridgeAmount: null | BigNumber\n maxBridgeAmount: null | BigNumber\n fees: TransferProphet_Fee[]\n}\n\nexport interface PublicTransferProphet\n extends Omit<SDKNumberifyNestly<TransferProphet>, \"bridgeToken\" | \"fees\"> {\n fromChain: KnownChainId.KnownChain\n fromToken: KnownTokenId.KnownToken\n toChain: KnownChainId.KnownChain\n toToken: KnownTokenId.KnownToken\n fromAmount: SDKNumber\n toAmount: SDKNumber\n fees: SDKNumberifyNestly<\n (\n | (TransferProphet_Fee_Rate & { amount: SDKNumber })\n | TransferProphet_Fee_Fixed\n )[]\n >\n}\n\nexport interface PublicTransferProphetAggregated<\n T extends readonly PublicTransferProphet[] = readonly PublicTransferProphet[],\n> extends SDKNumberifyNestly<PublicTransferProphet> {\n transferProphets: T\n}\n\nexport function transformFromPublicTransferProphet(\n transferProphet: PublicTransferProphet,\n): TransferProphet {\n return {\n isPaused: transferProphet.isPaused,\n bridgeToken: transferProphet.fromToken,\n fees: transferProphet.fees\n .flatMap(f =>\n f.type === \"rate\"\n ? {\n ...f,\n rate: BigNumber.from(f.rate),\n minimumAmount: BigNumber.from(f.minimumAmount),\n }\n : f.type === \"fixed\"\n ? {\n ...f,\n amount: BigNumber.from(f.amount),\n }\n : checkNever(f),\n )\n .filter(isNotNull),\n minBridgeAmount:\n transferProphet.minBridgeAmount == null\n ? null\n : BigNumber.from(transferProphet.minBridgeAmount),\n maxBridgeAmount:\n transferProphet.maxBridgeAmount == null\n ? null\n : BigNumber.from(transferProphet.maxBridgeAmount),\n }\n}\nexport function transformToPublicTransferProphet(\n route: KnownRoute,\n fromAmount: SDKNumber | BigNumber,\n transferProphet: TransferProphet,\n): PublicTransferProphet {\n const result = applyTransferProphet(\n transferProphet,\n BigNumber.from(fromAmount),\n )\n\n const fees: PublicTransferProphet[\"fees\"] = result.fees\n .map(f =>\n f.type === \"rate\"\n ? {\n ...f,\n rate: toSDKNumberOrUndefined(f.rate),\n minimumAmount: toSDKNumberOrUndefined(f.minimumAmount),\n amount: toSDKNumberOrUndefined(f.amount),\n }\n : f.type === \"fixed\"\n ? {\n ...f,\n amount: toSDKNumberOrUndefined(f.amount),\n }\n : checkNever(f),\n )\n .filter(isNotNull)\n\n return {\n ...route,\n fromAmount: toSDKNumberOrUndefined(fromAmount),\n toAmount: toSDKNumberOrUndefined(result.netAmount),\n isPaused: transferProphet.isPaused,\n minBridgeAmount: toSDKNumberOrUndefined(transferProphet.minBridgeAmount),\n maxBridgeAmount: toSDKNumberOrUndefined(transferProphet.maxBridgeAmount),\n fees,\n }\n}\n\n/**\n * @example\n * transformToPublicTransferProphetAggregated(\n * [\n * // tokenA : chain1 -> chain2\n * transferProphetOf(tokenAChain1, tokenAChain2),\n * // tokenB : chain2 -> chain3\n * transferProphetOf(tokenBChain2, tokenBChain3),\n * // tokenC : chain3 -> chain4\n * transferProphetOf(tokenCChain3, tokenCChain4),\n * ],\n * [\n * // tokenA -> tokenB : chain2\n * exchangeRateOf(tokenAChain2, tokenBChain2),\n * // tokenB -> tokenC : chain3\n * exchangeRateOf(tokenBChain3, tokenCChain3),\n * ],\n * )\n */\nexport const transformToPublicTransferProphetAggregated = (\n transferProphets: OneOrMore<PublicTransferProphet>,\n exchangeRates: readonly BigNumber[],\n): PublicTransferProphetAggregated<OneOrMore<PublicTransferProphet>> => {\n const firstTransferProphet = transferProphets[0]\n const lastTransferProphet = last(transferProphets)\n\n const steps = transferProphets.map(\n transformFromPublicTransferProphet,\n ) as any as OneOrMore<TransferProphet>\n const composed = composeTransferProphets(steps, exchangeRates)\n\n const fromAmount = BigNumber.from(firstTransferProphet.fromAmount)\n const applyResult = applyTransferProphets(steps, fromAmount)\n\n const fees: PublicTransferProphet[\"fees\"] = applyResult\n .flatMap(r => r.fees)\n .map(f =>\n f.type === \"rate\"\n ? {\n ...f,\n rate: toSDKNumberOrUndefined(f.rate),\n minimumAmount: toSDKNumberOrUndefined(f.minimumAmount),\n amount: toSDKNumberOrUndefined(f.amount),\n }\n : f.type === \"fixed\"\n ? {\n ...f,\n amount: toSDKNumberOrUndefined(f.amount),\n }\n : checkNever(f),\n )\n .filter(isNotNull)\n\n return {\n fromChain: firstTransferProphet.fromChain,\n fromToken: firstTransferProphet.fromToken,\n toChain: lastTransferProphet.toChain,\n toToken: lastTransferProphet.toToken,\n fromAmount: toSDKNumberOrUndefined(fromAmount),\n toAmount: toSDKNumberOrUndefined(last(applyResult).netAmount),\n isPaused: composed.isPaused,\n fees,\n minBridgeAmount: toSDKNumberOrUndefined(composed.minBridgeAmount),\n maxBridgeAmount: toSDKNumberOrUndefined(composed.maxBridgeAmount),\n transferProphets,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmEO,SAAS,mCACd,iBACiB;AACjB,SAAO;AAAA,IACL,UAAU,gBAAgB;AAAA,IAC1B,aAAa,gBAAgB;AAAA,IAC7B,MAAM,gBAAgB,KACnB;AAAA,MAAQ,OACP,EAAE,SAAS,SACP;AAAA,QACE,GAAG;AAAA,QACH,MAAM,UAAU,KAAK,EAAE,IAAI;AAAA,QAC3B,eAAe,UAAU,KAAK,EAAE,aAAa;AAAA,MAC/C,IACA,EAAE,SAAS,UACT;AAAA,QACE,GAAG;AAAA,QACH,QAAQ,UAAU,KAAK,EAAE,MAAM;AAAA,MACjC,IACA,WAAW,CAAC;AAAA,IACpB,EACC,OAAO,SAAS;AAAA,IACnB,iBACE,gBAAgB,mBAAmB,OAC/B,OACA,UAAU,KAAK,gBAAgB,eAAe;AAAA,IACpD,iBACE,gBAAgB,mBAAmB,OAC/B,OACA,UAAU,KAAK,gBAAgB,eAAe;AAAA,EACtD;AACF;AACO,SAAS,iCACd,OACA,YACA,iBACuB;AACvB,QAAM,SAAS;AAAA,IACb;AAAA,IACA,UAAU,KAAK,UAAU;AAAA,EAC3B;AAEA,QAAM,OAAsC,OAAO,KAChD;AAAA,IAAI,OACH,EAAE,SAAS,SACP;AAAA,MACE,GAAG;AAAA,MACH,MAAM,uBAAuB,EAAE,IAAI;AAAA,MACnC,eAAe,uBAAuB,EAAE,aAAa;AAAA,MACrD,QAAQ,uBAAuB,EAAE,MAAM;AAAA,IACzC,IACA,EAAE,SAAS,UACT;AAAA,MACE,GAAG;AAAA,MACH,QAAQ,uBAAuB,EAAE,MAAM;AAAA,IACzC,IACA,WAAW,CAAC;AAAA,EACpB,EACC,OAAO,SAAS;AAEnB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,YAAY,uBAAuB,UAAU;AAAA,IAC7C,UAAU,uBAAuB,OAAO,SAAS;AAAA,IACjD,UAAU,gBAAgB;AAAA,IAC1B,iBAAiB,uBAAuB,gBAAgB,eAAe;AAAA,IACvE,iBAAiB,uBAAuB,gBAAgB,eAAe;AAAA,IACvE;AAAA,EACF;AACF;AAqBO,IAAM,6CAA6C,CACxD,kBACA,kBACsE;AACtE,QAAM,uBAAuB,iBAAiB,CAAC;AAC/C,QAAM,sBAAsB,KAAK,gBAAgB;AAEjD,QAAM,QAAQ,iBAAiB;AAAA,IAC7B;AAAA,EACF;AACA,QAAM,WAAW,wBAAwB,OAAO,aAAa;AAE7D,QAAM,aAAa,UAAU,KAAK,qBAAqB,UAAU;AACjE,QAAM,cAAc,sBAAsB,OAAO,UAAU;AAE3D,QAAM,OAAsC,YACzC,QAAQ,OAAK,EAAE,IAAI,EACnB;AAAA,IAAI,OACH,EAAE,SAAS,SACP;AAAA,MACE,GAAG;AAAA,MACH,MAAM,uBAAuB,EAAE,IAAI;AAAA,MACnC,eAAe,uBAAuB,EAAE,aAAa;AAAA,MACrD,QAAQ,uBAAuB,EAAE,MAAM;AAAA,IACzC,IACA,EAAE,SAAS,UACT;AAAA,MACE,GAAG;AAAA,MACH,QAAQ,uBAAuB,EAAE,MAAM;AAAA,IACzC,IACA,WAAW,CAAC;AAAA,EACpB,EACC,OAAO,SAAS;AAEnB,SAAO;AAAA,IACL,WAAW,qBAAqB;AAAA,IAChC,WAAW,qBAAqB;AAAA,IAChC,SAAS,oBAAoB;AAAA,IAC7B,SAAS,oBAAoB;AAAA,IAC7B,YAAY,uBAAuB,UAAU;AAAA,IAC7C,UAAU,uBAAuB,KAAK,WAAW,EAAE,SAAS;AAAA,IAC5D,UAAU,SAAS;AAAA,IACnB;AAAA,IACA,iBAAiB,uBAAuB,SAAS,eAAe;AAAA,IAChE,iBAAiB,uBAAuB,SAAS,eAAe;AAAA,IAChE;AAAA,EACF;AACF;","names":[]}