UNPKG

@mojito-inc/secondary-market

Version:

Mojito secondary market is the platform to purchase NFT.

2 lines (1 loc) 7.09 kB
import{Transaction as i,ComputeBudgetProgram as e,LAMPORTS_PER_SOL as n,Connection as o,clusterApiUrl as l,PublicKey as r,TransactionInstruction as t}from"@solana/web3.js";import{Buffer as a}from"buffer";import s from"bn.js";import u from"bs58";import{getSolanaEnvByChainId as c}from"./getEtherScanURL.utils.js";import{ErrorsType as d}from"../constant/index.js";import{customErrorMessage as v}from"./customErrorMessage.utils.js";import{getSolanaBalance as m}from"./getSolanaBalance.utils.js";import{fetchSolanaPriorityFee as g}from"./fetchSolanaPriorityFee.utils.js";const b=async(b,p,f,h,y,w,k,S,E,L=.00228288)=>{var T,A,W,D,I,P,C,R,U,j,B,F,H,x,_;try{if(!f)return{success:!1,error:"Your wallet session has been closed. Please reconnect your wallet to continue."};const p=c(w),x=await m(b,p,S),{err:_,instruction:M,connectedPublicKey:O,connection:V}=await(async(i,e,n,d)=>{var m,g,b,p,f,h,y,w,k,S,E,L,T,A,W,D,I,P,C,R,U,j;try{const v=c(e),B=new o(d||l(v),{confirmTransactionInitialTimeout:3e5,commitment:"confirmed"}),F=new r(null!==(m=null==n?void 0:n.bubblegumProgram)&&void 0!==m?m:""),H=new r(null!==(g=null==n?void 0:n.compressionProgram)&&void 0!==g?g:""),x=new r(null!==(b=null==n?void 0:n.newLeafDelegate)&&void 0!==b?b:""),_=new r(null!==(p=null==n?void 0:n.mintAccount)&&void 0!==p?p:""),M=new r(i),O=new r(null!==(f=null==n?void 0:n.newLeafDelegate)&&void 0!==f?f:""),V=[a.from("marketplace")],[J,N]=r.findProgramAddressSync(V,O),z=new s(null===(h=null==n?void 0:n.bubblegumListArg)||void 0===h?void 0:h.nonce).toArray("le",8),K=new r(null!==(y=null==n?void 0:n.listingReceipt)&&void 0!==y?y:""),q=new r(null!==(w=null==n?void 0:n.treeAuthority)&&void 0!==w?w:""),Y=new r(null!==(k=null==n?void 0:n.logWrapper)&&void 0!==k?k:""),G=new r(null!==(S=null==n?void 0:n.merkleTree)&&void 0!==S?S:""),Q=u.decode(null!==(L=null===(E=null==n?void 0:n.bubblegumListArg)||void 0===E?void 0:E.dataHash)&&void 0!==L?L:""),X=u.decode(null!==(A=null===(T=null==n?void 0:n.bubblegumListArg)||void 0===T?void 0:T.creatorHash)&&void 0!==A?A:""),Z=u.decode(null!==(D=null===(W=null==n?void 0:n.bubblegumListArg)||void 0===W?void 0:W.root)&&void 0!==D?D:""),$=Array.from(Array(10).keys()).map((i=>{var e,o,l;return{pubkey:new r(null!==(l=null===(o=null===(e=null==n?void 0:n.bubblegumListArg)||void 0===e?void 0:e.proof)||void 0===o?void 0:o[i])&&void 0!==l?l:""),isSigner:!1,isWritable:!1}}));if(32!==Q.length||32!==X.length)throw new Error("Hash length is not 32 bytes");const ii=new r(null!==(I=null==n?void 0:n.systemProgram)&&void 0!==I?I:""),ei=new r(null!==(P=null==n?void 0:n.tokenProgram)&&void 0!==P?P:""),ni=new r(null!==(C=null==n?void 0:n.rent)&&void 0!==C?C:"");return{instruction:new t({programId:x,keys:[{pubkey:M,isSigner:!0,isWritable:!0},{pubkey:_,isSigner:!1,isWritable:!0},{pubkey:K,isSigner:!1,isWritable:!0},{pubkey:ii,isSigner:!1,isWritable:!0},{pubkey:ei,isSigner:!1,isWritable:!0},{pubkey:ni,isSigner:!1,isWritable:!0},{pubkey:F,isSigner:!1,isWritable:!0},{pubkey:H,isSigner:!1,isWritable:!0},{pubkey:q,isSigner:!1,isWritable:!0},{pubkey:M,isSigner:!1,isWritable:!0},{pubkey:J,isSigner:!1,isWritable:!0},{pubkey:M,isSigner:!1,isWritable:!0},{pubkey:Y,isSigner:!1,isWritable:!0},{pubkey:G,isSigner:!1,isWritable:!0},...$],data:a.concat([a.from(null!==(R=null==n?void 0:n.listDiscriminator)&&void 0!==R?R:[]),a.from(Uint8Array.of(...Z,...Q,...X,...z,...new s(null!==(j=null===(U=null==n?void 0:n.bubblegumListArg)||void 0===U?void 0:U.index)&&void 0!==j?j:0).toArray("le",8)))])}),connectedPublicKey:M,connection:B,err:null}}catch(i){return{err:v(i)}}})(b,w,k,S);if(!_&&M){if("phantom"===h.toLowerCase()||"backpack"===h.toLowerCase()){const o=new i({feePayer:O}).add(M),l=await V.getLatestBlockhash("confirmed");o.recentBlockhash=l.blockhash,o.lastValidBlockHeight=l.lastValidBlockHeight,o.add(e.setComputeUnitLimit({units:14e5}));const r=await g(S,o.serialize({verifySignatures:!1})),t=e.setComputeUnitPrice({microLamports:r});o.add(t);const a=await V.getFeeForMessage(o.compileMessage(),"confirmed"),s=(null!==(T=null==a?void 0:a.value)&&void 0!==T?T:0)+L*n,u=x.native*n;if(u<=0||u<s)return{success:!1,error:"Insufficient SOL for initiating the transaction."};try{y("Initiating remove listing transaction.");const i=await(null===(W=null===(A=null==f?void 0:f.adapter)||void 0===A?void 0:A.sendTransaction)||void 0===W?void 0:W.call(A,o,V,{skipPreflight:!0,preflightCommitment:"confirmed"}));await V.confirmTransaction(Object.assign({signature:i},l),"confirmed");const e=await V.getSignatureStatus(i);return null===(null===(D=null==e?void 0:e.value)||void 0===D?void 0:D.err)?{success:!0,response:{hash:i}}:{success:!1,error:"Transaction Failed"}}catch(i){return(null===(P=null===(I=null==i?void 0:i.message)||void 0===I?void 0:I.includes)||void 0===P?void 0:P.call(I,d.USER_REJECTED))||(null===(C=null==i?void 0:i.includes)||void 0===C?void 0:C.call(i,d.USER_REJECTED))||(null===(R=null==i?void 0:i.includes)||void 0===R?void 0:R.call(i,d.USER_DENIED))||(null===(j=null===(U=null==i?void 0:i.message)||void 0===U?void 0:U.includes)||void 0===j?void 0:j.call(U,d.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==E||E({key:"Additional Data",value:{address:b,balance:x,providerType:h,chainId:w,path:"Inside an remove listing solana contract function - 215"}},{exception:i}),{success:!1,error:v(i)})}}if("magic"===h.toLowerCase()){const o=new i({feePayer:O}).add(M),l=await V.getLatestBlockhash("confirmed");o.recentBlockhash=l.blockhash,o.lastValidBlockHeight=l.lastValidBlockHeight,o.add(e.setComputeUnitLimit({units:14e5}));const r=await g(S,o.serialize({verifySignatures:!1})),t=e.setComputeUnitPrice({microLamports:r});o.add(t);const s=await V.getFeeForMessage(o.compileMessage(),"confirmed"),u=(null!==(B=null==s?void 0:s.value)&&void 0!==B?B:0)+L*n,c=x.native*n;if(c<=0||c<u)return{success:!1,error:"Insufficient SOL for initiating the transaction."};y("Initiating remove listing transaction.");const d=await(null===(F=null==f?void 0:f.solana)||void 0===F?void 0:F.signTransaction(o,{requireAllSignatures:!1,verifySignatures:!0})),v=await V.sendRawTransaction(a.from(d.rawTransaction,"base64"),{skipPreflight:!0,preflightCommitment:"confirmed"});await V.confirmTransaction(Object.assign({signature:v},l),"confirmed");const m=await V.getSignatureStatus(v);return null===(null===(H=null==m?void 0:m.value)||void 0===H?void 0:H.err)?{success:!0,response:{hash:v}}:{success:!1,error:"Transaction Failed"}}}return _?(null==E||E({key:"Additional Data",value:{address:b,balance:x,providerType:h,chainId:w,path:"Inside an remove listing solana contract function - 292"}},{exception:_}),{success:!1,error:v(_)}):null}catch(i){return(null===(x=i.message)||void 0===x?void 0:x.includes(d.USER_REJECTED))||(null===(_=i.message)||void 0===_?void 0:_.includes(d.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==E||E({key:"Additional Data",value:{address:b,providerType:h,chainId:w,path:"Inside an remove listing solana contract function - 319"}},{exception:i}),{success:!1,error:v(i)})}};export{b as removeListingSolanaItem};