@smartledger/bsv 9.22.0 → 9.23.0
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/CHANGELOG.md +95 -0
- package/README.md +19 -19
- package/bsv-gdaf.min.js +3 -3
- package/bsv-ltp.min.js +29 -29
- package/bsv-smartcontract.min.js +1 -1
- package/bsv.bundle.js +3 -3
- package/bsv.d.ts +5 -5
- package/bsv.min.js +3 -3
- package/docs/AUDIT_SCOPE.md +6 -6
- package/docs/MODULE_REFERENCE_COMPLETE.md +27 -27
- package/docs/advanced/UTXO_MANAGER_GUIDE.md +1 -1
- package/docs/audit-rfq/cure53.txt +1 -1
- package/docs/audit-rfq/ncc-group.txt +1 -1
- package/docs/audit-rfq/trail-of-bits.txt +1 -1
- package/docs/getting-started/INSTALLATION.md +23 -23
- package/docs/getting-started/QUICK_START.md +7 -7
- package/docs/migration/FROM_BSV_1_5_6.md +5 -5
- package/lib/gdaf/index.js +14 -14
- package/lib/transaction/sighash.js +33 -3
- package/lib/transaction/transaction.js +47 -7
- package/package.json +1 -1
- package/version.js +1 -1
package/bsv-smartcontract.min.js
CHANGED
|
@@ -20,5 +20,5 @@ var bsvSmartContract=(()=>{var Xn=Object.create;var yr=Object.defineProperty;var
|
|
|
20
20
|
[${a+1}/${n.length}] Step (${c})`);try{if(typeof i.step=="function")i.step();else{console.log("\u26A0\uFE0F Step-by-step execution not supported in this BSV version"),console.log("\u{1F4A1} Consider using runFullEvaluation instead");break}console.log(`\u{1F9E9} Executed: ${c}`),Xt(i.stack,i.altstack)}catch(d){console.log(`\u26A0\uFE0F Error executing ${c}: ${d.message}`);break}}o&&o.close(),console.log(`
|
|
21
21
|
===========================================`),console.log("\u2705 Final Stack State:"),Xt(i.stack||[],i.altstack||[]),console.log("===========================================")}function Ji(e,t,r){console.log("==========================================="),console.log("\u{1F50D} SCRIPT INTERPRETER DEBUGGER (FULL RUN)"),console.log(`===========================================
|
|
22
22
|
`);let i=new ct,n=new Fa(1e5),o=i.verify(e,t,r,0,ct.SCRIPT_ENABLE_SIGHASH_FORKID,n);console.log("\u{1F510} Locking Script:",t.toASM()),console.log("\u{1F513} Unlocking Script:",e.toASM()),console.log("-------------------------------------------"),console.log("\u2705 Result:",o?"TRUE (Success)":"\u274C FALSE (Failure)"),console.log("Final Stack:",i.stack.map(a=>a.toString("hex"))),console.log("AltStack:",i.altstack.map(a=>a.toString("hex"))),console.log("===========================================")}async function en(){if(typeof m.default>"u"||!m.default.argv){console.log("\u2699\uFE0F CLI mode not available in browser environment");return}let e=m.default.argv.slice(2),t=P=>{let x=e.indexOf(P);return x!==-1&&e[x+1]?e[x+1]:null},r=t("--unlocking"),i=t("--locking"),n=t("--combined"),o=e.includes("--step"),a=e.includes("--truth"),s,c,d;if(n)d=at(n);else{s=at(r),c=at(i);let P=u.Buffer.concat([s.toBuffer(),c.toBuffer()]);d=he.fromBuffer(P)}let g=new Ca,y=new La({prevTxId:"0".repeat(64),outputIndex:0,script:he.empty(),satoshis:1e5,output:new Qi({satoshis:1e5,script:he.empty()})});g.addInput(y),g.addOutput(new Qi({satoshis:1e5,script:he.empty()})),o?await Zi(d,g,!0):a?Ji(s||he.empty(),c||he.empty(),g):console.log("\u2699\uFE0F No mode specified. Use --step or --truth")}jt.exports={parseScript:at,printStack:Xt,stepThroughScript:Zi,runFullEvaluation:Ji,main:en};typeof L<"u"&&L.main===jt&&en()});var pe=O((uu,hn)=>{"use strict";f();var nn=b(),on=ge(),Wt=V(),Qt=D(),Ra=He(),an=$e(),sn=_e(),ut=M(),Ba=fe(),rn=Ee(),Zt=rn.SIGHASH_ALL|rn.SIGHASH_FORKID;function cn(){return on.mainnetFlags()}function Na(e,t,r){r=r||{};var i=new on,n=i.verify(e,t,r.tx||new Qt,r.inputIndex||0,r.flags||cn(),new ut(r.satoshis||0));return{ok:n,err:i.errstr||""}}function un(e,t,r,i,n){return sn.sighashPreimage(e,n||Zt,t,r,new ut(i))}function Ua(e,t,r,i,n){return Ba.sha256sha256(un(e,t,r,i,n))}function qa(e,t,r,i,n,o){o=o||Zt;var a=sn.sign(e,t,o,r,i,new ut(n));return u.Buffer.concat([a.toDER(),u.Buffer.from([o])])}function Da(e,t,r){r=r||{};var i=new Qt().addOutput(new an({script:e,satoshis:t})),n=new Qt;return n.addInput(new Ra({prevTxId:i.hash,outputIndex:0,script:nn.empty()}),e,t),r.outputs&&r.outputs.forEach(function(o){n.addOutput(o)}),{funding:i,spend:n}}function Ma(e,t){var r=e.toAddress?e.toAddress():e;return new an({script:nn.buildPublicKeyHashOut(r),satoshis:t})}function Ga(e){return e===0?Wt.OP_0:e===-1?Wt.OP_1NEGATE:e>=1&&e<=16?Wt["OP_"+e]:new ut(e).toScriptNumBuffer()}hn.exports={SIGHASH:Zt,flags:cn,verify:Na,rawPreimage:un,sighashDigest:Ua,signInput:qa,fundAndSpend:Da,p2pkhOutput:Ma,scriptNum:Ga}});var dn=O((pu,ln)=>{"use strict";f();var Va=fe(),Ka=pe(),qe=b(),Ue=V(),pn=Ka.signInput;function za(e){var t=Va.sha256(e),r=new qe().add(Ue.OP_SHA256).add(t).add(Ue.OP_EQUAL);return{lock:r,meta:{name:"hash-lock",digest:t.toString("hex")},unlock:function(i,n,o){return new qe().add(o||e)}}}function $a(e){var t=e.toPublicKey(),r=qe.buildPublicKeyHashOut(t.toAddress());return{lock:r,meta:{name:"p2pkh",address:t.toAddress().toString()},unlock:function(i,n){return new qe().add(pn(i,e,0,r,n)).add(t.toBuffer())}}}function Ya(e,t){var r=t.map(function(n){return n.toPublicKey()}),i=new qe().add(Ue["OP_"+e]);return r.forEach(function(n){i.add(n.toBuffer())}),i.add(Ue["OP_"+r.length]).add(Ue.OP_CHECKMULTISIG),{lock:i,meta:{name:e+"-of-"+r.length+"-multisig"},unlock:function(n,o,a){a=a||t.slice(0,e);var s=new qe().add(Ue.OP_0);return a.forEach(function(c){s.add(pn(n,c,0,i,o))}),s}}}ln.exports={hashLock:za,p2pkh:$a,multisig:Ya}});var je=O((du,xn)=>{"use strict";f();var fn=b(),_=V(),ee=Ee(),ht=M(),gn=fe(),er=pe(),tr=er.SIGHASH,pt=er.scriptNum,De=u.Buffer.from("79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","hex"),rr=new ht("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16),Xa=u.Buffer.concat([u.Buffer.from([2]),De]),mn=u.Buffer.from(De).reverse(),yn=u.Buffer.concat([u.Buffer.from(rr.toBuffer()).reverse(),u.Buffer.from([0])]),ja=u.Buffer.concat([u.Buffer.from([48,68,2,32]),De,u.Buffer.from([2,32])]);function Jt(e,t){var r;for(r=0;r<t-1;r++)e.add(_.OP_1).add(_.OP_SPLIT);for(r=0;r<t-1;r++)e.add(_.OP_SWAP).add(_.OP_CAT);return e}var Wa=ee.SIGHASH_ALL|ee.SIGHASH_FORKID,Qa=ee.SIGHASH_SINGLE|ee.SIGHASH_FORKID,Za=ee.SIGHASH_SINGLE|ee.SIGHASH_ANYONECANPAY|ee.SIGHASH_FORKID,Ja=ee.SIGHASH_ALL|ee.SIGHASH_ANYONECANPAY|ee.SIGHASH_FORKID;function ir(e,t){var r=t&&t.sighashType||tr;return e.add(_.OP_HASH256),Jt(e,32),e.add(mn).add(_.OP_ADD),e.add(yn).add(_.OP_MOD),e.add(pt(32)).add(_.OP_NUM2BIN),Jt(e,32),e.add(De).add(_.OP_DUP),e.add(_.OP_2).add(_.OP_SWAP).add(_.OP_CAT),e.add(_.OP_TOALTSTACK),e.add(u.Buffer.from([48,68,2,32])).add(_.OP_SWAP).add(_.OP_CAT),e.add(u.Buffer.from([2,32])).add(_.OP_CAT),e.add(_.OP_SWAP).add(_.OP_CAT),e.add(u.Buffer.from([r])).add(_.OP_CAT),e.add(_.OP_FROMALTSTACK).add(_.OP_CHECKSIG),e}function es(){return ir(new fn)}function Sn(e){return e.add(pt(40)).add(_.OP_RIGHT).add(pt(32)).add(_.OP_LEFT),e}function ts(e){return vn(e,tr)}function vn(e,t){var r=u.Buffer.from([t&255,0,0,0]);return e.add(_.OP_DUP).add(pt(4)).add(_.OP_RIGHT).add(r).add(_.OP_EQUALVERIFY),e}function rs(e){var t=u.Buffer.concat(e.map(function(r){return r.toBufferWriter().toBuffer()}));return gn.sha256sha256(t)}function is(e){var t=new fn().add(_.OP_DUP);return ir(t),t.add(_.OP_VERIFY),Sn(t),t.add(u.Buffer.from(e)).add(_.OP_EQUAL),t}var ns=new ht("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex");function On(e){var t=gn.sha256sha256(e);if(t[0]<1||t[0]>127)return null;var r=new ht(t).add(new ht(De)).mod(rr);if(r.gt(ns))return null;var i=r.toBuffer("be",32);return i[0]>=1?i:null}function os(e,t,r,i,n){typeof n=="number"&&(n={maxTries:n}),n=n||{};var o=n.maxTries||5e3,a=n.start||0,s=n.field||"nLockTime",c=n.sighashType||tr;if(s!=="nLockTime"&&s!=="sequence")throw new Error("grind field must be 'nLockTime' or 'sequence'");for(var d=e.inputs[t],g=0;g<o;g++){var y=a+g;s==="nLockTime"?e.nLockTime=y:d.sequenceNumber=4294967294-y;var P=er.rawPreimage(e,t,r,i,c);if(On(P))return{preimage:P,tries:g+1,field:s,nonce:y}}throw new Error("OP_PUSH_TX grind failed after "+o+" tries")}xn.exports={Gx:De,N:rr,PUBKEY:Xa,gxLe:mn,N_LE:yn,DER_PREFIX:ja,reverseBytes:Jt,pushTxCore:ir,authenticator:es,extractHashOutputs:Sn,assertSighashAll:ts,assertSighashType:vn,SIGHASH_ALL_FORKID:Wa,SIGHASH_SINGLE_FORKID:Qa,SIGHASH_SINGLE_ANYONECANPAY_FORKID:Za,SIGHASH_ALL_ANYONECANPAY_FORKID:Ja,hashOutputs:rs,valueCovenant:is,sFromPreimage:On,grind:os}});var or=O((gu,Pn)=>{"use strict";f();var nr=je(),as=pe(),ss=b(),A=V(),Me=as.scriptNum;function cs(e){var t=new ss;return t.add(A.OP_DUP),nr.pushTxCore(t),t.add(A.OP_VERIFY),nr.assertSighashAll(t),t.add(A.OP_DUP),t.add(Me(104)).add(A.OP_SPLIT).add(A.OP_NIP),t.add(A.OP_SIZE).add(Me(52)).add(A.OP_SUB).add(A.OP_SPLIT).add(A.OP_DROP),t.add(A.OP_OVER),t.add(Me(52)).add(A.OP_RIGHT).add(Me(8)).add(A.OP_LEFT),t.add(A.OP_BIN2NUM).add(Me(e)).add(A.OP_SUB),t.add(Me(8)).add(A.OP_NUM2BIN),t.add(A.OP_SWAP).add(A.OP_CAT),t.add(A.OP_HASH256),t.add(A.OP_SWAP),nr.extractHashOutputs(t),t.add(A.OP_EQUAL),t}Pn.exports={pelsCovenant:cs}});var En=O((yu,_n)=>{f();_n.exports=(typeof globalThis<"u"?globalThis:typeof self<"u"?self:window).bsv.PublicKey});var cr=O((vu,Tn)=>{"use strict";f();var us=ze(),hs=En(),ps=b(),wn=fe(),sr=pe(),E=V(),Ge=sr.scriptNum;function lt(e){return e instanceof us?e.toPublicKey().toBuffer():e instanceof hs?e.toBuffer():e}function ls(){return{name:"single-key",commit:function(e){return wn.sha256ripemd160(lt(e))},emit:function(e){return e.add(E.OP_OVER).add(E.OP_HASH160).add(E.OP_EQUALVERIFY),e.add(E.OP_CHECKSIGVERIFY),e},unlockArgs:function(e,t,r,i,n){var o=sr.signInput(e,n,t,r,i);return[o,n.toPublicKey().toBuffer()]}}}function ar(e,t){var r=t.length;if(e<1||e>r||r<1||r>16)throw new Error("multisig requires 1 <= m <= n <= 16");var i=new ps().add(E["OP_"+e]);return t.forEach(function(n){i.add(u.Buffer.from(n))}),i.add(E["OP_"+r]).add(E.OP_CHECKMULTISIG),i.toBuffer()}function ds(e,t){if(typeof t!="number"||!Number.isInteger(t))throw new Error("multisig(m, nKeys): nKeys is the NUMBER of keys, not the keys themselves"+(Array.isArray(t)?" \u2014 pass "+t.length+" instead of the array":""));if(typeof e!="number"||!Number.isInteger(e))throw new Error("multisig(m, nKeys): m must be an integer");if(e<1||e>t||t<1||t>16)throw new Error("multisig requires 1 <= m <= n <= 16");return{name:e+"-of-"+t+"-multisig",m:e,n:t,commit:function(r){if(r.length!==t)throw new Error("expected "+t+" public keys");return wn.sha256ripemd160(ar(e,r.map(lt)))},emit:function(r){r.add(E.OP_OVER).add(E.OP_HASH160).add(E.OP_EQUALVERIFY),r.add(Ge(1)).add(E.OP_SPLIT).add(E.OP_NIP),r.add(E.OP_SIZE).add(Ge(2)).add(E.OP_SUB).add(E.OP_SPLIT).add(E.OP_DROP);for(var i=0;i<this.n;i++)r.add(Ge(34)).add(E.OP_SPLIT),r.add(E.OP_SWAP).add(Ge(1)).add(E.OP_SPLIT).add(E.OP_NIP),r.add(E.OP_TOALTSTACK);for(r.add(E.OP_DROP),r.add(Ge(this.m)),i=0;i<this.n;i++)r.add(E.OP_FROMALTSTACK);return r.add(Ge(this.n)),r.add(E.OP_CHECKMULTISIGVERIFY),r},unlockArgs:function(r,i,n,o,a){var s=a.keys;if(s.length!==t)throw new Error("expected "+t+" public keys in signer.keys");var c=ar(e,s.map(lt)),d=s.map(lt).map(function(P){return P.toString("hex")}),g=a.signWith.map(function(P){var x=d.indexOf(P.toPublicKey().toBuffer().toString("hex"));if(x<0)throw new Error("signWith key is not in the committed key set");return{idx:x,priv:P}}).sort(function(P,x){return x.idx-P.idx}).slice(0,e);if(g.length<e)throw new Error("need at least "+e+" signing keys");var y=g.map(function(P){return sr.signInput(r,P.priv,i,n,o)});return[E.OP_0].concat(y).concat([c])}}}function fs(e){if(!e||typeof e.emit!="function"||typeof e.unlockArgs!="function"||typeof e.commit!="function")throw new Error("predicate authorizer needs { commit, emit, unlockArgs } functions");return{name:e.name||"predicate",commit:e.commit,emit:e.emit,unlockArgs:e.unlockArgs}}Tn.exports={singleKey:ls,multisig:ds,predicate:fs,redeemScript:ar}});var hr=O((xu,Ln)=>{"use strict";f();var gs=M(),We=je(),ur=pe(),Qe=cr(),dt=b(),v=V(),te=ur.scriptNum;function An(e,t){var r=u.Buffer.isBuffer(e)?e:t.commit(e);if(r.length!==20)throw new Error("owner commitment must be 20 bytes (HASH160)");return r}function In(e,t){return t.length?e.add(u.Buffer.from(t)):e.add(v.OP_0)}function bn(e,t){return e.add(v.OP_DUP),We.pushTxCore(e),e.add(v.OP_VERIFY),We.assertSighashAll(e),e.add(v.OP_DUP).add(te(52)).add(v.OP_RIGHT).add(te(8)).add(v.OP_LEFT).add(v.OP_TOALTSTACK),e.add(v.OP_DUP),We.extractHashOutputs(e),e.add(v.OP_TOALTSTACK),e.add(te(104)).add(v.OP_SPLIT).add(v.OP_NIP).add(v.OP_SIZE).add(te(52)).add(v.OP_SUB).add(v.OP_SPLIT).add(v.OP_DROP),e.add(v.OP_DUP).add(te(4)).add(te(20)).add(v.OP_SUBSTR),e.add(v.OP_SWAP).add(v.OP_TOALTSTACK),t.emit(e),e.add(v.OP_FROMALTSTACK),e}function kn(e){return e.add(te(4)).add(v.OP_SPLIT).add(te(20)).add(v.OP_SPLIT).add(v.OP_NIP),e.add(v.OP_TOALTSTACK),e.add(v.OP_SWAP).add(v.OP_CAT),e.add(v.OP_FROMALTSTACK).add(v.OP_CAT),e}function Hn(e){var t=e.toBuffer().length;if(t<=252||t>65535)throw new Error("token script length must use a 3-byte varint (253..65535); got "+t);return e}function ms(e,t,r){r=r||Qe.singleKey();var i=new dt;return i.add(An(t,r)),i.add(v.OP_DROP),bn(i,r),kn(i),i.add(v.OP_FROMALTSTACK),i.add(v.OP_SWAP),i.add(v.OP_FROMALTSTACK),i.add(v.OP_BIN2NUM).add(te(e)).add(v.OP_SUB).add(te(8)).add(v.OP_NUM2BIN),i.add(v.OP_SWAP).add(v.OP_CAT),i.add(v.OP_HASH256),i.add(v.OP_EQUAL),Hn(i)}function Fn(e,t){t=t||Qe.singleKey();var r=new dt;return r.add(An(e,t)),r.add(v.OP_DROP),bn(r,t),kn(r),r.add(v.OP_CAT),r.add(v.OP_SWAP).add(v.OP_CAT),r.add(v.OP_CAT),r.add(v.OP_FROMALTSTACK),r.add(v.OP_FROMALTSTACK).add(v.OP_DROP),r.add(v.OP_SWAP).add(v.OP_HASH256).add(v.OP_EQUAL),Hn(r)}function ys(e){return Qe.singleKey().commit(e)}function Ss(e,t,r,i,n,o){o=o||{};var a=o.auth||Qe.singleKey(),s=o.inputIndex||0;if(t.length!==20)throw new Error("newOwnerHash must be 20 bytes (HASH160)");if(i<=1&&!o.allowLowValue)throw new Error("unlockTransfer: single-output token sets output = input - fee, which burns a "+i+"-sat UTXO (e.g. a 1-sat ordinal). Use Token.transferOrdinal / ownershipTokenMulti to preserve the satoshi.");We.grind(r,s,n,i,o.grind);var c=ur.rawPreimage(r,s,n,i),d=a.unlockArgs(r,s,n,i,e),g=new dt().add(u.Buffer.from(t));return d.forEach(function(y){g.add(y)}),g.add(u.Buffer.from(c)),g}function Cn(e,t,r,i,n,o,a){a=a||{};var s=a.auth||Qe.singleKey(),c=a.inputIndex||0;if(t.length!==20)throw new Error("newOwnerHash must be 20 bytes (HASH160)");if(!o||o.tokenValue==null||o.tokenValue.length!==8)throw new Error("layout.tokenValue must be the 8-byte LE value of the token output");We.grind(r,c,n,i,a.grind);var d=ur.rawPreimage(r,c,n,i),g=s.unlockArgs(r,c,n,i,e),y=new dt;return In(y,o.before||u.Buffer.alloc(0)),In(y,o.after||u.Buffer.alloc(0)),y.add(u.Buffer.from(o.tokenValue)),y.add(u.Buffer.from(t)),g.forEach(function(P){y.add(P)}),y.add(u.Buffer.from(d)),y}function vs(e,t){return Fn(e,t)}function Os(e,t,r,i,n,o){o=o||{},i==null&&(i=1);var a=o.tokenIndex||0,s=r.outputs||[],c=s[a];if(!c)throw new Error("transferOrdinal: spend has no output at tokenIndex "+a);if(c.satoshis!==i)throw new Error("transferOrdinal: token output value ("+c.satoshis+" sat) must equal the ordinal value ("+i+" sat) to avoid burning the inscription");function d(x){return x.toBufferWriter().toBuffer()}var g=u.Buffer.concat(s.slice(0,a).map(d)),y=u.Buffer.concat(s.slice(a+1).map(d)),P=new gs(i).toBuffer({endian:"little",size:8});return Cn(e,t,r,i,n,{before:g,after:y,tokenValue:P},o)}Ln.exports={ownershipToken:ms,ownershipTokenMulti:Fn,ordinalLock:vs,ownerId:ys,unlockTransfer:Ss,unlockTransferMulti:Cn,transferOrdinal:Os}});var mr=O((_u,Rn)=>{"use strict";f();var ft=je(),xs=or(),Ps=hr(),fr=pe(),pr=b(),T=V(),lr=D(),Ve=fr.scriptNum,dr=5e8,_s=u.Buffer.from([255,255,255,255]),Es=u.Buffer.from([0]);function ws(e,t){return e instanceof lr.Output?e:e instanceof pr?new lr.Output({script:e,satoshis:t}):fr.p2pkhOutput(e,t)}function Ts(e,t,r,i,n,o){o=o||5e4;for(var a=0;a<o;a++){e.nLockTime=n+a;var s=fr.rawPreimage(e,t,r,i);if(ft.sFromPreimage(s))return s}throw new Error("covenant grind failed after "+o+" tries")}function le(){if(!(this instanceof le))return new le;this._outputs=[],this._minLockTime=null}le.prototype.payTo=function(e,t){return this._outputs.push(ws(e,t)),this};le.prototype.lockUntil=function(e){if(!Number.isInteger(e)||e<1||e>4294967295)throw new Error("lockUntil: expected an integer in 1..4294967295, got "+e+' (nLockTime 0 means "no lock" \u2014 consensus treats such a transaction as final)');return this._minLockTime=e,this};le.prototype.outputs=function(){return this._outputs.map(function(e){return new lr.Output(e.toObject())})};le.prototype.describe=function(){var e=[];if(this._outputs.forEach(function(r,i){e.push("output["+i+"] = "+r.satoshis+" sat to "+r.script.toASM().slice(0,24)+"...")}),this._minLockTime!==null){var t=this._minLockTime<dr?"block height":"unix time";e.push("nLockTime >= "+this._minLockTime+" as a "+t),e.push("this input is non-final (nSequence != 0xffffffff)")}return"spend allowed iff: "+e.join(" AND ")};le.prototype.compile=function(){if(this._outputs.length===0&&this._minLockTime===null)throw new Error("empty policy: add at least one constraint (payTo / lockUntil)");var e=this,t=new pr().add(T.OP_DUP);if(ft.pushTxCore(t),t.add(T.OP_VERIFY),this._outputs.length){var r=ft.hashOutputs(this._outputs);t.add(T.OP_DUP),ft.extractHashOutputs(t),t.add(u.Buffer.from(r)).add(T.OP_EQUALVERIFY)}return this._minLockTime!==null&&(t.add(T.OP_DUP),t.add(Ve(44)).add(T.OP_RIGHT).add(Ve(4)).add(T.OP_LEFT),t.add(_s).add(T.OP_EQUAL).add(T.OP_NOT).add(T.OP_VERIFY),t.add(T.OP_DUP),t.add(Ve(8)).add(T.OP_RIGHT).add(Ve(4)).add(T.OP_LEFT),t.add(Es).add(T.OP_CAT).add(T.OP_BIN2NUM),this._minLockTime<dr&&t.add(T.OP_DUP).add(Ve(dr)).add(T.OP_LESSTHAN).add(T.OP_VERIFY),t.add(Ve(this._minLockTime)).add(T.OP_GREATERTHANOREQUAL).add(T.OP_VERIFY)),t.add(T.OP_DROP).add(T.OP_1),{lock:t,outputs:e.outputs(),describe:function(){return e.describe()},unlock:function(i,n,o){o=o||0;var a=e._minLockTime===null?0:e._minLockTime;return e._minLockTime!==null&&(i.inputs[o].sequenceNumber=4294967294),new pr().add(Ts(i,o,t,n,a))}}};function gr(){return new le}gr.perpetual=function(e){return xs.pelsCovenant(e)};gr.token=function(e,t){return Ps.ownershipToken(e,t)};Rn.exports={policy:gr,Policy:le}});var Dn=O((wu,qn)=>{"use strict";f();var Is=ge(),As=M(),bs=D(),ks=V(),Hs=pe();function Nn(e){if(e===0)return"OP_0";if(e>=1&&e<=75)return"PUSH("+e+")";if(e===76)return"OP_PUSHDATA1";if(e===77)return"OP_PUSHDATA2";if(e===78)return"OP_PUSHDATA4";try{return ks.fromNumber(e).toString()}catch{return"0x"+e.toString(16)}}function Bn(e,t){t=t||16;var r=u.Buffer.from(e).toString("hex");return r.length<=t*2?r||"0":r.slice(0,t*2)+"...("+e.length+"B)"}function Fs(e,t,r){r=r||{};var i=new Is,n=[];i.stepListener=function(a,s,c){n.push({phase:i.script===t?"lock":"unlock",op:Nn(a.opcode&&typeof a.opcode.toNumber=="function"?a.opcode.toNumber():a.opcode.num),stack:s.map(function(d){return Bn(d)}),altstack:c.map(function(d){return Bn(d)})})};var o=i.verify(e,t,r.tx||new bs,r.inputIndex||0,typeof r.flags=="number"?r.flags:Hs.flags(),new As(r.satoshis||0));return{ok:o,err:i.errstr||"",steps:n}}function Un(e){var t=[],r=null;return e.steps.forEach(function(i,n){i.phase!==r&&(t.push("-- "+i.phase+" script --"),r=i.phase);var o=i.stack.length?i.stack.join(" | "):"(empty)",a=i.altstack.length?" alt:["+i.altstack.join(" | ")+"]":"";t.push(String(n).padStart(3)+" "+i.op.padEnd(16)+" -> ["+o+"]"+a)}),t.push((e.ok?"VALID":"INVALID")+(e.err?" ("+e.err+")":"")),t.join(`
|
|
23
|
-
`)}function Cs(e){return console.log(Un(e)),e}qn.exports={trace:Fs,format:Un,print:Cs,opLabel:Nn}});var Gn=O((Iu,Mn)=>{"use strict";f();Mn.exports="9.
|
|
23
|
+
`)}function Cs(e){return console.log(Un(e)),e}qn.exports={trace:Fs,format:Un,print:Cs,opLabel:Nn}});var Gn=O((Iu,Mn)=>{"use strict";f();Mn.exports="9.23.0"});var zn=O((bu,Kn)=>{"use strict";f();var Ls=fe(),Vn=D(),Rs=It(),Bs=b(),p={Covenant:ai(),Preimage:J(),SIGHASH:li(),Builder:vi(),UTXOGenerator:Bi(),ScriptTester:Mi(),CovenantBuilder:Vt().CovenantBuilder,CovenantTemplates:Vt().CovenantTemplates,OpcodeMap:Dt(),ScriptUtils:Xi(),StackExaminer:Wi(),ScriptInterpreter:tn(),CovenantHelpers:pe(),Locks:dn(),PushTx:je(),PELS:or(),Token:hr(),Authorizers:cr(),DSL:mr(),Policy:mr().Policy,Debugger:Dn()};p.policy=p.DSL.policy;p.trace=function(e,t,r){return p.Debugger.trace(e,t,r)};p.verifyScript=function(e,t,r){return p.CovenantHelpers.verify(e,t,r)};p.perpetualCovenant=function(e){return p.PELS.pelsCovenant(e)};p.ownershipToken=function(e,t,r){return p.Token.ownershipToken(e,t,r)};p.valueCovenant=function(e){return p.PushTx.valueCovenant(e)};p.ordinalLock=function(e,t){return p.Token.ordinalLock(e,t)};p.transferOrdinal=function(e,t,r,i,n,o){return p.Token.transferOrdinal(e,t,r,i,n,o)};p.createCovenant=function(e,t){return new p.Covenant(e,t)};p.extractPreimage=function(e,t){return new p.Preimage(e,t)};p.analyzeSIGHASH=function(e){return new p.SIGHASH(e)};p.buildCovenant=function(e,t){return new p.Builder(e,t)};p.createUTXOGenerator=function(e){return new p.UTXOGenerator(e)};p.createTestEnvironment=function(e){return p.UTXOGenerator.createTestEnvironment(e)};p.testScript=function(e,t,r){return p.ScriptTester.test(e,t,r)};p.testCovenant=function(e,t,r){return p.ScriptTester.testCovenant(e,t,r)};p.testFieldExtraction=function(e,t,r){return p.ScriptTester.testFieldExtraction(e,t,r)};p.debugScript=function(e,t){var r=new p.ScriptTester(t);return r.debug(e)};p.explainZeroHashes=function(){return p.SIGHASH.explainZeroMystery()};p.getAllSIGHASHTypes=function(){return p.SIGHASH.getAllTypes()};p.demonstrateAllSIGHASH=function(){return p.SIGHASH.generateAllDemonstrations()};p.createCovenantBuilder=function(){return new p.CovenantBuilder};p.createValueLockCovenant=function(e){return p.CovenantTemplates.valueLock(e)};p.createHashLockCovenant=function(e){return p.CovenantTemplates.hashLock(e)};p.createComplexValidationCovenant=function(e){return p.CovenantTemplates.complexValidation(e)};p.getOpcodeMap=function(){return p.OpcodeMap.opcodeMap};p.simulateScript=function(e,t){return p.OpcodeMap.utils.simulate(e,t)};p.createASMFromJS=function(e){return p.OpcodeMap.utils.createASM(e)};p.scriptToASM=function(e){return p.ScriptUtils.scriptToASM(e)};p.asmToScript=function(e){return p.ScriptUtils.asmToScript(e)};p.asmToHex=function(e){return p.ScriptUtils.asmToHex(e)};p.hexToASM=function(e){return p.ScriptUtils.hexToASM(e)};p.scriptToHex=function(e){return p.ScriptUtils.scriptToHex(e)};p.validateASM=function(e){return p.ScriptUtils.validateASM(e)};p.validateScript=function(e){return p.ScriptUtils.validateScript(e)};p.estimateScriptSize=function(e){return p.ScriptUtils.estimateScriptSize(e)};p.optimizeScript=function(e){return p.ScriptUtils.optimizeScript(e)};p.compareScripts=function(e,t){return p.ScriptUtils.compareScripts(e,t)};p.explainScript=function(e){return p.ScriptUtils.explainScript(e)};p.scriptMetrics=function(e){return p.ScriptUtils.scriptMetrics(e)};p.analyzeComplexity=function(e){return p.ScriptUtils.analyzeComplexity(e)};p.findOptimizations=function(e){return p.ScriptUtils.findOptimizations(e)};p.covenantToEnglish=function(e){return p.ScriptUtils.covenantToEnglish(e)};p.batchTestScripts=function(e,t){return p.ScriptUtils.batchTestScripts(e,t)};p.examineStack=function(e,t){return p.StackExaminer.runScript(e,t)};p.debugScriptExecution=function(e,t,r){return r=r||{},r.stepMode?p.ScriptInterpreter.stepThroughScript(p.ScriptInterpreter.parseScript(e+" "+t),new Vn,!0):p.ScriptInterpreter.runFullEvaluation(p.ScriptInterpreter.parseScript(e),p.ScriptInterpreter.parseScript(t),new Vn)};p.parseScript=function(e){return p.ScriptInterpreter.parseScript(e)};p.printStack=function(e,t){return p.ScriptInterpreter.printStack(e,t)};p.createQuickCovenant=function(e,t){let r=p.createCovenantBuilder();switch(e){case"value_lock":return r.comment(`Value lock: minimum ${t.value} satoshis`).extractField("value").push(t.value).greaterThanOrEqual().verify().build();case"hash_lock":return r.comment(`Hash lock: requires preimage of ${t.hash}`).push("secret_placeholder").sha256().push(t.hash).equalVerify().build();case"time_lock":return r.comment(`Time lock: requires nLockTime > ${t.timestamp}`).extractField("nLockTime").push(t.timestamp).greaterThan().verify().build();case"multi_condition":let i=r.comment("Multi-condition covenant");return t.conditions.forEach(n=>{switch(n.type){case"value":i=i.extractField("value").push(n.value).greaterThanOrEqual().verify();break;case"hash":i=i.push("secret_placeholder").sha256().push(n.hash).equalVerify();break;case"time":i=i.extractField("nLockTime").push(n.timestamp).greaterThan().verify();break}}),i.build();default:throw new Error(`Unknown covenant type: ${e}`)}};p.completeCovenantFlow=function(e,t,r){var i=new p.Covenant(e);return i.completeFlow(t,r)};p.getEducationalResources=function(){return{zeroHashMystery:p.SIGHASH.explainZeroMystery(),sighashTypes:p.SIGHASH.getAllTypes(),exampleDemonstrations:p.SIGHASH.generateAllDemonstrations()}};p.utils={};p.utils.reconstructP2pkhScript=function(e){return Bs.buildPublicKeyHashOut(e).toHex()};p.utils.createCovenantAddress=function(e){var t=Ls.sha256ripemd160(e.toBuffer());return Rs.fromScriptHash(t)};p.utils.decodeCompactSize=function(e,t){return p.Preimage.decodeCompactSize(e,t)};p.version=Gn();p.description="Smart Contract Framework for Bitcoin SV";p.features={BIP143_PREIMAGE:!0,COMPACT_SIZE_VARINT:!0,BIDIRECTIONAL_EXTRACTION:!0,SIGHASH_DETECTION:!0,ZERO_HASH_WARNINGS:!0,MULTI_FIELD_VALIDATION:!0,REAL_UTXO_GENERATION:!0,SCRIPT_TESTING:!0,LOCAL_VERIFICATION:!0,JAVASCRIPT_TO_SCRIPT:!0,OPCODE_MAPPING:!0,COVENANT_BUILDER:!0,SCRIPT_ANALYSIS:!0,SCRIPT_OPTIMIZATION:!0,SCRIPT_CONVERSION:!0,BATCH_TESTING:!0,QUICK_COVENANTS:!0,SCRIPT_EXPLANATIONS:!0,STACK_EXAMINATION:!0,SCRIPT_DEBUGGING:!0,STEP_BY_STEP_EXECUTION:!0,INTERACTIVE_DEBUGGING:!0};p.interpretScript=p.debugScriptExecution;p.getScriptMetrics=p.scriptMetrics;Kn.exports=p});var Ns=O((Hu,$n)=>{f();$n.exports=zn()});return Ns();})();
|
|
24
24
|
if(typeof module!=="undefined"&&module.exports){module.exports=bsvSmartContract}else if(typeof define==="function"&&define.amd){define([],function(){return bsvSmartContract})}
|