@stableflow/wallet-solana 3.1.3 → 3.1.4-rc-0f7f3e64ed-20260731
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/index.js +19 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -684,6 +684,7 @@ var SolanaWallet = class {
|
|
|
684
684
|
} = params;
|
|
685
685
|
const connection = this.getConnection();
|
|
686
686
|
try {
|
|
687
|
+
const amountLdClean = bridges.removeOftDust(amountWei || 0, fromToken.decimals);
|
|
687
688
|
const result = {
|
|
688
689
|
needApprove: false,
|
|
689
690
|
sendParam: void 0,
|
|
@@ -691,13 +692,17 @@ var SolanaWallet = class {
|
|
|
691
692
|
estimateSourceGas: 0n,
|
|
692
693
|
totalEstimateSourceGas: 0n,
|
|
693
694
|
estimateSourceGasUsd: "0",
|
|
694
|
-
outputAmount: core.numberRemoveEndZero(Big__default.default(
|
|
695
|
+
outputAmount: core.numberRemoveEndZero(Big__default.default(amountLdClean || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),
|
|
695
696
|
quoteParam: {
|
|
696
697
|
...params
|
|
697
698
|
},
|
|
698
699
|
totalFeesUsd: "0",
|
|
699
700
|
estimateTime: 0
|
|
700
701
|
};
|
|
702
|
+
if (BigInt(amountLdClean) === 0n) {
|
|
703
|
+
result.errMsg = "Amount below minimum cross-chain unit";
|
|
704
|
+
return result;
|
|
705
|
+
}
|
|
701
706
|
const execTime = new core.ExecTime({ type: "USDT0 Solana", logStyle: "fuchsia-100", isDebug: core.OpenAPI.DEBUG });
|
|
702
707
|
const programId = new web3_js.PublicKey(originLayerzeroAddress);
|
|
703
708
|
const tokenMint = new web3_js.PublicKey(fromToken.contractAddress);
|
|
@@ -710,9 +715,9 @@ var SolanaWallet = class {
|
|
|
710
715
|
const mintInfo = await connection.getParsedAccountInfo(tokenMint);
|
|
711
716
|
execTime.log("getParsedAccountInfo");
|
|
712
717
|
const decimals = (mintInfo.value?.data).parsed.info.decimals;
|
|
713
|
-
const amountLd = BigInt(
|
|
718
|
+
const amountLd = BigInt(amountLdClean);
|
|
714
719
|
const slippage = slippageTolerance || 0.01;
|
|
715
|
-
const minAmountLd = BigInt(Big__default.default(
|
|
720
|
+
const minAmountLd = BigInt(Big__default.default(amountLdClean).times(Big__default.default(1).minus(Big__default.default(slippage).div(100))).toFixed(0));
|
|
716
721
|
const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;
|
|
717
722
|
const lzReceiveOptionValue = bridges.LZ_RECEIVE_VALUE[toToken.chainName] || 0;
|
|
718
723
|
let unMultiHopExtraOptions = Options.newOptions().toBytes();
|
|
@@ -896,12 +901,12 @@ var SolanaWallet = class {
|
|
|
896
901
|
result.estimateSourceGasUsd = ett.estimateSourceGasUsd;
|
|
897
902
|
result.estimateSourceGas = ett.estimateSourceGas;
|
|
898
903
|
result.totalEstimateSourceGas += ett.estimateSourceGas;
|
|
899
|
-
result.fees.legacyMeshFeeUsd = core.numberRemoveEndZero(Big__default.default(
|
|
900
|
-
result.outputAmount = core.numberRemoveEndZero(Big__default.default(Big__default.default(
|
|
904
|
+
result.fees.legacyMeshFeeUsd = core.numberRemoveEndZero(Big__default.default(amountLdClean || 0).div(10 ** params.fromToken.decimals).times(bridges.USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(params.fromToken.decimals));
|
|
905
|
+
result.outputAmount = core.numberRemoveEndZero(Big__default.default(Big__default.default(amountLdClean || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));
|
|
901
906
|
this.csl("SolanaWallet quoteOFT", "red-600", "result.outputAmount: %o", result.outputAmount);
|
|
902
907
|
this.csl("SolanaWallet quoteOFT", "red-600", "slippageTolerance: %o", slippageTolerance + "%");
|
|
903
|
-
this.csl("SolanaWallet quoteOFT", "red-600", "Minimum received amount: %o", Big__default.default(
|
|
904
|
-
if (Big__default.default(result.outputAmount).lt(Big__default.default(
|
|
908
|
+
this.csl("SolanaWallet quoteOFT", "red-600", "Minimum received amount: %o", Big__default.default(amountLdClean).div(10 ** fromToken.decimals).times(Big__default.default(1).minus(Big__default.default(slippageTolerance || 0).div(100))).toFixed(6, 0));
|
|
909
|
+
if (Big__default.default(result.outputAmount).lt(Big__default.default(amountLdClean).div(10 ** fromToken.decimals).times(Big__default.default(1).minus(Big__default.default(slippageTolerance || 0).div(100))))) {
|
|
905
910
|
result.errMsg = "Slippage limit exceeded";
|
|
906
911
|
return result;
|
|
907
912
|
}
|
|
@@ -1282,6 +1287,7 @@ var SolanaWallet = class {
|
|
|
1282
1287
|
const connection = this.getConnection();
|
|
1283
1288
|
const execTime = new core.ExecTime({ type: "FraxZero Solana", logStyle: "fuchsia-400", isDebug: core.OpenAPI.DEBUG });
|
|
1284
1289
|
this.csl("Solana quoteFraxZero", "purple-500", "params: %o", params);
|
|
1290
|
+
const amountLdClean = bridges.removeOftDust(amountWei || 0, fromToken.decimals);
|
|
1285
1291
|
const result = {
|
|
1286
1292
|
needApprove: false,
|
|
1287
1293
|
approveSpender: void 0,
|
|
@@ -1295,8 +1301,12 @@ var SolanaWallet = class {
|
|
|
1295
1301
|
totalEstimateSourceGas: 0n,
|
|
1296
1302
|
estimateSourceGasUsd: 0,
|
|
1297
1303
|
estimateTime: 0,
|
|
1298
|
-
outputAmount: core.numberRemoveEndZero(Big__default.default(
|
|
1304
|
+
outputAmount: core.numberRemoveEndZero(Big__default.default(amountLdClean || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0))
|
|
1299
1305
|
};
|
|
1306
|
+
if (BigInt(amountLdClean) === 0n) {
|
|
1307
|
+
result.errMsg = "Amount below minimum cross-chain unit";
|
|
1308
|
+
return result;
|
|
1309
|
+
}
|
|
1300
1310
|
const sender = this.publicKey;
|
|
1301
1311
|
const userPubkey = umiWeb3jsAdapters.fromWeb3JsPublicKey(new web3_js.PublicKey(refundTo || sender.toString()));
|
|
1302
1312
|
const {
|
|
@@ -1323,7 +1333,7 @@ var SolanaWallet = class {
|
|
|
1323
1333
|
await mplToolbox.safeFetchToken(umi$1, tokenAccount[0]);
|
|
1324
1334
|
execTime.log("safeFetchToken");
|
|
1325
1335
|
const recipientAddressBytes32 = bridges.addressToBytes32(toToken.chainType, recipient);
|
|
1326
|
-
const amountLd = BigInt(
|
|
1336
|
+
const amountLd = BigInt(amountLdClean);
|
|
1327
1337
|
const minAmountLd = amountLd * 99n / 100n;
|
|
1328
1338
|
execTime.breakpoint();
|
|
1329
1339
|
const { value: lookupTableAccount } = await connection.getAddressLookupTable(ALT_ADDRESS);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stableflow-proxy.json","../src/layerzero.ts","../src/solana.ts"],"names":["Buffer","PublicKey","struct","u32","bytes","u64","option","bool","Csl","OpenAPI","getChainRpcUrl","createSolanaFallbackConnection","LAMPORTS_PER_SOL","Transaction","SystemProgram","getAssociatedTokenAddressSync","getAccount","createAssociatedTokenAccountInstruction","createTransferInstruction","TOKEN_PROGRAM_ID","publicKey","getAssociatedTokenAddress","Big","numberRemoveEndZero","getPrice","VersionedTransaction","ExecTime","LZ_RECEIVE_VALUE","getBytes","addressToBytes32","getHopMsgFee","ethers","SendHelper","TransactionInstruction","ComputeBudgetProgram","buildVersionedTransaction","NATIVE_MSG_FEE_BUFFER","USDT0_LEGACY_MESH_TRANSFTER_FEE","signature","SendTransactionError","Service","SendType","BN","AnchorProvider","Program","quoteSignature","fromWeb3JsPublicKey","getAvailableSolanaRpcUrl","umi","createUmi","mplToolbox","findAssociatedTokenPda","safeFetchToken","oft","toWeb3JsInstruction","TransactionMessage"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"version\": \"0.1.0\",\n \"name\": \"stableflow\",\n \"instructions\": [\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"initializing the whole protocol,\"\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"transfer\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"toTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"toUser\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"transferAmount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"setOwner\",\n \"accounts\": [\n {\n \"name\": \"newAccountId\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"start\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"pause\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"shutdown\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"StableFlowState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"admin\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"defined\": \"StableFlowStatus\"\n }\n }\n ]\n }\n }\n ],\n \"types\": [\n {\n \"name\": \"StableFlowStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"NotInitial\"\n },\n {\n \"name\": \"Running\"\n },\n {\n \"name\": \"Paused\"\n },\n {\n \"name\": \"Shutdown\"\n }\n ]\n }\n }\n ],\n \"events\": [\n {\n \"name\": \"TransferEvent\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"to\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidProgramId\",\n \"msg\": \"InvalidProgramId\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidProgramStatus\",\n \"msg\": \"InvalidProgramStatus\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidStatus\"\n },\n {\n \"code\": 6003,\n \"name\": \"UnexpectedAccount\",\n \"msg\": \"UnexpectedAccount\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidToken\",\n \"msg\": \"InvalidToken\"\n },\n {\n \"code\": 6005,\n \"name\": \"NumberCastError\",\n \"msg\": \"NumberCastError\"\n },\n {\n \"code\": 6006,\n \"name\": \"NotAllowed\",\n \"msg\": \"NotAllowed\"\n },\n {\n \"code\": 6007,\n \"name\": \"HadShutdown\",\n \"msg\": \"HadShutdown\"\n },\n {\n \"code\": 6008,\n \"name\": \"PauseOrShutdown\",\n \"msg\": \"PauseOrShutdown\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidUser\",\n \"msg\": \"InvalidUser\"\n }\n ]\n}","import { Connection, PublicKey } from '@solana/web3.js';\nimport { struct, u32, u64, bytes, option, bool } from '@metaplex-foundation/umi/serializers';\nimport { Buffer } from 'buffer';\n\nconst SEEDS = {\n OFT: Buffer.from('OFT'),\n PEER: Buffer.from('Peer'),\n CREDITS: Buffer.from('Credits'),\n EVENT_AUTHORITY: Buffer.from('__event_authority'),\n};\n\nconst DISCRIMINATOR = {\n quoteSend: new Uint8Array([207, 0, 49, 214, 160, 211, 76, 211]),\n send: new Uint8Array([102, 251, 20, 187, 65, 75, 12, 69]),\n};\n\nfunction u32be(n: number): Buffer {\n const buf = Buffer.alloc(4);\n buf.writeUInt32BE(n, 0);\n return buf;\n}\n\nexport function deriveOftPdas(programId: PublicKey, dstEid: number) {\n return {\n oftStore: PublicKey.findProgramAddressSync([SEEDS.OFT], programId)[0],\n peer: PublicKey.findProgramAddressSync([SEEDS.PEER, u32be(dstEid)], programId)[0],\n credits: PublicKey.findProgramAddressSync([SEEDS.CREDITS], programId)[0],\n eventAuthority: PublicKey.findProgramAddressSync([SEEDS.EVENT_AUTHORITY], programId)[0],\n };\n}\n\nexport async function getPeerAddress(\n connection: Connection,\n programId: PublicKey,\n dstEid: number,\n): Promise<`0x${string}`> {\n const { peer } = deriveOftPdas(programId, dstEid);\n const info = await connection.getAccountInfo(peer);\n if (!info) throw new Error(`Peer not found for EID ${dstEid}`);\n return `0x${info.data.subarray(8, 40).toString('hex')}`;\n}\n\ntype QuoteSendParams = {\n dstEid: number;\n to: Uint8Array;\n amountLd: bigint;\n minAmountLd: bigint;\n extraOptions: Uint8Array;\n composeMsg: Uint8Array | null;\n payInLzToken: boolean;\n};\n\nconst quoteSendParamsSerializer = struct([\n ['dstEid', u32()],\n ['to', bytes({ size: 32 })],\n ['amountLd', u64()],\n ['minAmountLd', u64()],\n ['extraOptions', bytes({ size: u32() })],\n ['composeMsg', option(bytes({ size: u32() }))],\n ['payInLzToken', bool()],\n]);\n\nexport function encodeQuoteSend(params: QuoteSendParams): Uint8Array {\n const paramsData = quoteSendParamsSerializer.serialize(params);\n const data = new Uint8Array(8 + paramsData.length);\n data.set(DISCRIMINATOR.quoteSend, 0);\n data.set(paramsData, 8);\n return data;\n}\n\ntype SendParams = {\n dstEid: number;\n to: Uint8Array;\n amountLd: bigint;\n minAmountLd: bigint;\n extraOptions: Uint8Array;\n composeMsg: Uint8Array | null;\n nativeFee: bigint;\n lzTokenFee: bigint;\n};\n\nconst sendParamsSerializer = struct([\n ['dstEid', u32()],\n ['to', bytes({ size: 32 })],\n ['amountLd', u64()],\n ['minAmountLd', u64()],\n ['extraOptions', bytes({ size: u32() })],\n ['composeMsg', option(bytes({ size: u32() }))],\n ['nativeFee', u64()],\n ['lzTokenFee', u64()],\n]);\n\nexport function encodeSend(params: SendParams): Uint8Array {\n const paramsData = sendParamsSerializer.serialize(params);\n const data = new Uint8Array(8 + paramsData.length);\n data.set(DISCRIMINATOR.send, 0);\n data.set(paramsData, 8);\n return data;\n}\n\nexport function parseDecimalToUnits(amount: string, decimals: number): bigint {\n const [whole, frac = ''] = amount.split('.');\n const fracPadded = frac.padEnd(decimals, '0').slice(0, decimals);\n return BigInt(whole + fracPadded);\n}\n\nexport const NATIVE_MSG_FEE_BUFFER: bigint = 105n;\n","import {\n Connection,\n PublicKey,\n Transaction,\n VersionedTransaction,\n SystemProgram,\n LAMPORTS_PER_SOL,\n TransactionInstruction,\n ComputeBudgetProgram,\n SendTransactionError,\n TransactionMessage,\n} from \"@solana/web3.js\";\nimport {\n getAssociatedTokenAddress,\n createTransferInstruction,\n TOKEN_PROGRAM_ID,\n getAccount,\n createAssociatedTokenAccountInstruction,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { AnchorProvider, BN, Program } from \"@coral-xyz/anchor\";\nimport Big from \"big.js\";\nimport {\n getPrice,\n numberRemoveEndZero,\n SendType,\n Service,\n getChainRpcUrl,\n Csl,\n OpenAPI,\n ExecTime,\n} from \"@stableflow/core\";\nimport {\n addressToBytes32,\n quoteSignature,\n getHopMsgFee,\n LZ_RECEIVE_VALUE,\n USDT0_LEGACY_MESH_TRANSFTER_FEE,\n} from \"@stableflow/bridges\";\nimport { NATIVE_MSG_FEE_BUFFER } from \"@stableflow/utils-evm\";\nimport { createSolanaFallbackConnection, getAvailableSolanaRpcUrl } from \"@stableflow/utils-solana\";\n// @ts-ignore --resolveJsonModule\nimport stableflowProxyIdl from \"./stableflow-proxy.json\";\nimport { ethers, getBytes } from \"ethers\";\nimport { deriveOftPdas, encodeQuoteSend, encodeSend, getPeerAddress } from \"./layerzero\";\nimport { buildVersionedTransaction, SendHelper } from \"@layerzerolabs/lz-solana-sdk-v2\";\nimport { fromWeb3JsPublicKey, toWeb3JsInstruction } from \"@metaplex-foundation/umi-web3js-adapters\";\nimport { createUmi } from \"@metaplex-foundation/umi-bundle-defaults\";\nimport { findAssociatedTokenPda, mplToolbox, safeFetchToken } from \"@metaplex-foundation/mpl-toolbox\";\nimport { publicKey } from \"@metaplex-foundation/umi\";\nimport { oft } from \"@layerzerolabs/oft-v2-solana-sdk\";\nimport { Buffer } from \"buffer\";\n\nexport default class SolanaWallet {\n private publicKey: PublicKey | null;\n private signTransaction: any;\n private signer: any;\n private csl;\n\n constructor(options: { publicKey: PublicKey | null; signer: any }) {\n this.publicKey = options.publicKey;\n this.signTransaction = options.signer.signTransaction;\n this.signer = options.signer;\n\n const cs = new Csl(OpenAPI.DEBUG);\n this.csl = cs.log;\n }\n\n getConnection() {\n const solanaRpcUrls: string[] = getChainRpcUrl(\"sol\").rpcUrls;\n return createSolanaFallbackConnection(solanaRpcUrls);\n };\n\n // Transfer SOL\n async transferSOL(to: string, amount: string) {\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n const fromPubkey = this.publicKey;\n const toPubkey = new PublicKey(to);\n const lamports = Math.floor(parseFloat(amount) * LAMPORTS_PER_SOL);\n\n const transaction = new Transaction().add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports\n })\n );\n\n const connection = this.getConnection();\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = fromPubkey;\n\n const signedTransaction = await this.signTransaction(transaction);\n const signature = await connection.sendRawTransaction(\n signedTransaction.serialize()\n );\n\n await connection.confirmTransaction(signature);\n return signature;\n }\n\n // Transfer SPL token\n async transferToken(tokenMint: string, to: string, amount: string) {\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n const connection = this.getConnection();\n\n const fromPubkey = this.publicKey;\n const toPubkey = new PublicKey(to);\n const mint = new PublicKey(tokenMint);\n\n // Get associated token account addresses\n const fromTokenAccount = getAssociatedTokenAddressSync(mint, fromPubkey);\n const toTokenAccount = getAssociatedTokenAddressSync(mint, toPubkey);\n\n const transaction = new Transaction();\n\n // Check if recipient has token account, create if not\n try {\n await getAccount(connection, toTokenAccount);\n } catch (error) {\n // If token account doesn't exist, create it\n transaction.add(\n createAssociatedTokenAccountInstruction(\n fromPubkey, // payer\n toTokenAccount, // ata\n toPubkey, // owner\n mint // mint\n )\n );\n }\n\n // Add transfer instruction\n transaction.add(\n createTransferInstruction(\n fromTokenAccount,\n toTokenAccount,\n fromPubkey,\n BigInt(amount),\n [],\n TOKEN_PROGRAM_ID\n )\n );\n\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = fromPubkey;\n\n const signedTransaction = await this.signTransaction(transaction);\n const signature = await connection.sendRawTransaction(\n signedTransaction.serialize()\n );\n\n await connection.confirmTransaction(signature);\n\n return signature;\n }\n\n // Generic transfer method\n async transfer(data: {\n originAsset: string;\n depositAddress: string;\n amount: string;\n }) {\n const { originAsset, depositAddress, amount } = data;\n\n // Transfer SOL\n if (originAsset === \"SOL\" || originAsset === \"sol\") {\n return await this.transferSOL(depositAddress, amount);\n }\n\n // Transfer SPL token\n const result = await this.transferToken(\n originAsset,\n depositAddress,\n amount\n );\n return result;\n }\n\n async getSOLBalance(account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n const connection = this.getConnection();\n\n try {\n const publicKey = new PublicKey(account);\n const balance = await connection.getBalance(publicKey);\n return balance;\n } catch (error) {\n this.csl(\"Solana getSOLBalance\", \"red-500\", \"Get SOL balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getTokenBalance(tokenMint: string, account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n const connection = this.getConnection();\n\n const mint = new PublicKey(tokenMint);\n const owner = new PublicKey(account);\n\n try {\n const tokenAccount = await getAssociatedTokenAddress(mint, owner);\n\n const accountInfo = await getAccount(connection, tokenAccount);\n\n return accountInfo.amount;\n } catch (error: any) {\n if (error.message.includes(\"could not find account\")) {\n return \"0\";\n }\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getBalance(token: any, account: string, options?: { isCatchError?: boolean; }) {\n if (\n token.symbol === \"SOL\" ||\n token.symbol === \"sol\" ||\n token.symbol === \"native\"\n ) {\n return await this.getSOLBalance(account, options);\n }\n return await this.getTokenBalance(token.contractAddress, account, options);\n }\n\n async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n return await this.getBalance(token, account, options);\n }\n\n /**\n * Estimate gas limit for transfer transaction\n * @param data Transfer data\n * @returns Gas limit estimate, gas price, and estimated gas cost\n */\n async estimateTransferGas(data: {\n fromToken: any;\n depositAddress: string;\n amount: string;\n }): Promise<{\n gasLimit: bigint;\n gasPrice: bigint;\n estimateGas: bigint;\n }> {\n const connection = this.getConnection();\n\n // Solana transaction fees are typically fixed at 5000 lamports per signature\n // Base fee per signature: 5000 lamports\n let estimatedFee = 5000n;\n\n const { fromToken, depositAddress } = data;\n const originAsset = fromToken.contractAddress;\n\n // Check if token account creation is needed for SPL tokens\n if (originAsset !== \"SOL\" && originAsset !== \"sol\") {\n const mint = new PublicKey(originAsset);\n const toPubkey = new PublicKey(depositAddress);\n const toTokenAccount = getAssociatedTokenAddressSync(mint, toPubkey);\n\n // Check if recipient has token account\n try {\n await getAccount(connection, toTokenAccount);\n // Account exists, no additional fee\n } catch (error) {\n // Account doesn't exist, will need to create it (additional fee)\n estimatedFee += 5000n;\n }\n }\n\n return {\n gasLimit: estimatedFee,\n gasPrice: 1n,\n estimateGas: estimatedFee\n };\n }\n\n async getEstimateGas(params: any) {\n const { gasLimit = \"5000\", price, nativeToken } = params;\n\n const estimateGas = BigInt(gasLimit);\n const estimateGasAmount = Big(estimateGas.toString()).div(10 ** nativeToken.decimals);\n const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n return {\n gasPrice: 1n,\n usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n wei: estimateGas,\n amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n };\n }\n\n async estimateTransaction(params: any) {\n const {\n dry,\n versionedTx,\n fromToken,\n prices,\n } = params;\n\n const connection = this.getConnection();\n\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n let estimatedFee = 5000n;\n if (!dry) {\n try {\n const sendSim = await connection.simulateTransaction(versionedTx, {\n sigVerify: false,\n replaceRecentBlockhash: true,\n });\n this.csl(\"Solana estimateTransaction\", \"purple-400\", \"sendSim: %o\", sendSim);\n // Even if simulation fails (e.g., insufficient funds), we can still get the fee estimate\n if (!sendSim.value.err) {\n // @ts-ignore Solana base fee is 5000 lamports per signature\n estimatedFee = (sendSim.value as any).fee || 5000n;\n } else {\n // If simulation fails, log it but continue with default fee\n console.warn('Send simulation failed (this is normal in quote phase):', sendSim.value.err);\n // @ts-ignore Try to get fee even if simulation failed\n const fee = (sendSim.value as any).fee;\n if (fee) {\n estimatedFee = fee;\n }\n }\n } catch (error) {\n // this.csl(\"Solana estimateTransaction\", \"red-500\", \"estimateTransaction failed: %o\", error);\n }\n }\n\n const result = {\n estimateSourceGasLimit: BigInt(estimatedFee),\n estimateSourceGas: 0n,\n estimateSourceGasUsd: \"0\",\n };\n\n const setDefaultGasLimit = async () => {\n const { usd, wei } = await this.getEstimateGas({\n gasLimit: estimatedFee,\n price: nativeTokenPrice,\n nativeToken: fromToken.nativeToken,\n });\n result.estimateSourceGas = wei;\n result.estimateSourceGasUsd = usd;\n };\n\n await setDefaultGasLimit();\n return result;\n }\n\n async checkTransactionStatus(signature: string) {\n const connection = this.getConnection();\n\n const maxAttempts = 30;\n const interval = 4000;\n let timer: any;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const tx = await connection.getTransaction(signature, {\n commitment: \"finalized\",\n maxSupportedTransactionVersion: 0\n });\n\n if (tx) {\n if (tx.meta && tx.meta.err === null) {\n return true;\n } else {\n return false;\n }\n } else {\n this.csl(\"Solana checkTransactionStatus\", \"purple-400\", \"polling attempt %d/%d: transaction not confirmed...\", attempt, maxAttempts);\n }\n } catch (error: any) {\n this.csl(\"Solana checkTransactionStatus\", \"red-500\", \"checkTransactionStatus failed: %o\", error.message);\n }\n\n await new Promise((resolve) => {\n timer = setTimeout(() => {\n clearTimeout(timer);\n resolve(true);\n }, interval);\n });\n }\n\n this.csl(\"Solana checkTransactionStatus\", \"red-500\", \"checkTransactionStatus failed: timeout\");\n return false;\n }\n\n async simulateIx(ix: any) {\n const connection = this.getConnection();\n\n const tx = new Transaction().add(ix);\n\n const { blockhash } = await connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n tx.feePayer = this.publicKey!;\n\n // Convert Transaction to VersionedTransaction to use config options\n const message = tx.compileMessage();\n const versionedTx = new VersionedTransaction(message);\n\n const sim = await connection.simulateTransaction(versionedTx, {\n // commitment: \"confirmed\",\n sigVerify: false\n });\n\n if (sim.value.err) console.error(\"Error:\", sim.value.err);\n\n this.csl(\"Solana simulateIx\", \"purple-400\", \"sim: %o\", sim);\n\n return sim.value;\n }\n\n async quoteOFT(params: any) {\n const { Options } = await import(\"@layerzerolabs/lz-v2-utilities\");\n const {\n dry,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n fromToken,\n toToken,\n dstEid,\n refundTo,\n recipient,\n amountWei,\n payInLzToken,\n slippageTolerance,\n multiHopComposer,\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n prices,\n excludeFees,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const connection = this.getConnection();\n\n try {\n const result: any = {\n needApprove: false,\n sendParam: void 0,\n fees: {},\n estimateSourceGas: 0n,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: \"0\",\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),\n quoteParam: {\n ...params,\n },\n totalFeesUsd: \"0\",\n estimateTime: 0,\n };\n\n const execTime = new ExecTime({ type: \"USDT0 Solana\", logStyle: \"fuchsia-100\", isDebug: OpenAPI.DEBUG });\n\n const programId = new PublicKey(originLayerzeroAddress);\n const tokenMint = new PublicKey(fromToken.contractAddress);\n const quotePayer = new PublicKey(\"9JXR51yBLBgfesHF8SJgKWkNnx4FxtJCxCc3AV31TBsn\");\n const lookupTable = new PublicKey(\"6zcTrmdkiQp6dZHYUxVr6A2XVDSYi44X1rcPtvwNcrXi\");\n const tokenEscrow = new PublicKey(\"F1YkdxaiLA1eJt12y3uMAQef48Td3zdJfYhzjphma8hG\");\n const sender = this.publicKey!;\n const userPubkey = new PublicKey(refundTo || sender.toString());\n\n execTime.breakpoint();\n const mintInfo = await connection.getParsedAccountInfo(tokenMint);\n execTime.log(\"getParsedAccountInfo\");\n const decimals = (mintInfo.value?.data as { parsed: { info: { decimals: number } } }).parsed.info\n .decimals;\n const amountLd = BigInt(amountWei);\n const slippage = slippageTolerance || 0.01; // Default 1% slippage\n const minAmountLd = BigInt(Big(amountWei).times(Big(1).minus(Big(slippage).div(100))).toFixed(0));\n\n const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;\n const lzReceiveOptionValue = LZ_RECEIVE_VALUE[toToken.chainName] || 0;\n\n let unMultiHopExtraOptions = Options.newOptions().toBytes() as Uint8Array<any>;\n if (!isMultiHopComposer && lzReceiveOptionValue) {\n unMultiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toBytes() as Uint8Array<any>;\n }\n\n let _dstEid: any = dstEid;\n let to = getBytes(addressToBytes32(toToken.chainType, recipient));\n\n let extraOptions = unMultiHopExtraOptions;\n let composeMsg = null;\n if (isMultiHopComposer) {\n _dstEid = multiHopComposer.eid;\n to = getBytes(addressToBytes32(\"evm\", multiHopComposer.oftMultiHopComposer));\n\n let multiHopExtraOptions = Options.newOptions().toHex();\n if (lzReceiveOptionValue) {\n multiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n const composeMsgSendParam = {\n dstEid,\n to: addressToBytes32(toToken.chainType, recipient),\n amountLD: amountLd,\n minAmountLD: minAmountLd,\n extraOptions: multiHopExtraOptions,\n composeMsg: \"0x\",\n oftCmd: \"0x\",\n };\n execTime.breakpoint();\n const hopMsgFee = await getHopMsgFee({\n sendParam: composeMsgSendParam,\n toToken,\n });\n execTime.log(\"getHopMsgFee\");\n\n extraOptions = Options.newOptions()\n .addExecutorComposeOption(0, originLayerzero.composeOptionGas || 500000, hopMsgFee)\n .toBytes() as Uint8Array<any>;\n\n const abiCoder = ethers.AbiCoder.defaultAbiCoder();\n const composeEncoder = abiCoder.encode(\n [\"tuple(uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd)\"],\n [Object.values(composeMsgSendParam)]);\n\n composeMsg = ethers.getBytes(composeEncoder);\n }\n\n execTime.breakpoint();\n const pdas = deriveOftPdas(programId, _dstEid);\n const peerAddress = await getPeerAddress(connection, programId, _dstEid);\n execTime.log(\"deriveOftPdas+getPeerAddress\");\n\n execTime.breakpoint();\n const tokenSource = await getAssociatedTokenAddress(\n tokenMint,\n userPubkey,\n false,\n TOKEN_PROGRAM_ID,\n );\n execTime.log(\"getAssociatedTokenAddress\");\n\n const sendHelper = new SendHelper();\n execTime.breakpoint();\n const remainingAccounts = await sendHelper.getQuoteAccounts(\n connection as any,\n quotePayer,\n pdas.oftStore,\n _dstEid,\n peerAddress,\n );\n execTime.log(\"sendHelper.getQuoteAccounts\");\n\n const ix = new TransactionInstruction({\n programId,\n keys: [\n { pubkey: pdas.oftStore, isSigner: false, isWritable: false },\n { pubkey: pdas.credits, isSigner: false, isWritable: false },\n { pubkey: pdas.peer, isSigner: false, isWritable: false },\n ...remainingAccounts,\n ],\n data: Buffer.from(\n encodeQuoteSend({\n dstEid: _dstEid,\n to,\n amountLd,\n minAmountLd,\n extraOptions,\n composeMsg,\n payInLzToken: false,\n }),\n ),\n });\n\n execTime.breakpoint();\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 });\n const tx: any = await buildVersionedTransaction(\n connection as any,\n quotePayer,\n [computeIx, ix],\n undefined,\n undefined,\n lookupTable,\n );\n const sim = await connection.simulateTransaction(tx, {\n sigVerify: false,\n replaceRecentBlockhash: true,\n });\n execTime.log(\"buildTx+simulateTransaction(quote)\");\n\n if (sim.value.err) {\n console.error('Simulation logs:', sim, JSON.stringify(sim));\n throw new Error(`Quote failed: ${JSON.stringify(sim.value.err)}`);\n }\n\n const prefix = `Program return: ${programId} `;\n const log = sim.value.logs?.find((l) => l.startsWith(prefix));\n if (!log) throw new Error('Return data not found');\n\n const data = Buffer.from(log.slice(prefix.length), 'base64');\n\n let nativeFee = data.readBigUInt64LE(0);\n this.csl(\"Solana quoteOFT\", \"purple-500\", \"nativeFee: %o\", nativeFee);\n nativeFee = nativeFee * NATIVE_MSG_FEE_BUFFER / 100n;\n this.csl(\"Solana quoteOFT\", \"purple-500\", \"nativeFee after buffer: %o\", nativeFee);\n const lzTokenFee = data.readBigUInt64LE(8);\n\n // Convert nativeFee to USD if prices are available\n if (prices && fromToken.nativeToken) {\n const nativeFeeUsd = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFeeUsd = numberRemoveEndZero(nativeFeeUsd.toFixed(20));\n }\n result.fees.nativeFee = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .toFixed(fromToken.nativeToken.decimals, 0);\n result.totalEstimateSourceGas = nativeFee;\n\n if (lzTokenFee > 0n && prices && fromToken) {\n const lzTokenFeeUsd = Big(lzTokenFee.toString())\n .div(10 ** fromToken.decimals)\n .times(getPrice(prices, fromToken.symbol));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(lzTokenFeeUsd.toFixed(20));\n }\n result.fees.lzTokenFee = lzTokenFee.toString();\n\n let sendTx: any;\n if (!dry) {\n // send\n const sendSendHelper = new SendHelper();\n execTime.breakpoint();\n const sendRemainingAccounts = await sendSendHelper.getSendAccounts(\n connection as any,\n userPubkey,\n pdas.oftStore,\n _dstEid,\n peerAddress,\n );\n execTime.log(\"getSendAccounts\");\n\n const sendIx = new TransactionInstruction({\n programId,\n keys: [\n { pubkey: userPubkey, isSigner: true, isWritable: true },\n { pubkey: pdas.peer, isSigner: false, isWritable: false },\n { pubkey: pdas.oftStore, isSigner: false, isWritable: true },\n { pubkey: pdas.credits, isSigner: false, isWritable: true },\n { pubkey: tokenSource, isSigner: false, isWritable: true },\n { pubkey: tokenEscrow, isSigner: false, isWritable: true },\n { pubkey: tokenMint, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: pdas.eventAuthority, isSigner: false, isWritable: false },\n { pubkey: programId, isSigner: false, isWritable: false },\n ...sendRemainingAccounts,\n ],\n data: Buffer.from(\n encodeSend({\n dstEid: _dstEid,\n to,\n amountLd,\n minAmountLd,\n extraOptions,\n composeMsg,\n nativeFee,\n lzTokenFee: 0n,\n }),\n ),\n });\n\n execTime.breakpoint();\n const computeSendIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 });\n sendTx = await buildVersionedTransaction(\n connection as any,\n userPubkey,\n [computeSendIx, sendIx],\n undefined,\n undefined,\n lookupTable,\n );\n execTime.log(\"buildTx+simulateTransaction(send)\");\n }\n\n const ett = await this.estimateTransaction({\n dry,\n versionedTx: sendTx,\n fromToken,\n prices,\n });\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas += ett.estimateSourceGas;\n\n // 0.03% fee for Legacy Mesh transfers only (native USDT0 transfers are free)\n result.fees.legacyMeshFeeUsd = numberRemoveEndZero(Big(amountWei || 0).div(10 ** params.fromToken.decimals).times(USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(params.fromToken.decimals));\n result.outputAmount = numberRemoveEndZero(Big(Big(amountWei || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));\n\n // Check if the output amount exceeds the slippage tolerance\n // If it exceeds, return an error message\n this.csl(\"SolanaWallet quoteOFT\", \"red-600\", \"result.outputAmount: %o\", result.outputAmount);\n this.csl(\"SolanaWallet quoteOFT\", \"red-600\", \"slippageTolerance: %o\", slippageTolerance + \"%\");\n this.csl(\"SolanaWallet quoteOFT\", \"red-600\", \"Minimum received amount: %o\", Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(6, 0));\n if (Big(result.outputAmount).lt(Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))))) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n result.sendParam = {\n transaction: sendTx,\n versionedTx: sendTx,\n };\n\n // Calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees && excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd || 0).toFixed(20));\n\n execTime.logTotal(\"quoteOFT\");\n\n return result;\n } catch (error: any) {\n this.csl(\"Solana quoteOFT\", \"red-500\", \"quoteOFT failed: %o\", error);\n return { errMsg: error.message };\n }\n }\n\n async sendTransaction(params: any) {\n const { transaction } = params;\n\n const connection = this.getConnection();\n\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n if (!transaction) {\n throw new Error(\"Transaction is required\");\n }\n\n const hasAnySignature = (sig: Uint8Array | Buffer | null | undefined) =>\n !!sig && sig.length > 0 && Array.from(sig).some((byte) => byte !== 0);\n let latestBlockhash: Awaited<ReturnType<Connection[\"getLatestBlockhash\"]>> | null = null;\n let didRefreshBlockhash = false;\n\n // Only refresh blockhash for unsigned transactions.\n // For pre-signed CCTP txs, mutating recentBlockhash invalidates existing signatures.\n if (transaction instanceof Transaction) {\n const isUnsigned = transaction.signatures.every(({ signature }) => !hasAnySignature(signature as any));\n if (isUnsigned) {\n latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n transaction.recentBlockhash = latestBlockhash.blockhash;\n if (!transaction.feePayer) {\n transaction.feePayer = this.publicKey;\n }\n didRefreshBlockhash = true;\n }\n } else if (transaction instanceof VersionedTransaction) {\n const isUnsigned = transaction.signatures.every((signature) => !hasAnySignature(signature));\n if (isUnsigned) {\n latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n // web3.js does not expose a convenient mutator here in typings, but runtime object is mutable.\n (transaction.message as any).recentBlockhash = latestBlockhash.blockhash;\n didRefreshBlockhash = true;\n }\n }\n\n // Sign the transaction\n const signedTransaction = await this.signTransaction(transaction);\n\n let signature: string;\n try {\n // Send the transaction\n signature = await connection.sendRawTransaction(\n signedTransaction.serialize(),\n {\n skipPreflight: false,\n maxRetries: 3\n }\n );\n } catch (error: any) {\n if (error instanceof SendTransactionError) {\n try {\n const logs = await error.getLogs(connection);\n this.csl(\"Solana sendTransaction\", \"red-500\", \"sendRawTransaction failed logs: %o\", logs);\n } catch (logsError: any) {\n this.csl(\"Solana sendTransaction\", \"red-500\", \"failed to fetch SendTransactionError logs: %o\", logsError?.message || logsError);\n }\n }\n throw error;\n }\n\n this.csl(\"Solana sendTransaction\", \"green-400\", \"Transaction sent with signature: %o\", signature);\n\n // // Confirm the transaction\n // // If adding confirmation, you need to catch errors because it may throw a TransactionExpiredBlockheightExceededError.\n // const confirmation = didRefreshBlockhash && latestBlockhash\n // ? await connection.confirmTransaction(\n // {\n // signature,\n // blockhash: latestBlockhash.blockhash,\n // lastValidBlockHeight: latestBlockhash.lastValidBlockHeight\n // },\n // \"confirmed\"\n // )\n // : await connection.confirmTransaction(signature, \"confirmed\");\n\n // if (confirmation.value.err) {\n // throw new Error(\n // `Transaction failed: ${JSON.stringify(confirmation.value.err)}`\n // );\n // }\n\n return signature;\n }\n\n /**\n * Unified quote method that routes to specific quote methods based on type\n * @param type Service type from Service\n * @param params Parameters for the quote\n */\n async quote(type: Service, params: any) {\n switch (type) {\n case Service.CCTP:\n return this.quoteCCTP(params);\n case Service.Usdt0:\n return this.quoteOFT(params);\n case Service.OneClick:\n return this.quoteOneClickProxy(params);\n case Service.FraxZero:\n return this.quoteFraxZero(params);\n default:\n throw new Error(`Unsupported quote type: ${type}`);\n }\n }\n\n /**\n * Unified send method that routes to specific send methods based on type\n * @param type Send type from SendType enum\n * @param params Parameters for the send transaction\n */\n async send(type: SendType, params: any) {\n switch (type) {\n case SendType.SEND:\n return await this.sendTransaction(params);\n case SendType.TRANSFER:\n return await this.transfer(params);\n default:\n throw new Error(`Unsupported send type: ${type}`);\n }\n }\n\n async quoteOneClickProxy(params: any) {\n const {\n dry,\n refundTo,\n proxyAddress,\n fromToken,\n amountWei,\n prices,\n depositAddress,\n } = params;\n\n const connection = this.getConnection();\n\n const result: any = { fees: {} };\n try {\n const execTime = new ExecTime({ type: \"Oneclick Solana\", logStyle: \"fuchsia-200\", isDebug: OpenAPI.DEBUG });\n\n const PROGRAM_ID = new PublicKey(proxyAddress);\n const STATE_PDA = new PublicKey(\"9E8az3Y9sdXvM2f3CCH6c9N3iFyNfDryQCZhqDxRYGUw\");\n const MINT = new PublicKey(fromToken.contractAddress);\n const AMOUNT = new BN(amountWei);\n const RECIPIENT = new PublicKey(depositAddress);\n const sender = this.publicKey!;\n const userPubkey = new PublicKey(refundTo || sender.toString());\n\n // Create AnchorProvider\n const provider = new AnchorProvider(connection, this.signer, {\n commitment: \"confirmed\"\n });\n\n // Create Program instance\n const program = new Program<any>(stableflowProxyIdl, PROGRAM_ID, provider);\n\n // Get user's token account (ATA)\n execTime.breakpoint();\n const userTokenAccount = getAssociatedTokenAddressSync(MINT, userPubkey);\n execTime.log(\"Get user's token account (ATA)\");\n\n // Get recipient's token account (ATA)\n execTime.breakpoint();\n const toTokenAccount = getAssociatedTokenAddressSync(MINT, RECIPIENT);\n execTime.log(\"Get recipient's token account (ATA)\");\n\n const transaction = new Transaction();\n\n execTime.breakpoint();\n try {\n await getAccount(connection, toTokenAccount);\n } catch (error) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n userPubkey,\n toTokenAccount,\n RECIPIENT,\n MINT\n )\n );\n }\n execTime.log(\"getAccount(toTokenAccount)\");\n\n execTime.breakpoint();\n const transferInstruction = await program.methods\n .transfer(AMOUNT)\n .accounts({\n stableFlowState: STATE_PDA,\n tokenMint: MINT,\n userTokenAccount: userTokenAccount,\n toTokenAccount: toTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n user: userPubkey,\n toUser: RECIPIENT,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n execTime.log(\"program.methods.transfer.instruction\");\n\n transaction.add(transferInstruction);\n\n execTime.breakpoint();\n const { blockhash } = await connection.getLatestBlockhash();\n execTime.log(\"getLatestBlockhash\");\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = userPubkey;\n\n execTime.breakpoint();\n const message = transaction.compileMessage();\n const versionedTx = new VersionedTransaction(message);\n const ett = await this.estimateTransaction({\n dry,\n versionedTx,\n fromToken,\n prices,\n });\n execTime.log(\"estimateTransaction\");\n\n result.sendParam = {\n transaction,\n versionedTx,\n };\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n execTime.logTotal(\"quoteOneClickPorxy\");\n\n return result;\n } catch (error: any) {\n this.csl(\"Solana quoteOneClickProxy\", \"red-500\", \"error: %o\", error);\n return result;\n }\n }\n\n async quoteCCTP(params: any) {\n const {\n dry,\n proxyAddress,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n fromToken,\n prices,\n excludeFees,\n destinationDomain,\n sourceDomain,\n } = params;\n\n const connection = this.getConnection();\n\n try {\n const result: any = {\n needApprove: false,\n approveSpender: proxyAddress,\n sendParam: void 0,\n quoteParam: {\n sourceDomain,\n destinationDomain,\n proxyAddress,\n ...params,\n },\n fees: {},\n totalFeesUsd: void 0,\n estimateSourceGas: void 0,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: void 0,\n estimateTime: Math.floor(Math.random() * 8) + 3,\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),\n };\n\n const execTime = new ExecTime({ type: \"CCTP Solana\", logStyle: \"fuchsia-300\", isDebug: OpenAPI.DEBUG });\n\n const PROGRAM_ID = new PublicKey(proxyAddress);\n const MINT = new PublicKey(fromToken.contractAddress);\n const sender = this.publicKey!;\n const userPubkey = new PublicKey(refundTo || sender.toString());\n\n const [userStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user\"), userPubkey.toBuffer()],\n PROGRAM_ID\n );\n\n let userNonce = 0;\n execTime.breakpoint();\n try {\n const accountInfo = await connection.getAccountInfo(userStatePda);\n if (accountInfo && accountInfo.data) {\n // UserState structure: user (32 bytes) + nonce (8 bytes) + bump (1 byte)\n // Skip user (32 bytes) and read nonce (8 bytes, little-endian)\n const nonceBuffer = accountInfo.data.slice(32, 40);\n userNonce = Number(new BN(nonceBuffer, \"le\").toString());\n }\n } catch (error) {\n this.csl(\"Solana quoteCCTP\", \"red-500\", \"UserState not found, using nonce 0\");\n }\n execTime.log(\"getAccountInfo(userStatePda)\");\n\n const userTokenAccount = getAssociatedTokenAddressSync(MINT, userPubkey);\n\n execTime.breakpoint();\n const signatureRes = await quoteSignature({\n address: userPubkey.toString(),\n amount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),\n destination_domain_id: destinationDomain,\n receipt_address: recipient,\n source_domain_id: sourceDomain,\n ata_address: userTokenAccount,\n });\n execTime.log(\"quoteSignature from our api\");\n\n const {\n bridge_fee,\n max_fee,\n mint_fee,\n receipt_amount,\n signature,\n } = signatureRes;\n\n result.fees.estimateMintGasUsd = numberRemoveEndZero(\n Big(mint_fee || 0)\n .div(10 ** fromToken.decimals)\n .toFixed(fromToken.decimals)\n );\n result.fees.bridgeFeeUsd = numberRemoveEndZero(\n Big(bridge_fee || 0)\n .div(10 ** fromToken.decimals)\n .toFixed(fromToken.decimals)\n );\n result.outputAmount = numberRemoveEndZero(\n Big(receipt_amount || 0)\n .div(10 ** fromToken.decimals)\n .toFixed(fromToken.decimals, 0)\n );\n\n const cctpFeeRate = Big(max_fee || 0).div(amountWei || 1);\n const slippageLimit = Big(slippageTolerance || 0).div(100);\n this.csl(\"SolanaWallet quoteCCTP\", \"red-600\", \"cctpFeeRate: %o, slippageLimit: %o\", cctpFeeRate.toFixed(6), slippageLimit.toFixed(6));\n if (max_fee && amountWei && cctpFeeRate.gt(slippageLimit)) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n const operatorTx = Transaction.from(Buffer.from(signature, 'base64'));\n\n if (!operatorTx.verifySignatures(false)) {\n this.csl(\"Solana quoteCCTP\", \"red-500\", \"Signature verification failed\");\n } else {\n this.csl(\"Solana quoteCCTP\", \"purple-400\", \"Signature verification success\");\n }\n\n execTime.breakpoint();\n const message = operatorTx.compileMessage();\n const versionedTx = new VersionedTransaction(message);\n const ett = await this.estimateTransaction({\n dry,\n versionedTx,\n fromToken,\n prices,\n });\n execTime.log(\"estimateTransaction\");\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.sendParam = {\n transaction: operatorTx,\n versionedTx,\n };\n\n // Calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees && excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd || 0).toFixed(20));\n\n execTime.logTotal(\"quoteCCTP\");\n\n return result;\n } catch (error: any) {\n this.csl(\"Solana quoteCCTP\", \"red-500\", \"quoteCCTP failed: %o\", error);\n return { errMsg: error.message };\n }\n }\n\n async createAssociatedTokenAddress(params: any) {\n const {\n tokenMint,\n } = params;\n\n const connection = this.getConnection();\n\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n const ownerPubkey = this.publicKey;\n const mint = new PublicKey(tokenMint);\n const associatedTokenAccount = getAssociatedTokenAddressSync(mint, ownerPubkey);\n\n this.csl(\"Solana createAssociatedTokenAddress\", \"purple-400\", \"associatedTokenAccount: %o\", associatedTokenAccount);\n\n const createTokenAccount = async () => {\n const transaction = new Transaction();\n\n transaction.add(\n createAssociatedTokenAccountInstruction(\n ownerPubkey,\n associatedTokenAccount,\n ownerPubkey,\n mint\n )\n );\n\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = ownerPubkey;\n\n const signedTransaction = await this.signTransaction(transaction);\n\n const signature = await connection.sendRawTransaction(\n signedTransaction.serialize()\n );\n\n await this.checkTransactionStatus(signature);\n\n return associatedTokenAccount;\n };\n\n try {\n const accountRes = await getAccount(connection, associatedTokenAccount);\n this.csl(\"Solana createAssociatedTokenAddress\", \"purple-400\", \"associatedTokenAccount account: %o\", accountRes);\n return associatedTokenAccount;\n } catch (error) {\n this.csl(\"Solana createAssociatedTokenAddress\", \"red-500\", \"get ata failed: %o\", error);\n }\n\n return createTokenAccount();\n }\n\n async quoteFraxZero(params: any) {\n const {\n dry,\n recipient,\n amountWei,\n slippageTolerance,\n fromToken,\n toToken,\n prices,\n excludeFees,\n refundTo,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const connection = this.getConnection();\n\n const execTime = new ExecTime({ type: \"FraxZero Solana\", logStyle: \"fuchsia-400\", isDebug: OpenAPI.DEBUG });\n\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"params: %o\", params);\n const result: any = {\n needApprove: false,\n approveSpender: void 0,\n sendParam: void 0,\n quoteParam: {\n ...params,\n },\n fees: {},\n totalFeesUsd: 0,\n estimateSourceGas: 0n,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: 0,\n estimateTime: 0,\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0)),\n };\n\n const sender = this.publicKey!;\n const userPubkey = fromWeb3JsPublicKey(new PublicKey(refundTo || sender.toString()));\n const {\n eid: srcEid,\n remoteHop,\n lockbox,\n } = originLayerzero;\n const {\n eid: dstEid,\n } = destinationLayerzero;\n\n const availableRpcUrl = await getAvailableSolanaRpcUrl({ isQuerySignature: true });\n\n const ALT_ADDRESS = new PublicKey(\"AokBxha6VMLLgf97B5VYHEtqztamWmYERBmmFvjuTzJB\");\n const umi = createUmi(availableRpcUrl, \"confirmed\").use(mplToolbox());\n const oftProgramId = publicKey(originLayerzero.programId);\n const oftMint = publicKey(fromToken.contractAddress);\n const oftEscrow = publicKey(originLayerzero.escrow);\n const tokenProgramId = publicKey(TOKEN_PROGRAM_ID);\n const tokenAccount = findAssociatedTokenPda(umi, {\n mint: oftMint,\n owner: userPubkey,\n tokenProgramId,\n });\n\n execTime.breakpoint();\n await safeFetchToken(umi, tokenAccount[0]);\n execTime.log(\"safeFetchToken\");\n\n const recipientAddressBytes32 = addressToBytes32(toToken.chainType, recipient);\n const amountLd = BigInt(amountWei);\n const minAmountLd = (amountLd * 99n) / 100n;\n\n execTime.breakpoint();\n const { value: lookupTableAccount } = await connection.getAddressLookupTable(ALT_ADDRESS);\n execTime.log(\"getAddressLookupTable\", \"ALT_ADDRESS: %o, lookupTableAccount: %o\", ALT_ADDRESS, lookupTableAccount);\n if (!lookupTableAccount) {\n throw new Error(\"ALT not found\");\n }\n\n execTime.breakpoint();\n let { nativeFee, lzTokenFee } = await oft.quote(\n umi.rpc,\n {\n payer: userPubkey,\n tokenMint: oftMint,\n tokenEscrow: oftEscrow,\n },\n {\n payInLzToken: false,\n to: getBytes(recipientAddressBytes32),\n dstEid: dstEid,\n amountLd,\n minAmountLd,\n options: Buffer.from(\"\"),\n composeMsg: undefined,\n },\n {\n oft: oftProgramId,\n },\n );\n execTime.log(\"oft.quote\", \"nativeFee: %s, lzTokenFee: %s\", nativeFee, lzTokenFee);\n nativeFee = nativeFee * NATIVE_MSG_FEE_BUFFER / 100n;\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"nativeFee after buffer: %o\", nativeFee);\n\n // oft.send() internally simulates the tx via umi.rpc without replaceRecentBlockhash,\n // so it can transiently fail with BlockhashNotFound when RPC nodes are out of sync.\n execTime.breakpoint();\n let ix: Awaited<ReturnType<typeof oft.send>>;\n let oftSendRetries = 0;\n const OFT_SEND_MAX_RETRIES = 3;\n while (true) {\n try {\n ix = await oft.send(\n umi.rpc,\n {\n payer: {\n ...this.signer,\n publicKey: userPubkey,\n },\n tokenMint: oftMint,\n tokenEscrow: oftEscrow,\n tokenSource: tokenAccount[0],\n },\n {\n to: getBytes(recipientAddressBytes32),\n dstEid,\n amountLd,\n minAmountLd,\n options: Buffer.from(''),\n composeMsg: undefined,\n nativeFee,\n lzTokenFee: 0n,\n },\n {\n oft: oftProgramId,\n token: tokenProgramId,\n },\n );\n break;\n } catch (err: any) {\n const isBlockhashNotFound =\n err?.message?.includes('BlockhashNotFound') ||\n JSON.stringify(err)?.includes('BlockhashNotFound');\n if (isBlockhashNotFound && oftSendRetries < OFT_SEND_MAX_RETRIES) {\n oftSendRetries++;\n this.csl(\"Solana quoteFraxZero\", \"yellow-500\", \"oft.send BlockhashNotFound, retrying (%o/%o)...\", oftSendRetries, OFT_SEND_MAX_RETRIES);\n await new Promise((r) => setTimeout(r, 500 * oftSendRetries));\n continue;\n }\n throw err;\n }\n }\n\n execTime.log(\"oft.senbd\", \"oft send retry times: %s\", oftSendRetries);\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"ix: %o\", ix);\n\n const web3Instruction = toWeb3JsInstruction(ix.instruction);\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 600000, // Increase to 400k units (default is 200k)\n });\n execTime.breakpoint();\n const { blockhash } = await connection.getLatestBlockhash();\n execTime.log(\"getLatestBlockhash\");\n const messageV0 = new TransactionMessage({\n payerKey: new PublicKey(userPubkey),\n recentBlockhash: blockhash,\n instructions: [computeBudgetIx, web3Instruction],\n }).compileToV0Message([lookupTableAccount]);\n const transaction = new VersionedTransaction(messageV0);\n\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"transaction: %o\", transaction);\n\n result.sendParam = {\n transaction,\n versionedTx: transaction,\n };\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n versionedTx: transaction,\n fromToken,\n prices,\n });\n execTime.log(\"estimateTransaction\");\n\n const nativeFeeUsd = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFeeUsd = numberRemoveEndZero(nativeFeeUsd.toFixed(20));\n\n const lzTokenFeeUsd = Big(lzTokenFee ? lzTokenFee.toString() : 0)\n .div(10 ** fromToken.decimals)\n .times(getPrice(prices, fromToken.symbol));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(lzTokenFeeUsd.toFixed(20));\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas + nativeFee;\n\n result.fees.nativeFee = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .toFixed(fromToken.nativeToken.decimals, 0);\n result.fees.lzTokenFee = lzTokenFee.toString();\n\n for (const feeKey in result.fees) {\n if (excludeFees && excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd || 0).toFixed(20));\n\n execTime.logTotal(\"quoteFraxZero\");\n\n return result;\n }\n}\n\nexport { SolanaWallet };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/stableflow-proxy.json","../src/layerzero.ts","../src/solana.ts"],"names":["Buffer","PublicKey","struct","u32","bytes","u64","option","bool","Csl","OpenAPI","getChainRpcUrl","createSolanaFallbackConnection","LAMPORTS_PER_SOL","Transaction","SystemProgram","getAssociatedTokenAddressSync","getAccount","createAssociatedTokenAccountInstruction","createTransferInstruction","TOKEN_PROGRAM_ID","publicKey","getAssociatedTokenAddress","Big","numberRemoveEndZero","getPrice","VersionedTransaction","removeOftDust","ExecTime","LZ_RECEIVE_VALUE","getBytes","addressToBytes32","getHopMsgFee","ethers","SendHelper","TransactionInstruction","ComputeBudgetProgram","buildVersionedTransaction","NATIVE_MSG_FEE_BUFFER","USDT0_LEGACY_MESH_TRANSFTER_FEE","signature","SendTransactionError","Service","SendType","BN","AnchorProvider","Program","quoteSignature","fromWeb3JsPublicKey","getAvailableSolanaRpcUrl","umi","createUmi","mplToolbox","findAssociatedTokenPda","safeFetchToken","oft","toWeb3JsInstruction","TransactionMessage"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"version\": \"0.1.0\",\n \"name\": \"stableflow\",\n \"instructions\": [\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"initializing the whole protocol,\"\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"transfer\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"toTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"toUser\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"transferAmount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"setOwner\",\n \"accounts\": [\n {\n \"name\": \"newAccountId\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"start\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"pause\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"shutdown\",\n \"accounts\": [\n {\n \"name\": \"stableFlowState\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"StableFlowState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"admin\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"defined\": \"StableFlowStatus\"\n }\n }\n ]\n }\n }\n ],\n \"types\": [\n {\n \"name\": \"StableFlowStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"NotInitial\"\n },\n {\n \"name\": \"Running\"\n },\n {\n \"name\": \"Paused\"\n },\n {\n \"name\": \"Shutdown\"\n }\n ]\n }\n }\n ],\n \"events\": [\n {\n \"name\": \"TransferEvent\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"to\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidProgramId\",\n \"msg\": \"InvalidProgramId\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidProgramStatus\",\n \"msg\": \"InvalidProgramStatus\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidStatus\"\n },\n {\n \"code\": 6003,\n \"name\": \"UnexpectedAccount\",\n \"msg\": \"UnexpectedAccount\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidToken\",\n \"msg\": \"InvalidToken\"\n },\n {\n \"code\": 6005,\n \"name\": \"NumberCastError\",\n \"msg\": \"NumberCastError\"\n },\n {\n \"code\": 6006,\n \"name\": \"NotAllowed\",\n \"msg\": \"NotAllowed\"\n },\n {\n \"code\": 6007,\n \"name\": \"HadShutdown\",\n \"msg\": \"HadShutdown\"\n },\n {\n \"code\": 6008,\n \"name\": \"PauseOrShutdown\",\n \"msg\": \"PauseOrShutdown\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidUser\",\n \"msg\": \"InvalidUser\"\n }\n ]\n}","import { Connection, PublicKey } from '@solana/web3.js';\nimport { struct, u32, u64, bytes, option, bool } from '@metaplex-foundation/umi/serializers';\nimport { Buffer } from 'buffer';\n\nconst SEEDS = {\n OFT: Buffer.from('OFT'),\n PEER: Buffer.from('Peer'),\n CREDITS: Buffer.from('Credits'),\n EVENT_AUTHORITY: Buffer.from('__event_authority'),\n};\n\nconst DISCRIMINATOR = {\n quoteSend: new Uint8Array([207, 0, 49, 214, 160, 211, 76, 211]),\n send: new Uint8Array([102, 251, 20, 187, 65, 75, 12, 69]),\n};\n\nfunction u32be(n: number): Buffer {\n const buf = Buffer.alloc(4);\n buf.writeUInt32BE(n, 0);\n return buf;\n}\n\nexport function deriveOftPdas(programId: PublicKey, dstEid: number) {\n return {\n oftStore: PublicKey.findProgramAddressSync([SEEDS.OFT], programId)[0],\n peer: PublicKey.findProgramAddressSync([SEEDS.PEER, u32be(dstEid)], programId)[0],\n credits: PublicKey.findProgramAddressSync([SEEDS.CREDITS], programId)[0],\n eventAuthority: PublicKey.findProgramAddressSync([SEEDS.EVENT_AUTHORITY], programId)[0],\n };\n}\n\nexport async function getPeerAddress(\n connection: Connection,\n programId: PublicKey,\n dstEid: number,\n): Promise<`0x${string}`> {\n const { peer } = deriveOftPdas(programId, dstEid);\n const info = await connection.getAccountInfo(peer);\n if (!info) throw new Error(`Peer not found for EID ${dstEid}`);\n return `0x${info.data.subarray(8, 40).toString('hex')}`;\n}\n\ntype QuoteSendParams = {\n dstEid: number;\n to: Uint8Array;\n amountLd: bigint;\n minAmountLd: bigint;\n extraOptions: Uint8Array;\n composeMsg: Uint8Array | null;\n payInLzToken: boolean;\n};\n\nconst quoteSendParamsSerializer = struct([\n ['dstEid', u32()],\n ['to', bytes({ size: 32 })],\n ['amountLd', u64()],\n ['minAmountLd', u64()],\n ['extraOptions', bytes({ size: u32() })],\n ['composeMsg', option(bytes({ size: u32() }))],\n ['payInLzToken', bool()],\n]);\n\nexport function encodeQuoteSend(params: QuoteSendParams): Uint8Array {\n const paramsData = quoteSendParamsSerializer.serialize(params);\n const data = new Uint8Array(8 + paramsData.length);\n data.set(DISCRIMINATOR.quoteSend, 0);\n data.set(paramsData, 8);\n return data;\n}\n\ntype SendParams = {\n dstEid: number;\n to: Uint8Array;\n amountLd: bigint;\n minAmountLd: bigint;\n extraOptions: Uint8Array;\n composeMsg: Uint8Array | null;\n nativeFee: bigint;\n lzTokenFee: bigint;\n};\n\nconst sendParamsSerializer = struct([\n ['dstEid', u32()],\n ['to', bytes({ size: 32 })],\n ['amountLd', u64()],\n ['minAmountLd', u64()],\n ['extraOptions', bytes({ size: u32() })],\n ['composeMsg', option(bytes({ size: u32() }))],\n ['nativeFee', u64()],\n ['lzTokenFee', u64()],\n]);\n\nexport function encodeSend(params: SendParams): Uint8Array {\n const paramsData = sendParamsSerializer.serialize(params);\n const data = new Uint8Array(8 + paramsData.length);\n data.set(DISCRIMINATOR.send, 0);\n data.set(paramsData, 8);\n return data;\n}\n\nexport function parseDecimalToUnits(amount: string, decimals: number): bigint {\n const [whole, frac = ''] = amount.split('.');\n const fracPadded = frac.padEnd(decimals, '0').slice(0, decimals);\n return BigInt(whole + fracPadded);\n}\n\nexport const NATIVE_MSG_FEE_BUFFER: bigint = 105n;\n","import {\n Connection,\n PublicKey,\n Transaction,\n VersionedTransaction,\n SystemProgram,\n LAMPORTS_PER_SOL,\n TransactionInstruction,\n ComputeBudgetProgram,\n SendTransactionError,\n TransactionMessage,\n} from \"@solana/web3.js\";\nimport {\n getAssociatedTokenAddress,\n createTransferInstruction,\n TOKEN_PROGRAM_ID,\n getAccount,\n createAssociatedTokenAccountInstruction,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { AnchorProvider, BN, Program } from \"@coral-xyz/anchor\";\nimport Big from \"big.js\";\nimport {\n getPrice,\n numberRemoveEndZero,\n SendType,\n Service,\n getChainRpcUrl,\n Csl,\n OpenAPI,\n ExecTime,\n} from \"@stableflow/core\";\nimport {\n addressToBytes32,\n quoteSignature,\n getHopMsgFee,\n LZ_RECEIVE_VALUE,\n USDT0_LEGACY_MESH_TRANSFTER_FEE,\n removeOftDust,\n} from \"@stableflow/bridges\";\nimport { NATIVE_MSG_FEE_BUFFER } from \"@stableflow/utils-evm\";\nimport { createSolanaFallbackConnection, getAvailableSolanaRpcUrl } from \"@stableflow/utils-solana\";\n// @ts-ignore --resolveJsonModule\nimport stableflowProxyIdl from \"./stableflow-proxy.json\";\nimport { ethers, getBytes } from \"ethers\";\nimport { deriveOftPdas, encodeQuoteSend, encodeSend, getPeerAddress } from \"./layerzero\";\nimport { buildVersionedTransaction, SendHelper } from \"@layerzerolabs/lz-solana-sdk-v2\";\nimport { fromWeb3JsPublicKey, toWeb3JsInstruction } from \"@metaplex-foundation/umi-web3js-adapters\";\nimport { createUmi } from \"@metaplex-foundation/umi-bundle-defaults\";\nimport { findAssociatedTokenPda, mplToolbox, safeFetchToken } from \"@metaplex-foundation/mpl-toolbox\";\nimport { publicKey } from \"@metaplex-foundation/umi\";\nimport { oft } from \"@layerzerolabs/oft-v2-solana-sdk\";\nimport { Buffer } from \"buffer\";\n\nexport default class SolanaWallet {\n private publicKey: PublicKey | null;\n private signTransaction: any;\n private signer: any;\n private csl;\n\n constructor(options: { publicKey: PublicKey | null; signer: any }) {\n this.publicKey = options.publicKey;\n this.signTransaction = options.signer.signTransaction;\n this.signer = options.signer;\n\n const cs = new Csl(OpenAPI.DEBUG);\n this.csl = cs.log;\n }\n\n getConnection() {\n const solanaRpcUrls: string[] = getChainRpcUrl(\"sol\").rpcUrls;\n return createSolanaFallbackConnection(solanaRpcUrls);\n };\n\n // Transfer SOL\n async transferSOL(to: string, amount: string) {\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n const fromPubkey = this.publicKey;\n const toPubkey = new PublicKey(to);\n const lamports = Math.floor(parseFloat(amount) * LAMPORTS_PER_SOL);\n\n const transaction = new Transaction().add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports\n })\n );\n\n const connection = this.getConnection();\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = fromPubkey;\n\n const signedTransaction = await this.signTransaction(transaction);\n const signature = await connection.sendRawTransaction(\n signedTransaction.serialize()\n );\n\n await connection.confirmTransaction(signature);\n return signature;\n }\n\n // Transfer SPL token\n async transferToken(tokenMint: string, to: string, amount: string) {\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n const connection = this.getConnection();\n\n const fromPubkey = this.publicKey;\n const toPubkey = new PublicKey(to);\n const mint = new PublicKey(tokenMint);\n\n // Get associated token account addresses\n const fromTokenAccount = getAssociatedTokenAddressSync(mint, fromPubkey);\n const toTokenAccount = getAssociatedTokenAddressSync(mint, toPubkey);\n\n const transaction = new Transaction();\n\n // Check if recipient has token account, create if not\n try {\n await getAccount(connection, toTokenAccount);\n } catch (error) {\n // If token account doesn't exist, create it\n transaction.add(\n createAssociatedTokenAccountInstruction(\n fromPubkey, // payer\n toTokenAccount, // ata\n toPubkey, // owner\n mint // mint\n )\n );\n }\n\n // Add transfer instruction\n transaction.add(\n createTransferInstruction(\n fromTokenAccount,\n toTokenAccount,\n fromPubkey,\n BigInt(amount),\n [],\n TOKEN_PROGRAM_ID\n )\n );\n\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = fromPubkey;\n\n const signedTransaction = await this.signTransaction(transaction);\n const signature = await connection.sendRawTransaction(\n signedTransaction.serialize()\n );\n\n await connection.confirmTransaction(signature);\n\n return signature;\n }\n\n // Generic transfer method\n async transfer(data: {\n originAsset: string;\n depositAddress: string;\n amount: string;\n }) {\n const { originAsset, depositAddress, amount } = data;\n\n // Transfer SOL\n if (originAsset === \"SOL\" || originAsset === \"sol\") {\n return await this.transferSOL(depositAddress, amount);\n }\n\n // Transfer SPL token\n const result = await this.transferToken(\n originAsset,\n depositAddress,\n amount\n );\n return result;\n }\n\n async getSOLBalance(account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n const connection = this.getConnection();\n\n try {\n const publicKey = new PublicKey(account);\n const balance = await connection.getBalance(publicKey);\n return balance;\n } catch (error) {\n this.csl(\"Solana getSOLBalance\", \"red-500\", \"Get SOL balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getTokenBalance(tokenMint: string, account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n const connection = this.getConnection();\n\n const mint = new PublicKey(tokenMint);\n const owner = new PublicKey(account);\n\n try {\n const tokenAccount = await getAssociatedTokenAddress(mint, owner);\n\n const accountInfo = await getAccount(connection, tokenAccount);\n\n return accountInfo.amount;\n } catch (error: any) {\n if (error.message.includes(\"could not find account\")) {\n return \"0\";\n }\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getBalance(token: any, account: string, options?: { isCatchError?: boolean; }) {\n if (\n token.symbol === \"SOL\" ||\n token.symbol === \"sol\" ||\n token.symbol === \"native\"\n ) {\n return await this.getSOLBalance(account, options);\n }\n return await this.getTokenBalance(token.contractAddress, account, options);\n }\n\n async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n return await this.getBalance(token, account, options);\n }\n\n /**\n * Estimate gas limit for transfer transaction\n * @param data Transfer data\n * @returns Gas limit estimate, gas price, and estimated gas cost\n */\n async estimateTransferGas(data: {\n fromToken: any;\n depositAddress: string;\n amount: string;\n }): Promise<{\n gasLimit: bigint;\n gasPrice: bigint;\n estimateGas: bigint;\n }> {\n const connection = this.getConnection();\n\n // Solana transaction fees are typically fixed at 5000 lamports per signature\n // Base fee per signature: 5000 lamports\n let estimatedFee = 5000n;\n\n const { fromToken, depositAddress } = data;\n const originAsset = fromToken.contractAddress;\n\n // Check if token account creation is needed for SPL tokens\n if (originAsset !== \"SOL\" && originAsset !== \"sol\") {\n const mint = new PublicKey(originAsset);\n const toPubkey = new PublicKey(depositAddress);\n const toTokenAccount = getAssociatedTokenAddressSync(mint, toPubkey);\n\n // Check if recipient has token account\n try {\n await getAccount(connection, toTokenAccount);\n // Account exists, no additional fee\n } catch (error) {\n // Account doesn't exist, will need to create it (additional fee)\n estimatedFee += 5000n;\n }\n }\n\n return {\n gasLimit: estimatedFee,\n gasPrice: 1n,\n estimateGas: estimatedFee\n };\n }\n\n async getEstimateGas(params: any) {\n const { gasLimit = \"5000\", price, nativeToken } = params;\n\n const estimateGas = BigInt(gasLimit);\n const estimateGasAmount = Big(estimateGas.toString()).div(10 ** nativeToken.decimals);\n const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n return {\n gasPrice: 1n,\n usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n wei: estimateGas,\n amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n };\n }\n\n async estimateTransaction(params: any) {\n const {\n dry,\n versionedTx,\n fromToken,\n prices,\n } = params;\n\n const connection = this.getConnection();\n\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n let estimatedFee = 5000n;\n if (!dry) {\n try {\n const sendSim = await connection.simulateTransaction(versionedTx, {\n sigVerify: false,\n replaceRecentBlockhash: true,\n });\n this.csl(\"Solana estimateTransaction\", \"purple-400\", \"sendSim: %o\", sendSim);\n // Even if simulation fails (e.g., insufficient funds), we can still get the fee estimate\n if (!sendSim.value.err) {\n // @ts-ignore Solana base fee is 5000 lamports per signature\n estimatedFee = (sendSim.value as any).fee || 5000n;\n } else {\n // If simulation fails, log it but continue with default fee\n console.warn('Send simulation failed (this is normal in quote phase):', sendSim.value.err);\n // @ts-ignore Try to get fee even if simulation failed\n const fee = (sendSim.value as any).fee;\n if (fee) {\n estimatedFee = fee;\n }\n }\n } catch (error) {\n // this.csl(\"Solana estimateTransaction\", \"red-500\", \"estimateTransaction failed: %o\", error);\n }\n }\n\n const result = {\n estimateSourceGasLimit: BigInt(estimatedFee),\n estimateSourceGas: 0n,\n estimateSourceGasUsd: \"0\",\n };\n\n const setDefaultGasLimit = async () => {\n const { usd, wei } = await this.getEstimateGas({\n gasLimit: estimatedFee,\n price: nativeTokenPrice,\n nativeToken: fromToken.nativeToken,\n });\n result.estimateSourceGas = wei;\n result.estimateSourceGasUsd = usd;\n };\n\n await setDefaultGasLimit();\n return result;\n }\n\n async checkTransactionStatus(signature: string) {\n const connection = this.getConnection();\n\n const maxAttempts = 30;\n const interval = 4000;\n let timer: any;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const tx = await connection.getTransaction(signature, {\n commitment: \"finalized\",\n maxSupportedTransactionVersion: 0\n });\n\n if (tx) {\n if (tx.meta && tx.meta.err === null) {\n return true;\n } else {\n return false;\n }\n } else {\n this.csl(\"Solana checkTransactionStatus\", \"purple-400\", \"polling attempt %d/%d: transaction not confirmed...\", attempt, maxAttempts);\n }\n } catch (error: any) {\n this.csl(\"Solana checkTransactionStatus\", \"red-500\", \"checkTransactionStatus failed: %o\", error.message);\n }\n\n await new Promise((resolve) => {\n timer = setTimeout(() => {\n clearTimeout(timer);\n resolve(true);\n }, interval);\n });\n }\n\n this.csl(\"Solana checkTransactionStatus\", \"red-500\", \"checkTransactionStatus failed: timeout\");\n return false;\n }\n\n async simulateIx(ix: any) {\n const connection = this.getConnection();\n\n const tx = new Transaction().add(ix);\n\n const { blockhash } = await connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n tx.feePayer = this.publicKey!;\n\n // Convert Transaction to VersionedTransaction to use config options\n const message = tx.compileMessage();\n const versionedTx = new VersionedTransaction(message);\n\n const sim = await connection.simulateTransaction(versionedTx, {\n // commitment: \"confirmed\",\n sigVerify: false\n });\n\n if (sim.value.err) console.error(\"Error:\", sim.value.err);\n\n this.csl(\"Solana simulateIx\", \"purple-400\", \"sim: %o\", sim);\n\n return sim.value;\n }\n\n async quoteOFT(params: any) {\n const { Options } = await import(\"@layerzerolabs/lz-v2-utilities\");\n const {\n dry,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n fromToken,\n toToken,\n dstEid,\n refundTo,\n recipient,\n amountWei,\n payInLzToken,\n slippageTolerance,\n multiHopComposer,\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n prices,\n excludeFees,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const connection = this.getConnection();\n\n try {\n const amountLdClean = removeOftDust(amountWei || 0, fromToken.decimals);\n const result: any = {\n needApprove: false,\n sendParam: void 0,\n fees: {},\n estimateSourceGas: 0n,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: \"0\",\n outputAmount: numberRemoveEndZero(Big(amountLdClean || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),\n quoteParam: {\n ...params,\n },\n totalFeesUsd: \"0\",\n estimateTime: 0,\n };\n\n if (BigInt(amountLdClean) === 0n) {\n result.errMsg = \"Amount below minimum cross-chain unit\";\n return result;\n }\n\n const execTime = new ExecTime({ type: \"USDT0 Solana\", logStyle: \"fuchsia-100\", isDebug: OpenAPI.DEBUG });\n\n const programId = new PublicKey(originLayerzeroAddress);\n const tokenMint = new PublicKey(fromToken.contractAddress);\n const quotePayer = new PublicKey(\"9JXR51yBLBgfesHF8SJgKWkNnx4FxtJCxCc3AV31TBsn\");\n const lookupTable = new PublicKey(\"6zcTrmdkiQp6dZHYUxVr6A2XVDSYi44X1rcPtvwNcrXi\");\n const tokenEscrow = new PublicKey(\"F1YkdxaiLA1eJt12y3uMAQef48Td3zdJfYhzjphma8hG\");\n const sender = this.publicKey!;\n const userPubkey = new PublicKey(refundTo || sender.toString());\n\n execTime.breakpoint();\n const mintInfo = await connection.getParsedAccountInfo(tokenMint);\n execTime.log(\"getParsedAccountInfo\");\n const decimals = (mintInfo.value?.data as { parsed: { info: { decimals: number } } }).parsed.info\n .decimals;\n const amountLd = BigInt(amountLdClean);\n const slippage = slippageTolerance || 0.01; // Default 1% slippage\n const minAmountLd = BigInt(Big(amountLdClean).times(Big(1).minus(Big(slippage).div(100))).toFixed(0));\n\n const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;\n const lzReceiveOptionValue = LZ_RECEIVE_VALUE[toToken.chainName] || 0;\n\n let unMultiHopExtraOptions = Options.newOptions().toBytes() as Uint8Array<any>;\n if (!isMultiHopComposer && lzReceiveOptionValue) {\n unMultiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toBytes() as Uint8Array<any>;\n }\n\n let _dstEid: any = dstEid;\n let to = getBytes(addressToBytes32(toToken.chainType, recipient));\n\n let extraOptions = unMultiHopExtraOptions;\n let composeMsg = null;\n if (isMultiHopComposer) {\n _dstEid = multiHopComposer.eid;\n to = getBytes(addressToBytes32(\"evm\", multiHopComposer.oftMultiHopComposer));\n\n let multiHopExtraOptions = Options.newOptions().toHex();\n if (lzReceiveOptionValue) {\n multiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n const composeMsgSendParam = {\n dstEid,\n to: addressToBytes32(toToken.chainType, recipient),\n amountLD: amountLd,\n minAmountLD: minAmountLd,\n extraOptions: multiHopExtraOptions,\n composeMsg: \"0x\",\n oftCmd: \"0x\",\n };\n execTime.breakpoint();\n const hopMsgFee = await getHopMsgFee({\n sendParam: composeMsgSendParam,\n toToken,\n });\n execTime.log(\"getHopMsgFee\");\n\n extraOptions = Options.newOptions()\n .addExecutorComposeOption(0, originLayerzero.composeOptionGas || 500000, hopMsgFee)\n .toBytes() as Uint8Array<any>;\n\n const abiCoder = ethers.AbiCoder.defaultAbiCoder();\n const composeEncoder = abiCoder.encode(\n [\"tuple(uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd)\"],\n [Object.values(composeMsgSendParam)]);\n\n composeMsg = ethers.getBytes(composeEncoder);\n }\n\n execTime.breakpoint();\n const pdas = deriveOftPdas(programId, _dstEid);\n const peerAddress = await getPeerAddress(connection, programId, _dstEid);\n execTime.log(\"deriveOftPdas+getPeerAddress\");\n\n execTime.breakpoint();\n const tokenSource = await getAssociatedTokenAddress(\n tokenMint,\n userPubkey,\n false,\n TOKEN_PROGRAM_ID,\n );\n execTime.log(\"getAssociatedTokenAddress\");\n\n const sendHelper = new SendHelper();\n execTime.breakpoint();\n const remainingAccounts = await sendHelper.getQuoteAccounts(\n connection as any,\n quotePayer,\n pdas.oftStore,\n _dstEid,\n peerAddress,\n );\n execTime.log(\"sendHelper.getQuoteAccounts\");\n\n const ix = new TransactionInstruction({\n programId,\n keys: [\n { pubkey: pdas.oftStore, isSigner: false, isWritable: false },\n { pubkey: pdas.credits, isSigner: false, isWritable: false },\n { pubkey: pdas.peer, isSigner: false, isWritable: false },\n ...remainingAccounts,\n ],\n data: Buffer.from(\n encodeQuoteSend({\n dstEid: _dstEid,\n to,\n amountLd,\n minAmountLd,\n extraOptions,\n composeMsg,\n payInLzToken: false,\n }),\n ),\n });\n\n execTime.breakpoint();\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 });\n const tx: any = await buildVersionedTransaction(\n connection as any,\n quotePayer,\n [computeIx, ix],\n undefined,\n undefined,\n lookupTable,\n );\n const sim = await connection.simulateTransaction(tx, {\n sigVerify: false,\n replaceRecentBlockhash: true,\n });\n execTime.log(\"buildTx+simulateTransaction(quote)\");\n\n if (sim.value.err) {\n console.error('Simulation logs:', sim, JSON.stringify(sim));\n throw new Error(`Quote failed: ${JSON.stringify(sim.value.err)}`);\n }\n\n const prefix = `Program return: ${programId} `;\n const log = sim.value.logs?.find((l) => l.startsWith(prefix));\n if (!log) throw new Error('Return data not found');\n\n const data = Buffer.from(log.slice(prefix.length), 'base64');\n\n let nativeFee = data.readBigUInt64LE(0);\n this.csl(\"Solana quoteOFT\", \"purple-500\", \"nativeFee: %o\", nativeFee);\n nativeFee = nativeFee * NATIVE_MSG_FEE_BUFFER / 100n;\n this.csl(\"Solana quoteOFT\", \"purple-500\", \"nativeFee after buffer: %o\", nativeFee);\n const lzTokenFee = data.readBigUInt64LE(8);\n\n // Convert nativeFee to USD if prices are available\n if (prices && fromToken.nativeToken) {\n const nativeFeeUsd = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFeeUsd = numberRemoveEndZero(nativeFeeUsd.toFixed(20));\n }\n result.fees.nativeFee = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .toFixed(fromToken.nativeToken.decimals, 0);\n result.totalEstimateSourceGas = nativeFee;\n\n if (lzTokenFee > 0n && prices && fromToken) {\n const lzTokenFeeUsd = Big(lzTokenFee.toString())\n .div(10 ** fromToken.decimals)\n .times(getPrice(prices, fromToken.symbol));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(lzTokenFeeUsd.toFixed(20));\n }\n result.fees.lzTokenFee = lzTokenFee.toString();\n\n let sendTx: any;\n if (!dry) {\n // send\n const sendSendHelper = new SendHelper();\n execTime.breakpoint();\n const sendRemainingAccounts = await sendSendHelper.getSendAccounts(\n connection as any,\n userPubkey,\n pdas.oftStore,\n _dstEid,\n peerAddress,\n );\n execTime.log(\"getSendAccounts\");\n\n const sendIx = new TransactionInstruction({\n programId,\n keys: [\n { pubkey: userPubkey, isSigner: true, isWritable: true },\n { pubkey: pdas.peer, isSigner: false, isWritable: false },\n { pubkey: pdas.oftStore, isSigner: false, isWritable: true },\n { pubkey: pdas.credits, isSigner: false, isWritable: true },\n { pubkey: tokenSource, isSigner: false, isWritable: true },\n { pubkey: tokenEscrow, isSigner: false, isWritable: true },\n { pubkey: tokenMint, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: pdas.eventAuthority, isSigner: false, isWritable: false },\n { pubkey: programId, isSigner: false, isWritable: false },\n ...sendRemainingAccounts,\n ],\n data: Buffer.from(\n encodeSend({\n dstEid: _dstEid,\n to,\n amountLd,\n minAmountLd,\n extraOptions,\n composeMsg,\n nativeFee,\n lzTokenFee: 0n,\n }),\n ),\n });\n\n execTime.breakpoint();\n const computeSendIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 });\n sendTx = await buildVersionedTransaction(\n connection as any,\n userPubkey,\n [computeSendIx, sendIx],\n undefined,\n undefined,\n lookupTable,\n );\n execTime.log(\"buildTx+simulateTransaction(send)\");\n }\n\n const ett = await this.estimateTransaction({\n dry,\n versionedTx: sendTx,\n fromToken,\n prices,\n });\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas += ett.estimateSourceGas;\n\n // 0.03% fee for Legacy Mesh transfers only (native USDT0 transfers are free)\n result.fees.legacyMeshFeeUsd = numberRemoveEndZero(Big(amountLdClean || 0).div(10 ** params.fromToken.decimals).times(USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(params.fromToken.decimals));\n result.outputAmount = numberRemoveEndZero(Big(Big(amountLdClean || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));\n\n // Check if the output amount exceeds the slippage tolerance\n // If it exceeds, return an error message\n this.csl(\"SolanaWallet quoteOFT\", \"red-600\", \"result.outputAmount: %o\", result.outputAmount);\n this.csl(\"SolanaWallet quoteOFT\", \"red-600\", \"slippageTolerance: %o\", slippageTolerance + \"%\");\n this.csl(\"SolanaWallet quoteOFT\", \"red-600\", \"Minimum received amount: %o\", Big(amountLdClean).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(6, 0));\n if (Big(result.outputAmount).lt(Big(amountLdClean).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))))) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n result.sendParam = {\n transaction: sendTx,\n versionedTx: sendTx,\n };\n\n // Calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees && excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd || 0).toFixed(20));\n\n execTime.logTotal(\"quoteOFT\");\n\n return result;\n } catch (error: any) {\n this.csl(\"Solana quoteOFT\", \"red-500\", \"quoteOFT failed: %o\", error);\n return { errMsg: error.message };\n }\n }\n\n async sendTransaction(params: any) {\n const { transaction } = params;\n\n const connection = this.getConnection();\n\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n if (!transaction) {\n throw new Error(\"Transaction is required\");\n }\n\n const hasAnySignature = (sig: Uint8Array | Buffer | null | undefined) =>\n !!sig && sig.length > 0 && Array.from(sig).some((byte) => byte !== 0);\n let latestBlockhash: Awaited<ReturnType<Connection[\"getLatestBlockhash\"]>> | null = null;\n let didRefreshBlockhash = false;\n\n // Only refresh blockhash for unsigned transactions.\n // For pre-signed CCTP txs, mutating recentBlockhash invalidates existing signatures.\n if (transaction instanceof Transaction) {\n const isUnsigned = transaction.signatures.every(({ signature }) => !hasAnySignature(signature as any));\n if (isUnsigned) {\n latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n transaction.recentBlockhash = latestBlockhash.blockhash;\n if (!transaction.feePayer) {\n transaction.feePayer = this.publicKey;\n }\n didRefreshBlockhash = true;\n }\n } else if (transaction instanceof VersionedTransaction) {\n const isUnsigned = transaction.signatures.every((signature) => !hasAnySignature(signature));\n if (isUnsigned) {\n latestBlockhash = await connection.getLatestBlockhash(\"confirmed\");\n // web3.js does not expose a convenient mutator here in typings, but runtime object is mutable.\n (transaction.message as any).recentBlockhash = latestBlockhash.blockhash;\n didRefreshBlockhash = true;\n }\n }\n\n // Sign the transaction\n const signedTransaction = await this.signTransaction(transaction);\n\n let signature: string;\n try {\n // Send the transaction\n signature = await connection.sendRawTransaction(\n signedTransaction.serialize(),\n {\n skipPreflight: false,\n maxRetries: 3\n }\n );\n } catch (error: any) {\n if (error instanceof SendTransactionError) {\n try {\n const logs = await error.getLogs(connection);\n this.csl(\"Solana sendTransaction\", \"red-500\", \"sendRawTransaction failed logs: %o\", logs);\n } catch (logsError: any) {\n this.csl(\"Solana sendTransaction\", \"red-500\", \"failed to fetch SendTransactionError logs: %o\", logsError?.message || logsError);\n }\n }\n throw error;\n }\n\n this.csl(\"Solana sendTransaction\", \"green-400\", \"Transaction sent with signature: %o\", signature);\n\n // // Confirm the transaction\n // // If adding confirmation, you need to catch errors because it may throw a TransactionExpiredBlockheightExceededError.\n // const confirmation = didRefreshBlockhash && latestBlockhash\n // ? await connection.confirmTransaction(\n // {\n // signature,\n // blockhash: latestBlockhash.blockhash,\n // lastValidBlockHeight: latestBlockhash.lastValidBlockHeight\n // },\n // \"confirmed\"\n // )\n // : await connection.confirmTransaction(signature, \"confirmed\");\n\n // if (confirmation.value.err) {\n // throw new Error(\n // `Transaction failed: ${JSON.stringify(confirmation.value.err)}`\n // );\n // }\n\n return signature;\n }\n\n /**\n * Unified quote method that routes to specific quote methods based on type\n * @param type Service type from Service\n * @param params Parameters for the quote\n */\n async quote(type: Service, params: any) {\n switch (type) {\n case Service.CCTP:\n return this.quoteCCTP(params);\n case Service.Usdt0:\n return this.quoteOFT(params);\n case Service.OneClick:\n return this.quoteOneClickProxy(params);\n case Service.FraxZero:\n return this.quoteFraxZero(params);\n default:\n throw new Error(`Unsupported quote type: ${type}`);\n }\n }\n\n /**\n * Unified send method that routes to specific send methods based on type\n * @param type Send type from SendType enum\n * @param params Parameters for the send transaction\n */\n async send(type: SendType, params: any) {\n switch (type) {\n case SendType.SEND:\n return await this.sendTransaction(params);\n case SendType.TRANSFER:\n return await this.transfer(params);\n default:\n throw new Error(`Unsupported send type: ${type}`);\n }\n }\n\n async quoteOneClickProxy(params: any) {\n const {\n dry,\n refundTo,\n proxyAddress,\n fromToken,\n amountWei,\n prices,\n depositAddress,\n } = params;\n\n const connection = this.getConnection();\n\n const result: any = { fees: {} };\n try {\n const execTime = new ExecTime({ type: \"Oneclick Solana\", logStyle: \"fuchsia-200\", isDebug: OpenAPI.DEBUG });\n\n const PROGRAM_ID = new PublicKey(proxyAddress);\n const STATE_PDA = new PublicKey(\"9E8az3Y9sdXvM2f3CCH6c9N3iFyNfDryQCZhqDxRYGUw\");\n const MINT = new PublicKey(fromToken.contractAddress);\n const AMOUNT = new BN(amountWei);\n const RECIPIENT = new PublicKey(depositAddress);\n const sender = this.publicKey!;\n const userPubkey = new PublicKey(refundTo || sender.toString());\n\n // Create AnchorProvider\n const provider = new AnchorProvider(connection, this.signer, {\n commitment: \"confirmed\"\n });\n\n // Create Program instance\n const program = new Program<any>(stableflowProxyIdl, PROGRAM_ID, provider);\n\n // Get user's token account (ATA)\n execTime.breakpoint();\n const userTokenAccount = getAssociatedTokenAddressSync(MINT, userPubkey);\n execTime.log(\"Get user's token account (ATA)\");\n\n // Get recipient's token account (ATA)\n execTime.breakpoint();\n const toTokenAccount = getAssociatedTokenAddressSync(MINT, RECIPIENT);\n execTime.log(\"Get recipient's token account (ATA)\");\n\n const transaction = new Transaction();\n\n execTime.breakpoint();\n try {\n await getAccount(connection, toTokenAccount);\n } catch (error) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n userPubkey,\n toTokenAccount,\n RECIPIENT,\n MINT\n )\n );\n }\n execTime.log(\"getAccount(toTokenAccount)\");\n\n execTime.breakpoint();\n const transferInstruction = await program.methods\n .transfer(AMOUNT)\n .accounts({\n stableFlowState: STATE_PDA,\n tokenMint: MINT,\n userTokenAccount: userTokenAccount,\n toTokenAccount: toTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n user: userPubkey,\n toUser: RECIPIENT,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n execTime.log(\"program.methods.transfer.instruction\");\n\n transaction.add(transferInstruction);\n\n execTime.breakpoint();\n const { blockhash } = await connection.getLatestBlockhash();\n execTime.log(\"getLatestBlockhash\");\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = userPubkey;\n\n execTime.breakpoint();\n const message = transaction.compileMessage();\n const versionedTx = new VersionedTransaction(message);\n const ett = await this.estimateTransaction({\n dry,\n versionedTx,\n fromToken,\n prices,\n });\n execTime.log(\"estimateTransaction\");\n\n result.sendParam = {\n transaction,\n versionedTx,\n };\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n execTime.logTotal(\"quoteOneClickPorxy\");\n\n return result;\n } catch (error: any) {\n this.csl(\"Solana quoteOneClickProxy\", \"red-500\", \"error: %o\", error);\n return result;\n }\n }\n\n async quoteCCTP(params: any) {\n const {\n dry,\n proxyAddress,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n fromToken,\n prices,\n excludeFees,\n destinationDomain,\n sourceDomain,\n } = params;\n\n const connection = this.getConnection();\n\n try {\n const result: any = {\n needApprove: false,\n approveSpender: proxyAddress,\n sendParam: void 0,\n quoteParam: {\n sourceDomain,\n destinationDomain,\n proxyAddress,\n ...params,\n },\n fees: {},\n totalFeesUsd: void 0,\n estimateSourceGas: void 0,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: void 0,\n estimateTime: Math.floor(Math.random() * 8) + 3,\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),\n };\n\n const execTime = new ExecTime({ type: \"CCTP Solana\", logStyle: \"fuchsia-300\", isDebug: OpenAPI.DEBUG });\n\n const PROGRAM_ID = new PublicKey(proxyAddress);\n const MINT = new PublicKey(fromToken.contractAddress);\n const sender = this.publicKey!;\n const userPubkey = new PublicKey(refundTo || sender.toString());\n\n const [userStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user\"), userPubkey.toBuffer()],\n PROGRAM_ID\n );\n\n let userNonce = 0;\n execTime.breakpoint();\n try {\n const accountInfo = await connection.getAccountInfo(userStatePda);\n if (accountInfo && accountInfo.data) {\n // UserState structure: user (32 bytes) + nonce (8 bytes) + bump (1 byte)\n // Skip user (32 bytes) and read nonce (8 bytes, little-endian)\n const nonceBuffer = accountInfo.data.slice(32, 40);\n userNonce = Number(new BN(nonceBuffer, \"le\").toString());\n }\n } catch (error) {\n this.csl(\"Solana quoteCCTP\", \"red-500\", \"UserState not found, using nonce 0\");\n }\n execTime.log(\"getAccountInfo(userStatePda)\");\n\n const userTokenAccount = getAssociatedTokenAddressSync(MINT, userPubkey);\n\n execTime.breakpoint();\n const signatureRes = await quoteSignature({\n address: userPubkey.toString(),\n amount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, 0)),\n destination_domain_id: destinationDomain,\n receipt_address: recipient,\n source_domain_id: sourceDomain,\n ata_address: userTokenAccount,\n });\n execTime.log(\"quoteSignature from our api\");\n\n const {\n bridge_fee,\n max_fee,\n mint_fee,\n receipt_amount,\n signature,\n } = signatureRes;\n\n result.fees.estimateMintGasUsd = numberRemoveEndZero(\n Big(mint_fee || 0)\n .div(10 ** fromToken.decimals)\n .toFixed(fromToken.decimals)\n );\n result.fees.bridgeFeeUsd = numberRemoveEndZero(\n Big(bridge_fee || 0)\n .div(10 ** fromToken.decimals)\n .toFixed(fromToken.decimals)\n );\n result.outputAmount = numberRemoveEndZero(\n Big(receipt_amount || 0)\n .div(10 ** fromToken.decimals)\n .toFixed(fromToken.decimals, 0)\n );\n\n const cctpFeeRate = Big(max_fee || 0).div(amountWei || 1);\n const slippageLimit = Big(slippageTolerance || 0).div(100);\n this.csl(\"SolanaWallet quoteCCTP\", \"red-600\", \"cctpFeeRate: %o, slippageLimit: %o\", cctpFeeRate.toFixed(6), slippageLimit.toFixed(6));\n if (max_fee && amountWei && cctpFeeRate.gt(slippageLimit)) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n const operatorTx = Transaction.from(Buffer.from(signature, 'base64'));\n\n if (!operatorTx.verifySignatures(false)) {\n this.csl(\"Solana quoteCCTP\", \"red-500\", \"Signature verification failed\");\n } else {\n this.csl(\"Solana quoteCCTP\", \"purple-400\", \"Signature verification success\");\n }\n\n execTime.breakpoint();\n const message = operatorTx.compileMessage();\n const versionedTx = new VersionedTransaction(message);\n const ett = await this.estimateTransaction({\n dry,\n versionedTx,\n fromToken,\n prices,\n });\n execTime.log(\"estimateTransaction\");\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.sendParam = {\n transaction: operatorTx,\n versionedTx,\n };\n\n // Calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees && excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd || 0).toFixed(20));\n\n execTime.logTotal(\"quoteCCTP\");\n\n return result;\n } catch (error: any) {\n this.csl(\"Solana quoteCCTP\", \"red-500\", \"quoteCCTP failed: %o\", error);\n return { errMsg: error.message };\n }\n }\n\n async createAssociatedTokenAddress(params: any) {\n const {\n tokenMint,\n } = params;\n\n const connection = this.getConnection();\n\n if (!this.publicKey) {\n throw new Error(\"Wallet not connected\");\n }\n\n const ownerPubkey = this.publicKey;\n const mint = new PublicKey(tokenMint);\n const associatedTokenAccount = getAssociatedTokenAddressSync(mint, ownerPubkey);\n\n this.csl(\"Solana createAssociatedTokenAddress\", \"purple-400\", \"associatedTokenAccount: %o\", associatedTokenAccount);\n\n const createTokenAccount = async () => {\n const transaction = new Transaction();\n\n transaction.add(\n createAssociatedTokenAccountInstruction(\n ownerPubkey,\n associatedTokenAccount,\n ownerPubkey,\n mint\n )\n );\n\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = ownerPubkey;\n\n const signedTransaction = await this.signTransaction(transaction);\n\n const signature = await connection.sendRawTransaction(\n signedTransaction.serialize()\n );\n\n await this.checkTransactionStatus(signature);\n\n return associatedTokenAccount;\n };\n\n try {\n const accountRes = await getAccount(connection, associatedTokenAccount);\n this.csl(\"Solana createAssociatedTokenAddress\", \"purple-400\", \"associatedTokenAccount account: %o\", accountRes);\n return associatedTokenAccount;\n } catch (error) {\n this.csl(\"Solana createAssociatedTokenAddress\", \"red-500\", \"get ata failed: %o\", error);\n }\n\n return createTokenAccount();\n }\n\n async quoteFraxZero(params: any) {\n const {\n dry,\n recipient,\n amountWei,\n slippageTolerance,\n fromToken,\n toToken,\n prices,\n excludeFees,\n refundTo,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const connection = this.getConnection();\n\n const execTime = new ExecTime({ type: \"FraxZero Solana\", logStyle: \"fuchsia-400\", isDebug: OpenAPI.DEBUG });\n\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"params: %o\", params);\n\n const amountLdClean = removeOftDust(amountWei || 0, fromToken.decimals);\n const result: any = {\n needApprove: false,\n approveSpender: void 0,\n sendParam: void 0,\n quoteParam: {\n ...params,\n },\n fees: {},\n totalFeesUsd: 0,\n estimateSourceGas: 0n,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: 0,\n estimateTime: 0,\n outputAmount: numberRemoveEndZero(Big(amountLdClean || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0)),\n };\n\n if (BigInt(amountLdClean) === 0n) {\n result.errMsg = \"Amount below minimum cross-chain unit\";\n return result;\n }\n\n const sender = this.publicKey!;\n const userPubkey = fromWeb3JsPublicKey(new PublicKey(refundTo || sender.toString()));\n const {\n eid: srcEid,\n remoteHop,\n lockbox,\n } = originLayerzero;\n const {\n eid: dstEid,\n } = destinationLayerzero;\n\n const availableRpcUrl = await getAvailableSolanaRpcUrl({ isQuerySignature: true });\n\n const ALT_ADDRESS = new PublicKey(\"AokBxha6VMLLgf97B5VYHEtqztamWmYERBmmFvjuTzJB\");\n const umi = createUmi(availableRpcUrl, \"confirmed\").use(mplToolbox());\n const oftProgramId = publicKey(originLayerzero.programId);\n const oftMint = publicKey(fromToken.contractAddress);\n const oftEscrow = publicKey(originLayerzero.escrow);\n const tokenProgramId = publicKey(TOKEN_PROGRAM_ID);\n const tokenAccount = findAssociatedTokenPda(umi, {\n mint: oftMint,\n owner: userPubkey,\n tokenProgramId,\n });\n\n execTime.breakpoint();\n await safeFetchToken(umi, tokenAccount[0]);\n execTime.log(\"safeFetchToken\");\n\n const recipientAddressBytes32 = addressToBytes32(toToken.chainType, recipient);\n const amountLd = BigInt(amountLdClean);\n const minAmountLd = (amountLd * 99n) / 100n;\n\n execTime.breakpoint();\n const { value: lookupTableAccount } = await connection.getAddressLookupTable(ALT_ADDRESS);\n execTime.log(\"getAddressLookupTable\", \"ALT_ADDRESS: %o, lookupTableAccount: %o\", ALT_ADDRESS, lookupTableAccount);\n if (!lookupTableAccount) {\n throw new Error(\"ALT not found\");\n }\n\n execTime.breakpoint();\n let { nativeFee, lzTokenFee } = await oft.quote(\n umi.rpc,\n {\n payer: userPubkey,\n tokenMint: oftMint,\n tokenEscrow: oftEscrow,\n },\n {\n payInLzToken: false,\n to: getBytes(recipientAddressBytes32),\n dstEid: dstEid,\n amountLd,\n minAmountLd,\n options: Buffer.from(\"\"),\n composeMsg: undefined,\n },\n {\n oft: oftProgramId,\n },\n );\n execTime.log(\"oft.quote\", \"nativeFee: %s, lzTokenFee: %s\", nativeFee, lzTokenFee);\n nativeFee = nativeFee * NATIVE_MSG_FEE_BUFFER / 100n;\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"nativeFee after buffer: %o\", nativeFee);\n\n // oft.send() internally simulates the tx via umi.rpc without replaceRecentBlockhash,\n // so it can transiently fail with BlockhashNotFound when RPC nodes are out of sync.\n execTime.breakpoint();\n let ix: Awaited<ReturnType<typeof oft.send>>;\n let oftSendRetries = 0;\n const OFT_SEND_MAX_RETRIES = 3;\n while (true) {\n try {\n ix = await oft.send(\n umi.rpc,\n {\n payer: {\n ...this.signer,\n publicKey: userPubkey,\n },\n tokenMint: oftMint,\n tokenEscrow: oftEscrow,\n tokenSource: tokenAccount[0],\n },\n {\n to: getBytes(recipientAddressBytes32),\n dstEid,\n amountLd,\n minAmountLd,\n options: Buffer.from(''),\n composeMsg: undefined,\n nativeFee,\n lzTokenFee: 0n,\n },\n {\n oft: oftProgramId,\n token: tokenProgramId,\n },\n );\n break;\n } catch (err: any) {\n const isBlockhashNotFound =\n err?.message?.includes('BlockhashNotFound') ||\n JSON.stringify(err)?.includes('BlockhashNotFound');\n if (isBlockhashNotFound && oftSendRetries < OFT_SEND_MAX_RETRIES) {\n oftSendRetries++;\n this.csl(\"Solana quoteFraxZero\", \"yellow-500\", \"oft.send BlockhashNotFound, retrying (%o/%o)...\", oftSendRetries, OFT_SEND_MAX_RETRIES);\n await new Promise((r) => setTimeout(r, 500 * oftSendRetries));\n continue;\n }\n throw err;\n }\n }\n\n execTime.log(\"oft.senbd\", \"oft send retry times: %s\", oftSendRetries);\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"ix: %o\", ix);\n\n const web3Instruction = toWeb3JsInstruction(ix.instruction);\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 600000, // Increase to 400k units (default is 200k)\n });\n execTime.breakpoint();\n const { blockhash } = await connection.getLatestBlockhash();\n execTime.log(\"getLatestBlockhash\");\n const messageV0 = new TransactionMessage({\n payerKey: new PublicKey(userPubkey),\n recentBlockhash: blockhash,\n instructions: [computeBudgetIx, web3Instruction],\n }).compileToV0Message([lookupTableAccount]);\n const transaction = new VersionedTransaction(messageV0);\n\n this.csl(\"Solana quoteFraxZero\", \"purple-500\", \"transaction: %o\", transaction);\n\n result.sendParam = {\n transaction,\n versionedTx: transaction,\n };\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n versionedTx: transaction,\n fromToken,\n prices,\n });\n execTime.log(\"estimateTransaction\");\n\n const nativeFeeUsd = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFeeUsd = numberRemoveEndZero(nativeFeeUsd.toFixed(20));\n\n const lzTokenFeeUsd = Big(lzTokenFee ? lzTokenFee.toString() : 0)\n .div(10 ** fromToken.decimals)\n .times(getPrice(prices, fromToken.symbol));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(lzTokenFeeUsd.toFixed(20));\n\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas + nativeFee;\n\n result.fees.nativeFee = Big(nativeFee.toString())\n .div(10 ** fromToken.nativeToken.decimals)\n .toFixed(fromToken.nativeToken.decimals, 0);\n result.fees.lzTokenFee = lzTokenFee.toString();\n\n for (const feeKey in result.fees) {\n if (excludeFees && excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd || 0).toFixed(20));\n\n execTime.logTotal(\"quoteFraxZero\");\n\n return result;\n }\n}\n\nexport { SolanaWallet };\n"]}
|