@mojito-inc/secondary-market
Version:
Mojito secondary market is the platform to purchase NFT.
2 lines (1 loc) • 8.48 kB
JavaScript
"use strict";var e=require("@solana/web3.js"),i=require("bn.js"),n=require("bs58"),r=require("@solana/spl-token"),l=require("../constant/index.js"),o=require("./getEtherScanURL.utils.js"),t=require("./customErrorMessage.utils.js"),a=require("./getSolanaBalance.utils.js"),s=require("./getVinTokenAddress.utils.js"),u=require("./getOrInitializeAccount.utils.js"),d=require("./fetchSolanaPriorityFee.utils.js");exports.editListingSolana=async(c,v,g,b,m,y,p,f,h,S=.00228288)=>{var w,E,P,k,T,A,L,R,I,B,C,D,_,O,K,U,W,M,q,j,F,x,H,N,V,z,J,Y,G,Q,X,Z,$,ee,ie,ne,re,le,oe,te,ae,se,ue,de;try{if(!g)return{success:!1,error:"Your wallet session has been closed. Please reconnect your wallet to continue."};if(c){const v=new e.PublicKey(c),se=o.getSolanaEnvByChainId(y),ue=new e.Connection(f||e.clusterApiUrl(se),{confirmTransactionInitialTimeout:3e5,commitment:"confirmed"}),de=await a.getSolanaBalance(c,se,f),ce=s.getVinTokenAddress(se,f),ve=new e.PublicKey(ce),ge=await r.getAssociatedTokenAddress(ve,v);m("Checking token approval.");const be=await u.getOrInitializeAccount(ue,ge,v,ve,v,m,g,b,de.native,f);if(!be.isAvailable)throw new Error("Insufficient SOL for initiating the transaction.");const me=new e.PublicKey(null!==(w=null==p?void 0:p.listingReceipt)&&void 0!==w?w:""),ye=new e.PublicKey(null!==(E=null==p?void 0:p.bubblegumProgram)&&void 0!==E?E:""),pe=new e.PublicKey(null!==(P=null==p?void 0:p.compressionProgram)&&void 0!==P?P:""),fe=new e.PublicKey(null!==(k=null==p?void 0:p.newLeafDelegate)&&void 0!==k?k:""),he=new e.PublicKey(null!==(T=null==p?void 0:p.mintAccount)&&void 0!==T?T:""),Se=new e.PublicKey(null!==(A=null==p?void 0:p.newLeafDelegate)&&void 0!==A?A:""),we=[Buffer.from("marketplace")],[Ee,Pe]=e.PublicKey.findProgramAddressSync(we,Se),ke=new i(null===(L=null==p?void 0:p.bubblegumListArg)||void 0===L?void 0:L.nonce).toArray("le",8),Te=n.decode(null!==(I=null===(R=null==p?void 0:p.bubblegumListArg)||void 0===R?void 0:R.root)&&void 0!==I?I:""),Ae=n.decode(null!==(C=null===(B=null==p?void 0:p.bubblegumListArg)||void 0===B?void 0:B.dataHash)&&void 0!==C?C:""),Le=n.decode(null!==(_=null===(D=null==p?void 0:p.bubblegumListArg)||void 0===D?void 0:D.creatorHash)&&void 0!==_?_:"");if(32!==Ae.length||32!==Le.length)throw new Error("Hash length is not 32 bytes");const Re=new e.PublicKey(null!==(O=null==p?void 0:p.systemProgram)&&void 0!==O?O:""),Ie=new e.PublicKey(null!==(K=null==p?void 0:p.tokenProgram)&&void 0!==K?K:""),Be=new e.PublicKey(null!==(U=null==p?void 0:p.rent)&&void 0!==U?U:""),Ce=Array.from(Array(10).keys()).map((i=>{var n,r,l;return{pubkey:new e.PublicKey(null!==(l=null===(r=null===(n=null==p?void 0:p.bubblegumListArg)||void 0===n?void 0:n.proof)||void 0===r?void 0:r[i])&&void 0!==l?l:""),isSigner:!1,isWritable:!1}})),De=new e.TransactionInstruction({programId:fe,keys:[{pubkey:v,isSigner:!0,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!0},{pubkey:me,isSigner:!1,isWritable:!0},{pubkey:Re,isSigner:!1,isWritable:!0},{pubkey:Ie,isSigner:!1,isWritable:!0},{pubkey:Be,isSigner:!1,isWritable:!0},{pubkey:ye,isSigner:!1,isWritable:!0},{pubkey:pe,isSigner:!1,isWritable:!0},{pubkey:new e.PublicKey(null!==(W=null==p?void 0:p.treeAuthority)&&void 0!==W?W:""),isSigner:!1,isWritable:!0},{pubkey:v,isSigner:!1,isWritable:!0},{pubkey:v,isSigner:!1,isWritable:!0},{pubkey:Ee,isSigner:!1,isWritable:!0},{pubkey:new e.PublicKey(null!==(M=null==p?void 0:p.logWrapper)&&void 0!==M?M:""),isSigner:!1,isWritable:!0},{pubkey:new e.PublicKey(null!==(q=null==p?void 0:p.merkleTree)&&void 0!==q?q:""),isSigner:!1,isWritable:!0},...Ce],data:Buffer.concat([Buffer.from(null!==(j=null==p?void 0:p.listDiscriminator)&&void 0!==j?j:[]),Buffer.from(Uint8Array.of(...new i(null!==(x=null===(F=null==p?void 0:p.bubblegumListArg)||void 0===F?void 0:F.price)&&void 0!==x?x:0).toArray("le",8),...Te,...Ae,...Le,...ke,...new i(null!==(N=null===(H=null==p?void 0:p.bubblegumListArg)||void 0===H?void 0:H.index)&&void 0!==N?N:0).toArray("le",4),+(null!==(z=null===(V=null==p?void 0:p.bubblegumListArg)||void 0===V?void 0:V.isUpdate)&&void 0!==z&&z)))])});try{const i={nonNative:de.nonNative,native:de.native-be.usedBalance/e.LAMPORTS_PER_SOL};if("backpack"===(null==b?void 0:b.toLowerCase())||"phantom"===(null==b?void 0:b.toLowerCase())){const n=new e.Transaction({feePayer:v}).add(De),r=await ue.getLatestBlockhash("confirmed");n.recentBlockhash=r.blockhash,n.lastValidBlockHeight=r.lastValidBlockHeight,n.add(e.ComputeBudgetProgram.setComputeUnitLimit({units:14e5}));const o=await d.fetchSolanaPriorityFee(f,n.serialize({verifySignatures:!1})),a=e.ComputeBudgetProgram.setComputeUnitPrice({microLamports:o});n.add(a);const s=await ue.getFeeForMessage(n.compileMessage(),"confirmed"),u=i.native*e.LAMPORTS_PER_SOL,p=(null!==(J=null==s?void 0:s.value)&&void 0!==J?J:0)+S*e.LAMPORTS_PER_SOL;if(u<=0||u<p)return{success:!1,error:"Insufficient SOL for initiating the transaction."};m("Initiating edit listing transaction.");try{const e=await(null===(G=null===(Y=null==g?void 0:g.adapter)||void 0===Y?void 0:Y.sendTransaction)||void 0===G?void 0:G.call(Y,n,ue,{skipPreflight:!0,preflightCommitment:"confirmed"}));await ue.confirmTransaction(Object.assign({signature:e},r),"confirmed");const i=await ue.getSignatureStatus(e);return null===(null===(Q=null==i?void 0:i.value)||void 0===Q?void 0:Q.err)?{success:!0,response:{hash:e}}:{success:!1,error:"Transaction Failed"}}catch(e){return(null===(Z=null===(X=null==e?void 0:e.message)||void 0===X?void 0:X.includes)||void 0===Z?void 0:Z.call(X,l.ErrorsType.USER_REJECTED))||(null===($=null==e?void 0:e.includes)||void 0===$?void 0:$.call(e,l.ErrorsType.USER_REJECTED))||(null===(ee=null==e?void 0:e.includes)||void 0===ee?void 0:ee.call(e,l.ErrorsType.USER_DENIED))||(null===(ne=null===(ie=null==e?void 0:e.message)||void 0===ie?void 0:ie.includes)||void 0===ne?void 0:ne.call(ie,l.ErrorsType.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==h||h({key:"Additional Data",value:{address:c,balance:de,providerType:b,chainId:y,path:"Inside an edit listing solana contract function - 194"}},{exception:e}),{success:!1,error:t.customErrorMessage(e)})}}if("magic"===(null==b?void 0:b.toLowerCase())){const n=await ue.getLatestBlockhash("confirmed"),r=new e.Transaction({feePayer:v}).add(De);r.recentBlockhash=n.blockhash,r.lastValidBlockHeight=n.lastValidBlockHeight,r.add(e.ComputeBudgetProgram.setComputeUnitLimit({units:14e5}));const l=await d.fetchSolanaPriorityFee(f,r.serialize({verifySignatures:!1})),o=e.ComputeBudgetProgram.setComputeUnitPrice({microLamports:l});r.add(o);const t=await ue.getFeeForMessage(r.compileMessage(),"confirmed"),a=i.native*e.LAMPORTS_PER_SOL,s=(null!==(re=null==t?void 0:t.value)&&void 0!==re?re:0)+S*e.LAMPORTS_PER_SOL;if(a<=0||a<s)return{success:!1,error:"Insufficient SOL for initiating the transaction."};m("Initiating edit listing transaction.");const u=await(null===(le=null==g?void 0:g.solana)||void 0===le?void 0:le.signTransaction(r,{requireAllSignatures:!1,verifySignatures:!0})),c=await ue.sendRawTransaction(Buffer.from(u.rawTransaction,"base64"),{skipPreflight:!0,preflightCommitment:"confirmed"});await ue.confirmTransaction(Object.assign({signature:c},n),"confirmed");const b=await ue.getSignatureStatus(c);return null===(null===(oe=null==b?void 0:b.value)||void 0===oe?void 0:oe.err)?{success:!0,response:{hash:c}}:{success:!1,error:"Transaction Failed"}}return null}catch(e){return(null===(te=e.message)||void 0===te?void 0:te.includes(l.ErrorsType.USER_REJECTED))||(null===(ae=e.message)||void 0===ae?void 0:ae.includes(l.ErrorsType.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==h||h({key:"Additional Data",value:{address:c,balance:de,providerType:b,chainId:y,path:"Inside an edit listing solana contract function - 276"}},{exception:e}),{success:!1,error:t.customErrorMessage(e)})}}return null}catch(e){return(null===(se=e.message)||void 0===se?void 0:se.includes(l.ErrorsType.USER_REJECTED))||(null===(ue=e.message)||void 0===ue?void 0:ue.includes(l.ErrorsType.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null===(de=null==e?void 0:e.message)||void 0===de?void 0:de.includes("Assertion failed"))?{success:!1,error:"A maximum of 9,000,000 VIN can be processed per transaction."}:(null==h||h({key:"Additional Data",value:{address:c,providerType:b,chainId:y,path:"Inside an edit listing solana contract function - 310"}},{exception:e}),{success:!1,error:t.customErrorMessage(e)})}};