UNPKG

@mojito-inc/secondary-market

Version:

Mojito secondary market is the platform to purchase NFT.

2 lines (1 loc) 8.15 kB
import{PublicKey as i,Connection as e,clusterApiUrl as n,TransactionInstruction as l,LAMPORTS_PER_SOL as o,Transaction as t,ComputeBudgetProgram as r}from"@solana/web3.js";import a from"bn.js";import s from"bs58";import{getAssociatedTokenAddress as u}from"@solana/spl-token";import{ErrorsType as d}from"../constant/index.js";import{getSolanaEnvByChainId as c}from"./getEtherScanURL.utils.js";import{customErrorMessage as v}from"./customErrorMessage.utils.js";import{getSolanaBalance as g}from"./getSolanaBalance.utils.js";import{getVinTokenAddress as m}from"./getVinTokenAddress.utils.js";import{getOrInitializeAccount as b}from"./getOrInitializeAccount.utils.js";import{fetchSolanaPriorityFee as f}from"./fetchSolanaPriorityFee.utils.js";const p=async(p,h,w,y,k,S,E,A,L,T=.00228288)=>{var I,D,W,B,R,U,C,P,j,_,x,F,H,N,O,V,M,J,z,q,Y,G,K,Q,X,Z,$,ii,ei,ni,li,oi,ti,ri,ai,si,ui,di,ci,vi,gi,mi,bi,fi;try{if(!w)return{success:!1,error:"Your wallet session has been closed. Please reconnect your wallet to continue."};if(p){const h=new i(p),mi=c(S),bi=new e(A||n(mi),{confirmTransactionInitialTimeout:3e5,commitment:"confirmed"}),fi=await g(p,mi,A),pi=m(mi,A),hi=new i(pi),wi=await u(hi,h);k("Checking token approval.");const yi=await b(bi,wi,h,hi,h,k,w,y,fi.native,A);if(!yi.isAvailable)throw new Error("Insufficient SOL for initiating the transaction.");const ki=new i(null!==(I=null==E?void 0:E.listingReceipt)&&void 0!==I?I:""),Si=new i(null!==(D=null==E?void 0:E.bubblegumProgram)&&void 0!==D?D:""),Ei=new i(null!==(W=null==E?void 0:E.compressionProgram)&&void 0!==W?W:""),Ai=new i(null!==(B=null==E?void 0:E.newLeafDelegate)&&void 0!==B?B:""),Li=new i(null!==(R=null==E?void 0:E.mintAccount)&&void 0!==R?R:""),Ti=new i(null!==(U=null==E?void 0:E.newLeafDelegate)&&void 0!==U?U:""),Ii=[Buffer.from("marketplace")],[Di,Wi]=i.findProgramAddressSync(Ii,Ti),Bi=new a(null===(C=null==E?void 0:E.bubblegumListArg)||void 0===C?void 0:C.nonce).toArray("le",8),Ri=s.decode(null!==(j=null===(P=null==E?void 0:E.bubblegumListArg)||void 0===P?void 0:P.root)&&void 0!==j?j:""),Ui=s.decode(null!==(x=null===(_=null==E?void 0:E.bubblegumListArg)||void 0===_?void 0:_.dataHash)&&void 0!==x?x:""),Ci=s.decode(null!==(H=null===(F=null==E?void 0:E.bubblegumListArg)||void 0===F?void 0:F.creatorHash)&&void 0!==H?H:"");if(32!==Ui.length||32!==Ci.length)throw new Error("Hash length is not 32 bytes");const Pi=new i(null!==(N=null==E?void 0:E.systemProgram)&&void 0!==N?N:""),ji=new i(null!==(O=null==E?void 0:E.tokenProgram)&&void 0!==O?O:""),_i=new i(null!==(V=null==E?void 0:E.rent)&&void 0!==V?V:""),xi=Array.from(Array(10).keys()).map((e=>{var n,l,o;return{pubkey:new i(null!==(o=null===(l=null===(n=null==E?void 0:E.bubblegumListArg)||void 0===n?void 0:n.proof)||void 0===l?void 0:l[e])&&void 0!==o?o:""),isSigner:!1,isWritable:!1}})),Fi=new l({programId:Ai,keys:[{pubkey:h,isSigner:!0,isWritable:!0},{pubkey:Li,isSigner:!1,isWritable:!0},{pubkey:ki,isSigner:!1,isWritable:!0},{pubkey:Pi,isSigner:!1,isWritable:!0},{pubkey:ji,isSigner:!1,isWritable:!0},{pubkey:_i,isSigner:!1,isWritable:!0},{pubkey:Si,isSigner:!1,isWritable:!0},{pubkey:Ei,isSigner:!1,isWritable:!0},{pubkey:new i(null!==(M=null==E?void 0:E.treeAuthority)&&void 0!==M?M:""),isSigner:!1,isWritable:!0},{pubkey:h,isSigner:!1,isWritable:!0},{pubkey:h,isSigner:!1,isWritable:!0},{pubkey:Di,isSigner:!1,isWritable:!0},{pubkey:new i(null!==(J=null==E?void 0:E.logWrapper)&&void 0!==J?J:""),isSigner:!1,isWritable:!0},{pubkey:new i(null!==(z=null==E?void 0:E.merkleTree)&&void 0!==z?z:""),isSigner:!1,isWritable:!0},...xi],data:Buffer.concat([Buffer.from(null!==(q=null==E?void 0:E.listDiscriminator)&&void 0!==q?q:[]),Buffer.from(Uint8Array.of(...new a(null!==(G=null===(Y=null==E?void 0:E.bubblegumListArg)||void 0===Y?void 0:Y.price)&&void 0!==G?G:0).toArray("le",8),...Ri,...Ui,...Ci,...Bi,...new a(null!==(Q=null===(K=null==E?void 0:E.bubblegumListArg)||void 0===K?void 0:K.index)&&void 0!==Q?Q:0).toArray("le",4),+(null!==(Z=null===(X=null==E?void 0:E.bubblegumListArg)||void 0===X?void 0:X.isUpdate)&&void 0!==Z&&Z)))])});try{const i={nonNative:fi.nonNative,native:fi.native-yi.usedBalance/o};if("backpack"===(null==y?void 0:y.toLowerCase())||"phantom"===(null==y?void 0:y.toLowerCase())){const e=new t({feePayer:h}).add(Fi),n=await bi.getLatestBlockhash("confirmed");e.recentBlockhash=n.blockhash,e.lastValidBlockHeight=n.lastValidBlockHeight,e.add(r.setComputeUnitLimit({units:14e5}));const l=await f(A,e.serialize({verifySignatures:!1})),a=r.setComputeUnitPrice({microLamports:l});e.add(a);const s=await bi.getFeeForMessage(e.compileMessage(),"confirmed"),u=i.native*o,c=(null!==($=null==s?void 0:s.value)&&void 0!==$?$:0)+T*o;if(u<=0||u<c)return{success:!1,error:"Insufficient SOL for initiating the transaction."};k("Initiating edit listing transaction.");try{const i=await(null===(ei=null===(ii=null==w?void 0:w.adapter)||void 0===ii?void 0:ii.sendTransaction)||void 0===ei?void 0:ei.call(ii,e,bi,{skipPreflight:!0,preflightCommitment:"confirmed"}));await bi.confirmTransaction(Object.assign({signature:i},n),"confirmed");const l=await bi.getSignatureStatus(i);return null===(null===(ni=null==l?void 0:l.value)||void 0===ni?void 0:ni.err)?{success:!0,response:{hash:i}}:{success:!1,error:"Transaction Failed"}}catch(i){return(null===(oi=null===(li=null==i?void 0:i.message)||void 0===li?void 0:li.includes)||void 0===oi?void 0:oi.call(li,d.USER_REJECTED))||(null===(ti=null==i?void 0:i.includes)||void 0===ti?void 0:ti.call(i,d.USER_REJECTED))||(null===(ri=null==i?void 0:i.includes)||void 0===ri?void 0:ri.call(i,d.USER_DENIED))||(null===(si=null===(ai=null==i?void 0:i.message)||void 0===ai?void 0:ai.includes)||void 0===si?void 0:si.call(ai,d.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==L||L({key:"Additional Data",value:{address:p,balance:fi,providerType:y,chainId:S,path:"Inside an edit listing solana contract function - 194"}},{exception:i}),{success:!1,error:v(i)})}}if("magic"===(null==y?void 0:y.toLowerCase())){const e=await bi.getLatestBlockhash("confirmed"),n=new t({feePayer:h}).add(Fi);n.recentBlockhash=e.blockhash,n.lastValidBlockHeight=e.lastValidBlockHeight,n.add(r.setComputeUnitLimit({units:14e5}));const l=await f(A,n.serialize({verifySignatures:!1})),a=r.setComputeUnitPrice({microLamports:l});n.add(a);const s=await bi.getFeeForMessage(n.compileMessage(),"confirmed"),u=i.native*o,d=(null!==(ui=null==s?void 0:s.value)&&void 0!==ui?ui:0)+T*o;if(u<=0||u<d)return{success:!1,error:"Insufficient SOL for initiating the transaction."};k("Initiating edit listing transaction.");const c=await(null===(di=null==w?void 0:w.solana)||void 0===di?void 0:di.signTransaction(n,{requireAllSignatures:!1,verifySignatures:!0})),v=await bi.sendRawTransaction(Buffer.from(c.rawTransaction,"base64"),{skipPreflight:!0,preflightCommitment:"confirmed"});await bi.confirmTransaction(Object.assign({signature:v},e),"confirmed");const g=await bi.getSignatureStatus(v);return null===(null===(ci=null==g?void 0:g.value)||void 0===ci?void 0:ci.err)?{success:!0,response:{hash:v}}:{success:!1,error:"Transaction Failed"}}return null}catch(i){return(null===(vi=i.message)||void 0===vi?void 0:vi.includes(d.USER_REJECTED))||(null===(gi=i.message)||void 0===gi?void 0:gi.includes(d.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==L||L({key:"Additional Data",value:{address:p,balance:fi,providerType:y,chainId:S,path:"Inside an edit listing solana contract function - 276"}},{exception:i}),{success:!1,error:v(i)})}}return null}catch(i){return(null===(mi=i.message)||void 0===mi?void 0:mi.includes(d.USER_REJECTED))||(null===(bi=i.message)||void 0===bi?void 0:bi.includes(d.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null===(fi=null==i?void 0:i.message)||void 0===fi?void 0:fi.includes("Assertion failed"))?{success:!1,error:"A maximum of 9,000,000 VIN can be processed per transaction."}:(null==L||L({key:"Additional Data",value:{address:p,providerType:y,chainId:S,path:"Inside an edit listing solana contract function - 310"}},{exception:i}),{success:!1,error:v(i)})}};export{p as editListingSolana};