@avalabs/fusion-sdk 0.15.1 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.cjs +1 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +21 -1
- package/dist/constants.d.ts +21 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/mod.cjs +1 -1
- package/dist/mod.d.cts +7 -5
- package/dist/mod.d.ts +7 -5
- package/dist/mod.js +1 -1
- package/dist/quoter/quoter.cjs +1 -1
- package/dist/quoter/quoter.cjs.map +1 -1
- package/dist/quoter/quoter.js +1 -1
- package/dist/quoter/quoter.js.map +1 -1
- package/dist/transfer-manager.cjs +1 -1
- package/dist/transfer-manager.cjs.map +1 -1
- package/dist/transfer-manager.js +1 -1
- package/dist/transfer-manager.js.map +1 -1
- package/dist/transfer-service/_evm-gas.cjs +1 -1
- package/dist/transfer-service/_evm-gas.js +1 -1
- package/dist/transfer-service/_utils.cjs +1 -1
- package/dist/transfer-service/_utils.cjs.map +1 -1
- package/dist/transfer-service/_utils.js +1 -1
- package/dist/transfer-service/_utils.js.map +1 -1
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.js +2 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.js +2 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/constants.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/constants.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/constants.js +2 -0
- package/dist/transfer-service/avalanche-cct/constants.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/types.d.cts +33 -0
- package/dist/transfer-service/avalanche-cct/types.d.ts +33 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/wrap.js +1 -1
- package/dist/transfer-service/fetch-utilities.cjs +1 -1
- package/dist/transfer-service/fetch-utilities.cjs.map +1 -1
- package/dist/transfer-service/fetch-utilities.js +1 -1
- package/dist/transfer-service/fetch-utilities.js.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/markr/_handlers/transfer-asset.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/transfer-asset.js +1 -1
- package/dist/transfer-service/markr/_schema.cjs +1 -1
- package/dist/transfer-service/markr/_schema.cjs.map +1 -1
- package/dist/transfer-service/markr/_schema.js +1 -1
- package/dist/transfer-service/markr/_schema.js.map +1 -1
- package/dist/transfer-service/markr/markr-service.cjs.map +1 -1
- package/dist/transfer-service/markr/markr-service.js.map +1 -1
- package/dist/transfer-service/service-schemas.cjs +1 -1
- package/dist/transfer-service/service-schemas.cjs.map +1 -1
- package/dist/transfer-service/service-schemas.js +1 -1
- package/dist/transfer-service/service-schemas.js.map +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +1 -1
- package/dist/types/asset.d.cts +18 -2
- package/dist/types/asset.d.ts +18 -2
- package/dist/types/quote.d.cts +1 -1
- package/dist/types/quote.d.ts +1 -1
- package/dist/types/service.d.cts +95 -7
- package/dist/types/service.d.ts +95 -7
- package/dist/types/transfer-manager.d.cts +19 -10
- package/dist/types/transfer-manager.d.ts +19 -10
- package/dist/types/utility-types.d.cts +8 -1
- package/dist/types/utility-types.d.ts +8 -1
- package/dist/utils/asset-id.cjs +1 -1
- package/dist/utils/asset-id.cjs.map +1 -1
- package/dist/utils/asset-id.js +1 -1
- package/dist/utils/asset-id.js.map +1 -1
- package/dist/utils/bridgeable-assets.cjs +2 -0
- package/dist/utils/bridgeable-assets.cjs.map +1 -0
- package/dist/utils/bridgeable-assets.d.cts +16 -0
- package/dist/utils/bridgeable-assets.d.ts +16 -0
- package/dist/utils/bridgeable-assets.js +2 -0
- package/dist/utils/bridgeable-assets.js.map +1 -0
- package/dist/utils/transfer-utils.cjs +1 -1
- package/dist/utils/transfer-utils.cjs.map +1 -1
- package/dist/utils/transfer-utils.js +1 -1
- package/dist/utils/transfer-utils.js.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../_utils.cjs`),r=require(`../../_transfer-utilities.cjs`),i=require(`../../_utils.cjs`),a=require(`../_utils/p-chain.cjs`),o=require(`../_utils/polling.cjs`),s=require(`../_utils/transactions.cjs`),c=require(`../_utils/fees.cjs`),l=require(`../_utils/addresses.cjs`);function u({ajsContext:i,avalancheSendTx:a,environment:s,getCoreEthAddress:c,getAtomicUtxos:u,getUtxos:h,getWalletAddressesForChainAlias:g,getWalletChangeAddressForChainAlias:_}){return async({onStepChange:v,quote:y})=>{if(y.serviceType!==e.ServiceType.AVALANCHE_CCT)throw new t.SdkError(t.ErrorReason.INCORRECT_PROVIDER_PROVIDED,t.ErrorCode.INVALID_PARAMS);let b=n.getEnvironmentIsTestnet(s),x=n.getChainAlias(y.sourceChain.chainId,b),S=n.getChainAlias(y.targetChain.chainId,b),C=l.getExportFromAddressEvm(y.fromAddress,x),w=x===`C`?void 0:l.assertXpAddress(y.fromAddress),T=await l.getExportToAddress({destinationChainAlias:S,getCoreEthAddress:c,quoteToAddress:y.toAddress}),E=l.getImportToAddress(y.toAddress,S),D=S===`C`?T:l.assertXpAddress(y.toAddress),O=y.amountIn>0n,k=O?2:1,A=Date.now(),j=d(y,s),M;if(O){v?.({currentSignature:1,currentSignatureReason:e.TransferSignatureReason.AvalancheCrossChainExport,quote:y,requiredSignatures:k});let c=await n.tryOrThrow(()=>p({ajsContext:i,environment:s,getUtxos:h,getWalletAddressesForChainAlias:g,getWalletChangeAddressForChainAlias:_,quoteAmountIn:y.amountIn,sourceChainAlias:x,destinationChainAlias:S,fromAddress:C,requiredFromAddress:w,toAddress:T}),e=>new t.SdkError(`Failed to build Avalanche export transaction.`,t.ErrorCode.UNKNOWN,{cause:e}));M=await n.tryOrThrow(()=>a(c,`export`,x),e=>new t.SdkError(`Failed to sign/send Avalanche export transaction.`,t.ErrorCode.SIGNING_FAILED,{cause:e}));let l;try{l=await o.pollPrimaryNetworkTxStatus({chainAlias:x,environment:s,txId:M})}catch{return r.sourcePendingTransferFromQuote(y,{environment:s,requiredConfirmationCount:1,startedAtMs:A,txHash:M})}if(!l)return f({errorCode:t.ErrorCode.TRANSACTION_REVERTED,errorReason:`Export transaction was not accepted by Avalanche.`,sourceStartedAtMs:A,sourceTxHash:M,transferBase:j})}let N=await n.tryOrThrow(async()=>(await u(S,x)).getUTXOs(),e=>new t.SdkError(`Failed to fetch Avalanche atomic UTXOs.`,t.ErrorCode.UNKNOWN,{cause:e}));if(N.length===0)return f({errorCode:t.ErrorCode.INVALID_PARAMS,errorReason:`No atomic UTXOs available to import for this route.`,sourceStartedAtMs:A,sourceTxHash:M,transferBase:j});v?.({currentSignature:O?2:1,currentSignatureReason:e.TransferSignatureReason.AvalancheCrossChainImport,quote:y,requiredSignatures:k});let P=await n.tryOrThrow(()=>m({ajsContext:i,atomicUtxos:N,destinationChainAlias:S,environment:s,getWalletAddressesForChainAlias:g,getWalletChangeAddressForChainAlias:_,sourceChainAlias:x,requiredFromAddress:D,toAddress:E}),e=>new t.SdkError(`Failed to build Avalanche import transaction.`,t.ErrorCode.UNKNOWN,{cause:e})),F=await n.tryOrThrow(()=>a(P,`import`,S),e=>new t.SdkError(`Failed to sign/send Avalanche import transaction.`,t.ErrorCode.SIGNING_FAILED,{cause:e}));return{...j,source:{confirmationCount:M?1:0,requiredConfirmationCount:1,startedAtMs:A,txHash:M??F},status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:Date.now(),txHash:F}}}}function d(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function f({errorCode:e,errorReason:t,sourceStartedAtMs:n,sourceTxHash:r,transferBase:i}){return{...i,errorCode:e,errorReason:t,failedAtMs:Date.now(),...r?{source:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:n,txHash:r}}:{},status:`failed`}}async function p({ajsContext:n,destinationChainAlias:r,environment:o,fromAddress:u,getUtxos:d,getWalletAddressesForChainAlias:f,getWalletChangeAddressForChainAlias:p,quoteAmountIn:m,requiredFromAddress:h,sourceChainAlias:g,toAddress:_}){switch(g){case`C`:{if(r===`C`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);if(!u)throw new t.InvalidParamsError(`fromAddress must be an EVM address when exporting from C-Chain.`);let a=i.getEvmClientForChain({chain:o===e.Environment.TEST?e.AVALANCHE_FUJI_CHAIN:e.AVALANCHE_MAINNET_CHAIN}),[l,d]=await Promise.all([a.getTransactionCount({address:u}),c.getCChainBaseFeeInNanoAvax(o)]);return s.exportTx({amountInNanoAvax:m,baseFeeInNanoAvax:d,context:n,destinationChainAlias:r,fromAddress:u,nonce:BigInt(l),sourceChainAlias:g,toAddress:_})}case`P`:{if(r===`P`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[e,i,c,u]=await Promise.all([l.getWalletChangeAddress({chainAlias:g,getWalletChangeAddressForChainAlias:p}),a.getFeeState(o),l.getWalletFromAddresses({chainAlias:g,getWalletAddressesForChainAlias:f,requiredAddress:h}),d(`P`)]);return s.exportTx({amountInNanoAvax:m,changeAddress:e,context:n,destinationChainAlias:r,feeState:i,fromAddresses:c,sourceChainAlias:g,toAddress:_,utxos:u.getUTXOs()})}case`X`:{if(r===`X`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[e,i,a]=await Promise.all([l.getWalletChangeAddress({chainAlias:g,getWalletChangeAddressForChainAlias:p}),l.getWalletFromAddresses({chainAlias:g,getWalletAddressesForChainAlias:f,requiredAddress:h}),d(`X`)]);return s.exportTx({amountInNanoAvax:m,changeAddress:e,context:n,destinationChainAlias:r,fromAddresses:i,sourceChainAlias:g,toAddress:_,utxos:a.getUTXOs()})}}}async function m({ajsContext:e,atomicUtxos:n,destinationChainAlias:r,environment:i,getWalletAddressesForChainAlias:o,getWalletChangeAddressForChainAlias:u,requiredFromAddress:d,sourceChainAlias:f,toAddress:p}){switch(r){case`C`:{if(f===`C`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([c.getCChainBaseFeeInNanoAvax(i),l.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:o,requiredAddress:d})]);return s.importTx({atomicUtxos:n,baseFeeInNanoAvax:a,context:e,destinationChainAlias:r,fromAddresses:u,sourceChainAlias:f,toAddress:l.getImportToAddress(p,`C`)})}case`P`:{if(f===`P`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[c,u]=await Promise.all([a.getFeeState(i),l.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:o,requiredAddress:d})]);return s.importTx({atomicUtxos:n,context:e,destinationChainAlias:r,feeState:c,fromAddresses:u,sourceChainAlias:f,toAddress:l.getImportToAddress(p,`P`)})}case`X`:{if(f===`X`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[i,a]=await Promise.all([l.getWalletChangeAddress({chainAlias:r,getWalletChangeAddressForChainAlias:u}),l.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:o,requiredAddress:d})]);return s.importTx({atomicUtxos:n,changeAddress:i,context:e,destinationChainAlias:r,fromAddresses:a,sourceChainAlias:f,toAddress:l.getImportToAddress(p,`X`)})}}}exports.transferAssetFactory=u;
|
|
2
|
+
//# sourceMappingURL=transfer-asset.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-asset.cjs","names":["ServiceType","SdkError","ErrorReason","ErrorCode","getEnvironmentIsTestnet","getChainAlias","getExportFromAddressEvm","assertXpAddress","getExportToAddress","getImportToAddress","TransferSignatureReason","tryOrThrow","pollPrimaryNetworkTxStatus","sourcePendingTransferFromQuote","InvalidParamsError","getEvmClientForChain","Environment","AVALANCHE_FUJI_CHAIN","AVALANCHE_MAINNET_CHAIN","getCChainBaseFeeInNanoAvax","exportTx","getWalletChangeAddress","getFeeState","getWalletFromAddresses","importTx"],"sources":["../../../../src/transfer-service/avalanche-cct/_handlers/transfer-asset.ts"],"sourcesContent":["import type { Context, Utxo } from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n ServiceType,\n TransferSignatureReason,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getEvmClientForChain } from '../../_utils';\nimport type { AvalancheSendTxFunction, TransferService } from '../../../types/service';\nimport type { FailedTransfer, TargetPendingTransfer, TransferBase } from '../../../types/transfer';\nimport { getFeeState } from '../_utils/p-chain';\nimport { pollPrimaryNetworkTxStatus } from '../_utils/polling';\nimport { exportTx, importTx } from '../_utils/transactions';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\nimport { getChainAlias, getEnvironmentIsTestnet, tryOrThrow } from '../_utils';\nimport { getCChainBaseFeeInNanoAvax } from '../_utils/fees';\nimport {\n assertXpAddress,\n getExportFromAddressEvm,\n getExportToAddress,\n getImportToAddress,\n getWalletChangeAddress,\n getWalletFromAddresses,\n} from '../_utils/addresses';\n\nexport interface TransferAssetFactoryOptions {\n ajsContext: Context.Context;\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport function transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ onStepChange, quote }) => {\n if (quote.serviceType !== ServiceType.AVALANCHE_CCT) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const isTestnet = getEnvironmentIsTestnet(environment);\n const sourceChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.sourceChain.chainId, isTestnet);\n const destinationChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.targetChain.chainId, isTestnet);\n const exportFromAddressEvm = getExportFromAddressEvm(quote.fromAddress, sourceChainAlias);\n const exportRequiredFromAddress = sourceChainAlias === 'C' ? undefined : assertXpAddress(quote.fromAddress);\n const exportToAddress = await getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress: quote.toAddress,\n });\n const importToAddress = getImportToAddress(quote.toAddress, destinationChainAlias);\n const importRequiredFromAddress =\n destinationChainAlias === 'C' ? exportToAddress : assertXpAddress(quote.toAddress);\n\n const hasExport = quote.amountIn > 0n;\n const requiredSignatures = hasExport ? 2 : 1;\n const startedAtMs = Date.now();\n const transferBase = getTransferBase(quote, environment);\n\n let exportTxId: string | undefined;\n\n if (hasExport) {\n onStepChange?.({\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainExport,\n quote,\n requiredSignatures,\n });\n\n const unsignedExportTx = await tryOrThrow(\n () =>\n buildExportTx({\n ajsContext,\n environment,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn: quote.amountIn,\n sourceChainAlias,\n destinationChainAlias,\n fromAddress: exportFromAddressEvm,\n requiredFromAddress: exportRequiredFromAddress,\n toAddress: exportToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche export transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n exportTxId = await tryOrThrow(\n () => avalancheSendTx(unsignedExportTx, 'export', sourceChainAlias),\n (error) =>\n new SdkError('Failed to sign/send Avalanche export transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n let didExportSucceed: boolean;\n try {\n didExportSucceed = await pollPrimaryNetworkTxStatus({\n chainAlias: sourceChainAlias,\n environment,\n txId: exportTxId,\n });\n } catch {\n return sourcePendingTransferFromQuote(quote, {\n environment,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId,\n });\n }\n\n if (!didExportSucceed) {\n return buildFailedTransfer({\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Export transaction was not accepted by Avalanche.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n }\n\n const atomicUtxos = await tryOrThrow(\n async () => (await getAtomicUtxos(destinationChainAlias, sourceChainAlias)).getUTXOs(),\n (error) => new SdkError('Failed to fetch Avalanche atomic UTXOs.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n if (atomicUtxos.length === 0) {\n return buildFailedTransfer({\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'No atomic UTXOs available to import for this route.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n\n onStepChange?.({\n currentSignature: hasExport ? 2 : 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainImport,\n quote,\n requiredSignatures,\n });\n\n const unsignedImportTx = await tryOrThrow(\n () =>\n buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n sourceChainAlias,\n requiredFromAddress: importRequiredFromAddress,\n toAddress: importToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche import transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n const importTxId = await tryOrThrow(\n () => avalancheSendTx(unsignedImportTx, 'import', destinationChainAlias),\n (error) =>\n new SdkError('Failed to sign/send Avalanche import transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n return {\n ...transferBase,\n source: {\n confirmationCount: exportTxId ? 1 : 0,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId ?? importTxId,\n },\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: Date.now(),\n txHash: importTxId,\n },\n } satisfies TargetPendingTransfer;\n };\n}\n\nfunction getTransferBase(\n quote: Parameters<TransferService['transferAsset']>[0]['quote'],\n environment: Environment,\n): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n\nfunction buildFailedTransfer({\n errorCode,\n errorReason,\n sourceStartedAtMs,\n sourceTxHash,\n transferBase,\n}: {\n errorCode: ErrorCode;\n errorReason: string;\n sourceStartedAtMs: number;\n sourceTxHash?: string;\n transferBase: Omit<TransferBase, 'status'>;\n}): FailedTransfer {\n return {\n ...transferBase,\n errorCode,\n errorReason,\n failedAtMs: Date.now(),\n ...(sourceTxHash\n ? {\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: sourceStartedAtMs,\n txHash: sourceTxHash,\n },\n }\n : {}),\n status: 'failed',\n };\n}\n\nasync function buildExportTx({\n ajsContext,\n destinationChainAlias,\n environment,\n fromAddress,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n fromAddress: EvmAddress | null;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n quoteAmountIn: bigint;\n requiredFromAddress?: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: XpAddress;\n}) {\n switch (sourceChainAlias) {\n case 'C': {\n if (destinationChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n if (!fromAddress) {\n throw new InvalidParamsError('fromAddress must be an EVM address when exporting from C-Chain.');\n }\n\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const [nonce, baseFeeInNanoAvax] = await Promise.all([\n cChainClient.getTransactionCount({\n address: fromAddress,\n }),\n getCChainBaseFeeInNanoAvax(environment),\n ]);\n\n return exportTx({\n amountInNanoAvax: quoteAmountIn,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddress,\n nonce: BigInt(nonce),\n sourceChainAlias,\n toAddress,\n });\n }\n\n case 'P': {\n if (destinationChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, feeState, fromAddresses, pUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('P'),\n ]);\n\n return exportTx({\n amountInNanoAvax: quoteAmountIn,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: pUtxoSet.getUTXOs(),\n });\n }\n\n case 'X': {\n if (destinationChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses, xUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('X'),\n ]);\n\n return exportTx({\n amountInNanoAvax: quoteAmountIn,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: xUtxoSet.getUTXOs(),\n });\n }\n }\n}\n\nasync function buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n atomicUtxos: Utxo[];\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n requiredFromAddress: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: string;\n}) {\n switch (destinationChainAlias) {\n case 'C': {\n if (sourceChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [baseFeeInNanoAvax, fromAddresses] = await Promise.all([\n getCChainBaseFeeInNanoAvax(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return importTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'C'),\n });\n }\n\n case 'P': {\n if (sourceChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [feeState, fromAddresses] = await Promise.all([\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return importTx({\n atomicUtxos,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'P'),\n });\n }\n\n case 'X': {\n if (sourceChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: destinationChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return importTx({\n atomicUtxos,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'X'),\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,Environment as n,ServiceType as r,TransferSignatureReason as i}from"../../../constants.js";import{ErrorCode as a,ErrorReason as o,InvalidParamsError as s,SdkError as c}from"../../../errors.js";import{getChainAlias as l,getEnvironmentIsTestnet as u,tryOrThrow as d}from"../_utils.js";import{sourcePendingTransferFromQuote as f}from"../../_transfer-utilities.js";import{getEvmClientForChain as p}from"../../_utils.js";import{getFeeState as m}from"../_utils/p-chain.js";import{pollPrimaryNetworkTxStatus as h}from"../_utils/polling.js";import{exportTx as g,importTx as _}from"../_utils/transactions.js";import{getCChainBaseFeeInNanoAvax as v}from"../_utils/fees.js";import{assertXpAddress as y,getExportFromAddressEvm as b,getExportToAddress as x,getImportToAddress as S,getWalletChangeAddress as C,getWalletFromAddresses as w}from"../_utils/addresses.js";function T({ajsContext:e,avalancheSendTx:t,environment:n,getCoreEthAddress:s,getAtomicUtxos:p,getUtxos:m,getWalletAddressesForChainAlias:g,getWalletChangeAddressForChainAlias:_}){return async({onStepChange:v,quote:C})=>{if(C.serviceType!==r.AVALANCHE_CCT)throw new c(o.INCORRECT_PROVIDER_PROVIDED,a.INVALID_PARAMS);let w=u(n),T=l(C.sourceChain.chainId,w),A=l(C.targetChain.chainId,w),j=b(C.fromAddress,T),M=T===`C`?void 0:y(C.fromAddress),N=await x({destinationChainAlias:A,getCoreEthAddress:s,quoteToAddress:C.toAddress}),P=S(C.toAddress,A),F=A===`C`?N:y(C.toAddress),I=C.amountIn>0n,L=I?2:1,R=Date.now(),z=E(C,n),B;if(I){v?.({currentSignature:1,currentSignatureReason:i.AvalancheCrossChainExport,quote:C,requiredSignatures:L});let r=await d(()=>O({ajsContext:e,environment:n,getUtxos:m,getWalletAddressesForChainAlias:g,getWalletChangeAddressForChainAlias:_,quoteAmountIn:C.amountIn,sourceChainAlias:T,destinationChainAlias:A,fromAddress:j,requiredFromAddress:M,toAddress:N}),e=>new c(`Failed to build Avalanche export transaction.`,a.UNKNOWN,{cause:e}));B=await d(()=>t(r,`export`,T),e=>new c(`Failed to sign/send Avalanche export transaction.`,a.SIGNING_FAILED,{cause:e}));let o;try{o=await h({chainAlias:T,environment:n,txId:B})}catch{return f(C,{environment:n,requiredConfirmationCount:1,startedAtMs:R,txHash:B})}if(!o)return D({errorCode:a.TRANSACTION_REVERTED,errorReason:`Export transaction was not accepted by Avalanche.`,sourceStartedAtMs:R,sourceTxHash:B,transferBase:z})}let V=await d(async()=>(await p(A,T)).getUTXOs(),e=>new c(`Failed to fetch Avalanche atomic UTXOs.`,a.UNKNOWN,{cause:e}));if(V.length===0)return D({errorCode:a.INVALID_PARAMS,errorReason:`No atomic UTXOs available to import for this route.`,sourceStartedAtMs:R,sourceTxHash:B,transferBase:z});v?.({currentSignature:I?2:1,currentSignatureReason:i.AvalancheCrossChainImport,quote:C,requiredSignatures:L});let H=await d(()=>k({ajsContext:e,atomicUtxos:V,destinationChainAlias:A,environment:n,getWalletAddressesForChainAlias:g,getWalletChangeAddressForChainAlias:_,sourceChainAlias:T,requiredFromAddress:F,toAddress:P}),e=>new c(`Failed to build Avalanche import transaction.`,a.UNKNOWN,{cause:e})),U=await d(()=>t(H,`import`,A),e=>new c(`Failed to sign/send Avalanche import transaction.`,a.SIGNING_FAILED,{cause:e}));return{...z,source:{confirmationCount:B?1:0,requiredConfirmationCount:1,startedAtMs:R,txHash:B??U},status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:Date.now(),txHash:U}}}}function E(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function D({errorCode:e,errorReason:t,sourceStartedAtMs:n,sourceTxHash:r,transferBase:i}){return{...i,errorCode:e,errorReason:t,failedAtMs:Date.now(),...r?{source:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:n,txHash:r}}:{},status:`failed`}}async function O({ajsContext:r,destinationChainAlias:i,environment:a,fromAddress:o,getUtxos:c,getWalletAddressesForChainAlias:l,getWalletChangeAddressForChainAlias:u,quoteAmountIn:d,requiredFromAddress:f,sourceChainAlias:h,toAddress:_}){switch(h){case`C`:{if(i===`C`)throw new s(`Source and destination chain aliases must be different.`);if(!o)throw new s(`fromAddress must be an EVM address when exporting from C-Chain.`);let c=p({chain:a===n.TEST?e:t}),[l,u]=await Promise.all([c.getTransactionCount({address:o}),v(a)]);return g({amountInNanoAvax:d,baseFeeInNanoAvax:u,context:r,destinationChainAlias:i,fromAddress:o,nonce:BigInt(l),sourceChainAlias:h,toAddress:_})}case`P`:{if(i===`P`)throw new s(`Source and destination chain aliases must be different.`);let[e,t,n,o]=await Promise.all([C({chainAlias:h,getWalletChangeAddressForChainAlias:u}),m(a),w({chainAlias:h,getWalletAddressesForChainAlias:l,requiredAddress:f}),c(`P`)]);return g({amountInNanoAvax:d,changeAddress:e,context:r,destinationChainAlias:i,feeState:t,fromAddresses:n,sourceChainAlias:h,toAddress:_,utxos:o.getUTXOs()})}case`X`:{if(i===`X`)throw new s(`Source and destination chain aliases must be different.`);let[e,t,n]=await Promise.all([C({chainAlias:h,getWalletChangeAddressForChainAlias:u}),w({chainAlias:h,getWalletAddressesForChainAlias:l,requiredAddress:f}),c(`X`)]);return g({amountInNanoAvax:d,changeAddress:e,context:r,destinationChainAlias:i,fromAddresses:t,sourceChainAlias:h,toAddress:_,utxos:n.getUTXOs()})}}}async function k({ajsContext:e,atomicUtxos:t,destinationChainAlias:n,environment:r,getWalletAddressesForChainAlias:i,getWalletChangeAddressForChainAlias:a,requiredFromAddress:o,sourceChainAlias:c,toAddress:l}){switch(n){case`C`:{if(c===`C`)throw new s(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([v(r),w({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return _({atomicUtxos:t,baseFeeInNanoAvax:a,context:e,destinationChainAlias:n,fromAddresses:u,sourceChainAlias:c,toAddress:S(l,`C`)})}case`P`:{if(c===`P`)throw new s(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([m(r),w({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return _({atomicUtxos:t,context:e,destinationChainAlias:n,feeState:a,fromAddresses:u,sourceChainAlias:c,toAddress:S(l,`P`)})}case`X`:{if(c===`X`)throw new s(`Source and destination chain aliases must be different.`);let[r,u]=await Promise.all([C({chainAlias:n,getWalletChangeAddressForChainAlias:a}),w({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return _({atomicUtxos:t,changeAddress:r,context:e,destinationChainAlias:n,fromAddresses:u,sourceChainAlias:c,toAddress:S(l,`X`)})}}}export{T as transferAssetFactory};
|
|
2
|
+
//# sourceMappingURL=transfer-asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-asset.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_handlers/transfer-asset.ts"],"sourcesContent":["import type { Context, Utxo } from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n ServiceType,\n TransferSignatureReason,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getEvmClientForChain } from '../../_utils';\nimport type { AvalancheSendTxFunction, TransferService } from '../../../types/service';\nimport type { FailedTransfer, TargetPendingTransfer, TransferBase } from '../../../types/transfer';\nimport { getFeeState } from '../_utils/p-chain';\nimport { pollPrimaryNetworkTxStatus } from '../_utils/polling';\nimport { exportTx, importTx } from '../_utils/transactions';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\nimport { getChainAlias, getEnvironmentIsTestnet, tryOrThrow } from '../_utils';\nimport { getCChainBaseFeeInNanoAvax } from '../_utils/fees';\nimport {\n assertXpAddress,\n getExportFromAddressEvm,\n getExportToAddress,\n getImportToAddress,\n getWalletChangeAddress,\n getWalletFromAddresses,\n} from '../_utils/addresses';\n\nexport interface TransferAssetFactoryOptions {\n ajsContext: Context.Context;\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport function transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ onStepChange, quote }) => {\n if (quote.serviceType !== ServiceType.AVALANCHE_CCT) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const isTestnet = getEnvironmentIsTestnet(environment);\n const sourceChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.sourceChain.chainId, isTestnet);\n const destinationChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.targetChain.chainId, isTestnet);\n const exportFromAddressEvm = getExportFromAddressEvm(quote.fromAddress, sourceChainAlias);\n const exportRequiredFromAddress = sourceChainAlias === 'C' ? undefined : assertXpAddress(quote.fromAddress);\n const exportToAddress = await getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress: quote.toAddress,\n });\n const importToAddress = getImportToAddress(quote.toAddress, destinationChainAlias);\n const importRequiredFromAddress =\n destinationChainAlias === 'C' ? exportToAddress : assertXpAddress(quote.toAddress);\n\n const hasExport = quote.amountIn > 0n;\n const requiredSignatures = hasExport ? 2 : 1;\n const startedAtMs = Date.now();\n const transferBase = getTransferBase(quote, environment);\n\n let exportTxId: string | undefined;\n\n if (hasExport) {\n onStepChange?.({\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainExport,\n quote,\n requiredSignatures,\n });\n\n const unsignedExportTx = await tryOrThrow(\n () =>\n buildExportTx({\n ajsContext,\n environment,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn: quote.amountIn,\n sourceChainAlias,\n destinationChainAlias,\n fromAddress: exportFromAddressEvm,\n requiredFromAddress: exportRequiredFromAddress,\n toAddress: exportToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche export transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n exportTxId = await tryOrThrow(\n () => avalancheSendTx(unsignedExportTx, 'export', sourceChainAlias),\n (error) =>\n new SdkError('Failed to sign/send Avalanche export transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n let didExportSucceed: boolean;\n try {\n didExportSucceed = await pollPrimaryNetworkTxStatus({\n chainAlias: sourceChainAlias,\n environment,\n txId: exportTxId,\n });\n } catch {\n return sourcePendingTransferFromQuote(quote, {\n environment,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId,\n });\n }\n\n if (!didExportSucceed) {\n return buildFailedTransfer({\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Export transaction was not accepted by Avalanche.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n }\n\n const atomicUtxos = await tryOrThrow(\n async () => (await getAtomicUtxos(destinationChainAlias, sourceChainAlias)).getUTXOs(),\n (error) => new SdkError('Failed to fetch Avalanche atomic UTXOs.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n if (atomicUtxos.length === 0) {\n return buildFailedTransfer({\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'No atomic UTXOs available to import for this route.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n\n onStepChange?.({\n currentSignature: hasExport ? 2 : 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainImport,\n quote,\n requiredSignatures,\n });\n\n const unsignedImportTx = await tryOrThrow(\n () =>\n buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n sourceChainAlias,\n requiredFromAddress: importRequiredFromAddress,\n toAddress: importToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche import transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n const importTxId = await tryOrThrow(\n () => avalancheSendTx(unsignedImportTx, 'import', destinationChainAlias),\n (error) =>\n new SdkError('Failed to sign/send Avalanche import transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n return {\n ...transferBase,\n source: {\n confirmationCount: exportTxId ? 1 : 0,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId ?? importTxId,\n },\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: Date.now(),\n txHash: importTxId,\n },\n } satisfies TargetPendingTransfer;\n };\n}\n\nfunction getTransferBase(\n quote: Parameters<TransferService['transferAsset']>[0]['quote'],\n environment: Environment,\n): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n\nfunction buildFailedTransfer({\n errorCode,\n errorReason,\n sourceStartedAtMs,\n sourceTxHash,\n transferBase,\n}: {\n errorCode: ErrorCode;\n errorReason: string;\n sourceStartedAtMs: number;\n sourceTxHash?: string;\n transferBase: Omit<TransferBase, 'status'>;\n}): FailedTransfer {\n return {\n ...transferBase,\n errorCode,\n errorReason,\n failedAtMs: Date.now(),\n ...(sourceTxHash\n ? {\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: sourceStartedAtMs,\n txHash: sourceTxHash,\n },\n }\n : {}),\n status: 'failed',\n };\n}\n\nasync function buildExportTx({\n ajsContext,\n destinationChainAlias,\n environment,\n fromAddress,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n fromAddress: EvmAddress | null;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n quoteAmountIn: bigint;\n requiredFromAddress?: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: XpAddress;\n}) {\n switch (sourceChainAlias) {\n case 'C': {\n if (destinationChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n if (!fromAddress) {\n throw new InvalidParamsError('fromAddress must be an EVM address when exporting from C-Chain.');\n }\n\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const [nonce, baseFeeInNanoAvax] = await Promise.all([\n cChainClient.getTransactionCount({\n address: fromAddress,\n }),\n getCChainBaseFeeInNanoAvax(environment),\n ]);\n\n return exportTx({\n amountInNanoAvax: quoteAmountIn,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddress,\n nonce: BigInt(nonce),\n sourceChainAlias,\n toAddress,\n });\n }\n\n case 'P': {\n if (destinationChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, feeState, fromAddresses, pUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('P'),\n ]);\n\n return exportTx({\n amountInNanoAvax: quoteAmountIn,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: pUtxoSet.getUTXOs(),\n });\n }\n\n case 'X': {\n if (destinationChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses, xUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('X'),\n ]);\n\n return exportTx({\n amountInNanoAvax: quoteAmountIn,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: xUtxoSet.getUTXOs(),\n });\n }\n }\n}\n\nasync function buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n atomicUtxos: Utxo[];\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n requiredFromAddress: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: string;\n}) {\n switch (destinationChainAlias) {\n case 'C': {\n if (sourceChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [baseFeeInNanoAvax, fromAddresses] = await Promise.all([\n getCChainBaseFeeInNanoAvax(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return importTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'C'),\n });\n }\n\n case 'P': {\n if (sourceChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [feeState, fromAddresses] = await Promise.all([\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return importTx({\n atomicUtxos,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'P'),\n });\n }\n\n case 'X': {\n if (sourceChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: destinationChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return importTx({\n atomicUtxos,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'X'),\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./_utils.cjs`);let t=require(`@avalabs/avalanchejs`);function n(n){let r=e.stripAddressPrefix(n);try{return t.utils.parseBech32(r),!0}catch{return!1}}exports.isXpAddressFullyValid=n;
|
|
2
|
+
//# sourceMappingURL=_type-guards.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_type-guards.cjs","names":["stripAddressPrefix"],"sources":["../../../src/transfer-service/avalanche-cct/_type-guards.ts"],"sourcesContent":["import { utils } from '@avalabs/avalanchejs';\nimport type { XpAddress } from './types';\nimport { stripAddressPrefix } from './_utils';\n\nexport function isXpAddressFullyValid(address: string): address is XpAddress {\n const addressBody = stripAddressPrefix(address);\n try {\n utils.parseBech32(addressBody);\n\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":"sHAIA,SAAgB,EAAsB,EAAuC,CAC3E,IAAM,EAAcA,EAAAA,mBAAmB,EAAQ,CAC/C,GAAI,CAGF,OAFA,EAAA,MAAM,YAAY,EAAY,CAEvB,QACD,CACN,MAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_type-guards.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/_type-guards.ts"],"sourcesContent":["import { utils } from '@avalabs/avalanchejs';\nimport type { XpAddress } from './types';\nimport { stripAddressPrefix } from './_utils';\n\nexport function isXpAddressFullyValid(address: string): address is XpAddress {\n const addressBody = stripAddressPrefix(address);\n try {\n utils.parseBech32(addressBody);\n\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":"8FAIA,SAAgB,EAAsB,EAAuC,CAC3E,IAAM,EAAc,EAAmB,EAAQ,CAC/C,GAAI,CAGF,OAFA,EAAM,YAAY,EAAY,CAEvB,QACD,CACN,MAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../errors.cjs`),t=require(`../_type-guards.cjs`);let n=require(`viem`);function r(r,i){if(i!==`C`){if(!t.isXpAddressFullyValid(r))throw new e.InvalidParamsError(`fromAddress must be a valid XpAddress when source chain is P or X.`);return null}if(!(0,n.isAddress)(r))throw new e.InvalidParamsError(`fromAddress must be a valid EVM address when exporting from C-Chain.`);return(0,n.getAddress)(r)}async function i({destinationChainAlias:r,getCoreEthAddress:i,quoteToAddress:a}){if(r!==`C`){if(!t.isXpAddressFullyValid(a))throw new e.InvalidParamsError(`toAddress must be a valid XpAddress when destination chain is P or X.`);return a}if(!(0,n.isAddress)(a))throw new e.InvalidParamsError(`toAddress must be a valid EVM address when importing to C-Chain.`);let o=await i(a);if(!t.isXpAddressFullyValid(o))throw new e.InvalidParamsError(`getCoreEthAddress callback returned an invalid Coreth bech32 address.`);return o}function a(r,i){if(i===`C`){if(!(0,n.isAddress)(r))throw new e.InvalidParamsError(`toAddress must be a valid EVM address when importing to C-Chain.`);return(0,n.getAddress)(r)}if(!t.isXpAddressFullyValid(r))throw new e.InvalidParamsError(`toAddress must be a valid XpAddress when importing to P or X chain.`);return r}function o(n){if(!t.isXpAddressFullyValid(n))throw new e.InvalidParamsError(`Address must be a valid XpAddress.`);return n}async function s({chainAlias:n,getWalletAddressesForChainAlias:r,requiredAddress:i}){let a=(await r(n)).filter(t.isXpAddressFullyValid);if(a.length===0)throw new e.InvalidParamsError(`No wallet addresses available for chain alias ${n}.`);if(i&&!a.includes(i))throw new e.InvalidParamsError(`Required address is not controlled by the wallet for chain alias ${n}.`,`Expected ${i} to be present in getWalletAddressesForChainAlias(${n}) result.`);return a}async function c({chainAlias:n,getWalletChangeAddressForChainAlias:r}){let i=await r(n);if(!t.isXpAddressFullyValid(i))throw new e.InvalidParamsError(`Change address for chain alias ${n} must be a valid XpAddress.`);return i}exports.assertXpAddress=o,exports.getExportFromAddressEvm=r,exports.getExportToAddress=i,exports.getImportToAddress=a,exports.getWalletChangeAddress=c,exports.getWalletFromAddresses=s;
|
|
2
|
+
//# sourceMappingURL=addresses.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addresses.cjs","names":["isXpAddressFullyValid","InvalidParamsError"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/addresses.ts"],"sourcesContent":["import { getAddress, isAddress, type Address as EvmAddress } from 'viem';\nimport type { AvalancheBlockchainAlias } from '../../../constants';\nimport { InvalidParamsError } from '../../../errors';\nimport { isXpAddressFullyValid } from '../_type-guards';\nimport type {\n GetCoreEthAddressCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\n\n/**\n * Validates the source quote address for export and normalizes C-Chain addresses.\n *\n * For C-Chain exports, returns a checksummed EVM address.\n * For P/X exports, validates that the address is a fully valid XP address and returns null,\n * because P/X exports do not use an EVM sender.\n *\n * @param fromAddress - Quote source address.\n * @param sourceChainAlias - Avalanche chain alias used as the export source.\n * @returns A normalized EVM address for C-Chain exports, otherwise null.\n * @throws InvalidParamsError If the address format is invalid for the selected source chain.\n */\nexport function getExportFromAddressEvm(\n fromAddress: string,\n sourceChainAlias: AvalancheBlockchainAlias,\n): EvmAddress | null {\n if (sourceChainAlias !== 'C') {\n if (!isXpAddressFullyValid(fromAddress)) {\n throw new InvalidParamsError('fromAddress must be a valid XpAddress when source chain is P or X.');\n }\n\n return null;\n }\n\n if (!isAddress(fromAddress)) {\n throw new InvalidParamsError('fromAddress must be a valid EVM address when exporting from C-Chain.');\n }\n\n return getAddress(fromAddress);\n}\n\n/**\n * Resolves the export destination as an XP address.\n *\n * For P/X destinations, the quote destination must already be a valid XP address.\n * For C-Chain destinations, the quote destination must be an EVM address and is converted\n * to a Coreth bech32 address through the provided callback.\n *\n * @param options - Address resolution inputs.\n * @param options.destinationChainAlias - Avalanche chain alias used as the export destination.\n * @param options.getCoreEthAddress - Callback that maps an EVM address to a Coreth bech32 address.\n * @param options.quoteToAddress - Quote destination address.\n * @returns A validated XP address used as export destination.\n * @throws InvalidParamsError If input addresses or callback output are invalid.\n */\nexport async function getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress,\n}: {\n destinationChainAlias: AvalancheBlockchainAlias;\n getCoreEthAddress: GetCoreEthAddressCallback;\n quoteToAddress: string;\n}): Promise<XpAddress> {\n if (destinationChainAlias !== 'C') {\n if (!isXpAddressFullyValid(quoteToAddress)) {\n throw new InvalidParamsError('toAddress must be a valid XpAddress when destination chain is P or X.');\n }\n\n return quoteToAddress;\n }\n\n if (!isAddress(quoteToAddress)) {\n throw new InvalidParamsError('toAddress must be a valid EVM address when importing to C-Chain.');\n }\n\n const corethAddress = await getCoreEthAddress(quoteToAddress);\n\n if (!isXpAddressFullyValid(corethAddress)) {\n throw new InvalidParamsError('getCoreEthAddress callback returned an invalid Coreth bech32 address.');\n }\n\n return corethAddress;\n}\n\n/**\n * Validates and normalizes the import destination address for the destination chain.\n *\n * C-Chain imports require an EVM address and return a checksummed EVM address.\n * P/X imports require a valid XP address and return it unchanged.\n *\n * @param toAddress - Quote destination address.\n * @param destinationChainAlias - Avalanche chain alias used as the import destination.\n * @returns An EVM address for C-Chain imports or an XP address for P/X imports.\n * @throws InvalidParamsError If the address format does not match the destination chain.\n */\nexport function getImportToAddress(toAddress: string, destinationChainAlias: 'C'): EvmAddress;\nexport function getImportToAddress(toAddress: string, destinationChainAlias: 'P' | 'X'): XpAddress;\nexport function getImportToAddress(\n toAddress: string,\n destinationChainAlias: AvalancheBlockchainAlias,\n): EvmAddress | XpAddress;\nexport function getImportToAddress(\n toAddress: string,\n destinationChainAlias: AvalancheBlockchainAlias,\n): EvmAddress | XpAddress {\n if (destinationChainAlias === 'C') {\n if (!isAddress(toAddress)) {\n throw new InvalidParamsError('toAddress must be a valid EVM address when importing to C-Chain.');\n }\n\n return getAddress(toAddress);\n }\n\n if (!isXpAddressFullyValid(toAddress)) {\n throw new InvalidParamsError('toAddress must be a valid XpAddress when importing to P or X chain.');\n }\n\n return toAddress;\n}\n\n/**\n * Asserts that an address is a fully valid XP address.\n *\n * @param address - Address to validate.\n * @returns The same address, narrowed to XpAddress.\n * @throws InvalidParamsError If the address is not a valid XP address.\n */\nexport function assertXpAddress(address: string): XpAddress {\n if (!isXpAddressFullyValid(address)) {\n throw new InvalidParamsError('Address must be a valid XpAddress.');\n }\n\n return address;\n}\n\n/**\n * Retrieves wallet addresses for a chain and filters them to valid XP addresses.\n *\n * When requiredAddress is provided, this also verifies wallet ownership by ensuring\n * the required address is present in the wallet address list.\n *\n * @param options - Wallet address query inputs.\n * @param options.chainAlias - Chain alias to query wallet addresses for.\n * @param options.getWalletAddressesForChainAlias - Callback that returns wallet-controlled addresses.\n * @param options.requiredAddress - Optional XP address that must be wallet-controlled.\n * @returns The subset of wallet addresses that are valid XP addresses.\n * @throws InvalidParamsError If no valid XP wallet addresses exist or requiredAddress is not owned.\n */\nexport async function getWalletFromAddresses({\n chainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n requiredAddress?: XpAddress;\n}): Promise<XpAddress[]> {\n const walletAddresses = await getWalletAddressesForChainAlias(chainAlias);\n const xpWalletAddresses = walletAddresses.filter(isXpAddressFullyValid);\n\n if (xpWalletAddresses.length === 0) {\n throw new InvalidParamsError(`No wallet addresses available for chain alias ${chainAlias}.`);\n }\n\n if (requiredAddress && !xpWalletAddresses.includes(requiredAddress)) {\n throw new InvalidParamsError(\n `Required address is not controlled by the wallet for chain alias ${chainAlias}.`,\n `Expected ${requiredAddress} to be present in getWalletAddressesForChainAlias(${chainAlias}) result.`,\n );\n }\n\n return xpWalletAddresses;\n}\n\n/**\n * Retrieves and validates the wallet change address for a chain.\n *\n * @param options - Change address query inputs.\n * @param options.chainAlias - Chain alias to query change address for.\n * @param options.getWalletChangeAddressForChainAlias - Callback that returns wallet change address.\n * @returns A validated XP change address.\n * @throws InvalidParamsError If the returned change address is not a valid XP address.\n */\nexport async function getWalletChangeAddress({\n chainAlias,\n getWalletChangeAddressForChainAlias,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}): Promise<XpAddress> {\n const changeAddress = await getWalletChangeAddressForChainAlias(chainAlias);\n\n if (!isXpAddressFullyValid(changeAddress)) {\n throw new InvalidParamsError(`Change address for chain alias ${chainAlias} must be a valid XpAddress.`);\n }\n\n return changeAddress;\n}\n"],"mappings":"iJAuBA,SAAgB,EACd,EACA,EACmB,CACnB,GAAI,IAAqB,IAAK,CAC5B,GAAI,CAACA,EAAAA,sBAAsB,EAAY,CACrC,MAAM,IAAIC,EAAAA,mBAAmB,qEAAqE,CAGpG,OAAO,KAGT,GAAI,EAAA,EAAA,EAAA,WAAW,EAAY,CACzB,MAAM,IAAIA,EAAAA,mBAAmB,uEAAuE,CAGtG,OAAA,EAAA,EAAA,YAAkB,EAAY,CAiBhC,eAAsB,EAAmB,CACvC,wBACA,oBACA,kBAKqB,CACrB,GAAI,IAA0B,IAAK,CACjC,GAAI,CAACD,EAAAA,sBAAsB,EAAe,CACxC,MAAM,IAAIC,EAAAA,mBAAmB,wEAAwE,CAGvG,OAAO,EAGT,GAAI,EAAA,EAAA,EAAA,WAAW,EAAe,CAC5B,MAAM,IAAIA,EAAAA,mBAAmB,mEAAmE,CAGlG,IAAM,EAAgB,MAAM,EAAkB,EAAe,CAE7D,GAAI,CAACD,EAAAA,sBAAsB,EAAc,CACvC,MAAM,IAAIC,EAAAA,mBAAmB,wEAAwE,CAGvG,OAAO,EAoBT,SAAgB,EACd,EACA,EACwB,CACxB,GAAI,IAA0B,IAAK,CACjC,GAAI,EAAA,EAAA,EAAA,WAAW,EAAU,CACvB,MAAM,IAAIA,EAAAA,mBAAmB,mEAAmE,CAGlG,OAAA,EAAA,EAAA,YAAkB,EAAU,CAG9B,GAAI,CAACD,EAAAA,sBAAsB,EAAU,CACnC,MAAM,IAAIC,EAAAA,mBAAmB,sEAAsE,CAGrG,OAAO,EAUT,SAAgB,EAAgB,EAA4B,CAC1D,GAAI,CAACD,EAAAA,sBAAsB,EAAQ,CACjC,MAAM,IAAIC,EAAAA,mBAAmB,qCAAqC,CAGpE,OAAO,EAgBT,eAAsB,EAAuB,CAC3C,aACA,kCACA,mBAKuB,CAEvB,IAAM,GADkB,MAAM,EAAgC,EAAW,EAC/B,OAAOD,EAAAA,sBAAsB,CAEvE,GAAI,EAAkB,SAAW,EAC/B,MAAM,IAAIC,EAAAA,mBAAmB,iDAAiD,EAAW,GAAG,CAG9F,GAAI,GAAmB,CAAC,EAAkB,SAAS,EAAgB,CACjE,MAAM,IAAIA,EAAAA,mBACR,oEAAoE,EAAW,GAC/E,YAAY,EAAgB,oDAAoD,EAAW,WAC5F,CAGH,OAAO,EAYT,eAAsB,EAAuB,CAC3C,aACA,uCAIqB,CACrB,IAAM,EAAgB,MAAM,EAAoC,EAAW,CAE3E,GAAI,CAACD,EAAAA,sBAAsB,EAAc,CACvC,MAAM,IAAIC,EAAAA,mBAAmB,kCAAkC,EAAW,6BAA6B,CAGzG,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{InvalidParamsError as e}from"../../../errors.js";import{isXpAddressFullyValid as t}from"../_type-guards.js";import{getAddress as n,isAddress as r}from"viem";function i(i,a){if(a!==`C`){if(!t(i))throw new e(`fromAddress must be a valid XpAddress when source chain is P or X.`);return null}if(!r(i))throw new e(`fromAddress must be a valid EVM address when exporting from C-Chain.`);return n(i)}async function a({destinationChainAlias:n,getCoreEthAddress:i,quoteToAddress:a}){if(n!==`C`){if(!t(a))throw new e(`toAddress must be a valid XpAddress when destination chain is P or X.`);return a}if(!r(a))throw new e(`toAddress must be a valid EVM address when importing to C-Chain.`);let o=await i(a);if(!t(o))throw new e(`getCoreEthAddress callback returned an invalid Coreth bech32 address.`);return o}function o(i,a){if(a===`C`){if(!r(i))throw new e(`toAddress must be a valid EVM address when importing to C-Chain.`);return n(i)}if(!t(i))throw new e(`toAddress must be a valid XpAddress when importing to P or X chain.`);return i}function s(n){if(!t(n))throw new e(`Address must be a valid XpAddress.`);return n}async function c({chainAlias:n,getWalletAddressesForChainAlias:r,requiredAddress:i}){let a=(await r(n)).filter(t);if(a.length===0)throw new e(`No wallet addresses available for chain alias ${n}.`);if(i&&!a.includes(i))throw new e(`Required address is not controlled by the wallet for chain alias ${n}.`,`Expected ${i} to be present in getWalletAddressesForChainAlias(${n}) result.`);return a}async function l({chainAlias:n,getWalletChangeAddressForChainAlias:r}){let i=await r(n);if(!t(i))throw new e(`Change address for chain alias ${n} must be a valid XpAddress.`);return i}export{s as assertXpAddress,i as getExportFromAddressEvm,a as getExportToAddress,o as getImportToAddress,l as getWalletChangeAddress,c as getWalletFromAddresses};
|
|
2
|
+
//# sourceMappingURL=addresses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addresses.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/addresses.ts"],"sourcesContent":["import { getAddress, isAddress, type Address as EvmAddress } from 'viem';\nimport type { AvalancheBlockchainAlias } from '../../../constants';\nimport { InvalidParamsError } from '../../../errors';\nimport { isXpAddressFullyValid } from '../_type-guards';\nimport type {\n GetCoreEthAddressCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\n\n/**\n * Validates the source quote address for export and normalizes C-Chain addresses.\n *\n * For C-Chain exports, returns a checksummed EVM address.\n * For P/X exports, validates that the address is a fully valid XP address and returns null,\n * because P/X exports do not use an EVM sender.\n *\n * @param fromAddress - Quote source address.\n * @param sourceChainAlias - Avalanche chain alias used as the export source.\n * @returns A normalized EVM address for C-Chain exports, otherwise null.\n * @throws InvalidParamsError If the address format is invalid for the selected source chain.\n */\nexport function getExportFromAddressEvm(\n fromAddress: string,\n sourceChainAlias: AvalancheBlockchainAlias,\n): EvmAddress | null {\n if (sourceChainAlias !== 'C') {\n if (!isXpAddressFullyValid(fromAddress)) {\n throw new InvalidParamsError('fromAddress must be a valid XpAddress when source chain is P or X.');\n }\n\n return null;\n }\n\n if (!isAddress(fromAddress)) {\n throw new InvalidParamsError('fromAddress must be a valid EVM address when exporting from C-Chain.');\n }\n\n return getAddress(fromAddress);\n}\n\n/**\n * Resolves the export destination as an XP address.\n *\n * For P/X destinations, the quote destination must already be a valid XP address.\n * For C-Chain destinations, the quote destination must be an EVM address and is converted\n * to a Coreth bech32 address through the provided callback.\n *\n * @param options - Address resolution inputs.\n * @param options.destinationChainAlias - Avalanche chain alias used as the export destination.\n * @param options.getCoreEthAddress - Callback that maps an EVM address to a Coreth bech32 address.\n * @param options.quoteToAddress - Quote destination address.\n * @returns A validated XP address used as export destination.\n * @throws InvalidParamsError If input addresses or callback output are invalid.\n */\nexport async function getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress,\n}: {\n destinationChainAlias: AvalancheBlockchainAlias;\n getCoreEthAddress: GetCoreEthAddressCallback;\n quoteToAddress: string;\n}): Promise<XpAddress> {\n if (destinationChainAlias !== 'C') {\n if (!isXpAddressFullyValid(quoteToAddress)) {\n throw new InvalidParamsError('toAddress must be a valid XpAddress when destination chain is P or X.');\n }\n\n return quoteToAddress;\n }\n\n if (!isAddress(quoteToAddress)) {\n throw new InvalidParamsError('toAddress must be a valid EVM address when importing to C-Chain.');\n }\n\n const corethAddress = await getCoreEthAddress(quoteToAddress);\n\n if (!isXpAddressFullyValid(corethAddress)) {\n throw new InvalidParamsError('getCoreEthAddress callback returned an invalid Coreth bech32 address.');\n }\n\n return corethAddress;\n}\n\n/**\n * Validates and normalizes the import destination address for the destination chain.\n *\n * C-Chain imports require an EVM address and return a checksummed EVM address.\n * P/X imports require a valid XP address and return it unchanged.\n *\n * @param toAddress - Quote destination address.\n * @param destinationChainAlias - Avalanche chain alias used as the import destination.\n * @returns An EVM address for C-Chain imports or an XP address for P/X imports.\n * @throws InvalidParamsError If the address format does not match the destination chain.\n */\nexport function getImportToAddress(toAddress: string, destinationChainAlias: 'C'): EvmAddress;\nexport function getImportToAddress(toAddress: string, destinationChainAlias: 'P' | 'X'): XpAddress;\nexport function getImportToAddress(\n toAddress: string,\n destinationChainAlias: AvalancheBlockchainAlias,\n): EvmAddress | XpAddress;\nexport function getImportToAddress(\n toAddress: string,\n destinationChainAlias: AvalancheBlockchainAlias,\n): EvmAddress | XpAddress {\n if (destinationChainAlias === 'C') {\n if (!isAddress(toAddress)) {\n throw new InvalidParamsError('toAddress must be a valid EVM address when importing to C-Chain.');\n }\n\n return getAddress(toAddress);\n }\n\n if (!isXpAddressFullyValid(toAddress)) {\n throw new InvalidParamsError('toAddress must be a valid XpAddress when importing to P or X chain.');\n }\n\n return toAddress;\n}\n\n/**\n * Asserts that an address is a fully valid XP address.\n *\n * @param address - Address to validate.\n * @returns The same address, narrowed to XpAddress.\n * @throws InvalidParamsError If the address is not a valid XP address.\n */\nexport function assertXpAddress(address: string): XpAddress {\n if (!isXpAddressFullyValid(address)) {\n throw new InvalidParamsError('Address must be a valid XpAddress.');\n }\n\n return address;\n}\n\n/**\n * Retrieves wallet addresses for a chain and filters them to valid XP addresses.\n *\n * When requiredAddress is provided, this also verifies wallet ownership by ensuring\n * the required address is present in the wallet address list.\n *\n * @param options - Wallet address query inputs.\n * @param options.chainAlias - Chain alias to query wallet addresses for.\n * @param options.getWalletAddressesForChainAlias - Callback that returns wallet-controlled addresses.\n * @param options.requiredAddress - Optional XP address that must be wallet-controlled.\n * @returns The subset of wallet addresses that are valid XP addresses.\n * @throws InvalidParamsError If no valid XP wallet addresses exist or requiredAddress is not owned.\n */\nexport async function getWalletFromAddresses({\n chainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n requiredAddress?: XpAddress;\n}): Promise<XpAddress[]> {\n const walletAddresses = await getWalletAddressesForChainAlias(chainAlias);\n const xpWalletAddresses = walletAddresses.filter(isXpAddressFullyValid);\n\n if (xpWalletAddresses.length === 0) {\n throw new InvalidParamsError(`No wallet addresses available for chain alias ${chainAlias}.`);\n }\n\n if (requiredAddress && !xpWalletAddresses.includes(requiredAddress)) {\n throw new InvalidParamsError(\n `Required address is not controlled by the wallet for chain alias ${chainAlias}.`,\n `Expected ${requiredAddress} to be present in getWalletAddressesForChainAlias(${chainAlias}) result.`,\n );\n }\n\n return xpWalletAddresses;\n}\n\n/**\n * Retrieves and validates the wallet change address for a chain.\n *\n * @param options - Change address query inputs.\n * @param options.chainAlias - Chain alias to query change address for.\n * @param options.getWalletChangeAddressForChainAlias - Callback that returns wallet change address.\n * @returns A validated XP change address.\n * @throws InvalidParamsError If the returned change address is not a valid XP address.\n */\nexport async function getWalletChangeAddress({\n chainAlias,\n getWalletChangeAddressForChainAlias,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}): Promise<XpAddress> {\n const changeAddress = await getWalletChangeAddressForChainAlias(chainAlias);\n\n if (!isXpAddressFullyValid(changeAddress)) {\n throw new InvalidParamsError(`Change address for chain alias ${chainAlias} must be a valid XpAddress.`);\n }\n\n return changeAddress;\n}\n"],"mappings":"oKAuBA,SAAgB,EACd,EACA,EACmB,CACnB,GAAI,IAAqB,IAAK,CAC5B,GAAI,CAAC,EAAsB,EAAY,CACrC,MAAM,IAAI,EAAmB,qEAAqE,CAGpG,OAAO,KAGT,GAAI,CAAC,EAAU,EAAY,CACzB,MAAM,IAAI,EAAmB,uEAAuE,CAGtG,OAAO,EAAW,EAAY,CAiBhC,eAAsB,EAAmB,CACvC,wBACA,oBACA,kBAKqB,CACrB,GAAI,IAA0B,IAAK,CACjC,GAAI,CAAC,EAAsB,EAAe,CACxC,MAAM,IAAI,EAAmB,wEAAwE,CAGvG,OAAO,EAGT,GAAI,CAAC,EAAU,EAAe,CAC5B,MAAM,IAAI,EAAmB,mEAAmE,CAGlG,IAAM,EAAgB,MAAM,EAAkB,EAAe,CAE7D,GAAI,CAAC,EAAsB,EAAc,CACvC,MAAM,IAAI,EAAmB,wEAAwE,CAGvG,OAAO,EAoBT,SAAgB,EACd,EACA,EACwB,CACxB,GAAI,IAA0B,IAAK,CACjC,GAAI,CAAC,EAAU,EAAU,CACvB,MAAM,IAAI,EAAmB,mEAAmE,CAGlG,OAAO,EAAW,EAAU,CAG9B,GAAI,CAAC,EAAsB,EAAU,CACnC,MAAM,IAAI,EAAmB,sEAAsE,CAGrG,OAAO,EAUT,SAAgB,EAAgB,EAA4B,CAC1D,GAAI,CAAC,EAAsB,EAAQ,CACjC,MAAM,IAAI,EAAmB,qCAAqC,CAGpE,OAAO,EAgBT,eAAsB,EAAuB,CAC3C,aACA,kCACA,mBAKuB,CAEvB,IAAM,GADkB,MAAM,EAAgC,EAAW,EAC/B,OAAO,EAAsB,CAEvE,GAAI,EAAkB,SAAW,EAC/B,MAAM,IAAI,EAAmB,iDAAiD,EAAW,GAAG,CAG9F,GAAI,GAAmB,CAAC,EAAkB,SAAS,EAAgB,CACjE,MAAM,IAAI,EACR,oEAAoE,EAAW,GAC/E,YAAY,EAAgB,oDAAoD,EAAW,WAC5F,CAGH,OAAO,EAYT,eAAsB,EAAuB,CAC3C,aACA,uCAIqB,CACrB,IAAM,EAAgB,MAAM,EAAoC,EAAW,CAE3E,GAAI,CAAC,EAAsB,EAAc,CACvC,MAAM,IAAI,EAAmB,kCAAkC,EAAW,6BAA6B,CAGzG,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../constants.cjs`),r=require(`../../_utils.cjs`),i=require(`./p-chain.cjs`),a=require(`../../_evm-gas.cjs`);let o=require(`@avalabs/avalanchejs`);function s(e,n){if(!Number.isInteger(e)||e<=0)throw new t.InvalidParamsError(`Expected a positive integer greater than 0 for ${n}, but received: ${e}`)}function c(e=1,t=1){return s(e,`numberInputs`),s(t,`numberSignatures`),78n+BigInt(e)*90n+1n*60n+BigInt(t)*1000n+10000n}function l(e,t){return s(e,`numberInputs`),o.Common.dimensionsToGas(o.Common.createDimensions({bandwidth:161*e+254,dbRead:e,dbWrite:2+e,compute:200*e}),t)}function u(e,t){return s(e,`numberInputs`),o.Common.dimensionsToGas(o.Common.createDimensions({bandwidth:161*e+174,dbRead:e,dbWrite:1+e,compute:200*e}),t)}function d(e,t){let i=(r.applyFeeUnitsBpsMargin(e,t)+n.WEI_PER_NANO_AVAX_BIGINT-1n)/n.WEI_PER_NANO_AVAX_BIGINT;return i<=0n?1n:i}async function f(t){let n=(await a.fetchSuggestedGasPrices(r.getEvmClientForChain({chain:t===e.Environment.TEST?e.AVALANCHE_FUJI_CHAIN:e.AVALANCHE_MAINNET_CHAIN}))).fast.maxFeePerGas;return d(n,void 0)}function p({feeUnitsMarginBps:e,maxFeePerGas:t}){return d(t,e)*11230n}function m({feeUnitsMarginBps:e,maxFeePerGas:t,numberInputs:n,numberSignatures:r}){return d(t,e)*c(n,r)}async function h({context:e,environment:t,numberInputs:n}){let{price:r}=await i.getFeeState(t);return r*l(n,e.platformFeeConfig.weights)}async function g({context:e,environment:t,numberInputs:n}){let{price:r}=await i.getFeeState(t);return r*u(n,e.platformFeeConfig.weights)}function _({context:e}){return e.baseTxFee}function v({context:e}){return e.baseTxFee}async function y(e,n){let{context:r,environment:i,feeUnitsMarginBps:a,maxFeePerGas:o,numberInputs:s}=n;switch(e){case`C`:return p({feeUnitsMarginBps:a,maxFeePerGas:o});case`P`:return await h({context:r,environment:i,numberInputs:s});case`X`:return _({context:r});default:throw new t.InvalidParamsError(`Unsupported chain alias: ${e}`)}}async function b(e,n){let{context:r,environment:i,feeUnitsMarginBps:a,maxFeePerGas:o,numberInputs:s,numberSignatures:c}=n;switch(e){case`C`:return m({feeUnitsMarginBps:a,maxFeePerGas:o,numberInputs:s,numberSignatures:c});case`P`:return await g({context:r,environment:i,numberInputs:s});case`X`:return v({context:r});default:throw new t.InvalidParamsError(`Unsupported chain alias: ${e}`)}}exports.getCChainBaseFeeInNanoAvax=f,exports.getExportFeeInNanoAvax=y,exports.getImportFeeInNanoAvax=b;
|
|
2
|
+
//# sourceMappingURL=fees.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.cjs","names":["InvalidParamsError","Common","applyFeeUnitsBpsMargin","WEI_PER_NANO_AVAX_BIGINT","fetchSuggestedGasPrices","getEvmClientForChain","Environment","AVALANCHE_FUJI_CHAIN","AVALANCHE_MAINNET_CHAIN","getFeeState"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/fees.ts"],"sourcesContent":["import { Common, type Context } from '@avalabs/avalanchejs';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { InvalidParamsError } from '../../../errors';\nimport { fetchSuggestedGasPrices } from '../../_evm-gas';\nimport { applyFeeUnitsBpsMargin } from '../../_utils';\nimport { getEvmClientForChain } from '../../_utils';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport { getFeeState } from './p-chain';\n\n/**\n * C-chain atomic export txs always have exactly 1 EVM input + 1 transferable output\n * with fixed-width serialized fields, so the gas cost is constant.\n *\n * Verified empirically against avalanchejs costCorethTx() across varying amounts,\n * nonces, base fees, destination chains, and addresses.\n *\n * The hardcoded byte-size estimate (estimateCChainImportGas) gives 11228 — 2 gas\n * less than the real serialized size. We keep it for import estimation (where input\n * count can vary) but use the exact constant for exports.\n */\nconst C_CHAIN_EXPORT_GAS = 11230n;\n\nconst C_CHAIN_ATOMIC_TX_COST = 10_000n; // in gas\nconst C_CHAIN_SIGNATURE_COST = 1000n; // in gas\nconst C_CHAIN_BASE_TX_SIZE = 78n; // in bytes\nconst C_CHAIN_SINGLE_OWNER_INPUT_SIZE = 90n; // in bytes\nconst C_CHAIN_OUTPUT_SIZE = 60n; // in bytes\nconst C_CHAIN_NUMBER_OUTPUTS = 1n; // C chain imports consolidate inputs to one output\n\nfunction assertPositiveInteger(value: number, name: string): asserts value is number {\n if (!Number.isInteger(value) || value <= 0) {\n throw new InvalidParamsError(`Expected a positive integer greater than 0 for ${name}, but received: ${value}`);\n }\n}\n\n/**\n * Estimates gas for C-chain atomic import txs where the number of inputs can vary.\n * For exports, use the exact C_CHAIN_EXPORT_GAS constant instead.\n */\nexport function estimateCChainImportGas(numberInputs = 1, numberSignatures = 1): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n assertPositiveInteger(numberSignatures, 'numberSignatures');\n\n const baseSize =\n C_CHAIN_BASE_TX_SIZE +\n BigInt(numberInputs) * C_CHAIN_SINGLE_OWNER_INPUT_SIZE +\n C_CHAIN_NUMBER_OUTPUTS * C_CHAIN_OUTPUT_SIZE;\n return baseSize + BigInt(numberSignatures) * C_CHAIN_SIGNATURE_COST + C_CHAIN_ATOMIC_TX_COST;\n}\n\nexport function estimatePChainExportGas(numberInputs: number, weights: Common.Dimensions): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n\n return Common.dimensionsToGas(\n Common.createDimensions({\n bandwidth: 161 * numberInputs + 254,\n dbRead: numberInputs,\n dbWrite: 2 + numberInputs,\n compute: 200 * numberInputs,\n }),\n weights,\n );\n}\n\nexport function estimatePChainImportGas(numberInputs: number, weights: Common.Dimensions): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n\n return Common.dimensionsToGas(\n Common.createDimensions({\n bandwidth: 161 * numberInputs + 174,\n dbRead: numberInputs,\n dbWrite: 1 + numberInputs,\n compute: 200 * numberInputs,\n }),\n weights,\n );\n}\n\n/**\n * Derives CChainBaseFee from a maxFeePerGas value (in wei).\n *\n * Applies a fee units margin in basis points to buffer against base fee increases between\n * estimation and submission, then truncates to a nAVAX boundary so the fee estimation and the\n * transaction builder operate on the same integer.\n *\n * Minimum is 1 nAVAX.\n */\nexport function toCChainBaseFee(maxFeePerGas: bigint, feeUnitsMarginBps: number | undefined): bigint {\n const bufferedWei = applyFeeUnitsBpsMargin(maxFeePerGas, feeUnitsMarginBps);\n\n // Ceil to nAVAX so the fee is never underestimated\n const bufferedBaseFeeNAvax = (bufferedWei + WEI_PER_NANO_AVAX_BIGINT - 1n) / WEI_PER_NANO_AVAX_BIGINT;\n\n if (bufferedBaseFeeNAvax <= 0n) {\n return 1n;\n }\n\n return bufferedBaseFeeNAvax;\n}\n\nexport async function getCChainBaseFeeInNanoAvax(environment: Environment): Promise<bigint> {\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const maxFeePerGas = (await fetchSuggestedGasPrices(cChainClient)).fast.maxFeePerGas;\n\n return toCChainBaseFee(maxFeePerGas, undefined);\n}\n\nexport function getCChainExportFeeInNanoAvax({\n feeUnitsMarginBps,\n maxFeePerGas,\n}: {\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n}): bigint {\n const baseFee = toCChainBaseFee(maxFeePerGas, feeUnitsMarginBps);\n\n return baseFee * C_CHAIN_EXPORT_GAS;\n}\n\nexport function getCChainImportFeeInNanoAvax({\n feeUnitsMarginBps,\n maxFeePerGas,\n numberInputs,\n numberSignatures,\n}: {\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n numberSignatures: number;\n}): bigint {\n const baseFee = toCChainBaseFee(maxFeePerGas, feeUnitsMarginBps);\n\n return baseFee * estimateCChainImportGas(numberInputs, numberSignatures);\n}\n\nexport async function getPChainExportFeeInNanoAvax({\n context,\n environment,\n numberInputs,\n}: {\n context: Context.Context;\n environment: Environment;\n numberInputs: number;\n}): Promise<bigint> {\n const feeState = await getFeeState(environment);\n const { price } = feeState;\n\n return price * estimatePChainExportGas(numberInputs, context.platformFeeConfig.weights);\n}\n\nexport async function getPChainImportFeeInNanoAvax({\n context,\n environment,\n numberInputs,\n}: {\n context: Context.Context;\n environment: Environment;\n numberInputs: number;\n}): Promise<bigint> {\n const feeState = await getFeeState(environment);\n const { price } = feeState;\n\n return price * estimatePChainImportGas(numberInputs, context.platformFeeConfig.weights);\n}\n\nexport function getXChainExportFeeInNanoAvax({ context }: { context: Context.Context }): bigint {\n return context.baseTxFee;\n}\n\nexport function getXChainImportFeeInNanoAvax({ context }: { context: Context.Context }): bigint {\n return context.baseTxFee;\n}\n\nexport async function getExportFeeInNanoAvax(\n chainAlias: AvalancheBlockchainAlias,\n params: {\n context: Context.Context;\n environment: Environment;\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n },\n): Promise<bigint> {\n const { context, environment, feeUnitsMarginBps, maxFeePerGas, numberInputs } = params;\n\n switch (chainAlias) {\n case 'C': {\n return getCChainExportFeeInNanoAvax({ feeUnitsMarginBps, maxFeePerGas });\n }\n\n case 'P': {\n return await getPChainExportFeeInNanoAvax({ context, environment, numberInputs });\n }\n\n case 'X': {\n return getXChainExportFeeInNanoAvax({ context });\n }\n\n default:\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n}\n\nexport async function getImportFeeInNanoAvax(\n chainAlias: AvalancheBlockchainAlias,\n params: {\n context: Context.Context;\n environment: Environment;\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n numberSignatures: number;\n },\n): Promise<bigint> {\n const { context, environment, feeUnitsMarginBps, maxFeePerGas, numberInputs, numberSignatures } = params;\n\n switch (chainAlias) {\n case 'C': {\n return getCChainImportFeeInNanoAvax({ feeUnitsMarginBps, maxFeePerGas, numberInputs, numberSignatures });\n }\n\n case 'P': {\n return await getPChainImportFeeInNanoAvax({ context, environment, numberInputs });\n }\n\n case 'X': {\n return getXChainImportFeeInNanoAvax({ context });\n }\n\n default:\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,Environment as n}from"../../../constants.js";import{InvalidParamsError as r}from"../../../errors.js";import{WEI_PER_NANO_AVAX_BIGINT as i}from"../constants.js";import{applyFeeUnitsBpsMargin as a,getEvmClientForChain as o}from"../../_utils.js";import{getFeeState as s}from"./p-chain.js";import{fetchSuggestedGasPrices as c}from"../../_evm-gas.js";import{Common as l}from"@avalabs/avalanchejs";function u(e,t){if(!Number.isInteger(e)||e<=0)throw new r(`Expected a positive integer greater than 0 for ${t}, but received: ${e}`)}function d(e=1,t=1){return u(e,`numberInputs`),u(t,`numberSignatures`),78n+BigInt(e)*90n+1n*60n+BigInt(t)*1000n+10000n}function f(e,t){return u(e,`numberInputs`),l.dimensionsToGas(l.createDimensions({bandwidth:161*e+254,dbRead:e,dbWrite:2+e,compute:200*e}),t)}function p(e,t){return u(e,`numberInputs`),l.dimensionsToGas(l.createDimensions({bandwidth:161*e+174,dbRead:e,dbWrite:1+e,compute:200*e}),t)}function m(e,t){let n=(a(e,t)+i-1n)/i;return n<=0n?1n:n}async function h(r){let i=(await c(o({chain:r===n.TEST?e:t}))).fast.maxFeePerGas;return m(i,void 0)}function g({feeUnitsMarginBps:e,maxFeePerGas:t}){return m(t,e)*11230n}function _({feeUnitsMarginBps:e,maxFeePerGas:t,numberInputs:n,numberSignatures:r}){return m(t,e)*d(n,r)}async function v({context:e,environment:t,numberInputs:n}){let{price:r}=await s(t);return r*f(n,e.platformFeeConfig.weights)}async function y({context:e,environment:t,numberInputs:n}){let{price:r}=await s(t);return r*p(n,e.platformFeeConfig.weights)}function b({context:e}){return e.baseTxFee}function x({context:e}){return e.baseTxFee}async function S(e,t){let{context:n,environment:i,feeUnitsMarginBps:a,maxFeePerGas:o,numberInputs:s}=t;switch(e){case`C`:return g({feeUnitsMarginBps:a,maxFeePerGas:o});case`P`:return await v({context:n,environment:i,numberInputs:s});case`X`:return b({context:n});default:throw new r(`Unsupported chain alias: ${e}`)}}async function C(e,t){let{context:n,environment:i,feeUnitsMarginBps:a,maxFeePerGas:o,numberInputs:s,numberSignatures:c}=t;switch(e){case`C`:return _({feeUnitsMarginBps:a,maxFeePerGas:o,numberInputs:s,numberSignatures:c});case`P`:return await y({context:n,environment:i,numberInputs:s});case`X`:return x({context:n});default:throw new r(`Unsupported chain alias: ${e}`)}}export{h as getCChainBaseFeeInNanoAvax,S as getExportFeeInNanoAvax,C as getImportFeeInNanoAvax};
|
|
2
|
+
//# sourceMappingURL=fees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/fees.ts"],"sourcesContent":["import { Common, type Context } from '@avalabs/avalanchejs';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { InvalidParamsError } from '../../../errors';\nimport { fetchSuggestedGasPrices } from '../../_evm-gas';\nimport { applyFeeUnitsBpsMargin } from '../../_utils';\nimport { getEvmClientForChain } from '../../_utils';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport { getFeeState } from './p-chain';\n\n/**\n * C-chain atomic export txs always have exactly 1 EVM input + 1 transferable output\n * with fixed-width serialized fields, so the gas cost is constant.\n *\n * Verified empirically against avalanchejs costCorethTx() across varying amounts,\n * nonces, base fees, destination chains, and addresses.\n *\n * The hardcoded byte-size estimate (estimateCChainImportGas) gives 11228 — 2 gas\n * less than the real serialized size. We keep it for import estimation (where input\n * count can vary) but use the exact constant for exports.\n */\nconst C_CHAIN_EXPORT_GAS = 11230n;\n\nconst C_CHAIN_ATOMIC_TX_COST = 10_000n; // in gas\nconst C_CHAIN_SIGNATURE_COST = 1000n; // in gas\nconst C_CHAIN_BASE_TX_SIZE = 78n; // in bytes\nconst C_CHAIN_SINGLE_OWNER_INPUT_SIZE = 90n; // in bytes\nconst C_CHAIN_OUTPUT_SIZE = 60n; // in bytes\nconst C_CHAIN_NUMBER_OUTPUTS = 1n; // C chain imports consolidate inputs to one output\n\nfunction assertPositiveInteger(value: number, name: string): asserts value is number {\n if (!Number.isInteger(value) || value <= 0) {\n throw new InvalidParamsError(`Expected a positive integer greater than 0 for ${name}, but received: ${value}`);\n }\n}\n\n/**\n * Estimates gas for C-chain atomic import txs where the number of inputs can vary.\n * For exports, use the exact C_CHAIN_EXPORT_GAS constant instead.\n */\nexport function estimateCChainImportGas(numberInputs = 1, numberSignatures = 1): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n assertPositiveInteger(numberSignatures, 'numberSignatures');\n\n const baseSize =\n C_CHAIN_BASE_TX_SIZE +\n BigInt(numberInputs) * C_CHAIN_SINGLE_OWNER_INPUT_SIZE +\n C_CHAIN_NUMBER_OUTPUTS * C_CHAIN_OUTPUT_SIZE;\n return baseSize + BigInt(numberSignatures) * C_CHAIN_SIGNATURE_COST + C_CHAIN_ATOMIC_TX_COST;\n}\n\nexport function estimatePChainExportGas(numberInputs: number, weights: Common.Dimensions): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n\n return Common.dimensionsToGas(\n Common.createDimensions({\n bandwidth: 161 * numberInputs + 254,\n dbRead: numberInputs,\n dbWrite: 2 + numberInputs,\n compute: 200 * numberInputs,\n }),\n weights,\n );\n}\n\nexport function estimatePChainImportGas(numberInputs: number, weights: Common.Dimensions): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n\n return Common.dimensionsToGas(\n Common.createDimensions({\n bandwidth: 161 * numberInputs + 174,\n dbRead: numberInputs,\n dbWrite: 1 + numberInputs,\n compute: 200 * numberInputs,\n }),\n weights,\n );\n}\n\n/**\n * Derives CChainBaseFee from a maxFeePerGas value (in wei).\n *\n * Applies a fee units margin in basis points to buffer against base fee increases between\n * estimation and submission, then truncates to a nAVAX boundary so the fee estimation and the\n * transaction builder operate on the same integer.\n *\n * Minimum is 1 nAVAX.\n */\nexport function toCChainBaseFee(maxFeePerGas: bigint, feeUnitsMarginBps: number | undefined): bigint {\n const bufferedWei = applyFeeUnitsBpsMargin(maxFeePerGas, feeUnitsMarginBps);\n\n // Ceil to nAVAX so the fee is never underestimated\n const bufferedBaseFeeNAvax = (bufferedWei + WEI_PER_NANO_AVAX_BIGINT - 1n) / WEI_PER_NANO_AVAX_BIGINT;\n\n if (bufferedBaseFeeNAvax <= 0n) {\n return 1n;\n }\n\n return bufferedBaseFeeNAvax;\n}\n\nexport async function getCChainBaseFeeInNanoAvax(environment: Environment): Promise<bigint> {\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const maxFeePerGas = (await fetchSuggestedGasPrices(cChainClient)).fast.maxFeePerGas;\n\n return toCChainBaseFee(maxFeePerGas, undefined);\n}\n\nexport function getCChainExportFeeInNanoAvax({\n feeUnitsMarginBps,\n maxFeePerGas,\n}: {\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n}): bigint {\n const baseFee = toCChainBaseFee(maxFeePerGas, feeUnitsMarginBps);\n\n return baseFee * C_CHAIN_EXPORT_GAS;\n}\n\nexport function getCChainImportFeeInNanoAvax({\n feeUnitsMarginBps,\n maxFeePerGas,\n numberInputs,\n numberSignatures,\n}: {\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n numberSignatures: number;\n}): bigint {\n const baseFee = toCChainBaseFee(maxFeePerGas, feeUnitsMarginBps);\n\n return baseFee * estimateCChainImportGas(numberInputs, numberSignatures);\n}\n\nexport async function getPChainExportFeeInNanoAvax({\n context,\n environment,\n numberInputs,\n}: {\n context: Context.Context;\n environment: Environment;\n numberInputs: number;\n}): Promise<bigint> {\n const feeState = await getFeeState(environment);\n const { price } = feeState;\n\n return price * estimatePChainExportGas(numberInputs, context.platformFeeConfig.weights);\n}\n\nexport async function getPChainImportFeeInNanoAvax({\n context,\n environment,\n numberInputs,\n}: {\n context: Context.Context;\n environment: Environment;\n numberInputs: number;\n}): Promise<bigint> {\n const feeState = await getFeeState(environment);\n const { price } = feeState;\n\n return price * estimatePChainImportGas(numberInputs, context.platformFeeConfig.weights);\n}\n\nexport function getXChainExportFeeInNanoAvax({ context }: { context: Context.Context }): bigint {\n return context.baseTxFee;\n}\n\nexport function getXChainImportFeeInNanoAvax({ context }: { context: Context.Context }): bigint {\n return context.baseTxFee;\n}\n\nexport async function getExportFeeInNanoAvax(\n chainAlias: AvalancheBlockchainAlias,\n params: {\n context: Context.Context;\n environment: Environment;\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n },\n): Promise<bigint> {\n const { context, environment, feeUnitsMarginBps, maxFeePerGas, numberInputs } = params;\n\n switch (chainAlias) {\n case 'C': {\n return getCChainExportFeeInNanoAvax({ feeUnitsMarginBps, maxFeePerGas });\n }\n\n case 'P': {\n return await getPChainExportFeeInNanoAvax({ context, environment, numberInputs });\n }\n\n case 'X': {\n return getXChainExportFeeInNanoAvax({ context });\n }\n\n default:\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n}\n\nexport async function getImportFeeInNanoAvax(\n chainAlias: AvalancheBlockchainAlias,\n params: {\n context: Context.Context;\n environment: Environment;\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n numberSignatures: number;\n },\n): Promise<bigint> {\n const { context, environment, feeUnitsMarginBps, maxFeePerGas, numberInputs, numberSignatures } = params;\n\n switch (chainAlias) {\n case 'C': {\n return getCChainImportFeeInNanoAvax({ feeUnitsMarginBps, maxFeePerGas, numberInputs, numberSignatures });\n }\n\n case 'P': {\n return await getPChainImportFeeInNanoAvax({ context, environment, numberInputs });\n }\n\n case 'X': {\n return getXChainImportFeeInNanoAvax({ context });\n }\n\n default:\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n}\n"],"mappings":"scAkCA,SAAS,EAAsB,EAAe,EAAuC,CACnF,GAAI,CAAC,OAAO,UAAU,EAAM,EAAI,GAAS,EACvC,MAAM,IAAI,EAAmB,kDAAkD,EAAK,kBAAkB,IAAQ,CAQlH,SAAgB,EAAwB,EAAe,EAAG,EAAmB,EAAW,CAQtF,OAPA,EAAsB,EAAc,eAAe,CACnD,EAAsB,EAAkB,mBAAmB,CAGzD,IACA,OAAO,EAAa,CAAG,IACvB,GAAyB,IACT,OAAO,EAAiB,CAAG,MAAyB,OAGxE,SAAgB,EAAwB,EAAsB,EAAoC,CAGhG,OAFA,EAAsB,EAAc,eAAe,CAE5C,EAAO,gBACZ,EAAO,iBAAiB,CACtB,UAAW,IAAM,EAAe,IAChC,OAAQ,EACR,QAAS,EAAI,EACb,QAAS,IAAM,EAChB,CAAC,CACF,EACD,CAGH,SAAgB,EAAwB,EAAsB,EAAoC,CAGhG,OAFA,EAAsB,EAAc,eAAe,CAE5C,EAAO,gBACZ,EAAO,iBAAiB,CACtB,UAAW,IAAM,EAAe,IAChC,OAAQ,EACR,QAAS,EAAI,EACb,QAAS,IAAM,EAChB,CAAC,CACF,EACD,CAYH,SAAgB,EAAgB,EAAsB,EAA+C,CAInG,IAAM,GAHc,EAAuB,EAAc,EAAkB,CAG/B,EAA2B,IAAM,EAM7E,OAJI,GAAwB,GACnB,GAGF,EAGT,eAAsB,EAA2B,EAA2C,CAG1F,IAAM,GAAgB,MAAM,EADP,EAAqB,CAAE,MAD7B,IAAgB,EAAY,KAAO,EAAuB,EACd,CAAC,CACK,EAAE,KAAK,aAExE,OAAO,EAAgB,EAAc,IAAA,GAAU,CAGjD,SAAgB,EAA6B,CAC3C,oBACA,gBAIS,CAGT,OAFgB,EAAgB,EAAc,EAAkB,CAE/C,OAGnB,SAAgB,EAA6B,CAC3C,oBACA,eACA,eACA,oBAMS,CAGT,OAFgB,EAAgB,EAAc,EAAkB,CAE/C,EAAwB,EAAc,EAAiB,CAG1E,eAAsB,EAA6B,CACjD,UACA,cACA,gBAKkB,CAElB,GAAM,CAAE,SADS,MAAM,EAAY,EAAY,CAG/C,OAAO,EAAQ,EAAwB,EAAc,EAAQ,kBAAkB,QAAQ,CAGzF,eAAsB,EAA6B,CACjD,UACA,cACA,gBAKkB,CAElB,GAAM,CAAE,SADS,MAAM,EAAY,EAAY,CAG/C,OAAO,EAAQ,EAAwB,EAAc,EAAQ,kBAAkB,QAAQ,CAGzF,SAAgB,EAA6B,CAAE,WAAiD,CAC9F,OAAO,EAAQ,UAGjB,SAAgB,EAA6B,CAAE,WAAiD,CAC9F,OAAO,EAAQ,UAGjB,eAAsB,EACpB,EACA,EAOiB,CACjB,GAAM,CAAE,UAAS,cAAa,oBAAmB,eAAc,gBAAiB,EAEhF,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAA6B,CAAE,oBAAmB,eAAc,CAAC,CAG1E,IAAK,IACH,OAAO,MAAM,EAA6B,CAAE,UAAS,cAAa,eAAc,CAAC,CAGnF,IAAK,IACH,OAAO,EAA6B,CAAE,UAAS,CAAC,CAGlD,QACE,MAAM,IAAI,EAAmB,4BAA4B,IAAa,EAI5E,eAAsB,EACpB,EACA,EAQiB,CACjB,GAAM,CAAE,UAAS,cAAa,oBAAmB,eAAc,eAAc,oBAAqB,EAElG,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAA6B,CAAE,oBAAmB,eAAc,eAAc,mBAAkB,CAAC,CAG1G,IAAK,IACH,OAAO,MAAM,EAA6B,CAAE,UAAS,cAAa,eAAc,CAAC,CAGnF,IAAK,IACH,OAAO,EAA6B,CAAE,UAAS,CAAC,CAGlD,QACE,MAAM,IAAI,EAAmB,4BAA4B,IAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-chain.cjs","names":["pvm","getAvalancheApiUrl"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/p-chain.ts"],"sourcesContent":["import { pvm, utils } from '@avalabs/avalanchejs';\nimport { Environment } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAvalancheApiUrl } from '../_utils';\n\nexport async function getFeeState(environment: Environment): Promise<pvm.FeeState> {\n const pvmApi = new pvm.PVMApi(getAvalancheApiUrl(environment));\n\n const feeState = await pvmApi.getFeeState();\n\n return feeState;\n}\n\nexport function getXpAddressBytes(address: XpAddress): Uint8Array {\n const [, addressBytes] = utils.parseBech32(address);\n\n return addressBytes;\n}\n"],"mappings":"0HAKA,eAAsB,EAAY,EAAiD,CAKjF,OAFiB,MAFF,IAAIA,EAAAA,IAAI,OAAOC,EAAAA,mBAAmB,EAAY,CAAC,CAEhC,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-chain.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/p-chain.ts"],"sourcesContent":["import { pvm, utils } from '@avalabs/avalanchejs';\nimport { Environment } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAvalancheApiUrl } from '../_utils';\n\nexport async function getFeeState(environment: Environment): Promise<pvm.FeeState> {\n const pvmApi = new pvm.PVMApi(getAvalancheApiUrl(environment));\n\n const feeState = await pvmApi.getFeeState();\n\n return feeState;\n}\n\nexport function getXpAddressBytes(address: XpAddress): Uint8Array {\n const [, addressBytes] = utils.parseBech32(address);\n\n return addressBytes;\n}\n"],"mappings":"6FAKA,eAAsB,EAAY,EAAiD,CAKjF,OAFiB,MAFF,IAAI,EAAI,OAAO,EAAmB,EAAY,CAAC,CAEhC,aAAa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../errors.cjs`),t=require(`../_utils.cjs`),n=require(`../../_utils.cjs`);function r(n,r){switch(r){case`C`:return e=>t.getAvalancheProvider(n,r).getAtomicTxStatus(e);case`P`:return e=>t.getAvalancheProvider(n,r).getTxStatus({txID:e});case`X`:return e=>t.getAvalancheProvider(n,r).getTxStatus({txID:e});default:throw new e.InvalidParamsError(`Unsupported chain alias: ${r}`,`Can not get transaction status function for unsupported chain alias.`)}}async function i({chainAlias:t,count:a=13,environment:o,signal:s,txId:c}){if(a<0)return!1;try{let{status:e}=await r(o,t)(c);switch(e){case`Accepted`:case`Committed`:return!0;case`Dropped`:case`Rejected`:return!1;default:break}return await n.wait(1500*1.2**(13-a),s),await i({chainAlias:t,count:a-1,environment:o,signal:s,txId:c})}catch(t){throw new e.SdkError(`Failed to poll transaction status from Avalanche.`,e.ErrorCode.UNKNOWN,{cause:t})}}exports.pollPrimaryNetworkTxStatus=i;
|
|
2
|
+
//# sourceMappingURL=polling.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.cjs","names":["getAvalancheProvider","InvalidParamsError","wait","SdkError","ErrorCode"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/polling.ts"],"sourcesContent":["import type { evm, pvm } from '@avalabs/avalanchejs';\nimport type { AvalancheBlockchainAlias, Environment } from '../../../constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../../errors';\nimport { wait } from '../../_utils';\nimport { getAvalancheProvider } from '../_utils';\n\nconst POLL_START_COUNT = 13;\nconst BASE_WAIT_PERIOD_MS = 1500;\nconst MULTIPLIER = 1.2;\n\nexport type GetTxStatusFunction<T extends evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> = (\n txId: string,\n) => Promise<T>;\n\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'C',\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'P',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'X',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> {\n switch (chainAlias) {\n case 'C': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getAtomicTxStatus(txId);\n }\n case 'P': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n case 'X': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get transaction status function for unsupported chain alias.',\n );\n }\n }\n}\n\nexport async function pollPrimaryNetworkTxStatus({\n chainAlias,\n count = POLL_START_COUNT,\n environment,\n signal,\n txId,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n count?: number;\n environment: Environment;\n signal?: AbortSignal;\n txId: string;\n}): Promise<boolean> {\n if (count < 0) {\n return false;\n }\n\n try {\n const pollFunction = getChainAliasTxStatusFunction(environment, chainAlias);\n\n const { status } = await pollFunction(txId);\n\n switch (status) {\n case 'Accepted':\n case 'Committed': {\n return true;\n }\n\n case 'Dropped':\n case 'Rejected': {\n return false;\n }\n\n default: {\n // Fall through to retry logic.\n break;\n }\n }\n\n const failures = POLL_START_COUNT - count;\n\n const waitPeriod = BASE_WAIT_PERIOD_MS * MULTIPLIER ** failures;\n\n await wait(waitPeriod, signal);\n\n return await pollPrimaryNetworkTxStatus({ chainAlias, count: count - 1, environment, signal, txId });\n } catch (error) {\n throw new SdkError('Failed to poll transaction status from Avalanche.', ErrorCode.UNKNOWN, { cause: error });\n }\n}\n"],"mappings":"gGA8BA,SAAgB,EACd,EACA,EAC8E,CAC9E,OAAQ,EAAR,CACE,IAAK,IACH,MAAQ,IAAiBA,EAAAA,qBAAqB,EAAa,EAAW,CAAC,kBAAkB,EAAK,CAEhG,IAAK,IACH,MAAQ,IAAiBA,EAAAA,qBAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,IAAK,IACH,MAAQ,IAAiBA,EAAAA,qBAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,QACE,MAAM,IAAIC,EAAAA,mBACR,4BAA4B,IAC5B,uEACD,EAKP,eAAsB,EAA2B,CAC/C,aACA,QAAQ,GACR,cACA,SACA,QAOmB,CACnB,GAAI,EAAQ,EACV,MAAO,GAGT,GAAI,CAGF,GAAM,CAAE,UAAW,MAFE,EAA8B,EAAa,EAAW,CAErC,EAAK,CAE3C,OAAQ,EAAR,CACE,IAAK,WACL,IAAK,YACH,MAAO,GAGT,IAAK,UACL,IAAK,WACH,MAAO,GAGT,QAEE,MAUJ,OAFA,MAAMC,EAAAA,KAFa,KAAsB,MAFxB,GAAmB,GAIb,EAAO,CAEvB,MAAM,EAA2B,CAAE,aAAY,MAAO,EAAQ,EAAG,cAAa,SAAQ,OAAM,CAAC,OAC7F,EAAO,CACd,MAAM,IAAIC,EAAAA,SAAS,oDAAqDC,EAAAA,UAAU,QAAS,CAAE,MAAO,EAAO,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e,InvalidParamsError as t,SdkError as n}from"../../../errors.js";import{getAvalancheProvider as r}from"../_utils.js";import{wait as i}from"../../_utils.js";function a(e,n){switch(n){case`C`:return t=>r(e,n).getAtomicTxStatus(t);case`P`:return t=>r(e,n).getTxStatus({txID:t});case`X`:return t=>r(e,n).getTxStatus({txID:t});default:throw new t(`Unsupported chain alias: ${n}`,`Can not get transaction status function for unsupported chain alias.`)}}async function o({chainAlias:t,count:r=13,environment:s,signal:c,txId:l}){if(r<0)return!1;try{let{status:e}=await a(s,t)(l);switch(e){case`Accepted`:case`Committed`:return!0;case`Dropped`:case`Rejected`:return!1;default:break}return await i(1500*1.2**(13-r),c),await o({chainAlias:t,count:r-1,environment:s,signal:c,txId:l})}catch(t){throw new n(`Failed to poll transaction status from Avalanche.`,e.UNKNOWN,{cause:t})}}export{o as pollPrimaryNetworkTxStatus};
|
|
2
|
+
//# sourceMappingURL=polling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/polling.ts"],"sourcesContent":["import type { evm, pvm } from '@avalabs/avalanchejs';\nimport type { AvalancheBlockchainAlias, Environment } from '../../../constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../../errors';\nimport { wait } from '../../_utils';\nimport { getAvalancheProvider } from '../_utils';\n\nconst POLL_START_COUNT = 13;\nconst BASE_WAIT_PERIOD_MS = 1500;\nconst MULTIPLIER = 1.2;\n\nexport type GetTxStatusFunction<T extends evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> = (\n txId: string,\n) => Promise<T>;\n\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'C',\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'P',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'X',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> {\n switch (chainAlias) {\n case 'C': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getAtomicTxStatus(txId);\n }\n case 'P': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n case 'X': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get transaction status function for unsupported chain alias.',\n );\n }\n }\n}\n\nexport async function pollPrimaryNetworkTxStatus({\n chainAlias,\n count = POLL_START_COUNT,\n environment,\n signal,\n txId,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n count?: number;\n environment: Environment;\n signal?: AbortSignal;\n txId: string;\n}): Promise<boolean> {\n if (count < 0) {\n return false;\n }\n\n try {\n const pollFunction = getChainAliasTxStatusFunction(environment, chainAlias);\n\n const { status } = await pollFunction(txId);\n\n switch (status) {\n case 'Accepted':\n case 'Committed': {\n return true;\n }\n\n case 'Dropped':\n case 'Rejected': {\n return false;\n }\n\n default: {\n // Fall through to retry logic.\n break;\n }\n }\n\n const failures = POLL_START_COUNT - count;\n\n const waitPeriod = BASE_WAIT_PERIOD_MS * MULTIPLIER ** failures;\n\n await wait(waitPeriod, signal);\n\n return await pollPrimaryNetworkTxStatus({ chainAlias, count: count - 1, environment, signal, txId });\n } catch (error) {\n throw new SdkError('Failed to poll transaction status from Avalanche.', ErrorCode.UNKNOWN, { cause: error });\n }\n}\n"],"mappings":"gLA8BA,SAAgB,EACd,EACA,EAC8E,CAC9E,OAAQ,EAAR,CACE,IAAK,IACH,MAAQ,IAAiB,EAAqB,EAAa,EAAW,CAAC,kBAAkB,EAAK,CAEhG,IAAK,IACH,MAAQ,IAAiB,EAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,IAAK,IACH,MAAQ,IAAiB,EAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,QACE,MAAM,IAAI,EACR,4BAA4B,IAC5B,uEACD,EAKP,eAAsB,EAA2B,CAC/C,aACA,QAAQ,GACR,cACA,SACA,QAOmB,CACnB,GAAI,EAAQ,EACV,MAAO,GAGT,GAAI,CAGF,GAAM,CAAE,UAAW,MAFE,EAA8B,EAAa,EAAW,CAErC,EAAK,CAE3C,OAAQ,EAAR,CACE,IAAK,WACL,IAAK,YACH,MAAO,GAGT,IAAK,UACL,IAAK,WACH,MAAO,GAGT,QAEE,MAUJ,OAFA,MAAM,EAFa,KAAsB,MAFxB,GAAmB,GAIb,EAAO,CAEvB,MAAM,EAA2B,CAAE,aAAY,MAAO,EAAQ,EAAG,cAAa,SAAQ,OAAM,CAAC,OAC7F,EAAO,CACd,MAAM,IAAI,EAAS,oDAAqD,EAAU,QAAS,CAAE,MAAO,EAAO,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../_utils.cjs`);let t=require(`@avalabs/avalanchejs`);function n({amountInNanoAvax:n,baseFeeInNanoAvax:r,context:i,destinationChainAlias:a,fromAddress:o,nonce:s,toAddress:c}){let l=e.getChainIdFromContext(a,i),u=t.utils.hexToBuffer(o),[,,d]=t.utils.parse(c);return t.evm.newExportTxFromBaseFee(i,r,n,l,u,[d],s)}function r({amountInNanoAvax:n,changeAddress:r,context:i,destinationChainAlias:a,feeState:o,fromAddresses:s,toAddress:c,utxos:l}){let u=e.getChainIdFromContext(a,i),[,,d]=t.utils.parse(c),[,,f]=t.utils.parse(r),p=e.getAddressesAsBuffers(s),m=t.TransferableOutput.fromNative(i.avaxAssetID,n,[d]),h=e.sortUTXOsByAmount(l,!0);return t.pvm.newExportTx({changeAddressesBytes:[f],destinationChainId:u,feeState:o,fromAddressesBytes:p,outputs:[m],utxos:h},i)}function i({amountInNanoAvax:n,changeAddress:r,context:i,destinationChainAlias:a,fromAddresses:o,toAddress:s,utxos:c}){let l=e.getChainIdFromContext(a,i),[,,u]=t.utils.parse(s),[,,d]=t.utils.parse(r),f=e.getAddressesAsBuffers(o),p=t.TransferableOutput.fromNative(i.avaxAssetID,n,[u]),m=e.sortUTXOsByAmount(c,!0);return t.avm.newExportTx(i,l,f,m,[p],{threshold:1,changeAddresses:[d]})}function a(e){switch(e.sourceChainAlias){case`C`:return n(e);case`P`:return r(e);case`X`:return i(e)}}function o({atomicUtxos:n,baseFeeInNanoAvax:r,context:i,fromAddresses:a,sourceChainAlias:o,toAddress:s}){let c=e.getChainIdFromContext(o,i),l=e.getAddressesAsBuffers(a),u=t.utils.hexToBuffer(s);return t.evm.newImportTxFromBaseFee(i,u,l,n,c,r)}function s({atomicUtxos:n,context:r,feeState:i,fromAddresses:a,sourceChainAlias:o,toAddress:s}){let c=e.getChainIdFromContext(o,r),l=e.getAddressesAsBuffers(a),[,,u]=t.utils.parse(s);return t.pvm.newImportTx({fromAddressesBytes:l,feeState:i,sourceChainId:c,toAddressesBytes:[u],utxos:n},r)}function c({atomicUtxos:n,changeAddress:r,context:i,fromAddresses:a,sourceChainAlias:o,toAddress:s}){let c=e.getChainIdFromContext(o,i),l=e.getAddressesAsBuffers(a),[,,u]=t.utils.parse(r),[,,d]=t.utils.parse(s);return t.avm.newImportTx(i,c,n,[d],l,{changeAddresses:[u]})}function l(e){switch(e.destinationChainAlias){case`C`:return o(e);case`P`:return s(e);case`X`:return c(e)}}exports.exportTx=a,exports.importTx=l;
|
|
2
|
+
//# sourceMappingURL=transactions.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.cjs","names":["getChainIdFromContext","utils","evm","getAddressesAsBuffers","TransferableOutput","sortUTXOsByAmount","pvm","avm"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/transactions.ts"],"sourcesContent":["import {\n avm,\n evm,\n pvm,\n TransferableOutput,\n utils,\n type Context,\n type UnsignedTx,\n type Utxo,\n} from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport type { AvalancheBlockchainAlias } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAddressesAsBuffers, getChainIdFromContext, sortUTXOsByAmount } from '../_utils';\n\ninterface BaseExportTxParams<Alias extends AvalancheBlockchainAlias> {\n amountInNanoAvax: bigint;\n context: Context.Context;\n sourceChainAlias: Alias;\n destinationChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n /**\n * The bech32 formatted address of the recipient on the destination chain.\n *\n * Do not use the EVM hex formatted address here for C-Chain. Use the Coreth bech32 formatted address.\n */\n toAddress: XpAddress;\n}\n\nexport interface ExportCChainTxParams extends BaseExportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n fromAddress: EvmAddress;\n nonce: bigint;\n}\n\nfunction exportCChainTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context,\n destinationChainAlias,\n fromAddress,\n nonce,\n toAddress,\n}: ExportCChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const fromAddressBuffer = utils.hexToBuffer(fromAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return evm.newExportTxFromBaseFee(\n context,\n baseFeeInNanoAvax,\n amountInNanoAvax,\n destinationChainId,\n fromAddressBuffer,\n [toAddressBytes],\n nonce,\n );\n}\n\nexport interface ExportPChainTxParams extends BaseExportTxParams<'P'> {\n /** P-Chain change address. */\n changeAddress: XpAddress;\n feeState: pvm.FeeState;\n /** List of P-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportPChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n feeState,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportPChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return pvm.newExportTx(\n {\n changeAddressesBytes: [changeAddressBytes],\n destinationChainId,\n feeState,\n fromAddressesBytes,\n outputs: [output],\n utxos: sortedUtxos,\n },\n context,\n );\n}\n\nexport interface ExportXChainTxParams extends BaseExportTxParams<'X'> {\n /** X-Chain change address. */\n changeAddress: XpAddress;\n /** List of X-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportXChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportXChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return avm.newExportTx(context, destinationChainId, fromAddressesBytes, sortedUtxos, [output], {\n threshold: 1,\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ExportTxParams = ExportCChainTxParams | ExportPChainTxParams | ExportXChainTxParams;\n\nexport function exportTx(params: ExportTxParams): UnsignedTx {\n switch (params.sourceChainAlias) {\n case 'C': {\n return exportCChainTx(params);\n }\n\n case 'P': {\n return exportPChainTx(params);\n }\n\n case 'X': {\n return exportXChainTx(params);\n }\n }\n}\n\ninterface BaseImportTxParams<Alias extends AvalancheBlockchainAlias> {\n atomicUtxos: Utxo[];\n context: Context.Context;\n destinationChainAlias: Alias;\n fromAddresses: XpAddress[];\n sourceChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n}\n\nexport interface ImportCChainTxParams extends BaseImportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n toAddress: EvmAddress;\n}\n\nfunction importCChainTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportCChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const toAddressBytes = utils.hexToBuffer(toAddress);\n\n return evm.newImportTxFromBaseFee(\n context,\n toAddressBytes,\n fromAddressesBytes,\n atomicUtxos,\n sourceChainId,\n baseFeeInNanoAvax,\n );\n}\n\nexport interface ImportPChainTxParams extends BaseImportTxParams<'P'> {\n feeState: pvm.FeeState;\n toAddress: XpAddress;\n}\n\nfunction importPChainTx({\n atomicUtxos,\n context,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportPChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return pvm.newImportTx(\n {\n fromAddressesBytes,\n feeState,\n sourceChainId,\n toAddressesBytes: [toAddressBytes],\n utxos: atomicUtxos,\n },\n context,\n );\n}\n\nexport interface ImportXChainTxParams extends BaseImportTxParams<'X'> {\n changeAddress: XpAddress;\n toAddress: XpAddress;\n}\n\nfunction importXChainTx({\n atomicUtxos,\n changeAddress,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportXChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return avm.newImportTx(context, sourceChainId, atomicUtxos, [toAddressBytes], fromAddressesBytes, {\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ImportTxParams = ImportCChainTxParams | ImportPChainTxParams | ImportXChainTxParams;\n\nexport function importTx(params: ImportTxParams): UnsignedTx {\n switch (params.destinationChainAlias) {\n case 'C': {\n return importCChainTx(params);\n }\n\n case 'P': {\n return importPChainTx(params);\n }\n\n case 'X': {\n return importXChainTx(params);\n }\n }\n}\n"],"mappings":"0HAkCA,SAAS,EAAe,CACtB,mBACA,oBACA,UACA,wBACA,cACA,QACA,aACmC,CACnC,IAAM,EAAqBA,EAAAA,sBAAsB,EAAuB,EAAQ,CAC1E,EAAoBC,EAAAA,MAAM,YAAY,EAAY,CAClD,GAAK,GAAkBA,EAAAA,MAAM,MAAM,EAAU,CAEnD,OAAOC,EAAAA,IAAI,uBACT,EACA,EACA,EACA,EACA,EACA,CAAC,EAAe,CAChB,EACD,CAYH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,WACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqBF,EAAAA,sBAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkBC,EAAAA,MAAM,MAAM,EAAU,CAE7C,GAAK,GAAsBA,EAAAA,MAAM,MAAM,EAAc,CACrD,EAAqBE,EAAAA,sBAAsB,EAAc,CACzD,EAASC,EAAAA,mBAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAcC,EAAAA,kBAAkB,EAAO,GAAK,CAElD,OAAOC,EAAAA,IAAI,YACT,CACE,qBAAsB,CAAC,EAAmB,CAC1C,qBACA,WACA,qBACA,QAAS,CAAC,EAAO,CACjB,MAAO,EACR,CACD,EACD,CAWH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqBN,EAAAA,sBAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkBC,EAAAA,MAAM,MAAM,EAAU,CAE7C,GAAK,GAAsBA,EAAAA,MAAM,MAAM,EAAc,CACrD,EAAqBE,EAAAA,sBAAsB,EAAc,CACzD,EAASC,EAAAA,mBAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAcC,EAAAA,kBAAkB,EAAO,GAAK,CAElD,OAAOE,EAAAA,IAAI,YAAY,EAAS,EAAoB,EAAoB,EAAa,CAAC,EAAO,CAAE,CAC7F,UAAW,EACX,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,iBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,EAkBnC,SAAS,EAAe,CACtB,cACA,oBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgBP,EAAAA,sBAAsB,EAAkB,EAAQ,CAChE,EAAqBG,EAAAA,sBAAsB,EAAc,CACzD,EAAiBF,EAAAA,MAAM,YAAY,EAAU,CAEnD,OAAOC,EAAAA,IAAI,uBACT,EACA,EACA,EACA,EACA,EACA,EACD,CAQH,SAAS,EAAe,CACtB,cACA,UACA,WACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgBF,EAAAA,sBAAsB,EAAkB,EAAQ,CAChE,EAAqBG,EAAAA,sBAAsB,EAAc,CACzD,GAAK,GAAkBF,EAAAA,MAAM,MAAM,EAAU,CAEnD,OAAOK,EAAAA,IAAI,YACT,CACE,qBACA,WACA,gBACA,iBAAkB,CAAC,EAAe,CAClC,MAAO,EACR,CACD,EACD,CAQH,SAAS,EAAe,CACtB,cACA,gBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgBN,EAAAA,sBAAsB,EAAkB,EAAQ,CAChE,EAAqBG,EAAAA,sBAAsB,EAAc,CACzD,GAAK,GAAsBF,EAAAA,MAAM,MAAM,EAAc,CACrD,GAAK,GAAkBA,EAAAA,MAAM,MAAM,EAAU,CAEnD,OAAOM,EAAAA,IAAI,YAAY,EAAS,EAAe,EAAa,CAAC,EAAe,CAAE,EAAoB,CAChG,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,sBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getAddressesAsBuffers as e,getChainIdFromContext as t,sortUTXOsByAmount as n}from"../_utils.js";import{TransferableOutput as r,avm as i,evm as a,pvm as o,utils as s}from"@avalabs/avalanchejs";function c({amountInNanoAvax:e,baseFeeInNanoAvax:n,context:r,destinationChainAlias:i,fromAddress:o,nonce:c,toAddress:l}){let u=t(i,r),d=s.hexToBuffer(o),[,,f]=s.parse(l);return a.newExportTxFromBaseFee(r,n,e,u,d,[f],c)}function l({amountInNanoAvax:i,changeAddress:a,context:c,destinationChainAlias:l,feeState:u,fromAddresses:d,toAddress:f,utxos:p}){let m=t(l,c),[,,h]=s.parse(f),[,,g]=s.parse(a),_=e(d),v=r.fromNative(c.avaxAssetID,i,[h]),y=n(p,!0);return o.newExportTx({changeAddressesBytes:[g],destinationChainId:m,feeState:u,fromAddressesBytes:_,outputs:[v],utxos:y},c)}function u({amountInNanoAvax:a,changeAddress:o,context:c,destinationChainAlias:l,fromAddresses:u,toAddress:d,utxos:f}){let p=t(l,c),[,,m]=s.parse(d),[,,h]=s.parse(o),g=e(u),_=r.fromNative(c.avaxAssetID,a,[m]),v=n(f,!0);return i.newExportTx(c,p,g,v,[_],{threshold:1,changeAddresses:[h]})}function d(e){switch(e.sourceChainAlias){case`C`:return c(e);case`P`:return l(e);case`X`:return u(e)}}function f({atomicUtxos:n,baseFeeInNanoAvax:r,context:i,fromAddresses:o,sourceChainAlias:c,toAddress:l}){let u=t(c,i),d=e(o),f=s.hexToBuffer(l);return a.newImportTxFromBaseFee(i,f,d,n,u,r)}function p({atomicUtxos:n,context:r,feeState:i,fromAddresses:a,sourceChainAlias:c,toAddress:l}){let u=t(c,r),d=e(a),[,,f]=s.parse(l);return o.newImportTx({fromAddressesBytes:d,feeState:i,sourceChainId:u,toAddressesBytes:[f],utxos:n},r)}function m({atomicUtxos:n,changeAddress:r,context:a,fromAddresses:o,sourceChainAlias:c,toAddress:l}){let u=t(c,a),d=e(o),[,,f]=s.parse(r),[,,p]=s.parse(l);return i.newImportTx(a,u,n,[p],d,{changeAddresses:[f]})}function h(e){switch(e.destinationChainAlias){case`C`:return f(e);case`P`:return p(e);case`X`:return m(e)}}export{d as exportTx,h as importTx};
|
|
2
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/transactions.ts"],"sourcesContent":["import {\n avm,\n evm,\n pvm,\n TransferableOutput,\n utils,\n type Context,\n type UnsignedTx,\n type Utxo,\n} from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport type { AvalancheBlockchainAlias } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAddressesAsBuffers, getChainIdFromContext, sortUTXOsByAmount } from '../_utils';\n\ninterface BaseExportTxParams<Alias extends AvalancheBlockchainAlias> {\n amountInNanoAvax: bigint;\n context: Context.Context;\n sourceChainAlias: Alias;\n destinationChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n /**\n * The bech32 formatted address of the recipient on the destination chain.\n *\n * Do not use the EVM hex formatted address here for C-Chain. Use the Coreth bech32 formatted address.\n */\n toAddress: XpAddress;\n}\n\nexport interface ExportCChainTxParams extends BaseExportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n fromAddress: EvmAddress;\n nonce: bigint;\n}\n\nfunction exportCChainTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context,\n destinationChainAlias,\n fromAddress,\n nonce,\n toAddress,\n}: ExportCChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const fromAddressBuffer = utils.hexToBuffer(fromAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return evm.newExportTxFromBaseFee(\n context,\n baseFeeInNanoAvax,\n amountInNanoAvax,\n destinationChainId,\n fromAddressBuffer,\n [toAddressBytes],\n nonce,\n );\n}\n\nexport interface ExportPChainTxParams extends BaseExportTxParams<'P'> {\n /** P-Chain change address. */\n changeAddress: XpAddress;\n feeState: pvm.FeeState;\n /** List of P-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportPChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n feeState,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportPChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return pvm.newExportTx(\n {\n changeAddressesBytes: [changeAddressBytes],\n destinationChainId,\n feeState,\n fromAddressesBytes,\n outputs: [output],\n utxos: sortedUtxos,\n },\n context,\n );\n}\n\nexport interface ExportXChainTxParams extends BaseExportTxParams<'X'> {\n /** X-Chain change address. */\n changeAddress: XpAddress;\n /** List of X-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportXChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportXChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return avm.newExportTx(context, destinationChainId, fromAddressesBytes, sortedUtxos, [output], {\n threshold: 1,\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ExportTxParams = ExportCChainTxParams | ExportPChainTxParams | ExportXChainTxParams;\n\nexport function exportTx(params: ExportTxParams): UnsignedTx {\n switch (params.sourceChainAlias) {\n case 'C': {\n return exportCChainTx(params);\n }\n\n case 'P': {\n return exportPChainTx(params);\n }\n\n case 'X': {\n return exportXChainTx(params);\n }\n }\n}\n\ninterface BaseImportTxParams<Alias extends AvalancheBlockchainAlias> {\n atomicUtxos: Utxo[];\n context: Context.Context;\n destinationChainAlias: Alias;\n fromAddresses: XpAddress[];\n sourceChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n}\n\nexport interface ImportCChainTxParams extends BaseImportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n toAddress: EvmAddress;\n}\n\nfunction importCChainTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportCChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const toAddressBytes = utils.hexToBuffer(toAddress);\n\n return evm.newImportTxFromBaseFee(\n context,\n toAddressBytes,\n fromAddressesBytes,\n atomicUtxos,\n sourceChainId,\n baseFeeInNanoAvax,\n );\n}\n\nexport interface ImportPChainTxParams extends BaseImportTxParams<'P'> {\n feeState: pvm.FeeState;\n toAddress: XpAddress;\n}\n\nfunction importPChainTx({\n atomicUtxos,\n context,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportPChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return pvm.newImportTx(\n {\n fromAddressesBytes,\n feeState,\n sourceChainId,\n toAddressesBytes: [toAddressBytes],\n utxos: atomicUtxos,\n },\n context,\n );\n}\n\nexport interface ImportXChainTxParams extends BaseImportTxParams<'X'> {\n changeAddress: XpAddress;\n toAddress: XpAddress;\n}\n\nfunction importXChainTx({\n atomicUtxos,\n changeAddress,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportXChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return avm.newImportTx(context, sourceChainId, atomicUtxos, [toAddressBytes], fromAddressesBytes, {\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ImportTxParams = ImportCChainTxParams | ImportPChainTxParams | ImportXChainTxParams;\n\nexport function importTx(params: ImportTxParams): UnsignedTx {\n switch (params.destinationChainAlias) {\n case 'C': {\n return importCChainTx(params);\n }\n\n case 'P': {\n return importPChainTx(params);\n }\n\n case 'X': {\n return importXChainTx(params);\n }\n }\n}\n"],"mappings":"uMAkCA,SAAS,EAAe,CACtB,mBACA,oBACA,UACA,wBACA,cACA,QACA,aACmC,CACnC,IAAM,EAAqB,EAAsB,EAAuB,EAAQ,CAC1E,EAAoB,EAAM,YAAY,EAAY,CAClD,GAAK,GAAkB,EAAM,MAAM,EAAU,CAEnD,OAAO,EAAI,uBACT,EACA,EACA,EACA,EACA,EACA,CAAC,EAAe,CAChB,EACD,CAYH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,WACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqB,EAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkB,EAAM,MAAM,EAAU,CAE7C,GAAK,GAAsB,EAAM,MAAM,EAAc,CACrD,EAAqB,EAAsB,EAAc,CACzD,EAAS,EAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAc,EAAkB,EAAO,GAAK,CAElD,OAAO,EAAI,YACT,CACE,qBAAsB,CAAC,EAAmB,CAC1C,qBACA,WACA,qBACA,QAAS,CAAC,EAAO,CACjB,MAAO,EACR,CACD,EACD,CAWH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqB,EAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkB,EAAM,MAAM,EAAU,CAE7C,GAAK,GAAsB,EAAM,MAAM,EAAc,CACrD,EAAqB,EAAsB,EAAc,CACzD,EAAS,EAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAc,EAAkB,EAAO,GAAK,CAElD,OAAO,EAAI,YAAY,EAAS,EAAoB,EAAoB,EAAa,CAAC,EAAO,CAAE,CAC7F,UAAW,EACX,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,iBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,EAkBnC,SAAS,EAAe,CACtB,cACA,oBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgB,EAAsB,EAAkB,EAAQ,CAChE,EAAqB,EAAsB,EAAc,CACzD,EAAiB,EAAM,YAAY,EAAU,CAEnD,OAAO,EAAI,uBACT,EACA,EACA,EACA,EACA,EACA,EACD,CAQH,SAAS,EAAe,CACtB,cACA,UACA,WACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgB,EAAsB,EAAkB,EAAQ,CAChE,EAAqB,EAAsB,EAAc,CACzD,GAAK,GAAkB,EAAM,MAAM,EAAU,CAEnD,OAAO,EAAI,YACT,CACE,qBACA,WACA,gBACA,iBAAkB,CAAC,EAAe,CAClC,MAAO,EACR,CACD,EACD,CAQH,SAAS,EAAe,CACtB,cACA,gBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgB,EAAsB,EAAkB,EAAQ,CAChE,EAAqB,EAAsB,EAAc,CACzD,GAAK,GAAsB,EAAM,MAAM,EAAc,CACrD,GAAK,GAAkB,EAAM,MAAM,EAAU,CAEnD,OAAO,EAAI,YAAY,EAAS,EAAe,EAAa,CAAC,EAAe,CAAE,EAAoB,CAChG,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,sBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`./constants.cjs`);let r=require(`@avalabs/avalanchejs`),i=require(`es-toolkit`);function a(e,t){try{return e()}catch(e){throw t(e)}}function o({amountIn:e,sourceAsset:{decimals:t},targetAsset:{decimals:n}}){return t<n?e*10n**BigInt(n-t):t>n?e/10n**BigInt(t-n):e}function s(e){return e&&e.replace(n.CHAIN_PREFIXES_REGEX,``)}function c(e,t){let n=t?`fuji`:`avax`;return s(e).startsWith(n)}function l(n,r){let i=r?e.AvalancheFujiBlockchainChainIds:e.AvalancheMainnetBlockchainChainIds;if(n===i.C)return`C`;if(n===i.P)return`P`;if(n===i.X)return`X`;throw new t.InvalidParamsError(`Unsupported Avalanche chainId for ${r?`testnet`:`mainnet`}: ${n}`,`Chain ID ${n} is not supported for ${r?`Fuji`:`Mainnet`}. Supported chain IDs are: ${Object.values(i).join(`, `)}.`)}function u(e){return e===`C`?n.AVALANCHE_C_CHAIN_NATIVE_ASSET:n.AVALANCHE_PX_CHAIN_NATIVE_ASSET}function d(r){switch(r){case e.Environment.TEST:return n.AVALANCHE_API_URIS.fuji;case e.Environment.PROD:return n.AVALANCHE_API_URIS.mainnet;default:throw new t.SdkError(`Unsupported environment for Avalanche CCT service.`,t.ErrorCode.INVALID_PARAMS)}}function f(e){return e*n.WEI_PER_NANO_AVAX_BIGINT}function p(e,n){switch(e){case`C`:return n.cBlockchainID;case`P`:return n.pBlockchainID;case`X`:return n.xBlockchainID;default:throw new t.InvalidParamsError(`Unsupported chain alias: ${e}`)}}function m(e,t){return(0,i.orderBy)(e.map(e=>({utxo:e,...r.utils.getUtxoInfo(e)})),[`amount`],[t?`desc`:`asc`]).map(({utxo:e})=>e)}function h(e){return e.map(e=>r.utils.parse(e)[2])}function g(n){switch(n){case e.Environment.TEST:return!0;case e.Environment.PROD:return!1;default:throw new t.SdkError(`Unsupported environment for Avalanche CCT service.`,t.ErrorCode.INVALID_PARAMS)}}function _(e,n){let i=d(e);switch(n){case`C`:return new r.evm.EVMApi(i);case`P`:return new r.pvm.PVMApi(i);case`X`:return new r.avm.AVMApi(i);default:throw new t.InvalidParamsError(`Unsupported chain alias: ${n}`,`Can not get Avalanche provider for unsupported chain alias.`)}}exports.convertNanoAvaxToWei=f,exports.getAddressesAsBuffers=h,exports.getAvalancheApiUrl=d,exports.getAvalancheProvider=_,exports.getChainAlias=l,exports.getChainIdFromContext=p,exports.getEnvironmentIsTestnet=g,exports.getNativeTokenForChainAlias=u,exports.getOutputAmountForAvalancheCct=o,exports.sortUTXOsByAmount=m,exports.stripAddressPrefix=s,exports.tryOrThrow=a,exports.xpAddressMatchesNetwork=c;
|
|
2
|
+
//# sourceMappingURL=_utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.cjs","names":["CHAIN_PREFIXES_REGEX","AvalancheFujiBlockchainChainIds","AvalancheMainnetBlockchainChainIds","InvalidParamsError","AVALANCHE_C_CHAIN_NATIVE_ASSET","AVALANCHE_PX_CHAIN_NATIVE_ASSET","Environment","AVALANCHE_API_URIS","SdkError","ErrorCode","WEI_PER_NANO_AVAX_BIGINT","utils","evm","pvm","avm"],"sources":["../../../src/transfer-service/avalanche-cct/_utils.ts"],"sourcesContent":["import { avm, evm, pvm, utils, type Context, type Utxo } from '@avalabs/avalanchejs';\nimport { orderBy } from 'es-toolkit';\nimport {\n AvalancheChainIds,\n AvalancheFujiBlockchainChainIds,\n AvalancheMainnetBlockchainChainIds,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { XpAddress } from './types';\nimport {\n AVALANCHE_API_URIS,\n AVALANCHE_C_CHAIN_NATIVE_ASSET,\n AVALANCHE_PX_CHAIN_NATIVE_ASSET,\n CHAIN_PREFIXES_REGEX,\n WEI_PER_NANO_AVAX_BIGINT,\n} from './constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../errors';\n\nexport function tryOrThrow<T>(fn: () => T, errorHandler: (error: unknown) => SdkError): T {\n try {\n return fn();\n } catch (error) {\n throw errorHandler(error);\n }\n}\n\n/**\n * Remaps Avalanche C-Chain CAIP2 chain IDs to their corresponding EIP-155 chain IDs.\n */\nexport function mapAvalancheBlockchainChainIdToEip155ChainId(caip2ChainId: Caip2ChainId): Caip2ChainId {\n switch (caip2ChainId) {\n case 'avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a': {\n return AvalancheChainIds.MAINNET;\n }\n\n case 'avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd': {\n return AvalancheChainIds.FUJI;\n }\n\n default: {\n return caip2ChainId;\n }\n }\n}\n\nexport function getOutputAmountForAvalancheCct({\n amountIn,\n sourceAsset: { decimals: sourceDecimals },\n targetAsset: { decimals: targetDecimals },\n}: {\n amountIn: bigint;\n sourceAsset: NativeAsset;\n targetAsset: NativeAsset;\n}): bigint {\n if (sourceDecimals < targetDecimals) {\n return amountIn * 10n ** BigInt(targetDecimals - sourceDecimals);\n }\n\n if (sourceDecimals > targetDecimals) {\n return amountIn / 10n ** BigInt(sourceDecimals - targetDecimals);\n }\n\n return amountIn;\n}\n\nexport function stripAddressPrefix<T extends string>(address: T): T {\n return address ? (address.replace(CHAIN_PREFIXES_REGEX, '') as T) : address;\n}\n\nexport function xpAddressMatchesNetwork(xpAddress: XpAddress, isTestnet: boolean): boolean {\n const prefix = isTestnet ? 'fuji' : 'avax';\n return stripAddressPrefix(xpAddress).startsWith(prefix);\n}\n\nexport function getChainAlias(chainId: Caip2ChainId, isTestnet: boolean): AvalancheBlockchainAlias {\n const chainIds = isTestnet ? AvalancheFujiBlockchainChainIds : AvalancheMainnetBlockchainChainIds;\n\n if (chainId === chainIds.C) {\n return 'C';\n }\n\n if (chainId === chainIds.P) {\n return 'P';\n }\n\n if (chainId === chainIds.X) {\n return 'X';\n }\n throw new InvalidParamsError(\n `Unsupported Avalanche chainId for ${isTestnet ? 'testnet' : 'mainnet'}: ${chainId}`,\n `Chain ID ${chainId} is not supported for ${\n isTestnet ? 'Fuji' : 'Mainnet'\n }. Supported chain IDs are: ${Object.values(chainIds).join(', ')}.`,\n );\n}\n\nexport function getNativeTokenForChainAlias(chainAlias: AvalancheBlockchainAlias): NativeAsset {\n if (chainAlias === 'C') {\n return AVALANCHE_C_CHAIN_NATIVE_ASSET;\n }\n\n return AVALANCHE_PX_CHAIN_NATIVE_ASSET;\n}\n\nexport function getAvalancheApiUrl(environment: Environment): string {\n switch (environment) {\n case Environment.TEST: {\n return AVALANCHE_API_URIS.fuji;\n }\n\n case Environment.PROD: {\n return AVALANCHE_API_URIS.mainnet;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function convertNanoAvaxToWei(nanoAvaxAmount: bigint): bigint {\n return nanoAvaxAmount * WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function convertWeiToNanoAvax(weiAmount: bigint): bigint {\n return weiAmount / WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function getChainIdFromContext(chainAlias: AvalancheBlockchainAlias, context: Context.Context): string {\n switch (chainAlias) {\n case 'C': {\n return context.cBlockchainID;\n }\n case 'P': {\n return context.pBlockchainID;\n }\n case 'X': {\n return context.xBlockchainID;\n }\n default: {\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n }\n}\n\nexport function sortUTXOsByAmount(utxos: Utxo[], isDescending: boolean): Utxo[] {\n const utxosWithInfo = utxos.map((utxo) => ({\n utxo,\n ...utils.getUtxoInfo(utxo),\n }));\n\n return orderBy(utxosWithInfo, ['amount'], [isDescending ? 'desc' : 'asc']).map(({ utxo }) => utxo);\n}\n\nexport function getAddressesAsBuffers(addresses: string[]): Uint8Array[] {\n return addresses.map((address) => utils.parse(address)[2]);\n}\n\nexport function getEnvironmentIsTestnet(environment: Environment): boolean {\n switch (environment) {\n case Environment.TEST: {\n return true;\n }\n\n case Environment.PROD: {\n return false;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'C'): evm.EVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'P'): pvm.PVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'X'): avm.AVMApi;\nexport function getAvalancheProvider(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): avm.AVMApi | pvm.PVMApi | evm.EVMApi {\n const baseUrl = getAvalancheApiUrl(environment);\n\n switch (chainAlias) {\n case 'C': {\n return new evm.EVMApi(baseUrl);\n }\n case 'P': {\n return new pvm.PVMApi(baseUrl);\n }\n case 'X': {\n return new avm.AVMApi(baseUrl);\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get Avalanche provider for unsupported chain alias.',\n );\n }\n }\n}\n"],"mappings":"gNAqBA,SAAgB,EAAc,EAAa,EAA+C,CACxF,GAAI,CACF,OAAO,GAAI,OACJ,EAAO,CACd,MAAM,EAAa,EAAM,EAuB7B,SAAgB,EAA+B,CAC7C,WACA,YAAa,CAAE,SAAU,GACzB,YAAa,CAAE,SAAU,IAKhB,CAST,OARI,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG9D,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG3D,EAGT,SAAgB,EAAqC,EAAe,CAClE,OAAO,GAAW,EAAQ,QAAQA,EAAAA,qBAAsB,GAAG,CAG7D,SAAgB,EAAwB,EAAsB,EAA6B,CACzF,IAAM,EAAS,EAAY,OAAS,OACpC,OAAO,EAAmB,EAAU,CAAC,WAAW,EAAO,CAGzD,SAAgB,EAAc,EAAuB,EAA8C,CACjG,IAAM,EAAW,EAAYC,EAAAA,gCAAkCC,EAAAA,mCAE/D,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAET,MAAM,IAAIC,EAAAA,mBACR,qCAAqC,EAAY,UAAY,UAAU,IAAI,IAC3E,YAAY,EAAQ,wBAClB,EAAY,OAAS,UACtB,6BAA6B,OAAO,OAAO,EAAS,CAAC,KAAK,KAAK,CAAC,GAClE,CAGH,SAAgB,EAA4B,EAAmD,CAK7F,OAJI,IAAe,IACVC,EAAAA,+BAGFC,EAAAA,gCAGT,SAAgB,EAAmB,EAAkC,CACnE,OAAQ,EAAR,CACE,KAAKC,EAAAA,YAAY,KACf,OAAOC,EAAAA,mBAAmB,KAG5B,KAAKD,EAAAA,YAAY,KACf,OAAOC,EAAAA,mBAAmB,QAG5B,QACE,MAAM,IAAIC,EAAAA,SAAS,qDAAsDC,EAAAA,UAAU,eAAe,EAKxG,SAAgB,EAAqB,EAAgC,CACnE,OAAO,EAAiBC,EAAAA,yBAO1B,SAAgB,EAAsB,EAAsC,EAAkC,CAC5G,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,QACE,MAAM,IAAIP,EAAAA,mBAAmB,4BAA4B,IAAa,EAK5E,SAAgB,EAAkB,EAAe,EAA+B,CAM9E,OAAA,EAAA,EAAA,SALsB,EAAM,IAAK,IAAU,CACzC,OACA,GAAGQ,EAAAA,MAAM,YAAY,EAAK,CAC3B,EAAE,CAE2B,CAAC,SAAS,CAAE,CAAC,EAAe,OAAS,MAAM,CAAC,CAAC,KAAK,CAAE,UAAW,EAAK,CAGpG,SAAgB,EAAsB,EAAmC,CACvE,OAAO,EAAU,IAAK,GAAYA,EAAAA,MAAM,MAAM,EAAQ,CAAC,GAAG,CAG5D,SAAgB,EAAwB,EAAmC,CACzE,OAAQ,EAAR,CACE,KAAKL,EAAAA,YAAY,KACf,MAAO,GAGT,KAAKA,EAAAA,YAAY,KACf,MAAO,GAGT,QACE,MAAM,IAAIE,EAAAA,SAAS,qDAAsDC,EAAAA,UAAU,eAAe,EAQxG,SAAgB,EACd,EACA,EACsC,CACtC,IAAM,EAAU,EAAmB,EAAY,CAE/C,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,IAAIG,EAAAA,IAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAIC,EAAAA,IAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAIC,EAAAA,IAAI,OAAO,EAAQ,CAEhC,QACE,MAAM,IAAIX,EAAAA,mBACR,4BAA4B,IAC5B,8DACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AvalancheFujiBlockchainChainIds as e,AvalancheMainnetBlockchainChainIds as t,Environment as n}from"../../constants.js";import{ErrorCode as r,InvalidParamsError as i,SdkError as a}from"../../errors.js";import{AVALANCHE_API_URIS as o,AVALANCHE_C_CHAIN_NATIVE_ASSET as s,AVALANCHE_PX_CHAIN_NATIVE_ASSET as c,CHAIN_PREFIXES_REGEX as l,WEI_PER_NANO_AVAX_BIGINT as u}from"./constants.js";import{avm as d,evm as f,pvm as p,utils as m}from"@avalabs/avalanchejs";import{orderBy as h}from"es-toolkit";function g(e,t){try{return e()}catch(e){throw t(e)}}function _({amountIn:e,sourceAsset:{decimals:t},targetAsset:{decimals:n}}){return t<n?e*10n**BigInt(n-t):t>n?e/10n**BigInt(t-n):e}function v(e){return e&&e.replace(l,``)}function y(e,t){let n=t?`fuji`:`avax`;return v(e).startsWith(n)}function b(n,r){let a=r?e:t;if(n===a.C)return`C`;if(n===a.P)return`P`;if(n===a.X)return`X`;throw new i(`Unsupported Avalanche chainId for ${r?`testnet`:`mainnet`}: ${n}`,`Chain ID ${n} is not supported for ${r?`Fuji`:`Mainnet`}. Supported chain IDs are: ${Object.values(a).join(`, `)}.`)}function x(e){return e===`C`?s:c}function S(e){switch(e){case n.TEST:return o.fuji;case n.PROD:return o.mainnet;default:throw new a(`Unsupported environment for Avalanche CCT service.`,r.INVALID_PARAMS)}}function C(e){return e*u}function w(e,t){switch(e){case`C`:return t.cBlockchainID;case`P`:return t.pBlockchainID;case`X`:return t.xBlockchainID;default:throw new i(`Unsupported chain alias: ${e}`)}}function T(e,t){return h(e.map(e=>({utxo:e,...m.getUtxoInfo(e)})),[`amount`],[t?`desc`:`asc`]).map(({utxo:e})=>e)}function E(e){return e.map(e=>m.parse(e)[2])}function D(e){switch(e){case n.TEST:return!0;case n.PROD:return!1;default:throw new a(`Unsupported environment for Avalanche CCT service.`,r.INVALID_PARAMS)}}function O(e,t){let n=S(e);switch(t){case`C`:return new f.EVMApi(n);case`P`:return new p.PVMApi(n);case`X`:return new d.AVMApi(n);default:throw new i(`Unsupported chain alias: ${t}`,`Can not get Avalanche provider for unsupported chain alias.`)}}export{C as convertNanoAvaxToWei,E as getAddressesAsBuffers,S as getAvalancheApiUrl,O as getAvalancheProvider,b as getChainAlias,w as getChainIdFromContext,D as getEnvironmentIsTestnet,x as getNativeTokenForChainAlias,_ as getOutputAmountForAvalancheCct,T as sortUTXOsByAmount,v as stripAddressPrefix,g as tryOrThrow,y as xpAddressMatchesNetwork};
|
|
2
|
+
//# sourceMappingURL=_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/_utils.ts"],"sourcesContent":["import { avm, evm, pvm, utils, type Context, type Utxo } from '@avalabs/avalanchejs';\nimport { orderBy } from 'es-toolkit';\nimport {\n AvalancheChainIds,\n AvalancheFujiBlockchainChainIds,\n AvalancheMainnetBlockchainChainIds,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { XpAddress } from './types';\nimport {\n AVALANCHE_API_URIS,\n AVALANCHE_C_CHAIN_NATIVE_ASSET,\n AVALANCHE_PX_CHAIN_NATIVE_ASSET,\n CHAIN_PREFIXES_REGEX,\n WEI_PER_NANO_AVAX_BIGINT,\n} from './constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../errors';\n\nexport function tryOrThrow<T>(fn: () => T, errorHandler: (error: unknown) => SdkError): T {\n try {\n return fn();\n } catch (error) {\n throw errorHandler(error);\n }\n}\n\n/**\n * Remaps Avalanche C-Chain CAIP2 chain IDs to their corresponding EIP-155 chain IDs.\n */\nexport function mapAvalancheBlockchainChainIdToEip155ChainId(caip2ChainId: Caip2ChainId): Caip2ChainId {\n switch (caip2ChainId) {\n case 'avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a': {\n return AvalancheChainIds.MAINNET;\n }\n\n case 'avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd': {\n return AvalancheChainIds.FUJI;\n }\n\n default: {\n return caip2ChainId;\n }\n }\n}\n\nexport function getOutputAmountForAvalancheCct({\n amountIn,\n sourceAsset: { decimals: sourceDecimals },\n targetAsset: { decimals: targetDecimals },\n}: {\n amountIn: bigint;\n sourceAsset: NativeAsset;\n targetAsset: NativeAsset;\n}): bigint {\n if (sourceDecimals < targetDecimals) {\n return amountIn * 10n ** BigInt(targetDecimals - sourceDecimals);\n }\n\n if (sourceDecimals > targetDecimals) {\n return amountIn / 10n ** BigInt(sourceDecimals - targetDecimals);\n }\n\n return amountIn;\n}\n\nexport function stripAddressPrefix<T extends string>(address: T): T {\n return address ? (address.replace(CHAIN_PREFIXES_REGEX, '') as T) : address;\n}\n\nexport function xpAddressMatchesNetwork(xpAddress: XpAddress, isTestnet: boolean): boolean {\n const prefix = isTestnet ? 'fuji' : 'avax';\n return stripAddressPrefix(xpAddress).startsWith(prefix);\n}\n\nexport function getChainAlias(chainId: Caip2ChainId, isTestnet: boolean): AvalancheBlockchainAlias {\n const chainIds = isTestnet ? AvalancheFujiBlockchainChainIds : AvalancheMainnetBlockchainChainIds;\n\n if (chainId === chainIds.C) {\n return 'C';\n }\n\n if (chainId === chainIds.P) {\n return 'P';\n }\n\n if (chainId === chainIds.X) {\n return 'X';\n }\n throw new InvalidParamsError(\n `Unsupported Avalanche chainId for ${isTestnet ? 'testnet' : 'mainnet'}: ${chainId}`,\n `Chain ID ${chainId} is not supported for ${\n isTestnet ? 'Fuji' : 'Mainnet'\n }. Supported chain IDs are: ${Object.values(chainIds).join(', ')}.`,\n );\n}\n\nexport function getNativeTokenForChainAlias(chainAlias: AvalancheBlockchainAlias): NativeAsset {\n if (chainAlias === 'C') {\n return AVALANCHE_C_CHAIN_NATIVE_ASSET;\n }\n\n return AVALANCHE_PX_CHAIN_NATIVE_ASSET;\n}\n\nexport function getAvalancheApiUrl(environment: Environment): string {\n switch (environment) {\n case Environment.TEST: {\n return AVALANCHE_API_URIS.fuji;\n }\n\n case Environment.PROD: {\n return AVALANCHE_API_URIS.mainnet;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function convertNanoAvaxToWei(nanoAvaxAmount: bigint): bigint {\n return nanoAvaxAmount * WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function convertWeiToNanoAvax(weiAmount: bigint): bigint {\n return weiAmount / WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function getChainIdFromContext(chainAlias: AvalancheBlockchainAlias, context: Context.Context): string {\n switch (chainAlias) {\n case 'C': {\n return context.cBlockchainID;\n }\n case 'P': {\n return context.pBlockchainID;\n }\n case 'X': {\n return context.xBlockchainID;\n }\n default: {\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n }\n}\n\nexport function sortUTXOsByAmount(utxos: Utxo[], isDescending: boolean): Utxo[] {\n const utxosWithInfo = utxos.map((utxo) => ({\n utxo,\n ...utils.getUtxoInfo(utxo),\n }));\n\n return orderBy(utxosWithInfo, ['amount'], [isDescending ? 'desc' : 'asc']).map(({ utxo }) => utxo);\n}\n\nexport function getAddressesAsBuffers(addresses: string[]): Uint8Array[] {\n return addresses.map((address) => utils.parse(address)[2]);\n}\n\nexport function getEnvironmentIsTestnet(environment: Environment): boolean {\n switch (environment) {\n case Environment.TEST: {\n return true;\n }\n\n case Environment.PROD: {\n return false;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'C'): evm.EVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'P'): pvm.PVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'X'): avm.AVMApi;\nexport function getAvalancheProvider(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): avm.AVMApi | pvm.PVMApi | evm.EVMApi {\n const baseUrl = getAvalancheApiUrl(environment);\n\n switch (chainAlias) {\n case 'C': {\n return new evm.EVMApi(baseUrl);\n }\n case 'P': {\n return new pvm.PVMApi(baseUrl);\n }\n case 'X': {\n return new avm.AVMApi(baseUrl);\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get Avalanche provider for unsupported chain alias.',\n );\n }\n }\n}\n"],"mappings":"kfAqBA,SAAgB,EAAc,EAAa,EAA+C,CACxF,GAAI,CACF,OAAO,GAAI,OACJ,EAAO,CACd,MAAM,EAAa,EAAM,EAuB7B,SAAgB,EAA+B,CAC7C,WACA,YAAa,CAAE,SAAU,GACzB,YAAa,CAAE,SAAU,IAKhB,CAST,OARI,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG9D,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG3D,EAGT,SAAgB,EAAqC,EAAe,CAClE,OAAO,GAAW,EAAQ,QAAQ,EAAsB,GAAG,CAG7D,SAAgB,EAAwB,EAAsB,EAA6B,CACzF,IAAM,EAAS,EAAY,OAAS,OACpC,OAAO,EAAmB,EAAU,CAAC,WAAW,EAAO,CAGzD,SAAgB,EAAc,EAAuB,EAA8C,CACjG,IAAM,EAAW,EAAY,EAAkC,EAE/D,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAET,MAAM,IAAI,EACR,qCAAqC,EAAY,UAAY,UAAU,IAAI,IAC3E,YAAY,EAAQ,wBAClB,EAAY,OAAS,UACtB,6BAA6B,OAAO,OAAO,EAAS,CAAC,KAAK,KAAK,CAAC,GAClE,CAGH,SAAgB,EAA4B,EAAmD,CAK7F,OAJI,IAAe,IACV,EAGF,EAGT,SAAgB,EAAmB,EAAkC,CACnE,OAAQ,EAAR,CACE,KAAK,EAAY,KACf,OAAO,EAAmB,KAG5B,KAAK,EAAY,KACf,OAAO,EAAmB,QAG5B,QACE,MAAM,IAAI,EAAS,qDAAsD,EAAU,eAAe,EAKxG,SAAgB,EAAqB,EAAgC,CACnE,OAAO,EAAiB,EAO1B,SAAgB,EAAsB,EAAsC,EAAkC,CAC5G,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,QACE,MAAM,IAAI,EAAmB,4BAA4B,IAAa,EAK5E,SAAgB,EAAkB,EAAe,EAA+B,CAM9E,OAAO,EALe,EAAM,IAAK,IAAU,CACzC,OACA,GAAG,EAAM,YAAY,EAAK,CAC3B,EAAE,CAE2B,CAAC,SAAS,CAAE,CAAC,EAAe,OAAS,MAAM,CAAC,CAAC,KAAK,CAAE,UAAW,EAAK,CAGpG,SAAgB,EAAsB,EAAmC,CACvE,OAAO,EAAU,IAAK,GAAY,EAAM,MAAM,EAAQ,CAAC,GAAG,CAG5D,SAAgB,EAAwB,EAAmC,CACzE,OAAQ,EAAR,CACE,KAAK,EAAY,KACf,MAAO,GAGT,KAAK,EAAY,KACf,MAAO,GAGT,QACE,MAAM,IAAI,EAAS,qDAAsD,EAAU,eAAe,EAQxG,SAAgB,EACd,EACA,EACsC,CACtC,IAAM,EAAU,EAAmB,EAAY,CAE/C,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,IAAI,EAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAI,EAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAI,EAAI,OAAO,EAAQ,CAEhC,QACE,MAAM,IAAI,EACR,4BAA4B,IAC5B,8DACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/get-bridgeable-assets.cjs`),i=require(`./_handlers/get-minimum-transfer-amount.cjs`),a=require(`./_handlers/get-supported-chains.cjs`),o=require(`./_utils.cjs`),s=require(`./_handlers/stream-quotes.cjs`),c=require(`./_handlers/transfer-asset.cjs`),l=require(`./_handlers/estimate-native-fee.cjs`),u=require(`./_handlers/track-transfer.cjs`);let d=require(`@avalabs/avalanchejs`);async function f({avalancheSendTx:f,environment:p,getCoreEthAddress:m,getAtomicUtxos:h,getUtxos:g,getWalletAddressesForChainAlias:_,getWalletChangeAddressForChainAlias:v}){let y,b;try{y=o.getAvalancheApiUrl(p),b=await d.Context.getContextFromURI(y)}catch(e){throw new t.ServiceInitializationError(`Failed to initialize Avalanche CCT context.`,void 0,e)}return{analyzeSupport:n.analyzeSupportFactory({environment:p}),estimateNativeFee:l.estimateNativeFeeFactory({ajsContext:b,environment:p,getAtomicUtxos:h,getUtxos:g}),getAssets:async()=>{throw new t.NotImplementedError},getBridgeableAssets:r.getBridgeableAssetsFactory({environment:p}),getMinimumTransferAmount:i.getMinimumTransferAmountFactory(),getSupportedChains:a.getSupportedChainsFactory({environment:p}),streamQuotes:s.streamQuotesFactory({environment:p,getAtomicUtxos:h}),trackTransfer:u.trackTransferFactory({environment:p}),transferAsset:c.transferAssetFactory({ajsContext:b,avalancheSendTx:f,environment:p,getCoreEthAddress:m,getAtomicUtxos:h,getUtxos:g,getWalletAddressesForChainAlias:_,getWalletChangeAddressForChainAlias:v}),type:e.ServiceType.AVALANCHE_CCT}}exports.createAvalancheCctService=f;
|
|
2
|
+
//# sourceMappingURL=avalanche-cct-service.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avalanche-cct-service.cjs","names":["getAvalancheApiUrl","Context","ServiceInitializationError","analyzeSupportFactory","estimateNativeFeeFactory","NotImplementedError","getBridgeableAssetsFactory","getMinimumTransferAmountFactory","getSupportedChainsFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/avalanche-cct/avalanche-cct-service.ts"],"sourcesContent":["import { Context } from '@avalabs/avalanchejs';\nimport { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport { NotImplementedError, ServiceInitializationError } from '../../errors';\nimport type { AvalancheSendTxFunction, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { getSupportedChainsFactory } from './_handlers/get-supported-chains';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n} from './types';\nimport type { Fetch } from '../../types/utility-types';\nimport { getAvalancheApiUrl } from './_utils';\n\nexport interface AvalancheCctServiceOptions {\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n fetch?: Fetch;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport async function createAvalancheCctService({\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: AvalancheCctServiceOptions): Promise<TransferService> {\n let avaxApiUrl: string;\n let ajsContext: Context.Context;\n\n try {\n avaxApiUrl = getAvalancheApiUrl(environment);\n ajsContext = await Context.getContextFromURI(avaxApiUrl);\n } catch (error) {\n throw new ServiceInitializationError('Failed to initialize Avalanche CCT context.', undefined, error);\n }\n\n return {\n analyzeSupport: analyzeSupportFactory({ environment }),\n estimateNativeFee: estimateNativeFeeFactory({ ajsContext, environment, getAtomicUtxos, getUtxos }),\n getAssets: async () => {\n throw new NotImplementedError();\n },\n getBridgeableAssets: getBridgeableAssetsFactory({ environment }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: getSupportedChainsFactory({ environment }),\n streamQuotes: streamQuotesFactory({ environment, getAtomicUtxos }),\n trackTransfer: trackTransferFactory({ environment }),\n transferAsset: transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n type: ServiceType.AVALANCHE_CCT,\n } satisfies TransferService;\n}\n"],"mappings":"ojBAkCA,eAAsB,EAA0B,CAC9C,kBACA,cACA,oBACA,iBACA,WACA,kCACA,uCACuD,CACvD,IAAI,EACA,EAEJ,GAAI,CACF,EAAaA,EAAAA,mBAAmB,EAAY,CAC5C,EAAa,MAAMC,EAAAA,QAAQ,kBAAkB,EAAW,OACjD,EAAO,CACd,MAAM,IAAIC,EAAAA,2BAA2B,8CAA+C,IAAA,GAAW,EAAM,CAGvG,MAAO,CACL,eAAgBC,EAAAA,sBAAsB,CAAE,cAAa,CAAC,CACtD,kBAAmBC,EAAAA,yBAAyB,CAAE,aAAY,cAAa,iBAAgB,WAAU,CAAC,CAClG,UAAW,SAAY,CACrB,MAAM,IAAIC,EAAAA,qBAEZ,oBAAqBC,EAAAA,2BAA2B,CAAE,cAAa,CAAC,CAChE,yBAA0BC,EAAAA,iCAAiC,CAC3D,mBAAoBC,EAAAA,0BAA0B,CAAE,cAAa,CAAC,CAC9D,aAAcC,EAAAA,oBAAoB,CAAE,cAAa,iBAAgB,CAAC,CAClE,cAAeC,EAAAA,qBAAqB,CAAE,cAAa,CAAC,CACpD,cAAeC,EAAAA,qBAAqB,CAClC,aACA,kBACA,cACA,oBACA,iBACA,WACA,kCACA,sCACD,CAAC,CACF,KAAMC,EAAAA,YAAY,cACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e}from"../../constants.js";import{NotImplementedError as t,ServiceInitializationError as n}from"../../errors.js";import{analyzeSupportFactory as r}from"./_handlers/analyze-support.js";import{getBridgeableAssetsFactory as i}from"./_handlers/get-bridgeable-assets.js";import{getMinimumTransferAmountFactory as a}from"./_handlers/get-minimum-transfer-amount.js";import{getSupportedChainsFactory as o}from"./_handlers/get-supported-chains.js";import{getAvalancheApiUrl as s}from"./_utils.js";import{streamQuotesFactory as c}from"./_handlers/stream-quotes.js";import{transferAssetFactory as l}from"./_handlers/transfer-asset.js";import{estimateNativeFeeFactory as u}from"./_handlers/estimate-native-fee.js";import{trackTransferFactory as d}from"./_handlers/track-transfer.js";import{Context as f}from"@avalabs/avalanchejs";async function p({avalancheSendTx:p,environment:m,getCoreEthAddress:h,getAtomicUtxos:g,getUtxos:_,getWalletAddressesForChainAlias:v,getWalletChangeAddressForChainAlias:y}){let b,x;try{b=s(m),x=await f.getContextFromURI(b)}catch(e){throw new n(`Failed to initialize Avalanche CCT context.`,void 0,e)}return{analyzeSupport:r({environment:m}),estimateNativeFee:u({ajsContext:x,environment:m,getAtomicUtxos:g,getUtxos:_}),getAssets:async()=>{throw new t},getBridgeableAssets:i({environment:m}),getMinimumTransferAmount:a(),getSupportedChains:o({environment:m}),streamQuotes:c({environment:m,getAtomicUtxos:g}),trackTransfer:d({environment:m}),transferAsset:l({ajsContext:x,avalancheSendTx:p,environment:m,getCoreEthAddress:h,getAtomicUtxos:g,getUtxos:_,getWalletAddressesForChainAlias:v,getWalletChangeAddressForChainAlias:y}),type:e.AVALANCHE_CCT}}export{p as createAvalancheCctService};
|
|
2
|
+
//# sourceMappingURL=avalanche-cct-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avalanche-cct-service.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/avalanche-cct-service.ts"],"sourcesContent":["import { Context } from '@avalabs/avalanchejs';\nimport { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport { NotImplementedError, ServiceInitializationError } from '../../errors';\nimport type { AvalancheSendTxFunction, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { getSupportedChainsFactory } from './_handlers/get-supported-chains';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n} from './types';\nimport type { Fetch } from '../../types/utility-types';\nimport { getAvalancheApiUrl } from './_utils';\n\nexport interface AvalancheCctServiceOptions {\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n fetch?: Fetch;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport async function createAvalancheCctService({\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: AvalancheCctServiceOptions): Promise<TransferService> {\n let avaxApiUrl: string;\n let ajsContext: Context.Context;\n\n try {\n avaxApiUrl = getAvalancheApiUrl(environment);\n ajsContext = await Context.getContextFromURI(avaxApiUrl);\n } catch (error) {\n throw new ServiceInitializationError('Failed to initialize Avalanche CCT context.', undefined, error);\n }\n\n return {\n analyzeSupport: analyzeSupportFactory({ environment }),\n estimateNativeFee: estimateNativeFeeFactory({ ajsContext, environment, getAtomicUtxos, getUtxos }),\n getAssets: async () => {\n throw new NotImplementedError();\n },\n getBridgeableAssets: getBridgeableAssetsFactory({ environment }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: getSupportedChainsFactory({ environment }),\n streamQuotes: streamQuotesFactory({ environment, getAtomicUtxos }),\n trackTransfer: trackTransferFactory({ environment }),\n transferAsset: transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n type: ServiceType.AVALANCHE_CCT,\n } satisfies TransferService;\n}\n"],"mappings":"w0BAkCA,eAAsB,EAA0B,CAC9C,kBACA,cACA,oBACA,iBACA,WACA,kCACA,uCACuD,CACvD,IAAI,EACA,EAEJ,GAAI,CACF,EAAa,EAAmB,EAAY,CAC5C,EAAa,MAAM,EAAQ,kBAAkB,EAAW,OACjD,EAAO,CACd,MAAM,IAAI,EAA2B,8CAA+C,IAAA,GAAW,EAAM,CAGvG,MAAO,CACL,eAAgB,EAAsB,CAAE,cAAa,CAAC,CACtD,kBAAmB,EAAyB,CAAE,aAAY,cAAa,iBAAgB,WAAU,CAAC,CAClG,UAAW,SAAY,CACrB,MAAM,IAAI,GAEZ,oBAAqB,EAA2B,CAAE,cAAa,CAAC,CAChE,yBAA0B,GAAiC,CAC3D,mBAAoB,EAA0B,CAAE,cAAa,CAAC,CAC9D,aAAc,EAAoB,CAAE,cAAa,iBAAgB,CAAC,CAClE,cAAe,EAAqB,CAAE,cAAa,CAAC,CACpD,cAAe,EAAqB,CAClC,aACA,kBACA,cACA,oBACA,iBACA,WACA,kCACA,sCACD,CAAC,CACF,KAAM,EAAY,cACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../constants.cjs`),t={type:e.TokenType.NATIVE,decimals:18,name:`Avalanche`,symbol:`AVAX`},n={type:e.TokenType.NATIVE,decimals:9,name:`Avalanche`,symbol:`AVAX`},r=RegExp(`^(${[`C-`,`P-`,`X-`].join(`|`)})`,`i`),i={fuji:`https://api.avax-test.network`,mainnet:`https://api.avax.network`};exports.AVALANCHE_API_URIS=i,exports.AVALANCHE_C_CHAIN_NATIVE_ASSET=t,exports.AVALANCHE_PX_CHAIN_NATIVE_ASSET=n,exports.CHAIN_PREFIXES_REGEX=r,exports.WEI_PER_NANO_AVAX_BIGINT=1000000000n;
|
|
2
|
+
//# sourceMappingURL=constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":["TokenType"],"sources":["../../../src/transfer-service/avalanche-cct/constants.ts"],"sourcesContent":["import { TokenType, type AvalancheBlockchainAlias } from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\n\nexport const AVALANCHE_C_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 18,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport const AVALANCHE_PX_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 9,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport type ChainPrefix = `${AvalancheBlockchainAlias}-`;\n\nexport const CHAIN_PREFIXES: readonly ChainPrefix[] = ['C-', 'P-', 'X-'] as const;\n\nexport const CHAIN_PREFIXES_REGEX: RegExp = new RegExp(`^(${CHAIN_PREFIXES.join('|')})`, 'i');\n\nexport const AVALANCHE_API_URIS = {\n fuji: 'https://api.avax-test.network',\n mainnet: 'https://api.avax.network',\n} as const;\n\nexport const WEI_PER_NANO_AVAX_BIGINT = 1_000_000_000n;\nexport const NANO_AVAX_DECIMALS = 9;\n"],"mappings":"uCAGa,EAA8C,CACzD,KAAMA,EAAAA,UAAU,OAChB,SAAU,GACV,KAAM,YACN,OAAQ,OACT,CAEY,EAA+C,CAC1D,KAAMA,EAAAA,UAAU,OAChB,SAAU,EACV,KAAM,YACN,OAAQ,OACT,CAMY,EAAmC,OAAO,KAFD,CAAC,KAAM,KAAM,KAAK,CAEG,KAAK,IAAI,CAAC,GAAI,IAAI,CAEhF,EAAqB,CAChC,KAAM,gCACN,QAAS,2BACV"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{TokenType as e}from"../../constants.js";const t={type:e.NATIVE,decimals:18,name:`Avalanche`,symbol:`AVAX`},n={type:e.NATIVE,decimals:9,name:`Avalanche`,symbol:`AVAX`},r=RegExp(`^(${[`C-`,`P-`,`X-`].join(`|`)})`,`i`),i={fuji:`https://api.avax-test.network`,mainnet:`https://api.avax.network`},a=1000000000n;export{i as AVALANCHE_API_URIS,t as AVALANCHE_C_CHAIN_NATIVE_ASSET,n as AVALANCHE_PX_CHAIN_NATIVE_ASSET,r as CHAIN_PREFIXES_REGEX,a as WEI_PER_NANO_AVAX_BIGINT};
|
|
2
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/constants.ts"],"sourcesContent":["import { TokenType, type AvalancheBlockchainAlias } from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\n\nexport const AVALANCHE_C_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 18,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport const AVALANCHE_PX_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 9,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport type ChainPrefix = `${AvalancheBlockchainAlias}-`;\n\nexport const CHAIN_PREFIXES: readonly ChainPrefix[] = ['C-', 'P-', 'X-'] as const;\n\nexport const CHAIN_PREFIXES_REGEX: RegExp = new RegExp(`^(${CHAIN_PREFIXES.join('|')})`, 'i');\n\nexport const AVALANCHE_API_URIS = {\n fuji: 'https://api.avax-test.network',\n mainnet: 'https://api.avax.network',\n} as const;\n\nexport const WEI_PER_NANO_AVAX_BIGINT = 1_000_000_000n;\nexport const NANO_AVAX_DECIMALS = 9;\n"],"mappings":"+CAGA,MAAa,EAA8C,CACzD,KAAM,EAAU,OAChB,SAAU,GACV,KAAM,YACN,OAAQ,OACT,CAEY,EAA+C,CAC1D,KAAM,EAAU,OAChB,SAAU,EACV,KAAM,YACN,OAAQ,OACT,CAMY,EAAmC,OAAO,KAFD,CAAC,KAAM,KAAM,KAAK,CAEG,KAAK,IAAI,CAAC,GAAI,IAAI,CAEhF,EAAqB,CAChC,KAAM,gCACN,QAAS,2BACV,CAEY,EAA2B"}
|