@meshsdk/transaction 1.5.30 → 1.5.32
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 +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var _=Object.create;var v=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var Y=(n,e)=>{for(var t in e)v(n,t,{get:e[t],enumerable:!0})},H=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of $(e))!G.call(n,r)&&r!==t&&v(n,r,{get:()=>e[r],enumerable:!(i=J(e,r))||i.enumerable});return n};var X=(n,e,t)=>(t=n!=null?_(j(n)):{},H(e||!n||!n.__esModule?v(t,"default",{value:n,enumerable:!0}):t,n)),Z=n=>H(v({},"__esModule",{value:!0}),n);var rt={};Y(rt,{ForgeScript:()=>N,MeshTxBuilder:()=>B,Transaction:()=>D,UtxoSelection:()=>k,experimentalSelectUtxos:()=>S,keepRelevant:()=>E,largestFirst:()=>V,largestFirstMultiAsset:()=>Q});module.exports=Z(rt);var h=require("@meshsdk/common"),q=X(require("json-bigint"));var A=require("@meshsdk/common");var x=require("@meshsdk/common"),C=require("@meshsdk/common"),tt=(n,e)=>Array.from(e,t=>({unit:t[0],quantity:x.BigNum.new(t[1])})).every(t=>n.filter(i=>i.output.amount.find(r=>r.unit===t.unit)!==void 0).reduce((i,r)=>{let s=r.output.amount.reduce((a,u)=>a.checkedAdd(x.BigNum.new(t.unit===u.unit?u.quantity:"0")),x.BigNum.new("0"));return i.checkedAdd(s)},x.BigNum.new("0")).lessThan(t.quantity)===!1),w=(n,e)=>{let t=x.BigNum.new(n.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0");return x.BigNum.new(e.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0").compare(t)},W=n=>{let{maxTxSize:e,minFeeA:t,minFeeB:i}=n;return x.BigNum.new((0,C.resolveTxFees)(e,t,i))},P=n=>n.output.amount.length>1,L=n=>n.reduce((e,t)=>{let i=t.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0";return e.checkedAdd(x.BigNum.new(i))},x.BigNum.new("0")),z=(n,e)=>{let t=e.sort(w);return T(t,new Map([["lovelace",n]]))},T=(n,e,t=[])=>n.length===0||tt(t,e)?t:et(n[0],e)?T(n.slice(1),e,[...t,n[0]]):T(n.slice(1),e,t),et=(n,e)=>Array.from(e.keys()).some(t=>n.output.amount.find(i=>i.unit===t)!==void 0);var E=(n,e,t="5000000")=>{let i=A.BigNum.new(n.get("lovelace")??"0").checkedAdd(A.BigNum.new(t)),r=e.filter(u=>u.output.amount.filter(d=>d.unit!=="lovelace").some(d=>n.has(d.unit))),s=L(r);return[...s.lessThan(i)?z(i.clampedSub(s).toString(),e.filter(u=>!r.some(d=>d.input.txHash===u.input.txHash&&d.input.outputIndex===u.input.outputIndex))):[],...r]};var y=require("@meshsdk/common");var V=(n,e,t=!1,{maxTxSize:i,minFeeA:r,minFeeB:s}=y.DEFAULT_PROTOCOL_PARAMETERS)=>{let a=e.filter(b=>P(b)===!1).sort(w),u=y.BigNum.new((0,y.resolveTxFees)(i,r,s)),d=t?y.BigNum.new(n).checkedAdd(u).toString():n;return T(a,new Map([["lovelace",d]]))};var U=require("@meshsdk/common");var Q=(n,e,t=!1,i=U.DEFAULT_PROTOCOL_PARAMETERS)=>{let r=e.filter(P).sort(w),s=W(i),a=n.get("lovelace")??"0",u=t?U.BigNum.new(a).checkedAdd(s).toString():a;return n.set("lovelace",u),T(r,n)};var S=(n,e,t)=>{let i=new Map(n);i.set("lovelace",String(Number(i.get("lovelace")||0)+Number(t)));let r=new Map;for(let o=0;o<e.length;o++)r.set(o,e[o]);let s=new Set,a=new Set,u=new Set,d=new Set,p=new Set;for(let o=0;o<e.length;o++)switch(e[o].output.amount.length){case 1:{a.add(o);break}case 2:{u.add(o);break}case 3:{d.add(o);break}default:{p.add(o);break}}let f=(o,l,m)=>{let M=r.get(o);if(!M)return;let F=it(M,l);if(Number(F)>0){s.add(o),m.delete(o);for(let R of M.output.amount)i.set(R.unit,String(Number(i.get(R.unit))-Number(R.quantity)))}};for(let o of i.keys())if(o!="lovelace"){for(let l of u){let m=i.get(o);if(!m||Number(m)<=0)break;f(l,o,u)}for(let l of d){let m=i.get(o);if(!m||Number(m)<=0)break;f(l,o,d)}for(let l of p){let m=i.get(o);if(!m||Number(m)<=0)break;f(l,o,p)}}for(let o of a){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",a)}for(let o of u){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",u)}for(let o of d){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",d)}for(let o of p){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",p)}for(let o of i.keys())if(Number(i.get(o))>0)return console.log("Insufficient funds for",o),console.log("Remaining quantity",Number(i.get(o))),[];let b=[];for(let o of s){let l=r.get(o);l&&b.push(l)}return b},it=(n,e)=>{for(let t of n.output.amount)if(t.unit==e)return t.quantity;return"0"};var k=class{constructor(){}largestFirst(e,t,i="5000000"){let r=e.get("lovelace")??"0",s=BigInt(r)+BigInt(i);return V(s.toString(),t,!1)}keepRelevant(e,t,i="5000000"){return E(e,t,i)}largestFirstMultiAsset(e,t,i){let r=e.get("lovelace")??"0";return e.set("lovelace",(BigInt(r)+BigInt(i)).toString()),Q(e,t,!1)}experimental(e,t,i){return S(e,t,i)}};var O=class{constructor(){this.txEvaluationMultiplier=1.1;this.addingPlutusScriptInput=!1;this.addingPlutusMint=!1;this.addingPlutusWithdrawal=!1;this._protocolParams=h.DEFAULT_PROTOCOL_PARAMETERS;this.txIn=(e,t,i,r)=>(this.txInQueueItem&&this.queueInput(),this.addingPlutusScriptInput?this.txInQueueItem={type:"Script",txIn:{txHash:e,txIndex:t,amount:i,address:r},scriptTxIn:{}}:this.txInQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this.addingPlutusScriptInput=!1,this);this.txInScript=e=>{if(!this.txInQueueItem)throw Error("Undefined input");return this.txInQueueItem.type==="PubKey"&&(this.txInQueueItem={type:"SimpleScript",txIn:this.txInQueueItem.txIn,simpleScriptTxIn:{scriptSource:{type:"Provided",script:e}}}),this.txInQueueItem.type==="Script"&&(this.txInQueueItem.scriptTxIn.scriptSource={type:"Provided",script:{code:e,version:this.plutusSpendingScriptVersion||"V2"}}),this};this.txInDatumValue=(e,t="Mesh")=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Datum value attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Datum value attempted to be called on a simple script input");let i=e;return t==="JSON"&&(i=this.castRawDataToJsonString(e)),t==="Mesh"?(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:e}},this):(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:i}},this)};this.txInInlineDatumPresent=()=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Inline datum present attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Inline datum present attempted to be called on a simple script input");let{txHash:e,txIndex:t}=this.txInQueueItem.txIn;return e&&t.toString()&&(this.txInQueueItem.scriptTxIn.datumSource={type:"Inline",txHash:e,txIndex:t}),this};this.txInRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference redeemer attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference redeemer attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.txOut=(e,t)=>(this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txOutput={address:e,amount:t},this);this.txOutDatumHashValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Hash",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Hash",data:{type:t,content:i}}}return this};this.txOutInlineDatumValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Inline",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Inline",data:{type:t,content:i}}}return this};this.txOutReferenceScript=(e,t="V2")=>(this.txOutput&&(this.txOutput.referenceScript={code:e,version:t}),this);this.spendingPlutusScriptV1=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V1",this);this.spendingPlutusScriptV2=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V2",this);this.spendingPlutusScriptV3=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V3",this);this.spendingTxInReference=(e,t,i)=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusSpendingScriptVersion||"V2",scriptSize:"0"},this};this.spendingReferenceTxInInlineDatumPresent=()=>(this.txInInlineDatumPresent(),this);this.spendingReferenceTxInRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>(this.txInRedeemerValue(e,t,i),this);this.readOnlyTxInReference=(e,t)=>(this.meshTxBuilderBody.referenceInputs.push({txHash:e,txIndex:t}),this);this.mintPlutusScriptV1=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V1",this);this.mintPlutusScriptV2=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V2",this);this.mintPlutusScriptV3=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V3",this);this.mint=(e,t,i)=>(this.mintItem&&this.queueMint(),this.mintItem={type:this.addingPlutusMint?"Plutus":"Native",policyId:t,assetName:i,amount:e},this.addingPlutusMint=!1,this);this.mintingScript=e=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");return this.mintItem.type==="Native"&&(this.mintItem.scriptSource={type:"Provided",scriptCode:e}),this.mintItem.type==="Plutus"&&(this.mintItem.scriptSource={type:"Provided",script:{code:e,version:this.plutusMintingScriptVersion||"V2"}}),this};this.mintTxInReference=(e,t)=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.scriptSource={type:"Inline",txHash:e,txIndex:t,version:this.plutusMintingScriptVersion,scriptSize:"0",scriptHash:""},this};this.mintReferenceTxInRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{if(!this.mintItem)throw Error("Undefined mint");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(this.mintItem.type=="Plutus"&&!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.mintRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>(this.mintReferenceTxInRedeemerValue(e,t,i),this);this.requiredSignerHash=e=>(this.meshTxBuilderBody.requiredSignatures.push(e),this);this.txInCollateral=(e,t,i,r)=>(this.collateralQueueItem&&this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this);this.withdrawalPlutusScriptV1=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V1",this);this.withdrawalPlutusScriptV2=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V2",this);this.withdrawalPlutusScriptV3=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V3",this);this.withdrawal=(e,t)=>{if(this.withdrawalItem&&this.queueWithdrawal(),this.addingPlutusWithdrawal){let r={plutusScriptWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(r),this}let i={pubKeyWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(i),this};this.withdrawalScript=(e,t)=>{if(!this.withdrawalItem)throw Error("withdrawalScript: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalScript: Adding script to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Provided",script:{code:e,version:this.plutusWithdrawalScriptVersion||"V2"}},this};this.withdrawalTxInReference=(e,t,i,r)=>{if(!this.withdrawalItem)throw Error("withdrawalTxInReference: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalTxInReference: Adding script reference to non plutus withdrawal");this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusWithdrawalScriptVersion||"V2",scriptSize:r||"0"}};this.withdrawalRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{if(!this.withdrawalItem)throw Error("withdrawalRedeemerValue: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalRedeemerValue: Adding redeemer to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.registerPoolCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterPool",poolParams:e}),this);this.registerStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterStake",stakeKeyHash:e}),this);this.delegateStakeCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"DelegateStake",stakeKeyHash:e,poolId:t}),this);this.deregisterStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"DeregisterStake",stakeKeyHash:e}),this);this.retirePoolCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"RetirePool",poolId:e,epoch:t}),this);this.changeAddress=e=>(this.meshTxBuilderBody.changeAddress=e,this);this.invalidBefore=e=>(this.meshTxBuilderBody.validityRange.invalidBefore=e,this);this.invalidHereafter=e=>(this.meshTxBuilderBody.validityRange.invalidHereafter=e,this);this.metadataValue=(e,t)=>{let i=q.default.stringify(t);return this.meshTxBuilderBody.metadata.push({tag:e,metadata:i}),this};this.signingKey=e=>(this.meshTxBuilderBody.signingKey.push(e),this);this.selectUtxosFrom=(e,t=5e6)=>(this.meshTxBuilderBody.extraInputs=e,this.meshTxBuilderBody.selectionThreshold=t,this);this.protocolParams=e=>{let t={...h.DEFAULT_PROTOCOL_PARAMETERS,...e};return this._protocolParams=t,this};this.queueAllLastItem=()=>{this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txInQueueItem&&this.queueInput(),this.collateralQueueItem&&(this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem=void 0),this.mintItem&&this.queueMint(),this.withdrawalItem&&this.queueWithdrawal()};this.queueInput=()=>{if(!this.txInQueueItem)throw Error("queueInput: Undefined input");if(this.txInQueueItem.type==="Script")if(this.txInQueueItem.scriptTxIn){if(!this.txInQueueItem.scriptTxIn.datumSource)throw Error("queueInput: Script input does not contain datum information");if(!this.txInQueueItem.scriptTxIn.redeemer)throw Error("queueInput: Script input does not contain redeemer information");if(!this.txInQueueItem.scriptTxIn.scriptSource)throw Error("queueInput: Script input does not contain script information")}else throw Error("queueInput: Script input does not contain script, datum, or redeemer information");this.meshTxBuilderBody.inputs.push(this.txInQueueItem),this.txInQueueItem=void 0};this.queueMint=()=>{if(!this.mintItem)throw Error("queueMint: Undefined mint");if(!this.mintItem.scriptSource)throw Error("queueMint: Missing mint script information");this.meshTxBuilderBody.mints.push(this.mintItem),this.mintItem=void 0};this.queueWithdrawal=()=>{if(!this.withdrawalItem)throw Error("queueWithdrawal: Undefined withdrawal");if("plutusScriptWithdrawal"in this.withdrawalItem){if(!this.withdrawalItem.plutusScriptWithdrawal.scriptSource)throw Error("queueWithdrawal: Missing withdrawal script information");if(!this.withdrawalItem.plutusScriptWithdrawal.redeemer)throw Error("queueWithdrawal: Missing withdrawal redeemer information")}this.meshTxBuilderBody.withdrawals.push(this.withdrawalItem),this.withdrawalItem=void 0};this.castRawDataToJsonString=e=>typeof e=="object"?q.default.stringify(e):e;this.castBuilderDataToRedeemer=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{let r,s=e;return t==="Mesh"?(r={data:{type:t,content:s},exUnits:i},r):(t==="JSON"&&(s=this.castRawDataToJsonString(e)),r={data:{type:t,content:s},exUnits:i},r)};this.updateRedeemer=(e,t)=>{t.forEach(i=>{switch(i.tag){case"SPEND":{let r=e.inputs[i.index];r.type=="Script"&&r.scriptTxIn.redeemer&&(r.scriptTxIn.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.scriptTxIn.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"MINT":{let r=e.mints[i.index];r.type=="Plutus"&&r.redeemer&&(r.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"CERT":break;case"REWARD":break}})};this.addUtxosFromSelection=()=>{let e=this.meshTxBuilderBody.outputs.reduce((i,r)=>(r.amount.forEach(a=>{let{unit:u,quantity:d}=a,p=Number(i.get(u))||0;i.set(u,String(p+Number(d)))}),i),new Map);this.meshTxBuilderBody.inputs.reduce((i,r)=>(r.txIn.amount?.forEach(a=>{let{unit:u,quantity:d}=a,p=Number(i.get(u))||0;i.set(u,String(p-Number(d)))}),i),e),this.meshTxBuilderBody.mints.reduce((i,r)=>{let s={unit:r.policyId+r.assetName,quantity:String(r.amount)},a=Number(i.get(s.unit))||0;return i.set(s.unit,String(a-Number(s.quantity))),i},e),S(e,this.meshTxBuilderBody.extraInputs,this.meshTxBuilderBody.selectionThreshold.toString()).forEach(i=>{let r={type:"PubKey",txIn:{txHash:i.input.txHash,txIndex:i.input.outputIndex,amount:i.output.amount,address:i.output.address}};this.meshTxBuilderBody.inputs.push(r)})};this.removeDuplicateInputs=()=>{let{inputs:e}=this.meshTxBuilderBody,t=s=>`${s.txHash}#${s.txIndex}`,i=[],r=[];for(let s=0;s<e.length;s+=1){let a=e[s],u=t(a.txIn);i.includes(u)?(e.splice(s,1),s-=1):r.push(a)}this.meshTxBuilderBody.inputs=r};this.emptyTxBuilderBody=()=>(this.meshTxBuilderBody=(0,h.emptyTxBuilderBody)(),h.emptyTxBuilderBody);this.reset=()=>{this.meshTxBuilderBody=(0,h.emptyTxBuilderBody)(),this.txEvaluationMultiplier=1.1,this.txOutput=void 0,this.addingPlutusScriptInput=!1,this.plutusSpendingScriptVersion=void 0,this.addingPlutusMint=!1,this.plutusMintingScriptVersion=void 0,this.addingPlutusWithdrawal=!1,this.plutusWithdrawalScriptVersion=void 0,this._protocolParams=h.DEFAULT_PROTOCOL_PARAMETERS,this.mintItem=void 0,this.txInQueueItem=void 0,this.withdrawalItem=void 0,this.collateralQueueItem=void 0,this.refScriptTxInQueueItem=void 0};this.meshTxBuilderBody=(0,h.emptyTxBuilderBody)()}};var K=require("@meshsdk/core-csl"),B=class extends O{constructor({serializer:t,fetcher:i,submitter:r,evaluator:s,params:a,isHydra:u=!1}={}){super();this.txHex="";this.queriedTxHashes=new Set;this.queriedUTxOs={};this.complete=async t=>{t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.removeDuplicateInputs();let{inputs:i,collaterals:r}=this.meshTxBuilderBody,s=[...i,...r].filter(u=>!this.isInputComplete(u));await this.queryAllTxInfo(s),s.forEach(u=>{this.completeTxInformation(u)}),this.addUtxosFromSelection();let a=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams);if(this.evaluator){let u=await this.evaluator.evaluateTx(a).catch(d=>{throw Error(`Tx evaluation failed: ${d}`)});this.updateRedeemer(this.meshTxBuilderBody,u),a=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams)}return console.log(a),this.txHex=a,a};this.completeSync=t=>(t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams));this.completeSigning=()=>{let t=this.serializer.addSigningKeys(this.txHex,this.meshTxBuilderBody.signingKey);return this.txHex=t,t};this.submitTx=async t=>await this.submitter?.submitTx(t);this.getUTxOInfo=async t=>{let i=[];this.queriedTxHashes.has(t)||(this.queriedTxHashes.add(t),i=await this.fetcher?.fetchUTxOs(t)||[],this.queriedUTxOs[t]=i)};this.queryAllTxInfo=t=>{let i=[];if(t.length>0&&!this.fetcher)throw Error("Transaction information is incomplete while no fetcher instance is provided");for(let r=0;r<t.length;r++){let s=t[r];this.isInputInfoComplete(s)||i.push(this.getUTxOInfo(s.txIn.txHash)),s.type==="Script"&&s.scriptTxIn.scriptSource?.type==="Inline"&&!this.isRefScriptInfoComplete(s)&&i.push(this.getUTxOInfo(s.scriptTxIn.scriptSource.txHash))}return Promise.all(i)};this.completeTxInformation=t=>{if(!this.isInputInfoComplete(t)){let r=this.queriedUTxOs[t.txIn.txHash]?.find(u=>u.input.outputIndex===t.txIn.txIndex),s=r?.output.amount,a=r?.output.address;if(!s||s.length===0)throw Error(`Couldn't find value information for ${t.txIn.txHash}#${t.txIn.txIndex}`);if(t.txIn.amount=s,t.type==="PubKey"){if(!a||a==="")throw Error(`Couldn't find address information for ${t.txIn.txHash}#${t.txIn.txIndex}`);t.txIn.address=a}}if(t.type==="Script"&&t.scriptTxIn.scriptSource?.type=="Inline"&&!this.isRefScriptInfoComplete(t)){let i=t.scriptTxIn.scriptSource,s=this.queriedUTxOs[i.txHash].find(a=>a.input.outputIndex===i.txIndex);if(!s)throw Error(`Couldn't find script reference utxo for ${i.txHash}#${i.txIndex}`);i.scriptHash=s?.output.scriptHash}};this.isInputComplete=t=>t.type==="PubKey"?this.isInputInfoComplete(t):t.type==="Script"?this.isInputInfoComplete(t)&&this.isRefScriptInfoComplete(t):!0;this.isInputInfoComplete=t=>{let{amount:i,address:r}=t.txIn;return!(t.type==="PubKey"&&(!i||!r)||t.type==="Script"&&!i)};this.isRefScriptInfoComplete=t=>{let{scriptSource:i}=t.scriptTxIn;return!(i?.type==="Inline"&&!i?.scriptHash)};t?this.serializer=t:this.serializer=new K.CSLSerializer,i&&(this.fetcher=i),r&&(this.submitter=r),s&&(this.evaluator=s),a&&this.protocolParams(a),u&&this.protocolParams({minFeeA:0,minFeeB:0,priceMem:0,priceStep:0,collateralPercent:0,coinsPerUtxoSize:0})}};var I=require("@meshsdk/core-cst"),N=class{static withOneSignature(e){let t=(0,I.deserializeEd25519KeyHash)((0,I.resolvePaymentKeyHash)(e));return(0,I.buildScriptPubkey)(t).toCbor()}static fromNativeScript(e){return(0,I.toNativeScript)(e).toCbor()}};var c=require("@meshsdk/common");var g=require("@meshsdk/core-cst"),D=class{constructor(e){this.isCollateralNeeded=!1;this.txBuilder=new B(e),this.initiator=e.initiator}sendAssets(e,t){return typeof t=="string"&&(t=[{unit:"lovelace",quantity:t}]),typeof e=="string"&&this.txBuilder.txOut(e,t),typeof e=="object"&&(this.txBuilder.txOut(e.address,t),e.datum&&(e.datum.inline?this.txBuilder.txOutInlineDatumValue(e.datum.value):this.txBuilder.txOutDatumHashValue(e.datum.value))),this}sendLovelace(e,t){return this.sendAssets(e,t)}sendToken(e,t,i){let r=[{unit:c.SUPPORTED_TOKENS[t],quantity:i}];return this.sendAssets(e,r)}sendValue(e,t){let i=t.output.amount;return this.sendAssets(e,i)}setTxInputs(e){return e.forEach(t=>{this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setTxRefInputs(e){return e.forEach(t=>{this.txBuilder.readOnlyTxInReference(t.input.txHash,t.input.outputIndex)}),this}setNativeScriptInput(e,t){let{scriptCbor:i}=this.txBuilder.serializer.deserializer.script.deserializeNativeScript(e);return this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i),this}redeemValue(e){let{value:t,script:i,datum:r,redeemer:s}=e,a=s||{data:{alternative:0,fields:["mesh"]},budget:c.DEFAULT_REDEEMER_BUDGET};if("code"in i&&(this.isCollateralNeeded=!0,this.spendingPlutusScript(i).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i.code).txInRedeemerValue(a.data,"Mesh",a.budget)),"output"in i){if(!i.output.scriptRef)throw new Error("redeemValue: No script reference found in UTxO");let u=(0,g.fromScriptRef)(i.output.scriptRef);if(!u||!("code"in u))throw new Error("redeemValue: Script reference not found");this.isCollateralNeeded=!0,this.spendingPlutusScript(u).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).spendingTxInReference(i.input.txHash,i.input.outputIndex,i.output.scriptHash).txInRedeemerValue(a.data,"Mesh",a.budget)}return r?this.txBuilder.txInDatumValue(r):this.txBuilder.txInInlineDatumPresent(),this}mintAsset(e,t,i){let r=t.assetQuantity,s=(0,c.stringToHex)(t.assetName),a=(0,c.CIP68_100)(s);t.cip68ScriptAddress&&(s=(0,c.CIP68_222)(s));let u="";switch(typeof e){case"string":u=(0,g.deserializeNativeScript)(e).hash().toString(),this.txBuilder.mint(r,u,s).mintingScript(e),t.cip68ScriptAddress&&this.txBuilder.mint(r,u,a).mintingScript(e);break;case"object":if(!i)throw new Error("burnAsset: Redeemer data is required for Plutus minting");if("code"in e){u=(0,g.deserializePlutusScript)(e.code,e.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(e).mint(r,u,s).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress&&this.mintPlutusScript(e).mint(r,u,a).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget);break}if("output"in e){if(!e.output.scriptRef)throw new Error("mintAsset: No script reference found in UTxO");let d=(0,g.fromScriptRef)(e.output.scriptRef);if(!d)throw new Error("mintAsset: Script reference not found");if("code"in d){if(u=(0,g.deserializePlutusScript)(d.code,d.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(d).mint(r,u,s).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress){this.mintPlutusScript(d).mint(r,u,a).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget);break}break}else throw new Error("mintAsset: Reference script minting not implemented")}break}return t.metadata&&t.label&&this.setMetadata(Number(t.label),{[u]:{[t.assetName]:t.metadata},version:1}),t.recipient&&this.sendAssets(t.recipient,[{unit:u+s,quantity:t.assetQuantity}]),t.cip68ScriptAddress&&this.sendAssets({address:t.cip68ScriptAddress,datum:{inline:!0,value:(0,c.metadataToCip68)(t.metadata)}},[{unit:u+a,quantity:t.assetQuantity}]),this}burnAsset(e,t,i){let r="-"+t.quantity,s={assetName:(0,c.hexToString)(t.unit.slice(c.POLICY_ID_LENGTH)),assetQuantity:r};try{this.mintAsset(e,s,i)}catch(a){throw new Error("burnAsset: "+a)}return this}setChangeAddress(e){return this.txBuilder.changeAddress(e),this}setCollateral(e){return e.forEach(t=>{this.txBuilder.txInCollateral(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setRequiredSigners(e){return e.forEach(t=>{let{pubKeyHash:i}=this.txBuilder.serializer.deserializer.key.deserializeAddress(t);this.txBuilder.requiredSignerHash(i)}),this}setTimeToExpire(e){return this.txBuilder.invalidHereafter(Number(e)),this}setTimeToStart(e){return this.txBuilder.invalidBefore(Number(e)),this}setMetadata(e,t){return this.txBuilder.metadataValue(e.toString(),t),this}withdrawRewards(e,t){return this.txBuilder.withdrawal(e,t),this}delegateStake(e,t){return this.txBuilder.delegateStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e),this.txBuilder.serializer.resolver.keys.resolveEd25519KeyHash(t)),this}deregisterStake(e){return this.txBuilder.deregisterStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerStake(e){return this.txBuilder.registerStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerPool(e){return this.txBuilder.registerPoolCertificate(e),this}retirePool(e,t){return this.txBuilder.retirePoolCertificate(e,t),this}async build(){try{return await this.addCollateralIfNeeded(),await this.addTxInputsAsNeeded(),await this.addChangeAddress(),this.txBuilder.complete()}catch(e){throw new Error(`[Transaction] An error occurred during build: ${e}.`)}}mintPlutusScript(e){switch(e.version){case"V1":this.txBuilder.mintPlutusScriptV1();break;case"V2":this.txBuilder.mintPlutusScriptV2();break;case"V3":this.txBuilder.mintPlutusScriptV3();break}return this.txBuilder}spendingPlutusScript(e){switch(e.version){case"V1":this.txBuilder.spendingPlutusScriptV1();break;case"V2":this.txBuilder.spendingPlutusScriptV2();break;case"V3":this.txBuilder.spendingPlutusScriptV3();break}return this.txBuilder}async addCollateralIfNeeded(){if(this.isCollateralNeeded){let e=await this.initiator.getCollateral();this.setCollateral(e)}}async addTxInputsAsNeeded(){let e=await this.initiator.getUtxos();this.txBuilder.selectUtxosFrom(e)}async addChangeAddress(){if(this.txBuilder.meshTxBuilderBody.changeAddress===""){let e=await this.initiator.getChangeAddress();this.setChangeAddress(e)}}};0&&(module.exports={ForgeScript,MeshTxBuilder,Transaction,UtxoSelection,experimentalSelectUtxos,keepRelevant,largestFirst,largestFirstMultiAsset});
|
|
1
|
+
"use strict";var _=Object.create;var v=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var Y=(n,e)=>{for(var t in e)v(n,t,{get:e[t],enumerable:!0})},H=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of $(e))!G.call(n,r)&&r!==t&&v(n,r,{get:()=>e[r],enumerable:!(i=J(e,r))||i.enumerable});return n};var X=(n,e,t)=>(t=n!=null?_(j(n)):{},H(e||!n||!n.__esModule?v(t,"default",{value:n,enumerable:!0}):t,n)),Z=n=>H(v({},"__esModule",{value:!0}),n);var rt={};Y(rt,{ForgeScript:()=>N,MeshTxBuilder:()=>B,Transaction:()=>D,UtxoSelection:()=>k,experimentalSelectUtxos:()=>S,keepRelevant:()=>E,largestFirst:()=>V,largestFirstMultiAsset:()=>Q});module.exports=Z(rt);var K=require("@meshsdk/core-csl");var h=require("@meshsdk/common"),q=X(require("json-bigint"));var A=require("@meshsdk/common");var x=require("@meshsdk/common"),C=require("@meshsdk/common"),tt=(n,e)=>Array.from(e,t=>({unit:t[0],quantity:x.BigNum.new(t[1])})).every(t=>n.filter(i=>i.output.amount.find(r=>r.unit===t.unit)!==void 0).reduce((i,r)=>{let s=r.output.amount.reduce((a,u)=>a.checkedAdd(x.BigNum.new(t.unit===u.unit?u.quantity:"0")),x.BigNum.new("0"));return i.checkedAdd(s)},x.BigNum.new("0")).lessThan(t.quantity)===!1),w=(n,e)=>{let t=x.BigNum.new(n.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0");return x.BigNum.new(e.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0").compare(t)},W=n=>{let{maxTxSize:e,minFeeA:t,minFeeB:i}=n;return x.BigNum.new((0,C.resolveTxFees)(e,t,i))},P=n=>n.output.amount.length>1,L=n=>n.reduce((e,t)=>{let i=t.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0";return e.checkedAdd(x.BigNum.new(i))},x.BigNum.new("0")),z=(n,e)=>{let t=e.sort(w);return T(t,new Map([["lovelace",n]]))},T=(n,e,t=[])=>n.length===0||tt(t,e)?t:et(n[0],e)?T(n.slice(1),e,[...t,n[0]]):T(n.slice(1),e,t),et=(n,e)=>Array.from(e.keys()).some(t=>n.output.amount.find(i=>i.unit===t)!==void 0);var E=(n,e,t="5000000")=>{let i=A.BigNum.new(n.get("lovelace")??"0").checkedAdd(A.BigNum.new(t)),r=e.filter(u=>u.output.amount.filter(d=>d.unit!=="lovelace").some(d=>n.has(d.unit))),s=L(r);return[...s.lessThan(i)?z(i.clampedSub(s).toString(),e.filter(u=>!r.some(d=>d.input.txHash===u.input.txHash&&d.input.outputIndex===u.input.outputIndex))):[],...r]};var y=require("@meshsdk/common");var V=(n,e,t=!1,{maxTxSize:i,minFeeA:r,minFeeB:s}=y.DEFAULT_PROTOCOL_PARAMETERS)=>{let a=e.filter(b=>P(b)===!1).sort(w),u=y.BigNum.new((0,y.resolveTxFees)(i,r,s)),d=t?y.BigNum.new(n).checkedAdd(u).toString():n;return T(a,new Map([["lovelace",d]]))};var U=require("@meshsdk/common");var Q=(n,e,t=!1,i=U.DEFAULT_PROTOCOL_PARAMETERS)=>{let r=e.filter(P).sort(w),s=W(i),a=n.get("lovelace")??"0",u=t?U.BigNum.new(a).checkedAdd(s).toString():a;return n.set("lovelace",u),T(r,n)};var S=(n,e,t)=>{let i=new Map(n);i.set("lovelace",String(Number(i.get("lovelace")||0)+Number(t)));let r=new Map;for(let o=0;o<e.length;o++)r.set(o,e[o]);let s=new Set,a=new Set,u=new Set,d=new Set,p=new Set;for(let o=0;o<e.length;o++)switch(e[o].output.amount.length){case 1:{a.add(o);break}case 2:{u.add(o);break}case 3:{d.add(o);break}default:{p.add(o);break}}let f=(o,l,m)=>{let M=r.get(o);if(!M)return;let F=it(M,l);if(Number(F)>0){s.add(o),m.delete(o);for(let R of M.output.amount)i.set(R.unit,String(Number(i.get(R.unit))-Number(R.quantity)))}};for(let o of i.keys())if(o!="lovelace"){for(let l of u){let m=i.get(o);if(!m||Number(m)<=0)break;f(l,o,u)}for(let l of d){let m=i.get(o);if(!m||Number(m)<=0)break;f(l,o,d)}for(let l of p){let m=i.get(o);if(!m||Number(m)<=0)break;f(l,o,p)}}for(let o of a){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",a)}for(let o of u){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",u)}for(let o of d){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",d)}for(let o of p){let l=i.get("lovelace");if(!l||Number(l)<=0)break;f(o,"lovelace",p)}for(let o of i.keys())if(Number(i.get(o))>0)return console.log("Insufficient funds for",o),console.log("Remaining quantity",Number(i.get(o))),[];let b=[];for(let o of s){let l=r.get(o);l&&b.push(l)}return b},it=(n,e)=>{for(let t of n.output.amount)if(t.unit==e)return t.quantity;return"0"};var k=class{constructor(){}largestFirst(e,t,i="5000000"){let r=e.get("lovelace")??"0",s=BigInt(r)+BigInt(i);return V(s.toString(),t,!1)}keepRelevant(e,t,i="5000000"){return E(e,t,i)}largestFirstMultiAsset(e,t,i){let r=e.get("lovelace")??"0";return e.set("lovelace",(BigInt(r)+BigInt(i)).toString()),Q(e,t,!1)}experimental(e,t,i){return S(e,t,i)}};var O=class{constructor(){this.txEvaluationMultiplier=1.1;this.addingPlutusScriptInput=!1;this.addingPlutusMint=!1;this.addingPlutusWithdrawal=!1;this._protocolParams=h.DEFAULT_PROTOCOL_PARAMETERS;this.txIn=(e,t,i,r)=>(this.txInQueueItem&&this.queueInput(),this.addingPlutusScriptInput?this.txInQueueItem={type:"Script",txIn:{txHash:e,txIndex:t,amount:i,address:r},scriptTxIn:{}}:this.txInQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this.addingPlutusScriptInput=!1,this);this.txInScript=e=>{if(!this.txInQueueItem)throw Error("Undefined input");return this.txInQueueItem.type==="PubKey"&&(this.txInQueueItem={type:"SimpleScript",txIn:this.txInQueueItem.txIn,simpleScriptTxIn:{scriptSource:{type:"Provided",script:e}}}),this.txInQueueItem.type==="Script"&&(this.txInQueueItem.scriptTxIn.scriptSource={type:"Provided",script:{code:e,version:this.plutusSpendingScriptVersion||"V2"}}),this};this.txInDatumValue=(e,t="Mesh")=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Datum value attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Datum value attempted to be called on a simple script input");let i=e;return t==="JSON"&&(i=this.castRawDataToJsonString(e)),t==="Mesh"?(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:e}},this):(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:i}},this)};this.txInInlineDatumPresent=()=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Inline datum present attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Inline datum present attempted to be called on a simple script input");let{txHash:e,txIndex:t}=this.txInQueueItem.txIn;return e&&t.toString()&&(this.txInQueueItem.scriptTxIn.datumSource={type:"Inline",txHash:e,txIndex:t}),this};this.txInRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference redeemer attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference redeemer attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.txOut=(e,t)=>(this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txOutput={address:e,amount:t},this);this.txOutDatumHashValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Hash",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Hash",data:{type:t,content:i}}}return this};this.txOutInlineDatumValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Inline",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Inline",data:{type:t,content:i}}}return this};this.txOutReferenceScript=(e,t="V2")=>(this.txOutput&&(this.txOutput.referenceScript={code:e,version:t}),this);this.spendingPlutusScriptV1=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V1",this);this.spendingPlutusScriptV2=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V2",this);this.spendingPlutusScriptV3=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V3",this);this.spendingTxInReference=(e,t,i)=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusSpendingScriptVersion||"V2",scriptSize:"0"},this};this.spendingReferenceTxInInlineDatumPresent=()=>(this.txInInlineDatumPresent(),this);this.spendingReferenceTxInRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>(this.txInRedeemerValue(e,t,i),this);this.readOnlyTxInReference=(e,t)=>(this.meshTxBuilderBody.referenceInputs.push({txHash:e,txIndex:t}),this);this.mintPlutusScriptV1=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V1",this);this.mintPlutusScriptV2=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V2",this);this.mintPlutusScriptV3=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V3",this);this.mint=(e,t,i)=>(this.mintItem&&this.queueMint(),this.mintItem={type:this.addingPlutusMint?"Plutus":"Native",policyId:t,assetName:i,amount:e},this.addingPlutusMint=!1,this);this.mintingScript=e=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");return this.mintItem.type==="Native"&&(this.mintItem.scriptSource={type:"Provided",scriptCode:e}),this.mintItem.type==="Plutus"&&(this.mintItem.scriptSource={type:"Provided",script:{code:e,version:this.plutusMintingScriptVersion||"V2"}}),this};this.mintTxInReference=(e,t)=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.scriptSource={type:"Inline",txHash:e,txIndex:t,version:this.plutusMintingScriptVersion,scriptSize:"0",scriptHash:""},this};this.mintReferenceTxInRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{if(!this.mintItem)throw Error("Undefined mint");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(this.mintItem.type=="Plutus"&&!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.mintRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>(this.mintReferenceTxInRedeemerValue(e,t,i),this);this.requiredSignerHash=e=>(this.meshTxBuilderBody.requiredSignatures.push(e),this);this.txInCollateral=(e,t,i,r)=>(this.collateralQueueItem&&this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this);this.withdrawalPlutusScriptV1=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V1",this);this.withdrawalPlutusScriptV2=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V2",this);this.withdrawalPlutusScriptV3=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V3",this);this.withdrawal=(e,t)=>{if(this.withdrawalItem&&this.queueWithdrawal(),this.addingPlutusWithdrawal){let r={plutusScriptWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(r),this}let i={pubKeyWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(i),this};this.withdrawalScript=(e,t)=>{if(!this.withdrawalItem)throw Error("withdrawalScript: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalScript: Adding script to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Provided",script:{code:e,version:this.plutusWithdrawalScriptVersion||"V2"}},this};this.withdrawalTxInReference=(e,t,i,r)=>{if(!this.withdrawalItem)throw Error("withdrawalTxInReference: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalTxInReference: Adding script reference to non plutus withdrawal");this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusWithdrawalScriptVersion||"V2",scriptSize:r||"0"}};this.withdrawalRedeemerValue=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{if(!this.withdrawalItem)throw Error("withdrawalRedeemerValue: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalRedeemerValue: Adding redeemer to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.registerPoolCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterPool",poolParams:e}),this);this.registerStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterStake",stakeKeyHash:e}),this);this.delegateStakeCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"DelegateStake",stakeKeyHash:e,poolId:t}),this);this.deregisterStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"DeregisterStake",stakeKeyHash:e}),this);this.retirePoolCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"RetirePool",poolId:e,epoch:t}),this);this.changeAddress=e=>(this.meshTxBuilderBody.changeAddress=e,this);this.invalidBefore=e=>(this.meshTxBuilderBody.validityRange.invalidBefore=e,this);this.invalidHereafter=e=>(this.meshTxBuilderBody.validityRange.invalidHereafter=e,this);this.metadataValue=(e,t)=>{let i=q.default.stringify(t);return this.meshTxBuilderBody.metadata.push({tag:e,metadata:i}),this};this.signingKey=e=>(this.meshTxBuilderBody.signingKey.push(e),this);this.selectUtxosFrom=(e,t=5e6)=>(this.meshTxBuilderBody.extraInputs=e,this.meshTxBuilderBody.selectionThreshold=t,this);this.protocolParams=e=>{let t={...h.DEFAULT_PROTOCOL_PARAMETERS,...e};return this._protocolParams=t,this};this.queueAllLastItem=()=>{this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txInQueueItem&&this.queueInput(),this.collateralQueueItem&&(this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem=void 0),this.mintItem&&this.queueMint(),this.withdrawalItem&&this.queueWithdrawal()};this.queueInput=()=>{if(!this.txInQueueItem)throw Error("queueInput: Undefined input");if(this.txInQueueItem.type==="Script")if(this.txInQueueItem.scriptTxIn){if(!this.txInQueueItem.scriptTxIn.datumSource)throw Error("queueInput: Script input does not contain datum information");if(!this.txInQueueItem.scriptTxIn.redeemer)throw Error("queueInput: Script input does not contain redeemer information");if(!this.txInQueueItem.scriptTxIn.scriptSource)throw Error("queueInput: Script input does not contain script information")}else throw Error("queueInput: Script input does not contain script, datum, or redeemer information");this.meshTxBuilderBody.inputs.push(this.txInQueueItem),this.txInQueueItem=void 0};this.queueMint=()=>{if(!this.mintItem)throw Error("queueMint: Undefined mint");if(!this.mintItem.scriptSource)throw Error("queueMint: Missing mint script information");this.meshTxBuilderBody.mints.push(this.mintItem),this.mintItem=void 0};this.queueWithdrawal=()=>{if(!this.withdrawalItem)throw Error("queueWithdrawal: Undefined withdrawal");if("plutusScriptWithdrawal"in this.withdrawalItem){if(!this.withdrawalItem.plutusScriptWithdrawal.scriptSource)throw Error("queueWithdrawal: Missing withdrawal script information");if(!this.withdrawalItem.plutusScriptWithdrawal.redeemer)throw Error("queueWithdrawal: Missing withdrawal redeemer information")}this.meshTxBuilderBody.withdrawals.push(this.withdrawalItem),this.withdrawalItem=void 0};this.castRawDataToJsonString=e=>typeof e=="object"?q.default.stringify(e):e;this.castBuilderDataToRedeemer=(e,t="Mesh",i={...h.DEFAULT_REDEEMER_BUDGET})=>{let r,s=e;return t==="Mesh"?(r={data:{type:t,content:s},exUnits:i},r):(t==="JSON"&&(s=this.castRawDataToJsonString(e)),r={data:{type:t,content:s},exUnits:i},r)};this.updateRedeemer=(e,t)=>{t.forEach(i=>{switch(i.tag){case"SPEND":{let r=e.inputs[i.index];r.type=="Script"&&r.scriptTxIn.redeemer&&(r.scriptTxIn.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.scriptTxIn.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"MINT":{let r=e.mints[i.index];r.type=="Plutus"&&r.redeemer&&(r.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"CERT":break;case"REWARD":break}})};this.addUtxosFromSelection=()=>{let e=this.meshTxBuilderBody.outputs.reduce((i,r)=>(r.amount.forEach(a=>{let{unit:u,quantity:d}=a,p=Number(i.get(u))||0;i.set(u,String(p+Number(d)))}),i),new Map);this.meshTxBuilderBody.inputs.reduce((i,r)=>(r.txIn.amount?.forEach(a=>{let{unit:u,quantity:d}=a,p=Number(i.get(u))||0;i.set(u,String(p-Number(d)))}),i),e),this.meshTxBuilderBody.mints.reduce((i,r)=>{let s={unit:r.policyId+r.assetName,quantity:String(r.amount)},a=Number(i.get(s.unit))||0;return i.set(s.unit,String(a-Number(s.quantity))),i},e),S(e,this.meshTxBuilderBody.extraInputs,this.meshTxBuilderBody.selectionThreshold.toString()).forEach(i=>{let r={type:"PubKey",txIn:{txHash:i.input.txHash,txIndex:i.input.outputIndex,amount:i.output.amount,address:i.output.address}};this.meshTxBuilderBody.inputs.push(r)})};this.removeDuplicateInputs=()=>{let{inputs:e}=this.meshTxBuilderBody,t=s=>`${s.txHash}#${s.txIndex}`,i=[],r=[];for(let s=0;s<e.length;s+=1){let a=e[s],u=t(a.txIn);i.includes(u)?(e.splice(s,1),s-=1):r.push(a)}this.meshTxBuilderBody.inputs=r};this.emptyTxBuilderBody=()=>(this.meshTxBuilderBody=(0,h.emptyTxBuilderBody)(),h.emptyTxBuilderBody);this.reset=()=>{this.meshTxBuilderBody=(0,h.emptyTxBuilderBody)(),this.txEvaluationMultiplier=1.1,this.txOutput=void 0,this.addingPlutusScriptInput=!1,this.plutusSpendingScriptVersion=void 0,this.addingPlutusMint=!1,this.plutusMintingScriptVersion=void 0,this.addingPlutusWithdrawal=!1,this.plutusWithdrawalScriptVersion=void 0,this._protocolParams=h.DEFAULT_PROTOCOL_PARAMETERS,this.mintItem=void 0,this.txInQueueItem=void 0,this.withdrawalItem=void 0,this.collateralQueueItem=void 0,this.refScriptTxInQueueItem=void 0};this.meshTxBuilderBody=(0,h.emptyTxBuilderBody)()}};var B=class extends O{constructor({serializer:t,fetcher:i,submitter:r,evaluator:s,params:a,isHydra:u=!1}={}){super();this.txHex="";this.queriedTxHashes=new Set;this.queriedUTxOs={};this.complete=async t=>{t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.removeDuplicateInputs();let{inputs:i,collaterals:r}=this.meshTxBuilderBody,s=[...i,...r].filter(u=>!this.isInputComplete(u));await this.queryAllTxInfo(s),s.forEach(u=>{this.completeTxInformation(u)}),this.addUtxosFromSelection();let a=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams);if(this.evaluator){let u=await this.evaluator.evaluateTx(a).catch(d=>{throw Error(`Tx evaluation failed: ${d}`)});this.updateRedeemer(this.meshTxBuilderBody,u),a=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams)}return console.log(a),this.txHex=a,a};this.completeSync=t=>(t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams));this.completeSigning=()=>{let t=this.serializer.addSigningKeys(this.txHex,this.meshTxBuilderBody.signingKey);return this.txHex=t,t};this.submitTx=async t=>await this.submitter?.submitTx(t);this.getUTxOInfo=async t=>{let i=[];this.queriedTxHashes.has(t)||(this.queriedTxHashes.add(t),i=await this.fetcher?.fetchUTxOs(t)||[],this.queriedUTxOs[t]=i)};this.queryAllTxInfo=t=>{let i=[];if(t.length>0&&!this.fetcher)throw Error("Transaction information is incomplete while no fetcher instance is provided");for(let r=0;r<t.length;r++){let s=t[r];this.isInputInfoComplete(s)||i.push(this.getUTxOInfo(s.txIn.txHash)),s.type==="Script"&&s.scriptTxIn.scriptSource?.type==="Inline"&&!this.isRefScriptInfoComplete(s)&&i.push(this.getUTxOInfo(s.scriptTxIn.scriptSource.txHash))}return Promise.all(i)};this.completeTxInformation=t=>{if(!this.isInputInfoComplete(t)){let r=this.queriedUTxOs[t.txIn.txHash]?.find(u=>u.input.outputIndex===t.txIn.txIndex),s=r?.output.amount,a=r?.output.address;if(!s||s.length===0)throw Error(`Couldn't find value information for ${t.txIn.txHash}#${t.txIn.txIndex}`);if(t.txIn.amount=s,t.type==="PubKey"){if(!a||a==="")throw Error(`Couldn't find address information for ${t.txIn.txHash}#${t.txIn.txIndex}`);t.txIn.address=a}}if(t.type==="Script"&&t.scriptTxIn.scriptSource?.type=="Inline"&&!this.isRefScriptInfoComplete(t)){let i=t.scriptTxIn.scriptSource,s=this.queriedUTxOs[i.txHash].find(a=>a.input.outputIndex===i.txIndex);if(!s)throw Error(`Couldn't find script reference utxo for ${i.txHash}#${i.txIndex}`);i.scriptHash=s?.output.scriptHash}};this.isInputComplete=t=>t.type==="PubKey"?this.isInputInfoComplete(t):t.type==="Script"?this.isInputInfoComplete(t)&&this.isRefScriptInfoComplete(t):!0;this.isInputInfoComplete=t=>{let{amount:i,address:r}=t.txIn;return!(t.type==="PubKey"&&(!i||!r)||t.type==="Script"&&!i)};this.isRefScriptInfoComplete=t=>{let{scriptSource:i}=t.scriptTxIn;return!(i?.type==="Inline"&&!i?.scriptHash)};t?this.serializer=t:this.serializer=new K.CSLSerializer,i&&(this.fetcher=i),r&&(this.submitter=r),s&&(this.evaluator=s),a&&this.protocolParams(a),u&&this.protocolParams({minFeeA:0,minFeeB:0,priceMem:0,priceStep:0,collateralPercent:0,coinsPerUtxoSize:0})}};var I=require("@meshsdk/core-cst"),N=class{static withOneSignature(e){let t=(0,I.deserializeEd25519KeyHash)((0,I.resolvePaymentKeyHash)(e));return(0,I.buildScriptPubkey)(t).toCbor()}static fromNativeScript(e){return(0,I.toNativeScript)(e).toCbor()}};var c=require("@meshsdk/common");var g=require("@meshsdk/core-cst"),D=class{constructor(e){this.isCollateralNeeded=!1;this.txBuilder=new B(e),this.initiator=e.initiator}sendAssets(e,t){return typeof t=="string"&&(t=[{unit:"lovelace",quantity:t}]),typeof e=="string"&&this.txBuilder.txOut(e,t),typeof e=="object"&&(this.txBuilder.txOut(e.address,t),e.datum&&(e.datum.inline?this.txBuilder.txOutInlineDatumValue(e.datum.value):this.txBuilder.txOutDatumHashValue(e.datum.value))),this}sendLovelace(e,t){return this.sendAssets(e,t)}sendToken(e,t,i){let r=[{unit:c.SUPPORTED_TOKENS[t],quantity:i}];return this.sendAssets(e,r)}sendValue(e,t){let i=t.output.amount;return this.sendAssets(e,i)}setTxInputs(e){return e.forEach(t=>{this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setTxRefInputs(e){return e.forEach(t=>{this.txBuilder.readOnlyTxInReference(t.input.txHash,t.input.outputIndex)}),this}setNativeScriptInput(e,t){let{scriptCbor:i}=this.txBuilder.serializer.deserializer.script.deserializeNativeScript(e);return this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i),this}redeemValue(e){let{value:t,script:i,datum:r,redeemer:s}=e,a=s||{data:{alternative:0,fields:["mesh"]},budget:c.DEFAULT_REDEEMER_BUDGET};if("code"in i&&(this.isCollateralNeeded=!0,this.spendingPlutusScript(i).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i.code).txInRedeemerValue(a.data,"Mesh",a.budget)),"output"in i){if(!i.output.scriptRef)throw new Error("redeemValue: No script reference found in UTxO");let u=(0,g.fromScriptRef)(i.output.scriptRef);if(!u||!("code"in u))throw new Error("redeemValue: Script reference not found");this.isCollateralNeeded=!0,this.spendingPlutusScript(u).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).spendingTxInReference(i.input.txHash,i.input.outputIndex,i.output.scriptHash).txInRedeemerValue(a.data,"Mesh",a.budget)}return r?this.txBuilder.txInDatumValue(r):this.txBuilder.txInInlineDatumPresent(),this}mintAsset(e,t,i){let r=t.assetQuantity,s=(0,c.stringToHex)(t.assetName),a=(0,c.CIP68_100)(s);t.cip68ScriptAddress&&(s=(0,c.CIP68_222)(s));let u="";switch(typeof e){case"string":u=(0,g.deserializeNativeScript)(e).hash().toString(),this.txBuilder.mint(r,u,s).mintingScript(e),t.cip68ScriptAddress&&this.txBuilder.mint(r,u,a).mintingScript(e);break;case"object":if(!i)throw new Error("burnAsset: Redeemer data is required for Plutus minting");if("code"in e){u=(0,g.deserializePlutusScript)(e.code,e.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(e).mint(r,u,s).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress&&this.mintPlutusScript(e).mint(r,u,a).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget);break}if("output"in e){if(!e.output.scriptRef)throw new Error("mintAsset: No script reference found in UTxO");let d=(0,g.fromScriptRef)(e.output.scriptRef);if(!d)throw new Error("mintAsset: Script reference not found");if("code"in d){if(u=(0,g.deserializePlutusScript)(d.code,d.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(d).mint(r,u,s).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress){this.mintPlutusScript(d).mint(r,u,a).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget);break}break}else throw new Error("mintAsset: Reference script minting not implemented")}break}return t.metadata&&t.label&&this.setMetadata(Number(t.label),{[u]:{[t.assetName]:t.metadata},version:1}),t.recipient&&this.sendAssets(t.recipient,[{unit:u+s,quantity:t.assetQuantity}]),t.cip68ScriptAddress&&this.sendAssets({address:t.cip68ScriptAddress,datum:{inline:!0,value:(0,c.metadataToCip68)(t.metadata)}},[{unit:u+a,quantity:t.assetQuantity}]),this}burnAsset(e,t,i){let r="-"+t.quantity,s={assetName:(0,c.hexToString)(t.unit.slice(c.POLICY_ID_LENGTH)),assetQuantity:r};try{this.mintAsset(e,s,i)}catch(a){throw new Error("burnAsset: "+a)}return this}setChangeAddress(e){return this.txBuilder.changeAddress(e),this}setCollateral(e){return e.forEach(t=>{this.txBuilder.txInCollateral(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setRequiredSigners(e){return e.forEach(t=>{let{pubKeyHash:i}=this.txBuilder.serializer.deserializer.key.deserializeAddress(t);this.txBuilder.requiredSignerHash(i)}),this}setTimeToExpire(e){return this.txBuilder.invalidHereafter(Number(e)),this}setTimeToStart(e){return this.txBuilder.invalidBefore(Number(e)),this}setMetadata(e,t){return this.txBuilder.metadataValue(e.toString(),t),this}withdrawRewards(e,t){return this.txBuilder.withdrawal(e,t),this}delegateStake(e,t){return this.txBuilder.delegateStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e),this.txBuilder.serializer.resolver.keys.resolveEd25519KeyHash(t)),this}deregisterStake(e){return this.txBuilder.deregisterStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerStake(e){return this.txBuilder.registerStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerPool(e){return this.txBuilder.registerPoolCertificate(e),this}retirePool(e,t){return this.txBuilder.retirePoolCertificate(e,t),this}async build(){try{return await this.addCollateralIfNeeded(),await this.addTxInputsAsNeeded(),await this.addChangeAddress(),this.txBuilder.complete()}catch(e){throw new Error(`[Transaction] An error occurred during build: ${e}.`)}}mintPlutusScript(e){switch(e.version){case"V1":this.txBuilder.mintPlutusScriptV1();break;case"V2":this.txBuilder.mintPlutusScriptV2();break;case"V3":this.txBuilder.mintPlutusScriptV3();break}return this.txBuilder}spendingPlutusScript(e){switch(e.version){case"V1":this.txBuilder.spendingPlutusScriptV1();break;case"V2":this.txBuilder.spendingPlutusScriptV2();break;case"V3":this.txBuilder.spendingPlutusScriptV3();break}return this.txBuilder}async addCollateralIfNeeded(){if(this.isCollateralNeeded){let e=await this.initiator.getCollateral();this.setCollateral(e)}}async addTxInputsAsNeeded(){let e=await this.initiator.getUtxos();this.txBuilder.selectUtxosFrom(e)}async addChangeAddress(){if(this.txBuilder.meshTxBuilderBody.changeAddress===""){let e=await this.initiator.getChangeAddress();this.setChangeAddress(e)}}};0&&(module.exports={ForgeScript,MeshTxBuilder,Transaction,UtxoSelection,experimentalSelectUtxos,keepRelevant,largestFirst,largestFirstMultiAsset});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DEFAULT_REDEEMER_BUDGET as f,DEFAULT_PROTOCOL_PARAMETERS as P,emptyTxBuilderBody as w}from"@meshsdk/common";import q from"json-bigint";import{BigNum as R}from"@meshsdk/common";import{BigNum as p}from"@meshsdk/common";import{resolveTxFees as L}from"@meshsdk/common";var z=(a,e)=>Array.from(e,t=>({unit:t[0],quantity:p.new(t[1])})).every(t=>a.filter(i=>i.output.amount.find(r=>r.unit===t.unit)!==void 0).reduce((i,r)=>{let s=r.output.amount.reduce((u,n)=>u.checkedAdd(p.new(t.unit===n.unit?n.quantity:"0")),p.new("0"));return i.checkedAdd(s)},p.new("0")).lessThan(t.quantity)===!1),I=(a,e)=>{let t=p.new(a.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0");return p.new(e.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0").compare(t)},U=a=>{let{maxTxSize:e,minFeeA:t,minFeeB:i}=a;return p.new(L(e,t,i))},T=a=>a.output.amount.length>1,O=a=>a.reduce((e,t)=>{let i=t.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0";return e.checkedAdd(p.new(i))},p.new("0")),M=(a,e)=>{let t=e.sort(I);return x(t,new Map([["lovelace",a]]))},x=(a,e,t=[])=>a.length===0||z(t,e)?t:K(a[0],e)?x(a.slice(1),e,[...t,a[0]]):x(a.slice(1),e,t),K=(a,e)=>Array.from(e.keys()).some(t=>a.output.amount.find(i=>i.unit===t)!==void 0);var A=(a,e,t="5000000")=>{let i=R.new(a.get("lovelace")??"0").checkedAdd(R.new(t)),r=e.filter(n=>n.output.amount.filter(d=>d.unit!=="lovelace").some(d=>a.has(d.unit))),s=O(r);return[...s.lessThan(i)?M(i.clampedSub(s).toString(),e.filter(n=>!r.some(d=>d.input.txHash===n.input.txHash&&d.input.outputIndex===n.input.outputIndex))):[],...r]};import{DEFAULT_PROTOCOL_PARAMETERS as F,BigNum as E,resolveTxFees as _}from"@meshsdk/common";var V=(a,e,t=!1,{maxTxSize:i,minFeeA:r,minFeeB:s}=F)=>{let u=e.filter(g=>T(g)===!1).sort(I),n=E.new(_(i,r,s)),d=t?E.new(a).checkedAdd(n).toString():a;return x(u,new Map([["lovelace",d]]))};import{BigNum as J,DEFAULT_PROTOCOL_PARAMETERS as $}from"@meshsdk/common";var Q=(a,e,t=!1,i=$)=>{let r=e.filter(T).sort(I),s=U(i),u=a.get("lovelace")??"0",n=t?J.new(u).checkedAdd(s).toString():u;return a.set("lovelace",n),x(r,a)};var y=(a,e,t)=>{let i=new Map(a);i.set("lovelace",String(Number(i.get("lovelace")||0)+Number(t)));let r=new Map;for(let o=0;o<e.length;o++)r.set(o,e[o]);let s=new Set,u=new Set,n=new Set,d=new Set,h=new Set;for(let o=0;o<e.length;o++)switch(e[o].output.amount.length){case 1:{u.add(o);break}case 2:{n.add(o);break}case 3:{d.add(o);break}default:{h.add(o);break}}let m=(o,l,c)=>{let b=r.get(o);if(!b)return;let W=j(b,l);if(Number(W)>0){s.add(o),c.delete(o);for(let v of b.output.amount)i.set(v.unit,String(Number(i.get(v.unit))-Number(v.quantity)))}};for(let o of i.keys())if(o!="lovelace"){for(let l of n){let c=i.get(o);if(!c||Number(c)<=0)break;m(l,o,n)}for(let l of d){let c=i.get(o);if(!c||Number(c)<=0)break;m(l,o,d)}for(let l of h){let c=i.get(o);if(!c||Number(c)<=0)break;m(l,o,h)}}for(let o of u){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",u)}for(let o of n){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",n)}for(let o of d){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",d)}for(let o of h){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",h)}for(let o of i.keys())if(Number(i.get(o))>0)return console.log("Insufficient funds for",o),console.log("Remaining quantity",Number(i.get(o))),[];let g=[];for(let o of s){let l=r.get(o);l&&g.push(l)}return g},j=(a,e)=>{for(let t of a.output.amount)if(t.unit==e)return t.quantity;return"0"};var k=class{constructor(){}largestFirst(e,t,i="5000000"){let r=e.get("lovelace")??"0",s=BigInt(r)+BigInt(i);return V(s.toString(),t,!1)}keepRelevant(e,t,i="5000000"){return A(e,t,i)}largestFirstMultiAsset(e,t,i){let r=e.get("lovelace")??"0";return e.set("lovelace",(BigInt(r)+BigInt(i)).toString()),Q(e,t,!1)}experimental(e,t,i){return y(e,t,i)}};var S=class{constructor(){this.txEvaluationMultiplier=1.1;this.addingPlutusScriptInput=!1;this.addingPlutusMint=!1;this.addingPlutusWithdrawal=!1;this._protocolParams=P;this.txIn=(e,t,i,r)=>(this.txInQueueItem&&this.queueInput(),this.addingPlutusScriptInput?this.txInQueueItem={type:"Script",txIn:{txHash:e,txIndex:t,amount:i,address:r},scriptTxIn:{}}:this.txInQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this.addingPlutusScriptInput=!1,this);this.txInScript=e=>{if(!this.txInQueueItem)throw Error("Undefined input");return this.txInQueueItem.type==="PubKey"&&(this.txInQueueItem={type:"SimpleScript",txIn:this.txInQueueItem.txIn,simpleScriptTxIn:{scriptSource:{type:"Provided",script:e}}}),this.txInQueueItem.type==="Script"&&(this.txInQueueItem.scriptTxIn.scriptSource={type:"Provided",script:{code:e,version:this.plutusSpendingScriptVersion||"V2"}}),this};this.txInDatumValue=(e,t="Mesh")=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Datum value attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Datum value attempted to be called on a simple script input");let i=e;return t==="JSON"&&(i=this.castRawDataToJsonString(e)),t==="Mesh"?(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:e}},this):(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:i}},this)};this.txInInlineDatumPresent=()=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Inline datum present attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Inline datum present attempted to be called on a simple script input");let{txHash:e,txIndex:t}=this.txInQueueItem.txIn;return e&&t.toString()&&(this.txInQueueItem.scriptTxIn.datumSource={type:"Inline",txHash:e,txIndex:t}),this};this.txInRedeemerValue=(e,t="Mesh",i={...f})=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference redeemer attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference redeemer attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.txOut=(e,t)=>(this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txOutput={address:e,amount:t},this);this.txOutDatumHashValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Hash",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Hash",data:{type:t,content:i}}}return this};this.txOutInlineDatumValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Inline",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Inline",data:{type:t,content:i}}}return this};this.txOutReferenceScript=(e,t="V2")=>(this.txOutput&&(this.txOutput.referenceScript={code:e,version:t}),this);this.spendingPlutusScriptV1=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V1",this);this.spendingPlutusScriptV2=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V2",this);this.spendingPlutusScriptV3=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V3",this);this.spendingTxInReference=(e,t,i)=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusSpendingScriptVersion||"V2",scriptSize:"0"},this};this.spendingReferenceTxInInlineDatumPresent=()=>(this.txInInlineDatumPresent(),this);this.spendingReferenceTxInRedeemerValue=(e,t="Mesh",i={...f})=>(this.txInRedeemerValue(e,t,i),this);this.readOnlyTxInReference=(e,t)=>(this.meshTxBuilderBody.referenceInputs.push({txHash:e,txIndex:t}),this);this.mintPlutusScriptV1=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V1",this);this.mintPlutusScriptV2=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V2",this);this.mintPlutusScriptV3=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V3",this);this.mint=(e,t,i)=>(this.mintItem&&this.queueMint(),this.mintItem={type:this.addingPlutusMint?"Plutus":"Native",policyId:t,assetName:i,amount:e},this.addingPlutusMint=!1,this);this.mintingScript=e=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");return this.mintItem.type==="Native"&&(this.mintItem.scriptSource={type:"Provided",scriptCode:e}),this.mintItem.type==="Plutus"&&(this.mintItem.scriptSource={type:"Provided",script:{code:e,version:this.plutusMintingScriptVersion||"V2"}}),this};this.mintTxInReference=(e,t)=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.scriptSource={type:"Inline",txHash:e,txIndex:t,version:this.plutusMintingScriptVersion,scriptSize:"0",scriptHash:""},this};this.mintReferenceTxInRedeemerValue=(e,t="Mesh",i={...f})=>{if(!this.mintItem)throw Error("Undefined mint");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(this.mintItem.type=="Plutus"&&!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.mintRedeemerValue=(e,t="Mesh",i={...f})=>(this.mintReferenceTxInRedeemerValue(e,t,i),this);this.requiredSignerHash=e=>(this.meshTxBuilderBody.requiredSignatures.push(e),this);this.txInCollateral=(e,t,i,r)=>(this.collateralQueueItem&&this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this);this.withdrawalPlutusScriptV1=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V1",this);this.withdrawalPlutusScriptV2=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V2",this);this.withdrawalPlutusScriptV3=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V3",this);this.withdrawal=(e,t)=>{if(this.withdrawalItem&&this.queueWithdrawal(),this.addingPlutusWithdrawal){let r={plutusScriptWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(r),this}let i={pubKeyWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(i),this};this.withdrawalScript=(e,t)=>{if(!this.withdrawalItem)throw Error("withdrawalScript: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalScript: Adding script to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Provided",script:{code:e,version:this.plutusWithdrawalScriptVersion||"V2"}},this};this.withdrawalTxInReference=(e,t,i,r)=>{if(!this.withdrawalItem)throw Error("withdrawalTxInReference: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalTxInReference: Adding script reference to non plutus withdrawal");this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusWithdrawalScriptVersion||"V2",scriptSize:r||"0"}};this.withdrawalRedeemerValue=(e,t="Mesh",i={...f})=>{if(!this.withdrawalItem)throw Error("withdrawalRedeemerValue: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalRedeemerValue: Adding redeemer to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.registerPoolCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterPool",poolParams:e}),this);this.registerStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterStake",stakeKeyHash:e}),this);this.delegateStakeCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"DelegateStake",stakeKeyHash:e,poolId:t}),this);this.deregisterStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"DeregisterStake",stakeKeyHash:e}),this);this.retirePoolCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"RetirePool",poolId:e,epoch:t}),this);this.changeAddress=e=>(this.meshTxBuilderBody.changeAddress=e,this);this.invalidBefore=e=>(this.meshTxBuilderBody.validityRange.invalidBefore=e,this);this.invalidHereafter=e=>(this.meshTxBuilderBody.validityRange.invalidHereafter=e,this);this.metadataValue=(e,t)=>{let i=q.stringify(t);return this.meshTxBuilderBody.metadata.push({tag:e,metadata:i}),this};this.signingKey=e=>(this.meshTxBuilderBody.signingKey.push(e),this);this.selectUtxosFrom=(e,t=5e6)=>(this.meshTxBuilderBody.extraInputs=e,this.meshTxBuilderBody.selectionThreshold=t,this);this.protocolParams=e=>{let t={...P,...e};return this._protocolParams=t,this};this.queueAllLastItem=()=>{this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txInQueueItem&&this.queueInput(),this.collateralQueueItem&&(this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem=void 0),this.mintItem&&this.queueMint(),this.withdrawalItem&&this.queueWithdrawal()};this.queueInput=()=>{if(!this.txInQueueItem)throw Error("queueInput: Undefined input");if(this.txInQueueItem.type==="Script")if(this.txInQueueItem.scriptTxIn){if(!this.txInQueueItem.scriptTxIn.datumSource)throw Error("queueInput: Script input does not contain datum information");if(!this.txInQueueItem.scriptTxIn.redeemer)throw Error("queueInput: Script input does not contain redeemer information");if(!this.txInQueueItem.scriptTxIn.scriptSource)throw Error("queueInput: Script input does not contain script information")}else throw Error("queueInput: Script input does not contain script, datum, or redeemer information");this.meshTxBuilderBody.inputs.push(this.txInQueueItem),this.txInQueueItem=void 0};this.queueMint=()=>{if(!this.mintItem)throw Error("queueMint: Undefined mint");if(!this.mintItem.scriptSource)throw Error("queueMint: Missing mint script information");this.meshTxBuilderBody.mints.push(this.mintItem),this.mintItem=void 0};this.queueWithdrawal=()=>{if(!this.withdrawalItem)throw Error("queueWithdrawal: Undefined withdrawal");if("plutusScriptWithdrawal"in this.withdrawalItem){if(!this.withdrawalItem.plutusScriptWithdrawal.scriptSource)throw Error("queueWithdrawal: Missing withdrawal script information");if(!this.withdrawalItem.plutusScriptWithdrawal.redeemer)throw Error("queueWithdrawal: Missing withdrawal redeemer information")}this.meshTxBuilderBody.withdrawals.push(this.withdrawalItem),this.withdrawalItem=void 0};this.castRawDataToJsonString=e=>typeof e=="object"?q.stringify(e):e;this.castBuilderDataToRedeemer=(e,t="Mesh",i={...f})=>{let r,s=e;return t==="Mesh"?(r={data:{type:t,content:s},exUnits:i},r):(t==="JSON"&&(s=this.castRawDataToJsonString(e)),r={data:{type:t,content:s},exUnits:i},r)};this.updateRedeemer=(e,t)=>{t.forEach(i=>{switch(i.tag){case"SPEND":{let r=e.inputs[i.index];r.type=="Script"&&r.scriptTxIn.redeemer&&(r.scriptTxIn.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.scriptTxIn.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"MINT":{let r=e.mints[i.index];r.type=="Plutus"&&r.redeemer&&(r.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"CERT":break;case"REWARD":break}})};this.addUtxosFromSelection=()=>{let e=this.meshTxBuilderBody.outputs.reduce((i,r)=>(r.amount.forEach(u=>{let{unit:n,quantity:d}=u,h=Number(i.get(n))||0;i.set(n,String(h+Number(d)))}),i),new Map);this.meshTxBuilderBody.inputs.reduce((i,r)=>(r.txIn.amount?.forEach(u=>{let{unit:n,quantity:d}=u,h=Number(i.get(n))||0;i.set(n,String(h-Number(d)))}),i),e),this.meshTxBuilderBody.mints.reduce((i,r)=>{let s={unit:r.policyId+r.assetName,quantity:String(r.amount)},u=Number(i.get(s.unit))||0;return i.set(s.unit,String(u-Number(s.quantity))),i},e),y(e,this.meshTxBuilderBody.extraInputs,this.meshTxBuilderBody.selectionThreshold.toString()).forEach(i=>{let r={type:"PubKey",txIn:{txHash:i.input.txHash,txIndex:i.input.outputIndex,amount:i.output.amount,address:i.output.address}};this.meshTxBuilderBody.inputs.push(r)})};this.removeDuplicateInputs=()=>{let{inputs:e}=this.meshTxBuilderBody,t=s=>`${s.txHash}#${s.txIndex}`,i=[],r=[];for(let s=0;s<e.length;s+=1){let u=e[s],n=t(u.txIn);i.includes(n)?(e.splice(s,1),s-=1):r.push(u)}this.meshTxBuilderBody.inputs=r};this.emptyTxBuilderBody=()=>(this.meshTxBuilderBody=w(),w);this.reset=()=>{this.meshTxBuilderBody=w(),this.txEvaluationMultiplier=1.1,this.txOutput=void 0,this.addingPlutusScriptInput=!1,this.plutusSpendingScriptVersion=void 0,this.addingPlutusMint=!1,this.plutusMintingScriptVersion=void 0,this.addingPlutusWithdrawal=!1,this.plutusWithdrawalScriptVersion=void 0,this._protocolParams=P,this.mintItem=void 0,this.txInQueueItem=void 0,this.withdrawalItem=void 0,this.collateralQueueItem=void 0,this.refScriptTxInQueueItem=void 0};this.meshTxBuilderBody=w()}};import{CSLSerializer as G}from"@meshsdk/core-csl";var B=class extends S{constructor({serializer:t,fetcher:i,submitter:r,evaluator:s,params:u,isHydra:n=!1}={}){super();this.txHex="";this.queriedTxHashes=new Set;this.queriedUTxOs={};this.complete=async t=>{t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.removeDuplicateInputs();let{inputs:i,collaterals:r}=this.meshTxBuilderBody,s=[...i,...r].filter(n=>!this.isInputComplete(n));await this.queryAllTxInfo(s),s.forEach(n=>{this.completeTxInformation(n)}),this.addUtxosFromSelection();let u=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams);if(this.evaluator){let n=await this.evaluator.evaluateTx(u).catch(d=>{throw Error(`Tx evaluation failed: ${d}`)});this.updateRedeemer(this.meshTxBuilderBody,n),u=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams)}return console.log(u),this.txHex=u,u};this.completeSync=t=>(t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams));this.completeSigning=()=>{let t=this.serializer.addSigningKeys(this.txHex,this.meshTxBuilderBody.signingKey);return this.txHex=t,t};this.submitTx=async t=>await this.submitter?.submitTx(t);this.getUTxOInfo=async t=>{let i=[];this.queriedTxHashes.has(t)||(this.queriedTxHashes.add(t),i=await this.fetcher?.fetchUTxOs(t)||[],this.queriedUTxOs[t]=i)};this.queryAllTxInfo=t=>{let i=[];if(t.length>0&&!this.fetcher)throw Error("Transaction information is incomplete while no fetcher instance is provided");for(let r=0;r<t.length;r++){let s=t[r];this.isInputInfoComplete(s)||i.push(this.getUTxOInfo(s.txIn.txHash)),s.type==="Script"&&s.scriptTxIn.scriptSource?.type==="Inline"&&!this.isRefScriptInfoComplete(s)&&i.push(this.getUTxOInfo(s.scriptTxIn.scriptSource.txHash))}return Promise.all(i)};this.completeTxInformation=t=>{if(!this.isInputInfoComplete(t)){let r=this.queriedUTxOs[t.txIn.txHash]?.find(n=>n.input.outputIndex===t.txIn.txIndex),s=r?.output.amount,u=r?.output.address;if(!s||s.length===0)throw Error(`Couldn't find value information for ${t.txIn.txHash}#${t.txIn.txIndex}`);if(t.txIn.amount=s,t.type==="PubKey"){if(!u||u==="")throw Error(`Couldn't find address information for ${t.txIn.txHash}#${t.txIn.txIndex}`);t.txIn.address=u}}if(t.type==="Script"&&t.scriptTxIn.scriptSource?.type=="Inline"&&!this.isRefScriptInfoComplete(t)){let i=t.scriptTxIn.scriptSource,s=this.queriedUTxOs[i.txHash].find(u=>u.input.outputIndex===i.txIndex);if(!s)throw Error(`Couldn't find script reference utxo for ${i.txHash}#${i.txIndex}`);i.scriptHash=s?.output.scriptHash}};this.isInputComplete=t=>t.type==="PubKey"?this.isInputInfoComplete(t):t.type==="Script"?this.isInputInfoComplete(t)&&this.isRefScriptInfoComplete(t):!0;this.isInputInfoComplete=t=>{let{amount:i,address:r}=t.txIn;return!(t.type==="PubKey"&&(!i||!r)||t.type==="Script"&&!i)};this.isRefScriptInfoComplete=t=>{let{scriptSource:i}=t.scriptTxIn;return!(i?.type==="Inline"&&!i?.scriptHash)};t?this.serializer=t:this.serializer=new G,i&&(this.fetcher=i),r&&(this.submitter=r),s&&(this.evaluator=s),u&&this.protocolParams(u),n&&this.protocolParams({minFeeA:0,minFeeB:0,priceMem:0,priceStep:0,collateralPercent:0,coinsPerUtxoSize:0})}};import{buildScriptPubkey as Y,deserializeEd25519KeyHash as X,toNativeScript as Z,resolvePaymentKeyHash as tt}from"@meshsdk/core-cst";var N=class{static withOneSignature(e){let t=X(tt(e));return Y(t).toCbor()}static fromNativeScript(e){return Z(e).toCbor()}};import{CIP68_100 as et,CIP68_222 as it,DEFAULT_REDEEMER_BUDGET as rt,POLICY_ID_LENGTH as st,SUPPORTED_TOKENS as nt,hexToString as ut,metadataToCip68 as at,stringToHex as ot}from"@meshsdk/common";import{deserializeNativeScript as dt,deserializePlutusScript as D,fromScriptRef as H}from"@meshsdk/core-cst";var C=class{constructor(e){this.isCollateralNeeded=!1;this.txBuilder=new B(e),this.initiator=e.initiator}sendAssets(e,t){return typeof t=="string"&&(t=[{unit:"lovelace",quantity:t}]),typeof e=="string"&&this.txBuilder.txOut(e,t),typeof e=="object"&&(this.txBuilder.txOut(e.address,t),e.datum&&(e.datum.inline?this.txBuilder.txOutInlineDatumValue(e.datum.value):this.txBuilder.txOutDatumHashValue(e.datum.value))),this}sendLovelace(e,t){return this.sendAssets(e,t)}sendToken(e,t,i){let r=[{unit:nt[t],quantity:i}];return this.sendAssets(e,r)}sendValue(e,t){let i=t.output.amount;return this.sendAssets(e,i)}setTxInputs(e){return e.forEach(t=>{this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setTxRefInputs(e){return e.forEach(t=>{this.txBuilder.readOnlyTxInReference(t.input.txHash,t.input.outputIndex)}),this}setNativeScriptInput(e,t){let{scriptCbor:i}=this.txBuilder.serializer.deserializer.script.deserializeNativeScript(e);return this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i),this}redeemValue(e){let{value:t,script:i,datum:r,redeemer:s}=e,u=s||{data:{alternative:0,fields:["mesh"]},budget:rt};if("code"in i&&(this.isCollateralNeeded=!0,this.spendingPlutusScript(i).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i.code).txInRedeemerValue(u.data,"Mesh",u.budget)),"output"in i){if(!i.output.scriptRef)throw new Error("redeemValue: No script reference found in UTxO");let n=H(i.output.scriptRef);if(!n||!("code"in n))throw new Error("redeemValue: Script reference not found");this.isCollateralNeeded=!0,this.spendingPlutusScript(n).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).spendingTxInReference(i.input.txHash,i.input.outputIndex,i.output.scriptHash).txInRedeemerValue(u.data,"Mesh",u.budget)}return r?this.txBuilder.txInDatumValue(r):this.txBuilder.txInInlineDatumPresent(),this}mintAsset(e,t,i){let r=t.assetQuantity,s=ot(t.assetName),u=et(s);t.cip68ScriptAddress&&(s=it(s));let n="";switch(typeof e){case"string":n=dt(e).hash().toString(),this.txBuilder.mint(r,n,s).mintingScript(e),t.cip68ScriptAddress&&this.txBuilder.mint(r,n,u).mintingScript(e);break;case"object":if(!i)throw new Error("burnAsset: Redeemer data is required for Plutus minting");if("code"in e){n=D(e.code,e.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(e).mint(r,n,s).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress&&this.mintPlutusScript(e).mint(r,n,u).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget);break}if("output"in e){if(!e.output.scriptRef)throw new Error("mintAsset: No script reference found in UTxO");let d=H(e.output.scriptRef);if(!d)throw new Error("mintAsset: Script reference not found");if("code"in d){if(n=D(d.code,d.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(d).mint(r,n,s).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress){this.mintPlutusScript(d).mint(r,n,u).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget);break}break}else throw new Error("mintAsset: Reference script minting not implemented")}break}return t.metadata&&t.label&&this.setMetadata(Number(t.label),{[n]:{[t.assetName]:t.metadata},version:1}),t.recipient&&this.sendAssets(t.recipient,[{unit:n+s,quantity:t.assetQuantity}]),t.cip68ScriptAddress&&this.sendAssets({address:t.cip68ScriptAddress,datum:{inline:!0,value:at(t.metadata)}},[{unit:n+u,quantity:t.assetQuantity}]),this}burnAsset(e,t,i){let r="-"+t.quantity,s={assetName:ut(t.unit.slice(st)),assetQuantity:r};try{this.mintAsset(e,s,i)}catch(u){throw new Error("burnAsset: "+u)}return this}setChangeAddress(e){return this.txBuilder.changeAddress(e),this}setCollateral(e){return e.forEach(t=>{this.txBuilder.txInCollateral(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setRequiredSigners(e){return e.forEach(t=>{let{pubKeyHash:i}=this.txBuilder.serializer.deserializer.key.deserializeAddress(t);this.txBuilder.requiredSignerHash(i)}),this}setTimeToExpire(e){return this.txBuilder.invalidHereafter(Number(e)),this}setTimeToStart(e){return this.txBuilder.invalidBefore(Number(e)),this}setMetadata(e,t){return this.txBuilder.metadataValue(e.toString(),t),this}withdrawRewards(e,t){return this.txBuilder.withdrawal(e,t),this}delegateStake(e,t){return this.txBuilder.delegateStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e),this.txBuilder.serializer.resolver.keys.resolveEd25519KeyHash(t)),this}deregisterStake(e){return this.txBuilder.deregisterStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerStake(e){return this.txBuilder.registerStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerPool(e){return this.txBuilder.registerPoolCertificate(e),this}retirePool(e,t){return this.txBuilder.retirePoolCertificate(e,t),this}async build(){try{return await this.addCollateralIfNeeded(),await this.addTxInputsAsNeeded(),await this.addChangeAddress(),this.txBuilder.complete()}catch(e){throw new Error(`[Transaction] An error occurred during build: ${e}.`)}}mintPlutusScript(e){switch(e.version){case"V1":this.txBuilder.mintPlutusScriptV1();break;case"V2":this.txBuilder.mintPlutusScriptV2();break;case"V3":this.txBuilder.mintPlutusScriptV3();break}return this.txBuilder}spendingPlutusScript(e){switch(e.version){case"V1":this.txBuilder.spendingPlutusScriptV1();break;case"V2":this.txBuilder.spendingPlutusScriptV2();break;case"V3":this.txBuilder.spendingPlutusScriptV3();break}return this.txBuilder}async addCollateralIfNeeded(){if(this.isCollateralNeeded){let e=await this.initiator.getCollateral();this.setCollateral(e)}}async addTxInputsAsNeeded(){let e=await this.initiator.getUtxos();this.txBuilder.selectUtxosFrom(e)}async addChangeAddress(){if(this.txBuilder.meshTxBuilderBody.changeAddress===""){let e=await this.initiator.getChangeAddress();this.setChangeAddress(e)}}};export{N as ForgeScript,B as MeshTxBuilder,C as Transaction,k as UtxoSelection,y as experimentalSelectUtxos,A as keepRelevant,V as largestFirst,Q as largestFirstMultiAsset};
|
|
1
|
+
import{CSLSerializer as G}from"@meshsdk/core-csl";import{DEFAULT_REDEEMER_BUDGET as f,DEFAULT_PROTOCOL_PARAMETERS as P,emptyTxBuilderBody as w}from"@meshsdk/common";import q from"json-bigint";import{BigNum as R}from"@meshsdk/common";import{BigNum as p}from"@meshsdk/common";import{resolveTxFees as L}from"@meshsdk/common";var z=(a,e)=>Array.from(e,t=>({unit:t[0],quantity:p.new(t[1])})).every(t=>a.filter(i=>i.output.amount.find(r=>r.unit===t.unit)!==void 0).reduce((i,r)=>{let s=r.output.amount.reduce((u,n)=>u.checkedAdd(p.new(t.unit===n.unit?n.quantity:"0")),p.new("0"));return i.checkedAdd(s)},p.new("0")).lessThan(t.quantity)===!1),I=(a,e)=>{let t=p.new(a.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0");return p.new(e.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0").compare(t)},U=a=>{let{maxTxSize:e,minFeeA:t,minFeeB:i}=a;return p.new(L(e,t,i))},T=a=>a.output.amount.length>1,O=a=>a.reduce((e,t)=>{let i=t.output.amount.find(r=>r.unit==="lovelace")?.quantity??"0";return e.checkedAdd(p.new(i))},p.new("0")),M=(a,e)=>{let t=e.sort(I);return x(t,new Map([["lovelace",a]]))},x=(a,e,t=[])=>a.length===0||z(t,e)?t:K(a[0],e)?x(a.slice(1),e,[...t,a[0]]):x(a.slice(1),e,t),K=(a,e)=>Array.from(e.keys()).some(t=>a.output.amount.find(i=>i.unit===t)!==void 0);var A=(a,e,t="5000000")=>{let i=R.new(a.get("lovelace")??"0").checkedAdd(R.new(t)),r=e.filter(n=>n.output.amount.filter(d=>d.unit!=="lovelace").some(d=>a.has(d.unit))),s=O(r);return[...s.lessThan(i)?M(i.clampedSub(s).toString(),e.filter(n=>!r.some(d=>d.input.txHash===n.input.txHash&&d.input.outputIndex===n.input.outputIndex))):[],...r]};import{DEFAULT_PROTOCOL_PARAMETERS as F,BigNum as E,resolveTxFees as _}from"@meshsdk/common";var V=(a,e,t=!1,{maxTxSize:i,minFeeA:r,minFeeB:s}=F)=>{let u=e.filter(g=>T(g)===!1).sort(I),n=E.new(_(i,r,s)),d=t?E.new(a).checkedAdd(n).toString():a;return x(u,new Map([["lovelace",d]]))};import{BigNum as J,DEFAULT_PROTOCOL_PARAMETERS as $}from"@meshsdk/common";var Q=(a,e,t=!1,i=$)=>{let r=e.filter(T).sort(I),s=U(i),u=a.get("lovelace")??"0",n=t?J.new(u).checkedAdd(s).toString():u;return a.set("lovelace",n),x(r,a)};var y=(a,e,t)=>{let i=new Map(a);i.set("lovelace",String(Number(i.get("lovelace")||0)+Number(t)));let r=new Map;for(let o=0;o<e.length;o++)r.set(o,e[o]);let s=new Set,u=new Set,n=new Set,d=new Set,h=new Set;for(let o=0;o<e.length;o++)switch(e[o].output.amount.length){case 1:{u.add(o);break}case 2:{n.add(o);break}case 3:{d.add(o);break}default:{h.add(o);break}}let m=(o,l,c)=>{let b=r.get(o);if(!b)return;let W=j(b,l);if(Number(W)>0){s.add(o),c.delete(o);for(let v of b.output.amount)i.set(v.unit,String(Number(i.get(v.unit))-Number(v.quantity)))}};for(let o of i.keys())if(o!="lovelace"){for(let l of n){let c=i.get(o);if(!c||Number(c)<=0)break;m(l,o,n)}for(let l of d){let c=i.get(o);if(!c||Number(c)<=0)break;m(l,o,d)}for(let l of h){let c=i.get(o);if(!c||Number(c)<=0)break;m(l,o,h)}}for(let o of u){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",u)}for(let o of n){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",n)}for(let o of d){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",d)}for(let o of h){let l=i.get("lovelace");if(!l||Number(l)<=0)break;m(o,"lovelace",h)}for(let o of i.keys())if(Number(i.get(o))>0)return console.log("Insufficient funds for",o),console.log("Remaining quantity",Number(i.get(o))),[];let g=[];for(let o of s){let l=r.get(o);l&&g.push(l)}return g},j=(a,e)=>{for(let t of a.output.amount)if(t.unit==e)return t.quantity;return"0"};var k=class{constructor(){}largestFirst(e,t,i="5000000"){let r=e.get("lovelace")??"0",s=BigInt(r)+BigInt(i);return V(s.toString(),t,!1)}keepRelevant(e,t,i="5000000"){return A(e,t,i)}largestFirstMultiAsset(e,t,i){let r=e.get("lovelace")??"0";return e.set("lovelace",(BigInt(r)+BigInt(i)).toString()),Q(e,t,!1)}experimental(e,t,i){return y(e,t,i)}};var S=class{constructor(){this.txEvaluationMultiplier=1.1;this.addingPlutusScriptInput=!1;this.addingPlutusMint=!1;this.addingPlutusWithdrawal=!1;this._protocolParams=P;this.txIn=(e,t,i,r)=>(this.txInQueueItem&&this.queueInput(),this.addingPlutusScriptInput?this.txInQueueItem={type:"Script",txIn:{txHash:e,txIndex:t,amount:i,address:r},scriptTxIn:{}}:this.txInQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this.addingPlutusScriptInput=!1,this);this.txInScript=e=>{if(!this.txInQueueItem)throw Error("Undefined input");return this.txInQueueItem.type==="PubKey"&&(this.txInQueueItem={type:"SimpleScript",txIn:this.txInQueueItem.txIn,simpleScriptTxIn:{scriptSource:{type:"Provided",script:e}}}),this.txInQueueItem.type==="Script"&&(this.txInQueueItem.scriptTxIn.scriptSource={type:"Provided",script:{code:e,version:this.plutusSpendingScriptVersion||"V2"}}),this};this.txInDatumValue=(e,t="Mesh")=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Datum value attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Datum value attempted to be called on a simple script input");let i=e;return t==="JSON"&&(i=this.castRawDataToJsonString(e)),t==="Mesh"?(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:e}},this):(this.txInQueueItem.scriptTxIn.datumSource={type:"Provided",data:{type:t,content:i}},this)};this.txInInlineDatumPresent=()=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Inline datum present attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Inline datum present attempted to be called on a simple script input");let{txHash:e,txIndex:t}=this.txInQueueItem.txIn;return e&&t.toString()&&(this.txInQueueItem.scriptTxIn.datumSource={type:"Inline",txHash:e,txIndex:t}),this};this.txInRedeemerValue=(e,t="Mesh",i={...f})=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference redeemer attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference redeemer attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.txOut=(e,t)=>(this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txOutput={address:e,amount:t},this);this.txOutDatumHashValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Hash",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Hash",data:{type:t,content:i}}}return this};this.txOutInlineDatumValue=(e,t="Mesh")=>{let i=e;if(this.txOutput){if(t==="Mesh")return this.txOutput.datum={type:"Inline",data:{type:t,content:i}},this;t==="JSON"&&(i=this.castRawDataToJsonString(e)),this.txOutput.datum={type:"Inline",data:{type:t,content:i}}}return this};this.txOutReferenceScript=(e,t="V2")=>(this.txOutput&&(this.txOutput.referenceScript={code:e,version:t}),this);this.spendingPlutusScriptV1=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V1",this);this.spendingPlutusScriptV2=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V2",this);this.spendingPlutusScriptV3=()=>(this.addingPlutusScriptInput=!0,this.plutusSpendingScriptVersion="V3",this);this.spendingTxInReference=(e,t,i)=>{if(!this.txInQueueItem)throw Error("Undefined input");if(this.txInQueueItem.type==="PubKey")throw Error("Spending tx in reference attempted to be called a non script input");if(this.txInQueueItem.type==="SimpleScript")throw Error("Spending tx in reference attempted to be called on a simple script input");return this.txInQueueItem.scriptTxIn.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusSpendingScriptVersion||"V2",scriptSize:"0"},this};this.spendingReferenceTxInInlineDatumPresent=()=>(this.txInInlineDatumPresent(),this);this.spendingReferenceTxInRedeemerValue=(e,t="Mesh",i={...f})=>(this.txInRedeemerValue(e,t,i),this);this.readOnlyTxInReference=(e,t)=>(this.meshTxBuilderBody.referenceInputs.push({txHash:e,txIndex:t}),this);this.mintPlutusScriptV1=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V1",this);this.mintPlutusScriptV2=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V2",this);this.mintPlutusScriptV3=()=>(this.addingPlutusMint=!0,this.plutusMintingScriptVersion="V3",this);this.mint=(e,t,i)=>(this.mintItem&&this.queueMint(),this.mintItem={type:this.addingPlutusMint?"Plutus":"Native",policyId:t,assetName:i,amount:e},this.addingPlutusMint=!1,this);this.mintingScript=e=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");return this.mintItem.type==="Native"&&(this.mintItem.scriptSource={type:"Provided",scriptCode:e}),this.mintItem.type==="Plutus"&&(this.mintItem.scriptSource={type:"Provided",script:{code:e,version:this.plutusMintingScriptVersion||"V2"}}),this};this.mintTxInReference=(e,t)=>{if(!this.mintItem)throw Error("Undefined mint");if(!this.mintItem.type)throw Error("Mint information missing");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.scriptSource={type:"Inline",txHash:e,txIndex:t,version:this.plutusMintingScriptVersion,scriptSize:"0",scriptHash:""},this};this.mintReferenceTxInRedeemerValue=(e,t="Mesh",i={...f})=>{if(!this.mintItem)throw Error("Undefined mint");if(this.mintItem.type=="Native")throw Error("Mint tx in reference can only be used on plutus script tokens");if(this.mintItem.type=="Plutus"&&!this.mintItem.policyId)throw Error("PolicyId information missing from mint asset");return this.mintItem.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.mintRedeemerValue=(e,t="Mesh",i={...f})=>(this.mintReferenceTxInRedeemerValue(e,t,i),this);this.requiredSignerHash=e=>(this.meshTxBuilderBody.requiredSignatures.push(e),this);this.txInCollateral=(e,t,i,r)=>(this.collateralQueueItem&&this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem={type:"PubKey",txIn:{txHash:e,txIndex:t,amount:i,address:r}},this);this.withdrawalPlutusScriptV1=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V1",this);this.withdrawalPlutusScriptV2=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V2",this);this.withdrawalPlutusScriptV3=()=>(this.addingPlutusWithdrawal=!0,this.plutusWithdrawalScriptVersion="V3",this);this.withdrawal=(e,t)=>{if(this.withdrawalItem&&this.queueWithdrawal(),this.addingPlutusWithdrawal){let r={plutusScriptWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(r),this}let i={pubKeyWithdrawal:{address:e,coin:t}};return this.meshTxBuilderBody.withdrawals.push(i),this};this.withdrawalScript=(e,t)=>{if(!this.withdrawalItem)throw Error("withdrawalScript: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalScript: Adding script to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Provided",script:{code:e,version:this.plutusWithdrawalScriptVersion||"V2"}},this};this.withdrawalTxInReference=(e,t,i,r)=>{if(!this.withdrawalItem)throw Error("withdrawalTxInReference: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalTxInReference: Adding script reference to non plutus withdrawal");this.withdrawalItem.plutusScriptWithdrawal.scriptSource={type:"Inline",txHash:e,txIndex:t,scriptHash:i,version:this.plutusWithdrawalScriptVersion||"V2",scriptSize:r||"0"}};this.withdrawalRedeemerValue=(e,t="Mesh",i={...f})=>{if(!this.withdrawalItem)throw Error("withdrawalRedeemerValue: Undefined withdrawal");if(!("plutusScriptWithdrawal"in this.withdrawalItem))throw Error("withdrawalRedeemerValue: Adding redeemer to non plutus withdrawal");return this.withdrawalItem.plutusScriptWithdrawal.redeemer=this.castBuilderDataToRedeemer(e,t,i),this};this.registerPoolCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterPool",poolParams:e}),this);this.registerStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"RegisterStake",stakeKeyHash:e}),this);this.delegateStakeCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"DelegateStake",stakeKeyHash:e,poolId:t}),this);this.deregisterStakeCertificate=e=>(this.meshTxBuilderBody.certificates.push({type:"DeregisterStake",stakeKeyHash:e}),this);this.retirePoolCertificate=(e,t)=>(this.meshTxBuilderBody.certificates.push({type:"RetirePool",poolId:e,epoch:t}),this);this.changeAddress=e=>(this.meshTxBuilderBody.changeAddress=e,this);this.invalidBefore=e=>(this.meshTxBuilderBody.validityRange.invalidBefore=e,this);this.invalidHereafter=e=>(this.meshTxBuilderBody.validityRange.invalidHereafter=e,this);this.metadataValue=(e,t)=>{let i=q.stringify(t);return this.meshTxBuilderBody.metadata.push({tag:e,metadata:i}),this};this.signingKey=e=>(this.meshTxBuilderBody.signingKey.push(e),this);this.selectUtxosFrom=(e,t=5e6)=>(this.meshTxBuilderBody.extraInputs=e,this.meshTxBuilderBody.selectionThreshold=t,this);this.protocolParams=e=>{let t={...P,...e};return this._protocolParams=t,this};this.queueAllLastItem=()=>{this.txOutput&&(this.meshTxBuilderBody.outputs.push(this.txOutput),this.txOutput=void 0),this.txInQueueItem&&this.queueInput(),this.collateralQueueItem&&(this.meshTxBuilderBody.collaterals.push(this.collateralQueueItem),this.collateralQueueItem=void 0),this.mintItem&&this.queueMint(),this.withdrawalItem&&this.queueWithdrawal()};this.queueInput=()=>{if(!this.txInQueueItem)throw Error("queueInput: Undefined input");if(this.txInQueueItem.type==="Script")if(this.txInQueueItem.scriptTxIn){if(!this.txInQueueItem.scriptTxIn.datumSource)throw Error("queueInput: Script input does not contain datum information");if(!this.txInQueueItem.scriptTxIn.redeemer)throw Error("queueInput: Script input does not contain redeemer information");if(!this.txInQueueItem.scriptTxIn.scriptSource)throw Error("queueInput: Script input does not contain script information")}else throw Error("queueInput: Script input does not contain script, datum, or redeemer information");this.meshTxBuilderBody.inputs.push(this.txInQueueItem),this.txInQueueItem=void 0};this.queueMint=()=>{if(!this.mintItem)throw Error("queueMint: Undefined mint");if(!this.mintItem.scriptSource)throw Error("queueMint: Missing mint script information");this.meshTxBuilderBody.mints.push(this.mintItem),this.mintItem=void 0};this.queueWithdrawal=()=>{if(!this.withdrawalItem)throw Error("queueWithdrawal: Undefined withdrawal");if("plutusScriptWithdrawal"in this.withdrawalItem){if(!this.withdrawalItem.plutusScriptWithdrawal.scriptSource)throw Error("queueWithdrawal: Missing withdrawal script information");if(!this.withdrawalItem.plutusScriptWithdrawal.redeemer)throw Error("queueWithdrawal: Missing withdrawal redeemer information")}this.meshTxBuilderBody.withdrawals.push(this.withdrawalItem),this.withdrawalItem=void 0};this.castRawDataToJsonString=e=>typeof e=="object"?q.stringify(e):e;this.castBuilderDataToRedeemer=(e,t="Mesh",i={...f})=>{let r,s=e;return t==="Mesh"?(r={data:{type:t,content:s},exUnits:i},r):(t==="JSON"&&(s=this.castRawDataToJsonString(e)),r={data:{type:t,content:s},exUnits:i},r)};this.updateRedeemer=(e,t)=>{t.forEach(i=>{switch(i.tag){case"SPEND":{let r=e.inputs[i.index];r.type=="Script"&&r.scriptTxIn.redeemer&&(r.scriptTxIn.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.scriptTxIn.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"MINT":{let r=e.mints[i.index];r.type=="Plutus"&&r.redeemer&&(r.redeemer.exUnits.mem=Math.floor(i.budget.mem*this.txEvaluationMultiplier),r.redeemer.exUnits.steps=Math.floor(i.budget.steps*this.txEvaluationMultiplier));break}case"CERT":break;case"REWARD":break}})};this.addUtxosFromSelection=()=>{let e=this.meshTxBuilderBody.outputs.reduce((i,r)=>(r.amount.forEach(u=>{let{unit:n,quantity:d}=u,h=Number(i.get(n))||0;i.set(n,String(h+Number(d)))}),i),new Map);this.meshTxBuilderBody.inputs.reduce((i,r)=>(r.txIn.amount?.forEach(u=>{let{unit:n,quantity:d}=u,h=Number(i.get(n))||0;i.set(n,String(h-Number(d)))}),i),e),this.meshTxBuilderBody.mints.reduce((i,r)=>{let s={unit:r.policyId+r.assetName,quantity:String(r.amount)},u=Number(i.get(s.unit))||0;return i.set(s.unit,String(u-Number(s.quantity))),i},e),y(e,this.meshTxBuilderBody.extraInputs,this.meshTxBuilderBody.selectionThreshold.toString()).forEach(i=>{let r={type:"PubKey",txIn:{txHash:i.input.txHash,txIndex:i.input.outputIndex,amount:i.output.amount,address:i.output.address}};this.meshTxBuilderBody.inputs.push(r)})};this.removeDuplicateInputs=()=>{let{inputs:e}=this.meshTxBuilderBody,t=s=>`${s.txHash}#${s.txIndex}`,i=[],r=[];for(let s=0;s<e.length;s+=1){let u=e[s],n=t(u.txIn);i.includes(n)?(e.splice(s,1),s-=1):r.push(u)}this.meshTxBuilderBody.inputs=r};this.emptyTxBuilderBody=()=>(this.meshTxBuilderBody=w(),w);this.reset=()=>{this.meshTxBuilderBody=w(),this.txEvaluationMultiplier=1.1,this.txOutput=void 0,this.addingPlutusScriptInput=!1,this.plutusSpendingScriptVersion=void 0,this.addingPlutusMint=!1,this.plutusMintingScriptVersion=void 0,this.addingPlutusWithdrawal=!1,this.plutusWithdrawalScriptVersion=void 0,this._protocolParams=P,this.mintItem=void 0,this.txInQueueItem=void 0,this.withdrawalItem=void 0,this.collateralQueueItem=void 0,this.refScriptTxInQueueItem=void 0};this.meshTxBuilderBody=w()}};var B=class extends S{constructor({serializer:t,fetcher:i,submitter:r,evaluator:s,params:u,isHydra:n=!1}={}){super();this.txHex="";this.queriedTxHashes=new Set;this.queriedUTxOs={};this.complete=async t=>{t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.removeDuplicateInputs();let{inputs:i,collaterals:r}=this.meshTxBuilderBody,s=[...i,...r].filter(n=>!this.isInputComplete(n));await this.queryAllTxInfo(s),s.forEach(n=>{this.completeTxInformation(n)}),this.addUtxosFromSelection();let u=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams);if(this.evaluator){let n=await this.evaluator.evaluateTx(u).catch(d=>{throw Error(`Tx evaluation failed: ${d}`)});this.updateRedeemer(this.meshTxBuilderBody,n),u=this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams)}return console.log(u),this.txHex=u,u};this.completeSync=t=>(t?this.meshTxBuilderBody=t:this.queueAllLastItem(),this.serializer.serializeTxBody(this.meshTxBuilderBody,this._protocolParams));this.completeSigning=()=>{let t=this.serializer.addSigningKeys(this.txHex,this.meshTxBuilderBody.signingKey);return this.txHex=t,t};this.submitTx=async t=>await this.submitter?.submitTx(t);this.getUTxOInfo=async t=>{let i=[];this.queriedTxHashes.has(t)||(this.queriedTxHashes.add(t),i=await this.fetcher?.fetchUTxOs(t)||[],this.queriedUTxOs[t]=i)};this.queryAllTxInfo=t=>{let i=[];if(t.length>0&&!this.fetcher)throw Error("Transaction information is incomplete while no fetcher instance is provided");for(let r=0;r<t.length;r++){let s=t[r];this.isInputInfoComplete(s)||i.push(this.getUTxOInfo(s.txIn.txHash)),s.type==="Script"&&s.scriptTxIn.scriptSource?.type==="Inline"&&!this.isRefScriptInfoComplete(s)&&i.push(this.getUTxOInfo(s.scriptTxIn.scriptSource.txHash))}return Promise.all(i)};this.completeTxInformation=t=>{if(!this.isInputInfoComplete(t)){let r=this.queriedUTxOs[t.txIn.txHash]?.find(n=>n.input.outputIndex===t.txIn.txIndex),s=r?.output.amount,u=r?.output.address;if(!s||s.length===0)throw Error(`Couldn't find value information for ${t.txIn.txHash}#${t.txIn.txIndex}`);if(t.txIn.amount=s,t.type==="PubKey"){if(!u||u==="")throw Error(`Couldn't find address information for ${t.txIn.txHash}#${t.txIn.txIndex}`);t.txIn.address=u}}if(t.type==="Script"&&t.scriptTxIn.scriptSource?.type=="Inline"&&!this.isRefScriptInfoComplete(t)){let i=t.scriptTxIn.scriptSource,s=this.queriedUTxOs[i.txHash].find(u=>u.input.outputIndex===i.txIndex);if(!s)throw Error(`Couldn't find script reference utxo for ${i.txHash}#${i.txIndex}`);i.scriptHash=s?.output.scriptHash}};this.isInputComplete=t=>t.type==="PubKey"?this.isInputInfoComplete(t):t.type==="Script"?this.isInputInfoComplete(t)&&this.isRefScriptInfoComplete(t):!0;this.isInputInfoComplete=t=>{let{amount:i,address:r}=t.txIn;return!(t.type==="PubKey"&&(!i||!r)||t.type==="Script"&&!i)};this.isRefScriptInfoComplete=t=>{let{scriptSource:i}=t.scriptTxIn;return!(i?.type==="Inline"&&!i?.scriptHash)};t?this.serializer=t:this.serializer=new G,i&&(this.fetcher=i),r&&(this.submitter=r),s&&(this.evaluator=s),u&&this.protocolParams(u),n&&this.protocolParams({minFeeA:0,minFeeB:0,priceMem:0,priceStep:0,collateralPercent:0,coinsPerUtxoSize:0})}};import{buildScriptPubkey as Y,deserializeEd25519KeyHash as X,toNativeScript as Z,resolvePaymentKeyHash as tt}from"@meshsdk/core-cst";var N=class{static withOneSignature(e){let t=X(tt(e));return Y(t).toCbor()}static fromNativeScript(e){return Z(e).toCbor()}};import{CIP68_100 as et,CIP68_222 as it,DEFAULT_REDEEMER_BUDGET as rt,POLICY_ID_LENGTH as st,SUPPORTED_TOKENS as nt,hexToString as ut,metadataToCip68 as at,stringToHex as ot}from"@meshsdk/common";import{deserializeNativeScript as dt,deserializePlutusScript as D,fromScriptRef as H}from"@meshsdk/core-cst";var C=class{constructor(e){this.isCollateralNeeded=!1;this.txBuilder=new B(e),this.initiator=e.initiator}sendAssets(e,t){return typeof t=="string"&&(t=[{unit:"lovelace",quantity:t}]),typeof e=="string"&&this.txBuilder.txOut(e,t),typeof e=="object"&&(this.txBuilder.txOut(e.address,t),e.datum&&(e.datum.inline?this.txBuilder.txOutInlineDatumValue(e.datum.value):this.txBuilder.txOutDatumHashValue(e.datum.value))),this}sendLovelace(e,t){return this.sendAssets(e,t)}sendToken(e,t,i){let r=[{unit:nt[t],quantity:i}];return this.sendAssets(e,r)}sendValue(e,t){let i=t.output.amount;return this.sendAssets(e,i)}setTxInputs(e){return e.forEach(t=>{this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setTxRefInputs(e){return e.forEach(t=>{this.txBuilder.readOnlyTxInReference(t.input.txHash,t.input.outputIndex)}),this}setNativeScriptInput(e,t){let{scriptCbor:i}=this.txBuilder.serializer.deserializer.script.deserializeNativeScript(e);return this.txBuilder.txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i),this}redeemValue(e){let{value:t,script:i,datum:r,redeemer:s}=e,u=s||{data:{alternative:0,fields:["mesh"]},budget:rt};if("code"in i&&(this.isCollateralNeeded=!0,this.spendingPlutusScript(i).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).txInScript(i.code).txInRedeemerValue(u.data,"Mesh",u.budget)),"output"in i){if(!i.output.scriptRef)throw new Error("redeemValue: No script reference found in UTxO");let n=H(i.output.scriptRef);if(!n||!("code"in n))throw new Error("redeemValue: Script reference not found");this.isCollateralNeeded=!0,this.spendingPlutusScript(n).txIn(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address).spendingTxInReference(i.input.txHash,i.input.outputIndex,i.output.scriptHash).txInRedeemerValue(u.data,"Mesh",u.budget)}return r?this.txBuilder.txInDatumValue(r):this.txBuilder.txInInlineDatumPresent(),this}mintAsset(e,t,i){let r=t.assetQuantity,s=ot(t.assetName),u=et(s);t.cip68ScriptAddress&&(s=it(s));let n="";switch(typeof e){case"string":n=dt(e).hash().toString(),this.txBuilder.mint(r,n,s).mintingScript(e),t.cip68ScriptAddress&&this.txBuilder.mint(r,n,u).mintingScript(e);break;case"object":if(!i)throw new Error("burnAsset: Redeemer data is required for Plutus minting");if("code"in e){n=D(e.code,e.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(e).mint(r,n,s).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress&&this.mintPlutusScript(e).mint(r,n,u).mintingScript(e.code).mintRedeemerValue(i.data,"Mesh",i.budget);break}if("output"in e){if(!e.output.scriptRef)throw new Error("mintAsset: No script reference found in UTxO");let d=H(e.output.scriptRef);if(!d)throw new Error("mintAsset: Script reference not found");if("code"in d){if(n=D(d.code,d.version).hash().toString(),this.isCollateralNeeded=!0,this.mintPlutusScript(d).mint(r,n,s).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget),t.cip68ScriptAddress){this.mintPlutusScript(d).mint(r,n,u).mintTxInReference(e.input.txHash,e.input.outputIndex).mintRedeemerValue(i.data,"Mesh",i.budget);break}break}else throw new Error("mintAsset: Reference script minting not implemented")}break}return t.metadata&&t.label&&this.setMetadata(Number(t.label),{[n]:{[t.assetName]:t.metadata},version:1}),t.recipient&&this.sendAssets(t.recipient,[{unit:n+s,quantity:t.assetQuantity}]),t.cip68ScriptAddress&&this.sendAssets({address:t.cip68ScriptAddress,datum:{inline:!0,value:at(t.metadata)}},[{unit:n+u,quantity:t.assetQuantity}]),this}burnAsset(e,t,i){let r="-"+t.quantity,s={assetName:ut(t.unit.slice(st)),assetQuantity:r};try{this.mintAsset(e,s,i)}catch(u){throw new Error("burnAsset: "+u)}return this}setChangeAddress(e){return this.txBuilder.changeAddress(e),this}setCollateral(e){return e.forEach(t=>{this.txBuilder.txInCollateral(t.input.txHash,t.input.outputIndex,t.output.amount,t.output.address)}),this}setRequiredSigners(e){return e.forEach(t=>{let{pubKeyHash:i}=this.txBuilder.serializer.deserializer.key.deserializeAddress(t);this.txBuilder.requiredSignerHash(i)}),this}setTimeToExpire(e){return this.txBuilder.invalidHereafter(Number(e)),this}setTimeToStart(e){return this.txBuilder.invalidBefore(Number(e)),this}setMetadata(e,t){return this.txBuilder.metadataValue(e.toString(),t),this}withdrawRewards(e,t){return this.txBuilder.withdrawal(e,t),this}delegateStake(e,t){return this.txBuilder.delegateStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e),this.txBuilder.serializer.resolver.keys.resolveEd25519KeyHash(t)),this}deregisterStake(e){return this.txBuilder.deregisterStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerStake(e){return this.txBuilder.registerStakeCertificate(this.txBuilder.serializer.resolver.keys.resolveStakeKeyHash(e)),this}registerPool(e){return this.txBuilder.registerPoolCertificate(e),this}retirePool(e,t){return this.txBuilder.retirePoolCertificate(e,t),this}async build(){try{return await this.addCollateralIfNeeded(),await this.addTxInputsAsNeeded(),await this.addChangeAddress(),this.txBuilder.complete()}catch(e){throw new Error(`[Transaction] An error occurred during build: ${e}.`)}}mintPlutusScript(e){switch(e.version){case"V1":this.txBuilder.mintPlutusScriptV1();break;case"V2":this.txBuilder.mintPlutusScriptV2();break;case"V3":this.txBuilder.mintPlutusScriptV3();break}return this.txBuilder}spendingPlutusScript(e){switch(e.version){case"V1":this.txBuilder.spendingPlutusScriptV1();break;case"V2":this.txBuilder.spendingPlutusScriptV2();break;case"V3":this.txBuilder.spendingPlutusScriptV3();break}return this.txBuilder}async addCollateralIfNeeded(){if(this.isCollateralNeeded){let e=await this.initiator.getCollateral();this.setCollateral(e)}}async addTxInputsAsNeeded(){let e=await this.initiator.getUtxos();this.txBuilder.selectUtxosFrom(e)}async addChangeAddress(){if(this.txBuilder.meshTxBuilderBody.changeAddress===""){let e=await this.initiator.getChangeAddress();this.setChangeAddress(e)}}};export{N as ForgeScript,B as MeshTxBuilder,C as Transaction,k as UtxoSelection,y as experimentalSelectUtxos,A as keepRelevant,V as largestFirst,Q as largestFirstMultiAsset};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshsdk/transaction",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.32",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -38,5 +38,6 @@
|
|
|
38
38
|
"prettier": "@meshsdk/prettier-config",
|
|
39
39
|
"publishConfig": {
|
|
40
40
|
"access": "public"
|
|
41
|
-
}
|
|
41
|
+
},
|
|
42
|
+
"license": "Apache-2.0"
|
|
42
43
|
}
|