require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/serialize.utils.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../data-structures/AccountActions/AccountActions.cjs`),r=require(`../../types/fee.types.cjs`),i=require(`../web3/getSolanaPriorityFee.cjs`),a=require(`../utils/process.utils.cjs`),o=require(`../../error-handling/retrySolanaError.cjs`);let s=require(`@solana/web3.js`);require(`@solana/spl-token`);var c=5e3,l=6e4,u=async(e,t,n=`confirmed`)=>await a.pollForValue(()=>e.getTransaction(t,{commitment:n,maxSupportedTransactionVersion:0}),{timeoutMs:l,intervalMs:c})??null,d=async(e,n,r,i)=>{try{let{blockhash:a}=await e.getLatestBlockhash(),o=new s.VersionedTransaction(new s.TransactionMessage({payerKey:n,recentBlockhash:a,instructions:[s.ComputeBudgetProgram.setComputeUnitLimit({units:t.MAX_COMPUTE_UNIT_LIMIT}),...r]}).compileToV0Message(i)),{unitsConsumed:c}=(await e.simulateTransaction(o,{sigVerify:!1,replaceRecentBlockhash:!0})).value;if(!c)return t.MAX_COMPUTE_UNIT_LIMIT;let l=Math.ceil(c*(1+t.COMPUTE_UNIT_PADDING_PERCENTAGE));return Math.max(t.MIN_COMPUTE_UNIT_LIMIT,Math.min(l,t.MAX_COMPUTE_UNIT_LIMIT))}catch{return t.MAX_COMPUTE_UNIT_LIMIT}},f=(e,t,n,r)=>{let i=new Set;return t&&i.add(t.toBase58()),n?.forEach(e=>i.add(e.toBase58())),e.forEach(e=>{i.add(e.programId.toBase58()),e.keys.forEach(e=>{i.add(e.pubkey.toBase58())})}),r&&r.forEach(e=>{i.add(e.key.toBase58()),e.state.addresses.forEach(e=>{i.add(e.toBase58())})}),[...i].map(e=>new s.PublicKey(e))},p=t=>{if(!t)throw Error(`Failed to fetch Solana transaction details for signature`);if(t.meta?.err){let n=e.safeJsonStringify(t.meta.err);throw Error(`Solana transaction failed on-chain: ${n}`)}},m=async(e,t,n,r,a)=>{let o=n.filter(e=>!e.programId.equals(s.ComputeBudgetProgram.programId)),c=await d(e,t,o,r),l=s.ComputeBudgetProgram.setComputeUnitLimit({units:c}),u=e.rpcEndpoint.includes(`helius`)?await i.getSolanaPriorityFee(f(o,t,[s.ComputeBudgetProgram.programId],r),a):0;return[l,s.ComputeBudgetProgram.setComputeUnitPrice({microLamports:u}),...o]},h=async({connection:e,chainId:t,subAccount:i,payerPublicKey:a,instructions:c,lookupTableAccounts:l})=>{let d=n.AccountActions.getPrivateKeyFromSubAccount(t,i);if(!d)throw Error(`Private key is not available`);for(let t=0;t<10;t+=1){let i=t===9;try{let t=await m(e,a,c,l,i?r.SolanaPriorityFeeMode.HIGH:r.SolanaPriorityFeeMode.RECOMMENDED),{blockhash:o,lastValidBlockHeight:f}=await e.getLatestBlockhash(),h=new s.VersionedTransaction(new s.TransactionMessage({payerKey:a,recentBlockhash:o,instructions:t}).compileToV0Message(l)),g=await n.AccountActions.sendAndSignSolanaTransactionFromPrivateKey(e,d,h,!0);return await e.confirmTransaction({signature:g,blockhash:o,lastValidBlockHeight:f},`confirmed`),p(await u(e,g)),g}catch(e){if(o.shouldRetryForSolanaError(e)&&!i)continue;throw e}}throw Error(`Failed to send proxy v0 transaction due to expired blockheight after all retries`)};exports.estimateComputeUnitLimit=d,exports.fetchSolanaTransaction=u,exports.getAccountsFromInstructions=f,exports.sendProxyV0Transaction=h;