gamegold 4.0.1 → 4.0.5
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/lib/gamegold-worker.js +43 -43
- package/lib/gamegold.js +48 -48
- package/package.json +1 -1
package/lib/gamegold-worker.js
CHANGED
|
@@ -37,7 +37,7 @@ const path = require('path');var gpath = path.join(__dirname, '../../../', 'node
|
|
|
37
37
|
/*!
|
|
38
38
|
* script.js - script interpreter for vallnet
|
|
39
39
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
40
|
-
*/const i=Buffer.alloc(0),s=r(0),n=r(248),a=r(169),o=r(130),c=r(114),u=r(101),h=r(22),l=h.opcodes,p=h.types,f=h.outputLockType,d=r(7),m=r(27),g=r(6),y=r(146),v=r(28),b=r(3),w=r(331),x=r(1),k=r(20),S=r(2),E=r(4),_=r(12),{ContractType:A,ContractStatus:R}=r(5),I=r(170),j={199:{len:11,list:[6,8]},197:{len:22,list:[9,18]},198:{len:19,list:[6,15]}},C=2;class P{constructor(t){this.raw=i,this.code=[],this.indicator=w.inst(0),t&&this.fromOptions(t)}createScript(t,e=p.PUBKEYHASH){switch(this.clear(),e){case p.PUBKEY:this.$fromPubkey(t);break;case p.PUBKEYHASH:this.$fromPubkeyhash(t);break;case p.PROPEXTEND:this.$fromPkhExtend(t);break;case p.MULTISIG:var[r,i,s]=t;this.$fromMultisig(r,i,s);break;case p.SCRIPTHASH:this.$fromScripthash(t);break;case p.NULLDATA:this.$fromNulldata(t);break;case p.WITNESS:var[r,i,s]=t;this.$fromProgram(r,i,s)}return 0<this.code.length&&this.compile(),this}static createScript(t,e=p.PUBKEYHASH){return(new P).createScript(t,e)}$fromNulldata(t){s(Buffer.isBuffer(t)),s(t.length<=m.MAX_OP_RETURN,"Nulldata too large."),this.pushOp(l.OP_RETURN),this.pushData(t)}$fromPubkey(t){s(Buffer.isBuffer(t)&&(33===t.length||65===t.length)),this.code.push(a.fromPush(t)),this.code.push(a.fromOp(l.OP_CHECKSIG))}$fromPubkeyhash(t){s(Buffer.isBuffer(t)&&20===t.length),this.code.push(a.fromOp(l.OP_DUP)),this.code.push(a.fromOp(l.OP_HASH160)),this.code.push(a.fromPush(t)),this.code.push(a.fromOp(l.OP_EQUALVERIFY)),this.code.push(a.fromOp(l.OP_CHECKSIG))}$fromPkhExtend(t){s(Buffer.isBuffer(t.info)&&t.info.length<=m.MAX_OP_INFO),s(Buffer.isBuffer(t.hash)&&20===t.hash.length),this.code.push(a.fromOp(t.opcode)),this.code.push(a.fromPush(t.info)),this.code.push(a.fromOp(l.OP_DROP)),this.code.push(a.fromOp(l.OP_DUP)),this.code.push(a.fromOp(l.OP_HASH160)),this.code.push(a.fromPush(t.hash)),this.code.push(a.fromOp(l.OP_EQUALVERIFY)),this.code.push(a.fromOp(l.OP_CHECKSIG))}$fromMultisig(t,e,r){s(x.isU8(t)&&x.isU8(e)),s(Array.isArray(r)),s(r.length===e,"`n` keys are required for multisig."),s(1<=t&&t<=e),s(1<=e&&e<=15),this.clear(),this.pushSmall(t);for(const t of r.slice().sort((t,e)=>t.compare(e)))this.pushData(t);this.pushSmall(e),this.pushOp(l.OP_CHECKMULTISIG)}$fromScripthash(t){s(Buffer.isBuffer(t)&&20===t.length),this.code.push(a.fromOp(l.OP_HASH160)),this.code.push(a.fromPush(t)),this.code.push(a.fromOp(l.OP_EQUAL))}$fromProgram(t,e,r){var i;s(x.isU8(t)&&0<=t&&t<=16),s(Buffer.isBuffer(e)&&2<=e.length&&e.length<=40),r&&(i=Buffer.from(JSON.stringify(r)),s(Buffer.isBuffer(i)&&i.length<=m.MAX_OP_INFO),h.OperCodeFromType[r.oper]&&(this.code.push(a.fromOp(h.OperCodeFromType[r.oper])),this.code.push(a.fromPush(i)),this.code.push(a.fromOp(l.OP_DROP)))),this.code.push(a.fromSmall(t)),this.code.push(a.fromPush(e))}get length(){return this.code.length}set length(t){return this.code.length=t,this.code.length}fromOptions(t){if(s(t,"Script data is required."),Buffer.isBuffer(t))return this.fromRaw(t);if(Array.isArray(t))return this.fromArray(t);if(t.raw){if(!t.code)return this.fromRaw(t.raw);s(Buffer.isBuffer(t.raw),"Raw must be a Buffer."),this.raw=t.raw}if(t.code){if(!t.raw)return this.fromArray(t.code);s(Array.isArray(t.code),"Code must be an array."),this.code=t.code}return this}static fromOptions(t){return(new P).fromOptions(t)}entries(){return this.code.entries()}[Symbol.iterator](){return this.code[Symbol.iterator]()}toArray(){return this.code.slice()}fromArray(t){s(Array.isArray(t)),this.clear();for(const e of t)this.push(e);return this.compile()}static fromArray(t){return(new P).fromArray(t)}toItems(){const t=[];for(const r of this.code){var e=r.toPush();if(!e)throw new Error("Non-push opcode in script.");t.push(e)}return t}fromItems(t,e=!0){s(Array.isArray(t));let r=[];if(e)this.clear();else{let t=this.shift();for(;t;)r.push(t),t=this.shift()}for(const e of t)this.pushData(e);for(const t of r)this.push(t);return this.compile()}static fromItems(t){return(new P).fromItems(t)}toStack(){return new o(this.toItems())}fromStack(t,e=!0){return this.fromItems(t.items,e)}static fromStack(t){return(new P).fromStack(t)}clone(){return(new P).inject(this)}inject(t){return this.raw=t.raw,this.code=t.code.slice(),this}equals(t){return s(P.isScript(t)),this.raw.equals(t.raw)}compare(t){return s(P.isScript(t)),this.raw.compare(t.raw)}clear(){return this.raw=i,this.code.length=0,this}inspect(){return`<Script: ${this.toString()}>`}toString(){const t=[];for(const e of this.code)t.push(e.toFormat());return t.join(" ")}toASM(t){this.isNulldata()&&(t=!1);const e=[];for(const r of this.code)e.push(r.toASM(t));return e.join(" ")}compile(){if(0===this.code.length)return this.clear();let t=0;for(const e of this.code)t+=e.getSize();const e=new E(t);for(const t of this.code)t.toWriter(e);return this.raw=e.render(),this}toWriter(t){return t.writeVarBytes(this.raw),t}toRaw(){return this.raw}toJSON(){return this.toRaw().toString("hex")}fromJSON(t){return s("string"==typeof t,"Code must be a string."),this.fromRaw(Buffer.from(t,"hex"))}static fromJSON(t){return(new P).fromJSON(t)}getSubscript(t){if(0===t)return this.clone();const e=new P;for(let i=t;i<this.code.length;i++){var r=this.code[i];if(-1===r.value)break;e.code.push(r)}return e.compile()}removeSeparators(){let t=!1;for(const e of this.code){if(-1===e.value)break;if(e.value===l.OP_CODESEPARATOR){t=!0;break}}if(!t)return this;const e=new P;for(const t of this.code){if(-1===t.value)break;t.value!==l.OP_CODESEPARATOR&&e.code.push(t)}return e.compile()}getLocktime(){return 2<=this.code.length&&this.getOp(1)==l.OP_CHECKLOCKTIMEVERIFY?this.getInt(0,!1,5):-1}getSequence(){return 2<=this.code.length&&this.getOp(1)==l.OP_CHECKSEQUENCEVERIFY?this.getInt(0,!1,5):-1}getLockStatus(){let t=f.NOCHECK,e=-1,r=-1;var i,s;return 2<=this.code.length&&this.getOp(1)==l.OP_CHECKLOCKTIMEVERIFY&&((i=this.getInt(0,!1,5))<d.LOCKTIME_THRESHOLD?(t=f.CHECKABSOLUTEBLOCK,e=i):(t=f.CHECKABSOLUTETIME,r=i)),2<=this.code.length&&this.getOp(1)==l.OP_CHECKSEQUENCEVERIFY&&((i=this.getInt(0,!1,5))&d.SEQUENCE_DISABLE_FLAG||(s=i&d.SEQUENCE_MASK,i&d.SEQUENCE_TYPE_FLAG?(t=f.CHECKRELATIVETIME,r=s):(t=f.CHECKRELATIVEBLOCK,e=s))),[t,e,r]}execute(t,e,r,i,n,a,o){if(null==e&&(e=P.flags.STANDARD_VERIFY_FLAGS),null==o&&(o=0),this.raw.length>d.MAX_SCRIPT_SIZE)throw new c("SCRIPT_SIZE");const h=[],p=[];let f=0,m=0,y=0,v=!1;e&P.flags.VERIFY_MINIMALDATA&&(v=!0);for(let U=0;U<this.code.length;U++){const q=this.code[U];if(-1===q.value)throw new c("BAD_OPCODE",q,U);if(q.data&&q.data.length>d.MAX_SCRIPT_PUSH)throw new c("PUSH_SIZE",q,U);if(q.value>l.OP_16&&++m>d.MAX_SCRIPT_OPS)throw new c("OP_COUNT",q,U);if(q.isDisabled())throw new c("DISABLED_OPCODE",q,U);if(y&&!q.isBranch()){if(t.length+p.length>d.MAX_SCRIPT_STACK)throw new c("STACK_SIZE",q,U)}else if(q.data){if(v&&!q.isMinimal())throw new c("MINIMALDATA",q,U);if(t.push(q.data),t.length+p.length>d.MAX_SCRIPT_STACK)throw new c("STACK_SIZE",q,U)}else{switch(q.value){case l.OP_PROPCREATE:case l.OP_PROPEXCHANGE:case l.OP_CPREGISTER:case l.OP_CPCHANGE:case l.OP_HTLCSUGGEST:case l.OP_HTLCASSENT:case l.OP_COMMENT:case l.OP_COINBASE:break;case l.OP_PROMISE:this.indicator.set(C);break;case l.OP_RETURN:throw new c("OP_RETURN",q,U);case l.OP_0:t.pushInt(0);break;case l.OP_1NEGATE:t.pushInt(-1);break;case l.OP_1:case l.OP_2:case l.OP_3:case l.OP_4:case l.OP_5:case l.OP_6:case l.OP_7:case l.OP_8:case l.OP_9:case l.OP_10:case l.OP_11:case l.OP_12:case l.OP_13:case l.OP_14:case l.OP_15:case l.OP_16:t.pushInt(q.value-80);break;case l.OP_NOP:break;case l.OP_CHECKLOCKTIMEVERIFY:{if(!(e&P.flags.VERIFY_CHECKLOCKTIMEVERIFY)){if(e&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS)throw new c("DISCOURAGE_UPGRADABLE_NOPS",q,U);break}if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);const s=t.getNum(-1,v,5);if(s.isNeg())throw new c("NEGATIVE_LOCKTIME",q,U);var b=s.toDouble();if(r.verifyLocktime(i,b))break;throw new c("UNSATISFIED_LOCKTIME",q,U)}case l.OP_CHECKSEQUENCEVERIFY:{if(!(e&P.flags.VERIFY_CHECKSEQUENCEVERIFY)){if(e&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS)throw new c("DISCOURAGE_UPGRADABLE_NOPS",q,U);break}if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);const s=t.getNum(-1,v,5);if(s.isNeg())throw new c("NEGATIVE_LOCKTIME",q,U);if(b=s.toDouble(),r.verifySequence(i,b))break;throw new c("UNSATISFIED_LOCKTIME",q,U)}case l.OP_NOP1:case l.OP_NOP4:case l.OP_NOP5:case l.OP_NOP6:case l.OP_NOP7:case l.OP_NOP8:case l.OP_NOP9:case l.OP_NOP10:if(e&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS)throw new c("DISCOURAGE_UPGRADABLE_NOPS",q,U);break;case l.OP_IF:case l.OP_NOTIF:{let r=!1;if(!y){if(t.length<1)throw new c("UNBALANCED_CONDITIONAL",q,U);if(1===o&&e&P.flags.VERIFY_MINIMALIF){if(1<(w=t.get(-1)).length)throw new c("MINIMALIF");if(1===w.length&&1!==w[0])throw new c("MINIMALIF")}r=t.getBool(-1),q.value===l.OP_NOTIF&&(r=!r),t.pop()}h.push(r),r||(y+=1);break}case l.OP_ELSE:if(0===h.length)throw new c("UNBALANCED_CONDITIONAL",q,U);h[h.length-1]=!h[h.length-1],h[h.length-1]?--y:y+=1;break;case l.OP_ENDIF:if(0===h.length)throw new c("UNBALANCED_CONDITIONAL",q,U);h.pop()||--y;break;case l.OP_VERIFY:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);if(!t.getBool(-1))throw new c("VERIFY",q,U);t.pop();break;case l.OP_TOALTSTACK:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);p.push(t.pop());break;case l.OP_FROMALTSTACK:if(0===p.length)throw new c("INVALID_ALTSTACK_OPERATION",q,U);t.push(p.pop());break;case l.OP_2DROP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.pop(),t.pop();break;case l.OP_2DUP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);var w=t.get(-2),x=t.get(-1);t.push(w),t.push(x);break;case l.OP_3DUP:if(t.length<3)throw new c("INVALID_STACK_OPERATION",q,U);x=t.get(-3);var k=t.get(-2),S=t.get(-1);t.push(x),t.push(k),t.push(S);break;case l.OP_2OVER:if(t.length<4)throw new c("INVALID_STACK_OPERATION",q,U);k=t.get(-4),S=t.get(-3),t.push(k),t.push(S);break;case l.OP_2ROT:if(t.length<6)throw new c("INVALID_STACK_OPERATION",q,U);var E=t.get(-6),_=t.get(-5);t.erase(-6,-4),t.push(E),t.push(_);break;case l.OP_2SWAP:if(t.length<4)throw new c("INVALID_STACK_OPERATION",q,U);t.swap(-4,-2),t.swap(-3,-1);break;case l.OP_IFDUP:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.getBool(-1)&&(E=t.get(-1),t.push(E));break;case l.OP_DEPTH:t.pushInt(t.length);break;case l.OP_DROP:{if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);let e=t.pop();if(this.indicator.check(C)){this.indicator.unSet(C);try{var A=JSON.parse(e.toString());new I(A,a).run(t)}catch(p){}}break}case l.OP_DUP:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(t.get(-1));break;case l.OP_NIP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.remove(-2);break;case l.OP_OVER:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.push(t.get(-2));break;case l.OP_PICK:case l.OP_ROLL:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);if(_=t.getInt(-1,v,4),t.pop(),_<0||_>=t.length)throw new c("INVALID_STACK_OPERATION",q,U);var R=t.get(-_-1);q.value===l.OP_ROLL&&t.remove(-_-1),t.push(R);break;case l.OP_ROT:if(t.length<3)throw new c("INVALID_STACK_OPERATION",q,U);t.swap(-3,-2),t.swap(-2,-1);break;case l.OP_SWAP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.swap(-2,-1);break;case l.OP_TUCK:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.insert(-2,t.get(-1));break;case l.OP_SIZE:if(t.length<1)throw new c("INVALID_STACK_OPERATION",q,U);t.pushInt(t.get(-1).length);break;case l.OP_EQUAL:case l.OP_EQUALVERIFY:{if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);const e=t.get(-2);R=t.get(-1);var j=e.equals(R);if(t.pop(),t.pop(),t.pushBool(j),q.value===l.OP_EQUALVERIFY){if(!j)throw new c("EQUALVERIFY",q,U);t.pop()}break}case l.OP_1ADD:case l.OP_1SUB:case l.OP_NEGATE:case l.OP_ABS:case l.OP_NOT:case l.OP_0NOTEQUAL:{if(t.length<1)throw new c("INVALID_STACK_OPERATION",q,U);let e,r=t.getNum(-1,v,4);switch(q.value){case l.OP_1ADD:r.iaddn(1);break;case l.OP_1SUB:r.isubn(1);break;case l.OP_NEGATE:r.ineg();break;case l.OP_ABS:r.iabs();break;case l.OP_NOT:e=r.isZero(),r=u.fromBool(e);break;case l.OP_0NOTEQUAL:e=!r.isZero(),r=u.fromBool(e);break;default:s(!1,"Fatal script error.")}t.pop(),t.pushNum(r);break}case l.OP_ADD:case l.OP_SUB:case l.OP_BOOLAND:case l.OP_BOOLOR:case l.OP_NUMEQUAL:case l.OP_NUMEQUALVERIFY:case l.OP_NUMNOTEQUAL:case l.OP_LESSTHAN:case l.OP_GREATERTHAN:case l.OP_LESSTHANOREQUAL:case l.OP_GREATERTHANOREQUAL:case l.OP_MIN:case l.OP_MAX:{if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);const e=t.getNum(-2,v,4),r=t.getNum(-1,v,4);let i,n;switch(q.value){case l.OP_ADD:i=e.iadd(r);break;case l.OP_SUB:i=e.isub(r);break;case l.OP_BOOLAND:n=e.toBool()&&r.toBool(),i=u.fromBool(n);break;case l.OP_BOOLOR:n=e.toBool()||r.toBool(),i=u.fromBool(n);break;case l.OP_NUMEQUAL:case l.OP_NUMEQUALVERIFY:n=e.eq(r),i=u.fromBool(n);break;case l.OP_NUMNOTEQUAL:n=!e.eq(r),i=u.fromBool(n);break;case l.OP_LESSTHAN:n=e.lt(r),i=u.fromBool(n);break;case l.OP_GREATERTHAN:n=e.gt(r),i=u.fromBool(n);break;case l.OP_LESSTHANOREQUAL:n=e.lte(r),i=u.fromBool(n);break;case l.OP_GREATERTHANOREQUAL:n=e.gte(r),i=u.fromBool(n);break;case l.OP_MIN:i=u.min(e,r);break;case l.OP_MAX:i=u.max(e,r);break;default:s(!1,"Fatal script error.")}if(t.pop(),t.pop(),t.pushNum(i),q.value===l.OP_NUMEQUALVERIFY){if(!t.getBool(-1))throw new c("NUMEQUALVERIFY",q,U);t.pop()}break}case l.OP_WITHIN:{if(t.length<3)throw new c("INVALID_STACK_OPERATION",q,U);const e=t.getNum(-3,v,4),r=t.getNum(-2,v,4);j=t.getNum(-1,v,4);var B=r.lte(e)&&e.lt(j);t.pop(),t.pop(),t.pop(),t.pushBool(B);break}case l.OP_RIPEMD160:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.ripemd160(t.pop()));break;case l.OP_SHA1:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.sha1(t.pop()));break;case l.OP_SHA256:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.sha256(t.pop()));break;case l.OP_HASH160:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.hash160(t.pop()));break;case l.OP_HASH256:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.hash256(t.pop()));break;case l.OP_CODESEPARATOR:f=U+1;break;case l.OP_CHECKSIG:case l.OP_CHECKSIGVERIFY:{if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);B=t.get(-2);var N,D=t.get(-1);const s=this.getSubscript(f);0===o&&s.findAndDelete(B),T(B,e),O(D,e,o);let a=!1;if(0<B.length&&(N=B[B.length-1],a=F(N=r.signatureHash(i,s,n,N,o),B,D)),!a&&e&P.flags.VERIFY_NULLFAIL&&0!==B.length)throw new c("NULLFAIL",q,U);if(t.pop(),t.pop(),t.pushBool(a),q.value===l.OP_CHECKSIGVERIFY){if(!a)throw new c("CHECKSIGVERIFY",q,U);t.pop()}break}case l.OP_CHECKMULTISIG:case l.OP_CHECKMULTISIGVERIFY:{if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");let s=1;if(t.length<s)throw new c("INVALID_STACK_OPERATION",q,U);let a,u,h=t.getInt(-s,v,4),p=h+2;if(h<0||h>d.MAX_MULTISIG_PUBKEYS)throw new c("PUBKEY_COUNT",q,U);if((m+=h)>d.MAX_SCRIPT_OPS)throw new c("OP_COUNT",q,U);if(s+=1,a=s,s+=h,t.length<s)throw new c("INVALID_STACK_OPERATION",q,U);let g=t.getInt(-s,v,4);if(g<0||g>h)throw new c("SIG_COUNT",q,U);if(s+=1,u=s,s+=g,t.length<s)throw new c("INVALID_STACK_OPERATION",q,U);const y=this.getSubscript(f);for(let e=0;e<g;e++){var L=t.get(-u-e);0===o&&y.findAndDelete(L)}let b=!0;for(;b&&0<g;){var H,z=t.get(-u),M=t.get(-a);T(z,e),O(M,e,o),0<z.length&&(H=z[z.length-1],F(r.signatureHash(i,y,n,H,o),z,M)&&(u+=1,--g)),a+=1,--h,g>h&&(b=!1)}for(;1<s;){if(!b&&e&P.flags.VERIFY_NULLFAIL&&0===p&&0!==t.get(-1).length)throw new c("NULLFAIL",q,U);0<p&&--p,t.pop(),--s}if(t.length<1)throw new c("INVALID_STACK_OPERATION",q,U);if(e&P.flags.VERIFY_NULLDUMMY&&0!==t.get(-1).length)throw new c("SIG_NULLDUMMY",q,U);if(t.pop(),t.pushBool(b),q.value===l.OP_CHECKMULTISIGVERIFY){if(!b)throw new c("CHECKMULTISIGVERIFY",q,U);t.pop()}break}default:throw new c("BAD_OPCODE",q,U)}if(t.length+p.length>d.MAX_SCRIPT_STACK)throw new c("STACK_SIZE",q,U)}}if(0!==h.length)throw new c("UNBALANCED_CONDITIONAL")}findAndDelete(t){const e=a.fromPush(t);if(this.raw.length<e.getSize())return 0;let r=!1;for(const t of this.code){if(-1===t.value)break;if(t.equals(e)){r=!0;break}}if(!r)return 0;const i=[];let s=0;for(const t of this.code){if(-1===t.value)break;t.equals(e)?s+=1:i.push(t)}return this.code=i,this.compile(),s}indexOf(t){for(let e=0;e<this.code.length;e++){const r=this.code[e];if(-1===r.value)break;if(r.data&&r.data.equals(t))return e}return-1}isCode(){for(const t of this.code){if(-1===t.value)return!1;if(t.isDisabled())return!1;switch(t.value){case l.OP_RESERVED:case l.OP_NOP:case l.OP_VER:case l.OP_VERIF:case l.OP_VERNOTIF:case l.OP_RESERVED1:case l.OP_RESERVED2:case l.OP_NOP1:return!1}if(t.value>l.OP_PROPMAX)return!1}return!0}fromAddress(t,e){"string"==typeof t&&(t=_.fromString(t)),s(t instanceof _,"Not an address.");let r=!1;if(t.isPubkeyhash())if(e&&e.oper)switch(e.oper){case A.cpRegister:this.createScript({opcode:P.opcodes.OP_CPREGISTER,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.cpChange:this.createScript({opcode:P.opcodes.OP_CPCHANGE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.propCreate:this.createScript({opcode:P.opcodes.OP_PROPCREATE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.propExchange:this.createScript({opcode:P.opcodes.OP_PROPEXCHANGE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.coinbase:this.createScript({opcode:P.opcodes.OP_COINBASE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND)}else this.createScript(t.hash);else t.isScripthash()?this.createScript(t.hash,P.types.SCRIPTHASH):t.isProgram()&&this.createScript([t.version,t.hash,e],P.types.WITNESS);if(e&&e.locktype&&(!e.oper||h.unspendableCodes.indexOf(e.oper)<0))switch(e.locktype){case f.CHECKABSOLUTEBLOCK:case f.CHECKABSOLUTETIME:this.code.unshift(a.fromOp(l.OP_DROP)),this.code.unshift(a.fromOp(l.OP_CHECKLOCKTIMEVERIFY)),this.code.unshift(a.fromInt(e.locktime)),r=!0;break;case f.CHECKRELATIVEBLOCK:case f.CHECKRELATIVETIME:e.locktype===f.CHECKRELATIVETIME&&(e.locktime=e.locktime|d.SEQUENCE_TYPE_FLAG),this.code.unshift(a.fromOp(l.OP_DROP)),this.code.unshift(a.fromOp(l.OP_CHECKSEQUENCEVERIFY)),this.code.unshift(a.fromInt(e.locktime)),r=!0}if(r&&this.compile(),0<this.code.length)return this;throw new Error("Unknown address type.")}static fromAddress(t,e){return(new P).fromAddress(t,e)}fromCommitment(t,e){const r=new E(36);return r.writeU32BE(2854332909),r.writeHash(t),this.clear(),this.pushOp(l.OP_RETURN),this.pushData(r.render()),e&&this.pushData(e),this.compile()}static fromCommitment(t,e){return(new P).fromCommitment(t,e)}getRedeem(){let t=null;for(const e of this.code){if(-1===e.value)return null;if(e.value>l.OP_16)return null;t=e.data}return t?P.fromRaw(t):null}getType(){return this.isPubkey()?p.PUBKEY:this.isPubkeyhash()?p.PUBKEYHASH:this.isScripthash()?p.SCRIPTHASH:this.isWitnessPubkeyhash()?p.WITNESSPUBKEYHASH:this.isWitnessScripthash()?p.WITNESSSCRIPTHASH:this.isWitnessMasthash()?p.WITNESSMASTHASH:this.isMultisig()?p.MULTISIG:this.isNulldata()?p.NULLDATA:p.NONSTANDARD}isPubkey(t){return t?35<=this.raw.length&&(33===this.raw[0]||65===this.raw[0])&&this.raw[0]+2===this.raw.length&&this.raw[this.raw.length-1]===l.OP_CHECKSIG:2===this.code.length&&(33===(t=this.getLength(0))||65===t)&&this.getOp(1)===l.OP_CHECKSIG}isPubkeyhash(t){if(t||25===this.raw.length)return 25===this.raw.length&&this.raw[0]===l.OP_DUP&&this.raw[1]===l.OP_HASH160&&20===this.raw[2]&&this.raw[23]===l.OP_EQUALVERIFY&&this.raw[24]===l.OP_CHECKSIG;let e=0;for(var r of this.code)if(r.value==l.OP_DUP){e=this.code.indexOf(r);break}return this.getOp(0+e)===l.OP_DUP&&this.getOp(1+e)===l.OP_HASH160&&20===this.getLength(2+e)&&this.getOp(3+e)===l.OP_EQUALVERIFY&&this.getOp(4+e)===l.OP_CHECKSIG}isMultisig(t){if(this.code.length<4||19<this.code.length)return!1;if(this.getOp(-1)!==l.OP_CHECKMULTISIG)return!1;var e=this.getSmall(0);if(e<1)return!1;var r=this.getSmall(-2);if(r<1||r<e)return!1;if(this.code.length!==r+3)return!1;for(let e=1;e<r+1;e++){const r=this.code[e];var i=r.toLength();if(33!==i&&65!==i)return!1;if(t&&!r.isMinimal())return!1}return!0}isUnknown(){return this.getType()===p.NONSTANDARD}isStandard(){var[t,e]=this.getMultisig();return-1!==t?!(e<1||3<e||t<1||e<t):this.isNulldata()?this.raw.length<=m.MAX_OP_RETURN_BYTES:this.getType()!==p.NONSTANDARD}isScripthash(){return 23===this.raw.length&&this.raw[0]===l.OP_HASH160&&20===this.raw[1]&&this.raw[22]===l.OP_EQUAL}isNulldata(t){if(0===this.code.length)return!1;if(this.getOp(0)!==l.OP_RETURN)return!1;if(1!==this.code.length){if(t&&this.raw.length>m.MAX_OP_RETURN_BYTES)return!1;for(let e=1;e<this.code.length;e++){const r=this.code[e];if(-1===r.value)return!1;if(r.value>l.OP_16)return!1;if(t&&!r.isMinimal())return!1}}return!0}isCommitment(){return 38<=this.raw.length&&this.raw[0]===l.OP_RETURN&&36===this.raw[1]&&2854332909===this.raw.readUInt32BE(2,!0)}isWitnessPubkeyhash(){return 22===this.raw.length&&this.raw[0]===l.OP_0&&20===this.raw[1]||5==this.code.length&&this.code[2].value==l.OP_DROP&&this.code[3].value==l.OP_0&&20==this.code[4].value}getWitnessPubkeyhash(){return this.isWitnessPubkeyhash()?5==this.code.length?this.getData(4):this.getData(1):null}isWitnessScripthash(){return 34===this.raw.length&&this.raw[0]===l.OP_0&&32===this.raw[1]}getWitnessScripthash(){return this.isWitnessScripthash()?this.getData(1):null}isProgram(){if(2==this.code.length){if(4<=this.raw.length&&this.raw.length<=42&&(this.raw[0]==l.OP_0||this.raw[0]>=l.OP_1&&this.raw[0]<=l.OP_16)&&this.raw[1]+2==this.raw.length)return!0}else if(5==this.code.length&&4<=this.raw.length&&this.code[2].value==l.OP_DROP&&(this.code[3].value==l.OP_0||this.code[3].value>=l.OP_1&&this.code[3].value<=l.OP_16))return!0;return!1}isWitnessMasthash(){return 34===this.raw.length&&this.raw[0]===l.OP_1&&32===this.raw[1]}isUnspendable(){return this.raw.length>d.MAX_SCRIPT_SIZE||0<this.raw.length&&this.raw[0]===l.OP_RETURN}getSize(){return this.raw.length}getVarSize(){return b.sizeVarBytes(this.raw)}getReturnData(t){if(!(this.code&&this.code[0]&&this.code[1]&&this.code[1].data))return null;if(t)if(Array.isArray(t)){let r=!1;for(var e of t)if(this.code[0].value===e){r=!0;break}if(!r)return null}else if(this.code[0].value!==t)return null;try{return x.parseJson(this.code[1].data.toString())}catch(t){return null}}getReturnType(t){if(!this.code||!this.code[0])return null;if(t)if(Array.isArray(t)){let r=!1;for(var e of t)if(this.code[0].value===e){r=!0;break}if(!r)return null}else if(this.code[0].value!==t)return null;return this.code[0].value}hash160(t){let e=g.hash160(this.toRaw());return"hex"===t?e.toString("hex"):e}sha256(t){let e=g.sha256(this.toRaw());return"hex"===t?e.toString("hex"):e}getPubkey(t){return this.isPubkey(t)?t?this.raw.slice(1,1+this.raw[0]):this.getData(0):null}getMultiPubkeyhash(){let t=j[this.getOp(0)];return t&&this.code.length==t.len?t.list.map(t=>this.getData(t)):null}getPubkeyhash(t){if(this.isPubkeyhash(t)){if(t)return this.raw.slice(3,23);for(var e of this.code)if(e.value==l.OP_CHECKSIG)return this.getData(this.code.indexOf(e)-2)}return null}getMultisig(t){return this.isMultisig(t)?[this.getSmall(0),this.getSmall(-2)]:[-1,-1]}getScripthash(){return this.isScripthash()?this.getData(1):null}getNulldata(t){if(!this.isNulldata(t))return null;for(let t=1;t<this.code.length;t++){var e=this.code[t].toPush();if(e)return e}return i}getCommitment(){return this.isCommitment()?this.raw.slice(6,38):null}getProgram(){return this.isProgram()?2==this.code.length?new n(this.getSmall(0),this.getData(1)):5==this.code.length?new n(this.getSmall(3),this.getData(4)):null:null}forWitness(){var t;return this.isProgram()?this.clone():(t=this.getPubkey())?(t=g.hash160(t),P.createScript([0,t],P.types.WITNESS)):(t=this.getPubkeyhash())?P.createScript([0,t],P.types.WITNESS):P.createScript([0,this.sha256()],P.types.WITNESS)}getWitnessMasthash(){return this.isWitnessMasthash()?this.getData(1):null}getInputType(){return this.isPubkeyInput()?p.PUBKEY:this.isPubkeyhashInput()?p.PUBKEYHASH:this.isScripthashInput()?p.SCRIPTHASH:this.isMultisigInput()?p.MULTISIG:p.NONSTANDARD}isPubkeyhashInput(){var t,e;return 2===this.code.length&&(t=this.getLength(0),e=this.getLength(1),9<=t&&t<=73&&(33===e||65===e))}isUnknownInput(){return this.getInputType()===p.NONSTANDARD}isPubkeyInput(){var t;return 1===this.code.length&&9<=(t=this.getLength(0))&&t<=73}isScripthashInput(){if(this.code.length<2)return!1;var t=this.getData(-1);if(!t)return!1;if(0===t.length)return!1;if(h.isSignatureEncoding(t))return!1;if(h.isKeyEncoding(t))return!1;const e=P.fromRaw(t);return!!e.isCode()&&!e.isUnspendable()&&!!this.isPushOnly()}isMultisigInput(){if(this.code.length<2)return!1;if(this.getOp(0)!==l.OP_0)return!1;if(this.getOp(1)>l.OP_PUSHDATA4)return!1;if(this.isScripthashInput())return!1;for(let e=1;e<this.code.length;e++){var t=this.getLength(e);if(t<9||73<t)return!1}return!0}getPubkeyInput(){return this.isPubkeyInput()?this.getData(0):null}getPubkeyhashInput(){return this.isPubkeyhashInput()?[this.getData(0),this.getData(1)]:[null,null]}getMultisigInput(){if(!this.isMultisigInput())return null;const t=[];for(let e=1;e<this.code.length;e++)t.push(this.getData(e));return t}getScripthashInput(){return this.isScripthashInput()?this.getData(-1):null}getCoinbaseHeight(){return P.getCoinbaseHeight(this.raw)}static getCoinbaseHeight(t){if(0===t.length)return-1;if(t[0]>=l.OP_1&&t[0]<=l.OP_16)return t[0]-80;if(6<t[0])return-1;const e=a.fromRaw(t),r=e.toNum();return r?!r.isNeg()&&e.equals(a.fromNum(r))?r.toDouble():-1:1}test(t){for(const e of this.code){if(-1===e.value)break;if(e.data&&0!==e.data.length){if(t.test(e.data))return!0;if(33==e.data.length&&t.test(g.hash160(e.data)))return!0}}return!1}isPushOnly(){for(const t of this.code){if(-1===t.value)return!1;if(t.value>l.OP_16)return!1}return!0}getSigops(t){let e=0,r=-1;for(const i of this.code){if(-1===i.value)break;switch(i.value){case l.OP_CHECKSIG:case l.OP_CHECKSIGVERIFY:e+=1;break;case l.OP_CHECKMULTISIG:case l.OP_CHECKMULTISIGVERIFY:t&&r>=l.OP_1&&r<=l.OP_16?e+=r-80:e+=d.MAX_MULTISIG_PUBKEYS}r=i.value}return e}getScripthashSigops(t){if(!this.isScripthash())return this.getSigops(!0);const e=t.getRedeem();return e?e.getSigops(!0):0}getWitnessSigops(t,e){let r=this.getProgram();if(!r&&this.isScripthash()){const e=t.getRedeem();e&&(r=e.getProgram())}if(r&&0===r.version){if(20===r.data.length)return 1;if(32===r.data.length&&0<e.items.length){return e.getRedeem().getSigops(!0)}}return 0}get(t){return t<0&&(t+=this.code.length),t<0||t>=this.code.length?null:this.code[t]}pop(){return this.code.pop()||null}shift(){return this.code.shift()||null}remove(t){return t<0&&(t+=this.code.length),t<0||t>=this.code.length||0===(t=this.code.splice(t,1)).length?null:t[0]}set(t,e){return t<0&&(t+=this.code.length),s(a.isOpcode(e)),s(0<=t&&t<=this.code.length),this.code[t]=e,this}push(t){return s(a.isOpcode(t)),this.code.push(t),this}unshift(t){return s(a.isOpcode(t)),this.code.unshift(t),this}insert(t,e){return t<0&&(t+=this.code.length),s(a.isOpcode(e)),s(0<=t&&t<=this.code.length),this.code.splice(t,0,e),this}getOp(t){return(t=this.get(t))?t.value:-1}popOp(){var t=this.pop();return t?t.value:-1}shiftOp(){var t=this.shift();return t?t.value:-1}removeOp(t){return(t=this.remove(t))?t.value:-1}setOp(t,e){return this.set(t,a.fromOp(e))}pushOp(t){return this.push(a.fromOp(t))}unshiftOp(t){return this.unshift(a.fromOp(t))}insertOp(t,e){return this.insert(t,a.fromOp(e))}getData(t){return(t=this.get(t))?t.data:null}popData(){var t=this.pop();return t?t.data:null}shiftData(){var t=this.shift();return t?t.data:null}removeData(t){return(t=this.remove(t))?t.data:null}setData(t,e){return this.set(t,a.fromData(e))}pushData(t){return this.push(a.fromData(t))}unshiftData(t){return this.unshift(a.fromData(t))}insertData(t,e){return this.insert(t,a.fromData(e))}getLength(t){const e=this.get(t);return e?e.toLength():-1}getPush(t){const e=this.get(t);return e?e.toPush():null}popPush(){const t=this.pop();return t?t.toPush():null}shiftPush(){const t=this.shift();return t?t.toPush():null}removePush(t){const e=this.remove(t);return e?e.toPush():null}setPush(t,e){return this.set(t,a.fromPush(e))}pushPush(t){return this.push(a.fromPush(t))}unshiftPush(t){return this.unshift(a.fromPush(t))}insertPush(t,e){return this.insert(t,a.fromPush(e))}getString(t,e){const r=this.get(t);return r?r.toString(e):null}popString(t){const e=this.pop();return e?e.toString(t):null}shiftString(t){const e=this.shift();return e?e.toString(t):null}removeString(t,e){const r=this.remove(t);return r?r.toString(e):null}setString(t,e,r){return this.set(t,a.fromString(e,r))}pushString(t,e){return this.push(a.fromString(t,e))}unshiftString(t,e){return this.unshift(a.fromString(t,e))}insertString(t,e,r){return this.insert(t,a.fromString(e,r))}getSmall(t){const e=this.get(t);return e?e.toSmall():-1}popSmall(){const t=this.pop();return t?t.toSmall():-1}shiftSmall(){const t=this.shift();return t?t.toSmall():-1}removeSmall(t){const e=this.remove(t);return e?e.toSmall():-1}setSmall(t,e){return this.set(t,a.fromSmall(e))}pushSmall(t){return this.push(a.fromSmall(t))}unshiftSmall(t){return this.unshift(a.fromSmall(t))}insertSmall(t,e){return this.insert(t,a.fromSmall(e))}getNum(t,e,r){const i=this.get(t);return i?i.toNum(e,r):null}popNum(t,e){const r=this.pop();return r?r.toNum(t,e):null}shiftNum(t,e){const r=this.shift();return r?r.toNum(t,e):null}removeNum(t,e,r){const i=this.remove(t);return i?i.toNum(e,r):null}setNum(t,e){return this.set(t,a.fromNum(e))}pushNum(t){return this.push(a.fromNum(t))}unshiftNum(t){return this.unshift(a.fromNum(t))}insertNum(t,e){return this.insert(t,a.fromNum(e))}getInt(t,e,r){const i=this.get(t);return i?i.toInt(e,r):-1}popInt(t,e){const r=this.pop();return r?r.toInt(t,e):-1}shiftInt(t,e){const r=this.shift();return r?r.toInt(t,e):-1}removeInt(t,e,r){const i=this.remove(t);return i?i.toInt(e,r):-1}setInt(t,e){return this.set(t,a.fromInt(e))}pushInt(t){return this.push(a.fromInt(t))}unshiftInt(t){return this.unshift(a.fromInt(t))}insertInt(t,e){return this.insert(t,a.fromInt(e))}getBool(t){const e=this.get(t);return!!e&&e.toBool()}popBool(){const t=this.pop();return!!t&&t.toBool()}shiftBool(){const t=this.shift();return!!t&&t.toBool()}removeBool(t){const e=this.remove(t);return!!e&&e.toBool()}setBool(t,e){return this.set(t,a.fromBool(e))}pushBool(t){return this.push(a.fromBool(t))}unshiftBool(t){return this.unshift(a.fromBool(t))}insertBool(t,e){return this.insert(t,a.fromBool(e))}getSym(t){const e=this.get(t);return e?e.toSymbol():null}popSym(){const t=this.pop();return t?t.toSymbol():null}shiftSym(){const t=this.shift();return t?t.toSymbol():null}removeSym(t){const e=this.remove(t);return e?e.toSymbol():null}setSym(t,e){return this.set(t,a.fromSymbol(e))}pushSym(t){return this.push(a.fromSymbol(t))}unshiftSym(t){return this.unshift(a.fromSymbol(t))}insertSym(t,e){return this.insert(t,a.fromSymbol(e))}fromString(t){if(s("string"==typeof t),0===(t=t.trim()).length)return this;t=t.split(/\s+/);const e=new k;for(const c of t){let t=c;x.isUpperCase(t)||(t=t.toUpperCase()),x.startsWith(t,"OP_")||(t="OP_"+t);var r=l[t];if(null==r)if("'"===c[0]){s("'"===c[c.length-1],"Invalid string.");var i=c.slice(1,-1);const t=a.fromString(i);e.writeBytes(t.toRaw())}else if(/^-?\d+$/.test(c)){i=u.fromString(c,10);const t=a.fromNum(i);e.writeBytes(t.toRaw())}else{s(0===c.indexOf("0x"),"Unknown opcode.");var n=c.substring(2),o=Buffer.from(n,"hex");s(o.length===n.length/2,"Invalid hex string."),e.writeBytes(o)}else e.writeU8(r)}return this.fromRaw(e.render())}static fromString(t){return(new P).fromString(t)}static verifyScript(t,e,r,i,n,u,h,l){if((h=null==h?P.flags.STANDARD_VERIFY_FLAGS:h)&P.flags.VERIFY_SIGPUSHONLY&&!t.isPushOnly())throw new c("SIG_PUSHONLY");null==l&&(l=R.None);let p,f=new o;if(t.execute(f,h,i,n,u,l,0),h&P.flags.VERIFY_P2SH&&(p=f.clone()),r.execute(f,h,i,n,u,l,0),0===f.length||!f.getBool(-1))throw new c("EVAL_FALSE");let d=!1;if(h&P.flags.VERIFY_WITNESS&&r.isProgram()){if(d=!0,0!==t.raw.length)throw new c("WITNESS_MALLEATED");P.verifyProgram(e,r,h,i,n,u,l),f.length=1}if(h&P.flags.VERIFY_P2SH&&r.isScripthash()){if(!t.isPushOnly())throw new c("SIG_PUSHONLY");if(0===(f=p).length)throw new c("EVAL_FALSE");r=f.pop();const s=P.fromRaw(r);if(s.execute(f,h,i,n,u,l,0),0===f.length||!f.getBool(-1))throw new c("EVAL_FALSE");if(h&P.flags.VERIFY_WITNESS&&s.isProgram()){if(d=!0,!t.raw.equals(a.fromPush(r).toRaw()))throw new c("WITNESS_MALLEATED_P2SH");P.verifyProgram(e,s,h,i,n,u,l),f.length=1}}if(h&P.flags.VERIFY_CLEANSTACK&&(s(0!=(h&P.flags.VERIFY_P2SH)),1!==f.length))throw new c("CLEANSTACK");if(h&P.flags.VERIFY_WITNESS&&(s(0!=(h&P.flags.VERIFY_P2SH)),!d&&0<e.items.length))throw new c("WITNESS_UNEXPECTED")}static verifyProgram(t,e,r,i,n,a,o){var u=e.getProgram();s(u,"verifyProgram called on non-witness-program."),s(0!=(r&P.flags.VERIFY_WITNESS));const h=t.toStack();let l;if(0!==u.version){if(r&P.flags.VERIFY_MAST&&1===u.version)P.verifyMast(u,h,e,r,i,n,o);else if(r&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM)throw new c("DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM")}else{if(32===u.data.length){if(0===h.length)throw new c("WITNESS_PROGRAM_WITNESS_EMPTY");if(t=h.pop(),!g.sha256(t).equals(u.data))throw new c("WITNESS_PROGRAM_MISMATCH");l=P.fromRaw(t)}else{if(20!==u.data.length)throw new c("WITNESS_PROGRAM_WRONG_LENGTH");if(2!==h.length)throw new c("WITNESS_PROGRAM_MISMATCH");l=P.createScript(u.data)}for(let t=0;t<h.length;t++)if(h.get(t).length>d.MAX_SCRIPT_PUSH)throw new c("PUSH_SIZE");if(l.execute(h,r,i,n,a,o,1),1!==h.length||!h.getBool(-1))throw new c("EVAL_FALSE")}}static verifyMast(t,e,r,i,n,a,o,u){if(s(1===t.version),s(0!=(i&P.flags.VERIFY_MAST)),e.length<4)throw new c("INVALID_MAST_STACK");var h=e.get(-1);if(h.length<1||5<h.length)throw new c("INVALID_MAST_STACK");var l=h[0];if(0===l||e.length<l+3)throw new c("INVALID_MAST_STACK");var p=l;let f=new k;if(f.writeU8(l),0===h[h.length-1])throw new c("INVALID_MAST_STACK");let m=0;for(let t=1;t<h.length;t++)m|=h[t]<<8*(t-1);if(m<0&&(m+=4294967296),0<m&&i&P.flags.DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM)throw new c("DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM");let v=new k;v.writeU32(m);const b=e.get(-2);if(31&b.length)throw new c("INVALID_MAST_STACK");var w=b.length>>>5;if(32<w)throw new c("INVALID_MAST_STACK");if(0===m&&(p+=w)>d.MAX_SCRIPT_OPS)throw new c("OP_COUNT");const x=[];for(let t=0;t<w;t++)x.push(b.slice(32*t,32*t+32));var S=e.get(-3);if(4<S.length)throw new c("INVALID_MAST_STACK");let E=0;if(0<S.length){if(0===S[S.length-1])throw new c("INVALID_MAST_STACK");for(let t=0;t<S.length;t++)E|=S[t]<<8*t;E<0&&(E+=4294967296)}if(w<32&&E>=1<<w>>>0)throw new c("INVALID_MAST_STACK");let _=new k;_.writeBytes(r.raw);for(let t=0;t<l;t++){var A=e.get(-(4+t));if(0===m&&_.offset+A.length>d.MAX_SCRIPT_SIZE)throw new c("SCRIPT_SIZE");f.writeBytes(g.hash256(A)),_.writeBytes(A)}if(f=g.hash256(f.render()),f=y.verifyBranch(f,x,E),v.writeBytes(f),!(v=g.hash256(v.render())).equals(t.data))throw new c("WITNESS_PROGRAM_MISMATCH");if(0===m){e.length-=3+l;for(let t=0;t<e.length;t++)if(e.get(t).length>d.MAX_SCRIPT_PUSH)throw new c("PUSH_SIZE");if(_=_.render(),(r=P.fromRaw(_)).execute(e,i,n,a,o,u,1),0!==e.length)throw new c("EVAL_FALSE")}}fromReader(t){return this.fromRaw(t.readVarBytes())}fromRaw(t){const e=new S(t,!0);for(this.raw=t;e.left();)this.code.push(a.fromReader(e));return this}static fromReader(t){return(new P).fromReader(t)}static fromRaw(t,e){return"string"==typeof t&&(t=Buffer.from(t,e)),(new P).fromRaw(t)}static isScript(t){return t instanceof P}}function O(t,e,r){if(s(Buffer.isBuffer(t)),s("number"==typeof e),s("number"==typeof r),e&P.flags.VERIFY_STRICTENC&&!h.isKeyEncoding(t))throw new c("PUBKEYTYPE");if(1===r&&e&P.flags.VERIFY_WITNESS_PUBKEYTYPE&&!h.isCompressedEncoding(t))throw new c("WITNESS_PUBKEYTYPE")}function T(t,e){if(s(Buffer.isBuffer(t)),s("number"==typeof e),0!==t.length){if((e&P.flags.VERIFY_DERSIG||e&P.flags.VERIFY_LOW_S||e&P.flags.VERIFY_STRICTENC)&&!h.isSignatureEncoding(t))throw new c("SIG_DER");if(e&P.flags.VERIFY_LOW_S&&!h.isLowDER(t))throw new c("SIG_HIGH_S");if(e&P.flags.VERIFY_STRICTENC&&!h.isHashType(t))throw new c("SIG_HASHTYPE")}}function F(t,e,r){return v.verify(t,e.slice(0,-1),r)}P.opcodes=h.opcodes,P.opcodesByVal=h.opcodesByVal,P.flags=h.flags,P.hashType=h.hashType,P.hashTypeByVal=h.hashTypeByVal,P.types=h.types,P.typesByVal=h.typesByVal,P.outputLockType=h.outputLockType,P.unspendableCodes=h.unspendableCodes,P.TradeType={btc:1},t.exports=P},function(t,e,r){"use strict";
|
|
40
|
+
*/const i=Buffer.alloc(0),s=r(0),n=r(248),a=r(169),o=r(130),c=r(114),u=r(101),h=r(21),l=h.opcodes,p=h.types,f=h.outputLockType,d=r(7),m=r(27),g=r(6),y=r(146),v=r(28),b=r(3),w=r(331),x=r(1),k=r(20),S=r(2),E=r(4),_=r(12),{ContractType:A,ContractStatus:R}=r(5),I=r(170),j={199:{len:11,list:[6,8]},197:{len:22,list:[9,18]},198:{len:19,list:[6,15]}},C=2;class P{constructor(t){this.raw=i,this.code=[],this.indicator=w.inst(0),t&&this.fromOptions(t)}createScript(t,e=p.PUBKEYHASH){switch(this.clear(),e){case p.PUBKEY:this.$fromPubkey(t);break;case p.PUBKEYHASH:this.$fromPubkeyhash(t);break;case p.PROPEXTEND:this.$fromPkhExtend(t);break;case p.MULTISIG:var[r,i,s]=t;this.$fromMultisig(r,i,s);break;case p.SCRIPTHASH:this.$fromScripthash(t);break;case p.NULLDATA:this.$fromNulldata(t);break;case p.WITNESS:var[r,i,s]=t;this.$fromProgram(r,i,s)}return 0<this.code.length&&this.compile(),this}static createScript(t,e=p.PUBKEYHASH){return(new P).createScript(t,e)}$fromNulldata(t){s(Buffer.isBuffer(t)),s(t.length<=m.MAX_OP_RETURN,"Nulldata too large."),this.pushOp(l.OP_RETURN),this.pushData(t)}$fromPubkey(t){s(Buffer.isBuffer(t)&&(33===t.length||65===t.length)),this.code.push(a.fromPush(t)),this.code.push(a.fromOp(l.OP_CHECKSIG))}$fromPubkeyhash(t){s(Buffer.isBuffer(t)&&20===t.length),this.code.push(a.fromOp(l.OP_DUP)),this.code.push(a.fromOp(l.OP_HASH160)),this.code.push(a.fromPush(t)),this.code.push(a.fromOp(l.OP_EQUALVERIFY)),this.code.push(a.fromOp(l.OP_CHECKSIG))}$fromPkhExtend(t){s(Buffer.isBuffer(t.info)&&t.info.length<=m.MAX_OP_INFO),s(Buffer.isBuffer(t.hash)&&20===t.hash.length),this.code.push(a.fromOp(t.opcode)),this.code.push(a.fromPush(t.info)),this.code.push(a.fromOp(l.OP_DROP)),this.code.push(a.fromOp(l.OP_DUP)),this.code.push(a.fromOp(l.OP_HASH160)),this.code.push(a.fromPush(t.hash)),this.code.push(a.fromOp(l.OP_EQUALVERIFY)),this.code.push(a.fromOp(l.OP_CHECKSIG))}$fromMultisig(t,e,r){s(x.isU8(t)&&x.isU8(e)),s(Array.isArray(r)),s(r.length===e,"`n` keys are required for multisig."),s(1<=t&&t<=e),s(1<=e&&e<=15),this.clear(),this.pushSmall(t);for(const t of r.slice().sort((t,e)=>t.compare(e)))this.pushData(t);this.pushSmall(e),this.pushOp(l.OP_CHECKMULTISIG)}$fromScripthash(t){s(Buffer.isBuffer(t)&&20===t.length),this.code.push(a.fromOp(l.OP_HASH160)),this.code.push(a.fromPush(t)),this.code.push(a.fromOp(l.OP_EQUAL))}$fromProgram(t,e,r){var i;s(x.isU8(t)&&0<=t&&t<=16),s(Buffer.isBuffer(e)&&2<=e.length&&e.length<=40),r&&(i=Buffer.from(JSON.stringify(r)),s(Buffer.isBuffer(i)&&i.length<=m.MAX_OP_INFO),h.OperCodeFromType[r.oper]&&(this.code.push(a.fromOp(h.OperCodeFromType[r.oper])),this.code.push(a.fromPush(i)),this.code.push(a.fromOp(l.OP_DROP)))),this.code.push(a.fromSmall(t)),this.code.push(a.fromPush(e))}get length(){return this.code.length}set length(t){return this.code.length=t,this.code.length}fromOptions(t){if(s(t,"Script data is required."),Buffer.isBuffer(t))return this.fromRaw(t);if(Array.isArray(t))return this.fromArray(t);if(t.raw){if(!t.code)return this.fromRaw(t.raw);s(Buffer.isBuffer(t.raw),"Raw must be a Buffer."),this.raw=t.raw}if(t.code){if(!t.raw)return this.fromArray(t.code);s(Array.isArray(t.code),"Code must be an array."),this.code=t.code}return this}static fromOptions(t){return(new P).fromOptions(t)}entries(){return this.code.entries()}[Symbol.iterator](){return this.code[Symbol.iterator]()}toArray(){return this.code.slice()}fromArray(t){s(Array.isArray(t)),this.clear();for(const e of t)this.push(e);return this.compile()}static fromArray(t){return(new P).fromArray(t)}toItems(){const t=[];for(const r of this.code){var e=r.toPush();if(!e)throw new Error("Non-push opcode in script.");t.push(e)}return t}fromItems(t,e=!0){s(Array.isArray(t));let r=[];if(e)this.clear();else{let t=this.shift();for(;t;)r.push(t),t=this.shift()}for(const e of t)this.pushData(e);for(const t of r)this.push(t);return this.compile()}static fromItems(t){return(new P).fromItems(t)}toStack(){return new o(this.toItems())}fromStack(t,e=!0){return this.fromItems(t.items,e)}static fromStack(t){return(new P).fromStack(t)}clone(){return(new P).inject(this)}inject(t){return this.raw=t.raw,this.code=t.code.slice(),this}equals(t){return s(P.isScript(t)),this.raw.equals(t.raw)}compare(t){return s(P.isScript(t)),this.raw.compare(t.raw)}clear(){return this.raw=i,this.code.length=0,this}inspect(){return`<Script: ${this.toString()}>`}toString(){const t=[];for(const e of this.code)t.push(e.toFormat());return t.join(" ")}toASM(t){this.isNulldata()&&(t=!1);const e=[];for(const r of this.code)e.push(r.toASM(t));return e.join(" ")}compile(){if(0===this.code.length)return this.clear();let t=0;for(const e of this.code)t+=e.getSize();const e=new E(t);for(const t of this.code)t.toWriter(e);return this.raw=e.render(),this}toWriter(t){return t.writeVarBytes(this.raw),t}toRaw(){return this.raw}toJSON(){return this.toRaw().toString("hex")}fromJSON(t){return s("string"==typeof t,"Code must be a string."),this.fromRaw(Buffer.from(t,"hex"))}static fromJSON(t){return(new P).fromJSON(t)}getSubscript(t){if(0===t)return this.clone();const e=new P;for(let i=t;i<this.code.length;i++){var r=this.code[i];if(-1===r.value)break;e.code.push(r)}return e.compile()}removeSeparators(){let t=!1;for(const e of this.code){if(-1===e.value)break;if(e.value===l.OP_CODESEPARATOR){t=!0;break}}if(!t)return this;const e=new P;for(const t of this.code){if(-1===t.value)break;t.value!==l.OP_CODESEPARATOR&&e.code.push(t)}return e.compile()}getLocktime(){return 2<=this.code.length&&this.getOp(1)==l.OP_CHECKLOCKTIMEVERIFY?this.getInt(0,!1,5):-1}getSequence(){return 2<=this.code.length&&this.getOp(1)==l.OP_CHECKSEQUENCEVERIFY?this.getInt(0,!1,5):-1}getLockStatus(){let t=f.NOCHECK,e=-1,r=-1;var i,s;return 2<=this.code.length&&this.getOp(1)==l.OP_CHECKLOCKTIMEVERIFY&&((i=this.getInt(0,!1,5))<d.LOCKTIME_THRESHOLD?(t=f.CHECKABSOLUTEBLOCK,e=i):(t=f.CHECKABSOLUTETIME,r=i)),2<=this.code.length&&this.getOp(1)==l.OP_CHECKSEQUENCEVERIFY&&((i=this.getInt(0,!1,5))&d.SEQUENCE_DISABLE_FLAG||(s=i&d.SEQUENCE_MASK,i&d.SEQUENCE_TYPE_FLAG?(t=f.CHECKRELATIVETIME,r=s):(t=f.CHECKRELATIVEBLOCK,e=s))),[t,e,r]}execute(t,e,r,i,n,a,o){if(null==e&&(e=P.flags.STANDARD_VERIFY_FLAGS),null==o&&(o=0),this.raw.length>d.MAX_SCRIPT_SIZE)throw new c("SCRIPT_SIZE");const h=[],p=[];let f=0,m=0,y=0,v=!1;e&P.flags.VERIFY_MINIMALDATA&&(v=!0);for(let U=0;U<this.code.length;U++){const q=this.code[U];if(-1===q.value)throw new c("BAD_OPCODE",q,U);if(q.data&&q.data.length>d.MAX_SCRIPT_PUSH)throw new c("PUSH_SIZE",q,U);if(q.value>l.OP_16&&++m>d.MAX_SCRIPT_OPS)throw new c("OP_COUNT",q,U);if(q.isDisabled())throw new c("DISABLED_OPCODE",q,U);if(y&&!q.isBranch()){if(t.length+p.length>d.MAX_SCRIPT_STACK)throw new c("STACK_SIZE",q,U)}else if(q.data){if(v&&!q.isMinimal())throw new c("MINIMALDATA",q,U);if(t.push(q.data),t.length+p.length>d.MAX_SCRIPT_STACK)throw new c("STACK_SIZE",q,U)}else{switch(q.value){case l.OP_PROPCREATE:case l.OP_PROPEXCHANGE:case l.OP_CPREGISTER:case l.OP_CPCHANGE:case l.OP_HTLCSUGGEST:case l.OP_HTLCASSENT:case l.OP_COMMENT:case l.OP_COINBASE:break;case l.OP_PROMISE:this.indicator.set(C);break;case l.OP_RETURN:throw new c("OP_RETURN",q,U);case l.OP_0:t.pushInt(0);break;case l.OP_1NEGATE:t.pushInt(-1);break;case l.OP_1:case l.OP_2:case l.OP_3:case l.OP_4:case l.OP_5:case l.OP_6:case l.OP_7:case l.OP_8:case l.OP_9:case l.OP_10:case l.OP_11:case l.OP_12:case l.OP_13:case l.OP_14:case l.OP_15:case l.OP_16:t.pushInt(q.value-80);break;case l.OP_NOP:break;case l.OP_CHECKLOCKTIMEVERIFY:{if(!(e&P.flags.VERIFY_CHECKLOCKTIMEVERIFY)){if(e&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS)throw new c("DISCOURAGE_UPGRADABLE_NOPS",q,U);break}if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);const s=t.getNum(-1,v,5);if(s.isNeg())throw new c("NEGATIVE_LOCKTIME",q,U);var b=s.toDouble();if(r.verifyLocktime(i,b))break;throw new c("UNSATISFIED_LOCKTIME",q,U)}case l.OP_CHECKSEQUENCEVERIFY:{if(!(e&P.flags.VERIFY_CHECKSEQUENCEVERIFY)){if(e&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS)throw new c("DISCOURAGE_UPGRADABLE_NOPS",q,U);break}if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);const s=t.getNum(-1,v,5);if(s.isNeg())throw new c("NEGATIVE_LOCKTIME",q,U);if(b=s.toDouble(),r.verifySequence(i,b))break;throw new c("UNSATISFIED_LOCKTIME",q,U)}case l.OP_NOP1:case l.OP_NOP4:case l.OP_NOP5:case l.OP_NOP6:case l.OP_NOP7:case l.OP_NOP8:case l.OP_NOP9:case l.OP_NOP10:if(e&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS)throw new c("DISCOURAGE_UPGRADABLE_NOPS",q,U);break;case l.OP_IF:case l.OP_NOTIF:{let r=!1;if(!y){if(t.length<1)throw new c("UNBALANCED_CONDITIONAL",q,U);if(1===o&&e&P.flags.VERIFY_MINIMALIF){if(1<(w=t.get(-1)).length)throw new c("MINIMALIF");if(1===w.length&&1!==w[0])throw new c("MINIMALIF")}r=t.getBool(-1),q.value===l.OP_NOTIF&&(r=!r),t.pop()}h.push(r),r||(y+=1);break}case l.OP_ELSE:if(0===h.length)throw new c("UNBALANCED_CONDITIONAL",q,U);h[h.length-1]=!h[h.length-1],h[h.length-1]?--y:y+=1;break;case l.OP_ENDIF:if(0===h.length)throw new c("UNBALANCED_CONDITIONAL",q,U);h.pop()||--y;break;case l.OP_VERIFY:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);if(!t.getBool(-1))throw new c("VERIFY",q,U);t.pop();break;case l.OP_TOALTSTACK:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);p.push(t.pop());break;case l.OP_FROMALTSTACK:if(0===p.length)throw new c("INVALID_ALTSTACK_OPERATION",q,U);t.push(p.pop());break;case l.OP_2DROP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.pop(),t.pop();break;case l.OP_2DUP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);var w=t.get(-2),x=t.get(-1);t.push(w),t.push(x);break;case l.OP_3DUP:if(t.length<3)throw new c("INVALID_STACK_OPERATION",q,U);x=t.get(-3);var k=t.get(-2),S=t.get(-1);t.push(x),t.push(k),t.push(S);break;case l.OP_2OVER:if(t.length<4)throw new c("INVALID_STACK_OPERATION",q,U);k=t.get(-4),S=t.get(-3),t.push(k),t.push(S);break;case l.OP_2ROT:if(t.length<6)throw new c("INVALID_STACK_OPERATION",q,U);var E=t.get(-6),_=t.get(-5);t.erase(-6,-4),t.push(E),t.push(_);break;case l.OP_2SWAP:if(t.length<4)throw new c("INVALID_STACK_OPERATION",q,U);t.swap(-4,-2),t.swap(-3,-1);break;case l.OP_IFDUP:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.getBool(-1)&&(E=t.get(-1),t.push(E));break;case l.OP_DEPTH:t.pushInt(t.length);break;case l.OP_DROP:{if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);let e=t.pop();if(this.indicator.check(C)){this.indicator.unSet(C);try{var A=JSON.parse(e.toString());new I(A,a).run(t)}catch(p){}}break}case l.OP_DUP:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(t.get(-1));break;case l.OP_NIP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.remove(-2);break;case l.OP_OVER:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.push(t.get(-2));break;case l.OP_PICK:case l.OP_ROLL:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);if(_=t.getInt(-1,v,4),t.pop(),_<0||_>=t.length)throw new c("INVALID_STACK_OPERATION",q,U);var R=t.get(-_-1);q.value===l.OP_ROLL&&t.remove(-_-1),t.push(R);break;case l.OP_ROT:if(t.length<3)throw new c("INVALID_STACK_OPERATION",q,U);t.swap(-3,-2),t.swap(-2,-1);break;case l.OP_SWAP:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.swap(-2,-1);break;case l.OP_TUCK:if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);t.insert(-2,t.get(-1));break;case l.OP_SIZE:if(t.length<1)throw new c("INVALID_STACK_OPERATION",q,U);t.pushInt(t.get(-1).length);break;case l.OP_EQUAL:case l.OP_EQUALVERIFY:{if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);const e=t.get(-2);R=t.get(-1);var j=e.equals(R);if(t.pop(),t.pop(),t.pushBool(j),q.value===l.OP_EQUALVERIFY){if(!j)throw new c("EQUALVERIFY",q,U);t.pop()}break}case l.OP_1ADD:case l.OP_1SUB:case l.OP_NEGATE:case l.OP_ABS:case l.OP_NOT:case l.OP_0NOTEQUAL:{if(t.length<1)throw new c("INVALID_STACK_OPERATION",q,U);let e,r=t.getNum(-1,v,4);switch(q.value){case l.OP_1ADD:r.iaddn(1);break;case l.OP_1SUB:r.isubn(1);break;case l.OP_NEGATE:r.ineg();break;case l.OP_ABS:r.iabs();break;case l.OP_NOT:e=r.isZero(),r=u.fromBool(e);break;case l.OP_0NOTEQUAL:e=!r.isZero(),r=u.fromBool(e);break;default:s(!1,"Fatal script error.")}t.pop(),t.pushNum(r);break}case l.OP_ADD:case l.OP_SUB:case l.OP_BOOLAND:case l.OP_BOOLOR:case l.OP_NUMEQUAL:case l.OP_NUMEQUALVERIFY:case l.OP_NUMNOTEQUAL:case l.OP_LESSTHAN:case l.OP_GREATERTHAN:case l.OP_LESSTHANOREQUAL:case l.OP_GREATERTHANOREQUAL:case l.OP_MIN:case l.OP_MAX:{if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);const e=t.getNum(-2,v,4),r=t.getNum(-1,v,4);let i,n;switch(q.value){case l.OP_ADD:i=e.iadd(r);break;case l.OP_SUB:i=e.isub(r);break;case l.OP_BOOLAND:n=e.toBool()&&r.toBool(),i=u.fromBool(n);break;case l.OP_BOOLOR:n=e.toBool()||r.toBool(),i=u.fromBool(n);break;case l.OP_NUMEQUAL:case l.OP_NUMEQUALVERIFY:n=e.eq(r),i=u.fromBool(n);break;case l.OP_NUMNOTEQUAL:n=!e.eq(r),i=u.fromBool(n);break;case l.OP_LESSTHAN:n=e.lt(r),i=u.fromBool(n);break;case l.OP_GREATERTHAN:n=e.gt(r),i=u.fromBool(n);break;case l.OP_LESSTHANOREQUAL:n=e.lte(r),i=u.fromBool(n);break;case l.OP_GREATERTHANOREQUAL:n=e.gte(r),i=u.fromBool(n);break;case l.OP_MIN:i=u.min(e,r);break;case l.OP_MAX:i=u.max(e,r);break;default:s(!1,"Fatal script error.")}if(t.pop(),t.pop(),t.pushNum(i),q.value===l.OP_NUMEQUALVERIFY){if(!t.getBool(-1))throw new c("NUMEQUALVERIFY",q,U);t.pop()}break}case l.OP_WITHIN:{if(t.length<3)throw new c("INVALID_STACK_OPERATION",q,U);const e=t.getNum(-3,v,4),r=t.getNum(-2,v,4);j=t.getNum(-1,v,4);var B=r.lte(e)&&e.lt(j);t.pop(),t.pop(),t.pop(),t.pushBool(B);break}case l.OP_RIPEMD160:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.ripemd160(t.pop()));break;case l.OP_SHA1:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.sha1(t.pop()));break;case l.OP_SHA256:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.sha256(t.pop()));break;case l.OP_HASH160:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.hash160(t.pop()));break;case l.OP_HASH256:if(0===t.length)throw new c("INVALID_STACK_OPERATION",q,U);t.push(g.hash256(t.pop()));break;case l.OP_CODESEPARATOR:f=U+1;break;case l.OP_CHECKSIG:case l.OP_CHECKSIGVERIFY:{if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");if(t.length<2)throw new c("INVALID_STACK_OPERATION",q,U);B=t.get(-2);var N,D=t.get(-1);const s=this.getSubscript(f);0===o&&s.findAndDelete(B),T(B,e),O(D,e,o);let a=!1;if(0<B.length&&(N=B[B.length-1],a=F(N=r.signatureHash(i,s,n,N,o),B,D)),!a&&e&P.flags.VERIFY_NULLFAIL&&0!==B.length)throw new c("NULLFAIL",q,U);if(t.pop(),t.pop(),t.pushBool(a),q.value===l.OP_CHECKSIGVERIFY){if(!a)throw new c("CHECKSIGVERIFY",q,U);t.pop()}break}case l.OP_CHECKMULTISIG:case l.OP_CHECKMULTISIGVERIFY:{if(!r)throw new c("UNKNOWN_ERROR","No TX passed in.");let s=1;if(t.length<s)throw new c("INVALID_STACK_OPERATION",q,U);let a,u,h=t.getInt(-s,v,4),p=h+2;if(h<0||h>d.MAX_MULTISIG_PUBKEYS)throw new c("PUBKEY_COUNT",q,U);if((m+=h)>d.MAX_SCRIPT_OPS)throw new c("OP_COUNT",q,U);if(s+=1,a=s,s+=h,t.length<s)throw new c("INVALID_STACK_OPERATION",q,U);let g=t.getInt(-s,v,4);if(g<0||g>h)throw new c("SIG_COUNT",q,U);if(s+=1,u=s,s+=g,t.length<s)throw new c("INVALID_STACK_OPERATION",q,U);const y=this.getSubscript(f);for(let e=0;e<g;e++){var L=t.get(-u-e);0===o&&y.findAndDelete(L)}let b=!0;for(;b&&0<g;){var H,z=t.get(-u),M=t.get(-a);T(z,e),O(M,e,o),0<z.length&&(H=z[z.length-1],F(r.signatureHash(i,y,n,H,o),z,M)&&(u+=1,--g)),a+=1,--h,g>h&&(b=!1)}for(;1<s;){if(!b&&e&P.flags.VERIFY_NULLFAIL&&0===p&&0!==t.get(-1).length)throw new c("NULLFAIL",q,U);0<p&&--p,t.pop(),--s}if(t.length<1)throw new c("INVALID_STACK_OPERATION",q,U);if(e&P.flags.VERIFY_NULLDUMMY&&0!==t.get(-1).length)throw new c("SIG_NULLDUMMY",q,U);if(t.pop(),t.pushBool(b),q.value===l.OP_CHECKMULTISIGVERIFY){if(!b)throw new c("CHECKMULTISIGVERIFY",q,U);t.pop()}break}default:throw new c("BAD_OPCODE",q,U)}if(t.length+p.length>d.MAX_SCRIPT_STACK)throw new c("STACK_SIZE",q,U)}}if(0!==h.length)throw new c("UNBALANCED_CONDITIONAL")}findAndDelete(t){const e=a.fromPush(t);if(this.raw.length<e.getSize())return 0;let r=!1;for(const t of this.code){if(-1===t.value)break;if(t.equals(e)){r=!0;break}}if(!r)return 0;const i=[];let s=0;for(const t of this.code){if(-1===t.value)break;t.equals(e)?s+=1:i.push(t)}return this.code=i,this.compile(),s}indexOf(t){for(let e=0;e<this.code.length;e++){const r=this.code[e];if(-1===r.value)break;if(r.data&&r.data.equals(t))return e}return-1}isCode(){for(const t of this.code){if(-1===t.value)return!1;if(t.isDisabled())return!1;switch(t.value){case l.OP_RESERVED:case l.OP_NOP:case l.OP_VER:case l.OP_VERIF:case l.OP_VERNOTIF:case l.OP_RESERVED1:case l.OP_RESERVED2:case l.OP_NOP1:return!1}if(t.value>l.OP_PROPMAX)return!1}return!0}fromAddress(t,e){"string"==typeof t&&(t=_.fromString(t)),s(t instanceof _,"Not an address.");let r=!1;if(t.isPubkeyhash())if(e&&e.oper)switch(e.oper){case A.cpRegister:this.createScript({opcode:P.opcodes.OP_CPREGISTER,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.cpChange:this.createScript({opcode:P.opcodes.OP_CPCHANGE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.propCreate:this.createScript({opcode:P.opcodes.OP_PROPCREATE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.propExchange:this.createScript({opcode:P.opcodes.OP_PROPEXCHANGE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND);break;case A.coinbase:this.createScript({opcode:P.opcodes.OP_COINBASE,hash:t.hash,info:Buffer.from(JSON.stringify(e))},P.types.PROPEXTEND)}else this.createScript(t.hash);else t.isScripthash()?this.createScript(t.hash,P.types.SCRIPTHASH):t.isProgram()&&this.createScript([t.version,t.hash,e],P.types.WITNESS);if(e&&e.locktype&&(!e.oper||h.unspendableCodes.indexOf(e.oper)<0))switch(e.locktype){case f.CHECKABSOLUTEBLOCK:case f.CHECKABSOLUTETIME:this.code.unshift(a.fromOp(l.OP_DROP)),this.code.unshift(a.fromOp(l.OP_CHECKLOCKTIMEVERIFY)),this.code.unshift(a.fromInt(e.locktime)),r=!0;break;case f.CHECKRELATIVEBLOCK:case f.CHECKRELATIVETIME:e.locktype===f.CHECKRELATIVETIME&&(e.locktime=e.locktime|d.SEQUENCE_TYPE_FLAG),this.code.unshift(a.fromOp(l.OP_DROP)),this.code.unshift(a.fromOp(l.OP_CHECKSEQUENCEVERIFY)),this.code.unshift(a.fromInt(e.locktime)),r=!0}if(r&&this.compile(),0<this.code.length)return this;throw new Error("Unknown address type.")}static fromAddress(t,e){return(new P).fromAddress(t,e)}fromCommitment(t,e){const r=new E(36);return r.writeU32BE(2854332909),r.writeHash(t),this.clear(),this.pushOp(l.OP_RETURN),this.pushData(r.render()),e&&this.pushData(e),this.compile()}static fromCommitment(t,e){return(new P).fromCommitment(t,e)}getRedeem(){let t=null;for(const e of this.code){if(-1===e.value)return null;if(e.value>l.OP_16)return null;t=e.data}return t?P.fromRaw(t):null}getType(){return this.isPubkey()?p.PUBKEY:this.isPubkeyhash()?p.PUBKEYHASH:this.isScripthash()?p.SCRIPTHASH:this.isWitnessPubkeyhash()?p.WITNESSPUBKEYHASH:this.isWitnessScripthash()?p.WITNESSSCRIPTHASH:this.isWitnessMasthash()?p.WITNESSMASTHASH:this.isMultisig()?p.MULTISIG:this.isNulldata()?p.NULLDATA:p.NONSTANDARD}isPubkey(t){return t?35<=this.raw.length&&(33===this.raw[0]||65===this.raw[0])&&this.raw[0]+2===this.raw.length&&this.raw[this.raw.length-1]===l.OP_CHECKSIG:2===this.code.length&&(33===(t=this.getLength(0))||65===t)&&this.getOp(1)===l.OP_CHECKSIG}isPubkeyhash(t){if(t||25===this.raw.length)return 25===this.raw.length&&this.raw[0]===l.OP_DUP&&this.raw[1]===l.OP_HASH160&&20===this.raw[2]&&this.raw[23]===l.OP_EQUALVERIFY&&this.raw[24]===l.OP_CHECKSIG;let e=0;for(var r of this.code)if(r.value==l.OP_DUP){e=this.code.indexOf(r);break}return this.getOp(0+e)===l.OP_DUP&&this.getOp(1+e)===l.OP_HASH160&&20===this.getLength(2+e)&&this.getOp(3+e)===l.OP_EQUALVERIFY&&this.getOp(4+e)===l.OP_CHECKSIG}isMultisig(t){if(this.code.length<4||19<this.code.length)return!1;if(this.getOp(-1)!==l.OP_CHECKMULTISIG)return!1;var e=this.getSmall(0);if(e<1)return!1;var r=this.getSmall(-2);if(r<1||r<e)return!1;if(this.code.length!==r+3)return!1;for(let e=1;e<r+1;e++){const r=this.code[e];var i=r.toLength();if(33!==i&&65!==i)return!1;if(t&&!r.isMinimal())return!1}return!0}isUnknown(){return this.getType()===p.NONSTANDARD}isStandard(){var[t,e]=this.getMultisig();return-1!==t?!(e<1||3<e||t<1||e<t):this.isNulldata()?this.raw.length<=m.MAX_OP_RETURN_BYTES:this.getType()!==p.NONSTANDARD}isScripthash(){return 23===this.raw.length&&this.raw[0]===l.OP_HASH160&&20===this.raw[1]&&this.raw[22]===l.OP_EQUAL}isNulldata(t){if(0===this.code.length)return!1;if(this.getOp(0)!==l.OP_RETURN)return!1;if(1!==this.code.length){if(t&&this.raw.length>m.MAX_OP_RETURN_BYTES)return!1;for(let e=1;e<this.code.length;e++){const r=this.code[e];if(-1===r.value)return!1;if(r.value>l.OP_16)return!1;if(t&&!r.isMinimal())return!1}}return!0}isCommitment(){return 38<=this.raw.length&&this.raw[0]===l.OP_RETURN&&36===this.raw[1]&&2854332909===this.raw.readUInt32BE(2,!0)}isWitnessPubkeyhash(){return 22===this.raw.length&&this.raw[0]===l.OP_0&&20===this.raw[1]||5==this.code.length&&this.code[2].value==l.OP_DROP&&this.code[3].value==l.OP_0&&20==this.code[4].value}getWitnessPubkeyhash(){return this.isWitnessPubkeyhash()?5==this.code.length?this.getData(4):this.getData(1):null}isWitnessScripthash(){return 34===this.raw.length&&this.raw[0]===l.OP_0&&32===this.raw[1]}getWitnessScripthash(){return this.isWitnessScripthash()?this.getData(1):null}isProgram(){if(2==this.code.length){if(4<=this.raw.length&&this.raw.length<=42&&(this.raw[0]==l.OP_0||this.raw[0]>=l.OP_1&&this.raw[0]<=l.OP_16)&&this.raw[1]+2==this.raw.length)return!0}else if(5==this.code.length&&4<=this.raw.length&&this.code[2].value==l.OP_DROP&&(this.code[3].value==l.OP_0||this.code[3].value>=l.OP_1&&this.code[3].value<=l.OP_16))return!0;return!1}isWitnessMasthash(){return 34===this.raw.length&&this.raw[0]===l.OP_1&&32===this.raw[1]}isUnspendable(){return this.raw.length>d.MAX_SCRIPT_SIZE||0<this.raw.length&&this.raw[0]===l.OP_RETURN}getSize(){return this.raw.length}getVarSize(){return b.sizeVarBytes(this.raw)}getReturnData(t){if(!(this.code&&this.code[0]&&this.code[1]&&this.code[1].data))return null;if(t)if(Array.isArray(t)){let r=!1;for(var e of t)if(this.code[0].value===e){r=!0;break}if(!r)return null}else if(this.code[0].value!==t)return null;try{return x.parseJson(this.code[1].data.toString())}catch(t){return null}}getReturnType(t){if(!this.code||!this.code[0])return null;if(t)if(Array.isArray(t)){let r=!1;for(var e of t)if(this.code[0].value===e){r=!0;break}if(!r)return null}else if(this.code[0].value!==t)return null;return this.code[0].value}hash160(t){let e=g.hash160(this.toRaw());return"hex"===t?e.toString("hex"):e}sha256(t){let e=g.sha256(this.toRaw());return"hex"===t?e.toString("hex"):e}getPubkey(t){return this.isPubkey(t)?t?this.raw.slice(1,1+this.raw[0]):this.getData(0):null}getMultiPubkeyhash(){let t=j[this.getOp(0)];return t&&this.code.length==t.len?t.list.map(t=>this.getData(t)):null}getPubkeyhash(t){if(this.isPubkeyhash(t)){if(t)return this.raw.slice(3,23);for(var e of this.code)if(e.value==l.OP_CHECKSIG)return this.getData(this.code.indexOf(e)-2)}return null}getMultisig(t){return this.isMultisig(t)?[this.getSmall(0),this.getSmall(-2)]:[-1,-1]}getScripthash(){return this.isScripthash()?this.getData(1):null}getNulldata(t){if(!this.isNulldata(t))return null;for(let t=1;t<this.code.length;t++){var e=this.code[t].toPush();if(e)return e}return i}getCommitment(){return this.isCommitment()?this.raw.slice(6,38):null}getProgram(){return this.isProgram()?2==this.code.length?new n(this.getSmall(0),this.getData(1)):5==this.code.length?new n(this.getSmall(3),this.getData(4)):null:null}forWitness(){var t;return this.isProgram()?this.clone():(t=this.getPubkey())?(t=g.hash160(t),P.createScript([0,t],P.types.WITNESS)):(t=this.getPubkeyhash())?P.createScript([0,t],P.types.WITNESS):P.createScript([0,this.sha256()],P.types.WITNESS)}getWitnessMasthash(){return this.isWitnessMasthash()?this.getData(1):null}getInputType(){return this.isPubkeyInput()?p.PUBKEY:this.isPubkeyhashInput()?p.PUBKEYHASH:this.isScripthashInput()?p.SCRIPTHASH:this.isMultisigInput()?p.MULTISIG:p.NONSTANDARD}isPubkeyhashInput(){var t,e;return 2===this.code.length&&(t=this.getLength(0),e=this.getLength(1),9<=t&&t<=73&&(33===e||65===e))}isUnknownInput(){return this.getInputType()===p.NONSTANDARD}isPubkeyInput(){var t;return 1===this.code.length&&9<=(t=this.getLength(0))&&t<=73}isScripthashInput(){if(this.code.length<2)return!1;var t=this.getData(-1);if(!t)return!1;if(0===t.length)return!1;if(h.isSignatureEncoding(t))return!1;if(h.isKeyEncoding(t))return!1;const e=P.fromRaw(t);return!!e.isCode()&&!e.isUnspendable()&&!!this.isPushOnly()}isMultisigInput(){if(this.code.length<2)return!1;if(this.getOp(0)!==l.OP_0)return!1;if(this.getOp(1)>l.OP_PUSHDATA4)return!1;if(this.isScripthashInput())return!1;for(let e=1;e<this.code.length;e++){var t=this.getLength(e);if(t<9||73<t)return!1}return!0}getPubkeyInput(){return this.isPubkeyInput()?this.getData(0):null}getPubkeyhashInput(){return this.isPubkeyhashInput()?[this.getData(0),this.getData(1)]:[null,null]}getMultisigInput(){if(!this.isMultisigInput())return null;const t=[];for(let e=1;e<this.code.length;e++)t.push(this.getData(e));return t}getScripthashInput(){return this.isScripthashInput()?this.getData(-1):null}getCoinbaseHeight(){return P.getCoinbaseHeight(this.raw)}static getCoinbaseHeight(t){if(0===t.length)return-1;if(t[0]>=l.OP_1&&t[0]<=l.OP_16)return t[0]-80;if(6<t[0])return-1;const e=a.fromRaw(t),r=e.toNum();return r?!r.isNeg()&&e.equals(a.fromNum(r))?r.toDouble():-1:1}test(t){for(const e of this.code){if(-1===e.value)break;if(e.data&&0!==e.data.length){if(t.test(e.data))return!0;if(33==e.data.length&&t.test(g.hash160(e.data)))return!0}}return!1}isPushOnly(){for(const t of this.code){if(-1===t.value)return!1;if(t.value>l.OP_16)return!1}return!0}getSigops(t){let e=0,r=-1;for(const i of this.code){if(-1===i.value)break;switch(i.value){case l.OP_CHECKSIG:case l.OP_CHECKSIGVERIFY:e+=1;break;case l.OP_CHECKMULTISIG:case l.OP_CHECKMULTISIGVERIFY:t&&r>=l.OP_1&&r<=l.OP_16?e+=r-80:e+=d.MAX_MULTISIG_PUBKEYS}r=i.value}return e}getScripthashSigops(t){if(!this.isScripthash())return this.getSigops(!0);const e=t.getRedeem();return e?e.getSigops(!0):0}getWitnessSigops(t,e){let r=this.getProgram();if(!r&&this.isScripthash()){const e=t.getRedeem();e&&(r=e.getProgram())}if(r&&0===r.version){if(20===r.data.length)return 1;if(32===r.data.length&&0<e.items.length){return e.getRedeem().getSigops(!0)}}return 0}get(t){return t<0&&(t+=this.code.length),t<0||t>=this.code.length?null:this.code[t]}pop(){return this.code.pop()||null}shift(){return this.code.shift()||null}remove(t){return t<0&&(t+=this.code.length),t<0||t>=this.code.length||0===(t=this.code.splice(t,1)).length?null:t[0]}set(t,e){return t<0&&(t+=this.code.length),s(a.isOpcode(e)),s(0<=t&&t<=this.code.length),this.code[t]=e,this}push(t){return s(a.isOpcode(t)),this.code.push(t),this}unshift(t){return s(a.isOpcode(t)),this.code.unshift(t),this}insert(t,e){return t<0&&(t+=this.code.length),s(a.isOpcode(e)),s(0<=t&&t<=this.code.length),this.code.splice(t,0,e),this}getOp(t){return(t=this.get(t))?t.value:-1}popOp(){var t=this.pop();return t?t.value:-1}shiftOp(){var t=this.shift();return t?t.value:-1}removeOp(t){return(t=this.remove(t))?t.value:-1}setOp(t,e){return this.set(t,a.fromOp(e))}pushOp(t){return this.push(a.fromOp(t))}unshiftOp(t){return this.unshift(a.fromOp(t))}insertOp(t,e){return this.insert(t,a.fromOp(e))}getData(t){return(t=this.get(t))?t.data:null}popData(){var t=this.pop();return t?t.data:null}shiftData(){var t=this.shift();return t?t.data:null}removeData(t){return(t=this.remove(t))?t.data:null}setData(t,e){return this.set(t,a.fromData(e))}pushData(t){return this.push(a.fromData(t))}unshiftData(t){return this.unshift(a.fromData(t))}insertData(t,e){return this.insert(t,a.fromData(e))}getLength(t){const e=this.get(t);return e?e.toLength():-1}getPush(t){const e=this.get(t);return e?e.toPush():null}popPush(){const t=this.pop();return t?t.toPush():null}shiftPush(){const t=this.shift();return t?t.toPush():null}removePush(t){const e=this.remove(t);return e?e.toPush():null}setPush(t,e){return this.set(t,a.fromPush(e))}pushPush(t){return this.push(a.fromPush(t))}unshiftPush(t){return this.unshift(a.fromPush(t))}insertPush(t,e){return this.insert(t,a.fromPush(e))}getString(t,e){const r=this.get(t);return r?r.toString(e):null}popString(t){const e=this.pop();return e?e.toString(t):null}shiftString(t){const e=this.shift();return e?e.toString(t):null}removeString(t,e){const r=this.remove(t);return r?r.toString(e):null}setString(t,e,r){return this.set(t,a.fromString(e,r))}pushString(t,e){return this.push(a.fromString(t,e))}unshiftString(t,e){return this.unshift(a.fromString(t,e))}insertString(t,e,r){return this.insert(t,a.fromString(e,r))}getSmall(t){const e=this.get(t);return e?e.toSmall():-1}popSmall(){const t=this.pop();return t?t.toSmall():-1}shiftSmall(){const t=this.shift();return t?t.toSmall():-1}removeSmall(t){const e=this.remove(t);return e?e.toSmall():-1}setSmall(t,e){return this.set(t,a.fromSmall(e))}pushSmall(t){return this.push(a.fromSmall(t))}unshiftSmall(t){return this.unshift(a.fromSmall(t))}insertSmall(t,e){return this.insert(t,a.fromSmall(e))}getNum(t,e,r){const i=this.get(t);return i?i.toNum(e,r):null}popNum(t,e){const r=this.pop();return r?r.toNum(t,e):null}shiftNum(t,e){const r=this.shift();return r?r.toNum(t,e):null}removeNum(t,e,r){const i=this.remove(t);return i?i.toNum(e,r):null}setNum(t,e){return this.set(t,a.fromNum(e))}pushNum(t){return this.push(a.fromNum(t))}unshiftNum(t){return this.unshift(a.fromNum(t))}insertNum(t,e){return this.insert(t,a.fromNum(e))}getInt(t,e,r){const i=this.get(t);return i?i.toInt(e,r):-1}popInt(t,e){const r=this.pop();return r?r.toInt(t,e):-1}shiftInt(t,e){const r=this.shift();return r?r.toInt(t,e):-1}removeInt(t,e,r){const i=this.remove(t);return i?i.toInt(e,r):-1}setInt(t,e){return this.set(t,a.fromInt(e))}pushInt(t){return this.push(a.fromInt(t))}unshiftInt(t){return this.unshift(a.fromInt(t))}insertInt(t,e){return this.insert(t,a.fromInt(e))}getBool(t){const e=this.get(t);return!!e&&e.toBool()}popBool(){const t=this.pop();return!!t&&t.toBool()}shiftBool(){const t=this.shift();return!!t&&t.toBool()}removeBool(t){const e=this.remove(t);return!!e&&e.toBool()}setBool(t,e){return this.set(t,a.fromBool(e))}pushBool(t){return this.push(a.fromBool(t))}unshiftBool(t){return this.unshift(a.fromBool(t))}insertBool(t,e){return this.insert(t,a.fromBool(e))}getSym(t){const e=this.get(t);return e?e.toSymbol():null}popSym(){const t=this.pop();return t?t.toSymbol():null}shiftSym(){const t=this.shift();return t?t.toSymbol():null}removeSym(t){const e=this.remove(t);return e?e.toSymbol():null}setSym(t,e){return this.set(t,a.fromSymbol(e))}pushSym(t){return this.push(a.fromSymbol(t))}unshiftSym(t){return this.unshift(a.fromSymbol(t))}insertSym(t,e){return this.insert(t,a.fromSymbol(e))}fromString(t){if(s("string"==typeof t),0===(t=t.trim()).length)return this;t=t.split(/\s+/);const e=new k;for(const c of t){let t=c;x.isUpperCase(t)||(t=t.toUpperCase()),x.startsWith(t,"OP_")||(t="OP_"+t);var r=l[t];if(null==r)if("'"===c[0]){s("'"===c[c.length-1],"Invalid string.");var i=c.slice(1,-1);const t=a.fromString(i);e.writeBytes(t.toRaw())}else if(/^-?\d+$/.test(c)){i=u.fromString(c,10);const t=a.fromNum(i);e.writeBytes(t.toRaw())}else{s(0===c.indexOf("0x"),"Unknown opcode.");var n=c.substring(2),o=Buffer.from(n,"hex");s(o.length===n.length/2,"Invalid hex string."),e.writeBytes(o)}else e.writeU8(r)}return this.fromRaw(e.render())}static fromString(t){return(new P).fromString(t)}static verifyScript(t,e,r,i,n,u,h,l){if((h=null==h?P.flags.STANDARD_VERIFY_FLAGS:h)&P.flags.VERIFY_SIGPUSHONLY&&!t.isPushOnly())throw new c("SIG_PUSHONLY");null==l&&(l=R.None);let p,f=new o;if(t.execute(f,h,i,n,u,l,0),h&P.flags.VERIFY_P2SH&&(p=f.clone()),r.execute(f,h,i,n,u,l,0),0===f.length||!f.getBool(-1))throw new c("EVAL_FALSE");let d=!1;if(h&P.flags.VERIFY_WITNESS&&r.isProgram()){if(d=!0,0!==t.raw.length)throw new c("WITNESS_MALLEATED");P.verifyProgram(e,r,h,i,n,u,l),f.length=1}if(h&P.flags.VERIFY_P2SH&&r.isScripthash()){if(!t.isPushOnly())throw new c("SIG_PUSHONLY");if(0===(f=p).length)throw new c("EVAL_FALSE");r=f.pop();const s=P.fromRaw(r);if(s.execute(f,h,i,n,u,l,0),0===f.length||!f.getBool(-1))throw new c("EVAL_FALSE");if(h&P.flags.VERIFY_WITNESS&&s.isProgram()){if(d=!0,!t.raw.equals(a.fromPush(r).toRaw()))throw new c("WITNESS_MALLEATED_P2SH");P.verifyProgram(e,s,h,i,n,u,l),f.length=1}}if(h&P.flags.VERIFY_CLEANSTACK&&(s(0!=(h&P.flags.VERIFY_P2SH)),1!==f.length))throw new c("CLEANSTACK");if(h&P.flags.VERIFY_WITNESS&&(s(0!=(h&P.flags.VERIFY_P2SH)),!d&&0<e.items.length))throw new c("WITNESS_UNEXPECTED")}static verifyProgram(t,e,r,i,n,a,o){var u=e.getProgram();s(u,"verifyProgram called on non-witness-program."),s(0!=(r&P.flags.VERIFY_WITNESS));const h=t.toStack();let l;if(0!==u.version){if(r&P.flags.VERIFY_MAST&&1===u.version)P.verifyMast(u,h,e,r,i,n,o);else if(r&P.flags.VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM)throw new c("DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM")}else{if(32===u.data.length){if(0===h.length)throw new c("WITNESS_PROGRAM_WITNESS_EMPTY");if(t=h.pop(),!g.sha256(t).equals(u.data))throw new c("WITNESS_PROGRAM_MISMATCH");l=P.fromRaw(t)}else{if(20!==u.data.length)throw new c("WITNESS_PROGRAM_WRONG_LENGTH");if(2!==h.length)throw new c("WITNESS_PROGRAM_MISMATCH");l=P.createScript(u.data)}for(let t=0;t<h.length;t++)if(h.get(t).length>d.MAX_SCRIPT_PUSH)throw new c("PUSH_SIZE");if(l.execute(h,r,i,n,a,o,1),1!==h.length||!h.getBool(-1))throw new c("EVAL_FALSE")}}static verifyMast(t,e,r,i,n,a,o,u){if(s(1===t.version),s(0!=(i&P.flags.VERIFY_MAST)),e.length<4)throw new c("INVALID_MAST_STACK");var h=e.get(-1);if(h.length<1||5<h.length)throw new c("INVALID_MAST_STACK");var l=h[0];if(0===l||e.length<l+3)throw new c("INVALID_MAST_STACK");var p=l;let f=new k;if(f.writeU8(l),0===h[h.length-1])throw new c("INVALID_MAST_STACK");let m=0;for(let t=1;t<h.length;t++)m|=h[t]<<8*(t-1);if(m<0&&(m+=4294967296),0<m&&i&P.flags.DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM)throw new c("DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM");let v=new k;v.writeU32(m);const b=e.get(-2);if(31&b.length)throw new c("INVALID_MAST_STACK");var w=b.length>>>5;if(32<w)throw new c("INVALID_MAST_STACK");if(0===m&&(p+=w)>d.MAX_SCRIPT_OPS)throw new c("OP_COUNT");const x=[];for(let t=0;t<w;t++)x.push(b.slice(32*t,32*t+32));var S=e.get(-3);if(4<S.length)throw new c("INVALID_MAST_STACK");let E=0;if(0<S.length){if(0===S[S.length-1])throw new c("INVALID_MAST_STACK");for(let t=0;t<S.length;t++)E|=S[t]<<8*t;E<0&&(E+=4294967296)}if(w<32&&E>=1<<w>>>0)throw new c("INVALID_MAST_STACK");let _=new k;_.writeBytes(r.raw);for(let t=0;t<l;t++){var A=e.get(-(4+t));if(0===m&&_.offset+A.length>d.MAX_SCRIPT_SIZE)throw new c("SCRIPT_SIZE");f.writeBytes(g.hash256(A)),_.writeBytes(A)}if(f=g.hash256(f.render()),f=y.verifyBranch(f,x,E),v.writeBytes(f),!(v=g.hash256(v.render())).equals(t.data))throw new c("WITNESS_PROGRAM_MISMATCH");if(0===m){e.length-=3+l;for(let t=0;t<e.length;t++)if(e.get(t).length>d.MAX_SCRIPT_PUSH)throw new c("PUSH_SIZE");if(_=_.render(),(r=P.fromRaw(_)).execute(e,i,n,a,o,u,1),0!==e.length)throw new c("EVAL_FALSE")}}fromReader(t){return this.fromRaw(t.readVarBytes())}fromRaw(t){const e=new S(t,!0);for(this.raw=t;e.left();)this.code.push(a.fromReader(e));return this}static fromReader(t){return(new P).fromReader(t)}static fromRaw(t,e){return"string"==typeof t&&(t=Buffer.from(t,e)),(new P).fromRaw(t)}static isScript(t){return t instanceof P}}function O(t,e,r){if(s(Buffer.isBuffer(t)),s("number"==typeof e),s("number"==typeof r),e&P.flags.VERIFY_STRICTENC&&!h.isKeyEncoding(t))throw new c("PUBKEYTYPE");if(1===r&&e&P.flags.VERIFY_WITNESS_PUBKEYTYPE&&!h.isCompressedEncoding(t))throw new c("WITNESS_PUBKEYTYPE")}function T(t,e){if(s(Buffer.isBuffer(t)),s("number"==typeof e),0!==t.length){if((e&P.flags.VERIFY_DERSIG||e&P.flags.VERIFY_LOW_S||e&P.flags.VERIFY_STRICTENC)&&!h.isSignatureEncoding(t))throw new c("SIG_DER");if(e&P.flags.VERIFY_LOW_S&&!h.isLowDER(t))throw new c("SIG_HIGH_S");if(e&P.flags.VERIFY_STRICTENC&&!h.isHashType(t))throw new c("SIG_HASHTYPE")}}function F(t,e,r){return v.verify(t,e.slice(0,-1),r)}P.opcodes=h.opcodes,P.opcodesByVal=h.opcodesByVal,P.flags=h.flags,P.hashType=h.hashType,P.hashTypeByVal=h.hashTypeByVal,P.types=h.types,P.typesByVal=h.typesByVal,P.outputLockType=h.outputLockType,P.unspendableCodes=h.unspendableCodes,P.TradeType={btc:1},t.exports=P},function(t,e,r){"use strict";
|
|
41
41
|
/*!
|
|
42
42
|
* packetTypes.js - worker packets for vallnet
|
|
43
43
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -47,21 +47,21 @@ const path = require('path');var gpath = path.join(__dirname, '../../../', 'node
|
|
|
47
47
|
* tx.js - transaction object for vallnet
|
|
48
48
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
49
49
|
* https://github.com/bookmansoft/gamegold
|
|
50
|
-
*/const i=r(0),s=r(1),n=r(3),a=r(6),o=r(28),c=r(34),u=r(15),h=r(17),l=r(2),p=r(4),f=r(115),d=r(26),m=r(46),g=r(64),y=r(102),v=r(7),b=r(27),w=r(114),{opcodes:x,hashType:k}=r(22);function S(t,e){this.data=null,this.size=t,this.witness=e}r(60),t.exports=class t{constructor(t){t=t||{},this.version=1,this.inputs=t.inputs||[],this.outputs=t.outputs||[],this.locktime=0,this.mutable=!1,this._hash=null,this._hhash=null,this._whash=null,this._raw=null,this._size=-1,this._witness=-1,this._sigops=-1,this._hashPrevouts=null,this._hashSequence=null,this._hashOutputs=null,t&&this.fromOptions(t)}fromOptions(t){if(i(t,"TX data is required."),null!=t.version&&(i(s.isU32(t.version),"Version must be a uint32."),this.version=t.version),t.inputs){this.inputs=[],i(Array.isArray(t.inputs),"Inputs must be an array.");for(const e of t.inputs)this.inputs.push(new f(e))}if(t.outputs){this.outputs=[],i(Array.isArray(t.outputs),"Outputs must be an array.");for(const e of t.outputs)this.outputs.push(new d(e))}return null!=t.locktime&&(i(s.isU32(t.locktime),"Locktime must be a uint32."),this.locktime=t.locktime),this}static fromOptions(e){return(new t).fromOptions(e)}clone(){return(new t).inject(this)}inject(t,e=0){this.version=t.version;for(const r of t.inputs)if(this.inputs.push(r.clone()),0!=e&&this.inputs.length>=e)break;for(const r of t.outputs)if(this.outputs.push(r.clone()),0!=e&&this.outputs.length>=e)break;return this.locktime=t.locktime,this}refresh(){this._hash=null,this._hhash=null,this._whash=null,this._raw=null,this._size=-1,this._witness=-1,this._sigops=-1,this._hashPrevouts=null,this._hashSequence=null,this._hashOutputs=null}hash(t){let e=this._hash;if(e||(e=a.hash256(this.toNormal()),this.mutable||(this._hash=e)),"hex"===t){let t=this._hhash;t||(t=e.toString("hex"),this.mutable||(this._hhash=t)),e=t}return e}witnessHash(t){if(!this.hasWitness())return this.hash(t);let e=this._whash;return e||(e=a.hash256(this.toRaw()),this.mutable||(this._whash=e)),"hex"===t?e.toString("hex"):e}toRaw(){return this.frame().data}toNormal(){return this.hasWitness()?this.frameNormal().data:this.toRaw()}toWriter(t){return this.mutable?this.hasWitness()?this.writeWitness(t):this.writeNormal(t):(t.writeBytes(this.toRaw()),t)}toNormalWriter(t){return this.hasWitness()?(this.writeNormal(t),t):this.toWriter(t)}frame(){if(this.mutable)return i(!this._raw),this.hasWitness()?this.frameWitness():this.frameNormal();if(this._raw){i(0<=this._size),i(0<=this._witness);const t=new S(this._size,this._witness);return t.data=this._raw,t}let t;return t=this.hasWitness()?this.frameWitness():this.frameNormal(),this._raw=t.data,this._size=t.size,this._witness=t.witness,t}getSizes(){return this.mutable?this.hasWitness()?this.getWitnessSizes():this.getNormalSizes():this.frame()}getVirtualSize(){var t=v.WITNESS_SCALE_FACTOR;return(this.getWeight()+t-1)/t|0}getSigopsSize(t){var e=v.WITNESS_SCALE_FACTOR,r=b.BYTES_PER_SIGOP;return(Math.max(this.getWeight(),t*r)+e-1)/e|0}getWeight(){var t=this.getSizes();return(t.size-t.witness)*(v.WITNESS_SCALE_FACTOR-1)+t.size}getSize(){return this.getSizes().size}getBaseSize(){var t=this.getSizes();return t.size-t.witness}hasWitness(){if(-1!==this._witness)return 0!==this._witness;for(const t of this.inputs)if(0<t.witness.items.length)return!0;return!1}signatureHash(t,e,r,s,n){if(i(0<=t&&t<this.inputs.length),i(e instanceof h),i("number"==typeof r),i("number"==typeof s),0===n)return this.signatureHashV0(t,e,s);if(1===n)return this.signatureHashV1(t,e,r,s);throw new Error("Unknown sighash version.")}get opr(){let t={};return 0<this.outputs.length&&(t.data=this.outputs[0].getReturnData([x.OP_RETURN]),t.data&&"inner"==t.data.$tag&&(t.isDerived=!0)),t}signatureHashV0(t,e,r){if((31&r)===k.SINGLE){if(t>=this.outputs.length)return Buffer.from(n.ONE_HASH)}else if((31&r)===k.ZERO&&0==this.outputs.length)return Buffer.from(n.ONE_HASH);e=e.removeSeparators();var i=this.hashSize(t,e,r);const s=p.pool(i);if(s.writeU32(this.version),r&k.ANYONECANPAY){const r=this.inputs[t];s.writeVarint(1),r.prevout.toWriter(s),s.writeVarBytes(e.toRaw()),s.writeU32(r.sequence)}else{s.writeVarint(this.inputs.length);for(let i=0;i<this.inputs.length;i++){const n=this.inputs[i];if(n.prevout.toWriter(s),i===t)s.writeVarBytes(e.toRaw()),s.writeU32(n.sequence);else switch(s.writeVarint(0),31&r){case k.NONE:case k.SINGLE:case k.ZERO:s.writeU32(0);break;default:s.writeU32(n.sequence)}}}switch(31&r){case k.NONE:s.writeVarint(0);break;case k.SINGLE:{const e=this.outputs[t];s.writeVarint(t+1);for(let e=0;e<t;e++)s.writeI64(-1),s.writeVarint(0);e.toWriter(s);break}case k.ZERO:{const t=this.outputs[0];s.writeVarint(1),t.toWriter(s);break}default:s.writeVarint(this.outputs.length);for(const t of this.outputs)t.toWriter(s)}return s.writeU32(this.locktime),s.writeU32(r),a.hash256(s.render())}hashSize(t,e,r){let i=0;switch(i+=4,i=r&k.ANYONECANPAY?(i=i+1+36)+e.getVarSize()+4:(i=(i+=n.sizeVarint(this.inputs.length))+41*(this.inputs.length-1)+36)+e.getVarSize()+4,31&r){case k.NONE:i+=1;break;case k.SINGLE:i=(i=i+n.sizeVarint(t+1)+9*t)+this.outputs[t].getSize();break;case k.ZERO:0<this.outputs.length?i=(i+=n.sizeVarint(1))+this.outputs[0].getSize():i+=1;break;default:i+=n.sizeVarint(this.outputs.length);for(const t of this.outputs)i+=t.getSize()}return i+8}signatureHashV1(t,e,r,i){const s=this.inputs[t];let o=n.ZERO_HASH,c=n.ZERO_HASH,u=n.ZERO_HASH;if(!(i&k.ANYONECANPAY))if(this._hashPrevouts)o=this._hashPrevouts;else{const t=p.pool(36*this.inputs.length);for(const e of this.inputs)e.prevout.toWriter(t);o=a.hash256(t.render()),this.mutable||(this._hashPrevouts=o)}if(!(i&k.ANYONECANPAY)&&(31&i)!==k.ZERO&&(31&i)!==k.SINGLE&&(31&i)!==k.NONE)if(this._hashSequence)c=this._hashSequence;else{const t=p.pool(4*this.inputs.length);for(const e of this.inputs)t.writeU32(e.sequence);c=a.hash256(t.render()),this.mutable||(this._hashSequence=c)}if((31&i)!==k.SINGLE&&(31&i)!==k.ZERO&&(31&i)!==k.NONE)if(this._hashOutputs)u=this._hashOutputs;else{let t=0;for(const e of this.outputs)t+=e.getSize();const e=p.pool(t);for(const t of this.outputs)t.toWriter(e);u=a.hash256(e.render()),this.mutable||(this._hashOutputs=u)}else if((31&i)===k.SINGLE){if(t<this.outputs.length){const e=this.outputs[t];u=a.hash256(e.toRaw())}}else if((31&i)===k.ZERO&&0<this.outputs.length){const t=this.outputs[0];u=a.hash256(t.toRaw())}t=156+e.getVarSize();const h=p.pool(t);return h.writeU32(this.version),h.writeBytes(o),h.writeBytes(c),h.writeHash(s.prevout.hash),h.writeU32(s.prevout.index),h.writeVarBytes(e.toRaw()),h.writeI64(r),h.writeU32(s.sequence),h.writeBytes(u),h.writeU32(this.locktime),h.writeU32(i),a.hash256(h.render())}checksig(t,e,r,i,s,n){var a;return 0!==i.length&&(a=i[i.length-1],t=this.signatureHash(t,e,r,a,n),o.verify(t,i.slice(0,-1),s))}signature(t,e,r,i,s,n){null==s&&(s=k.ALL),t=this.signatureHash(t,e,r,s,n=null==n?0:n),e=o.sign(t,i);const a=new p(e.length+1);return a.writeBytes(e),a.writeU8(s),a.render()}check(t,e,r){if(0===this.inputs.length)throw new w("UNKNOWN_ERROR","No inputs.");if(!this.isCoinbase())for(let s=0;s<this.inputs.length;s++){var i=this.inputs[s].prevout;if(!(i=t.getOutput(i)))throw new w("UNKNOWN_ERROR","No coin available.");this.checkInput(s,i,e,r)}}checkInput(t,e,r,s){var n=this.inputs[t];i(n,"Input does not exist."),i(e,"No coin passed.");try{h.verifyScript(n.script,n.witness,e.script,this,t,e.value,r,s)}catch(t){throw t}}async checkAsync(t,e,r,i){if(0===this.inputs.length)throw new w("UNKNOWN_ERROR","No inputs.");this.isCoinbase()||this.check(t,e,r)}verify(t,e,r){try{this.check(t,e,r)}catch(t){if("ScriptError"===t.type)return!1;throw t}return!0}verifyInputs(t,e){var[t]=this.checkInputs(t,e);return-1!==t}verifyInput(t,e,r,i){try{this.checkInput(t,e,r,i)}catch(t){if("ScriptError"===t.type)return!1;throw t}return!0}async verifyAsync(t,e,r,i){try{await this.checkAsync(t,e,r,i)}catch(t){if("ScriptError"===t.type)return!1;throw t}return!0}isCoinbase(){return 1===this.inputs.length&&this.inputs[0].prevout.isNull()}isRBF(){if(2!==this.version)for(const t of this.inputs)if(t.isRBF())return!0;return!1}getFee(t){return this.hasCoins(t)?this.getInputValue(t)-this.getOutputValue():0}getInputValue(t){let e=0;for(var{prevout:r}of this.inputs){if(!(r=t.getOutput(r)))return 0;e+=r.value}return e}getOutputValue(){let t=0;for(const e of this.outputs)t+=e.value;return t}_getInputAddresses(t){const e=Object.create(null),r=[];if(!this.isCoinbase())for(const s of this.inputs){var i=t?t.getOutputFor(s):null;const n=s.getAddress(i);n&&(e[i=n.getHash("hex")]||(e[i]=!0,r.push(n)))}return[r,e]}_getOutputAddresses(){const t=Object.create(null),e=[];for(const i of this.outputs){const s=i.getAddress();var r;s&&(t[r=s.getHash("hex")]||(t[r]=!0,e.push(s)))}return[e,t]}_getAddresses(t){const[e,r]=this._getInputAddresses(t);for(const t of this.getOutputAddresses()){var i=t.getHash("hex");r[i]||(r[i]=!0,e.push(t))}return[e,r]}getInputAddresses(t){var[t]=this._getInputAddresses(t);return t}getOutputAddresses(){var[t]=this._getOutputAddresses();return t}getAddresses(t){var[t]=this._getAddresses(t);return t}getInputHashes(t,e){if("hex"===e)return[,e]=this._getInputAddresses(t),Object.keys(e);const r=[];for(const e of this.getInputAddresses(t))r.push(e.getHash());return r}getOutputHashes(t){if("hex"===t)return[,t]=this._getOutputAddresses(),Object.keys(t);const e=[];for(const t of this.getOutputAddresses())e.push(t.getHash());return e}getHashes(t,e){if("hex"===e)return[,e]=this._getAddresses(t),Object.keys(e);const r=[];for(const e of this.getAddresses(t))r.push(e.getHash());return r}hasCoins(t){if(0===this.inputs.length)return!1;for(var{prevout:e}of this.inputs)if(!t.hasEntry(e))return!1;return!0}isFinal(t,e){var r=v.LOCKTIME_THRESHOLD;if(0!==this.locktime&&!(this.locktime<(this.locktime<r?t:e)))for(const t of this.inputs)if(4294967295!==t.sequence)return!1;return!0}static mergeOrder(t){return i(Array.isArray(t)),t.reduce((t,e)=>null==t||1==t.outputs.length||1<e.outputs.length&&e.outputs[1].value>t.outputs[1].value?e:t,null)}verifyLocktime(t,e){var r=v.LOCKTIME_THRESHOLD;t=this.inputs[t];return i(t,"Input does not exist."),i(0<=e,"Locktime must be non-negative."),this.locktime<r==e<r&&!(e>this.locktime)&&4294967295!==t.sequence}verifySequence(t,e){var r=v.SEQUENCE_DISABLE_FLAG,s=v.SEQUENCE_TYPE_FLAG,n=v.SEQUENCE_MASK;t=this.inputs[t];return i(t,"Input does not exist."),i(0<=e,"Locktime must be non-negative."),!(!(e&r)&&(this.version<2||t.sequence&r||(t.sequence&s)!=(e&s)||(e&n)>(t.sequence&n)))}getLegacySigops(){if(-1!==this._sigops)return this._sigops;let t=0;for(const e of this.inputs)t+=e.script.getSigops(!1);for(const e of this.outputs)t+=e.script.getSigops(!1);return this.mutable||(this._sigops=t),t}getScripthashSigops(t){if(this.isCoinbase())return 0;let e=0;for(const r of this.inputs){const i=t.getOutputFor(r);i&&i.script.isScripthash()&&(e+=i.script.getScripthashSigops(r.script))}return e}getWitnessSigops(t){if(this.isCoinbase())return 0;let e=0;for(const r of this.inputs){const i=t.getOutputFor(r);i&&(e+=i.script.getWitnessSigops(r.script,r.witness))}return e}getSigopsCost(t,e){null==e&&(e=h.flags.STANDARD_VERIFY_FLAGS);var r=v.WITNESS_SCALE_FACTOR;let i=this.getLegacySigops()*r;return e&h.flags.VERIFY_P2SH&&(i+=this.getScripthashSigops(t)*r),e&h.flags.VERIFY_WITNESS&&(i+=this.getWitnessSigops(t)),i}getSigops(t,e){var r=v.WITNESS_SCALE_FACTOR;return(this.getSigopsCost(t,e)+r-1)/r|0}isSane(){var[t]=this.checkSanity();return t}checkSanity(){if(0===this.inputs.length)return[!1,"bad-txns-vin-empty",100];if(0===this.outputs.length)return[!1,"bad-txns-vout-empty",100];if(this.getBaseSize()>v.MAX_BLOCK_SIZE)return[!1,"bad-txns-oversize",100];let t=0;for(const e of this.outputs){if(e.value<0)return[!1,"bad-txns-vout-negative",100];if(e.value>v.MAX_MONEY)return[!1,"bad-txns-vout-toolarge",100];if((t+=e.value)<0||t>v.MAX_MONEY)return[!1,"bad-txns-txouttotal-toolarge",100]}const e=new Set;for(const t of this.inputs){var r=t.prevout.toKey();if(e.has(r))return[!1,"bad-txns-inputs-duplicate",100];e.add(r)}if(this.isCoinbase()){var i=this.inputs[0].script.getSize();if(i<2||100<i)return[!1,"bad-cb-length",100]}else for(const t of this.inputs)if(t.prevout.isNull())return[!1,"bad-txns-prevout-null",10];return[!0,"valid",0]}isStandard(){var[t]=this.checkStandard();return t}checkStandard(){if(this.version<1||this.version>b.MAX_TX_VERSION)return[!1,"version",0];if(this.getWeight()>=b.MAX_TX_WEIGHT)return[!1,"tx-size",0];for(const t of this.inputs){if(1650<t.script.getSize())return[!1,"scriptsig-size",0];if(!t.script.isPushOnly())return[!1,"scriptsig-not-pushonly",0]}let t=0;for(const e of this.outputs){if(!e.script.isStandard())return[!1,"scriptpubkey",0];if(e.script.isNulldata())t++;else{if(e.script.isMultisig()&&!b.BARE_MULTISIG)return[!1,"bare-multisig",0];if(e.isDust())return[!1,"dust",0]}}return 1<t?[!1,"multi-op-return",0]:[!0,"valid",0]}hasStandardInputs(t){if(!this.isCoinbase())for(const e of this.inputs){const r=t.getOutputFor(e);if(!r)return!1;if(!r.script.isPubkeyhash())if(r.script.isScripthash()){const t=e.script.getRedeem();if(!t)return!1;if(t.getSigops(!0)>b.MAX_P2SH_SIGOPS)return!1}else if(r.script.isUnknown())return!1}return!0}hasStandardWitness(t){if(!this.isCoinbase())for(const i of this.inputs){var e,r=i.witness;if((e=t.getOutputFor(i))&&0!==r.items.length){let t=e.script;if(t.isScripthash()&&!(t=i.script.getRedeem()))return!1;if(!t.isProgram())return!1;if(t.isWitnessPubkeyhash()){if(2!==r.items.length)return!1;if(73<r.items[0].length)return!1;if(65<r.items[1].length)return!1}else if(t.isWitnessScripthash()){if(r.items.length-1>b.MAX_P2WSH_STACK)return!1;for(let t=0;t<r.items.length-1;t++)if(r.items[t].length>b.MAX_P2WSH_PUSH)return!1;if((e=r.items[r.items.length-1]).length>b.MAX_P2WSH_SIZE)return!1;const t=h.fromRaw(e);if(t.isPubkey()){if(r.items.length-1!=1)return!1;if(73<r.items[0].length)return!1}else if(t.isPubkeyhash()){if(i.witness.items.length-1!=2)return!1;if(73<r.items[0].length)return!1;if(65<r.items[1].length)return!1}else{var[e]=t.getMultisig();if(-1!==e){if(r.items.length-1!==e+1)return!1;if(0!==r.items[0].length)return!1;for(let t=1;t<r.items.length-1;t++)if(73<r.items[t].length)return!1}}}else{if(r.items.length>b.MAX_P2WSH_STACK)return!1;for(const t of r.items)if(t.length>b.MAX_P2WSH_PUSH)return!1}}}return!0}checkInputs(t,e){i("number"==typeof e);let r=0;for(var{prevout:s}of this.inputs){var n=t.getEntry(s);if(!n)return[-1,"bad-txns-inputs-missingorspent",0];if(n.coinbase&&0<n.height&&e<n.height+v.COINBASE_MATURITY)return[-1,"bad-txns-premature-spend-of-coinbase",0];if(n=t.getOutput(s),i(n),n.value<0||n.value>v.MAX_MONEY)return[-1,"bad-txns-inputvalues-outofrange",100];if((r+=n.value)<0||r>v.MAX_MONEY)return[-1,"bad-txns-inputvalues-outofrange",100]}var a=this.getOutputValue();return r<a?[-1,"bad-txns-in-belowout",100]:(a=r-a)<0?[-1,"bad-txns-fee-negative",100]:a>v.MAX_MONEY?[-1,"bad-txns-fee-outofrange",100]:[a,"valid",0]}getModifiedSize(t){null==t&&(t=this.getVirtualSize());for(const r of this.inputs){var e=41+Math.min(110,r.script.getSize());e<t&&(t-=e)}return t}getPriority(t,e,r){if(i("number"==typeof e,"Must pass in height."),this.isCoinbase())return 0;null==r&&(r=this.getVirtualSize());let s=0;for(var{prevout:n}of this.inputs){var a=t.getOutput(n);a&&-1!==(n=t.getHeight(n))&&n<=e&&(s+=a.value*(e-n))}return Math.floor(s/r)}getChainValue(t){if(this.isCoinbase())return 0;let e=0;for(var{prevout:r}of this.inputs){var i=t.getOutput(r);i&&-1!==t.getHeight(r)&&(e+=i.value)}return e}isFree(t,e,r){return this.getPriority(t,e,r)>b.FREE_THRESHOLD}getMinFee(t,e){return null==t&&(t=this.getVirtualSize()),b.getMinFee(t,e)}getRoundFee(t,e){return null==t&&(t=this.getVirtualSize()),b.getRoundFee(t,e)}getRate(t,e){return(t=this.getFee(t))<0?0:(null==e&&(e=this.getVirtualSize()),b.getRate(e,t))}getPrevout(){if(this.isCoinbase())return[];const t=Object.create(null);for(const e of this.inputs)t[e.prevout.hash]=!0;return Object.keys(t)}isWatched(t){let e=!1;t.test(this.hash())&&(e=!0);for(let r=0;r<this.outputs.length;r++){const i=this.outputs[r];if(i.script.test(t)){if(t.update===y.flags.ALL){const e=m.fromTX(this,r);t.add(e.toRaw())}else if(t.update===y.flags.PUBKEY_ONLY&&(i.script.isPubkey()||i.script.isMultisig())){const e=m.fromTX(this,r);t.add(e.toRaw())}e=!0}}if(e)return e;for(const e of this.inputs){const r=e.prevout;if(t.test(r.toRaw()))return!0;if(e.script.test(t))return!0}return!1}rhash(){return s.revHex(this.hash("hex"))}rwhash(){return s.revHex(this.witnessHash("hex"))}txid(){return this.rhash()}wtxid(){return this.rwhash()}toInv(){return new g(g.types.TX,this.hash("hex"))}inspect(){return this.format()}format(t,e,r){let i=0,n=0,a=-1,o=null,u=0,h=null;return t&&(n=this.getFee(t),i=this.getRate(t),Number.isSafeInteger(i)||(i=0)),e&&(a=e.height,o=s.revHex(e.hash),u=e.time,h=s.date(u)),null==r&&(r=-1),{hash:this.txid(),witnessHash:this.wtxid(),size:this.getSize(),virtualSize:this.getVirtualSize(),value:c.btc(this.getOutputValue()),fee:c.btc(n),rate:c.btc(i),minFee:c.btc(this.getMinFee()),height:a,block:o,time:u,date:h,index:r,version:this.version,inputs:this.inputs.map(e=>{var r=t?t.getOutputFor(e):null;return e.format(r)}),outputs:this.outputs,locktime:this.locktime}}formatInsight(t,e=0){return null==t&&(t=-1),{hash:this.hash("hex"),rhash:this.txid(),witnessHash:this.wtxid(),txid:function(){return this.rhash},ps:e,index:t,version:this.version,flag:1,locktime:this.locktime,raw:this.toRaw(),inputs:this.inputs.map(t=>t.formatInsight()),outputs:this.outputs.map(t=>t.formatInsight())}}static EncodeSpenderValue(t,e,r,i){const s=Buffer.allocUnsafe(72);return s.write(t,0,"hex"),s.writeUInt32BE(e,32,!0),s.writeUInt32BE(r,36,!0),s.write(i,40,"hex"),s}static DecodeSpenderValue(t){return i(Buffer.isBuffer(t)),i(72===t.length),{txid:t.toString("hex",0,32),inputIndex:t.readUInt32BE(32,!0),blockHeight:t.readUInt32BE(36,!0),blockHash:t.toString("hex",40,32)}}toJSON(){return this.getJSON()}getJSON(t,e,r,i){let n,a,o,c,h,l;return e&&(a=this.getFee(e),n=this.getRate(e),Number.isSafeInteger(n)||(n=0)),r&&(o=r.height,c=s.revHex(r.hash),h=r.time,l=s.date(h)),t=u.get(t),{hash:this.txid(),witnessHash:this.wtxid(),fee:a,rate:n,mtime:s.now(),height:o,block:c,time:h,date:l,index:i,version:this.version,inputs:this.inputs.map(r=>{var i=e?e.getCoinFor(r):null;return r.getJSON(t,i)}),outputs:this.outputs.map(e=>e.getJSON(t)),locktime:this.locktime,hex:this.toRaw().toString("hex")}}fromJSON(t){i(t,"TX data is required."),i(s.isU32(t.version),"Version must be a uint32."),i(Array.isArray(t.inputs),"Inputs must be an array."),i(Array.isArray(t.outputs),"Outputs must be an array."),i(s.isU32(t.locktime),"Locktime must be a uint32."),this.version=t.version;for(const e of t.inputs)this.inputs.push(f.fromJSON(e));for(const e of t.outputs)this.outputs.push(d.fromJSON(e));return this.locktime=t.locktime,this}static fromJSON(e){return(new t).fromJSON(e)}static fromRaw(e,r){return"string"==typeof e&&(e=Buffer.from(e,r)),(new t).fromRaw(e)}static fromReader(e){return(new t).fromReader(e)}fromRaw(t){return this.fromReader(new l(t))}fromReader(t){if(!((e=t).left()<6)&&0===e.data[e.offset+4]&&0!==e.data[e.offset+5])return this.fromWitnessReader(t);t.start(),this.version=t.readU32();var e,r=t.readVarint();for(let e=0;e<r;e++)this.inputs.push(f.fromReader(t));var i=t.readVarint();for(let e=0;e<i;e++)this.outputs.push(d.fromReader(t));return this.locktime=t.readU32(),this.mutable?t.end():(this._raw=t.endData(),this._size=this._raw.length,this._witness=0),this}fromWitnessReader(t){t.start(),this.version=t.readU32(),i(0===t.readU8(),"Non-zero marker.");let e=t.readU8();i(0!==e,"Flags byte is zero.");var r=t.readVarint();for(let e=0;e<r;e++)this.inputs.push(f.fromReader(t));var s=t.readVarint();for(let e=0;e<s;e++)this.outputs.push(d.fromReader(t));let n=0,a=!1;if(1&e){e^=1,n=t.offset;for(const e of this.inputs)e.witness.fromReader(t),0<e.witness.items.length&&(a=!0);n=t.offset-n+2}if(0!==e)throw new Error("Unknown witness flag.");if(0===this.inputs.length&&0!==this.outputs.length)throw new Error("Zero input witness tx.");return this.locktime=t.readU32(),!this.mutable&&a?(this._raw=t.endData(),this._size=this._raw.length,this._witness=n):t.end(),this}frameNormal(){const t=this.getNormalSizes(),e=new p(t.size);return this.writeNormal(e),t.data=e.render(),t}frameWitness(){const t=this.getWitnessSizes(),e=new p(t.size);return this.writeWitness(e),t.data=e.render(),t}writeNormal(t){if(0===this.inputs.length&&0!==this.outputs.length)throw new Error("Cannot serialize zero-input tx.");t.writeU32(this.version),t.writeVarint(this.inputs.length);for(const e of this.inputs)e.toWriter(t);t.writeVarint(this.outputs.length);for(const e of this.outputs)e.toWriter(t);return t.writeU32(this.locktime),t}writeWitness(t){if(0===this.inputs.length&&0!==this.outputs.length)throw new Error("Cannot serialize zero-input tx.");t.writeU32(this.version),t.writeU8(0),t.writeU8(1),t.writeVarint(this.inputs.length);for(const e of this.inputs)e.toWriter(t);t.writeVarint(this.outputs.length);for(const e of this.outputs)e.toWriter(t);var e=t.offset;for(const e of this.inputs)e.witness.toWriter(t);if(e=t.offset-e,t.writeU32(this.locktime),e===this.inputs.length)throw new Error("Cannot serialize empty-witness tx.");return t}getNormalSizes(){let t=0;t=(t+=4)+n.sizeVarint(this.inputs.length);for(const e of this.inputs)t+=e.getSize();t+=n.sizeVarint(this.outputs.length);for(const e of this.outputs)t+=e.getSize();return new S(t+=4,0)}getWitnessSizes(){let t=0,e=0;t+=4,e+=2,t+=n.sizeVarint(this.inputs.length);for(const r of this.inputs)t+=r.getSize(),e+=r.witness.getVarSize();t+=n.sizeVarint(this.outputs.length);for(const e of this.outputs)t+=e.getSize();return new S((t+=4)+e,e)}static isTX(e){return e instanceof t}}},function(t,e,r){"use strict";
|
|
50
|
+
*/const i=r(0),s=r(1),n=r(3),a=r(6),o=r(28),c=r(34),u=r(15),h=r(17),l=r(2),p=r(4),f=r(115),d=r(26),m=r(46),g=r(64),y=r(102),v=r(7),b=r(27),w=r(114),{opcodes:x,hashType:k}=r(21);function S(t,e){this.data=null,this.size=t,this.witness=e}r(60),t.exports=class t{constructor(t){t=t||{},this.version=1,this.inputs=t.inputs||[],this.outputs=t.outputs||[],this.locktime=0,this.mutable=!1,this._hash=null,this._hhash=null,this._whash=null,this._raw=null,this._size=-1,this._witness=-1,this._sigops=-1,this._hashPrevouts=null,this._hashSequence=null,this._hashOutputs=null,t&&this.fromOptions(t)}fromOptions(t){if(i(t,"TX data is required."),null!=t.version&&(i(s.isU32(t.version),"Version must be a uint32."),this.version=t.version),t.inputs){this.inputs=[],i(Array.isArray(t.inputs),"Inputs must be an array.");for(const e of t.inputs)this.inputs.push(new f(e))}if(t.outputs){this.outputs=[],i(Array.isArray(t.outputs),"Outputs must be an array.");for(const e of t.outputs)this.outputs.push(new d(e))}return null!=t.locktime&&(i(s.isU32(t.locktime),"Locktime must be a uint32."),this.locktime=t.locktime),this}static fromOptions(e){return(new t).fromOptions(e)}clone(){return(new t).inject(this)}inject(t,e=0){this.version=t.version;for(const r of t.inputs)if(this.inputs.push(r.clone()),0!=e&&this.inputs.length>=e)break;for(const r of t.outputs)if(this.outputs.push(r.clone()),0!=e&&this.outputs.length>=e)break;return this.locktime=t.locktime,this}refresh(){this._hash=null,this._hhash=null,this._whash=null,this._raw=null,this._size=-1,this._witness=-1,this._sigops=-1,this._hashPrevouts=null,this._hashSequence=null,this._hashOutputs=null}hash(t){let e=this._hash;if(e||(e=a.hash256(this.toNormal()),this.mutable||(this._hash=e)),"hex"===t){let t=this._hhash;t||(t=e.toString("hex"),this.mutable||(this._hhash=t)),e=t}return e}witnessHash(t){if(!this.hasWitness())return this.hash(t);let e=this._whash;return e||(e=a.hash256(this.toRaw()),this.mutable||(this._whash=e)),"hex"===t?e.toString("hex"):e}toRaw(){return this.frame().data}toNormal(){return this.hasWitness()?this.frameNormal().data:this.toRaw()}toWriter(t){return this.mutable?this.hasWitness()?this.writeWitness(t):this.writeNormal(t):(t.writeBytes(this.toRaw()),t)}toNormalWriter(t){return this.hasWitness()?(this.writeNormal(t),t):this.toWriter(t)}frame(){if(this.mutable)return i(!this._raw),this.hasWitness()?this.frameWitness():this.frameNormal();if(this._raw){i(0<=this._size),i(0<=this._witness);const t=new S(this._size,this._witness);return t.data=this._raw,t}let t;return t=this.hasWitness()?this.frameWitness():this.frameNormal(),this._raw=t.data,this._size=t.size,this._witness=t.witness,t}getSizes(){return this.mutable?this.hasWitness()?this.getWitnessSizes():this.getNormalSizes():this.frame()}getVirtualSize(){var t=v.WITNESS_SCALE_FACTOR;return(this.getWeight()+t-1)/t|0}getSigopsSize(t){var e=v.WITNESS_SCALE_FACTOR,r=b.BYTES_PER_SIGOP;return(Math.max(this.getWeight(),t*r)+e-1)/e|0}getWeight(){var t=this.getSizes();return(t.size-t.witness)*(v.WITNESS_SCALE_FACTOR-1)+t.size}getSize(){return this.getSizes().size}getBaseSize(){var t=this.getSizes();return t.size-t.witness}hasWitness(){if(-1!==this._witness)return 0!==this._witness;for(const t of this.inputs)if(0<t.witness.items.length)return!0;return!1}signatureHash(t,e,r,s,n){if(i(0<=t&&t<this.inputs.length),i(e instanceof h),i("number"==typeof r),i("number"==typeof s),0===n)return this.signatureHashV0(t,e,s);if(1===n)return this.signatureHashV1(t,e,r,s);throw new Error("Unknown sighash version.")}get opr(){let t={};return 0<this.outputs.length&&(t.data=this.outputs[0].getReturnData([x.OP_RETURN]),t.data&&"inner"==t.data.$tag&&(t.isDerived=!0)),t}signatureHashV0(t,e,r){if((31&r)===k.SINGLE){if(t>=this.outputs.length)return Buffer.from(n.ONE_HASH)}else if((31&r)===k.ZERO&&0==this.outputs.length)return Buffer.from(n.ONE_HASH);e=e.removeSeparators();var i=this.hashSize(t,e,r);const s=p.pool(i);if(s.writeU32(this.version),r&k.ANYONECANPAY){const r=this.inputs[t];s.writeVarint(1),r.prevout.toWriter(s),s.writeVarBytes(e.toRaw()),s.writeU32(r.sequence)}else{s.writeVarint(this.inputs.length);for(let i=0;i<this.inputs.length;i++){const n=this.inputs[i];if(n.prevout.toWriter(s),i===t)s.writeVarBytes(e.toRaw()),s.writeU32(n.sequence);else switch(s.writeVarint(0),31&r){case k.NONE:case k.SINGLE:case k.ZERO:s.writeU32(0);break;default:s.writeU32(n.sequence)}}}switch(31&r){case k.NONE:s.writeVarint(0);break;case k.SINGLE:{const e=this.outputs[t];s.writeVarint(t+1);for(let e=0;e<t;e++)s.writeI64(-1),s.writeVarint(0);e.toWriter(s);break}case k.ZERO:{const t=this.outputs[0];s.writeVarint(1),t.toWriter(s);break}default:s.writeVarint(this.outputs.length);for(const t of this.outputs)t.toWriter(s)}return s.writeU32(this.locktime),s.writeU32(r),a.hash256(s.render())}hashSize(t,e,r){let i=0;switch(i+=4,i=r&k.ANYONECANPAY?(i=i+1+36)+e.getVarSize()+4:(i=(i+=n.sizeVarint(this.inputs.length))+41*(this.inputs.length-1)+36)+e.getVarSize()+4,31&r){case k.NONE:i+=1;break;case k.SINGLE:i=(i=i+n.sizeVarint(t+1)+9*t)+this.outputs[t].getSize();break;case k.ZERO:0<this.outputs.length?i=(i+=n.sizeVarint(1))+this.outputs[0].getSize():i+=1;break;default:i+=n.sizeVarint(this.outputs.length);for(const t of this.outputs)i+=t.getSize()}return i+8}signatureHashV1(t,e,r,i){const s=this.inputs[t];let o=n.ZERO_HASH,c=n.ZERO_HASH,u=n.ZERO_HASH;if(!(i&k.ANYONECANPAY))if(this._hashPrevouts)o=this._hashPrevouts;else{const t=p.pool(36*this.inputs.length);for(const e of this.inputs)e.prevout.toWriter(t);o=a.hash256(t.render()),this.mutable||(this._hashPrevouts=o)}if(!(i&k.ANYONECANPAY)&&(31&i)!==k.ZERO&&(31&i)!==k.SINGLE&&(31&i)!==k.NONE)if(this._hashSequence)c=this._hashSequence;else{const t=p.pool(4*this.inputs.length);for(const e of this.inputs)t.writeU32(e.sequence);c=a.hash256(t.render()),this.mutable||(this._hashSequence=c)}if((31&i)!==k.SINGLE&&(31&i)!==k.ZERO&&(31&i)!==k.NONE)if(this._hashOutputs)u=this._hashOutputs;else{let t=0;for(const e of this.outputs)t+=e.getSize();const e=p.pool(t);for(const t of this.outputs)t.toWriter(e);u=a.hash256(e.render()),this.mutable||(this._hashOutputs=u)}else if((31&i)===k.SINGLE){if(t<this.outputs.length){const e=this.outputs[t];u=a.hash256(e.toRaw())}}else if((31&i)===k.ZERO&&0<this.outputs.length){const t=this.outputs[0];u=a.hash256(t.toRaw())}t=156+e.getVarSize();const h=p.pool(t);return h.writeU32(this.version),h.writeBytes(o),h.writeBytes(c),h.writeHash(s.prevout.hash),h.writeU32(s.prevout.index),h.writeVarBytes(e.toRaw()),h.writeI64(r),h.writeU32(s.sequence),h.writeBytes(u),h.writeU32(this.locktime),h.writeU32(i),a.hash256(h.render())}checksig(t,e,r,i,s,n){var a;return 0!==i.length&&(a=i[i.length-1],t=this.signatureHash(t,e,r,a,n),o.verify(t,i.slice(0,-1),s))}signature(t,e,r,i,s,n){null==s&&(s=k.ALL),t=this.signatureHash(t,e,r,s,n=null==n?0:n),e=o.sign(t,i);const a=new p(e.length+1);return a.writeBytes(e),a.writeU8(s),a.render()}check(t,e,r){if(0===this.inputs.length)throw new w("UNKNOWN_ERROR","No inputs.");if(!this.isCoinbase())for(let s=0;s<this.inputs.length;s++){var i=this.inputs[s].prevout;if(!(i=t.getOutput(i)))throw new w("UNKNOWN_ERROR","No coin available.");this.checkInput(s,i,e,r)}}checkInput(t,e,r,s){var n=this.inputs[t];i(n,"Input does not exist."),i(e,"No coin passed.");try{h.verifyScript(n.script,n.witness,e.script,this,t,e.value,r,s)}catch(t){throw t}}async checkAsync(t,e,r,i){if(0===this.inputs.length)throw new w("UNKNOWN_ERROR","No inputs.");this.isCoinbase()||this.check(t,e,r)}verify(t,e,r){try{this.check(t,e,r)}catch(t){if("ScriptError"===t.type)return!1;throw t}return!0}verifyInputs(t,e){var[t]=this.checkInputs(t,e);return-1!==t}verifyInput(t,e,r,i){try{this.checkInput(t,e,r,i)}catch(t){if("ScriptError"===t.type)return!1;throw t}return!0}async verifyAsync(t,e,r,i){try{await this.checkAsync(t,e,r,i)}catch(t){if("ScriptError"===t.type)return!1;throw t}return!0}isCoinbase(){return 1===this.inputs.length&&this.inputs[0].prevout.isNull()}isRBF(){if(2!==this.version)for(const t of this.inputs)if(t.isRBF())return!0;return!1}getFee(t){return this.hasCoins(t)?this.getInputValue(t)-this.getOutputValue():0}getInputValue(t){let e=0;for(var{prevout:r}of this.inputs){if(!(r=t.getOutput(r)))return 0;e+=r.value}return e}getOutputValue(){let t=0;for(const e of this.outputs)t+=e.value;return t}_getInputAddresses(t){const e=Object.create(null),r=[];if(!this.isCoinbase())for(const s of this.inputs){var i=t?t.getOutputFor(s):null;const n=s.getAddress(i);n&&(e[i=n.getHash("hex")]||(e[i]=!0,r.push(n)))}return[r,e]}_getOutputAddresses(){const t=Object.create(null),e=[];for(const i of this.outputs){const s=i.getAddress();var r;s&&(t[r=s.getHash("hex")]||(t[r]=!0,e.push(s)))}return[e,t]}_getAddresses(t){const[e,r]=this._getInputAddresses(t);for(const t of this.getOutputAddresses()){var i=t.getHash("hex");r[i]||(r[i]=!0,e.push(t))}return[e,r]}getInputAddresses(t){var[t]=this._getInputAddresses(t);return t}getOutputAddresses(){var[t]=this._getOutputAddresses();return t}getAddresses(t){var[t]=this._getAddresses(t);return t}getInputHashes(t,e){if("hex"===e)return[,e]=this._getInputAddresses(t),Object.keys(e);const r=[];for(const e of this.getInputAddresses(t))r.push(e.getHash());return r}getOutputHashes(t){if("hex"===t)return[,t]=this._getOutputAddresses(),Object.keys(t);const e=[];for(const t of this.getOutputAddresses())e.push(t.getHash());return e}getHashes(t,e){if("hex"===e)return[,e]=this._getAddresses(t),Object.keys(e);const r=[];for(const e of this.getAddresses(t))r.push(e.getHash());return r}hasCoins(t){if(0===this.inputs.length)return!1;for(var{prevout:e}of this.inputs)if(!t.hasEntry(e))return!1;return!0}isFinal(t,e){var r=v.LOCKTIME_THRESHOLD;if(0!==this.locktime&&!(this.locktime<(this.locktime<r?t:e)))for(const t of this.inputs)if(4294967295!==t.sequence)return!1;return!0}static mergeOrder(t){return i(Array.isArray(t)),t.reduce((t,e)=>null==t||1==t.outputs.length||1<e.outputs.length&&e.outputs[1].value>t.outputs[1].value?e:t,null)}verifyLocktime(t,e){var r=v.LOCKTIME_THRESHOLD;t=this.inputs[t];return i(t,"Input does not exist."),i(0<=e,"Locktime must be non-negative."),this.locktime<r==e<r&&!(e>this.locktime)&&4294967295!==t.sequence}verifySequence(t,e){var r=v.SEQUENCE_DISABLE_FLAG,s=v.SEQUENCE_TYPE_FLAG,n=v.SEQUENCE_MASK;t=this.inputs[t];return i(t,"Input does not exist."),i(0<=e,"Locktime must be non-negative."),!(!(e&r)&&(this.version<2||t.sequence&r||(t.sequence&s)!=(e&s)||(e&n)>(t.sequence&n)))}getLegacySigops(){if(-1!==this._sigops)return this._sigops;let t=0;for(const e of this.inputs)t+=e.script.getSigops(!1);for(const e of this.outputs)t+=e.script.getSigops(!1);return this.mutable||(this._sigops=t),t}getScripthashSigops(t){if(this.isCoinbase())return 0;let e=0;for(const r of this.inputs){const i=t.getOutputFor(r);i&&i.script.isScripthash()&&(e+=i.script.getScripthashSigops(r.script))}return e}getWitnessSigops(t){if(this.isCoinbase())return 0;let e=0;for(const r of this.inputs){const i=t.getOutputFor(r);i&&(e+=i.script.getWitnessSigops(r.script,r.witness))}return e}getSigopsCost(t,e){null==e&&(e=h.flags.STANDARD_VERIFY_FLAGS);var r=v.WITNESS_SCALE_FACTOR;let i=this.getLegacySigops()*r;return e&h.flags.VERIFY_P2SH&&(i+=this.getScripthashSigops(t)*r),e&h.flags.VERIFY_WITNESS&&(i+=this.getWitnessSigops(t)),i}getSigops(t,e){var r=v.WITNESS_SCALE_FACTOR;return(this.getSigopsCost(t,e)+r-1)/r|0}isSane(){var[t]=this.checkSanity();return t}checkSanity(){if(0===this.inputs.length)return[!1,"bad-txns-vin-empty",100];if(0===this.outputs.length)return[!1,"bad-txns-vout-empty",100];if(this.getBaseSize()>v.MAX_BLOCK_SIZE)return[!1,"bad-txns-oversize",100];let t=0;for(const e of this.outputs){if(e.value<0)return[!1,"bad-txns-vout-negative",100];if(e.value>v.MAX_MONEY)return[!1,"bad-txns-vout-toolarge",100];if((t+=e.value)<0||t>v.MAX_MONEY)return[!1,"bad-txns-txouttotal-toolarge",100]}const e=new Set;for(const t of this.inputs){var r=t.prevout.toKey();if(e.has(r))return[!1,"bad-txns-inputs-duplicate",100];e.add(r)}if(this.isCoinbase()){var i=this.inputs[0].script.getSize();if(i<2||100<i)return[!1,"bad-cb-length",100]}else for(const t of this.inputs)if(t.prevout.isNull())return[!1,"bad-txns-prevout-null",10];return[!0,"valid",0]}isStandard(){var[t]=this.checkStandard();return t}checkStandard(){if(this.version<1||this.version>b.MAX_TX_VERSION)return[!1,"version",0];if(this.getWeight()>=b.MAX_TX_WEIGHT)return[!1,"tx-size",0];for(const t of this.inputs){if(1650<t.script.getSize())return[!1,"scriptsig-size",0];if(!t.script.isPushOnly())return[!1,"scriptsig-not-pushonly",0]}let t=0;for(const e of this.outputs){if(!e.script.isStandard())return[!1,"scriptpubkey",0];if(e.script.isNulldata())t++;else{if(e.script.isMultisig()&&!b.BARE_MULTISIG)return[!1,"bare-multisig",0];if(e.isDust())return[!1,"dust",0]}}return 1<t?[!1,"multi-op-return",0]:[!0,"valid",0]}hasStandardInputs(t){if(!this.isCoinbase())for(const e of this.inputs){const r=t.getOutputFor(e);if(!r)return!1;if(!r.script.isPubkeyhash())if(r.script.isScripthash()){const t=e.script.getRedeem();if(!t)return!1;if(t.getSigops(!0)>b.MAX_P2SH_SIGOPS)return!1}else if(r.script.isUnknown())return!1}return!0}hasStandardWitness(t){if(!this.isCoinbase())for(const i of this.inputs){var e,r=i.witness;if((e=t.getOutputFor(i))&&0!==r.items.length){let t=e.script;if(t.isScripthash()&&!(t=i.script.getRedeem()))return!1;if(!t.isProgram())return!1;if(t.isWitnessPubkeyhash()){if(2!==r.items.length)return!1;if(73<r.items[0].length)return!1;if(65<r.items[1].length)return!1}else if(t.isWitnessScripthash()){if(r.items.length-1>b.MAX_P2WSH_STACK)return!1;for(let t=0;t<r.items.length-1;t++)if(r.items[t].length>b.MAX_P2WSH_PUSH)return!1;if((e=r.items[r.items.length-1]).length>b.MAX_P2WSH_SIZE)return!1;const t=h.fromRaw(e);if(t.isPubkey()){if(r.items.length-1!=1)return!1;if(73<r.items[0].length)return!1}else if(t.isPubkeyhash()){if(i.witness.items.length-1!=2)return!1;if(73<r.items[0].length)return!1;if(65<r.items[1].length)return!1}else{var[e]=t.getMultisig();if(-1!==e){if(r.items.length-1!==e+1)return!1;if(0!==r.items[0].length)return!1;for(let t=1;t<r.items.length-1;t++)if(73<r.items[t].length)return!1}}}else{if(r.items.length>b.MAX_P2WSH_STACK)return!1;for(const t of r.items)if(t.length>b.MAX_P2WSH_PUSH)return!1}}}return!0}checkInputs(t,e){i("number"==typeof e);let r=0;for(var{prevout:s}of this.inputs){var n=t.getEntry(s);if(!n)return[-1,"bad-txns-inputs-missingorspent",0];if(n.coinbase&&0<n.height&&e<n.height+v.COINBASE_MATURITY)return[-1,"bad-txns-premature-spend-of-coinbase",0];if(n=t.getOutput(s),i(n),n.value<0||n.value>v.MAX_MONEY)return[-1,"bad-txns-inputvalues-outofrange",100];if((r+=n.value)<0||r>v.MAX_MONEY)return[-1,"bad-txns-inputvalues-outofrange",100]}var a=this.getOutputValue();return r<a?[-1,"bad-txns-in-belowout",100]:(a=r-a)<0?[-1,"bad-txns-fee-negative",100]:a>v.MAX_MONEY?[-1,"bad-txns-fee-outofrange",100]:[a,"valid",0]}getModifiedSize(t){null==t&&(t=this.getVirtualSize());for(const r of this.inputs){var e=41+Math.min(110,r.script.getSize());e<t&&(t-=e)}return t}getPriority(t,e,r){if(i("number"==typeof e,"Must pass in height."),this.isCoinbase())return 0;null==r&&(r=this.getVirtualSize());let s=0;for(var{prevout:n}of this.inputs){var a=t.getOutput(n);a&&-1!==(n=t.getHeight(n))&&n<=e&&(s+=a.value*(e-n))}return Math.floor(s/r)}getChainValue(t){if(this.isCoinbase())return 0;let e=0;for(var{prevout:r}of this.inputs){var i=t.getOutput(r);i&&-1!==t.getHeight(r)&&(e+=i.value)}return e}isFree(t,e,r){return this.getPriority(t,e,r)>b.FREE_THRESHOLD}getMinFee(t,e){return null==t&&(t=this.getVirtualSize()),b.getMinFee(t,e)}getRoundFee(t,e){return null==t&&(t=this.getVirtualSize()),b.getRoundFee(t,e)}getRate(t,e){return(t=this.getFee(t))<0?0:(null==e&&(e=this.getVirtualSize()),b.getRate(e,t))}getPrevout(){if(this.isCoinbase())return[];const t=Object.create(null);for(const e of this.inputs)t[e.prevout.hash]=!0;return Object.keys(t)}isWatched(t){let e=!1;t.test(this.hash())&&(e=!0);for(let r=0;r<this.outputs.length;r++){const i=this.outputs[r];if(i.script.test(t)){if(t.update===y.flags.ALL){const e=m.fromTX(this,r);t.add(e.toRaw())}else if(t.update===y.flags.PUBKEY_ONLY&&(i.script.isPubkey()||i.script.isMultisig())){const e=m.fromTX(this,r);t.add(e.toRaw())}e=!0}}if(e)return e;for(const e of this.inputs){const r=e.prevout;if(t.test(r.toRaw()))return!0;if(e.script.test(t))return!0}return!1}rhash(){return s.revHex(this.hash("hex"))}rwhash(){return s.revHex(this.witnessHash("hex"))}txid(){return this.rhash()}wtxid(){return this.rwhash()}toInv(){return new g(g.types.TX,this.hash("hex"))}inspect(){return this.format()}format(t,e,r){let i=0,n=0,a=-1,o=null,u=0,h=null;return t&&(n=this.getFee(t),i=this.getRate(t),Number.isSafeInteger(i)||(i=0)),e&&(a=e.height,o=s.revHex(e.hash),u=e.time,h=s.date(u)),null==r&&(r=-1),{hash:this.txid(),witnessHash:this.wtxid(),size:this.getSize(),virtualSize:this.getVirtualSize(),value:c.btc(this.getOutputValue()),fee:c.btc(n),rate:c.btc(i),minFee:c.btc(this.getMinFee()),height:a,block:o,time:u,date:h,index:r,version:this.version,inputs:this.inputs.map(e=>{var r=t?t.getOutputFor(e):null;return e.format(r)}),outputs:this.outputs,locktime:this.locktime}}formatInsight(t,e=0){return null==t&&(t=-1),{hash:this.hash("hex"),rhash:this.txid(),witnessHash:this.wtxid(),txid:function(){return this.rhash},ps:e,index:t,version:this.version,flag:1,locktime:this.locktime,raw:this.toRaw(),inputs:this.inputs.map(t=>t.formatInsight()),outputs:this.outputs.map(t=>t.formatInsight())}}static EncodeSpenderValue(t,e,r,i){const s=Buffer.allocUnsafe(72);return s.write(t,0,"hex"),s.writeUInt32BE(e,32,!0),s.writeUInt32BE(r,36,!0),s.write(i,40,"hex"),s}static DecodeSpenderValue(t){return i(Buffer.isBuffer(t)),i(72===t.length),{txid:t.toString("hex",0,32),inputIndex:t.readUInt32BE(32,!0),blockHeight:t.readUInt32BE(36,!0),blockHash:t.toString("hex",40,32)}}toJSON(){return this.getJSON()}getJSON(t,e,r,i){let n,a,o,c,h,l;return e&&(a=this.getFee(e),n=this.getRate(e),Number.isSafeInteger(n)||(n=0)),r&&(o=r.height,c=s.revHex(r.hash),h=r.time,l=s.date(h)),t=u.get(t),{hash:this.txid(),witnessHash:this.wtxid(),fee:a,rate:n,mtime:s.now(),height:o,block:c,time:h,date:l,index:i,version:this.version,inputs:this.inputs.map(r=>{var i=e?e.getCoinFor(r):null;return r.getJSON(t,i)}),outputs:this.outputs.map(e=>e.getJSON(t)),locktime:this.locktime,hex:this.toRaw().toString("hex")}}fromJSON(t){i(t,"TX data is required."),i(s.isU32(t.version),"Version must be a uint32."),i(Array.isArray(t.inputs),"Inputs must be an array."),i(Array.isArray(t.outputs),"Outputs must be an array."),i(s.isU32(t.locktime),"Locktime must be a uint32."),this.version=t.version;for(const e of t.inputs)this.inputs.push(f.fromJSON(e));for(const e of t.outputs)this.outputs.push(d.fromJSON(e));return this.locktime=t.locktime,this}static fromJSON(e){return(new t).fromJSON(e)}static fromRaw(e,r){return"string"==typeof e&&(e=Buffer.from(e,r)),(new t).fromRaw(e)}static fromReader(e){return(new t).fromReader(e)}fromRaw(t){return this.fromReader(new l(t))}fromReader(t){if(!((e=t).left()<6)&&0===e.data[e.offset+4]&&0!==e.data[e.offset+5])return this.fromWitnessReader(t);t.start(),this.version=t.readU32();var e,r=t.readVarint();for(let e=0;e<r;e++)this.inputs.push(f.fromReader(t));var i=t.readVarint();for(let e=0;e<i;e++)this.outputs.push(d.fromReader(t));return this.locktime=t.readU32(),this.mutable?t.end():(this._raw=t.endData(),this._size=this._raw.length,this._witness=0),this}fromWitnessReader(t){t.start(),this.version=t.readU32(),i(0===t.readU8(),"Non-zero marker.");let e=t.readU8();i(0!==e,"Flags byte is zero.");var r=t.readVarint();for(let e=0;e<r;e++)this.inputs.push(f.fromReader(t));var s=t.readVarint();for(let e=0;e<s;e++)this.outputs.push(d.fromReader(t));let n=0,a=!1;if(1&e){e^=1,n=t.offset;for(const e of this.inputs)e.witness.fromReader(t),0<e.witness.items.length&&(a=!0);n=t.offset-n+2}if(0!==e)throw new Error("Unknown witness flag.");if(0===this.inputs.length&&0!==this.outputs.length)throw new Error("Zero input witness tx.");return this.locktime=t.readU32(),!this.mutable&&a?(this._raw=t.endData(),this._size=this._raw.length,this._witness=n):t.end(),this}frameNormal(){const t=this.getNormalSizes(),e=new p(t.size);return this.writeNormal(e),t.data=e.render(),t}frameWitness(){const t=this.getWitnessSizes(),e=new p(t.size);return this.writeWitness(e),t.data=e.render(),t}writeNormal(t){if(0===this.inputs.length&&0!==this.outputs.length)throw new Error("Cannot serialize zero-input tx.");t.writeU32(this.version),t.writeVarint(this.inputs.length);for(const e of this.inputs)e.toWriter(t);t.writeVarint(this.outputs.length);for(const e of this.outputs)e.toWriter(t);return t.writeU32(this.locktime),t}writeWitness(t){if(0===this.inputs.length&&0!==this.outputs.length)throw new Error("Cannot serialize zero-input tx.");t.writeU32(this.version),t.writeU8(0),t.writeU8(1),t.writeVarint(this.inputs.length);for(const e of this.inputs)e.toWriter(t);t.writeVarint(this.outputs.length);for(const e of this.outputs)e.toWriter(t);var e=t.offset;for(const e of this.inputs)e.witness.toWriter(t);if(e=t.offset-e,t.writeU32(this.locktime),e===this.inputs.length)throw new Error("Cannot serialize empty-witness tx.");return t}getNormalSizes(){let t=0;t=(t+=4)+n.sizeVarint(this.inputs.length);for(const e of this.inputs)t+=e.getSize();t+=n.sizeVarint(this.outputs.length);for(const e of this.outputs)t+=e.getSize();return new S(t+=4,0)}getWitnessSizes(){let t=0,e=0;t+=4,e+=2,t+=n.sizeVarint(this.inputs.length);for(const r of this.inputs)t+=r.getSize(),e+=r.witness.getVarSize();t+=n.sizeVarint(this.outputs.length);for(const e of this.outputs)t+=e.getSize();return new S((t+=4)+e,e)}static isTX(e){return e instanceof t}}},function(t,e,r){"use strict";
|
|
51
51
|
/*!
|
|
52
52
|
* writer.js - buffer writer for vallnet
|
|
53
53
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
54
54
|
*/const i=r(0),s=r(3),n=r(6);function a(){if(!(this instanceof a))return new a;this.ops=[],this.offset=0}function o(t,e,r,i){this.type=t,this.value=e,this.enc=r,this.size=i}a.prototype.render=function(){const t=Buffer.allocUnsafe(this.offset);let e=0;for(const r of this.ops)switch(r.type){case 0:e+=r.value;break;case 1:r.value>>>=0,e=t.writeUInt8(r.value,e,!0);break;case 2:r.value>>>=0,e=t.writeUInt16LE(r.value,e,!0);break;case 3:r.value>>>=0,e=t.writeUInt16BE(r.value,e,!0);break;case 4:r.value>>>=0,e=t.writeUInt32LE(r.value,e,!0);break;case 5:r.value>>>=0,e=t.writeUInt32BE(r.value,e,!0);break;case 6:e=s.writeU64(t,r.value,e);break;case 7:e=s.writeU64BE(t,r.value,e);break;case 8:e=s.writeU64N(t,r.value,e);break;case 9:e=s.writeU64BEN(t,r.value,e);break;case 10:e=t.writeInt8(r.value,e,!0);break;case 11:e=t.writeInt16LE(r.value,e,!0);break;case 12:e=t.writeInt16BE(r.value,e,!0);break;case 13:e=t.writeInt32LE(r.value,e,!0);break;case 14:e=t.writeInt32BE(r.value,e,!0);break;case 15:e=s.writeI64(t,r.value,e);break;case 16:e=s.writeI64BE(t,r.value,e);break;case 17:e=s.writeI64N(t,r.value,e);break;case 18:e=s.writeI64BEN(t,r.value,e);break;case 19:e=t.writeFloatLE(r.value,e,!0);break;case 20:e=t.writeFloatBE(r.value,e,!0);break;case 21:e=t.writeDoubleLE(r.value,e,!0);break;case 22:e=t.writeDoubleBE(r.value,e,!0);break;case 23:e=s.writeVarint(t,r.value,e);break;case 24:e=s.writeVarintN(t,r.value,e);break;case 25:e=s.writeVarint2(t,r.value,e);break;case 26:e=s.writeVarint2N(t,r.value,e);break;case 27:e+=r.value.copy(t,e);break;case 28:e+=t.write(r.value,e,r.enc);break;case 29:e+=n.hash256(t.slice(0,e)).copy(t,e,0,4);break;case 30:t.fill(r.value,e,e+r.size),e+=r.size;break;default:i(!1,"Bad type.")}return i(e===t.length),this.destroy(),t},a.prototype.getSize=function(){return this.offset},a.prototype.seek=function(t){this.offset+=t,this.ops.push(new o(0,t))},a.prototype.destroy=function(){this.ops.length=0,this.offset=0},a.prototype.writeU8=function(t){this.offset+=1,this.ops.push(new o(1,t))},a.prototype.writeU16=function(t){this.offset+=2,this.ops.push(new o(2,t))},a.prototype.writeU16BE=function(t){this.offset+=2,this.ops.push(new o(3,t))},a.prototype.writeU32=function(t){this.offset+=4,this.ops.push(new o(4,t))},a.prototype.writeU32BE=function(t){this.offset+=4,this.ops.push(new o(5,t))},a.prototype.writeU64=function(t){this.offset+=8,this.ops.push(new o(6,t))},a.prototype.writeU64BE=function(t){this.offset+=8,this.ops.push(new o(7,t))},a.prototype.writeU64N=function(t){this.offset+=8,this.ops.push(new o(8,t))},a.prototype.writeU64BEN=function(t){this.offset+=8,this.ops.push(new o(9,t))},a.prototype.writeI8=function(t){this.offset+=1,this.ops.push(new o(10,t))},a.prototype.writeI16=function(t){this.offset+=2,this.ops.push(new o(11,t))},a.prototype.writeI16BE=function(t){this.offset+=2,this.ops.push(new o(12,t))},a.prototype.writeI32=function(t){this.offset+=4,this.ops.push(new o(13,t))},a.prototype.writeI32BE=function(t){this.offset+=4,this.ops.push(new o(14,t))},a.prototype.writeI64=function(t){this.offset+=8,this.ops.push(new o(15,t))},a.prototype.writeI64BE=function(t){this.offset+=8,this.ops.push(new o(16,t))},a.prototype.writeI64N=function(t){this.offset+=8,this.ops.push(new o(17,t))},a.prototype.writeI64BEN=function(t){this.offset+=8,this.ops.push(new o(18,t))},a.prototype.writeFloat=function(t){this.offset+=4,this.ops.push(new o(19,t))},a.prototype.writeFloatBE=function(t){this.offset+=4,this.ops.push(new o(20,t))},a.prototype.writeDouble=function(t){this.offset+=8,this.ops.push(new o(21,t))},a.prototype.writeDoubleBE=function(t){this.offset+=8,this.ops.push(new o(22,t))},a.prototype.writeVarint=function(t){this.offset+=s.sizeVarint(t),this.ops.push(new o(23,t))},a.prototype.writeVarintN=function(t){this.offset+=s.sizeVarintN(t),this.ops.push(new o(24,t))},a.prototype.writeVarint2=function(t){this.offset+=s.sizeVarint2(t),this.ops.push(new o(25,t))},a.prototype.writeVarint2N=function(t){this.offset+=s.sizeVarint2N(t),this.ops.push(new o(26,t))},a.prototype.writeBytes=function(t){0!==t.length&&(this.offset+=t.length,this.ops.push(new o(27,t)))},a.prototype.writeVarBytes=function(t){this.offset+=s.sizeVarint(t.length),this.ops.push(new o(23,t.length)),0!==t.length&&(this.offset+=t.length,this.ops.push(new o(27,t)))},a.prototype.copy=function(t,e,r){i(e<=r),t=t.slice(e,r),this.writeBytes(t)},a.prototype.writeString=function(t,e){0!==t.length&&(this.offset+=Buffer.byteLength(t,e),this.ops.push(new o(28,t,e)))},a.prototype.writeHash=function(t){"string"!=typeof t?(i(32===t.length),this.writeBytes(t)):(i(64===t.length),this.writeString(t,"hex"))},a.prototype.writeVarString=function(t,e){var r;0===t.length?this.ops.push(new o(23,0)):(r=Buffer.byteLength(t,e),this.offset+=s.sizeVarint(r),this.offset+=r,this.ops.push(new o(23,r)),this.ops.push(new o(28,t,e)))},a.prototype.writeNullString=function(t,e){this.writeString(t,e),this.writeU8(0)},a.prototype.writeChecksum=function(){this.offset+=4,this.ops.push(new o(29))},a.prototype.fill=function(t,e){i(0<=e),0!==e&&(this.offset+=e,this.ops.push(new o(30,t,null,e)))},t.exports=a},function(t,e,r){"use strict";
|
|
55
55
|
/*!
|
|
56
|
-
*
|
|
56
|
+
* common.js - common script functions for vallnet
|
|
57
57
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
58
58
|
* https://github.com/bookmansoft/gamegold
|
|
59
|
-
*/const i=r(
|
|
59
|
+
*/const i=r(0),s=r(1),n=r(28),a=r(101);r=r(5).ContractType,e.opcodes={OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_LEFT:128,OP_RIGHT:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_NOP1:176,OP_CHECKLOCKTIMEVERIFY:177,OP_CHECKSEQUENCEVERIFY:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_PROPCREATE:192,OP_PROPEXCHANGE:193,OP_PROPSALE:194,OP_CPREGISTER:195,OP_CPCHANGE:196,OP_HTLCSUGGEST:197,OP_HTLCASSENT:198,OP_PROMISE:199,OP_COINBASE:200,OP_COMMENT:201,OP_PROPMAX:207,OP_SMALLDATA:249,OP_SMALLINTEGER:250,OP_PUBKEYS:251,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255},e.opcodesByVal=s.reverse(e.opcodes),e.small=[Buffer.from([129]),Buffer.from([]),Buffer.from([1]),Buffer.from([2]),Buffer.from([3]),Buffer.from([4]),Buffer.from([5]),Buffer.from([6]),Buffer.from([7]),Buffer.from([8]),Buffer.from([9]),Buffer.from([10]),Buffer.from([11]),Buffer.from([12]),Buffer.from([13]),Buffer.from([14]),Buffer.from([15]),Buffer.from([16])],e.flags={VERIFY_NONE:0,VERIFY_P2SH:1,VERIFY_STRICTENC:2,VERIFY_DERSIG:4,VERIFY_LOW_S:8,VERIFY_NULLDUMMY:16,VERIFY_SIGPUSHONLY:32,VERIFY_MINIMALDATA:64,VERIFY_DISCOURAGE_UPGRADABLE_NOPS:128,VERIFY_CLEANSTACK:256,VERIFY_CHECKLOCKTIMEVERIFY:512,VERIFY_CHECKSEQUENCEVERIFY:1024,VERIFY_WITNESS:2048,VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM:4096,VERIFY_MINIMALIF:8192,VERIFY_NULLFAIL:16384,VERIFY_WITNESS_PUBKEYTYPE:32768,VERIFY_MAST:65536},e.flags.MANDATORY_VERIFY_FLAGS=e.flags.VERIFY_P2SH,e.flags.STANDARD_VERIFY_FLAGS=0|e.flags.MANDATORY_VERIFY_FLAGS|e.flags.VERIFY_DERSIG|e.flags.VERIFY_STRICTENC|e.flags.VERIFY_MINIMALDATA|e.flags.VERIFY_NULLDUMMY|e.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS|e.flags.VERIFY_CLEANSTACK|e.flags.VERIFY_MINIMALIF|e.flags.VERIFY_NULLFAIL|e.flags.VERIFY_CHECKLOCKTIMEVERIFY|e.flags.VERIFY_CHECKSEQUENCEVERIFY|e.flags.VERIFY_LOW_S|e.flags.VERIFY_WITNESS|e.flags.VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM|e.flags.VERIFY_WITNESS_PUBKEYTYPE,e.flags.ONLY_STANDARD_VERIFY_FLAGS=e.flags.STANDARD_VERIFY_FLAGS&~e.flags.MANDATORY_VERIFY_FLAGS,e.hashType={ALL:1,NONE:2,SINGLE:3,ZERO:4,ANYONECANPAY:128},e.hashTypeByVal=s.reverse(e.hashType),e.types={NONSTANDARD:0,PUBKEY:1,PUBKEYHASH:2,SCRIPTHASH:3,MULTISIG:4,NULLDATA:5,WITNESS:9,PROPEXTEND:114,WITNESSMALFORMED:128,WITNESSSCRIPTHASH:129,WITNESSPUBKEYHASH:130,WITNESSMASTHASH:131},e.typesByVal=s.reverse(e.types),e.isHashType=function(t){return i(Buffer.isBuffer(t)),0!==t.length&&(t=t[t.length-1]&~e.hashType.ANYONECANPAY)>=e.hashType.ALL&&t<=e.hashType.ZERO},e.isLowDER=function(t){return!!e.isSignatureEncoding(t)&&n.isLowS(t.slice(0,-1))},e.isKeyEncoding=function(t){if(i(Buffer.isBuffer(t)),t.length<33)return!1;if(4===t[0]){if(65!==t.length)return!1}else{if(2!==t[0]&&3!==t[0])return!1;if(33!==t.length)return!1}return!0},e.isCompressedEncoding=function(t){return i(Buffer.isBuffer(t)),33===t.length&&(2===t[0]||3===t[0])},e.isSignatureEncoding=function(t){var e,r;return i(Buffer.isBuffer(t)),!(t.length<9||73<t.length||48!==t[0]||t[1]!==t.length-3||5+(e=t[3])>=t.length||e+(r=t[5+e])+7!==t.length||2!==t[2]||0===e||128&t[4]||1<e&&0===t[4]&&!(128&t[5])||2!==t[e+4]||0===r||128&t[e+6]||1<r&&0===t[e+6]&&!(128&t[e+7]))},e.toASM=function(t,r){if(t.length<=4){return a.decode(t).toString(10)}if(r&&e.isSignatureEncoding(t)){r=t[t.length-1];let i=e.hashTypeByVal[31&r]||"";return i&&(r&e.hashType.ANYONECANPAY&&(i+="|ANYONECANPAY"),i=`[${i}]`),t.slice(0,-1).toString("hex")+i}return t.toString("hex")},e.outputLockType={NOCHECK:"no",CHECKABSOLUTEBLOCK:"clb",CHECKABSOLUTETIME:"clt",CHECKRELATIVEBLOCK:"csb",CHECKRELATIVETIME:"cst"},e.nestingCodes=[e.opcodes.OP_PROPCREATE,e.opcodes.OP_PROPEXCHANGE,e.opcodes.OP_HTLCSUGGEST,e.opcodes.OP_HTLCASSENT,e.opcodes.OP_COMMENT],e.espicalCodes=[e.opcodes.OP_RETURN,e.opcodes.OP_CPREGISTER,e.opcodes.OP_CPCHANGE,e.opcodes.OP_PROMISE,e.opcodes.OP_COINBASE],e.unspendableCodes=[e.opcodes.OP_RETURN,e.opcodes.OP_CPREGISTER,e.opcodes.OP_CPCHANGE,e.opcodes.OP_PROMISE].concat(e.nestingCodes);let o={},c=(o[r.propCreate]=e.opcodes.OP_PROPCREATE,o[r.propExchange]=e.opcodes.OP_PROPEXCHANGE,o[r.propSale]=e.opcodes.OP_PROPSALE,o[r.coinbase]=e.opcodes.OP_COINBASE,o[r.cpRegister]=e.opcodes.OP_CPREGISTER,o[r.cpChange]=e.opcodes.OP_CPCHANGE,o[r.contractPromise]=e.opcodes.OP_PROMISE,o[r.htlcSuggest]=e.opcodes.OP_HTLCSUGGEST,o[r.htlcAssent]=e.opcodes.OP_HTLCASSENT,o[r.comment]=e.opcodes.OP_COMMENT,e.OperCodeFromType=o,{});c[e.opcodes.OP_PROPCREATE]=r.propCreate,c[e.opcodes.OP_PROPEXCHANGE]=r.propExchange,c[e.opcodes.OP_PROPSALE]=r.propSale,c[e.opcodes.OP_COINBASE]=r.coinbase,c[e.opcodes.OP_CPREGISTER]=r.cpRegister,c[e.opcodes.OP_CPCHANGE]=r.cpChange,c[e.opcodes.OP_PROMISE]=r.contractPromise,c[e.opcodes.OP_HTLCASSENT]=r.htlcAssent,c[e.opcodes.OP_COMMENT]=r.comment,e.ContractTypeFromCode=c},function(t,e,r){"use strict";
|
|
60
60
|
/*!
|
|
61
|
-
*
|
|
61
|
+
* Packet.js - worker packets for vallnet
|
|
62
62
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
63
63
|
* https://github.com/bookmansoft/gamegold
|
|
64
|
-
*/const i=r(0),s=r(1),n=r(28),a=r(101);r=r(5).ContractType,e.opcodes={OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_LEFT:128,OP_RIGHT:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_NOP1:176,OP_CHECKLOCKTIMEVERIFY:177,OP_CHECKSEQUENCEVERIFY:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_PROPCREATE:192,OP_PROPEXCHANGE:193,OP_PROPSALE:194,OP_CPREGISTER:195,OP_CPCHANGE:196,OP_HTLCSUGGEST:197,OP_HTLCASSENT:198,OP_PROMISE:199,OP_COINBASE:200,OP_COMMENT:201,OP_PROPMAX:207,OP_SMALLDATA:249,OP_SMALLINTEGER:250,OP_PUBKEYS:251,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255},e.opcodesByVal=s.reverse(e.opcodes),e.small=[Buffer.from([129]),Buffer.from([]),Buffer.from([1]),Buffer.from([2]),Buffer.from([3]),Buffer.from([4]),Buffer.from([5]),Buffer.from([6]),Buffer.from([7]),Buffer.from([8]),Buffer.from([9]),Buffer.from([10]),Buffer.from([11]),Buffer.from([12]),Buffer.from([13]),Buffer.from([14]),Buffer.from([15]),Buffer.from([16])],e.flags={VERIFY_NONE:0,VERIFY_P2SH:1,VERIFY_STRICTENC:2,VERIFY_DERSIG:4,VERIFY_LOW_S:8,VERIFY_NULLDUMMY:16,VERIFY_SIGPUSHONLY:32,VERIFY_MINIMALDATA:64,VERIFY_DISCOURAGE_UPGRADABLE_NOPS:128,VERIFY_CLEANSTACK:256,VERIFY_CHECKLOCKTIMEVERIFY:512,VERIFY_CHECKSEQUENCEVERIFY:1024,VERIFY_WITNESS:2048,VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM:4096,VERIFY_MINIMALIF:8192,VERIFY_NULLFAIL:16384,VERIFY_WITNESS_PUBKEYTYPE:32768,VERIFY_MAST:65536},e.flags.MANDATORY_VERIFY_FLAGS=e.flags.VERIFY_P2SH,e.flags.STANDARD_VERIFY_FLAGS=0|e.flags.MANDATORY_VERIFY_FLAGS|e.flags.VERIFY_DERSIG|e.flags.VERIFY_STRICTENC|e.flags.VERIFY_MINIMALDATA|e.flags.VERIFY_NULLDUMMY|e.flags.VERIFY_DISCOURAGE_UPGRADABLE_NOPS|e.flags.VERIFY_CLEANSTACK|e.flags.VERIFY_MINIMALIF|e.flags.VERIFY_NULLFAIL|e.flags.VERIFY_CHECKLOCKTIMEVERIFY|e.flags.VERIFY_CHECKSEQUENCEVERIFY|e.flags.VERIFY_LOW_S|e.flags.VERIFY_WITNESS|e.flags.VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM|e.flags.VERIFY_WITNESS_PUBKEYTYPE,e.flags.ONLY_STANDARD_VERIFY_FLAGS=e.flags.STANDARD_VERIFY_FLAGS&~e.flags.MANDATORY_VERIFY_FLAGS,e.hashType={ALL:1,NONE:2,SINGLE:3,ZERO:4,ANYONECANPAY:128},e.hashTypeByVal=s.reverse(e.hashType),e.types={NONSTANDARD:0,PUBKEY:1,PUBKEYHASH:2,SCRIPTHASH:3,MULTISIG:4,NULLDATA:5,WITNESS:9,PROPEXTEND:114,WITNESSMALFORMED:128,WITNESSSCRIPTHASH:129,WITNESSPUBKEYHASH:130,WITNESSMASTHASH:131},e.typesByVal=s.reverse(e.types),e.isHashType=function(t){return i(Buffer.isBuffer(t)),0!==t.length&&(t=t[t.length-1]&~e.hashType.ANYONECANPAY)>=e.hashType.ALL&&t<=e.hashType.ZERO},e.isLowDER=function(t){return!!e.isSignatureEncoding(t)&&n.isLowS(t.slice(0,-1))},e.isKeyEncoding=function(t){if(i(Buffer.isBuffer(t)),t.length<33)return!1;if(4===t[0]){if(65!==t.length)return!1}else{if(2!==t[0]&&3!==t[0])return!1;if(33!==t.length)return!1}return!0},e.isCompressedEncoding=function(t){return i(Buffer.isBuffer(t)),33===t.length&&(2===t[0]||3===t[0])},e.isSignatureEncoding=function(t){var e,r;return i(Buffer.isBuffer(t)),!(t.length<9||73<t.length||48!==t[0]||t[1]!==t.length-3||5+(e=t[3])>=t.length||e+(r=t[5+e])+7!==t.length||2!==t[2]||0===e||128&t[4]||1<e&&0===t[4]&&!(128&t[5])||2!==t[e+4]||0===r||128&t[e+6]||1<r&&0===t[e+6]&&!(128&t[e+7]))},e.toASM=function(t,r){if(t.length<=4){return a.decode(t).toString(10)}if(r&&e.isSignatureEncoding(t)){r=t[t.length-1];let i=e.hashTypeByVal[31&r]||"";return i&&(r&e.hashType.ANYONECANPAY&&(i+="|ANYONECANPAY"),i=`[${i}]`),t.slice(0,-1).toString("hex")+i}return t.toString("hex")},e.outputLockType={NOCHECK:"no",CHECKABSOLUTEBLOCK:"clb",CHECKABSOLUTETIME:"clt",CHECKRELATIVEBLOCK:"csb",CHECKRELATIVETIME:"cst"},e.nestingCodes=[e.opcodes.OP_PROPCREATE,e.opcodes.OP_PROPEXCHANGE,e.opcodes.OP_HTLCSUGGEST,e.opcodes.OP_HTLCASSENT,e.opcodes.OP_COMMENT],e.espicalCodes=[e.opcodes.OP_RETURN,e.opcodes.OP_CPREGISTER,e.opcodes.OP_CPCHANGE,e.opcodes.OP_PROMISE,e.opcodes.OP_COINBASE],e.unspendableCodes=[e.opcodes.OP_RETURN,e.opcodes.OP_CPREGISTER,e.opcodes.OP_CPCHANGE,e.opcodes.OP_PROMISE].concat(e.nestingCodes);let o={},c=(o[r.propCreate]=e.opcodes.OP_PROPCREATE,o[r.propExchange]=e.opcodes.OP_PROPEXCHANGE,o[r.propSale]=e.opcodes.OP_PROPSALE,o[r.coinbase]=e.opcodes.OP_COINBASE,o[r.cpRegister]=e.opcodes.OP_CPREGISTER,o[r.cpChange]=e.opcodes.OP_CPCHANGE,o[r.contractPromise]=e.opcodes.OP_PROMISE,o[r.htlcSuggest]=e.opcodes.OP_HTLCSUGGEST,o[r.htlcAssent]=e.opcodes.OP_HTLCASSENT,o[r.comment]=e.opcodes.OP_COMMENT,e.OperCodeFromType=o,{});c[e.opcodes.OP_PROPCREATE]=r.propCreate,c[e.opcodes.OP_PROPEXCHANGE]=r.propExchange,c[e.opcodes.OP_PROPSALE]=r.propSale,c[e.opcodes.OP_COINBASE]=r.coinbase,c[e.opcodes.OP_CPREGISTER]=r.cpRegister,c[e.opcodes.OP_CPCHANGE]=r.cpChange,c[e.opcodes.OP_PROMISE]=r.contractPromise,c[e.opcodes.OP_HTLCASSENT]=r.htlcAssent,c[e.opcodes.OP_COMMENT]=r.comment,e.ContractTypeFromCode=c},function(t,e,r){t.exports=m;var i,s=r(10),n=r(31),a=r(8),o=r(103),c=r(56),u=r(182).DiffieHellman,h=(t=r(51),r(25)),l=r(24);try{i=r(283)}catch(t){}var p=t.InvalidAlgorithmError,f=t.KeyParseError,d={};function m(t){s.object(t,"options"),s.arrayOfObject(t.parts,"options.parts"),s.string(t.type,"options.type"),s.optionalString(t.comment,"options.comment");var e=n.info[t.type];if("object"!=typeof e)throw new p(t.type);for(var r,i={},a=0;a<t.parts.length;++a){var o=t.parts[a];i[o.name]=o}this.type=t.type,this.parts=t.parts,this.part=i,this.comment=void 0,this.source=t.source,this._rfc4253Cache=t._rfc4253Cache,this._hashCache={},this.curve=void 0,"ecdsa"===this.type?(r=this.part.curve.data.toString(),this.curve=r,r=n.curves[r].size):"ed25519"===this.type||"curve25519"===this.type?(r=256,this.curve="curve25519"):r=8*(r=(e=this.part[e.sizePart]).data.length)-h.countZeros(e.data),this.size=r}d.auto=r(284),d.pem=r(67),d.pkcs1=r(183),d.pkcs8=r(106),d.rfc4253=r(68),d.ssh=r(286),d["ssh-private"]=r(137),d.openssh=d["ssh-private"],d.dnssec=r(184),d.putty=r(185),d.ppk=d.putty,m.formats=d,m.prototype.toBuffer=function(t,e){return s.string(t=void 0===t?"ssh":t,"format"),s.object(d[t],"formats[format]"),s.optionalObject(e,"options"),"rfc4253"===t?(void 0===this._rfc4253Cache&&(this._rfc4253Cache=d.rfc4253.write(this)),this._rfc4253Cache):d[t].write(this,e)},m.prototype.toString=function(t,e){return this.toBuffer(t,e).toString()},m.prototype.hash=function(t,e){if(s.string(t,"algorithm"),s.optionalString(e,"type"),void 0===e&&(e="ssh"),t=t.toLowerCase(),void 0===n.hashAlgs[t])throw new p(t);var r,i=t+"||"+e;if(this._hashCache[i])return this._hashCache[i];if("ssh"===e)r=this.toBuffer("rfc4253");else{if("spki"!==e)throw new Error("Hash type "+e+" not supported");r=d.pkcs8.pkcs8ToBuffer(this)}return e=a.createHash(t).update(r).digest(),this._hashCache[i]=e},m.prototype.fingerprint=function(t,e){return void 0===e&&(e="ssh"),s.string(t=void 0===t?"sha256":t,"algorithm"),s.string(e,"type"),t={type:"key",hash:this.hash(t,e),algorithm:t,hashType:e},new o(t)},m.prototype.defaultHashAlgorithm=function(){var t="sha1";return"rsa"===this.type&&(t="sha256"),"dsa"===this.type&&1024<this.size&&(t="sha256"),"ed25519"===this.type&&(t="sha512"),"ecdsa"===this.type?this.size<=256?"sha256":this.size<=384?"sha384":"sha512":t},m.prototype.createVerify=function(t){if(void 0===t&&(t=this.defaultHashAlgorithm()),s.string(t,"hash algorithm"),"ed25519"===this.type&&void 0!==i)return new i.Verifier(this,t);if("curve25519"===this.type)throw new Error("Curve25519 keys are not suitable for signing or verification");var e,r,n;try{r=t.toUpperCase(),e=a.createVerify(r)}catch(e){n=e}(void 0===e||n instanceof Error&&n.message.match(/Unknown message digest/))&&(r="RSA-",r+=t.toUpperCase(),e=a.createVerify(r)),s.ok(e,"failed to create verifier");var o=e.verify.bind(e),u=this.toBuffer("pkcs8"),h=this.curve,l=this;return e.verify=function(e,r){if(c.isSignature(e,[2,0]))return e.type===l.type&&(!e.hashAlgorithm||e.hashAlgorithm===t)&&(!e.curve||"ecdsa"!==l.type||e.curve===h)&&o(u,e.toBuffer("asn1"));if("string"==typeof e||Buffer.isBuffer(e))return o(u,e,r);throw c.isSignature(e,[1,0])?new Error("signature was created by too old a version of sshpk and cannot be verified"):new TypeError("signature must be a string, Buffer, or Signature object")},e},m.prototype.createDH=m.prototype.createDiffieHellman=function(){if("rsa"===this.type)throw new Error("RSA keys do not support Diffie-Hellman");return new u(this)},m.parse=function(t,e,r){"string"!=typeof t&&s.buffer(t,"data"),s.string(e=void 0===e?"auto":e,"format"),s.optionalObject(r="string"==typeof r?{filename:r}:r,"options"),s.optionalString((r=void 0===r?{}:r).filename,"options.filename"),void 0===r.filename&&(r.filename="(unnamed)"),s.object(d[e],"formats[format]");try{var i=d[e].read(t,r);return(i=i instanceof l?i.toPublic():i).comment||(i.comment=r.filename),i}catch(t){if("KeyEncryptedError"===t.name)throw t;throw new f(r.filename,e,t)}},m.isKey=function(t,e){return h.isCompatible(t,m,e)},m.prototype._sshpkApiVersion=[1,7],m._oldVersionDetect=function(t){return s.func(t.toBuffer),s.func(t.fingerprint),t.createDH?[1,4]:t.defaultHashAlgorithm?[1,3]:t.formats.auto?[1,2]:t.formats.pkcs1?[1,1]:[1,0]}},function(t,e,r){t.exports=v;var i=r(10),s=r(14).Buffer,n=r(31),a=r(8),o=(r(103),r(56)),c=(t=r(51),r(9)),u=r(25),h=r(182),l=h.generateECDSA,p=h.generateED25519,f=r(283),d=r(105),m=r(23),g=(t.InvalidAlgorithmError,t.KeyParseError),y=(t.KeyEncryptedError,{});function v(t){i.object(t,"options"),m.call(this,t),this._pubCache=void 0}y.auto=r(284),y.pem=r(67),y.pkcs1=r(183),y.pkcs8=r(106),y.rfc4253=r(68),y["ssh-private"]=r(137),y.openssh=y["ssh-private"],y.ssh=y["ssh-private"],y.dnssec=r(184),y.putty=r(185),c.inherits(v,m),v.formats=y,v.prototype.toBuffer=function(t,e){return i.string(t=void 0===t?"pkcs1":t,"format"),i.object(y[t],"formats[format]"),i.optionalObject(e,"options"),y[t].write(this,e)},v.prototype.hash=function(t,e){return this.toPublic().hash(t,e)},v.prototype.fingerprint=function(t,e){return this.toPublic().fingerprint(t,e)},v.prototype.toPublic=function(){if(!this._pubCache){for(var t=n.info[this.type],e=[],r=0;r<t.parts.length;++r){var i=t.parts[r];e.push(this.part[i])}this._pubCache=new m({type:this.type,source:this,parts:e}),this.comment&&(this._pubCache.comment=this.comment)}return this._pubCache},v.prototype.derive=function(t){var e,r,n;if(i.string(t,"type"),"ed25519"===this.type&&"curve25519"===t)return 0===(e=this.part.k.data)[0]&&(e=e.slice(1)),n=d.box.keyPair.fromSecretKey(new Uint8Array(e)),r=s.from(n.publicKey),new v({type:"curve25519",parts:[{name:"A",data:u.mpNormalize(r)},{name:"k",data:u.mpNormalize(e)}]});if("curve25519"===this.type&&"ed25519"===t)return 0===(e=this.part.k.data)[0]&&(e=e.slice(1)),n=d.sign.keyPair.fromSeed(new Uint8Array(e)),r=s.from(n.publicKey),new v({type:"ed25519",parts:[{name:"A",data:u.mpNormalize(r)},{name:"k",data:u.mpNormalize(e)}]});throw new Error("Key derivation not supported from "+this.type+" to "+t)},v.prototype.createVerify=function(t){return this.toPublic().createVerify(t)},v.prototype.createSign=function(t){if(void 0===t&&(t=this.defaultHashAlgorithm()),i.string(t,"hash algorithm"),"ed25519"===this.type&&void 0!==f)return new f.Signer(this,t);if("curve25519"===this.type)throw new Error("Curve25519 keys are not suitable for signing or verification");var e,r,n;try{r=t.toUpperCase(),e=a.createSign(r)}catch(e){n=e}(void 0===e||n instanceof Error&&n.message.match(/Unknown message digest/))&&(r="RSA-",r+=t.toUpperCase(),e=a.createSign(r)),i.ok(e,"failed to create verifier");var c=e.sign.bind(e),u=this.toBuffer("pkcs1"),h=this.type,l=this.curve;return e.sign=function(){var e=c(u);return"string"==typeof e&&(e=s.from(e,"binary")),(e=o.parse(e,h,"asn1")).hashAlgorithm=t,e.curve=l,e},e},v.parse=function(t,e,r){"string"!=typeof t&&i.buffer(t,"data"),i.string(e=void 0===e?"auto":e,"format"),i.optionalObject(r="string"==typeof r?{filename:r}:r,"options"),i.optionalString((r=void 0===r?{}:r).filename,"options.filename"),void 0===r.filename&&(r.filename="(unnamed)"),i.object(y[e],"formats[format]");try{var s=y[e].read(t,r);return i.ok(s instanceof v,"key is not a private key"),s.comment||(s.comment=r.filename),s}catch(t){if("KeyEncryptedError"===t.name)throw t;throw new g(r.filename,e,t)}},v.isPrivateKey=function(t,e){return u.isCompatible(t,v,e)},v.generate=function(t,e){switch(i.object(e=void 0===e?{}:e,"options"),t){case"ecdsa":return void 0===e.curve&&(e.curve="nistp256"),i.string(e.curve,"options.curve"),l(e.curve);case"ed25519":return p();default:throw new Error('Key generation not supported with key type "'+t+'"')}},v.prototype._sshpkApiVersion=[1,6],v._oldVersionDetect=function(t){return i.func(t.toPublic),i.func(t.createSign),t.derive?[1,3]:t.defaultHashAlgorithm?[1,2]:t.formats.auto?[1,1]:[1,0]}},function(t,e,r){t.exports={bufferSplit:function(t,e){i.buffer(t),i.string(e);for(var r=[],s=0,n=0,a=0;a<t.length;++a){var o;t[a]===e.charCodeAt(n)?++n:n=t[a]===e.charCodeAt(0)?1:0,n>=e.length&&(o=a+1,r.push(t.slice(s,o-n)),s=o,n=0)}return s<=t.length&&r.push(t.slice(s,t.length)),r},addRSAMissing:function(t){i.object(t),d(t,n,[1,1]);var e,r,s=new l(t.part.d.data);t.part.dmodp||(e=new l(t.part.p.data),e=v(e=s.mod(e.subtract(1))),t.part.dmodp={name:"dmodp",data:e},t.parts.push(t.part.dmodp)),t.part.dmodq||(r=new l(t.part.q.data),e=v(s=s.mod(r.subtract(1))),t.part.dmodq={name:"dmodq",data:e},t.parts.push(t.part.dmodq))},calculateDSAPublic:function(t,e,r){return i.buffer(t),i.buffer(e),i.buffer(r),t=new l(t),e=new l(e),r=new l(r),v(t.modPow(r,e))},calculateED25519Public:function(t){return i.buffer(t),t=p.sign.keyPair.fromSeed(new Uint8Array(t)),s.from(t.publicKey)},calculateX25519Public:function(t){return i.buffer(t),t=p.box.keyPair.fromSeed(new Uint8Array(t)),s.from(t.publicKey)},mpNormalize:y,mpDenormalize:function(t){for(i.buffer(t);1<t.length&&0===t[0];)t=t.slice(1);return t},ecNormalize:function(t,e){if(i.buffer(t),0===t[0]&&4===t[1])return e?t:t.slice(1);if(4!==t[0]){for(;0===t[0];)t=t.slice(1);if(2===t[0]||3===t[0])throw new Error("Compressed elliptic curve points are not supported");if(4!==t[0])throw new Error("Not a valid elliptic curve point")}return e?((e=s.alloc(t.length+1))[0]=0,t.copy(e,1),e):t},countZeros:function(t){for(var e=0,r=8;e<t.length;){var i=1<<r;if((t[e]&i)==i)break;--r<0&&(e++,r=8)}return 8*e+(8-r)-1},assertCompatible:d,isCompatible:function(t,e,r){if(null===t||"object"!=typeof t)return!1;if(void 0===r&&(r=e.prototype._sshpkApiVersion),t instanceof e&&e.prototype._sshpkApiVersion[0]==r[0])return!0;for(var i=Object.getPrototypeOf(t),s=0;i.constructor.name!==e.name;)if(!(i=Object.getPrototypeOf(i))||++s>f)return!1;if(i.constructor.name!==e.name)return!1;var n=i._sshpkApiVersion;return void 0===n&&(n=e._oldVersionDetect(t)),!(n[0]!=r[0]||n[1]<r[1])},opensslKeyDeriv:function(t,e,r,n){i.buffer(e,"salt"),i.buffer(r,"passphrase"),i.number(n,"iteration count");for(var a,c,u,h=m[t],l=(i.object(h,"supported cipher"),e=e.slice(0,g),s.alloc(0));l.length<h.key+h.iv;){u=[],c&&u.push(c),u.push(r),u.push(e),a=s.concat(u);for(var p=0;p<n;++p)a=o.createHash("md5").update(a).digest();l=s.concat([l,a]),c=a}return{key:l.slice(0,h.key),iv:l.slice(h.key,h.key+h.iv)}},opensshCipherInfo:function(t){var e={};switch(t){case"3des-cbc":e.keySize=24,e.blockSize=8,e.opensslName="des-ede3-cbc";break;case"blowfish-cbc":e.keySize=16,e.blockSize=8,e.opensslName="bf-cbc";break;case"aes128-cbc":case"aes128-ctr":case"aes128-gcm@openssh.com":e.keySize=16,e.blockSize=16,e.opensslName="aes-128-"+t.slice(7,10);break;case"aes192-cbc":case"aes192-ctr":case"aes192-gcm@openssh.com":e.keySize=24,e.blockSize=16,e.opensslName="aes-192-"+t.slice(7,10);break;case"aes256-cbc":case"aes256-ctr":case"aes256-gcm@openssh.com":e.keySize=32,e.blockSize=16,e.opensslName="aes-256-"+t.slice(7,10);break;default:throw new Error('Unsupported openssl cipher "'+t+'"')}return e},publicFromPrivateECDSA:function(t,e){i.string(t,"curveName"),i.buffer(e);var r=c.curves[t],n=new l(r.p),o=new l(r.a),u=new l(r.b);o=(n=new h.ECCurveFp(n,o,u)).decodePointHex(r.G.toString("hex")),u=new l(y(e)),r=o.multiply(u);return(e=(r=s.from(n.encodePointHex(r),"hex"),[])).push({name:"curve",data:s.from(t)}),e.push({name:"Q",data:r}),new a({type:"ecdsa",curve:n,parts:e})},zeroPadToLength:function(t,e){for(i.buffer(t),i.number(e);t.length>e;)i.equal(t[0],0),t=t.slice(1);for(;t.length<e;){var r=s.alloc(t.length+1);r[0]=0,t.copy(r,1),t=r}return t},writeBitString:function(t,e,r){void 0===r&&(r=u.Ber.BitString);var i=s.alloc(e.length+1);i[0]=0,e.copy(i,1),t.writeBuffer(i,r)},readBitString:function(t,e){return void 0===e&&(e=u.Ber.BitString),t=t.readString(e,!0),i.strictEqual(t[0],0,"bit strings with unused bits are not supported (0x"+t[0].toString(16)+")"),t.slice(1)},pbkdf2:function(t,e,r,i,n){for(var a=s.alloc(e.length+4),c=(e.copy(a),0),u=[],h=1;c<i;){var l=function(e){a.writeUInt32BE(e,a.length-4);for(var i=o.createHmac(t,n),s=(i.update(a),i.digest()),c=s,u=1;u++<r;){(i=o.createHmac(t,n)).update(c),c=i.digest();for(var h=0;h<s.length;++h)s[h]^=c[h]}return s}(h++);c+=l.length,u.push(l)}return s.concat(u).slice(0,i)}};var i=r(10),s=r(14).Buffer,n=r(24),a=r(23),o=r(8),c=r(31),u=r(57),h=r(136),l=r(104).BigInteger,p=r(105),f=3;function d(t,e,r,s){if(i.ok(t,(s=void 0===s?"object":s)+" must not be null"),i.object(t,s+" must be an object"),void 0===r&&(r=e.prototype._sshpkApiVersion),!(t instanceof e&&e.prototype._sshpkApiVersion[0]==r[0])){for(var n=Object.getPrototypeOf(t),a=0;n.constructor.name!==e.name;)n=Object.getPrototypeOf(n),i.ok(n&&++a<=f,s+" must be a "+e.name+" instance");i.strictEqual(n.constructor.name,e.name,s+" must be a "+e.name+" instance");var o=n._sshpkApiVersion;void 0===o&&(o=e._oldVersionDetect(t)),i.ok(o[0]==r[0]&&o[1]>=r[1],s+" must be compatible with "+e.name+" klass version "+r[0]+"."+r[1])}}var m={"des-ede3-cbc":{key:24,iv:8},"aes-128-cbc":{key:16,iv:16},"aes-256-cbc":{key:32,iv:16}},g=8;function y(t){for(i.buffer(t);1<t.length&&0===t[0]&&0==(128&t[1]);)t=t.slice(1);var e;return 128==(128&t[0])&&((e=s.alloc(t.length+1))[0]=0,t.copy(e,1),t=e),t}function v(t){return y(s.from(t.toByteArray()))}},function(t,e,r){"use strict";
|
|
64
|
+
*/const i=r(156);r(344);class s{constructor(){this.id=++s.id>>>0,this.cmd=-1}getSize(){throw new Error("Abstract method.")}toWriter(){throw new Error("Abstract method.")}fromRaw(){throw new Error("Abstract method.")}static fromRaw(){throw new Error("Abstract method.")}workerHandle(t){t.resolveJob(this.id,this)}masterHandle(t){let e=i.execute(this);e.id=this.id,t.send(e)}jobsHandle(t){throw new Error(`Unknown command: "${this.cmd}".`)}}s.id=0,t.exports=s},function(t,e,r){t.exports=m;var i,s=r(10),n=r(31),a=r(8),o=r(103),c=r(56),u=r(182).DiffieHellman,h=(t=r(51),r(25)),l=r(24);try{i=r(283)}catch(t){}var p=t.InvalidAlgorithmError,f=t.KeyParseError,d={};function m(t){s.object(t,"options"),s.arrayOfObject(t.parts,"options.parts"),s.string(t.type,"options.type"),s.optionalString(t.comment,"options.comment");var e=n.info[t.type];if("object"!=typeof e)throw new p(t.type);for(var r,i={},a=0;a<t.parts.length;++a){var o=t.parts[a];i[o.name]=o}this.type=t.type,this.parts=t.parts,this.part=i,this.comment=void 0,this.source=t.source,this._rfc4253Cache=t._rfc4253Cache,this._hashCache={},this.curve=void 0,"ecdsa"===this.type?(r=this.part.curve.data.toString(),this.curve=r,r=n.curves[r].size):"ed25519"===this.type||"curve25519"===this.type?(r=256,this.curve="curve25519"):r=8*(r=(e=this.part[e.sizePart]).data.length)-h.countZeros(e.data),this.size=r}d.auto=r(284),d.pem=r(67),d.pkcs1=r(183),d.pkcs8=r(106),d.rfc4253=r(68),d.ssh=r(286),d["ssh-private"]=r(137),d.openssh=d["ssh-private"],d.dnssec=r(184),d.putty=r(185),d.ppk=d.putty,m.formats=d,m.prototype.toBuffer=function(t,e){return s.string(t=void 0===t?"ssh":t,"format"),s.object(d[t],"formats[format]"),s.optionalObject(e,"options"),"rfc4253"===t?(void 0===this._rfc4253Cache&&(this._rfc4253Cache=d.rfc4253.write(this)),this._rfc4253Cache):d[t].write(this,e)},m.prototype.toString=function(t,e){return this.toBuffer(t,e).toString()},m.prototype.hash=function(t,e){if(s.string(t,"algorithm"),s.optionalString(e,"type"),void 0===e&&(e="ssh"),t=t.toLowerCase(),void 0===n.hashAlgs[t])throw new p(t);var r,i=t+"||"+e;if(this._hashCache[i])return this._hashCache[i];if("ssh"===e)r=this.toBuffer("rfc4253");else{if("spki"!==e)throw new Error("Hash type "+e+" not supported");r=d.pkcs8.pkcs8ToBuffer(this)}return e=a.createHash(t).update(r).digest(),this._hashCache[i]=e},m.prototype.fingerprint=function(t,e){return void 0===e&&(e="ssh"),s.string(t=void 0===t?"sha256":t,"algorithm"),s.string(e,"type"),t={type:"key",hash:this.hash(t,e),algorithm:t,hashType:e},new o(t)},m.prototype.defaultHashAlgorithm=function(){var t="sha1";return"rsa"===this.type&&(t="sha256"),"dsa"===this.type&&1024<this.size&&(t="sha256"),"ed25519"===this.type&&(t="sha512"),"ecdsa"===this.type?this.size<=256?"sha256":this.size<=384?"sha384":"sha512":t},m.prototype.createVerify=function(t){if(void 0===t&&(t=this.defaultHashAlgorithm()),s.string(t,"hash algorithm"),"ed25519"===this.type&&void 0!==i)return new i.Verifier(this,t);if("curve25519"===this.type)throw new Error("Curve25519 keys are not suitable for signing or verification");var e,r,n;try{r=t.toUpperCase(),e=a.createVerify(r)}catch(e){n=e}(void 0===e||n instanceof Error&&n.message.match(/Unknown message digest/))&&(r="RSA-",r+=t.toUpperCase(),e=a.createVerify(r)),s.ok(e,"failed to create verifier");var o=e.verify.bind(e),u=this.toBuffer("pkcs8"),h=this.curve,l=this;return e.verify=function(e,r){if(c.isSignature(e,[2,0]))return e.type===l.type&&(!e.hashAlgorithm||e.hashAlgorithm===t)&&(!e.curve||"ecdsa"!==l.type||e.curve===h)&&o(u,e.toBuffer("asn1"));if("string"==typeof e||Buffer.isBuffer(e))return o(u,e,r);throw c.isSignature(e,[1,0])?new Error("signature was created by too old a version of sshpk and cannot be verified"):new TypeError("signature must be a string, Buffer, or Signature object")},e},m.prototype.createDH=m.prototype.createDiffieHellman=function(){if("rsa"===this.type)throw new Error("RSA keys do not support Diffie-Hellman");return new u(this)},m.parse=function(t,e,r){"string"!=typeof t&&s.buffer(t,"data"),s.string(e=void 0===e?"auto":e,"format"),s.optionalObject(r="string"==typeof r?{filename:r}:r,"options"),s.optionalString((r=void 0===r?{}:r).filename,"options.filename"),void 0===r.filename&&(r.filename="(unnamed)"),s.object(d[e],"formats[format]");try{var i=d[e].read(t,r);return(i=i instanceof l?i.toPublic():i).comment||(i.comment=r.filename),i}catch(t){if("KeyEncryptedError"===t.name)throw t;throw new f(r.filename,e,t)}},m.isKey=function(t,e){return h.isCompatible(t,m,e)},m.prototype._sshpkApiVersion=[1,7],m._oldVersionDetect=function(t){return s.func(t.toBuffer),s.func(t.fingerprint),t.createDH?[1,4]:t.defaultHashAlgorithm?[1,3]:t.formats.auto?[1,2]:t.formats.pkcs1?[1,1]:[1,0]}},function(t,e,r){t.exports=v;var i=r(10),s=r(14).Buffer,n=r(31),a=r(8),o=(r(103),r(56)),c=(t=r(51),r(9)),u=r(25),h=r(182),l=h.generateECDSA,p=h.generateED25519,f=r(283),d=r(105),m=r(23),g=(t.InvalidAlgorithmError,t.KeyParseError),y=(t.KeyEncryptedError,{});function v(t){i.object(t,"options"),m.call(this,t),this._pubCache=void 0}y.auto=r(284),y.pem=r(67),y.pkcs1=r(183),y.pkcs8=r(106),y.rfc4253=r(68),y["ssh-private"]=r(137),y.openssh=y["ssh-private"],y.ssh=y["ssh-private"],y.dnssec=r(184),y.putty=r(185),c.inherits(v,m),v.formats=y,v.prototype.toBuffer=function(t,e){return i.string(t=void 0===t?"pkcs1":t,"format"),i.object(y[t],"formats[format]"),i.optionalObject(e,"options"),y[t].write(this,e)},v.prototype.hash=function(t,e){return this.toPublic().hash(t,e)},v.prototype.fingerprint=function(t,e){return this.toPublic().fingerprint(t,e)},v.prototype.toPublic=function(){if(!this._pubCache){for(var t=n.info[this.type],e=[],r=0;r<t.parts.length;++r){var i=t.parts[r];e.push(this.part[i])}this._pubCache=new m({type:this.type,source:this,parts:e}),this.comment&&(this._pubCache.comment=this.comment)}return this._pubCache},v.prototype.derive=function(t){var e,r,n;if(i.string(t,"type"),"ed25519"===this.type&&"curve25519"===t)return 0===(e=this.part.k.data)[0]&&(e=e.slice(1)),n=d.box.keyPair.fromSecretKey(new Uint8Array(e)),r=s.from(n.publicKey),new v({type:"curve25519",parts:[{name:"A",data:u.mpNormalize(r)},{name:"k",data:u.mpNormalize(e)}]});if("curve25519"===this.type&&"ed25519"===t)return 0===(e=this.part.k.data)[0]&&(e=e.slice(1)),n=d.sign.keyPair.fromSeed(new Uint8Array(e)),r=s.from(n.publicKey),new v({type:"ed25519",parts:[{name:"A",data:u.mpNormalize(r)},{name:"k",data:u.mpNormalize(e)}]});throw new Error("Key derivation not supported from "+this.type+" to "+t)},v.prototype.createVerify=function(t){return this.toPublic().createVerify(t)},v.prototype.createSign=function(t){if(void 0===t&&(t=this.defaultHashAlgorithm()),i.string(t,"hash algorithm"),"ed25519"===this.type&&void 0!==f)return new f.Signer(this,t);if("curve25519"===this.type)throw new Error("Curve25519 keys are not suitable for signing or verification");var e,r,n;try{r=t.toUpperCase(),e=a.createSign(r)}catch(e){n=e}(void 0===e||n instanceof Error&&n.message.match(/Unknown message digest/))&&(r="RSA-",r+=t.toUpperCase(),e=a.createSign(r)),i.ok(e,"failed to create verifier");var c=e.sign.bind(e),u=this.toBuffer("pkcs1"),h=this.type,l=this.curve;return e.sign=function(){var e=c(u);return"string"==typeof e&&(e=s.from(e,"binary")),(e=o.parse(e,h,"asn1")).hashAlgorithm=t,e.curve=l,e},e},v.parse=function(t,e,r){"string"!=typeof t&&i.buffer(t,"data"),i.string(e=void 0===e?"auto":e,"format"),i.optionalObject(r="string"==typeof r?{filename:r}:r,"options"),i.optionalString((r=void 0===r?{}:r).filename,"options.filename"),void 0===r.filename&&(r.filename="(unnamed)"),i.object(y[e],"formats[format]");try{var s=y[e].read(t,r);return i.ok(s instanceof v,"key is not a private key"),s.comment||(s.comment=r.filename),s}catch(t){if("KeyEncryptedError"===t.name)throw t;throw new g(r.filename,e,t)}},v.isPrivateKey=function(t,e){return u.isCompatible(t,v,e)},v.generate=function(t,e){switch(i.object(e=void 0===e?{}:e,"options"),t){case"ecdsa":return void 0===e.curve&&(e.curve="nistp256"),i.string(e.curve,"options.curve"),l(e.curve);case"ed25519":return p();default:throw new Error('Key generation not supported with key type "'+t+'"')}},v.prototype._sshpkApiVersion=[1,6],v._oldVersionDetect=function(t){return i.func(t.toPublic),i.func(t.createSign),t.derive?[1,3]:t.defaultHashAlgorithm?[1,2]:t.formats.auto?[1,1]:[1,0]}},function(t,e,r){t.exports={bufferSplit:function(t,e){i.buffer(t),i.string(e);for(var r=[],s=0,n=0,a=0;a<t.length;++a){var o;t[a]===e.charCodeAt(n)?++n:n=t[a]===e.charCodeAt(0)?1:0,n>=e.length&&(o=a+1,r.push(t.slice(s,o-n)),s=o,n=0)}return s<=t.length&&r.push(t.slice(s,t.length)),r},addRSAMissing:function(t){i.object(t),d(t,n,[1,1]);var e,r,s=new l(t.part.d.data);t.part.dmodp||(e=new l(t.part.p.data),e=v(e=s.mod(e.subtract(1))),t.part.dmodp={name:"dmodp",data:e},t.parts.push(t.part.dmodp)),t.part.dmodq||(r=new l(t.part.q.data),e=v(s=s.mod(r.subtract(1))),t.part.dmodq={name:"dmodq",data:e},t.parts.push(t.part.dmodq))},calculateDSAPublic:function(t,e,r){return i.buffer(t),i.buffer(e),i.buffer(r),t=new l(t),e=new l(e),r=new l(r),v(t.modPow(r,e))},calculateED25519Public:function(t){return i.buffer(t),t=p.sign.keyPair.fromSeed(new Uint8Array(t)),s.from(t.publicKey)},calculateX25519Public:function(t){return i.buffer(t),t=p.box.keyPair.fromSeed(new Uint8Array(t)),s.from(t.publicKey)},mpNormalize:y,mpDenormalize:function(t){for(i.buffer(t);1<t.length&&0===t[0];)t=t.slice(1);return t},ecNormalize:function(t,e){if(i.buffer(t),0===t[0]&&4===t[1])return e?t:t.slice(1);if(4!==t[0]){for(;0===t[0];)t=t.slice(1);if(2===t[0]||3===t[0])throw new Error("Compressed elliptic curve points are not supported");if(4!==t[0])throw new Error("Not a valid elliptic curve point")}return e?((e=s.alloc(t.length+1))[0]=0,t.copy(e,1),e):t},countZeros:function(t){for(var e=0,r=8;e<t.length;){var i=1<<r;if((t[e]&i)==i)break;--r<0&&(e++,r=8)}return 8*e+(8-r)-1},assertCompatible:d,isCompatible:function(t,e,r){if(null===t||"object"!=typeof t)return!1;if(void 0===r&&(r=e.prototype._sshpkApiVersion),t instanceof e&&e.prototype._sshpkApiVersion[0]==r[0])return!0;for(var i=Object.getPrototypeOf(t),s=0;i.constructor.name!==e.name;)if(!(i=Object.getPrototypeOf(i))||++s>f)return!1;if(i.constructor.name!==e.name)return!1;var n=i._sshpkApiVersion;return void 0===n&&(n=e._oldVersionDetect(t)),!(n[0]!=r[0]||n[1]<r[1])},opensslKeyDeriv:function(t,e,r,n){i.buffer(e,"salt"),i.buffer(r,"passphrase"),i.number(n,"iteration count");for(var a,c,u,h=m[t],l=(i.object(h,"supported cipher"),e=e.slice(0,g),s.alloc(0));l.length<h.key+h.iv;){u=[],c&&u.push(c),u.push(r),u.push(e),a=s.concat(u);for(var p=0;p<n;++p)a=o.createHash("md5").update(a).digest();l=s.concat([l,a]),c=a}return{key:l.slice(0,h.key),iv:l.slice(h.key,h.key+h.iv)}},opensshCipherInfo:function(t){var e={};switch(t){case"3des-cbc":e.keySize=24,e.blockSize=8,e.opensslName="des-ede3-cbc";break;case"blowfish-cbc":e.keySize=16,e.blockSize=8,e.opensslName="bf-cbc";break;case"aes128-cbc":case"aes128-ctr":case"aes128-gcm@openssh.com":e.keySize=16,e.blockSize=16,e.opensslName="aes-128-"+t.slice(7,10);break;case"aes192-cbc":case"aes192-ctr":case"aes192-gcm@openssh.com":e.keySize=24,e.blockSize=16,e.opensslName="aes-192-"+t.slice(7,10);break;case"aes256-cbc":case"aes256-ctr":case"aes256-gcm@openssh.com":e.keySize=32,e.blockSize=16,e.opensslName="aes-256-"+t.slice(7,10);break;default:throw new Error('Unsupported openssl cipher "'+t+'"')}return e},publicFromPrivateECDSA:function(t,e){i.string(t,"curveName"),i.buffer(e);var r=c.curves[t],n=new l(r.p),o=new l(r.a),u=new l(r.b);o=(n=new h.ECCurveFp(n,o,u)).decodePointHex(r.G.toString("hex")),u=new l(y(e)),r=o.multiply(u);return(e=(r=s.from(n.encodePointHex(r),"hex"),[])).push({name:"curve",data:s.from(t)}),e.push({name:"Q",data:r}),new a({type:"ecdsa",curve:n,parts:e})},zeroPadToLength:function(t,e){for(i.buffer(t),i.number(e);t.length>e;)i.equal(t[0],0),t=t.slice(1);for(;t.length<e;){var r=s.alloc(t.length+1);r[0]=0,t.copy(r,1),t=r}return t},writeBitString:function(t,e,r){void 0===r&&(r=u.Ber.BitString);var i=s.alloc(e.length+1);i[0]=0,e.copy(i,1),t.writeBuffer(i,r)},readBitString:function(t,e){return void 0===e&&(e=u.Ber.BitString),t=t.readString(e,!0),i.strictEqual(t[0],0,"bit strings with unused bits are not supported (0x"+t[0].toString(16)+")"),t.slice(1)},pbkdf2:function(t,e,r,i,n){for(var a=s.alloc(e.length+4),c=(e.copy(a),0),u=[],h=1;c<i;){var l=function(e){a.writeUInt32BE(e,a.length-4);for(var i=o.createHmac(t,n),s=(i.update(a),i.digest()),c=s,u=1;u++<r;){(i=o.createHmac(t,n)).update(c),c=i.digest();for(var h=0;h<s.length;++h)s[h]^=c[h]}return s}(h++);c+=l.length,u.push(l)}return s.concat(u).slice(0,i)}};var i=r(10),s=r(14).Buffer,n=r(24),a=r(23),o=r(8),c=r(31),u=r(57),h=r(136),l=r(104).BigInteger,p=r(105),f=3;function d(t,e,r,s){if(i.ok(t,(s=void 0===s?"object":s)+" must not be null"),i.object(t,s+" must be an object"),void 0===r&&(r=e.prototype._sshpkApiVersion),!(t instanceof e&&e.prototype._sshpkApiVersion[0]==r[0])){for(var n=Object.getPrototypeOf(t),a=0;n.constructor.name!==e.name;)n=Object.getPrototypeOf(n),i.ok(n&&++a<=f,s+" must be a "+e.name+" instance");i.strictEqual(n.constructor.name,e.name,s+" must be a "+e.name+" instance");var o=n._sshpkApiVersion;void 0===o&&(o=e._oldVersionDetect(t)),i.ok(o[0]==r[0]&&o[1]>=r[1],s+" must be compatible with "+e.name+" klass version "+r[0]+"."+r[1])}}var m={"des-ede3-cbc":{key:24,iv:8},"aes-128-cbc":{key:16,iv:16},"aes-256-cbc":{key:32,iv:16}},g=8;function y(t){for(i.buffer(t);1<t.length&&0===t[0]&&0==(128&t[1]);)t=t.slice(1);var e;return 128==(128&t[0])&&((e=s.alloc(t.length+1))[0]=0,t.copy(e,1),t=e),t}function v(t){return y(s.from(t.toByteArray()))}},function(t,e,r){"use strict";
|
|
65
65
|
/*!
|
|
66
66
|
* output.js - output object for vallnet
|
|
67
67
|
* Copyright (c) 2018-2020, Bookman Software (MIT License)
|
|
@@ -108,7 +108,7 @@ let i=[];[r(567),r(568),r(569),r(570),r(571),r(572),r(573),r(574),r(575),r(576),
|
|
|
108
108
|
/*!
|
|
109
109
|
* facade.js - 门面对象
|
|
110
110
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
111
|
-
*/const i=r(3),s=r(1),{ContractType:n,ContractTypeExecutable:a}=r(5),o=Object.values(a);r(11);const c=r(232),u=r(191),{opcodes:h,unspendableCodes:l,espicalCodes:p}=r(22);r=new class{async FactoryOfContract(t){t.facade=this,t.hash=t.tx.hash("hex"),t.raw=t.tx.toRaw().toString("hex"),t.coinbaseHeight||(t.coinbaseHeight=t.block?t.block.height:-1);let e={};var r;return t.contract?e=t.contract:t.env&&(r=await t.env.finder(t.tx.inputs[0].prevout.hash),e=this.parseContract(t.tx,r,t.tx.inputs[0].prevout.index)),new(u(e))(e,t)}parseContract(t,e,r){if(e&&1==t.inputs.length&&t.inputs[0].prevout.hash!=i.NULL_HASH&&1==t.outputs.length&&!t.outputs[0].getReturnType(l)){let t=e.outputs[r];if(t&&(e=t.getReturnData([h.OP_PROPEXCHANGE,h.OP_PROPCREATE])))return{oper:n.propFound,ori:e,addr:t.getAddress().toString()}}if(!t.outputs[0])return null;let s=t.outputs[0].getReturnData(p);if(!s||-1==o.indexOf(s.oper))return null;switch(s.oper){case n.coinbase:{let t={sig:s.sig,oper:n.coinbase};Reflect.deleteProperty(s,"sig"),t.data=s,s=t;break}case n.contractCreate:if(2<=t.outputs.length)try{let e=t.outputs[1].getReturnData();e.ori=s,s=e}catch(t){return console.error(t),null}}return s}async checkSum(t,e,r){if(t.txcheckpoint&&t.txcheckpoint.getCheck&&0<t.txcheckpoint.getCheck(e).length)try{var i=t.txcheckpoint.getCheck(e);if(0<i.length){let t=i[Math.floor(Math.random()*i.length)];var n=s.sprintf(t.url,r,0),a=await c.pGetUrl(n);if(t.check(a))return!0}}catch(t){console.log(t.message)}return!1}},t.exports=r},function(t,e){t.exports=require("url")},function(t,e,r){(function(t){!function(t,e){"use strict";function i(t,e){if(!t)throw new Error(e||"Assertion failed")}function s(t,e){function r(){}t.super_=e,r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,(this.red=null)!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var a;"object"==typeof t?t.exports=n:e.BN=n,(n.BN=n).wordSize=26;try{a=r(128).Buffer}catch(t){}function o(t,e,r){for(var i=0,s=Math.min(t.length,r),n=e;n<s;n++){var a=t.charCodeAt(n)-48;i=i<<4|(49<=a&&a<=54?a-49+10:17<=a&&a<=22?a-17+10:15&a)}return i}function c(t,e,r,i){for(var s=0,n=Math.min(t.length,r),a=e;a<n;a++){var o=t.charCodeAt(a)-48;s=s*i+(49<=o?o-49+10:17<=o?o-17+10:o)}return s}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return 0<t.cmp(e)?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);i((e="hex"===e?16:e)===(0|e)&&2<=e&&e<=36);var s=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&s++,16===e?this._parseHex(t,s):this._parseBase(t,e,s),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},n.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(i(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},n.prototype._initArray=function(t,e,r){if(i("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var s,n,a=0;a<this.length;a++)this.words[a]=0;var o=0;if("be"===r)for(a=t.length-1,s=0;0<=a;a-=3)n=t[a]|t[a-1]<<8|t[a-2]<<16,this.words[s]|=n<<o&67108863,this.words[s+1]=n>>>26-o&67108863,26<=(o+=24)&&(o-=26,s++);else if("le"===r)for(s=a=0;a<t.length;a+=3)n=t[a]|t[a+1]<<8|t[a+2]<<16,this.words[s]|=n<<o&67108863,this.words[s+1]=n>>>26-o&67108863,26<=(o+=24)&&(o-=26,s++);return this.strip()},n.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r,i=0;i<this.length;i++)this.words[i]=0;for(var s=0,n=(i=t.length-6,0);e<=i;i-=6)r=o(t,i,i+6),this.words[n]|=r<<s&67108863,this.words[n+1]|=r>>>26-s&4194303,26<=(s+=24)&&(s-=26,n++);i+6!==e&&(r=o(t,e,i+6),this.words[n]|=r<<s&67108863,this.words[n+1]|=r>>>26-s&4194303),this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0];for(var i=0,s=this.length=1;s<=67108863;s*=e)i++;s=s/e|0;for(var n=t.length-r,a=n%--i,o=Math.min(n,n-a)+r,u=0,h=r;h<o;h+=i)u=c(t,h,h+i,e),this.imuln(s),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!=a){var l=1;for(u=c(t,h,t.length,e),h=0;h<a;h++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;1<this.length&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function p(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0,s=(i=(r.length=i)-1|0,(a=(0|t.words[0])*(0|e.words[0]))/67108864|0);r.words[0]=67108863&a;for(var n=1;n<i;n++){for(var a,o=s>>>26,c=67108863&s,u=Math.min(n,e.length-1),h=Math.max(0,n-t.length+1);h<=u;h++)o+=(a=(0|t.words[n-h|0])*(0|e.words[h])+c)/67108864|0,c=67108863&a;r.words[n]=0|c,s=0|o}return 0!==s?r.words[n]=0|s:r.length--,r.strip()}n.prototype.toString=function(t,e){if(e=0|e||1,16===(t=t||10)||"hex"===t){c="";for(var r=0,s=0,n=0;n<this.length;n++){var a=this.words[n],o=(16777215&(a<<r|s)).toString(16),c=0!=(s=a>>>24-r&16777215)||n!==this.length-1?u[6-o.length]+o+c:o+c;26<=(r+=2)&&(r-=26,n--)}for(0!==s&&(c=s.toString(16)+c);c.length%e!=0;)c="0"+c;return 0!==this.negative?"-"+c:c}if(t===(0|t)&&2<=t&&t<=36){var p=h[t],f=l[t];for(c="",(d=this.clone()).negative=0;!d.isZero();){var d,m=d.modn(f).toString(t);c=(d=d.idivn(f)).isZero()?m+c:u[p-m.length]+m+c}for(this.isZero()&&(c="0"+c);c.length%e!=0;)c="0"+c;return 0!==this.negative?"-"+c:c}i(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:2<this.length&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return i(void 0!==a),this.toArrayLike(a,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,r){var s,n,a=this.byteLength(),o=r||Math.max(1,a),c=(r=(i(a<=o,"byte array longer than desired length"),i(0<o,"Requested array length <= 0"),this.strip(),"le"===e),new t(o)),u=this.clone();if(r){for(n=0;!u.isZero();n++)s=u.andln(255),u.iushrn(8),c[n]=s;for(;n<o;n++)c[n]=0}else{for(n=0;n<o-a;n++)c[n]=0;for(n=0;!u.isZero();n++)s=u.andln(255),u.iushrn(8),c[o-n-1]=s}return c},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=0;return 4096<=t&&(e+=13,t>>>=13),64<=t&&(e+=7,t>>>=7),8<=t&&(e+=4,t>>>=4),2<=t&&(e+=2,t>>>=2),e+t},n.prototype._zeroBits=function(t){var e;return 0===t?26:((e=0)==(8191&(t=t))&&(e+=13,t>>>=13),0==(127&t)&&(e+=7,t>>>=7),0==(15&t)&&(e+=4,t>>>=4),0==(3&t)&&(e+=2,t>>>=2),0==(1&t)&&e++,e)},n.prototype.bitLength=function(){var t=this.words[this.length-1];t=this._countBits(t);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return i(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){for(var e=this.length>t.length?t:this,r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return i(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){for(var e,r=this.length>t.length?(e=this,t):(e=t,this),i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return i(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){i("number"==typeof t&&0<=t);var e=0|Math.ceil(t/26);t%=26;this._expand(e),0<t&&e--;for(var r=0;r<e;r++)this.words[r]=67108863&~this.words[r];return 0<t&&(this.words[r]=~this.words[r]&67108863>>26-t),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){i("number"==typeof t&&0<=t);var r=t/26|0;t%=26;return this._expand(1+r),this.words[r]=e?this.words[r]|1<<t:this.words[r]&~(1<<t),this.strip()},n.prototype.iadd=function(t){var e,r;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();for(var i=this.length>t.length?(r=this,t):(r=t,this),s=0,n=0;n<i.length;n++)e=(0|r.words[n])+(0|i.words[n])+s,this.words[n]=67108863&e,s=e>>>26;for(;0!==s&&n<r.length;n++)e=(0|r.words[n])+s,this.words[n]=67108863&e,s=e>>>26;if(this.length=r.length,0!==s)this.words[this.length]=s,this.length++;else if(r!==this)for(;n<r.length;n++)this.words[n]=r.words[n];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){var e;if(0!==t.negative)return t.negative=0,e=this.iadd(t),t.negative=1,e._normSign();if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;for(var s=0<i?(r=this,t):(r=t,this),n=0,a=0;a<s.length;a++)n=(e=(0|r.words[a])-(0|s.words[a])+n)>>26,this.words[a]=67108863&e;for(;0!==n&&a<r.length;a++)n=(e=(0|r.words[a])+n)>>26,this.words[a]=67108863&e;if(0===n&&a<r.length&&r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this.length=Math.max(this.length,a),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var f=function(t,e,r){var i,s=t.words,n=e.words,a=r.words,o=8191&(c=0|s[0]),c=c>>>13,u=8191&(h=0|s[1]),h=h>>>13,l=8191&(p=0|s[2]),p=p>>>13,f=8191&(d=0|s[3]),d=d>>>13,m=8191&(g=0|s[4]),g=g>>>13,y=8191&(v=0|s[5]),v=v>>>13,b=8191&(w=0|s[6]),w=w>>>13,x=8191&(k=0|s[7]),k=k>>>13,S=8191&(E=0|s[8]),E=E>>>13,_=8191&(s=0|s[9]),A=(s=s>>>13,8191&(R=0|n[0])),R=R>>>13,I=8191&(j=0|n[1]),j=j>>>13,C=8191&(P=0|n[2]),P=P>>>13,O=8191&(T=0|n[3]),T=T>>>13,F=8191&(B=0|n[4]),B=B>>>13,N=8191&(D=0|n[5]),D=D>>>13,L=8191&(H=0|n[6]),H=H>>>13,z=8191&(M=0|n[7]),M=M>>>13,U=8191&(q=0|n[8]),q=q>>>13,V=8191&(n=0|n[9]),K=(n=n>>>13,e=(r.negative=t.negative^e.negative,r.length=19,(0+Math.imul(o,A)|0)+((8191&(t=Math.imul(o,R)+Math.imul(c,A)|0))<<13)|0),(Math.imul(c,R)+(t>>>13)|0)+(e>>>26)|0);e&=67108863,i=Math.imul(u,A),t=Math.imul(u,R)+Math.imul(h,A)|0,W=Math.imul(h,R);var W,G=(K+(i+Math.imul(o,I)|0)|0)+((8191&(t=(t+Math.imul(o,j)|0)+Math.imul(c,I)|0))<<13)|0,$=(K=((W+Math.imul(c,j)|0)+(t>>>13)|0)+(G>>>26)|0,G&=67108863,i=Math.imul(l,A),t=Math.imul(l,R)+Math.imul(p,A)|0,W=Math.imul(p,R),i=i+Math.imul(u,I)|0,t=(t+Math.imul(u,j)|0)+Math.imul(h,I)|0,W=W+Math.imul(h,j)|0,(K+(i+Math.imul(o,C)|0)|0)+((8191&(t=(t+Math.imul(o,P)|0)+Math.imul(c,C)|0))<<13)|0),Y=(K=((W+Math.imul(c,P)|0)+(t>>>13)|0)+($>>>26)|0,$&=67108863,i=Math.imul(f,A),t=Math.imul(f,R)+Math.imul(d,A)|0,W=Math.imul(d,R),i=i+Math.imul(l,I)|0,t=(t+Math.imul(l,j)|0)+Math.imul(p,I)|0,W=W+Math.imul(p,j)|0,i=i+Math.imul(u,C)|0,t=(t+Math.imul(u,P)|0)+Math.imul(h,C)|0,W=W+Math.imul(h,P)|0,(K+(i+Math.imul(o,O)|0)|0)+((8191&(t=(t+Math.imul(o,T)|0)+Math.imul(c,O)|0))<<13)|0),X=(K=((W+Math.imul(c,T)|0)+(t>>>13)|0)+(Y>>>26)|0,Y&=67108863,i=Math.imul(m,A),t=Math.imul(m,R)+Math.imul(g,A)|0,W=Math.imul(g,R),i=i+Math.imul(f,I)|0,t=(t+Math.imul(f,j)|0)+Math.imul(d,I)|0,W=W+Math.imul(d,j)|0,i=i+Math.imul(l,C)|0,t=(t+Math.imul(l,P)|0)+Math.imul(p,C)|0,W=W+Math.imul(p,P)|0,i=i+Math.imul(u,O)|0,t=(t+Math.imul(u,T)|0)+Math.imul(h,O)|0,W=W+Math.imul(h,T)|0,(K+(i+Math.imul(o,F)|0)|0)+((8191&(t=(t+Math.imul(o,B)|0)+Math.imul(c,F)|0))<<13)|0),J=(K=((W+Math.imul(c,B)|0)+(t>>>13)|0)+(X>>>26)|0,X&=67108863,i=Math.imul(y,A),t=Math.imul(y,R)+Math.imul(v,A)|0,W=Math.imul(v,R),i=i+Math.imul(m,I)|0,t=(t+Math.imul(m,j)|0)+Math.imul(g,I)|0,W=W+Math.imul(g,j)|0,i=i+Math.imul(f,C)|0,t=(t+Math.imul(f,P)|0)+Math.imul(d,C)|0,W=W+Math.imul(d,P)|0,i=i+Math.imul(l,O)|0,t=(t+Math.imul(l,T)|0)+Math.imul(p,O)|0,W=W+Math.imul(p,T)|0,i=i+Math.imul(u,F)|0,t=(t+Math.imul(u,B)|0)+Math.imul(h,F)|0,W=W+Math.imul(h,B)|0,(K+(i+Math.imul(o,N)|0)|0)+((8191&(t=(t+Math.imul(o,D)|0)+Math.imul(c,N)|0))<<13)|0),Z=(K=((W+Math.imul(c,D)|0)+(t>>>13)|0)+(J>>>26)|0,J&=67108863,i=Math.imul(b,A),t=Math.imul(b,R)+Math.imul(w,A)|0,W=Math.imul(w,R),i=i+Math.imul(y,I)|0,t=(t+Math.imul(y,j)|0)+Math.imul(v,I)|0,W=W+Math.imul(v,j)|0,i=i+Math.imul(m,C)|0,t=(t+Math.imul(m,P)|0)+Math.imul(g,C)|0,W=W+Math.imul(g,P)|0,i=i+Math.imul(f,O)|0,t=(t+Math.imul(f,T)|0)+Math.imul(d,O)|0,W=W+Math.imul(d,T)|0,i=i+Math.imul(l,F)|0,t=(t+Math.imul(l,B)|0)+Math.imul(p,F)|0,W=W+Math.imul(p,B)|0,i=i+Math.imul(u,N)|0,t=(t+Math.imul(u,D)|0)+Math.imul(h,N)|0,W=W+Math.imul(h,D)|0,(K+(i+Math.imul(o,L)|0)|0)+((8191&(t=(t+Math.imul(o,H)|0)+Math.imul(c,L)|0))<<13)|0),Q=(K=((W+Math.imul(c,H)|0)+(t>>>13)|0)+(Z>>>26)|0,Z&=67108863,i=Math.imul(x,A),t=Math.imul(x,R)+Math.imul(k,A)|0,W=Math.imul(k,R),i=i+Math.imul(b,I)|0,t=(t+Math.imul(b,j)|0)+Math.imul(w,I)|0,W=W+Math.imul(w,j)|0,i=i+Math.imul(y,C)|0,t=(t+Math.imul(y,P)|0)+Math.imul(v,C)|0,W=W+Math.imul(v,P)|0,i=i+Math.imul(m,O)|0,t=(t+Math.imul(m,T)|0)+Math.imul(g,O)|0,W=W+Math.imul(g,T)|0,i=i+Math.imul(f,F)|0,t=(t+Math.imul(f,B)|0)+Math.imul(d,F)|0,W=W+Math.imul(d,B)|0,i=i+Math.imul(l,N)|0,t=(t+Math.imul(l,D)|0)+Math.imul(p,N)|0,W=W+Math.imul(p,D)|0,i=i+Math.imul(u,L)|0,t=(t+Math.imul(u,H)|0)+Math.imul(h,L)|0,W=W+Math.imul(h,H)|0,(K+(i+Math.imul(o,z)|0)|0)+((8191&(t=(t+Math.imul(o,M)|0)+Math.imul(c,z)|0))<<13)|0),tt=(K=((W+Math.imul(c,M)|0)+(t>>>13)|0)+(Q>>>26)|0,Q&=67108863,i=Math.imul(S,A),t=Math.imul(S,R)+Math.imul(E,A)|0,W=Math.imul(E,R),i=i+Math.imul(x,I)|0,t=(t+Math.imul(x,j)|0)+Math.imul(k,I)|0,W=W+Math.imul(k,j)|0,i=i+Math.imul(b,C)|0,t=(t+Math.imul(b,P)|0)+Math.imul(w,C)|0,W=W+Math.imul(w,P)|0,i=i+Math.imul(y,O)|0,t=(t+Math.imul(y,T)|0)+Math.imul(v,O)|0,W=W+Math.imul(v,T)|0,i=i+Math.imul(m,F)|0,t=(t+Math.imul(m,B)|0)+Math.imul(g,F)|0,W=W+Math.imul(g,B)|0,i=i+Math.imul(f,N)|0,t=(t+Math.imul(f,D)|0)+Math.imul(d,N)|0,W=W+Math.imul(d,D)|0,i=i+Math.imul(l,L)|0,t=(t+Math.imul(l,H)|0)+Math.imul(p,L)|0,W=W+Math.imul(p,H)|0,i=i+Math.imul(u,z)|0,t=(t+Math.imul(u,M)|0)+Math.imul(h,z)|0,W=W+Math.imul(h,M)|0,(K+(i+Math.imul(o,U)|0)|0)+((8191&(t=(t+Math.imul(o,q)|0)+Math.imul(c,U)|0))<<13)|0);K=((W+Math.imul(c,q)|0)+(t>>>13)|0)+(tt>>>26)|0,tt&=67108863,i=Math.imul(_,A),t=Math.imul(_,R)+Math.imul(s,A)|0,W=Math.imul(s,R),i=i+Math.imul(S,I)|0,t=(t+Math.imul(S,j)|0)+Math.imul(E,I)|0,W=W+Math.imul(E,j)|0,i=i+Math.imul(x,C)|0,t=(t+Math.imul(x,P)|0)+Math.imul(k,C)|0,W=W+Math.imul(k,P)|0,i=i+Math.imul(b,O)|0,t=(t+Math.imul(b,T)|0)+Math.imul(w,O)|0,W=W+Math.imul(w,T)|0,i=i+Math.imul(y,F)|0,t=(t+Math.imul(y,B)|0)+Math.imul(v,F)|0,W=W+Math.imul(v,B)|0,i=i+Math.imul(m,N)|0,t=(t+Math.imul(m,D)|0)+Math.imul(g,N)|0,W=W+Math.imul(g,D)|0,i=i+Math.imul(f,L)|0,t=(t+Math.imul(f,H)|0)+Math.imul(d,L)|0,W=W+Math.imul(d,H)|0,i=i+Math.imul(l,z)|0,t=(t+Math.imul(l,M)|0)+Math.imul(p,z)|0,W=W+Math.imul(p,M)|0,i=i+Math.imul(u,U)|0,t=(t+Math.imul(u,q)|0)+Math.imul(h,U)|0,W=W+Math.imul(h,q)|0,A=(K+(i+Math.imul(o,V)|0)|0)+((8191&(t=(t+Math.imul(o,n)|0)+Math.imul(c,V)|0))<<13)|0,K=((W+Math.imul(c,n)|0)+(t>>>13)|0)+(A>>>26)|0,A&=67108863,i=Math.imul(_,I),t=Math.imul(_,j)+Math.imul(s,I)|0,W=Math.imul(s,j),i=i+Math.imul(S,C)|0,t=(t+Math.imul(S,P)|0)+Math.imul(E,C)|0,W=W+Math.imul(E,P)|0,i=i+Math.imul(x,O)|0,t=(t+Math.imul(x,T)|0)+Math.imul(k,O)|0,W=W+Math.imul(k,T)|0,i=i+Math.imul(b,F)|0,t=(t+Math.imul(b,B)|0)+Math.imul(w,F)|0,W=W+Math.imul(w,B)|0,i=i+Math.imul(y,N)|0,t=(t+Math.imul(y,D)|0)+Math.imul(v,N)|0,W=W+Math.imul(v,D)|0,i=i+Math.imul(m,L)|0,t=(t+Math.imul(m,H)|0)+Math.imul(g,L)|0,W=W+Math.imul(g,H)|0,i=i+Math.imul(f,z)|0,t=(t+Math.imul(f,M)|0)+Math.imul(d,z)|0,W=W+Math.imul(d,M)|0,i=i+Math.imul(l,U)|0,t=(t+Math.imul(l,q)|0)+Math.imul(p,U)|0,W=W+Math.imul(p,q)|0,R=(K+(i+Math.imul(u,V)|0)|0)+((8191&(t=(t+Math.imul(u,n)|0)+Math.imul(h,V)|0))<<13)|0,K=((W+Math.imul(h,n)|0)+(t>>>13)|0)+(R>>>26)|0,R&=67108863,i=Math.imul(_,C),t=Math.imul(_,P)+Math.imul(s,C)|0,W=Math.imul(s,P),i=i+Math.imul(S,O)|0,t=(t+Math.imul(S,T)|0)+Math.imul(E,O)|0,W=W+Math.imul(E,T)|0,i=i+Math.imul(x,F)|0,t=(t+Math.imul(x,B)|0)+Math.imul(k,F)|0,W=W+Math.imul(k,B)|0,i=i+Math.imul(b,N)|0,t=(t+Math.imul(b,D)|0)+Math.imul(w,N)|0,W=W+Math.imul(w,D)|0,i=i+Math.imul(y,L)|0,t=(t+Math.imul(y,H)|0)+Math.imul(v,L)|0,W=W+Math.imul(v,H)|0,i=i+Math.imul(m,z)|0,t=(t+Math.imul(m,M)|0)+Math.imul(g,z)|0,W=W+Math.imul(g,M)|0,i=i+Math.imul(f,U)|0,t=(t+Math.imul(f,q)|0)+Math.imul(d,U)|0,W=W+Math.imul(d,q)|0,o=(K+(i+Math.imul(l,V)|0)|0)+((8191&(t=(t+Math.imul(l,n)|0)+Math.imul(p,V)|0))<<13)|0,K=((W+Math.imul(p,n)|0)+(t>>>13)|0)+(o>>>26)|0,o&=67108863,i=Math.imul(_,O),t=Math.imul(_,T)+Math.imul(s,O)|0,W=Math.imul(s,T),i=i+Math.imul(S,F)|0,t=(t+Math.imul(S,B)|0)+Math.imul(E,F)|0,W=W+Math.imul(E,B)|0,i=i+Math.imul(x,N)|0,t=(t+Math.imul(x,D)|0)+Math.imul(k,N)|0,W=W+Math.imul(k,D)|0,i=i+Math.imul(b,L)|0,t=(t+Math.imul(b,H)|0)+Math.imul(w,L)|0,W=W+Math.imul(w,H)|0,i=i+Math.imul(y,z)|0,t=(t+Math.imul(y,M)|0)+Math.imul(v,z)|0,W=W+Math.imul(v,M)|0,i=i+Math.imul(m,U)|0,t=(t+Math.imul(m,q)|0)+Math.imul(g,U)|0,W=W+Math.imul(g,q)|0,c=(K+(i+Math.imul(f,V)|0)|0)+((8191&(t=(t+Math.imul(f,n)|0)+Math.imul(d,V)|0))<<13)|0,K=((W+Math.imul(d,n)|0)+(t>>>13)|0)+(c>>>26)|0,c&=67108863,i=Math.imul(_,F),t=Math.imul(_,B)+Math.imul(s,F)|0,W=Math.imul(s,B),i=i+Math.imul(S,N)|0,t=(t+Math.imul(S,D)|0)+Math.imul(E,N)|0,W=W+Math.imul(E,D)|0,i=i+Math.imul(x,L)|0,t=(t+Math.imul(x,H)|0)+Math.imul(k,L)|0,W=W+Math.imul(k,H)|0,i=i+Math.imul(b,z)|0,t=(t+Math.imul(b,M)|0)+Math.imul(w,z)|0,W=W+Math.imul(w,M)|0,i=i+Math.imul(y,U)|0,t=(t+Math.imul(y,q)|0)+Math.imul(v,U)|0,W=W+Math.imul(v,q)|0,I=(K+(i+Math.imul(m,V)|0)|0)+((8191&(t=(t+Math.imul(m,n)|0)+Math.imul(g,V)|0))<<13)|0,K=((W+Math.imul(g,n)|0)+(t>>>13)|0)+(I>>>26)|0,I&=67108863,i=Math.imul(_,N),t=Math.imul(_,D)+Math.imul(s,N)|0,W=Math.imul(s,D),i=i+Math.imul(S,L)|0,t=(t+Math.imul(S,H)|0)+Math.imul(E,L)|0,W=W+Math.imul(E,H)|0,i=i+Math.imul(x,z)|0,t=(t+Math.imul(x,M)|0)+Math.imul(k,z)|0,W=W+Math.imul(k,M)|0,i=i+Math.imul(b,U)|0,t=(t+Math.imul(b,q)|0)+Math.imul(w,U)|0,W=W+Math.imul(w,q)|0,j=(K+(i+Math.imul(y,V)|0)|0)+((8191&(t=(t+Math.imul(y,n)|0)+Math.imul(v,V)|0))<<13)|0,K=((W+Math.imul(v,n)|0)+(t>>>13)|0)+(j>>>26)|0,j&=67108863,i=Math.imul(_,L),t=Math.imul(_,H)+Math.imul(s,L)|0,W=Math.imul(s,H),i=i+Math.imul(S,z)|0,t=(t+Math.imul(S,M)|0)+Math.imul(E,z)|0,W=W+Math.imul(E,M)|0,i=i+Math.imul(x,U)|0,t=(t+Math.imul(x,q)|0)+Math.imul(k,U)|0,W=W+Math.imul(k,q)|0,u=(K+(i+Math.imul(b,V)|0)|0)+((8191&(t=(t+Math.imul(b,n)|0)+Math.imul(w,V)|0))<<13)|0,K=((W+Math.imul(w,n)|0)+(t>>>13)|0)+(u>>>26)|0,u&=67108863,i=Math.imul(_,z),t=Math.imul(_,M)+Math.imul(s,z)|0,W=Math.imul(s,M),i=i+Math.imul(S,U)|0,t=(t+Math.imul(S,q)|0)+Math.imul(E,U)|0,W=W+Math.imul(E,q)|0,h=(K+(i+Math.imul(x,V)|0)|0)+((8191&(t=(t+Math.imul(x,n)|0)+Math.imul(k,V)|0))<<13)|0,K=((W+Math.imul(k,n)|0)+(t>>>13)|0)+(h>>>26)|0,h&=67108863,i=Math.imul(_,U),t=Math.imul(_,q)+Math.imul(s,U)|0,W=Math.imul(s,q),C=(K+(i+Math.imul(S,V)|0)|0)+((8191&(t=(t+Math.imul(S,n)|0)+Math.imul(E,V)|0))<<13)|0,K=((W+Math.imul(E,n)|0)+(t>>>13)|0)+(C>>>26)|0,C&=67108863,P=(K+Math.imul(_,V)|0)+((8191&(t=Math.imul(_,n)+Math.imul(s,V)|0))<<13)|0;return K=(Math.imul(s,n)+(t>>>13)|0)+(P>>>26)|0,P&=67108863,a[0]=e,a[1]=G,a[2]=$,a[3]=Y,a[4]=X,a[5]=J,a[6]=Z,a[7]=Q,a[8]=tt,a[9]=A,a[10]=R,a[11]=o,a[12]=c,a[13]=I,a[14]=j,a[15]=u,a[16]=h,a[17]=C,a[18]=P,0!=K&&(a[19]=K,r.length++),r};function d(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(f=p),n.prototype.mulTo=function(t,e){var r=this.length+t.length;return r=(10===this.length&&10===t.length?f:r<63?p:r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,s=0,n=0;n<r.length-1;n++){for(var a=s,o=(s=0,67108863&i),c=Math.min(n,e.length-1),u=Math.max(0,n-t.length+1);u<=c;u++){var h,l=(0|t.words[n-u])*(0|e.words[u]);o=67108863&(h=(67108863&l)+o|0);s+=(a=(a=a+(l/67108864|0)|0)+(h>>>26)|0)>>>26,a&=67108863}r.words[n]=o,i=a,a=s}return 0!==i?r.words[n]=i:r.length--,r.strip()}:d)(this,t,e)},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,s=0;s<e;s++)i|=(1&t)<<e-s-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,s,n){for(var a=0;a<n;a++)i[a]=e[t[a]],s[a]=r[t[a]]},m.prototype.transform=function(t,e,r,i,s,n){this.permute(n,t,e,r,i,s);for(var a=1;a<s;a<<=1)for(var o=a<<1,c=Math.cos(2*Math.PI/o),u=Math.sin(2*Math.PI/o),h=0;h<s;h+=o)for(var l=c,p=u,f=0;f<a;f++){var d=r[h+f],m=i[h+f],g=r[h+f+a],y=l*g-p*(v=i[h+f+a]),v=l*v+p*g;r[h+f]=d+(g=y),i[h+f]=m+v,r[h+f+a]=d-g,i[h+f+a]=m-v,f!==o&&(y=c*l-u*p,p=c*p+u*l,l=y)}},m.prototype.guessLen13b=function(t,e){e=1&(i=1|Math.max(e,t));for(var r=0,i=i/2|0;i;i>>>=1)r++;return 1<<r+1+e},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var s=t[i];t[i]=t[r-i-1],t[r-i-1]=s,s=e[i],e[i]=-e[r-i-1],e[r-i-1]=-s}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var s=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&s,r=s<67108864?0:s/67108864|0}return t},m.prototype.convert13b=function(t,e,r,s){for(var n=0,a=0;a<e;a++)n+=0|t[a],r[2*a]=8191&n,r[2*a+1]=8191&(n>>>=13),n>>>=13;for(a=2*e;a<s;++a)r[a]=0;i(0===n),i(0==(-8192&n))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),s=this.makeRBT(i),n=this.stub(i),a=new Array(i),o=new Array(i),c=new Array(i),u=new Array(i),h=new Array(i),l=new Array(i),p=r.words;p.length=i,this.convert13b(t.words,t.length,a,i),this.convert13b(e.words,e.length,u,i),this.transform(a,n,o,c,i,s),this.transform(u,n,h,l,i,s);for(var f=0;f<i;f++){var d=o[f]*h[f]-c[f]*l[f];c[f]=o[f]*l[f]+c[f]*h[f],o[f]=d}return this.conjugate(o,c,i),this.transform(o,c,p,n,i,s),this.conjugate(p,n,i),this.normalize13b(p,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),d(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){i("number"==typeof t),i(t<67108864);for(var e=0,r=0;r<this.length;r++){var s=(0|this.words[r])*t,n=(67108863&s)+(67108863&e);e=(e>>=26)+(s/67108864|0)+(n>>>26);this.words[r]=67108863&n}return 0!==e&&(this.words[r]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r%26;e[r]=(t.words[r/26|0]&1<<i)>>>i}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var s=r.sqr();i<e.length;i++,s=s.sqr())0!==e[i]&&(r=r.mul(s));return r},n.prototype.iushln=function(t){i("number"==typeof t&&0<=t);var e=t%26,r=(t-e)/26,s=67108863>>>26-e<<26-e;if(0!=e){for(var n=0,a=0;a<this.length;a++){var o=this.words[a]&s,c=(0|this.words[a])-o<<e;this.words[a]=c|n,n=o>>>26-e}n&&(this.words[a]=n,this.length++)}if(0!=r){for(a=this.length-1;0<=a;a--)this.words[a+r]=this.words[a];for(a=0;a<r;a++)this.words[a]=0;this.length+=r}return this.strip()},n.prototype.ishln=function(t){return i(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,r){i("number"==typeof t&&0<=t),s=e?(e-e%26)/26:0;var s,n=t%26,a=Math.min((t-n)/26,this.length),o=67108863^67108863>>>n<<n,c=r;if(s-=a,s=Math.max(0,s),c){for(var u=0;u<a;u++)c.words[u]=this.words[u];c.length=a}if(0!==a)if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;0<=u&&(0!==h||s<=u);u--){var l=0|this.words[u];this.words[u]=h<<26-n|l>>>n,h=l&o}return c&&0!==h&&(c.words[c.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,r){return i(0===this.negative),this.iushrn(t,e,r)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){i("number"==typeof t&&0<=t);var e=t%26;t=(t-e)/26;return!(this.length<=t||!(this.words[t]&1<<e))},n.prototype.imaskn=function(t){i("number"==typeof t&&0<=t);var e=t%26;t=(t-e)/26;return i(0===this.negative,"imaskn works only with positive numbers"),this.length<=t?this:(0!=e&&t++,this.length=Math.min(t,this.length),0!=e&&(this.words[this.length-1]&=67108863^67108863>>>e<<e),this.strip())},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return i("number"==typeof t),i(t<67108864),t<0?this.isubn(-t):0!==this.negative?(1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0):(this.negative=0,this.isubn(t),this.negative=1),this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&67108864<=this.words[e];e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(i("number"==typeof t),i(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,--this.words[e+1];return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,r){for(var s=t.length+r,n=(this._expand(s),0),a=0;a<t.length;a++){var o=(0|this.words[a+r])+n,c=(0|t.words[a])*e;n=((o-=67108863&c)>>26)-(c/67108864|0);this.words[a+r]=67108863&o}for(;a<this.length-r;a++)n=(o=(0|this.words[a+r])+n)>>26,this.words[a+r]=67108863&o;if(0!==n){for(i(-1===n),a=n=0;a<this.length;a++)n=(o=-(0|this.words[a])+n)>>26,this.words[a]=67108863&o;this.negative=1}return this.strip()},n.prototype._wordDiv=function(t,e){this.length,t.length;var r,i=this.clone(),s=t,a=0|s.words[s.length-1],o=(0!=(t=26-this._countBits(a))&&(s=s.ushln(t),i.iushln(t),a=0|s.words[s.length-1]),i.length-s.length);if("mod"!==e){(r=new n(null)).length=1+o,r.words=new Array(r.length);for(var c=0;c<r.length;c++)r.words[c]=0}var u=i.clone()._ishlnsubmul(s,1,o);0===u.negative&&(i=u,r&&(r.words[o]=1));for(var h=o-1;0<=h;h--){var l=67108864*(0|i.words[s.length+h])+(0|i.words[s.length+h-1]);l=Math.min(l/a|0,67108863);for(i._ishlnsubmul(s,l,h);0!==i.negative;)l--,i.negative=0,i._ishlnsubmul(s,1,h),i.isZero()||(i.negative^=1);r&&(r.words[h]=l)}return r&&r.strip(),i.strip(),"div"!==e&&0!=t&&i.iushrn(t),{div:r||null,mod:i}},n.prototype.divmod=function(t,e,r){var s,a,o;return i(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(o=this.neg().divmod(t,e),"mod"!==e&&(s=o.div.neg()),"div"!==e&&(a=o.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:s,mod:a}):0===this.negative&&0!==t.negative?(o=this.divmod(t.neg(),e),{div:s="mod"!==e?o.div.neg():s,mod:o.mod}):0!=(this.negative&t.negative)?(o=this.neg().divmod(t.neg(),e),"div"!==e&&(a=o.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:o.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e)},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e,r,i=this.divmod(t);return i.mod.isZero()||(r=0!==i.div.negative?i.mod.isub(t):i.mod,e=t.ushrn(1),t=t.andln(1),(r=r.cmp(e))<0||1===t&&0===r)?i.div:0!==i.div.negative?i.div.isubn(1):i.div.iaddn(1)},n.prototype.modn=function(t){i(t<=67108863);for(var e=(1<<26)%t,r=0,s=this.length-1;0<=s;s--)r=(e*r+(0|this.words[s]))%t;return r},n.prototype.idivn=function(t){i(t<=67108863);for(var e=0,r=this.length-1;0<=r;r--){var s=(0|this.words[r])+67108864*e;this.words[r]=s/t|0,e=s%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){i(0===t.negative),i(!t.isZero());for(var e=this,r=t.clone(),s=(e=0!==e.negative?e.umod(t):e.clone(),new n(1)),a=new n(0),o=new n(0),c=new n(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),l=e.clone();!e.isZero();){for(var p=0,f=1;0==(e.words[0]&f)&&p<26;++p,f<<=1);if(0<p)for(e.iushrn(p);0<p--;)(s.isOdd()||a.isOdd())&&(s.iadd(h),a.isub(l)),s.iushrn(1),a.iushrn(1);for(var d=0,m=1;0==(r.words[0]&m)&&d<26;++d,m<<=1);if(0<d)for(r.iushrn(d);0<d--;)(o.isOdd()||c.isOdd())&&(o.iadd(h),c.isub(l)),o.iushrn(1),c.iushrn(1);0<=e.cmp(r)?(e.isub(r),s.isub(o),a.isub(c)):(r.isub(e),o.isub(s),c.isub(a))}return{a:o,b:c,gcd:r.iushln(u)}},n.prototype._invmp=function(t){i(0===t.negative),i(!t.isZero());for(var e,r=this,s=t.clone(),a=(r=0!==r.negative?r.umod(t):r.clone(),new n(1)),o=new n(0),c=s.clone();0<r.cmpn(1)&&0<s.cmpn(1);){for(var u=0,h=1;0==(r.words[0]&h)&&u<26;++u,h<<=1);if(0<u)for(r.iushrn(u);0<u--;)a.isOdd()&&a.iadd(c),a.iushrn(1);for(var l=0,p=1;0==(s.words[0]&p)&&l<26;++l,p<<=1);if(0<l)for(s.iushrn(l);0<l--;)o.isOdd()&&o.iadd(c),o.iushrn(1);0<=r.cmp(s)?(r.isub(s),a.isub(o)):(s.isub(r),o.isub(a))}return(e=0===r.cmpn(1)?a:o).cmpn(0)<0&&e.iadd(t),e},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0;for(var i=r.negative=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var s=e.cmp(r);if(s<0){var n=e;e=r,r=n}else if(0===s||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){i("number"==typeof t);t=(t-(e=t%26))/26;var e=1<<e;if(this.length<=t)this._expand(1+t),this.words[t]|=e;else{for(var r=e,s=t;0!==r&&s<this.length;s++){var n=0|this.words[s];r=(n+=r)>>>26;n&=67108863,this.words[s]=n}0!==r&&(this.words[s]=r,this.length++)}return this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e=t<0;return 0===this.negative||e?0===this.negative&&e?1:(this.strip(),e=1<this.length?1:(i((t=e?-t:t)<=67108863,"Number is too big"),(e=0|this.words[0])===t?0:e<t?-1:1),0!==this.negative?0|-e:e):-1},n.prototype.cmp=function(t){return 0!==this.negative&&0===t.negative?-1:0===this.negative&&0!==t.negative?1:(t=this.ucmp(t),0!==this.negative?0|-t:t)},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;0<=r;r--){var i=0|this.words[r],s=0|t.words[r];if(i!=s){i<s?e=-1:s<i&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return 0<=this.cmpn(t)},n.prototype.gte=function(t){return 0<=this.cmp(t)},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new k(t)},n.prototype.toRed=function(t){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return i(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return i(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function y(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function x(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function k(t){var e;"string"==typeof t?(e=n._prime(t),this.m=e.p,this.prime=e):(i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null)}function S(t){k.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},y.prototype.ireduce=function(t){for(var e,r=t;this.split(r,this.tmp),(e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength())>this.n;);return 0===(t=e<this.n?-1:r.ucmp(this.p))?(r.words[0]=0,r.length=1):0<t?r.isub(this.p):r.strip(),r},y.prototype.split=function(t,e){t.iushrn(this.n,0,e)},y.prototype.imulK=function(t){return t.imul(this.k)},s(v,y),v.prototype.split=function(t,e){for(var r=Math.min(t.length,9),i=0;i<r;i++)e.words[i]=t.words[i];if(e.length=r,t.length<=9)t.words[0]=0,t.length=1;else{var s=t.words[9];for(e.words[e.length++]=4194303&s,i=10;i<t.length;i++){var n=0|t.words[i];t.words[i-10]=(4194303&n)<<4|s>>>22,s=n}0==(t.words[i-10]=s>>>=22)&&10<t.length?t.length-=10:t.length-=9}},v.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},s(b,y),s(w,y),s(x,y),x.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,s=67108863&i;i>>>=26,t.words[r]=s,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new v;else if("p224"===t)e=new b;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new x}return g[t]=e},k.prototype._verify1=function(t){i(0===t.negative,"red works only with positives"),i(t.red,"red works only with red numbers")},k.prototype._verify2=function(t,e){i(0==(t.negative|e.negative),"red works only with positives"),i(t.red&&t.red===e.red,"red works only with red numbers")},k.prototype.imod=function(t){return(this.prime?this.prime.ireduce(t):t.umod(this.m))._forceRed(this)},k.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},k.prototype.add=function(t,e){return this._verify2(t,e),0<=(t=t.add(e)).cmp(this.m)&&t.isub(this.m),t._forceRed(this)},k.prototype.iadd=function(t,e){return this._verify2(t,e),0<=(t=t.iadd(e)).cmp(this.m)&&t.isub(this.m),t},k.prototype.sub=function(t,e){return this._verify2(t,e),(t=t.sub(e)).cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},k.prototype.isub=function(t,e){return this._verify2(t,e),(t=t.isub(e)).cmpn(0)<0&&t.iadd(this.m),t},k.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},k.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},k.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},k.prototype.isqr=function(t){return this.imul(t,t.clone())},k.prototype.sqr=function(t){return this.mul(t,t)},k.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(i(e%2==1),3===e)return e=this.m.add(new n(1)).iushrn(2),this.pow(t,e);for(var r=this.m.subn(1),s=0;!r.isZero()&&0===r.andln(1);)s++,r.iushrn(1);i(!r.isZero());for(var a=new n(1).toRed(this),o=a.redNeg(),c=this.m.subn(1).iushrn(1),u=new n(2*(u=this.m.bitLength())*u).toRed(this);0!==this.pow(u,c).cmp(o);)u.redIAdd(o);for(var h=this.pow(u,r),l=this.pow(t,r.addn(1).iushrn(1)),p=this.pow(t,r),f=s;0!==p.cmp(a);){for(var d=p,m=0;0!==d.cmp(a);m++)d=d.redSqr();i(m<f);var g=this.pow(h,new n(1).iushln(f-m-1));l=l.redMul(g),h=g.redSqr(),p=p.redMul(h),f=m}return l},k.prototype.invm=function(t){return 0!==(t=t._invmp(this.m)).negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},k.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var s=r[0],a=0,o=0,c=e.bitLength()%26;for(0===c&&(c=26),i=e.length-1;0<=i;i--){for(var u=e.words[i],h=c-1;0<=h;h--){var l=u>>h&1;s!==r[0]&&(s=this.sqr(s)),0==l&&0===a?o=0:(a=a<<1|l,(4==++o||0===i&&0===h)&&(s=this.mul(s,r[a]),a=o=0))}c=26}return s},k.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},k.prototype.convertFrom=function(t){return(t=t.clone()).red=null,t},n.mont=function(t){return new S(t)},s(S,k),S.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},S.prototype.convertFrom=function(t){return(t=this.imod(t.mul(this.rinv))).red=null,t},S.prototype.imul=function(t,e){return t.isZero()||e.isZero()?(t.words[0]=0,t.length=1,t):(e=(t=t.imul(e)).maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),0<=(e=t=t.isub(e).iushrn(this.shift)).cmp(this.m)?e=t.isub(this.m):t.cmpn(0)<0&&(e=t.iadd(this.m)),e._forceRed(this))},S.prototype.mul=function(t,e){return(t.isZero()||e.isZero()?new n(0):(e=(t=t.mul(e)).maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),0<=(e=t=t.isub(e).iushrn(this.shift)).cmp(this.m)?e=t.isub(this.m):t.cmpn(0)<0&&(e=t.iadd(this.m)),e))._forceRed(this)},S.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(113)(t))},function(t,e){t.exports=class{constructor(t,e){this.prefix=t||"",this.events=e||[],this._subscriptions={}}subscribe(t,e){this._subscriptions[t]||(this._subscriptions[t]=[]),this._subscriptions[t].push(e)}unsubscribe(t,e){this._subscriptions[t]&&-1<(e=this._subscriptions[t].indexOf(e))&&this._subscriptions[t].splice(e,1)}broadcast(t,e){if(this._subscriptions[t])for(var r=0;r<this._subscriptions[t].length;r++)this._subscriptions[t][r].emit(this.prefix+"/"+t,e)}getPublishEvents(){return this.events.reduce((t,e)=>(t.push({name:this.prefix+"/"+e,scope:this,subscribe:this.subscribe.bind(this,e),unsubscribe:this.unsubscribe.bind(this,e)}),t),[])}}},function(t,e,r){"use strict";
|
|
111
|
+
*/const i=r(3),s=r(1),{ContractType:n,ContractTypeExecutable:a}=r(5),o=Object.values(a);r(11);const c=r(232),u=r(191),{opcodes:h,unspendableCodes:l,espicalCodes:p}=r(21);r=new class{async FactoryOfContract(t){t.facade=this,t.hash=t.tx.hash("hex"),t.raw=t.tx.toRaw().toString("hex"),t.coinbaseHeight||(t.coinbaseHeight=t.block?t.block.height:-1);let e={};var r;return t.contract?e=t.contract:t.env&&(r=await t.env.finder(t.tx.inputs[0].prevout.hash),e=this.parseContract(t.tx,r,t.tx.inputs[0].prevout.index)),new(u(e))(e,t)}parseContract(t,e,r){if(e&&1==t.inputs.length&&t.inputs[0].prevout.hash!=i.NULL_HASH&&1==t.outputs.length&&!t.outputs[0].getReturnType(l)){let t=e.outputs[r];if(t&&(e=t.getReturnData([h.OP_PROPEXCHANGE,h.OP_PROPCREATE])))return{oper:n.propFound,ori:e,addr:t.getAddress().toString()}}if(!t.outputs[0])return null;let s=t.outputs[0].getReturnData(p);if(!s||-1==o.indexOf(s.oper))return null;switch(s.oper){case n.coinbase:{let t={sig:s.sig,oper:n.coinbase};Reflect.deleteProperty(s,"sig"),t.data=s,s=t;break}case n.contractCreate:if(2<=t.outputs.length)try{let e=t.outputs[1].getReturnData();e.ori=s,s=e}catch(t){return console.error(t),null}}return s}async checkSum(t,e,r){if(t.txcheckpoint&&t.txcheckpoint.getCheck&&0<t.txcheckpoint.getCheck(e).length)try{var i=t.txcheckpoint.getCheck(e);if(0<i.length){let t=i[Math.floor(Math.random()*i.length)];var n=s.sprintf(t.url,r,0),a=await c.pGetUrl(n);if(t.check(a))return!0}}catch(t){console.log(t.message)}return!1}},t.exports=r},function(t,e){t.exports=require("url")},function(t,e,r){(function(t){!function(t,e){"use strict";function i(t,e){if(!t)throw new Error(e||"Assertion failed")}function s(t,e){function r(){}t.super_=e,r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,(this.red=null)!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var a;"object"==typeof t?t.exports=n:e.BN=n,(n.BN=n).wordSize=26;try{a=r(128).Buffer}catch(t){}function o(t,e,r){for(var i=0,s=Math.min(t.length,r),n=e;n<s;n++){var a=t.charCodeAt(n)-48;i=i<<4|(49<=a&&a<=54?a-49+10:17<=a&&a<=22?a-17+10:15&a)}return i}function c(t,e,r,i){for(var s=0,n=Math.min(t.length,r),a=e;a<n;a++){var o=t.charCodeAt(a)-48;s=s*i+(49<=o?o-49+10:17<=o?o-17+10:o)}return s}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return 0<t.cmp(e)?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);i((e="hex"===e?16:e)===(0|e)&&2<=e&&e<=36);var s=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&s++,16===e?this._parseHex(t,s):this._parseBase(t,e,s),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},n.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(i(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},n.prototype._initArray=function(t,e,r){if(i("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var s,n,a=0;a<this.length;a++)this.words[a]=0;var o=0;if("be"===r)for(a=t.length-1,s=0;0<=a;a-=3)n=t[a]|t[a-1]<<8|t[a-2]<<16,this.words[s]|=n<<o&67108863,this.words[s+1]=n>>>26-o&67108863,26<=(o+=24)&&(o-=26,s++);else if("le"===r)for(s=a=0;a<t.length;a+=3)n=t[a]|t[a+1]<<8|t[a+2]<<16,this.words[s]|=n<<o&67108863,this.words[s+1]=n>>>26-o&67108863,26<=(o+=24)&&(o-=26,s++);return this.strip()},n.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r,i=0;i<this.length;i++)this.words[i]=0;for(var s=0,n=(i=t.length-6,0);e<=i;i-=6)r=o(t,i,i+6),this.words[n]|=r<<s&67108863,this.words[n+1]|=r>>>26-s&4194303,26<=(s+=24)&&(s-=26,n++);i+6!==e&&(r=o(t,e,i+6),this.words[n]|=r<<s&67108863,this.words[n+1]|=r>>>26-s&4194303),this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0];for(var i=0,s=this.length=1;s<=67108863;s*=e)i++;s=s/e|0;for(var n=t.length-r,a=n%--i,o=Math.min(n,n-a)+r,u=0,h=r;h<o;h+=i)u=c(t,h,h+i,e),this.imuln(s),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!=a){var l=1;for(u=c(t,h,t.length,e),h=0;h<a;h++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;1<this.length&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function p(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0,s=(i=(r.length=i)-1|0,(a=(0|t.words[0])*(0|e.words[0]))/67108864|0);r.words[0]=67108863&a;for(var n=1;n<i;n++){for(var a,o=s>>>26,c=67108863&s,u=Math.min(n,e.length-1),h=Math.max(0,n-t.length+1);h<=u;h++)o+=(a=(0|t.words[n-h|0])*(0|e.words[h])+c)/67108864|0,c=67108863&a;r.words[n]=0|c,s=0|o}return 0!==s?r.words[n]=0|s:r.length--,r.strip()}n.prototype.toString=function(t,e){if(e=0|e||1,16===(t=t||10)||"hex"===t){c="";for(var r=0,s=0,n=0;n<this.length;n++){var a=this.words[n],o=(16777215&(a<<r|s)).toString(16),c=0!=(s=a>>>24-r&16777215)||n!==this.length-1?u[6-o.length]+o+c:o+c;26<=(r+=2)&&(r-=26,n--)}for(0!==s&&(c=s.toString(16)+c);c.length%e!=0;)c="0"+c;return 0!==this.negative?"-"+c:c}if(t===(0|t)&&2<=t&&t<=36){var p=h[t],f=l[t];for(c="",(d=this.clone()).negative=0;!d.isZero();){var d,m=d.modn(f).toString(t);c=(d=d.idivn(f)).isZero()?m+c:u[p-m.length]+m+c}for(this.isZero()&&(c="0"+c);c.length%e!=0;)c="0"+c;return 0!==this.negative?"-"+c:c}i(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:2<this.length&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return i(void 0!==a),this.toArrayLike(a,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,r){var s,n,a=this.byteLength(),o=r||Math.max(1,a),c=(r=(i(a<=o,"byte array longer than desired length"),i(0<o,"Requested array length <= 0"),this.strip(),"le"===e),new t(o)),u=this.clone();if(r){for(n=0;!u.isZero();n++)s=u.andln(255),u.iushrn(8),c[n]=s;for(;n<o;n++)c[n]=0}else{for(n=0;n<o-a;n++)c[n]=0;for(n=0;!u.isZero();n++)s=u.andln(255),u.iushrn(8),c[o-n-1]=s}return c},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=0;return 4096<=t&&(e+=13,t>>>=13),64<=t&&(e+=7,t>>>=7),8<=t&&(e+=4,t>>>=4),2<=t&&(e+=2,t>>>=2),e+t},n.prototype._zeroBits=function(t){var e;return 0===t?26:((e=0)==(8191&(t=t))&&(e+=13,t>>>=13),0==(127&t)&&(e+=7,t>>>=7),0==(15&t)&&(e+=4,t>>>=4),0==(3&t)&&(e+=2,t>>>=2),0==(1&t)&&e++,e)},n.prototype.bitLength=function(){var t=this.words[this.length-1];t=this._countBits(t);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return i(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){for(var e=this.length>t.length?t:this,r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return i(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){for(var e,r=this.length>t.length?(e=this,t):(e=t,this),i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return i(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){i("number"==typeof t&&0<=t);var e=0|Math.ceil(t/26);t%=26;this._expand(e),0<t&&e--;for(var r=0;r<e;r++)this.words[r]=67108863&~this.words[r];return 0<t&&(this.words[r]=~this.words[r]&67108863>>26-t),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){i("number"==typeof t&&0<=t);var r=t/26|0;t%=26;return this._expand(1+r),this.words[r]=e?this.words[r]|1<<t:this.words[r]&~(1<<t),this.strip()},n.prototype.iadd=function(t){var e,r;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();for(var i=this.length>t.length?(r=this,t):(r=t,this),s=0,n=0;n<i.length;n++)e=(0|r.words[n])+(0|i.words[n])+s,this.words[n]=67108863&e,s=e>>>26;for(;0!==s&&n<r.length;n++)e=(0|r.words[n])+s,this.words[n]=67108863&e,s=e>>>26;if(this.length=r.length,0!==s)this.words[this.length]=s,this.length++;else if(r!==this)for(;n<r.length;n++)this.words[n]=r.words[n];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){var e;if(0!==t.negative)return t.negative=0,e=this.iadd(t),t.negative=1,e._normSign();if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;for(var s=0<i?(r=this,t):(r=t,this),n=0,a=0;a<s.length;a++)n=(e=(0|r.words[a])-(0|s.words[a])+n)>>26,this.words[a]=67108863&e;for(;0!==n&&a<r.length;a++)n=(e=(0|r.words[a])+n)>>26,this.words[a]=67108863&e;if(0===n&&a<r.length&&r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this.length=Math.max(this.length,a),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var f=function(t,e,r){var i,s=t.words,n=e.words,a=r.words,o=8191&(c=0|s[0]),c=c>>>13,u=8191&(h=0|s[1]),h=h>>>13,l=8191&(p=0|s[2]),p=p>>>13,f=8191&(d=0|s[3]),d=d>>>13,m=8191&(g=0|s[4]),g=g>>>13,y=8191&(v=0|s[5]),v=v>>>13,b=8191&(w=0|s[6]),w=w>>>13,x=8191&(k=0|s[7]),k=k>>>13,S=8191&(E=0|s[8]),E=E>>>13,_=8191&(s=0|s[9]),A=(s=s>>>13,8191&(R=0|n[0])),R=R>>>13,I=8191&(j=0|n[1]),j=j>>>13,C=8191&(P=0|n[2]),P=P>>>13,O=8191&(T=0|n[3]),T=T>>>13,F=8191&(B=0|n[4]),B=B>>>13,N=8191&(D=0|n[5]),D=D>>>13,L=8191&(H=0|n[6]),H=H>>>13,z=8191&(M=0|n[7]),M=M>>>13,U=8191&(q=0|n[8]),q=q>>>13,V=8191&(n=0|n[9]),K=(n=n>>>13,e=(r.negative=t.negative^e.negative,r.length=19,(0+Math.imul(o,A)|0)+((8191&(t=Math.imul(o,R)+Math.imul(c,A)|0))<<13)|0),(Math.imul(c,R)+(t>>>13)|0)+(e>>>26)|0);e&=67108863,i=Math.imul(u,A),t=Math.imul(u,R)+Math.imul(h,A)|0,W=Math.imul(h,R);var W,G=(K+(i+Math.imul(o,I)|0)|0)+((8191&(t=(t+Math.imul(o,j)|0)+Math.imul(c,I)|0))<<13)|0,$=(K=((W+Math.imul(c,j)|0)+(t>>>13)|0)+(G>>>26)|0,G&=67108863,i=Math.imul(l,A),t=Math.imul(l,R)+Math.imul(p,A)|0,W=Math.imul(p,R),i=i+Math.imul(u,I)|0,t=(t+Math.imul(u,j)|0)+Math.imul(h,I)|0,W=W+Math.imul(h,j)|0,(K+(i+Math.imul(o,C)|0)|0)+((8191&(t=(t+Math.imul(o,P)|0)+Math.imul(c,C)|0))<<13)|0),Y=(K=((W+Math.imul(c,P)|0)+(t>>>13)|0)+($>>>26)|0,$&=67108863,i=Math.imul(f,A),t=Math.imul(f,R)+Math.imul(d,A)|0,W=Math.imul(d,R),i=i+Math.imul(l,I)|0,t=(t+Math.imul(l,j)|0)+Math.imul(p,I)|0,W=W+Math.imul(p,j)|0,i=i+Math.imul(u,C)|0,t=(t+Math.imul(u,P)|0)+Math.imul(h,C)|0,W=W+Math.imul(h,P)|0,(K+(i+Math.imul(o,O)|0)|0)+((8191&(t=(t+Math.imul(o,T)|0)+Math.imul(c,O)|0))<<13)|0),X=(K=((W+Math.imul(c,T)|0)+(t>>>13)|0)+(Y>>>26)|0,Y&=67108863,i=Math.imul(m,A),t=Math.imul(m,R)+Math.imul(g,A)|0,W=Math.imul(g,R),i=i+Math.imul(f,I)|0,t=(t+Math.imul(f,j)|0)+Math.imul(d,I)|0,W=W+Math.imul(d,j)|0,i=i+Math.imul(l,C)|0,t=(t+Math.imul(l,P)|0)+Math.imul(p,C)|0,W=W+Math.imul(p,P)|0,i=i+Math.imul(u,O)|0,t=(t+Math.imul(u,T)|0)+Math.imul(h,O)|0,W=W+Math.imul(h,T)|0,(K+(i+Math.imul(o,F)|0)|0)+((8191&(t=(t+Math.imul(o,B)|0)+Math.imul(c,F)|0))<<13)|0),J=(K=((W+Math.imul(c,B)|0)+(t>>>13)|0)+(X>>>26)|0,X&=67108863,i=Math.imul(y,A),t=Math.imul(y,R)+Math.imul(v,A)|0,W=Math.imul(v,R),i=i+Math.imul(m,I)|0,t=(t+Math.imul(m,j)|0)+Math.imul(g,I)|0,W=W+Math.imul(g,j)|0,i=i+Math.imul(f,C)|0,t=(t+Math.imul(f,P)|0)+Math.imul(d,C)|0,W=W+Math.imul(d,P)|0,i=i+Math.imul(l,O)|0,t=(t+Math.imul(l,T)|0)+Math.imul(p,O)|0,W=W+Math.imul(p,T)|0,i=i+Math.imul(u,F)|0,t=(t+Math.imul(u,B)|0)+Math.imul(h,F)|0,W=W+Math.imul(h,B)|0,(K+(i+Math.imul(o,N)|0)|0)+((8191&(t=(t+Math.imul(o,D)|0)+Math.imul(c,N)|0))<<13)|0),Z=(K=((W+Math.imul(c,D)|0)+(t>>>13)|0)+(J>>>26)|0,J&=67108863,i=Math.imul(b,A),t=Math.imul(b,R)+Math.imul(w,A)|0,W=Math.imul(w,R),i=i+Math.imul(y,I)|0,t=(t+Math.imul(y,j)|0)+Math.imul(v,I)|0,W=W+Math.imul(v,j)|0,i=i+Math.imul(m,C)|0,t=(t+Math.imul(m,P)|0)+Math.imul(g,C)|0,W=W+Math.imul(g,P)|0,i=i+Math.imul(f,O)|0,t=(t+Math.imul(f,T)|0)+Math.imul(d,O)|0,W=W+Math.imul(d,T)|0,i=i+Math.imul(l,F)|0,t=(t+Math.imul(l,B)|0)+Math.imul(p,F)|0,W=W+Math.imul(p,B)|0,i=i+Math.imul(u,N)|0,t=(t+Math.imul(u,D)|0)+Math.imul(h,N)|0,W=W+Math.imul(h,D)|0,(K+(i+Math.imul(o,L)|0)|0)+((8191&(t=(t+Math.imul(o,H)|0)+Math.imul(c,L)|0))<<13)|0),Q=(K=((W+Math.imul(c,H)|0)+(t>>>13)|0)+(Z>>>26)|0,Z&=67108863,i=Math.imul(x,A),t=Math.imul(x,R)+Math.imul(k,A)|0,W=Math.imul(k,R),i=i+Math.imul(b,I)|0,t=(t+Math.imul(b,j)|0)+Math.imul(w,I)|0,W=W+Math.imul(w,j)|0,i=i+Math.imul(y,C)|0,t=(t+Math.imul(y,P)|0)+Math.imul(v,C)|0,W=W+Math.imul(v,P)|0,i=i+Math.imul(m,O)|0,t=(t+Math.imul(m,T)|0)+Math.imul(g,O)|0,W=W+Math.imul(g,T)|0,i=i+Math.imul(f,F)|0,t=(t+Math.imul(f,B)|0)+Math.imul(d,F)|0,W=W+Math.imul(d,B)|0,i=i+Math.imul(l,N)|0,t=(t+Math.imul(l,D)|0)+Math.imul(p,N)|0,W=W+Math.imul(p,D)|0,i=i+Math.imul(u,L)|0,t=(t+Math.imul(u,H)|0)+Math.imul(h,L)|0,W=W+Math.imul(h,H)|0,(K+(i+Math.imul(o,z)|0)|0)+((8191&(t=(t+Math.imul(o,M)|0)+Math.imul(c,z)|0))<<13)|0),tt=(K=((W+Math.imul(c,M)|0)+(t>>>13)|0)+(Q>>>26)|0,Q&=67108863,i=Math.imul(S,A),t=Math.imul(S,R)+Math.imul(E,A)|0,W=Math.imul(E,R),i=i+Math.imul(x,I)|0,t=(t+Math.imul(x,j)|0)+Math.imul(k,I)|0,W=W+Math.imul(k,j)|0,i=i+Math.imul(b,C)|0,t=(t+Math.imul(b,P)|0)+Math.imul(w,C)|0,W=W+Math.imul(w,P)|0,i=i+Math.imul(y,O)|0,t=(t+Math.imul(y,T)|0)+Math.imul(v,O)|0,W=W+Math.imul(v,T)|0,i=i+Math.imul(m,F)|0,t=(t+Math.imul(m,B)|0)+Math.imul(g,F)|0,W=W+Math.imul(g,B)|0,i=i+Math.imul(f,N)|0,t=(t+Math.imul(f,D)|0)+Math.imul(d,N)|0,W=W+Math.imul(d,D)|0,i=i+Math.imul(l,L)|0,t=(t+Math.imul(l,H)|0)+Math.imul(p,L)|0,W=W+Math.imul(p,H)|0,i=i+Math.imul(u,z)|0,t=(t+Math.imul(u,M)|0)+Math.imul(h,z)|0,W=W+Math.imul(h,M)|0,(K+(i+Math.imul(o,U)|0)|0)+((8191&(t=(t+Math.imul(o,q)|0)+Math.imul(c,U)|0))<<13)|0);K=((W+Math.imul(c,q)|0)+(t>>>13)|0)+(tt>>>26)|0,tt&=67108863,i=Math.imul(_,A),t=Math.imul(_,R)+Math.imul(s,A)|0,W=Math.imul(s,R),i=i+Math.imul(S,I)|0,t=(t+Math.imul(S,j)|0)+Math.imul(E,I)|0,W=W+Math.imul(E,j)|0,i=i+Math.imul(x,C)|0,t=(t+Math.imul(x,P)|0)+Math.imul(k,C)|0,W=W+Math.imul(k,P)|0,i=i+Math.imul(b,O)|0,t=(t+Math.imul(b,T)|0)+Math.imul(w,O)|0,W=W+Math.imul(w,T)|0,i=i+Math.imul(y,F)|0,t=(t+Math.imul(y,B)|0)+Math.imul(v,F)|0,W=W+Math.imul(v,B)|0,i=i+Math.imul(m,N)|0,t=(t+Math.imul(m,D)|0)+Math.imul(g,N)|0,W=W+Math.imul(g,D)|0,i=i+Math.imul(f,L)|0,t=(t+Math.imul(f,H)|0)+Math.imul(d,L)|0,W=W+Math.imul(d,H)|0,i=i+Math.imul(l,z)|0,t=(t+Math.imul(l,M)|0)+Math.imul(p,z)|0,W=W+Math.imul(p,M)|0,i=i+Math.imul(u,U)|0,t=(t+Math.imul(u,q)|0)+Math.imul(h,U)|0,W=W+Math.imul(h,q)|0,A=(K+(i+Math.imul(o,V)|0)|0)+((8191&(t=(t+Math.imul(o,n)|0)+Math.imul(c,V)|0))<<13)|0,K=((W+Math.imul(c,n)|0)+(t>>>13)|0)+(A>>>26)|0,A&=67108863,i=Math.imul(_,I),t=Math.imul(_,j)+Math.imul(s,I)|0,W=Math.imul(s,j),i=i+Math.imul(S,C)|0,t=(t+Math.imul(S,P)|0)+Math.imul(E,C)|0,W=W+Math.imul(E,P)|0,i=i+Math.imul(x,O)|0,t=(t+Math.imul(x,T)|0)+Math.imul(k,O)|0,W=W+Math.imul(k,T)|0,i=i+Math.imul(b,F)|0,t=(t+Math.imul(b,B)|0)+Math.imul(w,F)|0,W=W+Math.imul(w,B)|0,i=i+Math.imul(y,N)|0,t=(t+Math.imul(y,D)|0)+Math.imul(v,N)|0,W=W+Math.imul(v,D)|0,i=i+Math.imul(m,L)|0,t=(t+Math.imul(m,H)|0)+Math.imul(g,L)|0,W=W+Math.imul(g,H)|0,i=i+Math.imul(f,z)|0,t=(t+Math.imul(f,M)|0)+Math.imul(d,z)|0,W=W+Math.imul(d,M)|0,i=i+Math.imul(l,U)|0,t=(t+Math.imul(l,q)|0)+Math.imul(p,U)|0,W=W+Math.imul(p,q)|0,R=(K+(i+Math.imul(u,V)|0)|0)+((8191&(t=(t+Math.imul(u,n)|0)+Math.imul(h,V)|0))<<13)|0,K=((W+Math.imul(h,n)|0)+(t>>>13)|0)+(R>>>26)|0,R&=67108863,i=Math.imul(_,C),t=Math.imul(_,P)+Math.imul(s,C)|0,W=Math.imul(s,P),i=i+Math.imul(S,O)|0,t=(t+Math.imul(S,T)|0)+Math.imul(E,O)|0,W=W+Math.imul(E,T)|0,i=i+Math.imul(x,F)|0,t=(t+Math.imul(x,B)|0)+Math.imul(k,F)|0,W=W+Math.imul(k,B)|0,i=i+Math.imul(b,N)|0,t=(t+Math.imul(b,D)|0)+Math.imul(w,N)|0,W=W+Math.imul(w,D)|0,i=i+Math.imul(y,L)|0,t=(t+Math.imul(y,H)|0)+Math.imul(v,L)|0,W=W+Math.imul(v,H)|0,i=i+Math.imul(m,z)|0,t=(t+Math.imul(m,M)|0)+Math.imul(g,z)|0,W=W+Math.imul(g,M)|0,i=i+Math.imul(f,U)|0,t=(t+Math.imul(f,q)|0)+Math.imul(d,U)|0,W=W+Math.imul(d,q)|0,o=(K+(i+Math.imul(l,V)|0)|0)+((8191&(t=(t+Math.imul(l,n)|0)+Math.imul(p,V)|0))<<13)|0,K=((W+Math.imul(p,n)|0)+(t>>>13)|0)+(o>>>26)|0,o&=67108863,i=Math.imul(_,O),t=Math.imul(_,T)+Math.imul(s,O)|0,W=Math.imul(s,T),i=i+Math.imul(S,F)|0,t=(t+Math.imul(S,B)|0)+Math.imul(E,F)|0,W=W+Math.imul(E,B)|0,i=i+Math.imul(x,N)|0,t=(t+Math.imul(x,D)|0)+Math.imul(k,N)|0,W=W+Math.imul(k,D)|0,i=i+Math.imul(b,L)|0,t=(t+Math.imul(b,H)|0)+Math.imul(w,L)|0,W=W+Math.imul(w,H)|0,i=i+Math.imul(y,z)|0,t=(t+Math.imul(y,M)|0)+Math.imul(v,z)|0,W=W+Math.imul(v,M)|0,i=i+Math.imul(m,U)|0,t=(t+Math.imul(m,q)|0)+Math.imul(g,U)|0,W=W+Math.imul(g,q)|0,c=(K+(i+Math.imul(f,V)|0)|0)+((8191&(t=(t+Math.imul(f,n)|0)+Math.imul(d,V)|0))<<13)|0,K=((W+Math.imul(d,n)|0)+(t>>>13)|0)+(c>>>26)|0,c&=67108863,i=Math.imul(_,F),t=Math.imul(_,B)+Math.imul(s,F)|0,W=Math.imul(s,B),i=i+Math.imul(S,N)|0,t=(t+Math.imul(S,D)|0)+Math.imul(E,N)|0,W=W+Math.imul(E,D)|0,i=i+Math.imul(x,L)|0,t=(t+Math.imul(x,H)|0)+Math.imul(k,L)|0,W=W+Math.imul(k,H)|0,i=i+Math.imul(b,z)|0,t=(t+Math.imul(b,M)|0)+Math.imul(w,z)|0,W=W+Math.imul(w,M)|0,i=i+Math.imul(y,U)|0,t=(t+Math.imul(y,q)|0)+Math.imul(v,U)|0,W=W+Math.imul(v,q)|0,I=(K+(i+Math.imul(m,V)|0)|0)+((8191&(t=(t+Math.imul(m,n)|0)+Math.imul(g,V)|0))<<13)|0,K=((W+Math.imul(g,n)|0)+(t>>>13)|0)+(I>>>26)|0,I&=67108863,i=Math.imul(_,N),t=Math.imul(_,D)+Math.imul(s,N)|0,W=Math.imul(s,D),i=i+Math.imul(S,L)|0,t=(t+Math.imul(S,H)|0)+Math.imul(E,L)|0,W=W+Math.imul(E,H)|0,i=i+Math.imul(x,z)|0,t=(t+Math.imul(x,M)|0)+Math.imul(k,z)|0,W=W+Math.imul(k,M)|0,i=i+Math.imul(b,U)|0,t=(t+Math.imul(b,q)|0)+Math.imul(w,U)|0,W=W+Math.imul(w,q)|0,j=(K+(i+Math.imul(y,V)|0)|0)+((8191&(t=(t+Math.imul(y,n)|0)+Math.imul(v,V)|0))<<13)|0,K=((W+Math.imul(v,n)|0)+(t>>>13)|0)+(j>>>26)|0,j&=67108863,i=Math.imul(_,L),t=Math.imul(_,H)+Math.imul(s,L)|0,W=Math.imul(s,H),i=i+Math.imul(S,z)|0,t=(t+Math.imul(S,M)|0)+Math.imul(E,z)|0,W=W+Math.imul(E,M)|0,i=i+Math.imul(x,U)|0,t=(t+Math.imul(x,q)|0)+Math.imul(k,U)|0,W=W+Math.imul(k,q)|0,u=(K+(i+Math.imul(b,V)|0)|0)+((8191&(t=(t+Math.imul(b,n)|0)+Math.imul(w,V)|0))<<13)|0,K=((W+Math.imul(w,n)|0)+(t>>>13)|0)+(u>>>26)|0,u&=67108863,i=Math.imul(_,z),t=Math.imul(_,M)+Math.imul(s,z)|0,W=Math.imul(s,M),i=i+Math.imul(S,U)|0,t=(t+Math.imul(S,q)|0)+Math.imul(E,U)|0,W=W+Math.imul(E,q)|0,h=(K+(i+Math.imul(x,V)|0)|0)+((8191&(t=(t+Math.imul(x,n)|0)+Math.imul(k,V)|0))<<13)|0,K=((W+Math.imul(k,n)|0)+(t>>>13)|0)+(h>>>26)|0,h&=67108863,i=Math.imul(_,U),t=Math.imul(_,q)+Math.imul(s,U)|0,W=Math.imul(s,q),C=(K+(i+Math.imul(S,V)|0)|0)+((8191&(t=(t+Math.imul(S,n)|0)+Math.imul(E,V)|0))<<13)|0,K=((W+Math.imul(E,n)|0)+(t>>>13)|0)+(C>>>26)|0,C&=67108863,P=(K+Math.imul(_,V)|0)+((8191&(t=Math.imul(_,n)+Math.imul(s,V)|0))<<13)|0;return K=(Math.imul(s,n)+(t>>>13)|0)+(P>>>26)|0,P&=67108863,a[0]=e,a[1]=G,a[2]=$,a[3]=Y,a[4]=X,a[5]=J,a[6]=Z,a[7]=Q,a[8]=tt,a[9]=A,a[10]=R,a[11]=o,a[12]=c,a[13]=I,a[14]=j,a[15]=u,a[16]=h,a[17]=C,a[18]=P,0!=K&&(a[19]=K,r.length++),r};function d(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(f=p),n.prototype.mulTo=function(t,e){var r=this.length+t.length;return r=(10===this.length&&10===t.length?f:r<63?p:r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,s=0,n=0;n<r.length-1;n++){for(var a=s,o=(s=0,67108863&i),c=Math.min(n,e.length-1),u=Math.max(0,n-t.length+1);u<=c;u++){var h,l=(0|t.words[n-u])*(0|e.words[u]);o=67108863&(h=(67108863&l)+o|0);s+=(a=(a=a+(l/67108864|0)|0)+(h>>>26)|0)>>>26,a&=67108863}r.words[n]=o,i=a,a=s}return 0!==i?r.words[n]=i:r.length--,r.strip()}:d)(this,t,e)},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,s=0;s<e;s++)i|=(1&t)<<e-s-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,s,n){for(var a=0;a<n;a++)i[a]=e[t[a]],s[a]=r[t[a]]},m.prototype.transform=function(t,e,r,i,s,n){this.permute(n,t,e,r,i,s);for(var a=1;a<s;a<<=1)for(var o=a<<1,c=Math.cos(2*Math.PI/o),u=Math.sin(2*Math.PI/o),h=0;h<s;h+=o)for(var l=c,p=u,f=0;f<a;f++){var d=r[h+f],m=i[h+f],g=r[h+f+a],y=l*g-p*(v=i[h+f+a]),v=l*v+p*g;r[h+f]=d+(g=y),i[h+f]=m+v,r[h+f+a]=d-g,i[h+f+a]=m-v,f!==o&&(y=c*l-u*p,p=c*p+u*l,l=y)}},m.prototype.guessLen13b=function(t,e){e=1&(i=1|Math.max(e,t));for(var r=0,i=i/2|0;i;i>>>=1)r++;return 1<<r+1+e},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var s=t[i];t[i]=t[r-i-1],t[r-i-1]=s,s=e[i],e[i]=-e[r-i-1],e[r-i-1]=-s}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var s=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&s,r=s<67108864?0:s/67108864|0}return t},m.prototype.convert13b=function(t,e,r,s){for(var n=0,a=0;a<e;a++)n+=0|t[a],r[2*a]=8191&n,r[2*a+1]=8191&(n>>>=13),n>>>=13;for(a=2*e;a<s;++a)r[a]=0;i(0===n),i(0==(-8192&n))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),s=this.makeRBT(i),n=this.stub(i),a=new Array(i),o=new Array(i),c=new Array(i),u=new Array(i),h=new Array(i),l=new Array(i),p=r.words;p.length=i,this.convert13b(t.words,t.length,a,i),this.convert13b(e.words,e.length,u,i),this.transform(a,n,o,c,i,s),this.transform(u,n,h,l,i,s);for(var f=0;f<i;f++){var d=o[f]*h[f]-c[f]*l[f];c[f]=o[f]*l[f]+c[f]*h[f],o[f]=d}return this.conjugate(o,c,i),this.transform(o,c,p,n,i,s),this.conjugate(p,n,i),this.normalize13b(p,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),d(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){i("number"==typeof t),i(t<67108864);for(var e=0,r=0;r<this.length;r++){var s=(0|this.words[r])*t,n=(67108863&s)+(67108863&e);e=(e>>=26)+(s/67108864|0)+(n>>>26);this.words[r]=67108863&n}return 0!==e&&(this.words[r]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r%26;e[r]=(t.words[r/26|0]&1<<i)>>>i}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var s=r.sqr();i<e.length;i++,s=s.sqr())0!==e[i]&&(r=r.mul(s));return r},n.prototype.iushln=function(t){i("number"==typeof t&&0<=t);var e=t%26,r=(t-e)/26,s=67108863>>>26-e<<26-e;if(0!=e){for(var n=0,a=0;a<this.length;a++){var o=this.words[a]&s,c=(0|this.words[a])-o<<e;this.words[a]=c|n,n=o>>>26-e}n&&(this.words[a]=n,this.length++)}if(0!=r){for(a=this.length-1;0<=a;a--)this.words[a+r]=this.words[a];for(a=0;a<r;a++)this.words[a]=0;this.length+=r}return this.strip()},n.prototype.ishln=function(t){return i(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,r){i("number"==typeof t&&0<=t),s=e?(e-e%26)/26:0;var s,n=t%26,a=Math.min((t-n)/26,this.length),o=67108863^67108863>>>n<<n,c=r;if(s-=a,s=Math.max(0,s),c){for(var u=0;u<a;u++)c.words[u]=this.words[u];c.length=a}if(0!==a)if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;0<=u&&(0!==h||s<=u);u--){var l=0|this.words[u];this.words[u]=h<<26-n|l>>>n,h=l&o}return c&&0!==h&&(c.words[c.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,r){return i(0===this.negative),this.iushrn(t,e,r)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){i("number"==typeof t&&0<=t);var e=t%26;t=(t-e)/26;return!(this.length<=t||!(this.words[t]&1<<e))},n.prototype.imaskn=function(t){i("number"==typeof t&&0<=t);var e=t%26;t=(t-e)/26;return i(0===this.negative,"imaskn works only with positive numbers"),this.length<=t?this:(0!=e&&t++,this.length=Math.min(t,this.length),0!=e&&(this.words[this.length-1]&=67108863^67108863>>>e<<e),this.strip())},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return i("number"==typeof t),i(t<67108864),t<0?this.isubn(-t):0!==this.negative?(1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0):(this.negative=0,this.isubn(t),this.negative=1),this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&67108864<=this.words[e];e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(i("number"==typeof t),i(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,--this.words[e+1];return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,r){for(var s=t.length+r,n=(this._expand(s),0),a=0;a<t.length;a++){var o=(0|this.words[a+r])+n,c=(0|t.words[a])*e;n=((o-=67108863&c)>>26)-(c/67108864|0);this.words[a+r]=67108863&o}for(;a<this.length-r;a++)n=(o=(0|this.words[a+r])+n)>>26,this.words[a+r]=67108863&o;if(0!==n){for(i(-1===n),a=n=0;a<this.length;a++)n=(o=-(0|this.words[a])+n)>>26,this.words[a]=67108863&o;this.negative=1}return this.strip()},n.prototype._wordDiv=function(t,e){this.length,t.length;var r,i=this.clone(),s=t,a=0|s.words[s.length-1],o=(0!=(t=26-this._countBits(a))&&(s=s.ushln(t),i.iushln(t),a=0|s.words[s.length-1]),i.length-s.length);if("mod"!==e){(r=new n(null)).length=1+o,r.words=new Array(r.length);for(var c=0;c<r.length;c++)r.words[c]=0}var u=i.clone()._ishlnsubmul(s,1,o);0===u.negative&&(i=u,r&&(r.words[o]=1));for(var h=o-1;0<=h;h--){var l=67108864*(0|i.words[s.length+h])+(0|i.words[s.length+h-1]);l=Math.min(l/a|0,67108863);for(i._ishlnsubmul(s,l,h);0!==i.negative;)l--,i.negative=0,i._ishlnsubmul(s,1,h),i.isZero()||(i.negative^=1);r&&(r.words[h]=l)}return r&&r.strip(),i.strip(),"div"!==e&&0!=t&&i.iushrn(t),{div:r||null,mod:i}},n.prototype.divmod=function(t,e,r){var s,a,o;return i(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(o=this.neg().divmod(t,e),"mod"!==e&&(s=o.div.neg()),"div"!==e&&(a=o.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:s,mod:a}):0===this.negative&&0!==t.negative?(o=this.divmod(t.neg(),e),{div:s="mod"!==e?o.div.neg():s,mod:o.mod}):0!=(this.negative&t.negative)?(o=this.neg().divmod(t.neg(),e),"div"!==e&&(a=o.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:o.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e)},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e,r,i=this.divmod(t);return i.mod.isZero()||(r=0!==i.div.negative?i.mod.isub(t):i.mod,e=t.ushrn(1),t=t.andln(1),(r=r.cmp(e))<0||1===t&&0===r)?i.div:0!==i.div.negative?i.div.isubn(1):i.div.iaddn(1)},n.prototype.modn=function(t){i(t<=67108863);for(var e=(1<<26)%t,r=0,s=this.length-1;0<=s;s--)r=(e*r+(0|this.words[s]))%t;return r},n.prototype.idivn=function(t){i(t<=67108863);for(var e=0,r=this.length-1;0<=r;r--){var s=(0|this.words[r])+67108864*e;this.words[r]=s/t|0,e=s%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){i(0===t.negative),i(!t.isZero());for(var e=this,r=t.clone(),s=(e=0!==e.negative?e.umod(t):e.clone(),new n(1)),a=new n(0),o=new n(0),c=new n(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),l=e.clone();!e.isZero();){for(var p=0,f=1;0==(e.words[0]&f)&&p<26;++p,f<<=1);if(0<p)for(e.iushrn(p);0<p--;)(s.isOdd()||a.isOdd())&&(s.iadd(h),a.isub(l)),s.iushrn(1),a.iushrn(1);for(var d=0,m=1;0==(r.words[0]&m)&&d<26;++d,m<<=1);if(0<d)for(r.iushrn(d);0<d--;)(o.isOdd()||c.isOdd())&&(o.iadd(h),c.isub(l)),o.iushrn(1),c.iushrn(1);0<=e.cmp(r)?(e.isub(r),s.isub(o),a.isub(c)):(r.isub(e),o.isub(s),c.isub(a))}return{a:o,b:c,gcd:r.iushln(u)}},n.prototype._invmp=function(t){i(0===t.negative),i(!t.isZero());for(var e,r=this,s=t.clone(),a=(r=0!==r.negative?r.umod(t):r.clone(),new n(1)),o=new n(0),c=s.clone();0<r.cmpn(1)&&0<s.cmpn(1);){for(var u=0,h=1;0==(r.words[0]&h)&&u<26;++u,h<<=1);if(0<u)for(r.iushrn(u);0<u--;)a.isOdd()&&a.iadd(c),a.iushrn(1);for(var l=0,p=1;0==(s.words[0]&p)&&l<26;++l,p<<=1);if(0<l)for(s.iushrn(l);0<l--;)o.isOdd()&&o.iadd(c),o.iushrn(1);0<=r.cmp(s)?(r.isub(s),a.isub(o)):(s.isub(r),o.isub(a))}return(e=0===r.cmpn(1)?a:o).cmpn(0)<0&&e.iadd(t),e},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0;for(var i=r.negative=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var s=e.cmp(r);if(s<0){var n=e;e=r,r=n}else if(0===s||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){i("number"==typeof t);t=(t-(e=t%26))/26;var e=1<<e;if(this.length<=t)this._expand(1+t),this.words[t]|=e;else{for(var r=e,s=t;0!==r&&s<this.length;s++){var n=0|this.words[s];r=(n+=r)>>>26;n&=67108863,this.words[s]=n}0!==r&&(this.words[s]=r,this.length++)}return this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e=t<0;return 0===this.negative||e?0===this.negative&&e?1:(this.strip(),e=1<this.length?1:(i((t=e?-t:t)<=67108863,"Number is too big"),(e=0|this.words[0])===t?0:e<t?-1:1),0!==this.negative?0|-e:e):-1},n.prototype.cmp=function(t){return 0!==this.negative&&0===t.negative?-1:0===this.negative&&0!==t.negative?1:(t=this.ucmp(t),0!==this.negative?0|-t:t)},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;0<=r;r--){var i=0|this.words[r],s=0|t.words[r];if(i!=s){i<s?e=-1:s<i&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return 0<=this.cmpn(t)},n.prototype.gte=function(t){return 0<=this.cmp(t)},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new k(t)},n.prototype.toRed=function(t){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return i(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return i(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function y(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function x(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function k(t){var e;"string"==typeof t?(e=n._prime(t),this.m=e.p,this.prime=e):(i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null)}function S(t){k.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},y.prototype.ireduce=function(t){for(var e,r=t;this.split(r,this.tmp),(e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength())>this.n;);return 0===(t=e<this.n?-1:r.ucmp(this.p))?(r.words[0]=0,r.length=1):0<t?r.isub(this.p):r.strip(),r},y.prototype.split=function(t,e){t.iushrn(this.n,0,e)},y.prototype.imulK=function(t){return t.imul(this.k)},s(v,y),v.prototype.split=function(t,e){for(var r=Math.min(t.length,9),i=0;i<r;i++)e.words[i]=t.words[i];if(e.length=r,t.length<=9)t.words[0]=0,t.length=1;else{var s=t.words[9];for(e.words[e.length++]=4194303&s,i=10;i<t.length;i++){var n=0|t.words[i];t.words[i-10]=(4194303&n)<<4|s>>>22,s=n}0==(t.words[i-10]=s>>>=22)&&10<t.length?t.length-=10:t.length-=9}},v.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},s(b,y),s(w,y),s(x,y),x.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,s=67108863&i;i>>>=26,t.words[r]=s,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new v;else if("p224"===t)e=new b;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new x}return g[t]=e},k.prototype._verify1=function(t){i(0===t.negative,"red works only with positives"),i(t.red,"red works only with red numbers")},k.prototype._verify2=function(t,e){i(0==(t.negative|e.negative),"red works only with positives"),i(t.red&&t.red===e.red,"red works only with red numbers")},k.prototype.imod=function(t){return(this.prime?this.prime.ireduce(t):t.umod(this.m))._forceRed(this)},k.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},k.prototype.add=function(t,e){return this._verify2(t,e),0<=(t=t.add(e)).cmp(this.m)&&t.isub(this.m),t._forceRed(this)},k.prototype.iadd=function(t,e){return this._verify2(t,e),0<=(t=t.iadd(e)).cmp(this.m)&&t.isub(this.m),t},k.prototype.sub=function(t,e){return this._verify2(t,e),(t=t.sub(e)).cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},k.prototype.isub=function(t,e){return this._verify2(t,e),(t=t.isub(e)).cmpn(0)<0&&t.iadd(this.m),t},k.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},k.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},k.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},k.prototype.isqr=function(t){return this.imul(t,t.clone())},k.prototype.sqr=function(t){return this.mul(t,t)},k.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(i(e%2==1),3===e)return e=this.m.add(new n(1)).iushrn(2),this.pow(t,e);for(var r=this.m.subn(1),s=0;!r.isZero()&&0===r.andln(1);)s++,r.iushrn(1);i(!r.isZero());for(var a=new n(1).toRed(this),o=a.redNeg(),c=this.m.subn(1).iushrn(1),u=new n(2*(u=this.m.bitLength())*u).toRed(this);0!==this.pow(u,c).cmp(o);)u.redIAdd(o);for(var h=this.pow(u,r),l=this.pow(t,r.addn(1).iushrn(1)),p=this.pow(t,r),f=s;0!==p.cmp(a);){for(var d=p,m=0;0!==d.cmp(a);m++)d=d.redSqr();i(m<f);var g=this.pow(h,new n(1).iushln(f-m-1));l=l.redMul(g),h=g.redSqr(),p=p.redMul(h),f=m}return l},k.prototype.invm=function(t){return 0!==(t=t._invmp(this.m)).negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},k.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var s=r[0],a=0,o=0,c=e.bitLength()%26;for(0===c&&(c=26),i=e.length-1;0<=i;i--){for(var u=e.words[i],h=c-1;0<=h;h--){var l=u>>h&1;s!==r[0]&&(s=this.sqr(s)),0==l&&0===a?o=0:(a=a<<1|l,(4==++o||0===i&&0===h)&&(s=this.mul(s,r[a]),a=o=0))}c=26}return s},k.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},k.prototype.convertFrom=function(t){return(t=t.clone()).red=null,t},n.mont=function(t){return new S(t)},s(S,k),S.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},S.prototype.convertFrom=function(t){return(t=this.imod(t.mul(this.rinv))).red=null,t},S.prototype.imul=function(t,e){return t.isZero()||e.isZero()?(t.words[0]=0,t.length=1,t):(e=(t=t.imul(e)).maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),0<=(e=t=t.isub(e).iushrn(this.shift)).cmp(this.m)?e=t.isub(this.m):t.cmpn(0)<0&&(e=t.iadd(this.m)),e._forceRed(this))},S.prototype.mul=function(t,e){return(t.isZero()||e.isZero()?new n(0):(e=(t=t.mul(e)).maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),0<=(e=t=t.isub(e).iushrn(this.shift)).cmp(this.m)?e=t.isub(this.m):t.cmpn(0)<0&&(e=t.iadd(this.m)),e))._forceRed(this)},S.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(113)(t))},function(t,e){t.exports=class{constructor(t,e){this.prefix=t||"",this.events=e||[],this._subscriptions={}}subscribe(t,e){this._subscriptions[t]||(this._subscriptions[t]=[]),this._subscriptions[t].push(e)}unsubscribe(t,e){this._subscriptions[t]&&-1<(e=this._subscriptions[t].indexOf(e))&&this._subscriptions[t].splice(e,1)}broadcast(t,e){if(this._subscriptions[t])for(var r=0;r<this._subscriptions[t].length;r++)this._subscriptions[t][r].emit(this.prefix+"/"+t,e)}getPublishEvents(){return this.events.reduce((t,e)=>(t.push({name:this.prefix+"/"+e,scope:this,subscribe:this.subscribe.bind(this,e),unsubscribe:this.unsubscribe.bind(this,e)}),t),[])}}},function(t,e,r){"use strict";
|
|
112
112
|
/*!
|
|
113
113
|
* outpoint.js - outpoint object for vallnet
|
|
114
114
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -179,7 +179,7 @@ let i=[];[r(567),r(568),r(569),r(570),r(571),r(572),r(573),r(574),r(575),r(576),
|
|
|
179
179
|
/*!
|
|
180
180
|
* block.js - block object for vallnet
|
|
181
181
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
182
|
-
*/const i=r(0),s=r(1),n=r(3),a=r(6),o=r(146),c=r(7);var u=r(117);const h=r(2),l=r(4),p=r(19),f=r(133),d=r(87),m=r(15),g=r(134),y=r(
|
|
182
|
+
*/const i=r(0),s=r(1),n=r(3),a=r(6),o=r(146),c=r(7);var u=r(117);const h=r(2),l=r(4),p=r(19),f=r(133),d=r(87),m=r(15),g=r(134),y=r(21).opcodes,v=r(5).PropStatus;class b extends u{constructor(t,e){super(),this.txs=e||[],this._raw=null,this._size=-1,this._witness=-1,t&&this.fromOptions(t)}fromOptions(t){if(this.parseOptions(t),t.txs){i(Array.isArray(t.txs));for(const e of t.txs)i(e instanceof p),this.txs.push(e)}}static fromOptions(t){return(new b).fromOptions(t)}async propViewer(){if(!this.pviewer)for(var t of(this.pviewer=new g,this.txs))for(let e=0;e<t.outputs.length;e++){let r=t.outputs[e],i=r.getReturnData([y.OP_PROPEXCHANGE,y.OP_PROPCREATE]);!i||r.getReturnType(y.OP_PROPCREATE)&&!await this.pviewer.getVp(i.pid)&&(i.current={hash:t.hash("hex"),index:e,address:r.getAddress().toString()},i.gold=r.value,i.height=this.height,i.pst=v.Ready,await this.pviewer.setVp(i))}return this.pviewer}refresh(t){if(this._refresh(),this._raw=null,this._size=-1,this._witness=-1,t)for(const t of this.txs)t.refresh()}toRaw(){return this.frame().data}toNormal(){return this.hasWitness()?this.frameNormal().data:this.toRaw()}toWriter(t){var e;return this.mutable?this.writeWitness(t):(e=this.frame(),t.writeBytes(e.data),t)}toNormalWriter(t){return this.hasWitness()?(this.writeNormal(t),t):this.toWriter(t)}frame(){if(this.mutable)return i(!this._raw),this.frameWitness();if(this._raw){i(0<=this._size),i(0<=this._witness);const t=new w(this._size,this._witness);return t.data=this._raw,t}const t=this.frameWitness();return this._raw=t.data,this._size=t.size,this._witness=t.witness,t}getSizes(){return this.mutable?this.getWitnessSizes():this.frame()}getVirtualSize(){var t=c.WITNESS_SCALE_FACTOR;return(this.getWeight()+t-1)/t|0}getWeight(){var t=this.getSizes();return(t.size-t.witness)*(c.WITNESS_SCALE_FACTOR-1)+t.size}getSize(){return this.getSizes().size}getBaseSize(){var t=this.getSizes();return t.size-t.witness}hasWitness(){if(-1!==this._witness)return 0!==this._witness;for(const t of this.txs)if(t.hasWitness())return!0;return!1}hasTX(t){return-1!==this.indexOf(t)}indexOf(t){for(let e=0;e<this.txs.length;e++){if(this.txs[e].hash("hex")===t)return e}return-1}createMerkleRoot(t){const e=[];for(const t of this.txs)e.push(t.hash());const[r,i]=o.createRoot(e);return i?null:"hex"===t?r.toString("hex"):r}createWitnessNonce(){return Buffer.from(n.ZERO_HASH)}createCommitmentHash(t){var e=this.getWitnessNonce();const r=[];i(e,"No witness nonce present."),r.push(n.ZERO_HASH);for(let t=1;t<this.txs.length;t++){const e=this.txs[t];r.push(e.witnessHash())}var[s]=o.createRoot(r);const c=a.root256(s,e);return"hex"===t?c.toString("hex"):c}getMerkleRoot(t){return"hex"===t?this.merkleRoot:Buffer.from(this.merkleRoot,"hex")}getWitnessNonce(){var t;return 0===this.txs.length||1!==(t=this.txs[0]).inputs.length||1!==(t=t.inputs[0]).witness.items.length||32!==t.witness.items[0].length?null:t.witness.items[0]}getCommitmentHash(t){if(0===this.txs.length)return null;var e=this.txs[0];let r;for(let t=e.outputs.length-1;0<=t;t--){const i=e.outputs[t];if(i.script.isCommitment()){r=i.script.getCommitment();break}}return r?"hex"===t?r.toString("hex"):r:null}verifyBody(){var[t]=this.checkBody();return t}checkBody(){var t=this.createMerkleRoot("hex");if(!t)return[!1,"bad-txns-duplicate",100];if(this.merkleRoot!==t)return[!1,"bad-txnmrklroot",100];if(0===this.txs.length||this.txs.length>(c.MAX_BLOCK_SIZE-81)/60||this.getBaseSize()>c.MAX_BLOCK_SIZE)return[!1,"bad-blk-length",100];if(0===this.txs.length||!this.txs[0].isCoinbase())return[!1,"bad-cb-missing",100];var e=c.WITNESS_SCALE_FACTOR;let r=0;for(let t=0;t<this.txs.length;t++){const a=this.txs[t];if(0<t&&a.isCoinbase())return[!1,"bad-cb-multiple",100];var[i,s,n]=a.checkSanity();if(!i)return[i,s,n];if((r+=a.getLegacySigops())*e>c.MAX_BLOCK_SIGOPS_COST)return[!1,"bad-blk-sigops",100]}return[!0,"valid",0]}get height(){return this.getCoinbaseHeight()}getCoinbaseHeight(){if(this.version<2)return-1;if(0===this.txs.length)return-1;const t=this.txs[0];return 0===t.inputs.length?-1:t.inputs[0].script.getCoinbaseHeight()}getClaimed(){return i(0<this.txs.length),i(this.txs[0].isCoinbase()),this.txs[0].getOutputValue()}getPrevout(){const t=Object.create(null);for(let e=1;e<this.txs.length;e++)for(const r of this.txs[e].inputs)t[r.prevout.hash]=!0;return Object.keys(t)}inspect(){return this.format()}format(t,e){var r=this.getCommitmentHash("hex");return{hash:this.rhash(),height:null!=e?e:-1,size:this.getSize(),virtualSize:this.getVirtualSize(),date:s.date(this.time),version:s.hex32(this.version),prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),commitmentHash:r?s.revHex(r):null,time:this.time,bits:this.bits,nonce:this.nonce,txs:this.txs.map((e,r)=>e.format(t,null,r))}}formatInsight(){return{hash:this.rhash(),rhash:()=>this.hash,version:s.hex32(this.version),prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),raw:this.toRaw(),ts:this.time,bits:this.bits,nonce:this.nonce,txs:this.txs.map((t,e)=>t.formatInsight(e,this.time))}}toJSON(){return this.getJSON()}getJSON(t,e,r,i){return t=m.get(t),{hash:this.rhash(),height:r,confirmations:i,version:this.version,prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),time:this.time,bits:this.bits,nonce:this.nonce,txs:this.txs.map((r,i)=>r.getJSON(t,e,null,i))}}fromJSON(t){i(t,"Block data is required."),i(Array.isArray(t.txs)),this.parseJSON(t);for(const e of t.txs)this.txs.push(p.fromJSON(e));return this}static fromJSON(t){return(new b).fromJSON(t)}fromReader(t){t.start(),this.readHead(t);var e=t.readVarint();let r=0;for(let s=0;s<e;s++){var i=p.fromReader(t);r+=i._witness,this.txs.push(i)}return this.mutable||(this._raw=t.endData(),this._size=this._raw.length,this._witness=r),this}fromRaw(t){return this.fromReader(new h(t))}static fromReader(t){return(new b).fromReader(t)}static fromRaw(t,e){return"string"==typeof t&&(t=Buffer.from(t,e)),(new b).fromRaw(t)}toMerkle(t){return f.fromBlock(this,t)}writeNormal(t){this.writeHead(t),t.writeVarint(this.txs.length);for(const e of this.txs)e.toNormalWriter(t);return t}writeWitness(t){this.writeHead(t),t.writeVarint(this.txs.length);for(const e of this.txs)e.toWriter(t);return t}frameNormal(){const t=this.getNormalSizes(),e=new l(t.size);return this.writeNormal(e),t.data=e.render(),t}frameWitness(){const t=this.getWitnessSizes(),e=new l(t.size);return this.writeWitness(e),t.data=e.render(),t}toHeaders(){return d.fromBlock(this)}getNormalSizes(){let t=0;t=(t+=80)+n.sizeVarint(this.txs.length);for(const e of this.txs)t+=e.getBaseSize();return new w(t,0)}getWitnessSizes(){let t=0,e=0;t=(t+=80)+n.sizeVarint(this.txs.length);for(const i of this.txs){var r=i.getSizes();t+=r.size,e+=r.witness}return new w(t,e)}static isBlock(t){return t instanceof b}}function w(t,e){this.data=null,this.size=t,this.witness=e}t.exports=b},function(t,e){var r,i,s,n=function(){"use strict";return void 0===this}();n?t.exports={freeze:Object.freeze,defineProperty:Object.defineProperty,getDescriptor:Object.getOwnPropertyDescriptor,keys:Object.keys,names:Object.getOwnPropertyNames,getPrototypeOf:Object.getPrototypeOf,isArray:Array.isArray,isES5:n,propertyIsWritable:function(t,e){return!((t=Object.getOwnPropertyDescriptor(t,e))&&!t.writable&&!t.set)}}:(r={}.hasOwnProperty,i={}.toString,s={}.constructor.prototype,t.exports={isArray:function(t){try{return"[object Array]"===i.call(t)}catch(t){return!1}},keys:t=function(t){var e,i=[];for(e in t)r.call(t,e)&&i.push(e);return i},names:t,defineProperty:function(t,e,r){return t[e]=r.value,t},getDescriptor:function(t,e){return{value:t[e]}},freeze:function(t){return t},getPrototypeOf:function(t){try{return Object(t).constructor.prototype}catch(t){return s}},isES5:n,propertyIsWritable:function(){return!0}})},function(t,e,r){"use strict";
|
|
183
183
|
/*!
|
|
184
184
|
* logger.js - basic logger for vallnet
|
|
185
185
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -194,7 +194,7 @@ let i=[];[r(567),r(568),r(569),r(570),r(571),r(572),r(573),r(574),r(575),r(576),
|
|
|
194
194
|
* pkg.js - package constants
|
|
195
195
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
196
196
|
* https://github.com/bookmansoft/gamegold
|
|
197
|
-
*/e.protocol="vallnet",e.version="v4.0.
|
|
197
|
+
*/e.protocol="vallnet",e.version="v4.0.5",e.url="https://github.com/bookmansoft/gamegold"},function(t,e,r){"use strict";
|
|
198
198
|
/*!
|
|
199
199
|
* common.js - p2p constants for vallnet
|
|
200
200
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -275,7 +275,7 @@ let i=[];[r(567),r(568),r(569),r(570),r(571),r(572),r(573),r(574),r(575),r(576),
|
|
|
275
275
|
* selector.js
|
|
276
276
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
277
277
|
*/
|
|
278
|
-
const i=r(
|
|
278
|
+
const i=r(21).opcodes;function s(t){let e=null;var r=s.list[t.type];return new(r?r.path:s.list[i.OP_INVALIDOPCODE])(t)}r(58),(s.list={})[i.OP_PROPCREATE]={name:"propcreate",path:r(193),desc:"道具创建"},s.list[i.OP_PROPEXCHANGE]={name:"propexchange",path:r(194),desc:"道具交易"},s.list[i.OP_HTLCSUGGEST]={name:"htlcsuggest",path:r(138),desc:"HTLC提议"},s.list[i.OP_HTLCASSENT]={name:"htlcassent",path:r(139),desc:"HTLC应答"},s.list[i.OP_COMMENT]={name:"comment",path:r(140),desc:"附言输出"},s.list[i.OP_INVALIDOPCODE]={name:"default",path:r(58),desc:""},t.exports=s},function(t,e,r){"use strict";
|
|
279
279
|
/*!
|
|
280
280
|
* txsorter.js - commonly required functions utils.
|
|
281
281
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -289,7 +289,7 @@ const i=r(22).opcodes;function s(t){let e=null;var r=s.list[t.type];return new(r
|
|
|
289
289
|
/*!
|
|
290
290
|
* wallet.js - wallet object for vallnet
|
|
291
291
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
292
|
-
*/const i=r(0);var s=r(16);const n=r(320),a=r(15),o=r(1),c=r(3),u=r(35),h=r(201),l=r(120).sortWithSeq,p=r(6),f=r(95),d=r(2),m=r(4),g=r(70),y=r(346);r(226);const v=r(111),b=r(73),w=r(12),x=r(59),k=r(17),S=r(227),E=r(124),_=r(26),A=r(161),R=r(243),I=r(65),j=r(28),C=r(27),P=r(7),O=r(316),T=r(32),F=E.Mnemonic,{opcodes:B,hashType:N}=r(22),D=r(169),L=r(91),H=r(92),z=r(143),M=r(46),U=r(19),q=r(42),V=r(53),{NotifyMsg:K,OrderData:W,ContractStatus:G,ContractType:$}=r(5),Y=r(38).VerifyError,X=r(83).stockItem;r(324).AuditItem;const J=r(157).ErItem,Z=r(158).ErAbolishItem,Q=r(241).EnchancementItem,tt=r(159).X509Cert,et=r(160).X509Abolish,rt=r(29),it=r(69),st=r(63),nt=r(81);class at extends s{constructor(t,e){super(),i(t,"DB required."),this.db=t,this.network=t.network,this.logger=t.logger,this.readLock=new h,this.writeLock=new u,this.sendLock=new u,this.indexCache=new I(1e4),this.accountCache=new I(1e4),this.pathCache=new I(1e5),this.current=null,this.wid=0,this.id=null,this.initialized=!1,this.watchOnly=!1,this.accountDepth=0,this.token=c.ZERO_HASH,this.tokenDepth=0,this.master=new R,this.txdb=new y(this),this.account=null,e&&this.fromOptions(e)}fromOptions(t){let e,r,s=t.master;return s?("string"==typeof s&&(s=E.PrivateKey.fromBase58(s,this.network)),i(E.isPrivate(s),"Must create wallet with hd private key.")):(r=new F(t.mnemonic),s=E.fromMnemonic(r,this.network)),i(s.network===this.network,"Network mismatch for master key."),this.master.fromKey(s,r),null!=t.wid&&(i(o.isU32(t.wid)),this.wid=t.wid),t.id&&(i(b.isName(t.id),"Bad wallet ID."),e=t.id),null!=t.initialized&&(i("boolean"==typeof t.initialized),this.initialized=t.initialized),null!=t.watchOnly&&(i("boolean"==typeof t.watchOnly),this.watchOnly=t.watchOnly),null!=t.accountDepth&&(i(o.isU32(t.accountDepth)),this.accountDepth=t.accountDepth),t.token&&(i(Buffer.isBuffer(t.token)),i(32===t.token.length),this.token=t.token),e=e||this.getID(),this.id=e,this}static fromOptions(t,e){return new at(t).fromOptions(e)}async init(t){var e=t.passphrase;i(!this.initialized),this.initialized=!0,e&&await this.master.encrypt(e),t=await this._createAccount(t,e);i(t),this.account=t,this.logger.info("Wallet initialized (%s).",this.id),await this.txdb.open()}async open(){i(this.initialized);var t=await this.getAccount(0);if(!t)throw new Error("Default account not found.");this.account=t,this.logger.info("Wallet opened (%s).",this.id),await this.txdb.open()}async destroy(){const t=await this.writeLock.lock(),e=await this.sendLock.lock();try{this.db.unregister(this),await this.master.destroy(),this.readLock.destroy(),this.writeLock.destroy(),this.sendLock.destroy()}finally{e(),t()}}async addSharedKey(t,e){const r=await this.writeLock.lock();try{return await this._addSharedKey(t,e)}finally{r()}}async _addSharedKey(t,e){e||(e=t,t=null);const r=await this.getAccount(t=null==t?0:t);if(!r)throw new Error("Account not found.");let i;this.start();try{i=await r.addSharedKey(e)}catch(t){throw this.drop(),t}return await this.commit(),i}async removeSharedKey(t,e){const r=await this.writeLock.lock();try{return await this._removeSharedKey(t,e)}finally{r()}}async _removeSharedKey(t,e){e||(e=t,t=null);const r=await this.getAccount(t=null==t?0:t);if(!r)throw new Error("Account not found.");let i;this.start();try{i=await r.removeSharedKey(e)}catch(t){throw this.drop(),t}return await this.commit(),i}async setPassphrase(t,e){t&&await this.decrypt(t),e&&await this.encrypt(e)}async encrypt(t){const e=await this.writeLock.lock();try{return await this._encrypt(t)}finally{e()}}async _encrypt(t){t=await this.master.encrypt(t,!0),this.start();try{await this.db.encryptKeys(this,t)}catch(e){throw f(t),this.drop(),e}f(t),this.save(),await this.commit()}async decrypt(t){const e=await this.writeLock.lock();try{return await this._decrypt(t)}finally{e()}}async _decrypt(t){t=await this.master.decrypt(t,!0),this.start();try{await this.db.decryptKeys(this,t)}catch(e){throw f(t),this.drop(),e}f(t),this.save(),await this.commit()}async rename(t){const e=await this.writeLock.lock();try{return await this.db.rename(this,t)}finally{e()}}async writeBalanceLog(t){const e=await this.writeLock.lock();try{return await this.db.writeBalanceLog(this,t)}finally{e()}}async renameAccount(t,e){const r=await this.writeLock.lock();try{return await this._renameAccount(t,e)}finally{r()}}async _renameAccount(t,e){if(!b.isName(e))throw new Error("Bad account name.");var r=await this.getAccount(t);if(!r)throw new Error("Account not found.");if(0===r.accountIndex)throw new Error("Cannot rename default account.");if(await this.hasAccount(e))throw new Error("Account name not available.");t=r.name,this.start(),this.db.renameAccount(r,e),await this.commit(),this.indexCache.remove(t),t=this.pathCache.values();for(const i of t)i.account===r.accountIndex&&(i.name=e)}async lock(){const t=await this.writeLock.lock(),e=await this.sendLock.lock();try{await this.master.lock()}finally{e(),t()}}unlock(t,e){return this.master.unlock(t,e)}getID(){i(this.master.key,"Cannot derive id.");var t=this.master.key.derive(44);const e=new m(37);e.writeBytes(t.publicKey),e.writeU32(this.network.magic),t=p.hash160(e.render());const r=new m(27);return r.writeU8(3),r.writeU8(190),r.writeU8(4),r.writeBytes(t),r.writeChecksum(),g.encode(r.render())}async createAccount(t,e){const r=await this.writeLock.lock();try{return await this._createAccount(t,e)}finally{r()}}async _createAccount(t,e){let r,s,n=t.name,a=(n=n||this.accountDepth.toString(10),0);if(0!=this.accountDepth&&(a=o.hashInt(n)),await this.hasAccountIndex(a))throw new Error("Account Index Conflict.");if(await this.hasAccount(n))throw new Error("Account already exists.");if(await this.unlock(e),this.watchOnly&&t.accountKey){if("string"==typeof(r=t.accountKey)&&(r=E.PublicKey.fromBase58(r,this.network)),!E.isPublic(r))throw new Error("Must add HD public keys to watch only wallet.");i(r.network===this.network,"Network mismatch for watch only key.")}else i(this.master.key),r=(r=this.master.key.deriveAccount(44,a)).toPublic();e={wid:this.wid,id:this.id,name:0===this.accountDepth?"default":n,witness:t.witness,watchOnly:this.watchOnly,accountKey:r,accountIndex:a,type:t.type,m:t.m,n:t.n,keys:t.keys},this.start();try{(s=A.fromOptions(this.db,e)).wallet=this,await s.init()}catch(t){throw this.drop(),t}return this.logger.info("Created account %s/%s/%d.",s.id,s.name,s.accountIndex),this.accountDepth++,this.save(),await this.commit(),s}async ensureAccount(t,e){var r=t.name;return(r=await this.getAccount(r))||this.createAccount(t,e)}getAccounts(){return this.db.getAccounts(this.wid)}getAddressHashes(t){return null!=t?this.getAccountHashes(t):this.db.getWalletHashes(this.wid)}async getAccountHashes(t){return t=await this.ensureIndex(t,!0),this.db.getAccountHashes(this.wid,t)}async getAccount(t){if(this.account&&(null==t||"default"===t||"number"==typeof t&&0===t||"string"==typeof t&&0===t.length))return this.account;if(-1===(t=await this.getAccountIndex(t)))return null;const e=await this.readLock.lock(t);try{return await this._getAccount(t)}finally{e()}}async _getAccount(t){var e=this.accountCache.get(t);if(e)return e;const r=await this.db.getAccount(this.wid,t);return r?(r.wallet=this,r.wid=this.wid,r.id=this.id,r.watchOnly=this.watchOnly,await r.open(),this.accountCache.set(t,r),r):null}async getAccountIndex(t){var e;return null==t?-1:"number"==typeof t?t:null!=(e=this.indexCache.get(t))?e:-1===(e=await this.db.getAccountIndex(this.wid,t))?-1:(this.indexCache.set(t,e),e)}async getAccountName(t){var e;return"string"==typeof t?t:(e=this.accountCache.get(t))?e.name:this.db.getAccountName(this.wid,t)}async hasAccount(t){return-1!==(t=await this.getAccountIndex(t))&&(!!this.accountCache.has(t)||this.db.hasAccount(this.wid,t))}async hasAccountIndex(t){return!!this.accountCache.has(t)||this.db.hasAccount(this.wid,t)}createReceive(t,e=0,r=null){return this.createKey(t,0,e,r)}createChange(t){return this.createKey(t,1)}createNested(t){return this.createKey(t,2)}async createKey(t,e,r=0,i=null){const s=await this.writeLock.lock();try{return await this._createKey(t,e,r,i)}finally{s()}}async _createKey(t,e,r=0,i=null){null==e&&(e=t,t=null);const s=await this.getAccount(t=t||0);if(!s)throw new Error("Account not found.");let n;this.start();try{n=await s.createKey(e,r,i)}catch(t){throw this.drop(),t}return await this.commit(),n}save(){return this.db.save(this)}async saveAccount(t){const e=await this.writeLock.lock();try{this.start(),t._save(),await this.commit()}finally{e()}}start(){return this.db.start(this)}drop(){return this.db.drop(this)}clear(){return this.db.clear(this)}commit(){return this.db.commit(this)}async hasAddress(t){return t=w.getHash(t,"hex"),null!=await this.getPath(t)}async getPath(t){const e=await this.readPath(t);return e?(e.name=await this.getAccountName(e.account),i(e.name),this.pathCache.set(e.hash,e),e):null}async readPath(t){t=w.getHash(t,"hex");var e=this.pathCache.get(t);if(e)return e;const r=await this.db.getPath(this.wid,t);return r?(r.id=this.id,r):null}async hasPath(t){return t=w.getHash(t,"hex"),!!this.pathCache.has(t)||this.db.hasPath(this.wid,t)}async getPaths(t){if(null!=t)return this.getAccountPaths(t);const e=[];for(const t of await this.db.getWalletPaths(this.wid))t.id=this.id,t.name=await this.getAccountName(t.account),i(t.name),this.pathCache.set(t.hash,t),e.push(t);return e}async getAccountPaths(t){var e=await this.ensureIndex(t,!0),r=await this.getAccountHashes(e),s=await this.getAccountName(t);i(s);const n=[];for(const t of r){const r=await this.readPath(t);i(r),i(r.account===e),r.name=s,this.pathCache.set(r.hash,r),n.push(r)}return n}async importKey(t,e,r){const i=await this.writeLock.lock();try{return await this._importKey(t,e,r)}finally{i()}}async _importKey(t,e,r){if(t&&"object"==typeof t&&(r=e,e=t,t=null),null==t&&(t=0),i(e.network===this.network,"Network mismatch for key."),this.watchOnly){if(e.privateKey)throw new Error("Cannot import privkey into watch-only wallet.")}else if(!e.privateKey)throw new Error("Cannot import pubkey into non watch-only wallet.");var s=e.getHash("hex");if(await this.getPath(s))throw new Error("Key already exists.");const n=await this.getAccount(t);if(!n)throw new Error("Account not found.");if(n.type!==A.types.PUBKEYHASH)throw new Error("Cannot import into non-pkh account.");await this.unlock(r);const a=S.fromRing(n,e).toPath();this.master.encrypted&&(a.data=this.master.encipher(a.data,a.hash),i(a.data),a.encrypted=!0),this.start();try{await n.savePath(a)}catch(t){throw this.drop(),t}await this.commit()}async importAddress(t,e){const r=await this.writeLock.lock();try{return await this._importAddress(t,e)}finally{r()}}async _importAddress(t,e){if(e||(e=t,t=null),null==t&&(t=0),e.network!==this.network)throw new Error("Network mismatch for address.");if(!this.watchOnly)throw new Error("Cannot import address into non watch-only wallet.");if(await this.getPath(e))throw new Error("Address already exists.");const r=await this.getAccount(t);if(!r)throw new Error("Account not found.");if(r.type!==A.types.PUBKEYHASH)throw new Error("Cannot import into non-pkh account.");t=v.fromAddress(r,e),this.start();try{await r.savePath(t)}catch(t){throw this.drop(),t}await this.commit()}async fund(t,e){const r=await this.writeLock.lock();try{return await this._fund(t,e)}finally{r()}}async _fund(t,e){if(e=e||{},!this.initialized)throw new Error("Wallet is not initialized.");if(this.watchOnly)throw new Error("Cannot fund from watch-only wallet.");let r;if(null!=e.account){if(!(r=await this.getAccount(e.account)))throw new Error("Account not found.")}else r=this.account;if(!r.initialized)throw new Error("Account is not initialized.");let s,n=e.rate;return null==n&&(n=await this.db.estimateFee(e.blocks)),s=e.smart?await this.getSmartCoins(r.name):(s=await this.getCoins(r.name),this.txdb.filterConserved(s)),await t.fund(s,{allowPreInput:e.allowPreInput,noChange:e.noChange,selection:e.selection,round:e.round,depth:e.depth,hardFee:e.hardFee,subtractFee:e.subtractFee,subtractIndex:e.subtractIndex,changeAddress:r.change.getAddress(),height:this.db.curHeight,rate:n,maxFee:e.maxFee,estimate:t=>this.estimateSize(t),network:this.network}),!e.allowInfiniteFee&&e.noChange&&i(t.getFee()<=O.MAX_FEE,"TX exceeds MAX_FEE."),s}async getAccountByAddress(t){return t=w.getHash(t,"hex"),(t=await this.getPath(t))?this.getAccount(t.account):null}async estimateSize(t){var e=P.WITNESS_SCALE_FACTOR,r=w.fromScript(t);if(!r)return-1;var i=await this.getAccountByAddress(r);if(!i)return-1;let s=0;if(t.isScripthash()&&i.witness)switch(i.type){case A.types.PUBKEYHASH:s=4*(s+23);break;case A.types.MULTISIG:s=4*(s+35)}switch(i.type){case A.types.PUBKEYHASH:s=s+74+34;break;case A.types.MULTISIG:s=(s=(s=(s=(s+=1)+74*i.m)+3+1)+34*i.n)+1+1}return i.witness?s=((s+=1)+e-1)/e|0:s+=c.sizeVarint(s),s}async createTX(t){var e=t.outputs;const r=new x;i(Array.isArray(e),"Outputs must be an array."),i(0<e.length,"No outputs available."),t.comment&&("object"==typeof t.comment&&(t.comment=JSON.stringify(t.comment)),r.outputs.push(_.fromScript(k.createScript(Buffer.from(t.comment),k.types.NULLDATA),0)));for(const t of e){const e=new _(t),i=e.getAddress();if(e.isDust())throw new Error("Output is dust.");if(0<e.value){if(!i)throw new Error("Cannot send to unknown address.");if(i.isNull())throw new Error("Cannot send to null address.")}r.outputs.push(e)}let s=null;if(t.inputs)for(const e of t.inputs){var n=await this.getTX(e.hash);if(n){let i=V.fromTX(n.tx,e.index,-1,0);i&&(s=i.getAddress(),t.allowPreInput=!0,r.addCoin(i))}}else await this.fund(r,t);if(s){const t=new _;t.value=r.getFee()-O.MIN_FEE,t.script.fromAddress(s),r.outputs.push(t),r.changeIndex=r.outputs.length-1}if(!1!==t.sort&&r.sortMembers(),null!=t.locktime&&r.setLocktime(t.locktime),i(r.isSane(),"TX failed sanity check."),i(r.verifyInputs(this.db.curHeight+1),"TX failed context check."),0===await this.template(r))throw new Error("Templating failed.");return r}async send(t,e){const r=await this.sendLock.lock();try{return await this._send(t,e)}finally{r()}}async _send(t,e){return e&&(t.account=e),e=await this.createTX(t,!0),await this.sign(e),this.sendMTX(e,{sendafter:t.sendafter})}async sendMTX(t,e={}){if(!t.isSigned())throw new Error("TX could not be fully signed.");const r=t.toTX();if(r.getSigopsCost(t.view)>C.MAX_TX_SIGOPS_COST)throw new Error("TX exceeds policy sigops.");if(r.getWeight()>C.MAX_TX_WEIGHT)throw new Error("TX exceeds policy weight.");return e.sendafter||(this.logger.debug("Sending wallet tx (%s): %s",this.id,r.txid()),await this.db.addTX(r),await this.db.send(r)),r}async resend(){var t=await this.getPending();0<t.length&&this.logger.info("Rebroadcasting %d transactions.",t.length);const e=[];for(const r of t)e.push(r.tx);for(const t of await l(e,this.db))await this.db.send(t);return e}async deriveInputs(t){var e;i(t.mutable);const r=[];for(const i of await this.getInputPaths(t)){const t=await this.getAccount(i.account);t&&(e=t.derivePath(i,this.master))&&r.push(e)}return r}async getKey(t){if(t=w.getHash(t,"hex",this.network.type),!(t=await this.getPath(t)))return null;const e=await this.getAccount(t.account);return e?e.derivePath(t,this.master):null}async exportToFile(t){var e=await this.db.getTip(),r=o.date();const i=[o.fmt("# Wallet Dump created by %s %s",nt.protocol,nt.version),o.fmt("# * Created on %s",r),o.fmt("# * Best block at time of backup was %d (%s).",e.height,o.revHex(e.hash)),o.fmt("# * File: %s",t.file),""];e=o.fmt("W %s wid= %s",this.toRaw().toString("base64"),this.wid),i.push(e),e=await this.getAccounts();for(const t of e){const e=await this.getAccount(t);var s=o.fmt("C %s name= %s",e.toRaw().toString("base64"),e.name);i.push(s)}for(const t of await this.getAddressHashes()){const e=await this.getPrivateKey(t);if(e){var n=e.getAddress("string");let t="A %s %s label= account= %s index= %s addr=%s";1===e.branch?t="A %s %s change=1 account= %s index= %s addr=%s":2==e.branch&&(t="A %s %s nested=1 account= %s index= %s addr=%s"),n=o.fmt(t,e.toSecret(),r,e.account,e.index,n),i.push(n)}}if(i.push(""),i.push("# End of dump"),i.push(""),e=i.join("\n"),st.unsupported)return e;await st.writeFile(t.file,e,"utf8")}async getPrivateKey(t,e){if(t=w.getHash(t,"hex"),!(t=await this.getPath(t)))return null;const r=await this.getAccount(t.account);return r?(await this.unlock(e),(e=r.derivePath(t,this.master)).privateKey?e:null):null}async getInputPaths(t){if(i(t.mutable),!t.hasCoins())throw new Error("Not all coins available.");const e=[];for(const i of t.getInputHashes("hex")){var r=await this.getPath(i);r&&e.push(r)}return e}async getOutputPaths(t){const e=[];for(const i of t.getOutputHashes("hex")){var r=await this.getPath(i);r&&e.push(r)}return e}async setLookahead(t,e){const r=await this.writeLock.lock();try{return this._setLookahead(t,e)}finally{r()}}async _setLookahead(t,e){null==e&&(e=t,t=null);const r=await this.getAccount(t=null==t?0:t);if(!r)throw new Error("Account not found.");this.start();try{await r.setLookahead(e)}catch(t){throw this.drop(),t}await this.commit()}async syncOutputDepth(t){const e=new Map;for(const i of t.outputs){var r=i.path;r&&-1!==r.index&&(e.has(r.account)||e.set(r.account,[]),e.get(r.account).push(r))}const s=[];for(var[n,a]of e){let t=-1,e=-1,r=-1;for(const i of a)switch(i.branch){case 0:i.index>t&&(t=i.index);break;case 1:i.index>e&&(e=i.index);break;case 2:i.index>r&&(r=i.index)}t+=2,e+=2,r+=2;const o=await this.getAccount(n);i(o),(a=await o.syncDepth(t,e,r))&&s.push(a)}return s}async getRedeem(t){"string"==typeof t&&(t=Buffer.from(t,"hex"));const e=await this.getKey(t.toString("hex"));return e?e.getRedeem(t):null}async template(t){var e=await this.deriveInputs(t);return t.sign(e)}async getOrderList(t,e){let r=[],i=new rt,s=((await this.getHistory(e||"default")).reduce((t,e)=>{let{tx:i,hash:s,height:n}=e;if(i.outputs[0].getReturnType(B.OP_RETURN))try{var a=JSON.parse(i.outputs[0].script.code[1].toString());if(a&&a.oper==$.payOrder){let e=W.fromJson(a);e.hash=s,e.height=n,t.set(""+e.cid+e.sn,e),r.push(e.cid)}}catch(e){}return t},i),i.query(t));return await this.db.flushCP(r),s.list.map(t=>{t.cp=this.db.cpList.getItem(t.cid)}),s}async propCreate(t,e){const r=new x;for(var s of t){var n=await this.ensureCp(s.cid,!0);n&&s.cid!=this.network.genesisId&&(s.gold=(0|s.gold)>>>0,s.gold<P.MINPROPVALUE||(s.pid||(s.pid=z()),r.propCreate(n.current.address,s),s.index=r.outputs.length-1))}if(0<r.outputs.length){e?await this.fund(r,{account:e}):await this.fund(r),await this.sign(r);let s=r.commit();for(var a of(await this.db.addTX(s[0]),await this.db.send(s[0]),i(s[0].verify(s[1],k.flags.STANDARD_VERIFY_FLAGS)),t))a.hash=s[0].hash("hex"),a.txid=s[0].txid();return s}return[]}async stockAddress(t,e){return await this.ensureAccount({name:e,witness:!0}),(await this.createReceive(e,o.hashInt(t),this.master)).getAddress()}async stockOffer(t,e,r,s){i(!!t),i(!!e),i(!!r),e=(0|e)>>>0,r=(0|r)>>>0;var n=await this.ensureCp(t);let a=await this.getKey(n.current.address);if(i(!!a),s&&s!==a.name)throw new L(H.errors.TYPE_ERROR,"illegal account");t=a.signData({cid:t,type:X.RecordType.Offer,sum:e,price:r});const o=new x;o.outputs.push(_.fromScript(t.data.addr,.05*e*r));let c=new K($.stock,z(),this.db.curHeight,t);e=_.fromScript(k.createScript(c.toRaw(),k.types.NULLDATA),0),o.outputs.push(e),s?await this.fund(o,{account:s}):await this.fund(o),o.outputs.shift(),await this.sign(o);let u=o.commit();return i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(u[0]),await this.db.send(u[0]),c.hash=u[0].hash("hex"),c.height=-1,c.cp=n,c}async stockPurchase(t,e,r){if(i(!!t),i(!!e),(e=(0|e)>>>0)<P.STOCK_TRADE_SINGLE||e>P.STOCK_MAX_TRADE_SINGLE)throw new L(H.errors.TYPE_ERROR,"Invalid Stock Amount.");var s=await this.ensureCp(t);t={type:X.RecordType.Purchase,cid:t,uid:r,seq:0,to:s.current.address,sum:e},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,r);const n=new x;let a=new K($.stock,z(),this.db.curHeight,t);t=_.fromScript(k.createScript(a.toRaw(),k.types.NULLDATA),0),n.outputs.push(t),n.outputs.push(_.fromScript(s.current.address,e*s.stock.price)),r?await this.fund(n,{account:r}):await this.fund(n),await this.sign(n);let o=n.commit();return i(o[0].verify(o[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(o[0]),await this.db.send(o[0]),a.hash=o[0].hash("hex"),a.height=-1,a.cp=s,a}async stockPurchaseTo(t,e,r,s){if(i(!!t),i(!!e),(e=(0|e)>>>0)<P.STOCK_TRADE_SINGLE||e>P.STOCK_MAX_TRADE_SINGLE)throw new L(H.errors.TYPE_ERROR,"Invalid Stock Amount.");var n=await this.ensureCp(t);t={type:X.RecordType.Purchase,cid:t,uid:r,seq:0,to:n.current.address,sum:e},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,r);const a=new x;let o=new K($.stock,z(),this.db.curHeight,t);r=_.fromScript(k.createScript(o.toRaw(),k.types.NULLDATA),0),a.outputs.push(r),a.outputs.push(_.fromScript(n.current.address,e*n.stock.price)),s?await this.fund(a,{account:s}):await this.fund(a),await this.sign(a);let c=a.commit();return i(c[0].verify(c[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(c[0]),await this.db.send(c[0]),o.hash=c[0].hash("hex"),o.height=-1,o.cp=n,o}async stockSend(t,e,r,s,n){i(!!t),i(!!e),e=(0|e)>>>0;var a=await this.ensureCp(t,!0);if(!a)return null;t={type:X.RecordType.Send,cid:t,uid:s,seq:0,sum:e,to:r},await this.addStockAccountSeq(t),e=await this.tokenCreate(t,s,n);const o=new x;let c=new K($.stock,z(),this.db.curHeight,e);r=_.fromScript(k.createScript(c.toRaw(),k.types.NULLDATA),0),o.outputs.push(r),s?await this.fund(o,{account:s}):await this.fund(o),await this.sign(o);let u=o.commit();return i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(u[0]),await this.db.send(u[0]),c.hash=u[0].hash("hex"),c.height=-1,c.cp=a,c}async stockBid(t,e,r,s,n){i(!!t),i(!!e),i(!!r),e=(0|e)>>>0,r=(0|r)>>>0;var a=await this.ensureCp(t,!0);if(!a)return null;t={type:X.RecordType.Bid,cid:t,uid:s,seq:0,sum:e,price:r},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,s,n);const o=new x;o.outputs.push(_.fromScript(t.data.addr,.05*e*r));let c=new K($.stock,z(),this.db.curHeight,t);n=_.fromScript(k.createScript(c.toRaw(),k.types.NULLDATA),0),o.outputs.push(n),s?await this.fund(o,{account:s}):await this.fund(o),o.outputs.shift(),await this.sign(o);let u=o.commit();return i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(u[0]),await this.db.send(u[0]),c.hash=u[0].hash("hex"),c.height=-1,c.cp=a,c}async stockAuction(t,e,r,s,n,a){i(!!t),i(!!e),i(!!r);var o=await this.ensureCp(t,!0);if(!o)return null;r=(0|r)>>>0,t={type:X.RecordType.Auction,cid:t,to:e,uid:n,seq:0,sum:r,price:s},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,n,a);const c=new x;let u=new K($.stock,z(),this.db.curHeight,t);a=_.fromScript(k.createScript(u.toRaw(),k.types.NULLDATA),0),c.outputs.push(a),c.outputs.push(_.fromScript(e,r*s)),n?await this.fund(c,{account:n}):await this.fund(c),await this.sign(c);let h=c.commit();return i(h[0].verify(h[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(h[0]),await this.db.send(h[0]),u.hash=h[0].hash("hex"),u.height=-1,u.cp=o,u}async sendSecret(t,e,r){let i=this.db.$contacts.get(t);if(!i||!i.sender){var s=(await this.createReceive(r)).getAddress("string");if(t==s)throw new L(H.errors.TYPE_ERROR,"Forbid Sending to Self Address.");i=await this.db.ensureContact({contact:t,messenger:s,wallet:this,account:r})}if(i)return i.send(e);throw new L(H.errors.TYPE_ERROR,"Invalid Address.")}async commNotify(t){i(!!t),i(!!t.dst),i(!!t.content);const e=new x;var r=t.src||this.getReceive().toString();let s=new K($.notify,z(),this.db.curHeight,{src:r,content:t.content});r=_.fromScript(k.createScript(s.toRaw(),k.types.NULLDATA),0),e.outputs.push(r),r={address:t.dst,locktime:P.BLOCK_DAY,locktype:"csb",value:.1*P.COIN},e.outputs.push(new _(r)),t.account?await this.fund(e,{account:t.account,noChange:!0,allowInfiniteFee:!0}):await this.fund(e,{noChange:!0,allowInfiniteFee:!0}),await this.sign(e);let n=e.commit();return i(n[0].verify(n[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.addTX(n[0]),this.logger.debug("Sending tx on wallet(%s): %s",this.id,n[0].txid()),await this.db.send(n[0]),s.hash=n[0].hash("hex"),s.height=-1,s}async payOrder(t,e,r,s,n){i(!!t),i(!!e),i(!!r),i(!!s);var a=(await this.tokenCreate({cid:t,uid:e},n)).data.addr,c=(r=o.sprintf("%0-36s",r),await this.getOrderList([["cid",t],["sn",r]],n));if(0<c.list.length)return c.list[0];if((s=(0|s)>>>0)<P.MINPROPVALUE)return null;if(!(c=await this.ensureCp(t,!0)))return null;let u=new W(t,e,r,s,a,"");const h=new x;for(t=_.fromScript(k.createScript(Buffer.from(JSON.stringify(u)),k.types.NULLDATA),0),h.outputs.push(t),h.outputs.push(_.fromScript(c.current.address,s)),n?await this.fund(h,{account:n}):await this.fund(h);2<h.outputs.length;)h.outputs.pop();await this.sign(h,null,N.ZERO|N.ANYONECANPAY);let l=h.commit();return i(l[0].verify(l[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.addTX(l[0]),await this.db.send(l[0]),u.hash=l[0].hash("hex"),u.height=-1,u.cp=c,u}async cpRegister(t,e,r,s){if(i(!!e&&"object"==typeof e),!await this.db.client.execute("canExecute",[{confirm:!1,cid:e.cid,name:e.name,oper:$.cpRegister}]))throw new L(H.errors.TYPE_ERROR,"Invalid CP Register Info.");const n=new x;if(!t){let e=await this.createReceive(r);t=e.getAddress()}let a=await this.getKey(t);if(!a)throw new L(H.errors.TYPE_ERROR,"Invalid CP Register Address, Not along to this wallet.");e.pubAddress=t.toString(),e.pubKey=a.getPublicKey("hex"),e.signMethod="secp256k1",e.register=this.master.key.publicKey.toString("hex"),n.cpRegister(t,P.registerFee,e);for(let r=0;r<10;r++){var c=""+e.cid+this.network.stockFix+o.sprintf("%02d",r);c={oper:$.propCreate,pid:c,oid:e.cid,cid:e.cid,gold:P.MINPROPVALUE};n.propCreate(t,c)}var u=async()=>{r?await this.fund(n,{account:r}):await this.fund(n),await this.sign(n);let s=n.commit();return i(s[0].verify(s[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.addTX(s[0]),await this.db.send(s[0]),e.txid=s[0].txid(),e.addr=t.toString(),s};s?u():await u()}async cpX509(t,e){var r=await this.ensureCp(t);let i=await this.getKey(r.pubAddress);if(!i)throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");if(u=this.db.x509CertList.get(tt.getKey(t,1)))return[u,{}];const s=new Date,a=new Date(s.getTime()+315576e6),o=new n.asn1.DERUTCTime({date:s}),c=new n.asn1.DERUTCTime({date:a});var u=i.privateKey.toString("Hex"),h=j.publicKeyConvert(i.publicKey,!1).toString("Hex");u=new n.crypto.ECDSA({curve:"secp256k1",prv:u,pub:h}),h="/C=CN/O=ggserver/OU="+t+"/CN="+r.name,h=n.asn1.x509.X509Util.newCertPEM({serial:{int:1},sigalg:{name:"SHA256withECDSA"},issuer:{str:h},notbefore:{str:o.getString()},notafter:{str:c.getString()},subject:{str:h},sbjpubkey:u,ext:[{basicConstraints:{cA:!1,critical:!0}},{keyUsage:{bin:"11111"}}],cakey:u});let l=new tt({oper:"x509Issue",witness:t,certSq:1,activeTime:a.getTime(),cert:h});return l.sign(i),u=l.toOptions(!0),t={outputs:[{address:r.pubAddress,value:1e4}],comment:u},[u,await this.send(t,e)]}async x509Issue(t,e){var r=await this.ensureCp(t.cid);let i=await this.getKey(r.pubAddress);if(!i)throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");var s=o.hashInt(t.csrData),a=this.db.x509CertList.get(tt.getKey(t.cid,s));if(a)return[a,{}];if(!(a=n.asn1.csr.CSRUtil.getInfo(t.csrData))||!a.pubkey||!a.pubkey.obj)throw new L(H.errors.TYPE_ERROR,"Invalid csr request Data!");var c=a.pubkey.obj;if("object"!=typeof c||!(c instanceof n.crypto.ECDSA)||"secp256k1"!=c.curveName)throw new L(H.errors.TYPE_ERROR,"Invalid csr request Alg, Use secp256k1 ECC !");var u=new Date,h=new Date(t.activeTime);const l=new n.asn1.DERUTCTime({date:u}),p=new n.asn1.DERUTCTime({date:h});u=i.privateKey.toString("Hex"),h=j.publicKeyConvert(i.publicKey,!1).toString("Hex"),u=new n.crypto.ECDSA({curve:"secp256k1",prv:u,pub:h}),h="/C=CN/O=ggserver/OU="+t.cid+"/CN="+r.name,r=n.asn1.x509.X509Util.newCertPEM({serial:{int:s},sigalg:{name:"SHA256withECDSA"},issuer:{str:h},notbefore:{str:l.getString()},notafter:{str:p.getString()},subject:{str:a.subject.name},sbjpubkey:c,ext:[{basicConstraints:{cA:!1,critical:!0}},{keyUsage:{bin:"11"}}],cakey:u});let f=new tt({oper:"x509Issue",witness:t.cid,certSq:s,activeTime:t.activeTime,cert:r});return f.sign(i),h=f.toOptions(!0),a={outputs:[{address:t.addr.toString(),value:1e4}],comment:h},[h,await this.send(a,e)]}async x509Abolish(t,e){var r=await this.ensureCp(t.cid),i=await this.getKey(r.pubAddress);if(!i)throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");if(!this.db.x509CertList.get(tt.getKey(t.cid,t.seqno)))throw new L(H.errors.TYPE_ERROR,"Invalid Cert SeqNo, Not find Cert");let s=new et({oper:"x509Abolish",witness:t.cid,certSq:t.seqno,activeTime:t.activeTime});return s.sign(i),t=s.toOptions(!0),i={outputs:[{address:r.pubAddress,value:1e4}],comment:t},[t,await this.send(i,e)]}getSCAddress(t){return t=it.fromMnemonic(F.fromOptions(P.SmartContractMnemonic),this.network).deriveAccount(44,t).derive(9).derive(1),w.fromWitnessPubkeyhash(p.hash160(t.publicKey),this.network)}async cpChange(t,e){var r=await this.ensureCp(t.cid);if(r.cid==this.network.genesisId||"ATHENA"==r.name)throw new L(H.errors.TYPE_ERROR,"Invalid cp name.");let s=await this.getTX(r.current.hash);if(!s)throw new L(H.errors.TYPE_ERROR,"Do not have permission to change this info.");if(s=s.tx,!await this.belongToAccount(e,s.outputs[0].getAddress()))throw new L(H.errors.TYPE_ERROR,"Invalid account info.");if(t.newName){if(!await this.db.client.execute("canExecute",[{confirm:!1,cid:r.cid,name:t.newName,oper:$.cpChange}]))throw new L(H.errors.TYPE_ERROR,"Invalid CP Change Info.")}else t.newName=r.name;t.addr||(t.addr=w.fromString(r.current.address));const n=x.cpChange(s,t);e?await this.fund(n,{allowPreInput:!0,account:e}):await this.fund(n,{allowPreInput:!0}),await this.sign(n);let a=n.commit();return await this.db.send(a[0]),i(a[0].verify(a[1],k.flags.STANDARD_VERIFY_FLAGS)),t.txid=a[0].txid(),a}async propExchangeList(t,e){let r=new x,s=[];for(var[n,a,o]of t){let t=null;var c;if(t=await this.getTX(n.hash)){if(t=t.tx,c=n.index,t&&t.outputs&&!(t.outputs.length<=c))if(await this.belongToAccount(e,t.outputs[c].getAddress())){let e=t.outputs[c].getReturnData();e&&(r.propExchange(t,c,a),e.index=r.outputs.length-1,e.addr=a.toString(),s.push(e))}else this.logger.error("not owned prop:",n.hash,n.index)}else this.logger.error("tx not find:",n.hash,o)}e?await this.fund(r,{allowPreInput:!0,account:e}):await this.fund(r,{allowPreInput:!0}),await this.sign(r);let u=r.commit();return await this.db.addTX(u[0]),await this.db.send(u[0]),i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),u.push(s),u}async propDonate(t,e){var r=t.index;let i=await this.getTX(t.hash);if(!i||!i.tx||!i.tx.outputs||i.tx.outputs.length<=r)throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(!await this.belongToAccount(e,i.tx.outputs[r].getAddress()))throw new L(H.errors.TYPE_ERROR,"Props that do not belong to you.");if(!(t=i.tx.outputs[r].getReturnData()))throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(t.cid&&t.cid==this.network.genesisId)throw new Y(i.tx,"invalid","Special props that can not to donate",100);const s=new x;s.addInputFromTx(i.tx,r),s.addOutput(k.createScript(Buffer.from(JSON.stringify({value:i.tx.outputs[r].value,cid:t.cid,pid:t.pid,oid:t.oid,gaddr:this.getAddress().toString(this.network)})),k.types.NULLDATA),0),await this.sign(s,null,N.NONE|N.ANYONECANPAY);let n=s.commit();return n.push(t),n}async propReceive(t,e){let r=x.fromTX(t,1);t=r.inputs[0].prevout;let i=r.outputs[0].getReturnData(),s=(r.view.addOutput({hash:r.inputs[0].prevout.hash,index:r.inputs[0].prevout.index},new _({value:i.value})),r.outputs.pop(),this.getAddress().toString(this.network));e&&(n={cid:i.cid,uid:e},s=(n=await this.tokenCreate(n,e)).data.addr),r.outputs.push(_.fromScript(s,i.value,{oper:$.propExchange,pid:i.pid,cid:i.cid,oid:i.oid,prev:{hash:t.hash,index:t.index}})),e?await this.fund(r,{allowPreInput:!0,account:e}):await this.fund(r,{allowPreInput:!0}),await this.sign(r,null,N.ALL,[0]);var n=r.commit();return await this.db.send(n[0]),i.simAddr=s,[n[0],null,i]}async belongToAccount(t,e){return!(!e||!(e=await this.getAccountByAddress(e))||t&&e.name!==t)}async propExchange(t,e,r){let s=null,n=0;var a;if(Array.isArray(t)?(s=t[0],n=t[1]):(a=await this.getTX(t.hash))&&(s=a.tx,n=t.index),!s||!s.outputs||s.outputs.length<=n)return this.logger.error("Invalid tx info."),null;if(!await this.belongToAccount(r,s.outputs[n].getAddress()))return this.logger.error("Invalid user."),null;let o=s.outputs[n].getReturnData();if(!o)return this.logger.error("Invalid tx info."),null;const c=(new x).propExchange(s,n,e);o.index=c.outputs.length-1,r?await this.fund(c,{allowPreInput:!0,account:r}):await this.fund(c,{allowPreInput:!0}),await this.sign(c);let u=c.commit();return await this.db.addTX(u[0]),await this.db.send(u[0]),i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),u.push(o),u}async propFound(t,e){if(t=await this.getTX(t),i(t),!(t=t.tx))throw new L(H.errors.TYPE_ERROR,"Invalid hex string.");let r=0,s=(3<=t.outputs.length&&(r=2),t.outputs[r]);var n=s.getReturnData();if(!n||n.oper!==$.propExchange&&n.oper!==$.propCreate)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");if(n.cid==this.network.genesisId)throw new Y(block,"invalid","prop found supertoken",100);const a=new x;a.addInputFromTx(t,r),t=_.fromScript(s.getAddress(),s.value),a.outputs.push(t),e?await this.fund(a,{allowPreInput:!0,subtractFee:!0,account:e}):await this.fund(a,{allowPreInput:!0,subtractFee:!0}),await this.sign(a);let o=a.commit();return await this.db.send(o[0]),i(o[0].verify(o[1],k.flags.STANDARD_VERIFY_FLAGS)),o.push(n),o}async propSale(t,e,r,s){let n=await this.getTX(t);if(!n)throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(n.getDepth(this.db.curHeight)<=0)throw new L(H.errors.TYPE_ERROR,"No enough confirmations.");if(!(n=n.tx))throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");n.outputs[0].getReturnType(k.opcodes.OP_RETURN)&&(e=2);var a=n.outputs[e].getReturnData([k.opcodes.OP_PROPEXCHANGE,k.opcodes.OP_PROPCREATE]);if(!a)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");if(!await this.belongToAccount(s,n.outputs[e].getAddress()))throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(!(s=await this.getCoin(t,e))||-1===s.height||-2===s.height)throw new L(H.errors.WALLET_INSUFFICIENT_FUNDS,"Invalid coin.");if(await this.txdb.isSpent(t,e))throw new L(H.errors.WALLET_INSUFFICIENT_FUNDS,"Invalid coin.");if(r<=n.outputs[e].value)throw new L(H.errors.TYPE_ERROR,"Invalid fixed price.");if(a.cid==this.network.genesisId)throw new Y(n,"invalid","prop not for sale",100);const o=new x;s=o.addInputFromTx(n,e),t={oper:$.propSale,pid:a.pid,prev:{hash:s.prevout.hash,index:s.prevout.index},fixed:r,period:this.db.curHeight+P.BLOCK_DAY},e=_.fromScript(k.createScript(Buffer.from(JSON.stringify(t)),k.types.NULLDATA),0),o.outputs.push(e),await this.sign(o,null,N.SINGLE|N.ANYONECANPAY);let c=o.commit();return i(c[0].verify(c[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.send(c[0]),c}async propBuy(t,e,r){if(!(t=this.db.propList.get(t))||!t.bid||!t.bid.raw)throw new L(H.errors.INVALID_PARAMS,"Invalid Tx Hash.");const i=U.fromRaw(Buffer.from(t.bid.raw,"hex"));var s=(await this.createReceive(r)).getAddress(),n=t.gold,a=w.fromString(t.current.address,this.network).getHash();if(e<n)throw new Error("wrong price");if(1<i.outputs.length&&e<i.outputs[1].value)throw new Error("low bid price than before");let o=x.fromTX(i,1);if(!o.outputs[0].getReturnType(B.OP_RETURN))throw new Error("not a sale order");return await this.remove(i.hash("hex")),o.view.addOutput({hash:o.inputs[0].prevout.hash,index:o.inputs[0].prevout.index},new _({value:t.gold})),a=_.fromScript(k.createScript(a),e),o.outputs.push(a),e={oper:$.propExchange,pid:t.pid,cid:t.cid,oid:t.oid,prev:{hash:o.inputs[0].prevout.hash,index:o.inputs[0].prevout.index}},a=_.fromScript(s,n,e),o.outputs.push(a),r?await this.fund(o,{allowPreInput:!0,account:r}):await this.fund(o,{allowPreInput:!0}),await this.sign(o,null,N.ALL,[0]),s=o.commit(),t.owned||this.db.client.watchOutpoint((new M).fromOptions(i.inputs[0].prevout)),await this.db.send(s[0]),s}async getTXByAmount(t,e){let r=null;var i;for(i of await this.getCoins(e))if(!(i.height<=0)&&i.value==t){r=i;break}return r&&(e=await this.getTX(r.hash))?[e.tx,r.index,r.height]:[]}async contractCreate(t,e,r,s,n){if(this.db.transactionList.query(t,s)!=G.None)throw new L(H.errors.TYPE_ERROR,"Contract with the same address finded.");if(0!=parseInt(e%1e3,10))throw new L(H.errors.TYPE_ERROR,"Contract source should an integer multiple of 1000.");if(!await q.checkSum(this.network,t,s))throw new L(H.errors.TYPE_ERROR,"Create contract with an invalid Address or a Address with old transations.");let a=!1,[o,c,u]=await this.getTXByAmount(e,n);if(!o){a=!0;const t=new x;let r="";if(n){r=(await this.createReceive(n)).getAddress()}else r=this.getAddress();t.outputs.push(_.fromScript(r,e)),n?await this.fund(t,{allowPreInput:!0,account:n}):await this.fund(t,{allowPreInput:!0}),await this.sign(t);let s=t.commit();i(s[0].verify(s[1],k.flags.STANDARD_VERIFY_FLAGS)),o=s[0],c=0,u=-1}const h=new x;h.addInputFromTx(o,c,u);let l="";if(n){l=(await this.createReceive(n)).getAddress()}else l=this.getAddress();let p=await this.getKey(l);return t={oper:$.contractCreate,type:t,addr:s,src:e,dst:r,srcact:n,alice:p.getPublicKey("hex"),period:this.db.curHeight+P.TRANSACTION_PERIOD},s=_.fromScript(k.createScript(Buffer.from(JSON.stringify(t)),k.types.NULLDATA),0),h.outputs.push(s),await this.sign(h,null,N.SINGLE|N.ANYONECANPAY),e=h.commit(),a&&await this.db.send(o),await this.db.send(e[0]),e}async contractPromise(t,e){if(!(t=this.db.transactionList.get(t))||t.transStatus!=G.CreatedOnMem)throw new L(H.errors.INVALID_PARAMS,"Invalid Tx id.");const r=U.fromRaw(Buffer.from(t.raw,"hex"));if(!r)throw new L(H.errors.TYPE_ERROR,"Invalid Tx id.");if(!(t=q.parseContract(r))||t.oper!==$.contractCreate)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");let i=x.fromTX(r,1);if(!i.outputs[0].getReturnType(B.OP_RETURN))throw new Error("not a valid contract");i.view.addOutput({hash:i.inputs[0].prevout.hash,index:i.inputs[0].prevout.index},new _({value:t.src}));let s="";if(e){s=(await this.createReceive(e)).getAddress()}else s=this.getAddress();let n=await this.getKey(s),a={oper:$.contractPromise,prevhash:r.hash("hex"),type:t.type,addr:t.addr,dst:t.dst,srcact:t.srcact,dstact:e,bob:n.getPublicKey("hex"),period:t.period};e=new k([D.fromSymbol("promise"),D.fromData(Buffer.from(JSON.stringify(a))),D.fromSymbol("drop"),D.fromSymbol("greaterthan"),D.fromSymbol("drop"),D.fromSymbol("if"),D.fromData(p.hash160(Buffer.from(a.bob,"hex"))),D.fromSymbol("else"),D.fromData(p.hash160(Buffer.from(t.alice,"hex"))),D.fromSymbol("endif"),D.fromSymbol("checksig")]),i.outputs.push(_.fromScript(e,t.src)),await this.remove(a.prevhash),await this.sign(i,null,N.ALL,[0]);let o=i.commit();return await this.db.send(o[0]),a.current={hash:o[0].hash("hex"),index:0},a.raw=o[0].toRaw().toString("hex"),a.transStatus=G.Promised,this.db.transactionList.saveContract(a,!0),o}async contractExecute(t,e){if(!(t=this.db.transactionList.get(t))||t.transStatus!=G.Confirmed&&t.transStatus!=G.Expired)throw new L(H.errors.INVALID_PARAMS,"Invalid Tx id.");const r=U.fromRaw(Buffer.from(t.raw,"hex"));if(!r)throw new L(H.errors.TYPE_ERROR,"Invalid Tx id.");if(e=e||1,!(t=q.parseContract(r))||t.oper!==$.contractPromise)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");var s=r.outputs[1].getReturnData();if(!s||s.oper!==$.contractPromise)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");i.strictEqual(t.addr,s.addr),i.strictEqual(t.type,s.type),i.strictEqual(t.dst,s.dst),i.strictEqual(t.period,s.period),i.strictEqual(t.srcact,s.srcact),i.strictEqual(t.dstact,s.dstact);var n=this.db.transactionList.query(t.type,t.addr);if(n!=G.Confirmed&&n!=G.Expired)throw new L(H.errors.TYPE_ERROR,"Contract Promise not Check yet.");if(n==G.Expired&&1!=e||n==G.Confirmed&&2!=e)throw new L(H.errors.TYPE_ERROR,"Invalid Executor.");let a=t.srcact,o="";if(a=2==e?t.dstact:a){o=(await this.createReceive(a)).getAddress()}else o=this.getAddress();let c=new x;c.addInputFromTx(r,1);var u={oper:$.contractExecute,type:t.type,addr:t.addr,master:e};u=_.fromScript(k.createScript(Buffer.from(JSON.stringify(u)),k.types.NULLDATA),0),c.outputs.push(u),u=_.fromScript(o,r.outputs[1].value);c.outputs.push(u);let h=1==e?await T.fromPublic(Buffer.from(t.ori.alice,"hex")):await T.fromPublic(Buffer.from(s.bob,"hex"));u=await this.getKey(h.getAddress()),await c.signAsync(u,k.hashType.ALL,this.db.workers);let l=c.commit();return i(l[0].verify(l[1],k.flags.STANDARD_VERIFY_FLAGS,n)),await this.db.send(l[0]),l}async htlcDeal(t,e){var r=await this.getTX(t.hash);let i=null;if(e){const t=await this.getAccount(e);if(!t)throw new L(H.errors.TYPE_ERROR,"Invalid Account.");i=t.getReceive().toString()}else i=this.getReceive().toString();const s=new x;let n=(new k).pushOp(B.OP_1);return t.suggest&&n.pushData(Buffer.from(t.sa,"hex")),s.addInput({prevout:{hash:t.hash,index:t.index},script:n}),s.addOutput(i,r.tx.outputs[t.index].value-1e4),s.view.addOutput({hash:t.hash,index:t.index},new _(r.tx.outputs[t.index])),await this.sign(s,null,N.ALL),e=s.commit(),await this.db.send(e[0]),e}async htlcCancel(t,e){let r=null;var i=await this.getTX(t.hash);if(!(r=i?i.tx.outputs[t.index]:r))throw new L(H.errors.TYPE_ERROR,"Invalid Input.");let s=null;if(e){const t=await this.getAccount(e);if(!t)throw new L(H.errors.TYPE_ERROR,"Invalid Account.");s=t.getReceive().toString()}else s=this.getReceive().toString();const n=new x;let a=(new k).pushOp(B.OP_0);return t.suggest&&a.pushData(Buffer.from(t.sa,"hex")),n.addInput({prevout:{hash:t.hash,index:t.index},script:a}),t.suggest?n.setSequence(0,2*P.HTLC_CANCEL_PERIOD,!1):n.setSequence(0,P.HTLC_CANCEL_PERIOD,!1),n.addOutput(s,r.value-1e4),n.view.addOutput({hash:t.hash,index:t.index},new _(r)),i=await this.getKey(t.master),await n.signAsync(i,k.hashType.ALL,this.db.workers),e=n.commit(),await this.db.send(e[0]),e}async sendContracts(t,e,r){const i=new x;for(var s of t)i.outputs.push(r.create(s));return e?await this.fund(i,{account:e}):await this.fund(i),await this.sign(i),t=i.commit(),await this.db.addTX(t[0]),await this.db.send(t[0]),t}async addStockAccountSeq(t){i(t&&"object"==typeof t,"Token data should be a object"),i(t.cid,"Token data should has a cid property"),i(t.uid,"Token data should has a uid property");let e=await this.stockAddress(t.cid,t.uid);var r=this.db.accountList.getOrCreateStockAccount(t.cid,e.toString());return t.seq=r.seq+1,t}async tokenCreate(t,e="",r){i(t&&"object"==typeof t,"Token data should be a object"),i(t.cid,"Token data should has a cid property"),i(t.uid,"Token data should has a uid property"),t.time=!0,await this.ensureAccount({name:e,witness:!0});let s=null;if(r){if(!await this.belongToAccount(e,r))throw new L(H.errors.TYPE_ERROR,`stock.send address error: addr:${r} is not belongs to account:`+e);s=await this.getKey(r)}else s=await this.createReceive(e,o.hashInt(t.cid),this.master);return s.signData(t)}async sign(t,e,r=k.hashType.ALL,i){if(this.watchOnly)throw new Error("Cannot sign from a watch-only wallet.");return await this.unlock(e),e=await this.deriveInputs(t),t.signAsync(e,r,this.db.workers,i)}getCoinView(t){return this.txdb.getCoinView(t)}getSpentView(t){return this.txdb.getSpentView(t)}toDetails(t){return this.txdb.toDetails(t)}getDetails(t){return this.txdb.getDetails(t)}async getCoin(t,e){return this.txdb.getCoin(t,e)}async getStatusOfSC(t){return this.txdb.getStatusOfSC(t)}async setStatusOfSC(t,e){const r=await this.writeLock.lock();try{this.txdb.start();try{await this.txdb._setStatusOfSC(t,e),await this.txdb.commit()}catch(t){throw this.txdb.drop(),t}}finally{r()}}getLockedCoins(){return this.txdb.lockedCoins.values}getTX(t){return this.txdb.getTX(t)}getBlocks(){return this.txdb.getBlocks()}getBlock(t){return this.txdb.getBlock(t)}async add(t,e,r){const i=await this.writeLock.lock();try{return await this._add(t,e,r)}finally{i()}}async _add(t,e,r){let i,s;this.txdb.start();try{(i=await this.txdb._add(t,e,r))&&(s=await this.syncOutputDepth(i)),await this.txdb.commit()}catch(t){throw this.txdb.drop(),t}return s&&0<s.length&&(this.db.emit("address",this.id,s),this.emit("address",s)),i}async resetBalance(){const t=await this.writeLock.lock();try{this.txdb.start();try{await this.txdb.resetBalance(),await this.txdb.commit()}catch(t){throw this.txdb.drop(),t}}finally{t()}}async unconfirm(t){const e=await this.writeLock.lock();try{return await this.txdb.unconfirm(t)}finally{e()}}async remove(t){const e=await this.writeLock.lock();try{return await this.txdb.remove(t)}finally{e()}}async zap(t,e){const r=await this.writeLock.lock();try{return await this._zap(t,e)}finally{r()}}async _zap(t,e){return t=await this.ensureIndex(t),this.txdb.zap(t,e)}async abandon(t){const e=await this.writeLock.lock();try{return await this._abandon(t)}finally{e()}}_abandon(t){return this.txdb.abandon(t)}conserveCoin(t){return this.txdb.conserveCoin(t)}unConserveCoin(t){return this.txdb.unConserveCoin(t)}isConserved(t){return this.txdb.isConserved(t)}getConserved(){return this.txdb.getConserved()}async getHistory(t){return t=await this.ensureIndex(t),this.txdb.getHistory(t)}async getCoins(t){return t=await this.ensureIndex(t),this.txdb.getCoins(t)}async getCredits(t){return t=await this.ensureIndex(t),this.txdb.getCredits(t)}async getSmartCoins(t){const e=[];for(const i of await this.getCredits(t)){var r=i.coin;i.spent||this.txdb.isConserved(r)||(-1!==r.height&&-2!==r.height||i.own)&&e.push(r)}return e}async getPending(t){return t=await this.ensureIndex(t),this.txdb.getPending(t)}async getBalance(t){return t=await this.ensureIndex(t),this.txdb.getBalance(t)}async queryBalanceLog(t,e=0){return(t=await this.ensureIndex(t))?this.db.queryBalanceLog(this.wid,t,e):[]}async getRange(t,e){return t&&"object"==typeof t&&(e=t,t=null),t=await this.ensureIndex(t),this.txdb.getRange(t,e)}async getLast(t,e){return t=await this.ensureIndex(t),this.txdb.getLast(t,e)}async ensureIndex(t,e){if(null==t){if(e)throw new Error("No account provided.");return null}if(-1===(e=await this.getAccountIndex(t)))throw new Error("Account not found.");return e}getAddress(t){return this.account.getAddress(t)}getReceive(t){return this.account.getReceive(t)}getChange(t){return this.account.getChange(t)}getNested(t){return this.account.getNested(t)}inspect(){return{wid:this.wid,id:this.id,network:this.network.type,initialized:this.initialized,accountDepth:this.accountDepth,token:this.token.toString("hex"),tokenDepth:this.tokenDepth,state:this.txdb.state?this.txdb.state.toJSON(!0):null,master:this.master,account:this.account}}toJSON(t){return{network:this.network.type,wid:this.wid,id:this.id,initialized:this.initialized,watchOnly:this.watchOnly,accountDepth:this.accountDepth,token:this.token.toString("hex"),tokenDepth:this.tokenDepth,height:this.db.curHeight,state:this.txdb.state.toJSON(!0),master:this.master.toJSON(t),account:this.account.toJSON(!0)}}getSize(){var t=0;return(t+=50)+c.sizeVarString(this.id,"ascii")+c.sizeVarlen(this.master.getSize())}toRaw(){var t=this.getSize();const e=new m(t);return e.writeU32(this.network.magic),e.writeU32(this.wid),e.writeVarString(this.id,"ascii"),e.writeU8(this.initialized?1:0),e.writeU8(this.watchOnly?1:0),e.writeU32(this.accountDepth),e.writeBytes(this.token),e.writeU32(this.tokenDepth),e.writeVarBytes(this.master.toRaw()),e.render()}fromRaw(t){const e=new d(t);return t=a.fromMagic(e.readU32()),this.wid=e.readU32(),this.id=e.readVarString("ascii"),this.initialized=1===e.readU8(),this.watchOnly=1===e.readU8(),this.accountDepth=e.readU32(),this.token=e.readBytes(32),this.tokenDepth=e.readU32(),this.master.fromRaw(e.readVarBytes()),i(t===this.db.network,"Wallet network mismatch."),this}static fromRaw(t,e){return new at(t).fromRaw(e)}static isWallet(t){return t instanceof at}async issueCreate(t,e,r){let i=new J(t),s=(i.source.subjectName||(i.source.subjectName=i.erid),T.fromPrivate(Buffer.from(t.key,"hex"),!0,this.network));s.witness=!0,i.sign(s,!0,this.network);var n=i.toOptions(!0);return r?this.send({outputs:[{address:t.address,value:1e4}],comment:n},e):await this.send({outputs:[{address:t.address,value:1e4}],comment:n},e),n}async caAbolish(t,e,r){let i=T.fromPrivate(Buffer.from(t.key,"hex"),!0,this.network),s=(i.witness=!0,await this.db.$parent.chain.db.erList.getEr(t.erid));if(!s)throw new L(H.errors.TYPE_ERROR,"ca.abolish: Invalid erid.");if(s.source.cid!=t.cid)throw new L(H.errors.TYPE_ERROR,"ca.abolish: Invalid cid.");if(s.source.uid!=t.uid)throw new L(H.errors.TYPE_ERROR,"ca.abolish: Invalid uid.");var n=s.signature;if(s.sign(i,!0,this.network),s.witness!=t.witness||s.signature!=n)throw new L(H.errors.TYPE_ERROR,"ca.abolish: You have no permission to abolish this witness.");let a=new Z(t);return a.sign(i),n=a.toOptions(!0),r?this.send({outputs:[{address:t.address,value:1e4}],comment:n},e):await this.send({outputs:[{address:t.address,value:1e4}],comment:n},e),n}async enchanceCp(t,e){let r=new Q(t);r.oper="enchanceCp";t=await this.ensureCp(r.to);var i=await this.ensureCp(r.from);if(!(i=await this.getKey(i.pubAddress)))throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");return r.sign(i),i=r.toOptions(!0),[await this.send({outputs:[{address:t.pubAddress,value:1e4}],comment:i},e),i]}async ensureCp(t,e=!1){if(await this.db.flushCP([t]),(t=this.db.cpList.getItem(t))||e)return t;throw new L(H.errors.TYPE_ERROR,"Invalid cid, cannot find cp.")}}t.exports=at},function(t,e,r){"use strict";
|
|
292
|
+
*/const i=r(0);var s=r(16);const n=r(320),a=r(15),o=r(1),c=r(3),u=r(35),h=r(201),l=r(120).sortWithSeq,p=r(6),f=r(95),d=r(2),m=r(4),g=r(70),y=r(346);r(226);const v=r(111),b=r(73),w=r(12),x=r(59),k=r(17),S=r(227),E=r(124),_=r(26),A=r(161),R=r(243),I=r(65),j=r(28),C=r(27),P=r(7),O=r(316),T=r(32),F=E.Mnemonic,{opcodes:B,hashType:N}=r(21),D=r(169),L=r(91),H=r(92),z=r(143),M=r(46),U=r(19),q=r(42),V=r(53),{NotifyMsg:K,OrderData:W,ContractStatus:G,ContractType:$}=r(5),Y=r(38).VerifyError,X=r(83).stockItem;r(324).AuditItem;const J=r(157).ErItem,Z=r(158).ErAbolishItem,Q=r(241).EnchancementItem,tt=r(159).X509Cert,et=r(160).X509Abolish,rt=r(29),it=r(69),st=r(63),nt=r(81);class at extends s{constructor(t,e){super(),i(t,"DB required."),this.db=t,this.network=t.network,this.logger=t.logger,this.readLock=new h,this.writeLock=new u,this.sendLock=new u,this.indexCache=new I(1e4),this.accountCache=new I(1e4),this.pathCache=new I(1e5),this.current=null,this.wid=0,this.id=null,this.initialized=!1,this.watchOnly=!1,this.accountDepth=0,this.token=c.ZERO_HASH,this.tokenDepth=0,this.master=new R,this.txdb=new y(this),this.account=null,e&&this.fromOptions(e)}fromOptions(t){let e,r,s=t.master;return s?("string"==typeof s&&(s=E.PrivateKey.fromBase58(s,this.network)),i(E.isPrivate(s),"Must create wallet with hd private key.")):(r=new F(t.mnemonic),s=E.fromMnemonic(r,this.network)),i(s.network===this.network,"Network mismatch for master key."),this.master.fromKey(s,r),null!=t.wid&&(i(o.isU32(t.wid)),this.wid=t.wid),t.id&&(i(b.isName(t.id),"Bad wallet ID."),e=t.id),null!=t.initialized&&(i("boolean"==typeof t.initialized),this.initialized=t.initialized),null!=t.watchOnly&&(i("boolean"==typeof t.watchOnly),this.watchOnly=t.watchOnly),null!=t.accountDepth&&(i(o.isU32(t.accountDepth)),this.accountDepth=t.accountDepth),t.token&&(i(Buffer.isBuffer(t.token)),i(32===t.token.length),this.token=t.token),e=e||this.getID(),this.id=e,this}static fromOptions(t,e){return new at(t).fromOptions(e)}async init(t){var e=t.passphrase;i(!this.initialized),this.initialized=!0,e&&await this.master.encrypt(e),t=await this._createAccount(t,e);i(t),this.account=t,this.logger.info("Wallet initialized (%s).",this.id),await this.txdb.open()}async open(){i(this.initialized);var t=await this.getAccount(0);if(!t)throw new Error("Default account not found.");this.account=t,this.logger.info("Wallet opened (%s).",this.id),await this.txdb.open()}async destroy(){const t=await this.writeLock.lock(),e=await this.sendLock.lock();try{this.db.unregister(this),await this.master.destroy(),this.readLock.destroy(),this.writeLock.destroy(),this.sendLock.destroy()}finally{e(),t()}}async addSharedKey(t,e){const r=await this.writeLock.lock();try{return await this._addSharedKey(t,e)}finally{r()}}async _addSharedKey(t,e){e||(e=t,t=null);const r=await this.getAccount(t=null==t?0:t);if(!r)throw new Error("Account not found.");let i;this.start();try{i=await r.addSharedKey(e)}catch(t){throw this.drop(),t}return await this.commit(),i}async removeSharedKey(t,e){const r=await this.writeLock.lock();try{return await this._removeSharedKey(t,e)}finally{r()}}async _removeSharedKey(t,e){e||(e=t,t=null);const r=await this.getAccount(t=null==t?0:t);if(!r)throw new Error("Account not found.");let i;this.start();try{i=await r.removeSharedKey(e)}catch(t){throw this.drop(),t}return await this.commit(),i}async setPassphrase(t,e){t&&await this.decrypt(t),e&&await this.encrypt(e)}async encrypt(t){const e=await this.writeLock.lock();try{return await this._encrypt(t)}finally{e()}}async _encrypt(t){t=await this.master.encrypt(t,!0),this.start();try{await this.db.encryptKeys(this,t)}catch(e){throw f(t),this.drop(),e}f(t),this.save(),await this.commit()}async decrypt(t){const e=await this.writeLock.lock();try{return await this._decrypt(t)}finally{e()}}async _decrypt(t){t=await this.master.decrypt(t,!0),this.start();try{await this.db.decryptKeys(this,t)}catch(e){throw f(t),this.drop(),e}f(t),this.save(),await this.commit()}async rename(t){const e=await this.writeLock.lock();try{return await this.db.rename(this,t)}finally{e()}}async writeBalanceLog(t){const e=await this.writeLock.lock();try{return await this.db.writeBalanceLog(this,t)}finally{e()}}async renameAccount(t,e){const r=await this.writeLock.lock();try{return await this._renameAccount(t,e)}finally{r()}}async _renameAccount(t,e){if(!b.isName(e))throw new Error("Bad account name.");var r=await this.getAccount(t);if(!r)throw new Error("Account not found.");if(0===r.accountIndex)throw new Error("Cannot rename default account.");if(await this.hasAccount(e))throw new Error("Account name not available.");t=r.name,this.start(),this.db.renameAccount(r,e),await this.commit(),this.indexCache.remove(t),t=this.pathCache.values();for(const i of t)i.account===r.accountIndex&&(i.name=e)}async lock(){const t=await this.writeLock.lock(),e=await this.sendLock.lock();try{await this.master.lock()}finally{e(),t()}}unlock(t,e){return this.master.unlock(t,e)}getID(){i(this.master.key,"Cannot derive id.");var t=this.master.key.derive(44);const e=new m(37);e.writeBytes(t.publicKey),e.writeU32(this.network.magic),t=p.hash160(e.render());const r=new m(27);return r.writeU8(3),r.writeU8(190),r.writeU8(4),r.writeBytes(t),r.writeChecksum(),g.encode(r.render())}async createAccount(t,e){const r=await this.writeLock.lock();try{return await this._createAccount(t,e)}finally{r()}}async _createAccount(t,e){let r,s,n=t.name,a=(n=n||this.accountDepth.toString(10),0);if(0!=this.accountDepth&&(a=o.hashInt(n)),await this.hasAccountIndex(a))throw new Error("Account Index Conflict.");if(await this.hasAccount(n))throw new Error("Account already exists.");if(await this.unlock(e),this.watchOnly&&t.accountKey){if("string"==typeof(r=t.accountKey)&&(r=E.PublicKey.fromBase58(r,this.network)),!E.isPublic(r))throw new Error("Must add HD public keys to watch only wallet.");i(r.network===this.network,"Network mismatch for watch only key.")}else i(this.master.key),r=(r=this.master.key.deriveAccount(44,a)).toPublic();e={wid:this.wid,id:this.id,name:0===this.accountDepth?"default":n,witness:t.witness,watchOnly:this.watchOnly,accountKey:r,accountIndex:a,type:t.type,m:t.m,n:t.n,keys:t.keys},this.start();try{(s=A.fromOptions(this.db,e)).wallet=this,await s.init()}catch(t){throw this.drop(),t}return this.logger.info("Created account %s/%s/%d.",s.id,s.name,s.accountIndex),this.accountDepth++,this.save(),await this.commit(),s}async ensureAccount(t,e){var r=t.name;return(r=await this.getAccount(r))||this.createAccount(t,e)}getAccounts(){return this.db.getAccounts(this.wid)}getAddressHashes(t){return null!=t?this.getAccountHashes(t):this.db.getWalletHashes(this.wid)}async getAccountHashes(t){return t=await this.ensureIndex(t,!0),this.db.getAccountHashes(this.wid,t)}async getAccount(t){if(this.account&&(null==t||"default"===t||"number"==typeof t&&0===t||"string"==typeof t&&0===t.length))return this.account;if(-1===(t=await this.getAccountIndex(t)))return null;const e=await this.readLock.lock(t);try{return await this._getAccount(t)}finally{e()}}async _getAccount(t){var e=this.accountCache.get(t);if(e)return e;const r=await this.db.getAccount(this.wid,t);return r?(r.wallet=this,r.wid=this.wid,r.id=this.id,r.watchOnly=this.watchOnly,await r.open(),this.accountCache.set(t,r),r):null}async getAccountIndex(t){var e;return null==t?-1:"number"==typeof t?t:null!=(e=this.indexCache.get(t))?e:-1===(e=await this.db.getAccountIndex(this.wid,t))?-1:(this.indexCache.set(t,e),e)}async getAccountName(t){var e;return"string"==typeof t?t:(e=this.accountCache.get(t))?e.name:this.db.getAccountName(this.wid,t)}async hasAccount(t){return-1!==(t=await this.getAccountIndex(t))&&(!!this.accountCache.has(t)||this.db.hasAccount(this.wid,t))}async hasAccountIndex(t){return!!this.accountCache.has(t)||this.db.hasAccount(this.wid,t)}createReceive(t,e=0,r=null){return this.createKey(t,0,e,r)}createChange(t){return this.createKey(t,1)}createNested(t){return this.createKey(t,2)}async createKey(t,e,r=0,i=null){const s=await this.writeLock.lock();try{return await this._createKey(t,e,r,i)}finally{s()}}async _createKey(t,e,r=0,i=null){null==e&&(e=t,t=null);const s=await this.getAccount(t=t||0);if(!s)throw new Error("Account not found.");let n;this.start();try{n=await s.createKey(e,r,i)}catch(t){throw this.drop(),t}return await this.commit(),n}save(){return this.db.save(this)}async saveAccount(t){const e=await this.writeLock.lock();try{this.start(),t._save(),await this.commit()}finally{e()}}start(){return this.db.start(this)}drop(){return this.db.drop(this)}clear(){return this.db.clear(this)}commit(){return this.db.commit(this)}async hasAddress(t){return t=w.getHash(t,"hex"),null!=await this.getPath(t)}async getPath(t){const e=await this.readPath(t);return e?(e.name=await this.getAccountName(e.account),i(e.name),this.pathCache.set(e.hash,e),e):null}async readPath(t){t=w.getHash(t,"hex");var e=this.pathCache.get(t);if(e)return e;const r=await this.db.getPath(this.wid,t);return r?(r.id=this.id,r):null}async hasPath(t){return t=w.getHash(t,"hex"),!!this.pathCache.has(t)||this.db.hasPath(this.wid,t)}async getPaths(t){if(null!=t)return this.getAccountPaths(t);const e=[];for(const t of await this.db.getWalletPaths(this.wid))t.id=this.id,t.name=await this.getAccountName(t.account),i(t.name),this.pathCache.set(t.hash,t),e.push(t);return e}async getAccountPaths(t){var e=await this.ensureIndex(t,!0),r=await this.getAccountHashes(e),s=await this.getAccountName(t);i(s);const n=[];for(const t of r){const r=await this.readPath(t);i(r),i(r.account===e),r.name=s,this.pathCache.set(r.hash,r),n.push(r)}return n}async importKey(t,e,r){const i=await this.writeLock.lock();try{return await this._importKey(t,e,r)}finally{i()}}async _importKey(t,e,r){if(t&&"object"==typeof t&&(r=e,e=t,t=null),null==t&&(t=0),i(e.network===this.network,"Network mismatch for key."),this.watchOnly){if(e.privateKey)throw new Error("Cannot import privkey into watch-only wallet.")}else if(!e.privateKey)throw new Error("Cannot import pubkey into non watch-only wallet.");var s=e.getHash("hex");if(await this.getPath(s))throw new Error("Key already exists.");const n=await this.getAccount(t);if(!n)throw new Error("Account not found.");if(n.type!==A.types.PUBKEYHASH)throw new Error("Cannot import into non-pkh account.");await this.unlock(r);const a=S.fromRing(n,e).toPath();this.master.encrypted&&(a.data=this.master.encipher(a.data,a.hash),i(a.data),a.encrypted=!0),this.start();try{await n.savePath(a)}catch(t){throw this.drop(),t}await this.commit()}async importAddress(t,e){const r=await this.writeLock.lock();try{return await this._importAddress(t,e)}finally{r()}}async _importAddress(t,e){if(e||(e=t,t=null),null==t&&(t=0),e.network!==this.network)throw new Error("Network mismatch for address.");if(!this.watchOnly)throw new Error("Cannot import address into non watch-only wallet.");if(await this.getPath(e))throw new Error("Address already exists.");const r=await this.getAccount(t);if(!r)throw new Error("Account not found.");if(r.type!==A.types.PUBKEYHASH)throw new Error("Cannot import into non-pkh account.");t=v.fromAddress(r,e),this.start();try{await r.savePath(t)}catch(t){throw this.drop(),t}await this.commit()}async fund(t,e){const r=await this.writeLock.lock();try{return await this._fund(t,e)}finally{r()}}async _fund(t,e){if(e=e||{},!this.initialized)throw new Error("Wallet is not initialized.");if(this.watchOnly)throw new Error("Cannot fund from watch-only wallet.");let r;if(null!=e.account){if(!(r=await this.getAccount(e.account)))throw new Error("Account not found.")}else r=this.account;if(!r.initialized)throw new Error("Account is not initialized.");let s,n=e.rate;return null==n&&(n=await this.db.estimateFee(e.blocks)),s=e.smart?await this.getSmartCoins(r.name):(s=await this.getCoins(r.name),this.txdb.filterConserved(s)),await t.fund(s,{allowPreInput:e.allowPreInput,noChange:e.noChange,selection:e.selection,round:e.round,depth:e.depth,hardFee:e.hardFee,subtractFee:e.subtractFee,subtractIndex:e.subtractIndex,changeAddress:r.change.getAddress(),height:this.db.curHeight,rate:n,maxFee:e.maxFee,estimate:t=>this.estimateSize(t),network:this.network}),!e.allowInfiniteFee&&e.noChange&&i(t.getFee()<=O.MAX_FEE,"TX exceeds MAX_FEE."),s}async getAccountByAddress(t){return t=w.getHash(t,"hex"),(t=await this.getPath(t))?this.getAccount(t.account):null}async estimateSize(t){var e=P.WITNESS_SCALE_FACTOR,r=w.fromScript(t);if(!r)return-1;var i=await this.getAccountByAddress(r);if(!i)return-1;let s=0;if(t.isScripthash()&&i.witness)switch(i.type){case A.types.PUBKEYHASH:s=4*(s+23);break;case A.types.MULTISIG:s=4*(s+35)}switch(i.type){case A.types.PUBKEYHASH:s=s+74+34;break;case A.types.MULTISIG:s=(s=(s=(s=(s+=1)+74*i.m)+3+1)+34*i.n)+1+1}return i.witness?s=((s+=1)+e-1)/e|0:s+=c.sizeVarint(s),s}async createTX(t){var e=t.outputs;const r=new x;i(Array.isArray(e),"Outputs must be an array."),i(0<e.length,"No outputs available."),t.comment&&("object"==typeof t.comment&&(t.comment=JSON.stringify(t.comment)),r.outputs.push(_.fromScript(k.createScript(Buffer.from(t.comment),k.types.NULLDATA),0)));for(const t of e){const e=new _(t),i=e.getAddress();if(e.isDust())throw new Error("Output is dust.");if(0<e.value){if(!i)throw new Error("Cannot send to unknown address.");if(i.isNull())throw new Error("Cannot send to null address.")}r.outputs.push(e)}let s=null;if(t.inputs)for(const e of t.inputs){var n=await this.getTX(e.hash);if(n){let i=V.fromTX(n.tx,e.index,-1,0);i&&(s=i.getAddress(),t.allowPreInput=!0,r.addCoin(i))}}else await this.fund(r,t);if(s){const t=new _;t.value=r.getFee()-O.MIN_FEE,t.script.fromAddress(s),r.outputs.push(t),r.changeIndex=r.outputs.length-1}if(!1!==t.sort&&r.sortMembers(),null!=t.locktime&&r.setLocktime(t.locktime),i(r.isSane(),"TX failed sanity check."),i(r.verifyInputs(this.db.curHeight+1),"TX failed context check."),0===await this.template(r))throw new Error("Templating failed.");return r}async send(t,e){const r=await this.sendLock.lock();try{return await this._send(t,e)}finally{r()}}async _send(t,e){return e&&(t.account=e),e=await this.createTX(t,!0),await this.sign(e),this.sendMTX(e,{sendafter:t.sendafter})}async sendMTX(t,e={}){if(!t.isSigned())throw new Error("TX could not be fully signed.");const r=t.toTX();if(r.getSigopsCost(t.view)>C.MAX_TX_SIGOPS_COST)throw new Error("TX exceeds policy sigops.");if(r.getWeight()>C.MAX_TX_WEIGHT)throw new Error("TX exceeds policy weight.");return e.sendafter||(this.logger.debug("Sending wallet tx (%s): %s",this.id,r.txid()),await this.db.addTX(r),await this.db.send(r)),r}async resend(){var t=await this.getPending();0<t.length&&this.logger.info("Rebroadcasting %d transactions.",t.length);const e=[];for(const r of t)e.push(r.tx);for(const t of await l(e,this.db))await this.db.send(t);return e}async deriveInputs(t){var e;i(t.mutable);const r=[];for(const i of await this.getInputPaths(t)){const t=await this.getAccount(i.account);t&&(e=t.derivePath(i,this.master))&&r.push(e)}return r}async getKey(t){if(t=w.getHash(t,"hex",this.network.type),!(t=await this.getPath(t)))return null;const e=await this.getAccount(t.account);return e?e.derivePath(t,this.master):null}async exportToFile(t){var e=await this.db.getTip(),r=o.date();const i=[o.fmt("# Wallet Dump created by %s %s",nt.protocol,nt.version),o.fmt("# * Created on %s",r),o.fmt("# * Best block at time of backup was %d (%s).",e.height,o.revHex(e.hash)),o.fmt("# * File: %s",t.file),""];e=o.fmt("W %s wid= %s",this.toRaw().toString("base64"),this.wid),i.push(e),e=await this.getAccounts();for(const t of e){const e=await this.getAccount(t);var s=o.fmt("C %s name= %s",e.toRaw().toString("base64"),e.name);i.push(s)}for(const t of await this.getAddressHashes()){const e=await this.getPrivateKey(t);if(e){var n=e.getAddress("string");let t="A %s %s label= account= %s index= %s addr=%s";1===e.branch?t="A %s %s change=1 account= %s index= %s addr=%s":2==e.branch&&(t="A %s %s nested=1 account= %s index= %s addr=%s"),n=o.fmt(t,e.toSecret(),r,e.account,e.index,n),i.push(n)}}if(i.push(""),i.push("# End of dump"),i.push(""),e=i.join("\n"),st.unsupported)return e;await st.writeFile(t.file,e,"utf8")}async getPrivateKey(t,e){if(t=w.getHash(t,"hex"),!(t=await this.getPath(t)))return null;const r=await this.getAccount(t.account);return r?(await this.unlock(e),(e=r.derivePath(t,this.master)).privateKey?e:null):null}async getInputPaths(t){if(i(t.mutable),!t.hasCoins())throw new Error("Not all coins available.");const e=[];for(const i of t.getInputHashes("hex")){var r=await this.getPath(i);r&&e.push(r)}return e}async getOutputPaths(t){const e=[];for(const i of t.getOutputHashes("hex")){var r=await this.getPath(i);r&&e.push(r)}return e}async setLookahead(t,e){const r=await this.writeLock.lock();try{return this._setLookahead(t,e)}finally{r()}}async _setLookahead(t,e){null==e&&(e=t,t=null);const r=await this.getAccount(t=null==t?0:t);if(!r)throw new Error("Account not found.");this.start();try{await r.setLookahead(e)}catch(t){throw this.drop(),t}await this.commit()}async syncOutputDepth(t){const e=new Map;for(const i of t.outputs){var r=i.path;r&&-1!==r.index&&(e.has(r.account)||e.set(r.account,[]),e.get(r.account).push(r))}const s=[];for(var[n,a]of e){let t=-1,e=-1,r=-1;for(const i of a)switch(i.branch){case 0:i.index>t&&(t=i.index);break;case 1:i.index>e&&(e=i.index);break;case 2:i.index>r&&(r=i.index)}t+=2,e+=2,r+=2;const o=await this.getAccount(n);i(o),(a=await o.syncDepth(t,e,r))&&s.push(a)}return s}async getRedeem(t){"string"==typeof t&&(t=Buffer.from(t,"hex"));const e=await this.getKey(t.toString("hex"));return e?e.getRedeem(t):null}async template(t){var e=await this.deriveInputs(t);return t.sign(e)}async getOrderList(t,e){let r=[],i=new rt,s=((await this.getHistory(e||"default")).reduce((t,e)=>{let{tx:i,hash:s,height:n}=e;if(i.outputs[0].getReturnType(B.OP_RETURN))try{var a=JSON.parse(i.outputs[0].script.code[1].toString());if(a&&a.oper==$.payOrder){let e=W.fromJson(a);e.hash=s,e.height=n,t.set(""+e.cid+e.sn,e),r.push(e.cid)}}catch(e){}return t},i),i.query(t));return await this.db.flushCP(r),s.list.map(t=>{t.cp=this.db.cpList.getItem(t.cid)}),s}async propCreate(t,e){const r=new x;for(var s of t){var n=await this.ensureCp(s.cid,!0);n&&s.cid!=this.network.genesisId&&(s.gold=(0|s.gold)>>>0,s.gold<P.MINPROPVALUE||(s.pid||(s.pid=z()),r.propCreate(n.current.address,s),s.index=r.outputs.length-1))}if(0<r.outputs.length){e?await this.fund(r,{account:e}):await this.fund(r),await this.sign(r);let s=r.commit();for(var a of(await this.db.addTX(s[0]),await this.db.send(s[0]),i(s[0].verify(s[1],k.flags.STANDARD_VERIFY_FLAGS)),t))a.hash=s[0].hash("hex"),a.txid=s[0].txid();return s}return[]}async stockAddress(t,e){return await this.ensureAccount({name:e,witness:!0}),(await this.createReceive(e,o.hashInt(t),this.master)).getAddress()}async stockOffer(t,e,r,s){i(!!t),i(!!e),i(!!r),e=(0|e)>>>0,r=(0|r)>>>0;var n=await this.ensureCp(t);let a=await this.getKey(n.current.address);if(i(!!a),s&&s!==a.name)throw new L(H.errors.TYPE_ERROR,"illegal account");t=a.signData({cid:t,type:X.RecordType.Offer,sum:e,price:r});const o=new x;o.outputs.push(_.fromScript(t.data.addr,.05*e*r));let c=new K($.stock,z(),this.db.curHeight,t);e=_.fromScript(k.createScript(c.toRaw(),k.types.NULLDATA),0),o.outputs.push(e),s?await this.fund(o,{account:s}):await this.fund(o),o.outputs.shift(),await this.sign(o);let u=o.commit();return i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(u[0]),await this.db.send(u[0]),c.hash=u[0].hash("hex"),c.height=-1,c.cp=n,c}async stockPurchase(t,e,r){if(i(!!t),i(!!e),(e=(0|e)>>>0)<P.STOCK_TRADE_SINGLE||e>P.STOCK_MAX_TRADE_SINGLE)throw new L(H.errors.TYPE_ERROR,"Invalid Stock Amount.");var s=await this.ensureCp(t);t={type:X.RecordType.Purchase,cid:t,uid:r,seq:0,to:s.current.address,sum:e},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,r);const n=new x;let a=new K($.stock,z(),this.db.curHeight,t);t=_.fromScript(k.createScript(a.toRaw(),k.types.NULLDATA),0),n.outputs.push(t),n.outputs.push(_.fromScript(s.current.address,e*s.stock.price)),r?await this.fund(n,{account:r}):await this.fund(n),await this.sign(n);let o=n.commit();return i(o[0].verify(o[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(o[0]),await this.db.send(o[0]),a.hash=o[0].hash("hex"),a.height=-1,a.cp=s,a}async stockPurchaseTo(t,e,r,s){if(i(!!t),i(!!e),(e=(0|e)>>>0)<P.STOCK_TRADE_SINGLE||e>P.STOCK_MAX_TRADE_SINGLE)throw new L(H.errors.TYPE_ERROR,"Invalid Stock Amount.");var n=await this.ensureCp(t);t={type:X.RecordType.Purchase,cid:t,uid:r,seq:0,to:n.current.address,sum:e},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,r);const a=new x;let o=new K($.stock,z(),this.db.curHeight,t);r=_.fromScript(k.createScript(o.toRaw(),k.types.NULLDATA),0),a.outputs.push(r),a.outputs.push(_.fromScript(n.current.address,e*n.stock.price)),s?await this.fund(a,{account:s}):await this.fund(a),await this.sign(a);let c=a.commit();return i(c[0].verify(c[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(c[0]),await this.db.send(c[0]),o.hash=c[0].hash("hex"),o.height=-1,o.cp=n,o}async stockSend(t,e,r,s,n){i(!!t),i(!!e),e=(0|e)>>>0;var a=await this.ensureCp(t,!0);if(!a)return null;t={type:X.RecordType.Send,cid:t,uid:s,seq:0,sum:e,to:r},await this.addStockAccountSeq(t),e=await this.tokenCreate(t,s,n);const o=new x;let c=new K($.stock,z(),this.db.curHeight,e);r=_.fromScript(k.createScript(c.toRaw(),k.types.NULLDATA),0),o.outputs.push(r),s?await this.fund(o,{account:s}):await this.fund(o),await this.sign(o);let u=o.commit();return i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(u[0]),await this.db.send(u[0]),c.hash=u[0].hash("hex"),c.height=-1,c.cp=a,c}async stockBid(t,e,r,s,n){i(!!t),i(!!e),i(!!r),e=(0|e)>>>0,r=(0|r)>>>0;var a=await this.ensureCp(t,!0);if(!a)return null;t={type:X.RecordType.Bid,cid:t,uid:s,seq:0,sum:e,price:r},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,s,n);const o=new x;o.outputs.push(_.fromScript(t.data.addr,.05*e*r));let c=new K($.stock,z(),this.db.curHeight,t);n=_.fromScript(k.createScript(c.toRaw(),k.types.NULLDATA),0),o.outputs.push(n),s?await this.fund(o,{account:s}):await this.fund(o),o.outputs.shift(),await this.sign(o);let u=o.commit();return i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(u[0]),await this.db.send(u[0]),c.hash=u[0].hash("hex"),c.height=-1,c.cp=a,c}async stockAuction(t,e,r,s,n,a){i(!!t),i(!!e),i(!!r);var o=await this.ensureCp(t,!0);if(!o)return null;r=(0|r)>>>0,t={type:X.RecordType.Auction,cid:t,to:e,uid:n,seq:0,sum:r,price:s},await this.addStockAccountSeq(t),t=await this.tokenCreate(t,n,a);const c=new x;let u=new K($.stock,z(),this.db.curHeight,t);a=_.fromScript(k.createScript(u.toRaw(),k.types.NULLDATA),0),c.outputs.push(a),c.outputs.push(_.fromScript(e,r*s)),n?await this.fund(c,{account:n}):await this.fund(c),await this.sign(c);let h=c.commit();return i(h[0].verify(h[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.verifyClsTx(h[0]),await this.db.send(h[0]),u.hash=h[0].hash("hex"),u.height=-1,u.cp=o,u}async sendSecret(t,e,r){let i=this.db.$contacts.get(t);if(!i||!i.sender){var s=(await this.createReceive(r)).getAddress("string");if(t==s)throw new L(H.errors.TYPE_ERROR,"Forbid Sending to Self Address.");i=await this.db.ensureContact({contact:t,messenger:s,wallet:this,account:r})}if(i)return i.send(e);throw new L(H.errors.TYPE_ERROR,"Invalid Address.")}async commNotify(t){i(!!t),i(!!t.dst),i(!!t.content);const e=new x;var r=t.src||this.getReceive().toString();let s=new K($.notify,z(),this.db.curHeight,{src:r,content:t.content});r=_.fromScript(k.createScript(s.toRaw(),k.types.NULLDATA),0),e.outputs.push(r),r={address:t.dst,locktime:P.BLOCK_DAY,locktype:"csb",value:.1*P.COIN},e.outputs.push(new _(r)),t.account?await this.fund(e,{account:t.account,noChange:!0,allowInfiniteFee:!0}):await this.fund(e,{noChange:!0,allowInfiniteFee:!0}),await this.sign(e);let n=e.commit();return i(n[0].verify(n[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.addTX(n[0]),this.logger.debug("Sending tx on wallet(%s): %s",this.id,n[0].txid()),await this.db.send(n[0]),s.hash=n[0].hash("hex"),s.height=-1,s}async payOrder(t,e,r,s,n){i(!!t),i(!!e),i(!!r),i(!!s);var a=(await this.tokenCreate({cid:t,uid:e},n)).data.addr,c=(r=o.sprintf("%0-36s",r),await this.getOrderList([["cid",t],["sn",r]],n));if(0<c.list.length)return c.list[0];if((s=(0|s)>>>0)<P.MINPROPVALUE)return null;if(!(c=await this.ensureCp(t,!0)))return null;let u=new W(t,e,r,s,a,"");const h=new x;for(t=_.fromScript(k.createScript(Buffer.from(JSON.stringify(u)),k.types.NULLDATA),0),h.outputs.push(t),h.outputs.push(_.fromScript(c.current.address,s)),n?await this.fund(h,{account:n}):await this.fund(h);2<h.outputs.length;)h.outputs.pop();await this.sign(h,null,N.ZERO|N.ANYONECANPAY);let l=h.commit();return i(l[0].verify(l[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.addTX(l[0]),await this.db.send(l[0]),u.hash=l[0].hash("hex"),u.height=-1,u.cp=c,u}async cpRegister(t,e,r,s){if(i(!!e&&"object"==typeof e),!await this.db.client.execute("canExecute",[{confirm:!1,cid:e.cid,name:e.name,oper:$.cpRegister}]))throw new L(H.errors.TYPE_ERROR,"Invalid CP Register Info.");const n=new x;if(!t){let e=await this.createReceive(r);t=e.getAddress()}let a=await this.getKey(t);if(!a)throw new L(H.errors.TYPE_ERROR,"Invalid CP Register Address, Not along to this wallet.");e.pubAddress=t.toString(),e.pubKey=a.getPublicKey("hex"),e.signMethod="secp256k1",e.register=this.master.key.publicKey.toString("hex"),n.cpRegister(t,P.registerFee,e);for(let r=0;r<10;r++){var c=""+e.cid+this.network.stockFix+o.sprintf("%02d",r);c={oper:$.propCreate,pid:c,oid:e.cid,cid:e.cid,gold:P.MINPROPVALUE};n.propCreate(t,c)}var u=async()=>{r?await this.fund(n,{account:r}):await this.fund(n),await this.sign(n);let s=n.commit();return i(s[0].verify(s[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.addTX(s[0]),await this.db.send(s[0]),e.txid=s[0].txid(),e.addr=t.toString(),s};s?u():await u()}async cpX509(t,e){var r=await this.ensureCp(t);let i=await this.getKey(r.pubAddress);if(!i)throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");if(u=this.db.x509CertList.get(tt.getKey(t,1)))return[u,{}];const s=new Date,a=new Date(s.getTime()+315576e6),o=new n.asn1.DERUTCTime({date:s}),c=new n.asn1.DERUTCTime({date:a});var u=i.privateKey.toString("Hex"),h=j.publicKeyConvert(i.publicKey,!1).toString("Hex");u=new n.crypto.ECDSA({curve:"secp256k1",prv:u,pub:h}),h="/C=CN/O=ggserver/OU="+t+"/CN="+r.name,h=n.asn1.x509.X509Util.newCertPEM({serial:{int:1},sigalg:{name:"SHA256withECDSA"},issuer:{str:h},notbefore:{str:o.getString()},notafter:{str:c.getString()},subject:{str:h},sbjpubkey:u,ext:[{basicConstraints:{cA:!1,critical:!0}},{keyUsage:{bin:"11111"}}],cakey:u});let l=new tt({oper:"x509Issue",witness:t,certSq:1,activeTime:a.getTime(),cert:h});return l.sign(i),u=l.toOptions(!0),t={outputs:[{address:r.pubAddress,value:1e4}],comment:u},[u,await this.send(t,e)]}async x509Issue(t,e){var r=await this.ensureCp(t.cid);let i=await this.getKey(r.pubAddress);if(!i)throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");var s=o.hashInt(t.csrData),a=this.db.x509CertList.get(tt.getKey(t.cid,s));if(a)return[a,{}];if(!(a=n.asn1.csr.CSRUtil.getInfo(t.csrData))||!a.pubkey||!a.pubkey.obj)throw new L(H.errors.TYPE_ERROR,"Invalid csr request Data!");var c=a.pubkey.obj;if("object"!=typeof c||!(c instanceof n.crypto.ECDSA)||"secp256k1"!=c.curveName)throw new L(H.errors.TYPE_ERROR,"Invalid csr request Alg, Use secp256k1 ECC !");var u=new Date,h=new Date(t.activeTime);const l=new n.asn1.DERUTCTime({date:u}),p=new n.asn1.DERUTCTime({date:h});u=i.privateKey.toString("Hex"),h=j.publicKeyConvert(i.publicKey,!1).toString("Hex"),u=new n.crypto.ECDSA({curve:"secp256k1",prv:u,pub:h}),h="/C=CN/O=ggserver/OU="+t.cid+"/CN="+r.name,r=n.asn1.x509.X509Util.newCertPEM({serial:{int:s},sigalg:{name:"SHA256withECDSA"},issuer:{str:h},notbefore:{str:l.getString()},notafter:{str:p.getString()},subject:{str:a.subject.name},sbjpubkey:c,ext:[{basicConstraints:{cA:!1,critical:!0}},{keyUsage:{bin:"11"}}],cakey:u});let f=new tt({oper:"x509Issue",witness:t.cid,certSq:s,activeTime:t.activeTime,cert:r});return f.sign(i),h=f.toOptions(!0),a={outputs:[{address:t.addr.toString(),value:1e4}],comment:h},[h,await this.send(a,e)]}async x509Abolish(t,e){var r=await this.ensureCp(t.cid),i=await this.getKey(r.pubAddress);if(!i)throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");if(!this.db.x509CertList.get(tt.getKey(t.cid,t.seqno)))throw new L(H.errors.TYPE_ERROR,"Invalid Cert SeqNo, Not find Cert");let s=new et({oper:"x509Abolish",witness:t.cid,certSq:t.seqno,activeTime:t.activeTime});return s.sign(i),t=s.toOptions(!0),i={outputs:[{address:r.pubAddress,value:1e4}],comment:t},[t,await this.send(i,e)]}getSCAddress(t){return t=it.fromMnemonic(F.fromOptions(P.SmartContractMnemonic),this.network).deriveAccount(44,t).derive(9).derive(1),w.fromWitnessPubkeyhash(p.hash160(t.publicKey),this.network)}async cpChange(t,e){var r=await this.ensureCp(t.cid);if(r.cid==this.network.genesisId||"ATHENA"==r.name)throw new L(H.errors.TYPE_ERROR,"Invalid cp name.");let s=await this.getTX(r.current.hash);if(!s)throw new L(H.errors.TYPE_ERROR,"Do not have permission to change this info.");if(s=s.tx,!await this.belongToAccount(e,s.outputs[0].getAddress()))throw new L(H.errors.TYPE_ERROR,"Invalid account info.");if(t.newName){if(!await this.db.client.execute("canExecute",[{confirm:!1,cid:r.cid,name:t.newName,oper:$.cpChange}]))throw new L(H.errors.TYPE_ERROR,"Invalid CP Change Info.")}else t.newName=r.name;t.addr||(t.addr=w.fromString(r.current.address));const n=x.cpChange(s,t);e?await this.fund(n,{allowPreInput:!0,account:e}):await this.fund(n,{allowPreInput:!0}),await this.sign(n);let a=n.commit();return await this.db.send(a[0]),i(a[0].verify(a[1],k.flags.STANDARD_VERIFY_FLAGS)),t.txid=a[0].txid(),a}async propExchangeList(t,e){let r=new x,s=[];for(var[n,a,o]of t){let t=null;var c;if(t=await this.getTX(n.hash)){if(t=t.tx,c=n.index,t&&t.outputs&&!(t.outputs.length<=c))if(await this.belongToAccount(e,t.outputs[c].getAddress())){let e=t.outputs[c].getReturnData();e&&(r.propExchange(t,c,a),e.index=r.outputs.length-1,e.addr=a.toString(),s.push(e))}else this.logger.error("not owned prop:",n.hash,n.index)}else this.logger.error("tx not find:",n.hash,o)}e?await this.fund(r,{allowPreInput:!0,account:e}):await this.fund(r,{allowPreInput:!0}),await this.sign(r);let u=r.commit();return await this.db.addTX(u[0]),await this.db.send(u[0]),i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),u.push(s),u}async propDonate(t,e){var r=t.index;let i=await this.getTX(t.hash);if(!i||!i.tx||!i.tx.outputs||i.tx.outputs.length<=r)throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(!await this.belongToAccount(e,i.tx.outputs[r].getAddress()))throw new L(H.errors.TYPE_ERROR,"Props that do not belong to you.");if(!(t=i.tx.outputs[r].getReturnData()))throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(t.cid&&t.cid==this.network.genesisId)throw new Y(i.tx,"invalid","Special props that can not to donate",100);const s=new x;s.addInputFromTx(i.tx,r),s.addOutput(k.createScript(Buffer.from(JSON.stringify({value:i.tx.outputs[r].value,cid:t.cid,pid:t.pid,oid:t.oid,gaddr:this.getAddress().toString(this.network)})),k.types.NULLDATA),0),await this.sign(s,null,N.NONE|N.ANYONECANPAY);let n=s.commit();return n.push(t),n}async propReceive(t,e){let r=x.fromTX(t,1);t=r.inputs[0].prevout;let i=r.outputs[0].getReturnData(),s=(r.view.addOutput({hash:r.inputs[0].prevout.hash,index:r.inputs[0].prevout.index},new _({value:i.value})),r.outputs.pop(),this.getAddress().toString(this.network));e&&(n={cid:i.cid,uid:e},s=(n=await this.tokenCreate(n,e)).data.addr),r.outputs.push(_.fromScript(s,i.value,{oper:$.propExchange,pid:i.pid,cid:i.cid,oid:i.oid,prev:{hash:t.hash,index:t.index}})),e?await this.fund(r,{allowPreInput:!0,account:e}):await this.fund(r,{allowPreInput:!0}),await this.sign(r,null,N.ALL,[0]);var n=r.commit();return await this.db.send(n[0]),i.simAddr=s,[n[0],null,i]}async belongToAccount(t,e){return!(!e||!(e=await this.getAccountByAddress(e))||t&&e.name!==t)}async propExchange(t,e,r){let s=null,n=0;var a;if(Array.isArray(t)?(s=t[0],n=t[1]):(a=await this.getTX(t.hash))&&(s=a.tx,n=t.index),!s||!s.outputs||s.outputs.length<=n)return this.logger.error("Invalid tx info."),null;if(!await this.belongToAccount(r,s.outputs[n].getAddress()))return this.logger.error("Invalid user."),null;let o=s.outputs[n].getReturnData();if(!o)return this.logger.error("Invalid tx info."),null;const c=(new x).propExchange(s,n,e);o.index=c.outputs.length-1,r?await this.fund(c,{allowPreInput:!0,account:r}):await this.fund(c,{allowPreInput:!0}),await this.sign(c);let u=c.commit();return await this.db.addTX(u[0]),await this.db.send(u[0]),i(u[0].verify(u[1],k.flags.STANDARD_VERIFY_FLAGS)),u.push(o),u}async propFound(t,e){if(t=await this.getTX(t),i(t),!(t=t.tx))throw new L(H.errors.TYPE_ERROR,"Invalid hex string.");let r=0,s=(3<=t.outputs.length&&(r=2),t.outputs[r]);var n=s.getReturnData();if(!n||n.oper!==$.propExchange&&n.oper!==$.propCreate)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");if(n.cid==this.network.genesisId)throw new Y(block,"invalid","prop found supertoken",100);const a=new x;a.addInputFromTx(t,r),t=_.fromScript(s.getAddress(),s.value),a.outputs.push(t),e?await this.fund(a,{allowPreInput:!0,subtractFee:!0,account:e}):await this.fund(a,{allowPreInput:!0,subtractFee:!0}),await this.sign(a);let o=a.commit();return await this.db.send(o[0]),i(o[0].verify(o[1],k.flags.STANDARD_VERIFY_FLAGS)),o.push(n),o}async propSale(t,e,r,s){let n=await this.getTX(t);if(!n)throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(n.getDepth(this.db.curHeight)<=0)throw new L(H.errors.TYPE_ERROR,"No enough confirmations.");if(!(n=n.tx))throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");n.outputs[0].getReturnType(k.opcodes.OP_RETURN)&&(e=2);var a=n.outputs[e].getReturnData([k.opcodes.OP_PROPEXCHANGE,k.opcodes.OP_PROPCREATE]);if(!a)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");if(!await this.belongToAccount(s,n.outputs[e].getAddress()))throw new L(H.errors.TYPE_ERROR,"Invalid tx info.");if(!(s=await this.getCoin(t,e))||-1===s.height||-2===s.height)throw new L(H.errors.WALLET_INSUFFICIENT_FUNDS,"Invalid coin.");if(await this.txdb.isSpent(t,e))throw new L(H.errors.WALLET_INSUFFICIENT_FUNDS,"Invalid coin.");if(r<=n.outputs[e].value)throw new L(H.errors.TYPE_ERROR,"Invalid fixed price.");if(a.cid==this.network.genesisId)throw new Y(n,"invalid","prop not for sale",100);const o=new x;s=o.addInputFromTx(n,e),t={oper:$.propSale,pid:a.pid,prev:{hash:s.prevout.hash,index:s.prevout.index},fixed:r,period:this.db.curHeight+P.BLOCK_DAY},e=_.fromScript(k.createScript(Buffer.from(JSON.stringify(t)),k.types.NULLDATA),0),o.outputs.push(e),await this.sign(o,null,N.SINGLE|N.ANYONECANPAY);let c=o.commit();return i(c[0].verify(c[1],k.flags.STANDARD_VERIFY_FLAGS)),await this.db.send(c[0]),c}async propBuy(t,e,r){if(!(t=this.db.propList.get(t))||!t.bid||!t.bid.raw)throw new L(H.errors.INVALID_PARAMS,"Invalid Tx Hash.");const i=U.fromRaw(Buffer.from(t.bid.raw,"hex"));var s=(await this.createReceive(r)).getAddress(),n=t.gold,a=w.fromString(t.current.address,this.network).getHash();if(e<n)throw new Error("wrong price");if(1<i.outputs.length&&e<i.outputs[1].value)throw new Error("low bid price than before");let o=x.fromTX(i,1);if(!o.outputs[0].getReturnType(B.OP_RETURN))throw new Error("not a sale order");return await this.remove(i.hash("hex")),o.view.addOutput({hash:o.inputs[0].prevout.hash,index:o.inputs[0].prevout.index},new _({value:t.gold})),a=_.fromScript(k.createScript(a),e),o.outputs.push(a),e={oper:$.propExchange,pid:t.pid,cid:t.cid,oid:t.oid,prev:{hash:o.inputs[0].prevout.hash,index:o.inputs[0].prevout.index}},a=_.fromScript(s,n,e),o.outputs.push(a),r?await this.fund(o,{allowPreInput:!0,account:r}):await this.fund(o,{allowPreInput:!0}),await this.sign(o,null,N.ALL,[0]),s=o.commit(),t.owned||this.db.client.watchOutpoint((new M).fromOptions(i.inputs[0].prevout)),await this.db.send(s[0]),s}async getTXByAmount(t,e){let r=null;var i;for(i of await this.getCoins(e))if(!(i.height<=0)&&i.value==t){r=i;break}return r&&(e=await this.getTX(r.hash))?[e.tx,r.index,r.height]:[]}async contractCreate(t,e,r,s,n){if(this.db.transactionList.query(t,s)!=G.None)throw new L(H.errors.TYPE_ERROR,"Contract with the same address finded.");if(0!=parseInt(e%1e3,10))throw new L(H.errors.TYPE_ERROR,"Contract source should an integer multiple of 1000.");if(!await q.checkSum(this.network,t,s))throw new L(H.errors.TYPE_ERROR,"Create contract with an invalid Address or a Address with old transations.");let a=!1,[o,c,u]=await this.getTXByAmount(e,n);if(!o){a=!0;const t=new x;let r="";if(n){r=(await this.createReceive(n)).getAddress()}else r=this.getAddress();t.outputs.push(_.fromScript(r,e)),n?await this.fund(t,{allowPreInput:!0,account:n}):await this.fund(t,{allowPreInput:!0}),await this.sign(t);let s=t.commit();i(s[0].verify(s[1],k.flags.STANDARD_VERIFY_FLAGS)),o=s[0],c=0,u=-1}const h=new x;h.addInputFromTx(o,c,u);let l="";if(n){l=(await this.createReceive(n)).getAddress()}else l=this.getAddress();let p=await this.getKey(l);return t={oper:$.contractCreate,type:t,addr:s,src:e,dst:r,srcact:n,alice:p.getPublicKey("hex"),period:this.db.curHeight+P.TRANSACTION_PERIOD},s=_.fromScript(k.createScript(Buffer.from(JSON.stringify(t)),k.types.NULLDATA),0),h.outputs.push(s),await this.sign(h,null,N.SINGLE|N.ANYONECANPAY),e=h.commit(),a&&await this.db.send(o),await this.db.send(e[0]),e}async contractPromise(t,e){if(!(t=this.db.transactionList.get(t))||t.transStatus!=G.CreatedOnMem)throw new L(H.errors.INVALID_PARAMS,"Invalid Tx id.");const r=U.fromRaw(Buffer.from(t.raw,"hex"));if(!r)throw new L(H.errors.TYPE_ERROR,"Invalid Tx id.");if(!(t=q.parseContract(r))||t.oper!==$.contractCreate)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");let i=x.fromTX(r,1);if(!i.outputs[0].getReturnType(B.OP_RETURN))throw new Error("not a valid contract");i.view.addOutput({hash:i.inputs[0].prevout.hash,index:i.inputs[0].prevout.index},new _({value:t.src}));let s="";if(e){s=(await this.createReceive(e)).getAddress()}else s=this.getAddress();let n=await this.getKey(s),a={oper:$.contractPromise,prevhash:r.hash("hex"),type:t.type,addr:t.addr,dst:t.dst,srcact:t.srcact,dstact:e,bob:n.getPublicKey("hex"),period:t.period};e=new k([D.fromSymbol("promise"),D.fromData(Buffer.from(JSON.stringify(a))),D.fromSymbol("drop"),D.fromSymbol("greaterthan"),D.fromSymbol("drop"),D.fromSymbol("if"),D.fromData(p.hash160(Buffer.from(a.bob,"hex"))),D.fromSymbol("else"),D.fromData(p.hash160(Buffer.from(t.alice,"hex"))),D.fromSymbol("endif"),D.fromSymbol("checksig")]),i.outputs.push(_.fromScript(e,t.src)),await this.remove(a.prevhash),await this.sign(i,null,N.ALL,[0]);let o=i.commit();return await this.db.send(o[0]),a.current={hash:o[0].hash("hex"),index:0},a.raw=o[0].toRaw().toString("hex"),a.transStatus=G.Promised,this.db.transactionList.saveContract(a,!0),o}async contractExecute(t,e){if(!(t=this.db.transactionList.get(t))||t.transStatus!=G.Confirmed&&t.transStatus!=G.Expired)throw new L(H.errors.INVALID_PARAMS,"Invalid Tx id.");const r=U.fromRaw(Buffer.from(t.raw,"hex"));if(!r)throw new L(H.errors.TYPE_ERROR,"Invalid Tx id.");if(e=e||1,!(t=q.parseContract(r))||t.oper!==$.contractPromise)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");var s=r.outputs[1].getReturnData();if(!s||s.oper!==$.contractPromise)throw new L(H.errors.TYPE_ERROR,"Invalid tx type.");i.strictEqual(t.addr,s.addr),i.strictEqual(t.type,s.type),i.strictEqual(t.dst,s.dst),i.strictEqual(t.period,s.period),i.strictEqual(t.srcact,s.srcact),i.strictEqual(t.dstact,s.dstact);var n=this.db.transactionList.query(t.type,t.addr);if(n!=G.Confirmed&&n!=G.Expired)throw new L(H.errors.TYPE_ERROR,"Contract Promise not Check yet.");if(n==G.Expired&&1!=e||n==G.Confirmed&&2!=e)throw new L(H.errors.TYPE_ERROR,"Invalid Executor.");let a=t.srcact,o="";if(a=2==e?t.dstact:a){o=(await this.createReceive(a)).getAddress()}else o=this.getAddress();let c=new x;c.addInputFromTx(r,1);var u={oper:$.contractExecute,type:t.type,addr:t.addr,master:e};u=_.fromScript(k.createScript(Buffer.from(JSON.stringify(u)),k.types.NULLDATA),0),c.outputs.push(u),u=_.fromScript(o,r.outputs[1].value);c.outputs.push(u);let h=1==e?await T.fromPublic(Buffer.from(t.ori.alice,"hex")):await T.fromPublic(Buffer.from(s.bob,"hex"));u=await this.getKey(h.getAddress()),await c.signAsync(u,k.hashType.ALL,this.db.workers);let l=c.commit();return i(l[0].verify(l[1],k.flags.STANDARD_VERIFY_FLAGS,n)),await this.db.send(l[0]),l}async htlcDeal(t,e){var r=await this.getTX(t.hash);let i=null;if(e){const t=await this.getAccount(e);if(!t)throw new L(H.errors.TYPE_ERROR,"Invalid Account.");i=t.getReceive().toString()}else i=this.getReceive().toString();const s=new x;let n=(new k).pushOp(B.OP_1);return t.suggest&&n.pushData(Buffer.from(t.sa,"hex")),s.addInput({prevout:{hash:t.hash,index:t.index},script:n}),s.addOutput(i,r.tx.outputs[t.index].value-1e4),s.view.addOutput({hash:t.hash,index:t.index},new _(r.tx.outputs[t.index])),await this.sign(s,null,N.ALL),e=s.commit(),await this.db.send(e[0]),e}async htlcCancel(t,e){let r=null;var i=await this.getTX(t.hash);if(!(r=i?i.tx.outputs[t.index]:r))throw new L(H.errors.TYPE_ERROR,"Invalid Input.");let s=null;if(e){const t=await this.getAccount(e);if(!t)throw new L(H.errors.TYPE_ERROR,"Invalid Account.");s=t.getReceive().toString()}else s=this.getReceive().toString();const n=new x;let a=(new k).pushOp(B.OP_0);return t.suggest&&a.pushData(Buffer.from(t.sa,"hex")),n.addInput({prevout:{hash:t.hash,index:t.index},script:a}),t.suggest?n.setSequence(0,2*P.HTLC_CANCEL_PERIOD,!1):n.setSequence(0,P.HTLC_CANCEL_PERIOD,!1),n.addOutput(s,r.value-1e4),n.view.addOutput({hash:t.hash,index:t.index},new _(r)),i=await this.getKey(t.master),await n.signAsync(i,k.hashType.ALL,this.db.workers),e=n.commit(),await this.db.send(e[0]),e}async sendContracts(t,e,r){const i=new x;for(var s of t)i.outputs.push(r.create(s));return e?await this.fund(i,{account:e}):await this.fund(i),await this.sign(i),t=i.commit(),await this.db.addTX(t[0]),await this.db.send(t[0]),t}async addStockAccountSeq(t){i(t&&"object"==typeof t,"Token data should be a object"),i(t.cid,"Token data should has a cid property"),i(t.uid,"Token data should has a uid property");let e=await this.stockAddress(t.cid,t.uid);var r=this.db.accountList.getOrCreateStockAccount(t.cid,e.toString());return t.seq=r.seq+1,t}async tokenCreate(t,e="",r){i(t&&"object"==typeof t,"Token data should be a object"),i(t.cid,"Token data should has a cid property"),i(t.uid,"Token data should has a uid property"),t.time=!0,await this.ensureAccount({name:e,witness:!0});let s=null;if(r){if(!await this.belongToAccount(e,r))throw new L(H.errors.TYPE_ERROR,`stock.send address error: addr:${r} is not belongs to account:`+e);s=await this.getKey(r)}else s=await this.createReceive(e,o.hashInt(t.cid),this.master);return s.signData(t)}async sign(t,e,r=k.hashType.ALL,i){if(this.watchOnly)throw new Error("Cannot sign from a watch-only wallet.");return await this.unlock(e),e=await this.deriveInputs(t),t.signAsync(e,r,this.db.workers,i)}getCoinView(t){return this.txdb.getCoinView(t)}getSpentView(t){return this.txdb.getSpentView(t)}toDetails(t){return this.txdb.toDetails(t)}getDetails(t){return this.txdb.getDetails(t)}async getCoin(t,e){return this.txdb.getCoin(t,e)}async getStatusOfSC(t){return this.txdb.getStatusOfSC(t)}async setStatusOfSC(t,e){const r=await this.writeLock.lock();try{this.txdb.start();try{await this.txdb._setStatusOfSC(t,e),await this.txdb.commit()}catch(t){throw this.txdb.drop(),t}}finally{r()}}getLockedCoins(){return this.txdb.lockedCoins.values}getTX(t){return this.txdb.getTX(t)}getBlocks(){return this.txdb.getBlocks()}getBlock(t){return this.txdb.getBlock(t)}async add(t,e,r){const i=await this.writeLock.lock();try{return await this._add(t,e,r)}finally{i()}}async _add(t,e,r){let i,s;this.txdb.start();try{(i=await this.txdb._add(t,e,r))&&(s=await this.syncOutputDepth(i)),await this.txdb.commit()}catch(t){throw this.txdb.drop(),t}return s&&0<s.length&&(this.db.emit("address",this.id,s),this.emit("address",s)),i}async resetBalance(){const t=await this.writeLock.lock();try{this.txdb.start();try{await this.txdb.resetBalance(),await this.txdb.commit()}catch(t){throw this.txdb.drop(),t}}finally{t()}}async unconfirm(t){const e=await this.writeLock.lock();try{return await this.txdb.unconfirm(t)}finally{e()}}async remove(t){const e=await this.writeLock.lock();try{return await this.txdb.remove(t)}finally{e()}}async zap(t,e){const r=await this.writeLock.lock();try{return await this._zap(t,e)}finally{r()}}async _zap(t,e){return t=await this.ensureIndex(t),this.txdb.zap(t,e)}async abandon(t){const e=await this.writeLock.lock();try{return await this._abandon(t)}finally{e()}}_abandon(t){return this.txdb.abandon(t)}conserveCoin(t){return this.txdb.conserveCoin(t)}unConserveCoin(t){return this.txdb.unConserveCoin(t)}isConserved(t){return this.txdb.isConserved(t)}getConserved(){return this.txdb.getConserved()}async getHistory(t){return t=await this.ensureIndex(t),this.txdb.getHistory(t)}async getCoins(t){return t=await this.ensureIndex(t),this.txdb.getCoins(t)}async getCredits(t){return t=await this.ensureIndex(t),this.txdb.getCredits(t)}async getSmartCoins(t){const e=[];for(const i of await this.getCredits(t)){var r=i.coin;i.spent||this.txdb.isConserved(r)||(-1!==r.height&&-2!==r.height||i.own)&&e.push(r)}return e}async getPending(t){return t=await this.ensureIndex(t),this.txdb.getPending(t)}async getBalance(t){return t=await this.ensureIndex(t),this.txdb.getBalance(t)}async queryBalanceLog(t,e=0){return(t=await this.ensureIndex(t))?this.db.queryBalanceLog(this.wid,t,e):[]}async getRange(t,e){return t&&"object"==typeof t&&(e=t,t=null),t=await this.ensureIndex(t),this.txdb.getRange(t,e)}async getLast(t,e){return t=await this.ensureIndex(t),this.txdb.getLast(t,e)}async ensureIndex(t,e){if(null==t){if(e)throw new Error("No account provided.");return null}if(-1===(e=await this.getAccountIndex(t)))throw new Error("Account not found.");return e}getAddress(t){return this.account.getAddress(t)}getReceive(t){return this.account.getReceive(t)}getChange(t){return this.account.getChange(t)}getNested(t){return this.account.getNested(t)}inspect(){return{wid:this.wid,id:this.id,network:this.network.type,initialized:this.initialized,accountDepth:this.accountDepth,token:this.token.toString("hex"),tokenDepth:this.tokenDepth,state:this.txdb.state?this.txdb.state.toJSON(!0):null,master:this.master,account:this.account}}toJSON(t){return{network:this.network.type,wid:this.wid,id:this.id,initialized:this.initialized,watchOnly:this.watchOnly,accountDepth:this.accountDepth,token:this.token.toString("hex"),tokenDepth:this.tokenDepth,height:this.db.curHeight,state:this.txdb.state.toJSON(!0),master:this.master.toJSON(t),account:this.account.toJSON(!0)}}getSize(){var t=0;return(t+=50)+c.sizeVarString(this.id,"ascii")+c.sizeVarlen(this.master.getSize())}toRaw(){var t=this.getSize();const e=new m(t);return e.writeU32(this.network.magic),e.writeU32(this.wid),e.writeVarString(this.id,"ascii"),e.writeU8(this.initialized?1:0),e.writeU8(this.watchOnly?1:0),e.writeU32(this.accountDepth),e.writeBytes(this.token),e.writeU32(this.tokenDepth),e.writeVarBytes(this.master.toRaw()),e.render()}fromRaw(t){const e=new d(t);return t=a.fromMagic(e.readU32()),this.wid=e.readU32(),this.id=e.readVarString("ascii"),this.initialized=1===e.readU8(),this.watchOnly=1===e.readU8(),this.accountDepth=e.readU32(),this.token=e.readBytes(32),this.tokenDepth=e.readU32(),this.master.fromRaw(e.readVarBytes()),i(t===this.db.network,"Wallet network mismatch."),this}static fromRaw(t,e){return new at(t).fromRaw(e)}static isWallet(t){return t instanceof at}async issueCreate(t,e,r){let i=new J(t),s=(i.source.subjectName||(i.source.subjectName=i.erid),T.fromPrivate(Buffer.from(t.key,"hex"),!0,this.network));s.witness=!0,i.sign(s,!0,this.network);var n=i.toOptions(!0);return r?this.send({outputs:[{address:t.address,value:1e4}],comment:n},e):await this.send({outputs:[{address:t.address,value:1e4}],comment:n},e),n}async caAbolish(t,e,r){let i=T.fromPrivate(Buffer.from(t.key,"hex"),!0,this.network),s=(i.witness=!0,await this.db.$parent.chain.db.erList.getEr(t.erid));if(!s)throw new L(H.errors.TYPE_ERROR,"ca.abolish: Invalid erid.");if(s.source.cid!=t.cid)throw new L(H.errors.TYPE_ERROR,"ca.abolish: Invalid cid.");if(s.source.uid!=t.uid)throw new L(H.errors.TYPE_ERROR,"ca.abolish: Invalid uid.");var n=s.signature;if(s.sign(i,!0,this.network),s.witness!=t.witness||s.signature!=n)throw new L(H.errors.TYPE_ERROR,"ca.abolish: You have no permission to abolish this witness.");let a=new Z(t);return a.sign(i),n=a.toOptions(!0),r?this.send({outputs:[{address:t.address,value:1e4}],comment:n},e):await this.send({outputs:[{address:t.address,value:1e4}],comment:n},e),n}async enchanceCp(t,e){let r=new Q(t);r.oper="enchanceCp";t=await this.ensureCp(r.to);var i=await this.ensureCp(r.from);if(!(i=await this.getKey(i.pubAddress)))throw new L(H.errors.TYPE_ERROR,"Invalid cid, Not along to this wallet.");return r.sign(i),i=r.toOptions(!0),[await this.send({outputs:[{address:t.pubAddress,value:1e4}],comment:i},e),i]}async ensureCp(t,e=!1){if(await this.db.flushCP([t]),(t=this.db.cpList.getItem(t))||e)return t;throw new L(H.errors.TYPE_ERROR,"Invalid cid, cannot find cp.")}}t.exports=at},function(t,e,r){"use strict";
|
|
293
293
|
/*!
|
|
294
294
|
* BlockMeta.js - walletdb records
|
|
295
295
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -312,16 +312,16 @@ const i=r(22).opcodes;function s(t){let e=null;var r=s.list[t.type];return new(r
|
|
|
312
312
|
/*!
|
|
313
313
|
* stack.js - stack object for vallnet
|
|
314
314
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
315
|
-
*/const i=r(0),s=r(
|
|
315
|
+
*/const i=r(0),s=r(21),n=r(101);function a(t){if(!(this instanceof a))return new a(t);this.items=t||[]}Object.defineProperty(a.prototype,"length",{get(){return this.items.length},set(t){return this.items.length=t,this.items.length}}),a.prototype[Symbol.iterator]=function(){return this.items[Symbol.iterator]()},a.prototype.values=function(){return this.items.values()},a.prototype.entries=function(){return this.items.entries()},a.prototype.inspect=function(){return`<Stack: ${this.toString()}>`},a.prototype.toString=function(){const t=[];for(const e of this.items)t.push(e.toString("hex"));return t.join(" ")},a.prototype.toASM=function(t){const e=[];for(const r of this.items)e.push(s.toASM(r,t));return e.join(" ")},a.prototype.clone=function(){return new a(this.items.slice())},a.prototype.clear=function(){return this.items.length=0,this},a.prototype.get=function(t){return t<0&&(t+=this.items.length),t<0||t>=this.items.length?null:this.items[t]},a.prototype.pop=function(){return this.items.pop()||null},a.prototype.shift=function(){return this.items.shift()||null},a.prototype.remove=function(t){return t<0&&(t+=this.items.length),t<0||t>=this.items.length||0===(t=this.items.splice(t,1)).length?null:t[0]},a.prototype.set=function(t,e){return t<0&&(t+=this.items.length),i(Buffer.isBuffer(e)),i(0<=t&&t<=this.items.length),this.items[t]=e,this},a.prototype.push=function(t){return i(Buffer.isBuffer(t)),this.items.push(t),this},a.prototype.unshift=function(t){return i(Buffer.isBuffer(t)),this.items.unshift(t),this},a.prototype.insert=function(t,e){return t<0&&(t+=this.items.length),i(Buffer.isBuffer(e)),i(0<=t&&t<=this.items.length),this.items.splice(t,0,e),this},a.prototype.erase=function(t,e){t<0&&(t=this.items.length+t),e<0&&(e=this.items.length+e),this.items.splice(t,e-t)},a.prototype.swap=function(t,e){t<0&&(t=this.items.length+t),e<0&&(e=this.items.length+e);var r=this.items[t],i=this.items[e];this.items[t]=i,this.items[e]=r},a.prototype.getData=function(t){return this.get(t)},a.prototype.popData=function(){return this.pop()},a.prototype.shiftData=function(){return this.shift()},a.prototype.removeData=function(t){return this.remove(t)},a.prototype.setData=function(t,e){return this.set(t,e)},a.prototype.pushData=function(t){return this.push(t)},a.prototype.unshiftData=function(t){return this.unshift(t)},a.prototype.insertData=function(t,e){return this.insert(t,e)},a.prototype.getLength=function(t){return(t=this.get(t))?t.length:-1},a.prototype.getString=function(t,e){return(t=this.get(t))?a.toString(t,e):null},a.prototype.popString=function(t){var e=this.pop();return e?a.toString(e,t):null},a.prototype.shiftString=function(t){var e=this.shift();return e?a.toString(e,t):null},a.prototype.removeString=function(t,e){return(t=this.remove(t))?a.toString(t,e):null},a.prototype.setString=function(t,e,r){return this.set(t,a.fromString(e,r))},a.prototype.pushString=function(t,e){return this.push(a.fromString(t,e))},a.prototype.unshiftString=function(t,e){return this.unshift(a.fromString(t,e))},a.prototype.insertString=function(t,e,r){return this.insert(t,a.fromString(e,r))},a.prototype.getNum=function(t,e,r){return(t=this.get(t))?a.toNum(t,e,r):null},a.prototype.popNum=function(t,e){var r=this.pop();return r?a.toNum(r,t,e):null},a.prototype.shiftNum=function(t,e){var r=this.shift();return r?a.toNum(r,t,e):null},a.prototype.removeNum=function(t,e,r){return(t=this.remove(t))?a.toNum(t,e,r):null},a.prototype.setNum=function(t,e){return this.set(t,a.fromNum(e))},a.prototype.pushNum=function(t){return this.push(a.fromNum(t))},a.prototype.unshiftNum=function(t){return this.unshift(a.fromNum(t))},a.prototype.insertNum=function(t,e){return this.insert(t,a.fromNum(e))},a.prototype.getInt=function(t,e,r){return(t=this.get(t))?a.toInt(t,e,r):-1},a.prototype.popInt=function(t,e){var r=this.pop();return r?a.toInt(r,t,e):-1},a.prototype.shiftInt=function(t,e){var r=this.shift();return r?a.toInt(r,t,e):-1},a.prototype.removeInt=function(t,e,r){return(t=this.remove(t))?a.toInt(t,e,r):-1},a.prototype.setInt=function(t,e){return this.set(t,a.fromInt(e))},a.prototype.pushInt=function(t){return this.push(a.fromInt(t))},a.prototype.unshiftInt=function(t){return this.unshift(a.fromInt(t))},a.prototype.insertInt=function(t,e){return this.insert(t,a.fromInt(e))},a.prototype.getBool=function(t){return!!(t=this.get(t))&&a.toBool(t)},a.prototype.popBool=function(){var t=this.pop();return!!t&&a.toBool(t)},a.prototype.shiftBool=function(){var t=this.shift();return!!t&&a.toBool(t)},a.prototype.removeBool=function(t){return!!(t=this.remove(t))&&a.toBool(t)},a.prototype.setBool=function(t,e){return this.set(t,a.fromBool(e))},a.prototype.pushBool=function(t){return this.push(a.fromBool(t))},a.prototype.unshiftBool=function(t){return this.unshift(a.fromBool(t))},a.prototype.insertBool=function(t,e){return this.insert(t,a.fromBool(e))},a.isStack=function(t){return t instanceof a},a.toString=function(t,e){return i(Buffer.isBuffer(t)),t.toString(e||"utf8")},a.fromString=function(t,e){return i("string"==typeof t),Buffer.from(t,e||"utf8")},a.toNum=function(t,e,r){return n.decode(t,e,r)},a.fromNum=function(t){return i(n.isScriptNum(t)),t.encode()},a.toInt=function(t,e,r){return a.toNum(t,e,r).getInt()},a.fromInt=function(t){return i("number"==typeof t),-1<=t&&t<=16?s.small[t+1]:(t=n.fromNumber(t),a.fromNum(t))},a.toBool=function(t){i(Buffer.isBuffer(t));for(let e=0;e<t.length;e++)if(0!==t[e])return e!==t.length-1||128!==t[e];return!1},a.fromBool=function(t){return i("boolean"==typeof t),a.fromInt(t?1:0)},t.exports=a},function(t,e,r){"use strict";
|
|
316
316
|
/*!
|
|
317
317
|
* witness.js - witness object for vallnet
|
|
318
318
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
319
|
-
*/const i=r(0),s=r(1),n=r(17),a=r(
|
|
319
|
+
*/const i=r(0),s=r(1),n=r(17),a=r(21),o=r(3),c=r(2),u=r(4);r(12);const h=r(130),l=a.types;class p extends h{constructor(t){super([]),t&&this.fromOptions(t)}fromOptions(t){return i(t,"Witness data is required."),Array.isArray(t)?this.fromArray(t):t.items?this.fromArray(t.items):this}static fromOptions(t){return(new p).fromOptions(t)}toArray(){return this.items.slice()}fromArray(t){return i(Array.isArray(t)),this.items=t,this}static fromArray(t){return(new p).fromArray(t)}toItems(){return this.items.slice()}fromItems(t){return i(Array.isArray(t)),this.items=t,this}static fromItems(t){return(new p).fromItems(t)}toStack(){return new h(this.toArray())}fromStack(t){return this.fromArray(t.items)}static fromStack(t){return(new p).fromStack(t)}inspect(){return`<Witness: ${this.toString()}>`}clone(){return(new p).inject(this)}inject(t){return this.items=t.items.slice(),this}compile(){return this}getInputType(){return this.isPubkeyhashInput()?l.WITNESSPUBKEYHASH:this.isScripthashInput()?l.WITNESSSCRIPTHASH:l.NONSTANDARD}isPubkeyInput(){return!1}getPubkeyInput(){return null}isPubkeyhashInput(){return 2===this.items.length&&a.isSignatureEncoding(this.items[0])&&a.isKeyEncoding(this.items[1])}getPubkeyhashInput(){return this.isPubkeyhashInput()?[this.items[0],this.items[1]]:[null,null]}isMultisigInput(){return!1}getMultisigInput(){return null}isScripthashInput(){return 0<this.items.length&&!this.isPubkeyhashInput()}getScripthashInput(){return this.isScripthashInput()?this.items[this.items.length-1]:null}isUnknownInput(){return this.getInputType()===l.NONSTANDARD}test(t){for(const e of this.items)if(0!==e.length&&t.test(e))return!0;return!1}getRedeem(){var t;return 0!==this.items.length&&(t=this.items[this.items.length-1])?n.fromRaw(t):null}indexOf(t){return s.indexOf(this.items,t)}getSize(){let t=0;for(const e of this.items)t+=o.sizeVarBytes(e);return t}getVarSize(){return o.sizeVarint(this.items.length)+this.getSize()}toWriter(t){t.writeVarint(this.items.length);for(const e of this.items)t.writeVarBytes(e);return t}toRaw(){var t=this.getVarSize();return this.toWriter(new u(t)).render()}toJSON(){return this.toRaw().toString("hex")}fromJSON(t){return i("string"==typeof t,"Witness must be a string."),this.fromRaw(Buffer.from(t,"hex"))}static fromJSON(t){return(new p).fromJSON(t)}fromReader(t){var e=t.readVarint();for(let r=0;r<e;r++)this.items.push(t.readVarBytes());return this}fromRaw(t){return this.fromReader(new c(t))}static fromReader(t){return(new p).fromReader(t)}static fromRaw(t,e){return"string"==typeof t&&(t=Buffer.from(t,e)),(new p).fromRaw(t)}fromString(t){if(!Array.isArray(t)){if(i("string"==typeof t),0===(t=t.trim()).length)return this;t=t.split(/\s+/)}for(const e of t)this.items.push(Buffer.from(e,"hex"));return this}static fromString(t){return(new p).fromString(t)}static isWitness(t){return t instanceof p}}t.exports=p},function(t,e,r){"use strict";"undefined"==typeof process||!process.version||0===process.version.indexOf("v0.")||0===process.version.indexOf("v1.")&&0!==process.version.indexOf("v1.8.")?t.exports={nextTick:function(t,e,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var s,n,a=arguments.length;switch(a){case 0:case 1:return process.nextTick(t);case 2:return process.nextTick((function(){t.call(null,e)}));case 3:return process.nextTick((function(){t.call(null,e,r)}));case 4:return process.nextTick((function(){t.call(null,e,r,i)}));default:for(s=new Array(a-1),n=0;n<s.length;)s[n++]=arguments[n];return process.nextTick((function(){t.apply(null,s)}))}}}:t.exports=process},function(t,e,r){"use strict";
|
|
320
320
|
/*!
|
|
321
321
|
* merkleblock.js - merkleblock object for vallnet
|
|
322
322
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
323
323
|
* https://github.com/bookmansoft/gamegold
|
|
324
|
-
*/const i=r(0),s=r(1),n=r(2),a=r(4),o=r(3),c=r(6),u=r(7);var h=r(117);const l=r(87),p=Buffer.from([0]);class f extends h{constructor(t){super(),this.txs=[],this.hashes=[],this.flags=p,this.totalTX=0,this._tree=null,t&&this.fromOptions(t)}fromOptions(t){if(this.parseOptions(t),i(t,"MerkleBlock data is required."),i(Array.isArray(t.hashes)),i(Buffer.isBuffer(t.flags)),i(s.isU32(t.totalTX)),t.hashes)for(var e of t.hashes)"string"==typeof e&&(e=Buffer.from(e,"hex")),i(Buffer.isBuffer(e)),this.hashes.push(e);return t.flags&&(i(Buffer.isBuffer(t.flags)),this.flags=t.flags),null!=t.totalTX&&(i(s.isU32(t.totalTX)),this.totalTX=t.totalTX),this}static fromOptions(t){return(new f).fromOptions(t)}refresh(t){if(this._refresh(),this._tree=null,t)for(const t of this.txs)t.refresh()}hasTX(t){return-1!==this.indexOf(t)}indexOf(t){return null==(t=this.getTree().map.get(t))?-1:t}verifyBody(){var[t]=this.checkBody();return t}checkBody(){return this.getTree().root!==this.merkleRoot?[!1,"bad-txnmrklroot",100]:[!0,"valid",0]}getTree(){if(!this._tree)try{this._tree=this.extractTree()}catch(t){this._tree=new d}return this._tree}extractTree(){const t=[],e=[],r=new Map,i=this.hashes,s=this.flags,n=this.totalTX;let a=0,h=0,l=!1,p=0;const f=t=>n+(1<<t)-1>>>t,m=(n,u)=>{if(a>=8*s.length)return l=!0,o.ZERO_HASH;var p=s[a/8|0]>>>a%8&1;if(a++,0===n||!p){if(h>=i.length)return l=!0,o.ZERO_HASH;const s=i[h++];return 0===n&&p&&(p=s.toString("hex"),t.push(s),e.push(u),r.set(p,u)),s}let d;return p=m(n-1,2*u),2*u+1<f(n-1)?(d=m(n-1,2*u+1)).equals(p)&&(l=!0):d=p,c.root256(p,d)};if(0===n)throw new Error("Zero transactions.");if(n>(u.MAX_BLOCK_SIZE-81)/60)throw new Error("Too many transactions.");if(i.length>n)throw new Error("Too many hashes.");if(8*s.length<i.length)throw new Error("Flags too small.");for(;1<f(p);)p++;var g=m(p,0);if(l)throw new Error("Mutated merkle tree.");if(((a+7)/8|0)!==s.length)throw new Error("Too many flag bits.");if(h!==i.length)throw new Error("Incorrect number of hashes.");return new d(g,t,e,r)}getCoinbaseHeight(){return-1}inspect(){return this.format()}format(t,e){return{hash:this.rhash(),height:null!=e?e:-1,date:s.date(this.time),version:s.hex32(this.version),prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),time:this.time,bits:this.bits,nonce:this.nonce,totalTX:this.totalTX,hashes:this.hashes.map(t=>t.toString("hex")),flags:this.flags,map:this.getTree().map,txs:this.txs.length}}getSize(){return 84+o.sizeVarint(this.hashes.length)+32*this.hashes.length+o.sizeVarint(this.flags.length)+this.flags.length}toWriter(t){this.writeHead(t),t.writeU32(this.totalTX),t.writeVarint(this.hashes.length);for(const e of this.hashes)t.writeHash(e);return t.writeVarBytes(this.flags),t}toRaw(){var t=this.getSize();return this.toWriter(new a(t)).render()}fromReader(t){this.readHead(t),this.totalTX=t.readU32();var e=t.readVarint();for(let r=0;r<e;r++)this.hashes.push(t.readHash());return this.flags=t.readVarBytes(),this}fromRaw(t){return this.fromReader(new n(t))}static fromReader(t){return(new f).fromReader(t)}static fromRaw(t,e){return"string"==typeof t&&(t=Buffer.from(t,e)),(new f).fromRaw(t)}toJSON(){return this.getJSON()}getJSON(t,e,r){return{hash:this.rhash(),height:r,version:this.version,prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),time:this.time,bits:this.bits,nonce:this.nonce,totalTX:this.totalTX,hashes:this.hashes.map(t=>s.revHex(t.toString("hex"))),flags:this.flags.toString("hex")}}fromJSON(t){for(var e of(i(t,"MerkleBlock data is required."),i(Array.isArray(t.hashes)),i("string"==typeof t.flags),i(s.isU32(t.totalTX)),this.parseJSON(t),t.hashes))e=s.revHex(e),this.hashes.push(Buffer.from(e,"hex"));return this.flags=Buffer.from(t.flags,"hex"),this.totalTX=t.totalTX,this}static fromJSON(t){return(new f).fromJSON(t)}static fromBlock(t,e){const r=[];for(const i of t.txs)r.push(i.isWatched(e)?1:0);return f.fromMatches(t,r)}static fromHashes(t,e){const r=new Set;for(var i of e)Buffer.isBuffer(i)&&(i=i.toString("hex")),r.add(i);const s=[];for(const e of t.txs){var n=e.hash("hex");s.push(r.has(n)?1:0)}return f.fromMatches(t,s)}static fromMatches(t,e){const r=[],i=[],s=[],n=[],a=t.txs.length;let o=0;const u=t=>a+(1<<t)-1>>>t,h=(t,e,r)=>{if(0===t)return r[e];var i=h(t-1,2*e,r);let s;return s=2*e+1<u(t-1)?h(t-1,2*e+1,r):i,c.root256(i,s)},l=(t,e,r,i)=>{let o=0;for(let r=e<<t;r<e+1<<t&&r<a;r++)o|=i[r];s.push(o),0!==t&&o?(l(t-1,2*e,r,i),2*e+1<u(t-1)&&l(t-1,2*e+1,r,i)):n.push(h(t,e,r))};for(let s=0;s<t.txs.length;s++){const n=t.txs[s];e[s]&&r.push(n),i.push(n.hash())}for(;1<u(o);)o++;l(o,0,i,e);const p=Buffer.allocUnsafe((s.length+7)/8|0);p.fill(0);for(let t=0;t<s.length;t++)p[t/8|0]|=s[t]<<t%8;const d=new f;return d._hash=t._hash,d._hhash=t._hhash,d.version=t.version,d.prevBlock=t.prevBlock,d.merkleRoot=t.merkleRoot,d.time=t.time,d.bits=t.bits,d.nonce=t.nonce,d.totalTX=a,d.hashes=n,d.flags=p,d.txs=r,d}static isMerkleBlock(t){return t instanceof f}toHeaders(){return l.fromBlock(this)}}function d(t,e,r,i){this.root=t?t.toString("hex"):o.NULL_HASH,this.matches=e||[],this.indexes=r||[],this.map=i||new Map}t.exports=f},function(t,e,r){const i=r(5).PropStatus;r=r(29);class s extends r{constructor(t){super(),this.db=t||{getVp:async t=>this.get(t),setVp:()=>{},delVp:()=>{},loadVpList:()=>{}}}async loadHistory(){}setAccount(t,e,r){var i;t&&t.wid&&t.account&&(i=t.wid+"."+t.account,this.account.get(i)&&this.account.get(i).delete(t.pid)),t.wid=e,t.account=r,e&&r&&(i=t.wid+"."+t.account,this.account.get(i)||this.account.set(i,new Map),this.account.get(i).set(t.pid,t))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.pid))}async getVp(t){return this.db.getVp(t)}async getVpByAddress(t){return[]}async getVpByOid(t){return[]}async setVp(t,e){t=new n(t),this.set(t.pid,t),await this.db.setVp(t,e)}async delVp(t){this.delete(t.pid),await this.db.delVp(t)}}class n{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.pid=t.pid,this.cid=t.cid||"",this.oid=t.oid||"",this.gold=t.gold,this.current=null,t.current&&(this.current={},this.current.hash=t.current.hash,this.current.index=t.current.index,this.current.address=t.current.address),this.height=t.height,this.pst=t.pst||i.Ready,this.wid=t.wid||0,this.account=t.account||"",this.bid=null,t.bid&&(this.bid={},this.bid.raw=t.bid.raw||"",this.bid.fixed=t.bid.fixed||0,this.bid.period=t.bid.period||0,this.bid.hash=t.bid.hash||"",this.bid.value=t.bid.value||0,this.bid.address=t.bid.address||"")}toRaw(){let t={};return t.pid=this.pid,t.cid=this.cid||"",t.oid=this.oid||"",t.gold=this.gold,this.current&&(t.current={},t.current.hash=this.current.hash,t.current.index=this.current.index,t.current.address=this.current.address),t.height=this.height,t.pst=this.pst||i.Ready,t.wid=this.wid||0,t.account=this.account||"",this.bid&&(t.bid={},t.bid.raw=this.bid.raw||"",t.bid.fixed=this.bid.fixed||0,t.bid.period=this.bid.period||0,t.bid.hash=this.bid.hash||"",t.bid.value=this.bid.value||0,t.bid.address=this.bid.address||""),Buffer.from(JSON.stringify(t),"utf-8")}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new n).fromRaw(t)}}s.vpItem=n,t.exports=s},function(t,e,r){var i=r(10),s=r(179),n=(r=r(9),{sha1:!0,sha256:!0,sha512:!0}),a={rsa:!0,dsa:!0,ecdsa:!0};function o(t,e){Error.captureStackTrace&&Error.captureStackTrace(this,e||o),this.message=t,this.name=e.name}function c(t){o.call(this,t,c)}r.inherits(o,Error),r.inherits(c,o),t.exports={HASH_ALGOS:n,PK_ALGOS:a,HttpSignatureError:o,InvalidAlgorithmError:c,validateAlgorithm:function(t){if(2!==(t=t.toLowerCase().split("-")).length)throw new c(t[0].toUpperCase()+" is not a valid algorithm");if("hmac"!==t[0]&&!a[t[0]])throw new c(t[0].toUpperCase()+" type keys are not supported");if(n[t[1]])return t;throw new c(t[1].toUpperCase()+" is not a supported hash algorithm")},sshKeyToPEM:function(t){return i.string(t,"ssh_key"),s.parseKey(t,"ssh").toString("pem")},fingerprint:function(t){return i.string(t,"ssh_key"),s.parseKey(t,"ssh").fingerprint("md5").toString("hex")},pemToRsaSSHKey:function(t,e){return i.equal("string",typeof t,"typeof pem"),(t=s.parseKey(t,"pem")).comment=e,t.toString("ssh")}}},function(t,e,r){var i=r(104).BigInteger,s=i.prototype.Barrett;function n(t,e){this.x=e,this.q=t}function a(t,e,r,s){this.curve=t,this.x=e,this.y=r,this.z=null==s?i.ONE:s,this.zinv=null}function o(t,e,r){this.q=t,this.a=this.fromBigInteger(e),this.b=this.fromBigInteger(r),this.infinity=new a(this,null,null),this.reducer=new s(this.q)}n.prototype.equals=function(t){return t==this||this.q.equals(t.q)&&this.x.equals(t.x)},n.prototype.toBigInteger=function(){return this.x},n.prototype.negate=function(){return new n(this.q,this.x.negate().mod(this.q))},n.prototype.add=function(t){return new n(this.q,this.x.add(t.toBigInteger()).mod(this.q))},n.prototype.subtract=function(t){return new n(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))},n.prototype.multiply=function(t){return new n(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))},n.prototype.square=function(){return new n(this.q,this.x.square().mod(this.q))},n.prototype.divide=function(t){return new n(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))},a.prototype.getX=function(){null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q));var t=this.x.toBigInteger().multiply(this.zinv);return this.curve.reduce(t),this.curve.fromBigInteger(t)},a.prototype.getY=function(){null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q));var t=this.y.toBigInteger().multiply(this.zinv);return this.curve.reduce(t),this.curve.fromBigInteger(t)},a.prototype.equals=function(t){return t==this||(this.isInfinity()?t.isInfinity():t.isInfinity()?this.isInfinity():!!t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(i.ZERO)&&t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(i.ZERO))},a.prototype.isInfinity=function(){return null==this.x&&null==this.y||this.z.equals(i.ZERO)&&!this.y.toBigInteger().equals(i.ZERO)},a.prototype.negate=function(){return new a(this.curve,this.x,this.y.negate(),this.z)},a.prototype.add=function(t){var e,r,s,n,o,c,u;return this.isInfinity()?t:t.isInfinity()?this:(e=t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q),o=t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q),i.ZERO.equals(o)?i.ZERO.equals(e)?this.twice():this.curve.getInfinity():(u=new i("3"),c=this.x.toBigInteger(),r=this.y.toBigInteger(),t.x.toBigInteger(),t.y.toBigInteger(),s=(n=o.square()).multiply(o),c=c.multiply(n),o=(n=e.square().multiply(this.z)).subtract(c.shiftLeft(1)).multiply(t.z).subtract(s).multiply(o).mod(this.curve.q),c=c.multiply(u).multiply(e).subtract(r.multiply(s)).subtract(n.multiply(e)).multiply(t.z).add(e.multiply(s)).mod(this.curve.q),u=s.multiply(this.z).multiply(t.z).mod(this.curve.q),new a(this.curve,this.curve.fromBigInteger(o),this.curve.fromBigInteger(c),u)))},a.prototype.twice=function(){var t,e,r,s,n,o;return this.isInfinity()?this:0==this.y.toBigInteger().signum()?this.curve.getInfinity():(n=new i("3"),o=this.x.toBigInteger(),e=(t=(e=this.y.toBigInteger()).multiply(this.z)).multiply(e).mod(this.curve.q),s=this.curve.a.toBigInteger(),r=o.square().multiply(n),s=(r=(r=i.ZERO.equals(s)?r:r.add(this.z.square().multiply(s))).mod(this.curve.q)).square().subtract(o.shiftLeft(3).multiply(e)).shiftLeft(1).multiply(t).mod(this.curve.q),n=r.multiply(n).multiply(o).subtract(e.shiftLeft(1)).shiftLeft(2).multiply(e).subtract(r.square().multiply(r)).mod(this.curve.q),o=t.square().multiply(t).shiftLeft(3).mod(this.curve.q),new a(this.curve,this.curve.fromBigInteger(s),this.curve.fromBigInteger(n),o))},a.prototype.multiply=function(t){if(this.isInfinity())return this;if(0==t.signum())return this.curve.getInfinity();for(var e=t,r=e.multiply(new i("3")),s=this.negate(),n=this,a=r.bitLength()-2;0<a;--a){n=n.twice();var o=r.testBit(a);o!=e.testBit(a)&&(n=n.add(o?this:s))}return n},a.prototype.multiplyTwo=function(t,e,r){for(var i=t.bitLength()>r.bitLength()?t.bitLength()-1:r.bitLength()-1,s=this.curve.getInfinity(),n=this.add(e);0<=i;)s=s.twice(),t.testBit(i)?s=r.testBit(i)?s.add(n):s.add(this):r.testBit(i)&&(s=s.add(e)),--i;return s},o.prototype.getQ=function(){return this.q},o.prototype.getA=function(){return this.a},o.prototype.getB=function(){return this.b},o.prototype.equals=function(t){return t==this||this.q.equals(t.q)&&this.a.equals(t.a)&&this.b.equals(t.b)},o.prototype.getInfinity=function(){return this.infinity},o.prototype.fromBigInteger=function(t){return new n(this.q,t)},o.prototype.reduce=function(t){this.reducer.reduce(t)},o.prototype.encodePointHex=function(t){if(t.isInfinity())return"00";var e=t.getX().toBigInteger().toString(16),r=t.getY().toBigInteger().toString(16),i=this.getQ().toString(16).length;for(i%2!=0&&i++;e.length<i;)e="0"+e;for(;r.length<i;)r="0"+r;return"04"+e+r},o.prototype.decodePointHex=function(t){switch(parseInt(t.substr(0,2),16)){case 0:return this.infinity;case 2:c=!1;case 3:null==c&&(c=!0);var e=t.length-2,r=t.substr(2,e),s=this.fromBigInteger(new i(r,16)),n=s.multiply(s.square().add(this.getA())).add(this.getB()).sqrt();if(null==n)throw"Invalid point compression";var o=n.toBigInteger();return o.testBit(0)!=c&&(n=this.fromBigInteger(this.getQ().subtract(o))),new a(this,s,n);case 4:case 6:case 7:e=(t.length-2)/2,r=t.substr(2,e);var c=t.substr(e+2,e);return new a(this,this.fromBigInteger(new i(r,16)),this.fromBigInteger(new i(c,16)));default:return null}},o.prototype.encodeCompressedPointHex=function(t){if(t.isInfinity())return"00";var e=t.getX().toBigInteger().toString(16),r=this.getQ().toString(16).length;for(r%2!=0&&r++;e.length<r;)e="0"+e;return(t.getY().toBigInteger().isEven()?"02":"03")+e},n.prototype.getR=function(){var t;return null==this.r&&(this.r=null,128<(t=this.q.bitLength())&&-1==this.q.shiftRight(t-64).intValue()&&(this.r=i.ONE.shiftLeft(t).subtract(this.q))),this.r},n.prototype.modMult=function(t,e){return this.modReduce(t.multiply(e))},n.prototype.modReduce=function(t){if(null!=this.getR()){for(var e=q.bitLength();t.bitLength()>e+1;){var r=t.shiftRight(e),s=t.subtract(r.shiftLeft(e));t=(r=this.getR().equals(i.ONE)?r:r.multiply(this.getR())).add(s)}for(;0<=t.compareTo(q);)t=t.subtract(q)}else t=t.mod(q);return t},n.prototype.sqrt=function(){if(!this.q.testBit(0))throw"unsupported";var t;if(this.q.testBit(1))return(t=new n(this.q,this.x.modPow(this.q.shiftRight(2).add(i.ONE),this.q))).square().equals(this)?t:null;var e=this.q.subtract(i.ONE),r=e.shiftRight(1);if(this.x.modPow(r,this.q).equals(i.ONE)){var s,a=e.shiftRight(2).shiftLeft(1).add(i.ONE),o=this.x,c=modDouble(modDouble(o));do{for(;0<=(s=new i(this.q.bitLength(),new SecureRandom)).compareTo(this.q)||!s.multiply(s).subtract(c).modPow(r,this.q).equals(e););var u=(h=this.lucasSequence(s,o,a))[0],h=h[1];if(this.modMult(h,h).equals(c))return h=(h=h.testBit(0)?h.add(q):h).shiftRight(1),new n(q,h)}while(u.equals(i.ONE)||u.equals(e))}return null},n.prototype.lucasSequence=function(t,e,r){for(var s=r.bitLength(),n=r.getLowestSetBit(),a=i.ONE,o=i.TWO,c=t,u=i.ONE,h=i.ONE,l=s-1;n+1<=l;--l)u=this.modMult(u,h),r.testBit(l)?(h=this.modMult(u,e),a=this.modMult(a,c),o=this.modReduce(c.multiply(o).subtract(t.multiply(u))),c=this.modReduce(c.multiply(c).subtract(h.shiftLeft(1)))):(h=u,a=this.modReduce(a.multiply(o).subtract(u)),c=this.modReduce(c.multiply(o).subtract(t.multiply(u))),o=this.modReduce(o.multiply(o).subtract(u.shiftLeft(1))));for(u=this.modMult(u,h),h=this.modMult(u,e),a=this.modReduce(a.multiply(o).subtract(u)),o=this.modReduce(c.multiply(o).subtract(t.multiply(u))),u=this.modMult(u,h),l=1;l<=n;++l)a=this.modMult(a,o),o=this.modReduce(o.multiply(o).subtract(u.shiftLeft(1))),u=this.modMult(u,u);return[a,o]},t.exports={ECCurveFp:o,ECPointFp:a,ECFieldElementFp:n}},function(t,e,r){t.exports={read:function(t,e){return u.read(t,e)},readSSHPrivate:function(t,e,c){var u=(e=new l({buffer:e})).readCString(),d=(s.strictEqual(u,f,"bad magic string"),e.readString()),m=e.readString();u=e.readBuffer();if(1!==e.readInt())throw new Error("OpenSSH-format key file contains multiple keys: this is unsupported.");var g=e.readBuffer();if("public"===t)return s.ok(e.atEnd(),"excess bytes left after key"),h.read(g);var y=e.readBuffer(),v=(s.ok(e.atEnd(),"excess bytes left after key"),new l({buffer:u}));switch(m){case"none":if("none"!==d)throw new Error('OpenSSH-format key uses KDF "none" but specifies a cipher other than "none"');break;case"bcrypt":var b=v.readBuffer(),w=v.readInt(),x=a.opensshCipherInfo(d);if(void 0===i&&(i=r(285)),"string"==typeof c.passphrase&&(c.passphrase=n.from(c.passphrase,"utf-8")),!n.isBuffer(c.passphrase))throw new p.KeyEncryptedError(c.filename,"OpenSSH");var k=new Uint8Array(c.passphrase),S=(b=new Uint8Array(b),new Uint8Array(x.keySize+x.blockSize));if(0!==i.pbkdf(k,k.length,b,b.length,S,S.length,w))throw new Error("bcrypt_pbkdf function returned failure, parameters invalid");k=(S=n.from(S)).slice(0,x.keySize),b=S.slice(x.keySize,x.keySize+x.blockSize);var E=o.createDecipheriv(x.opensslName,k,b);E.setAutoPadding(!1);var _,A=[];for(E.once("error",(function(t){if(-1!==t.toString().indexOf("bad decrypt"))throw new Error("Incorrect passphrase supplied, could not decrypt key");throw t})),E.write(y),E.end();null!==(_=E.read());)A.push(_);y=n.concat(A);break;default:throw new Error('OpenSSH-format key uses unknown KDF "'+m+'"')}if((t=(e=new l({buffer:y})).readInt())!==(g=e.readInt()))throw new Error("Incorrect passphrase supplied, could not decrypt key");return u={},t=h.readInternal(u,"private",e.remainder()),e.skip(u.consumed),g=e.readString(),t.comment=g,t},write:function(t,e){var u;u=c.isPrivateKey(t)?t.toPublic():t;var h,p,d="none",m="none",g=n.alloc(0),y={blockSize:8};if(void 0!==e&&void 0!==(h="string"==typeof(h=e.passphrase)?n.from(h,"utf-8"):h)&&(s.buffer(h,"options.passphrase"),s.optionalString(e.cipher,"options.cipher"),void 0===(d=e.cipher)&&(d="aes128-ctr"),y=a.opensshCipherInfo(d),m="bcrypt"),c.isPrivateKey(t)){p=new l({});e=o.randomBytes(4).readUInt32BE(0);for(var v=(p.writeInt(e),p.writeInt(e),p.write(t.toBuffer("rfc4253")),p.writeString(t.comment||""),1);p._offset%y.blockSize!=0;)p.writeChar(v++);p=p.toBuffer()}switch(m){case"none":break;case"bcrypt":var b=o.randomBytes(16),w=((w=new l({})).writeBuffer(b),w.writeInt(16),g=w.toBuffer(),void 0===i&&(i=r(285)),new Uint8Array(h)),x=(b=new Uint8Array(b),new Uint8Array(y.keySize+y.blockSize));if(0!==i.pbkdf(w,w.length,b,b.length,x,x.length,16))throw new Error("bcrypt_pbkdf function returned failure, parameters invalid");w=(x=n.from(x)).slice(0,y.keySize),b=x.slice(y.keySize,y.keySize+y.blockSize);var k=o.createCipheriv(y.opensslName,w,b);k.setAutoPadding(!1);var S,E=[];for(k.once("error",(function(t){throw t})),k.write(p),k.end();null!==(S=k.read());)E.push(S);p=n.concat(E);break;default:throw new Error("Unsupported kdf "+m)}var _=new l({});_.writeCString(f),_.writeString(d),_.writeString(m),_.writeBuffer(g),_.writeInt(1),_.writeBuffer(u.toBuffer("rfc4253")),p&&_.writeBuffer(p),_=_.toBuffer(),e=c.isPrivateKey(t)?"OPENSSH PRIVATE KEY":"OPENSSH PUBLIC KEY";var A=_.toString("base64"),R=(d=A.length+A.length/70+18+16+2*e.length+10,_=n.alloc(d),0);R+=_.write("-----BEGIN "+e+"-----\n",R);for(var I=0;I<A.length;){var j=I+70;j>A.length&&(j=A.length),R+=_.write(A.slice(I,j),R),_[R++]=10,I=j}return R+=_.write("-----END "+e+"-----\n",R),_.slice(0,R)}};var i,s=r(10),n=(r(57),r(14).Buffer),a=(r(31),r(25)),o=r(8),c=(r(23),r(24)),u=r(67),h=r(68),l=r(89),p=r(51),f="openssh-key-v1"},function(t,e,r){var i=r(58);const s=r(81),n=r(17),a=r(26),o=r(7),c=r(0),{Transform:u,ContractType:h,HtlcStatus:l,ContractEnvType:p}=r(5),f=new u("\n /*携带合约信息*/\n HTLCSUGGEST var_contract DROP\n /*校验秘密,持有秘密者才可执行*/\n HASH160 var_ab EQUALVERIFY \n IF\n /*Bob确认时执行: 校验Bob签名*/\n DUP HASH160 var_ba EQUALVERIFY CHECKSIG\n ELSE\n /*Alice取消时执行: 校验延时和Alice签名*/\n var_period CHECKSEQUENCEVERIFY DROP\n DUP HASH160 var_aa EQUALVERIFY CHECKSIG\n ENDIF\n");t.exports=class extends i{async confirm(){let{env:t,output:e,hash:r,i:i,data:n,height:a}=this.options;var o=e.getHashs("hex");o={type:"suggest",src:s.protocol+"."+t.network.type,dst:n.dst,shash:r,sidx:i,sheight:a,pst:l.Sent,amount:e.value,rate:n.rate,ab:e.script.code[4].data.toString("hex"),aa:o[1],ba:o[0]};await t.setSuggest(o),t.mode==p.Block&&t.node.transmit("htlcsuggest.receive",o)}async unconfirm(){let{env:t,data:e}=this.options;var r={shash:e.hash,sidx:e.index};await t.delHtlc(r)}async spent(t){let e=this.options.env,r=e.htlcList.get(""+t.prevout.hash+t.prevout.index);r&&(81==t.script.code[2].value?(r.pst=l.Finished,await e.setSuggest(r),e.mode==p.Block&&e.node.transmit("htlcsuggest.deal",r)):(r.pst=l.Cancel,await e.setSuggest(r),e.mode==p.Block&&e.node.transmit("htlcsuggest.cancel",r)))}async verify(){let{output:t,data:e}=this.options;var r={oper:h.htlcSuggest,rate:e.rate,dst:e.dst};let i=t.getHashs("hex"),s=t.script.code[4].data.toString("hex");r={contract:"0x"+Buffer.from(JSON.stringify(r)).toString("hex"),ab:"0x"+s.toString("hex"),aa:"0x"+i[1].toString("hex"),ba:"0x"+i[0].toString("hex"),period:2*o.HTLC_CANCEL_PERIOD};let a=n.fromString(f.replace(r));return c(a.toString()===t.script.toString()),!0}static create(t){var e={oper:h.htlcSuggest,rate:t.rate,dst:t.dst};e={contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),ab:"0x"+t.ab.toString("hex"),aa:"0x"+t.aa.toString("hex"),ba:"0x"+t.ba.toString("hex"),period:2*o.HTLC_CANCEL_PERIOD},e=n.fromString(f.replace(e));return a.fromScript(e,t.amount)}}},function(t,e,r){var i=r(58);const s=r(81),n=r(17),a=r(26),o=r(7),{Transform:c,ContractType:u,HtlcStatus:h,ContractEnvType:l}=r(5),p=new c("\n /*携带合约信息*/\n HTLCASSENT var_contract DROP\n IF\n /*Alice确认时执行: 校验签名*/\n DUP HASH160 var_ab EQUALVERIFY CHECKSIG\n ELSE\n /*Bob取消时执行: 校验延时和签名*/\n var_period CHECKSEQUENCEVERIFY DROP\n DUP HASH160 var_bb EQUALVERIFY CHECKSIG\n ENDIF\n");t.exports=class extends i{async confirm(){let{env:t,i:e,output:r,hash:i,height:n,data:a}=this.options;var o=r.getHashs("hex");o={src:a.src,dst:s.protocol+"."+t.network.type,shash:a.hash,sidx:a.index,ahash:i,aidx:e,aheight:n,pst:h.Assent,amount:a.value,rate:a.rate,ab:o[0],bb:o[1]};await t.setAssent(o),t.mode==l.Block&&t.node.transmit("htlcassent.receive",o)}async unconfirm(){let{env:t,data:e}=this.options;var r={shash:e.hash,sidx:e.index};await t.delHtlc(r)}async spent(t){let e=this.options.env;var r=e.htlcList.query([["ahash",t.prevout.hash],["aidx",t.prevout.index]]);if(r&&1===r.list.length&&r.list[0].pst===h.Assent){let i=r.list[0];81==t.script.code[2].value?(i.secret=t.script.code[1].data.toString("hex"),i.pst=h.Deal,await e.setAssent(i),e.mode==l.Block&&e.node.transmit("htlcassent.deal",i)):(i.pst=h.Cancel,await e.setAssent(i),e.mode==l.Block&&e.node.transmit("htlcassent.cancel",i))}}async verify(){let{env:t,output:e,data:r}=this.options;if(r.dst!=s.protocol+"."+t.network.type)return!1;var i={oper:u.htlcAssent,hash:r.hash,index:r.index};let a=e.getHashs("hex"),c=n.fromString(p.replace({contract:"0x"+Buffer.from(JSON.stringify(i)).toString("hex"),ab:"0x"+a[0].toString("hex"),bb:"0x"+a[1].toString("hex"),period:o.HTLC_CANCEL_PERIOD}));return assert(c.toString()===e.script.toString()),!0}static create(t){var e={oper:u.htlcAssent,hash:t.hash,index:t.index};e=n.fromString(p.replace({contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),ab:"0x"+t.ab.toString("hex"),bb:"0x"+t.bb.toString("hex"),period:o.HTLC_CANCEL_PERIOD}));return a.fromScript(e,t.amount)}}},function(t,e,r){var i=r(58);const s=r(17),n=r(26),a=r(0),{Transform:o,ContractType:c,ContractEnvType:u}=r(5),h=r(12),l=r(62).verifyData,p=new o("\n /*携带合约信息*/\n COMMENT var_contract DROP\n /*Bob确认时执行: 校验Bob签名*/\n DUP HASH160 var_bob EQUALVERIFY CHECKSIG\n");t.exports=class extends i{async insert(){let{env:t,output:e,hash:r,i:i,data:s}=this.options;var n=h.fromWitnessPubkeyhash(e.getHash(),t.network).toString();n={shash:r,sidx:i,alice:s.payload.addr,bob:n,body:s.payload.body};t.mode==u.Wallet&&await t.setComment(n)}async erase(){let{env:t,hash:e,i:r}=this.options;var i={shash:e,sidx:r};t.mode==u.Wallet&&await t.delComment(i)}async verify(){let{output:t,data:e}=this.options,r=t.getHash(),i=s.fromString(p.replace({contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),bob:"0x"+r.toString("hex")}));a(i.toString()===t.script.toString());var n=e.payload.sig;return delete(e=e.payload).sig,a.strictEqual(!0,l({data:e,sig:n})),!0}static create(t){var e={oper:c.comment,payload:t};e={contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),bob:"0x"+h.fromString(t.bob).hash.toString("hex")},e=s.fromString(p.replace(e));return n.fromScript(e,t.amount)}}},function(t,e,r){"use strict";
|
|
324
|
+
*/const i=r(0),s=r(1),n=r(2),a=r(4),o=r(3),c=r(6),u=r(7);var h=r(117);const l=r(87),p=Buffer.from([0]);class f extends h{constructor(t){super(),this.txs=[],this.hashes=[],this.flags=p,this.totalTX=0,this._tree=null,t&&this.fromOptions(t)}fromOptions(t){if(this.parseOptions(t),i(t,"MerkleBlock data is required."),i(Array.isArray(t.hashes)),i(Buffer.isBuffer(t.flags)),i(s.isU32(t.totalTX)),t.hashes)for(var e of t.hashes)"string"==typeof e&&(e=Buffer.from(e,"hex")),i(Buffer.isBuffer(e)),this.hashes.push(e);return t.flags&&(i(Buffer.isBuffer(t.flags)),this.flags=t.flags),null!=t.totalTX&&(i(s.isU32(t.totalTX)),this.totalTX=t.totalTX),this}static fromOptions(t){return(new f).fromOptions(t)}refresh(t){if(this._refresh(),this._tree=null,t)for(const t of this.txs)t.refresh()}hasTX(t){return-1!==this.indexOf(t)}indexOf(t){return null==(t=this.getTree().map.get(t))?-1:t}verifyBody(){var[t]=this.checkBody();return t}checkBody(){return this.getTree().root!==this.merkleRoot?[!1,"bad-txnmrklroot",100]:[!0,"valid",0]}getTree(){if(!this._tree)try{this._tree=this.extractTree()}catch(t){this._tree=new d}return this._tree}extractTree(){const t=[],e=[],r=new Map,i=this.hashes,s=this.flags,n=this.totalTX;let a=0,h=0,l=!1,p=0;const f=t=>n+(1<<t)-1>>>t,m=(n,u)=>{if(a>=8*s.length)return l=!0,o.ZERO_HASH;var p=s[a/8|0]>>>a%8&1;if(a++,0===n||!p){if(h>=i.length)return l=!0,o.ZERO_HASH;const s=i[h++];return 0===n&&p&&(p=s.toString("hex"),t.push(s),e.push(u),r.set(p,u)),s}let d;return p=m(n-1,2*u),2*u+1<f(n-1)?(d=m(n-1,2*u+1)).equals(p)&&(l=!0):d=p,c.root256(p,d)};if(0===n)throw new Error("Zero transactions.");if(n>(u.MAX_BLOCK_SIZE-81)/60)throw new Error("Too many transactions.");if(i.length>n)throw new Error("Too many hashes.");if(8*s.length<i.length)throw new Error("Flags too small.");for(;1<f(p);)p++;var g=m(p,0);if(l)throw new Error("Mutated merkle tree.");if(((a+7)/8|0)!==s.length)throw new Error("Too many flag bits.");if(h!==i.length)throw new Error("Incorrect number of hashes.");return new d(g,t,e,r)}getCoinbaseHeight(){return-1}inspect(){return this.format()}format(t,e){return{hash:this.rhash(),height:null!=e?e:-1,date:s.date(this.time),version:s.hex32(this.version),prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),time:this.time,bits:this.bits,nonce:this.nonce,totalTX:this.totalTX,hashes:this.hashes.map(t=>t.toString("hex")),flags:this.flags,map:this.getTree().map,txs:this.txs.length}}getSize(){return 84+o.sizeVarint(this.hashes.length)+32*this.hashes.length+o.sizeVarint(this.flags.length)+this.flags.length}toWriter(t){this.writeHead(t),t.writeU32(this.totalTX),t.writeVarint(this.hashes.length);for(const e of this.hashes)t.writeHash(e);return t.writeVarBytes(this.flags),t}toRaw(){var t=this.getSize();return this.toWriter(new a(t)).render()}fromReader(t){this.readHead(t),this.totalTX=t.readU32();var e=t.readVarint();for(let r=0;r<e;r++)this.hashes.push(t.readHash());return this.flags=t.readVarBytes(),this}fromRaw(t){return this.fromReader(new n(t))}static fromReader(t){return(new f).fromReader(t)}static fromRaw(t,e){return"string"==typeof t&&(t=Buffer.from(t,e)),(new f).fromRaw(t)}toJSON(){return this.getJSON()}getJSON(t,e,r){return{hash:this.rhash(),height:r,version:this.version,prevBlock:s.revHex(this.prevBlock),merkleRoot:s.revHex(this.merkleRoot),time:this.time,bits:this.bits,nonce:this.nonce,totalTX:this.totalTX,hashes:this.hashes.map(t=>s.revHex(t.toString("hex"))),flags:this.flags.toString("hex")}}fromJSON(t){for(var e of(i(t,"MerkleBlock data is required."),i(Array.isArray(t.hashes)),i("string"==typeof t.flags),i(s.isU32(t.totalTX)),this.parseJSON(t),t.hashes))e=s.revHex(e),this.hashes.push(Buffer.from(e,"hex"));return this.flags=Buffer.from(t.flags,"hex"),this.totalTX=t.totalTX,this}static fromJSON(t){return(new f).fromJSON(t)}static fromBlock(t,e){const r=[];for(const i of t.txs)r.push(i.isWatched(e)?1:0);return f.fromMatches(t,r)}static fromHashes(t,e){const r=new Set;for(var i of e)Buffer.isBuffer(i)&&(i=i.toString("hex")),r.add(i);const s=[];for(const e of t.txs){var n=e.hash("hex");s.push(r.has(n)?1:0)}return f.fromMatches(t,s)}static fromMatches(t,e){const r=[],i=[],s=[],n=[],a=t.txs.length;let o=0;const u=t=>a+(1<<t)-1>>>t,h=(t,e,r)=>{if(0===t)return r[e];var i=h(t-1,2*e,r);let s;return s=2*e+1<u(t-1)?h(t-1,2*e+1,r):i,c.root256(i,s)},l=(t,e,r,i)=>{let o=0;for(let r=e<<t;r<e+1<<t&&r<a;r++)o|=i[r];s.push(o),0!==t&&o?(l(t-1,2*e,r,i),2*e+1<u(t-1)&&l(t-1,2*e+1,r,i)):n.push(h(t,e,r))};for(let s=0;s<t.txs.length;s++){const n=t.txs[s];e[s]&&r.push(n),i.push(n.hash())}for(;1<u(o);)o++;l(o,0,i,e);const p=Buffer.allocUnsafe((s.length+7)/8|0);p.fill(0);for(let t=0;t<s.length;t++)p[t/8|0]|=s[t]<<t%8;const d=new f;return d._hash=t._hash,d._hhash=t._hhash,d.version=t.version,d.prevBlock=t.prevBlock,d.merkleRoot=t.merkleRoot,d.time=t.time,d.bits=t.bits,d.nonce=t.nonce,d.totalTX=a,d.hashes=n,d.flags=p,d.txs=r,d}static isMerkleBlock(t){return t instanceof f}toHeaders(){return l.fromBlock(this)}}function d(t,e,r,i){this.root=t?t.toString("hex"):o.NULL_HASH,this.matches=e||[],this.indexes=r||[],this.map=i||new Map}t.exports=f},function(t,e,r){const i=r(5).PropStatus;r=r(29);class s extends r{constructor(t){super(),this.db=t||{getVp:async t=>this.get(t),setVp:t=>{this.set(t.pid,t)},delVp:t=>{this.delete(t)},loadVpList:()=>{}}}async loadHistory(){}setAccount(t,e,r){var i;t&&t.wid&&t.account&&(i=t.wid+"."+t.account,this.account.get(i)&&this.account.get(i).delete(t.pid)),t.wid=e,t.account=r,e&&r&&(i=t.wid+"."+t.account,this.account.get(i)||this.account.set(i,new Map),this.account.get(i).set(t.pid,t))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.pid))}async getVp(t){return this.db.getVp(t)}async getVpByAddress(t){return this.db.getVpByAddress(t)}async getVpByOid(t){return this.db.getVpByOid(t)}async setVp(t,e){t=new n(t),await this.db.setVp(t,e)}async delVp(t){this.delete(t.pid),await this.db.delVp(t)}}class n{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.pid=t.pid,this.cid=t.cid||"",this.oid=t.oid||"",this.gold=t.gold,this.current=null,t.current&&(this.current={},this.current.hash=t.current.hash,this.current.index=t.current.index,this.current.address=t.current.address),this.height=t.height,this.pst=t.pst||i.Ready,this.wid=t.wid||0,this.account=t.account||"",this.bid=null,t.bid&&(this.bid={},this.bid.raw=t.bid.raw||"",this.bid.fixed=t.bid.fixed||0,this.bid.period=t.bid.period||0,this.bid.hash=t.bid.hash||"",this.bid.value=t.bid.value||0,this.bid.address=t.bid.address||"")}toRaw(){let t={};return t.pid=this.pid,t.cid=this.cid||"",t.oid=this.oid||"",t.gold=this.gold,this.current&&(t.current={},t.current.hash=this.current.hash,t.current.index=this.current.index,t.current.address=this.current.address),t.height=this.height,t.pst=this.pst||i.Ready,t.wid=this.wid||0,t.account=this.account||"",this.bid&&(t.bid={},t.bid.raw=this.bid.raw||"",t.bid.fixed=this.bid.fixed||0,t.bid.period=this.bid.period||0,t.bid.hash=this.bid.hash||"",t.bid.value=this.bid.value||0,t.bid.address=this.bid.address||""),Buffer.from(JSON.stringify(t),"utf-8")}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new n).fromRaw(t)}}s.vpItem=n,t.exports=s},function(t,e,r){var i=r(10),s=r(179),n=(r=r(9),{sha1:!0,sha256:!0,sha512:!0}),a={rsa:!0,dsa:!0,ecdsa:!0};function o(t,e){Error.captureStackTrace&&Error.captureStackTrace(this,e||o),this.message=t,this.name=e.name}function c(t){o.call(this,t,c)}r.inherits(o,Error),r.inherits(c,o),t.exports={HASH_ALGOS:n,PK_ALGOS:a,HttpSignatureError:o,InvalidAlgorithmError:c,validateAlgorithm:function(t){if(2!==(t=t.toLowerCase().split("-")).length)throw new c(t[0].toUpperCase()+" is not a valid algorithm");if("hmac"!==t[0]&&!a[t[0]])throw new c(t[0].toUpperCase()+" type keys are not supported");if(n[t[1]])return t;throw new c(t[1].toUpperCase()+" is not a supported hash algorithm")},sshKeyToPEM:function(t){return i.string(t,"ssh_key"),s.parseKey(t,"ssh").toString("pem")},fingerprint:function(t){return i.string(t,"ssh_key"),s.parseKey(t,"ssh").fingerprint("md5").toString("hex")},pemToRsaSSHKey:function(t,e){return i.equal("string",typeof t,"typeof pem"),(t=s.parseKey(t,"pem")).comment=e,t.toString("ssh")}}},function(t,e,r){var i=r(104).BigInteger,s=i.prototype.Barrett;function n(t,e){this.x=e,this.q=t}function a(t,e,r,s){this.curve=t,this.x=e,this.y=r,this.z=null==s?i.ONE:s,this.zinv=null}function o(t,e,r){this.q=t,this.a=this.fromBigInteger(e),this.b=this.fromBigInteger(r),this.infinity=new a(this,null,null),this.reducer=new s(this.q)}n.prototype.equals=function(t){return t==this||this.q.equals(t.q)&&this.x.equals(t.x)},n.prototype.toBigInteger=function(){return this.x},n.prototype.negate=function(){return new n(this.q,this.x.negate().mod(this.q))},n.prototype.add=function(t){return new n(this.q,this.x.add(t.toBigInteger()).mod(this.q))},n.prototype.subtract=function(t){return new n(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))},n.prototype.multiply=function(t){return new n(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))},n.prototype.square=function(){return new n(this.q,this.x.square().mod(this.q))},n.prototype.divide=function(t){return new n(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))},a.prototype.getX=function(){null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q));var t=this.x.toBigInteger().multiply(this.zinv);return this.curve.reduce(t),this.curve.fromBigInteger(t)},a.prototype.getY=function(){null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q));var t=this.y.toBigInteger().multiply(this.zinv);return this.curve.reduce(t),this.curve.fromBigInteger(t)},a.prototype.equals=function(t){return t==this||(this.isInfinity()?t.isInfinity():t.isInfinity()?this.isInfinity():!!t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(i.ZERO)&&t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(i.ZERO))},a.prototype.isInfinity=function(){return null==this.x&&null==this.y||this.z.equals(i.ZERO)&&!this.y.toBigInteger().equals(i.ZERO)},a.prototype.negate=function(){return new a(this.curve,this.x,this.y.negate(),this.z)},a.prototype.add=function(t){var e,r,s,n,o,c,u;return this.isInfinity()?t:t.isInfinity()?this:(e=t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q),o=t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q),i.ZERO.equals(o)?i.ZERO.equals(e)?this.twice():this.curve.getInfinity():(u=new i("3"),c=this.x.toBigInteger(),r=this.y.toBigInteger(),t.x.toBigInteger(),t.y.toBigInteger(),s=(n=o.square()).multiply(o),c=c.multiply(n),o=(n=e.square().multiply(this.z)).subtract(c.shiftLeft(1)).multiply(t.z).subtract(s).multiply(o).mod(this.curve.q),c=c.multiply(u).multiply(e).subtract(r.multiply(s)).subtract(n.multiply(e)).multiply(t.z).add(e.multiply(s)).mod(this.curve.q),u=s.multiply(this.z).multiply(t.z).mod(this.curve.q),new a(this.curve,this.curve.fromBigInteger(o),this.curve.fromBigInteger(c),u)))},a.prototype.twice=function(){var t,e,r,s,n,o;return this.isInfinity()?this:0==this.y.toBigInteger().signum()?this.curve.getInfinity():(n=new i("3"),o=this.x.toBigInteger(),e=(t=(e=this.y.toBigInteger()).multiply(this.z)).multiply(e).mod(this.curve.q),s=this.curve.a.toBigInteger(),r=o.square().multiply(n),s=(r=(r=i.ZERO.equals(s)?r:r.add(this.z.square().multiply(s))).mod(this.curve.q)).square().subtract(o.shiftLeft(3).multiply(e)).shiftLeft(1).multiply(t).mod(this.curve.q),n=r.multiply(n).multiply(o).subtract(e.shiftLeft(1)).shiftLeft(2).multiply(e).subtract(r.square().multiply(r)).mod(this.curve.q),o=t.square().multiply(t).shiftLeft(3).mod(this.curve.q),new a(this.curve,this.curve.fromBigInteger(s),this.curve.fromBigInteger(n),o))},a.prototype.multiply=function(t){if(this.isInfinity())return this;if(0==t.signum())return this.curve.getInfinity();for(var e=t,r=e.multiply(new i("3")),s=this.negate(),n=this,a=r.bitLength()-2;0<a;--a){n=n.twice();var o=r.testBit(a);o!=e.testBit(a)&&(n=n.add(o?this:s))}return n},a.prototype.multiplyTwo=function(t,e,r){for(var i=t.bitLength()>r.bitLength()?t.bitLength()-1:r.bitLength()-1,s=this.curve.getInfinity(),n=this.add(e);0<=i;)s=s.twice(),t.testBit(i)?s=r.testBit(i)?s.add(n):s.add(this):r.testBit(i)&&(s=s.add(e)),--i;return s},o.prototype.getQ=function(){return this.q},o.prototype.getA=function(){return this.a},o.prototype.getB=function(){return this.b},o.prototype.equals=function(t){return t==this||this.q.equals(t.q)&&this.a.equals(t.a)&&this.b.equals(t.b)},o.prototype.getInfinity=function(){return this.infinity},o.prototype.fromBigInteger=function(t){return new n(this.q,t)},o.prototype.reduce=function(t){this.reducer.reduce(t)},o.prototype.encodePointHex=function(t){if(t.isInfinity())return"00";var e=t.getX().toBigInteger().toString(16),r=t.getY().toBigInteger().toString(16),i=this.getQ().toString(16).length;for(i%2!=0&&i++;e.length<i;)e="0"+e;for(;r.length<i;)r="0"+r;return"04"+e+r},o.prototype.decodePointHex=function(t){switch(parseInt(t.substr(0,2),16)){case 0:return this.infinity;case 2:c=!1;case 3:null==c&&(c=!0);var e=t.length-2,r=t.substr(2,e),s=this.fromBigInteger(new i(r,16)),n=s.multiply(s.square().add(this.getA())).add(this.getB()).sqrt();if(null==n)throw"Invalid point compression";var o=n.toBigInteger();return o.testBit(0)!=c&&(n=this.fromBigInteger(this.getQ().subtract(o))),new a(this,s,n);case 4:case 6:case 7:e=(t.length-2)/2,r=t.substr(2,e);var c=t.substr(e+2,e);return new a(this,this.fromBigInteger(new i(r,16)),this.fromBigInteger(new i(c,16)));default:return null}},o.prototype.encodeCompressedPointHex=function(t){if(t.isInfinity())return"00";var e=t.getX().toBigInteger().toString(16),r=this.getQ().toString(16).length;for(r%2!=0&&r++;e.length<r;)e="0"+e;return(t.getY().toBigInteger().isEven()?"02":"03")+e},n.prototype.getR=function(){var t;return null==this.r&&(this.r=null,128<(t=this.q.bitLength())&&-1==this.q.shiftRight(t-64).intValue()&&(this.r=i.ONE.shiftLeft(t).subtract(this.q))),this.r},n.prototype.modMult=function(t,e){return this.modReduce(t.multiply(e))},n.prototype.modReduce=function(t){if(null!=this.getR()){for(var e=q.bitLength();t.bitLength()>e+1;){var r=t.shiftRight(e),s=t.subtract(r.shiftLeft(e));t=(r=this.getR().equals(i.ONE)?r:r.multiply(this.getR())).add(s)}for(;0<=t.compareTo(q);)t=t.subtract(q)}else t=t.mod(q);return t},n.prototype.sqrt=function(){if(!this.q.testBit(0))throw"unsupported";var t;if(this.q.testBit(1))return(t=new n(this.q,this.x.modPow(this.q.shiftRight(2).add(i.ONE),this.q))).square().equals(this)?t:null;var e=this.q.subtract(i.ONE),r=e.shiftRight(1);if(this.x.modPow(r,this.q).equals(i.ONE)){var s,a=e.shiftRight(2).shiftLeft(1).add(i.ONE),o=this.x,c=modDouble(modDouble(o));do{for(;0<=(s=new i(this.q.bitLength(),new SecureRandom)).compareTo(this.q)||!s.multiply(s).subtract(c).modPow(r,this.q).equals(e););var u=(h=this.lucasSequence(s,o,a))[0],h=h[1];if(this.modMult(h,h).equals(c))return h=(h=h.testBit(0)?h.add(q):h).shiftRight(1),new n(q,h)}while(u.equals(i.ONE)||u.equals(e))}return null},n.prototype.lucasSequence=function(t,e,r){for(var s=r.bitLength(),n=r.getLowestSetBit(),a=i.ONE,o=i.TWO,c=t,u=i.ONE,h=i.ONE,l=s-1;n+1<=l;--l)u=this.modMult(u,h),r.testBit(l)?(h=this.modMult(u,e),a=this.modMult(a,c),o=this.modReduce(c.multiply(o).subtract(t.multiply(u))),c=this.modReduce(c.multiply(c).subtract(h.shiftLeft(1)))):(h=u,a=this.modReduce(a.multiply(o).subtract(u)),c=this.modReduce(c.multiply(o).subtract(t.multiply(u))),o=this.modReduce(o.multiply(o).subtract(u.shiftLeft(1))));for(u=this.modMult(u,h),h=this.modMult(u,e),a=this.modReduce(a.multiply(o).subtract(u)),o=this.modReduce(c.multiply(o).subtract(t.multiply(u))),u=this.modMult(u,h),l=1;l<=n;++l)a=this.modMult(a,o),o=this.modReduce(o.multiply(o).subtract(u.shiftLeft(1))),u=this.modMult(u,u);return[a,o]},t.exports={ECCurveFp:o,ECPointFp:a,ECFieldElementFp:n}},function(t,e,r){t.exports={read:function(t,e){return u.read(t,e)},readSSHPrivate:function(t,e,c){var u=(e=new l({buffer:e})).readCString(),d=(s.strictEqual(u,f,"bad magic string"),e.readString()),m=e.readString();u=e.readBuffer();if(1!==e.readInt())throw new Error("OpenSSH-format key file contains multiple keys: this is unsupported.");var g=e.readBuffer();if("public"===t)return s.ok(e.atEnd(),"excess bytes left after key"),h.read(g);var y=e.readBuffer(),v=(s.ok(e.atEnd(),"excess bytes left after key"),new l({buffer:u}));switch(m){case"none":if("none"!==d)throw new Error('OpenSSH-format key uses KDF "none" but specifies a cipher other than "none"');break;case"bcrypt":var b=v.readBuffer(),w=v.readInt(),x=a.opensshCipherInfo(d);if(void 0===i&&(i=r(285)),"string"==typeof c.passphrase&&(c.passphrase=n.from(c.passphrase,"utf-8")),!n.isBuffer(c.passphrase))throw new p.KeyEncryptedError(c.filename,"OpenSSH");var k=new Uint8Array(c.passphrase),S=(b=new Uint8Array(b),new Uint8Array(x.keySize+x.blockSize));if(0!==i.pbkdf(k,k.length,b,b.length,S,S.length,w))throw new Error("bcrypt_pbkdf function returned failure, parameters invalid");k=(S=n.from(S)).slice(0,x.keySize),b=S.slice(x.keySize,x.keySize+x.blockSize);var E=o.createDecipheriv(x.opensslName,k,b);E.setAutoPadding(!1);var _,A=[];for(E.once("error",(function(t){if(-1!==t.toString().indexOf("bad decrypt"))throw new Error("Incorrect passphrase supplied, could not decrypt key");throw t})),E.write(y),E.end();null!==(_=E.read());)A.push(_);y=n.concat(A);break;default:throw new Error('OpenSSH-format key uses unknown KDF "'+m+'"')}if((t=(e=new l({buffer:y})).readInt())!==(g=e.readInt()))throw new Error("Incorrect passphrase supplied, could not decrypt key");return u={},t=h.readInternal(u,"private",e.remainder()),e.skip(u.consumed),g=e.readString(),t.comment=g,t},write:function(t,e){var u;u=c.isPrivateKey(t)?t.toPublic():t;var h,p,d="none",m="none",g=n.alloc(0),y={blockSize:8};if(void 0!==e&&void 0!==(h="string"==typeof(h=e.passphrase)?n.from(h,"utf-8"):h)&&(s.buffer(h,"options.passphrase"),s.optionalString(e.cipher,"options.cipher"),void 0===(d=e.cipher)&&(d="aes128-ctr"),y=a.opensshCipherInfo(d),m="bcrypt"),c.isPrivateKey(t)){p=new l({});e=o.randomBytes(4).readUInt32BE(0);for(var v=(p.writeInt(e),p.writeInt(e),p.write(t.toBuffer("rfc4253")),p.writeString(t.comment||""),1);p._offset%y.blockSize!=0;)p.writeChar(v++);p=p.toBuffer()}switch(m){case"none":break;case"bcrypt":var b=o.randomBytes(16),w=((w=new l({})).writeBuffer(b),w.writeInt(16),g=w.toBuffer(),void 0===i&&(i=r(285)),new Uint8Array(h)),x=(b=new Uint8Array(b),new Uint8Array(y.keySize+y.blockSize));if(0!==i.pbkdf(w,w.length,b,b.length,x,x.length,16))throw new Error("bcrypt_pbkdf function returned failure, parameters invalid");w=(x=n.from(x)).slice(0,y.keySize),b=x.slice(y.keySize,y.keySize+y.blockSize);var k=o.createCipheriv(y.opensslName,w,b);k.setAutoPadding(!1);var S,E=[];for(k.once("error",(function(t){throw t})),k.write(p),k.end();null!==(S=k.read());)E.push(S);p=n.concat(E);break;default:throw new Error("Unsupported kdf "+m)}var _=new l({});_.writeCString(f),_.writeString(d),_.writeString(m),_.writeBuffer(g),_.writeInt(1),_.writeBuffer(u.toBuffer("rfc4253")),p&&_.writeBuffer(p),_=_.toBuffer(),e=c.isPrivateKey(t)?"OPENSSH PRIVATE KEY":"OPENSSH PUBLIC KEY";var A=_.toString("base64"),R=(d=A.length+A.length/70+18+16+2*e.length+10,_=n.alloc(d),0);R+=_.write("-----BEGIN "+e+"-----\n",R);for(var I=0;I<A.length;){var j=I+70;j>A.length&&(j=A.length),R+=_.write(A.slice(I,j),R),_[R++]=10,I=j}return R+=_.write("-----END "+e+"-----\n",R),_.slice(0,R)}};var i,s=r(10),n=(r(57),r(14).Buffer),a=(r(31),r(25)),o=r(8),c=(r(23),r(24)),u=r(67),h=r(68),l=r(89),p=r(51),f="openssh-key-v1"},function(t,e,r){var i=r(58);const s=r(81),n=r(17),a=r(26),o=r(7),c=r(0),{Transform:u,ContractType:h,HtlcStatus:l,ContractEnvType:p}=r(5),f=new u("\n /*携带合约信息*/\n HTLCSUGGEST var_contract DROP\n /*校验秘密,持有秘密者才可执行*/\n HASH160 var_ab EQUALVERIFY \n IF\n /*Bob确认时执行: 校验Bob签名*/\n DUP HASH160 var_ba EQUALVERIFY CHECKSIG\n ELSE\n /*Alice取消时执行: 校验延时和Alice签名*/\n var_period CHECKSEQUENCEVERIFY DROP\n DUP HASH160 var_aa EQUALVERIFY CHECKSIG\n ENDIF\n");t.exports=class extends i{async confirm(){let{env:t,output:e,hash:r,i:i,data:n,height:a}=this.options;var o=e.getHashs("hex");o={type:"suggest",src:s.protocol+"."+t.network.type,dst:n.dst,shash:r,sidx:i,sheight:a,pst:l.Sent,amount:e.value,rate:n.rate,ab:e.script.code[4].data.toString("hex"),aa:o[1],ba:o[0]};await t.setSuggest(o),t.mode==p.Block&&t.node.transmit("htlcsuggest.receive",o)}async unconfirm(){let{env:t,data:e}=this.options;var r={shash:e.hash,sidx:e.index};await t.delHtlc(r)}async spent(t){let e=this.options.env,r=e.htlcList.get(""+t.prevout.hash+t.prevout.index);r&&(81==t.script.code[2].value?(r.pst=l.Finished,await e.setSuggest(r),e.mode==p.Block&&e.node.transmit("htlcsuggest.deal",r)):(r.pst=l.Cancel,await e.setSuggest(r),e.mode==p.Block&&e.node.transmit("htlcsuggest.cancel",r)))}async verify(){let{output:t,data:e}=this.options;var r={oper:h.htlcSuggest,rate:e.rate,dst:e.dst};let i=t.getHashs("hex"),s=t.script.code[4].data.toString("hex");r={contract:"0x"+Buffer.from(JSON.stringify(r)).toString("hex"),ab:"0x"+s.toString("hex"),aa:"0x"+i[1].toString("hex"),ba:"0x"+i[0].toString("hex"),period:2*o.HTLC_CANCEL_PERIOD};let a=n.fromString(f.replace(r));return c(a.toString()===t.script.toString()),!0}static create(t){var e={oper:h.htlcSuggest,rate:t.rate,dst:t.dst};e={contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),ab:"0x"+t.ab.toString("hex"),aa:"0x"+t.aa.toString("hex"),ba:"0x"+t.ba.toString("hex"),period:2*o.HTLC_CANCEL_PERIOD},e=n.fromString(f.replace(e));return a.fromScript(e,t.amount)}}},function(t,e,r){var i=r(58);const s=r(81),n=r(17),a=r(26),o=r(7),{Transform:c,ContractType:u,HtlcStatus:h,ContractEnvType:l}=r(5),p=new c("\n /*携带合约信息*/\n HTLCASSENT var_contract DROP\n IF\n /*Alice确认时执行: 校验签名*/\n DUP HASH160 var_ab EQUALVERIFY CHECKSIG\n ELSE\n /*Bob取消时执行: 校验延时和签名*/\n var_period CHECKSEQUENCEVERIFY DROP\n DUP HASH160 var_bb EQUALVERIFY CHECKSIG\n ENDIF\n");t.exports=class extends i{async confirm(){let{env:t,i:e,output:r,hash:i,height:n,data:a}=this.options;var o=r.getHashs("hex");o={src:a.src,dst:s.protocol+"."+t.network.type,shash:a.hash,sidx:a.index,ahash:i,aidx:e,aheight:n,pst:h.Assent,amount:a.value,rate:a.rate,ab:o[0],bb:o[1]};await t.setAssent(o),t.mode==l.Block&&t.node.transmit("htlcassent.receive",o)}async unconfirm(){let{env:t,data:e}=this.options;var r={shash:e.hash,sidx:e.index};await t.delHtlc(r)}async spent(t){let e=this.options.env;var r=e.htlcList.query([["ahash",t.prevout.hash],["aidx",t.prevout.index]]);if(r&&1===r.list.length&&r.list[0].pst===h.Assent){let i=r.list[0];81==t.script.code[2].value?(i.secret=t.script.code[1].data.toString("hex"),i.pst=h.Deal,await e.setAssent(i),e.mode==l.Block&&e.node.transmit("htlcassent.deal",i)):(i.pst=h.Cancel,await e.setAssent(i),e.mode==l.Block&&e.node.transmit("htlcassent.cancel",i))}}async verify(){let{env:t,output:e,data:r}=this.options;if(r.dst!=s.protocol+"."+t.network.type)return!1;var i={oper:u.htlcAssent,hash:r.hash,index:r.index};let a=e.getHashs("hex"),c=n.fromString(p.replace({contract:"0x"+Buffer.from(JSON.stringify(i)).toString("hex"),ab:"0x"+a[0].toString("hex"),bb:"0x"+a[1].toString("hex"),period:o.HTLC_CANCEL_PERIOD}));return assert(c.toString()===e.script.toString()),!0}static create(t){var e={oper:u.htlcAssent,hash:t.hash,index:t.index};e=n.fromString(p.replace({contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),ab:"0x"+t.ab.toString("hex"),bb:"0x"+t.bb.toString("hex"),period:o.HTLC_CANCEL_PERIOD}));return a.fromScript(e,t.amount)}}},function(t,e,r){var i=r(58);const s=r(17),n=r(26),a=r(0),{Transform:o,ContractType:c,ContractEnvType:u}=r(5),h=r(12),l=r(62).verifyData,p=new o("\n /*携带合约信息*/\n COMMENT var_contract DROP\n /*Bob确认时执行: 校验Bob签名*/\n DUP HASH160 var_bob EQUALVERIFY CHECKSIG\n");t.exports=class extends i{async insert(){let{env:t,output:e,hash:r,i:i,data:s}=this.options;var n=h.fromWitnessPubkeyhash(e.getHash(),t.network).toString();n={shash:r,sidx:i,alice:s.payload.addr,bob:n,body:s.payload.body};t.mode==u.Wallet&&await t.setComment(n)}async erase(){let{env:t,hash:e,i:r}=this.options;var i={shash:e,sidx:r};t.mode==u.Wallet&&await t.delComment(i)}async verify(){let{output:t,data:e}=this.options,r=t.getHash(),i=s.fromString(p.replace({contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),bob:"0x"+r.toString("hex")}));a(i.toString()===t.script.toString());var n=e.payload.sig;return delete(e=e.payload).sig,a.strictEqual(!0,l({data:e,sig:n})),!0}static create(t){var e={oper:c.comment,payload:t};e={contract:"0x"+Buffer.from(JSON.stringify(e)).toString("hex"),bob:"0x"+h.fromString(t.bob).hash.toString("hex")},e=s.fromString(p.replace(e));return n.fromScript(e,t.amount)}}},function(t,e,r){"use strict";
|
|
325
325
|
/*!
|
|
326
326
|
* netaddress.js - network address object for vallnet
|
|
327
327
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -386,11 +386,11 @@ function i(t){let e=null;var r=i.list[t.contract.options.type];return r?new(e=r.
|
|
|
386
386
|
* jobs.js - worker jobs for vallnet
|
|
387
387
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
388
388
|
* https://github.com/bookmansoft/gamegold
|
|
389
|
-
*/const i=r(28),s=r(238).derive,n=r(317),a=r(121);r(59),r(21);var{}=r(5);const o=e;o.execute=function(t){try{return o.handle(t)}catch(t){return new a.ErrorResultPacket(t)}},o.handle=function(t){return t.jobsHandle(o)},o.check=function(t,e,r,i){try{t.check(e,r,i)}catch(t){if("ScriptError"===t.type)return new a.CheckResultPacket(t);throw t}return new a.CheckResultPacket},o.checkInput=function(t,e,r,i,s){try{t.checkInput(e,r,i,s)}catch(t){if("ScriptError"===t.type)return new a.CheckInputResultPacket(t);throw t}return new a.CheckInputResultPacket},o.sign=function(t,e,r,i){return e=t.sign(e,!0,r,i),a.SignResultPacket.fromTX(t,e)},o.signInput=function(t,e,r,i,s){return r=t.signInput(t,e,r,i,s),a.SignInputResultPacket.fromTX(t,e,r)},o.ecVerify=function(t,e,r){return t=i.verify(t,e,r),new a.ECVerifyResultPacket(t)},o.ecSign=function(t,e){return t=i.sign(t,e),new a.ECSignResultPacket(t)},o.mine=function(t,e,r,i){return t=n(t,e,r,i),new a.MineResultPacket(t)},o.scrypt=function(t,e,r,i,n,o){return t=s(t,e,r,i,n,o),new a.ScryptResultPacket(t)}},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6),o=r(65);class c extends i{constructor(t){super(),this.db=t||{getEr:()=>{},setEr:()=>{},delEr:()=>{}},this.cache=new o(1e4)}async loadHistory(){}async getEr(t){return this.cache.get(t)||this.db.getEr(t)}async setEr(t,e){t=new u(t),await this.db.setEr(t,e),this.cache.set(t.erid,t)}async delEr(t,e){await this.db.delEr(t),this.cache.remove(t.erid)}async query(t){let e=!1,r=null,i=[];for(var s of t)if(s&&Array.isArray(s)){if("erid"==s[0])return{list:[await this.getEr(s[1])],page:0,count:1};"merge"==s[0]?e=s[1]:"pubkey"==s[0]?r=s[1]:i.push(s)}return r?this.db.byPubkey(r,i,e):{list:[],page:0,count:1}}}class u{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"erIssue",this.erid=t.erid,this.witness=t.witness||"",this.validHeight=t.validHeight,this.startHeight=t.startHeight||0,this.signature=t.signature||"",this.source=null,t.source&&(this.source={},this.source.subjectName=t.source.subjectName,this.source.pubkey=t.source.pubkey,this.source.subjectHash=t.source.subjectHash,this.source.cluster=t.source.cluster,this.source.cid=t.source.cid,this.source.uid=t.source.uid),this.wid=t.wid||0,this.account=t.account||""}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}toOptions(t=!1){let e={};return e.oper=this.oper||"erIssue",e.erid=this.erid,e.witness=this.witness||"",e.validHeight=this.validHeight,t&&(e.startHeight=this.startHeight,e.signature=this.signature||""),this.source&&(e.source={},e.source.subjectName=this.source.subjectName,e.source.pubkey=this.source.pubkey,e.source.subjectHash=this.source.subjectHash,e.source.cluster=this.source.cluster||"",e.source.cid=this.source.cid||"",e.source.uid=this.source.uid||0),e}getSignObjSize(t){let e=0;return e=(e=(e=(e+=n.sizeVarString(t.oper,"utf8"))+n.sizeVarString(t.erid,"utf8"))+n.sizeVarString(t.witness,"ascii"))+4+4,t.source?(e=(e=(e=(e+=n.sizeVarString(t.source.subjectName,"utf8"))+n.sizeVarString(t.source.pubkey,"utf8"))+n.sizeVarString(t.source.subjectHash,"utf8"))+n.sizeVarString(t.source.cluster,"utf8"))+n.sizeVarString(t.source.cid,"utf8")+4:e}toWriter(t,e){return e.writeVarString(t.oper,"utf8"),e.writeVarString(t.erid,"utf8"),e.writeVarString(t.witness,"ascii"),e.writeU32(t.validHeight),e.writeU32(t.startHeight),t.source&&(e.writeVarString(t.source.subjectName,"utf8"),e.writeVarString(t.source.pubkey,"utf8"),e.writeVarString(t.source.subjectHash,"utf8"),e.writeVarString(t.source.cluster,"utf8"),e.writeVarString(t.source.cid,"utf8"),e.writeU32(t.source.uid)),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getSignObjSize(t))).render())}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new u).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}c.ErItem=u,t.exports=c},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6);class o extends i{constructor(t){super(),this.db=t||{getErAbolish:()=>{},setErAbolish:()=>{},delErAbolish:()=>{},loadErAbolishList:()=>{}}}async loadHistory(){}async getErAb(t){return this.db.getErAbolish(t)}async setErAb(t,e){t=new c(t),await this.db.setErAbolish(t),this.set(t.erid,t)}async delErAb(t,e){await this.db.delErAbolish(t),this.delete(t.erid)}async query(t){let e=!1;for(var r of t)"cluster"==r[0]&&(e=r[1]);for(var i of t){if("erid"==i[0])return{list:[await this.getErAb(i[1])],page:0,count:1};if("pubkey"==i[0])return this.db.byPubkey(i[1],e)}return{list:[],page:0,count:1}}}class c{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"erAbolish",this.erid=t.erid,this.witness=t.witness||"",this.abolishHeight=t.abolishHeight,this.startHeight=t.startHeight||0,this.signature=t.signature||""}toOptions(t){let e={};return e.oper=this.oper||"erAbolish",e.erid=this.erid,e.witness=this.witness||"",e.abolishHeight=this.abolishHeight,t&&(e.startHeight=this.startHeight,e.signature=this.signature||""),e}getMsgSize(){var t=0;return(t+=n.sizeVarString(this.oper,"utf8"))+n.sizeVarString(this.erid,"utf8")+n.sizeVarString(this.witness,"ascii")+4+4}toWriter(t,e){return e.writeVarString(this.oper,"utf8"),e.writeVarString(this.erid,"utf8"),e.writeVarString(this.witness,"ascii"),e.writeU32(this.abolishHeight),e.writeU32(this.startHeight),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getMsgSize(t))).render())}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}fromReader(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}fromRaw(t){return this.fromReader(t)}static fromRaw(t){return(new c).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}o.ErAbolishItem=c,t.exports=o},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6),{SX:o,SXX:c}=r(94);class u extends i{constructor(t){super(),this.db=t||{setX509Cert:()=>{},delX509Cert:()=>{},loadX509CertList:()=>{}}}async loadHistory(){var t,e;for(t of(this.clear(),await this.db.loadX509CertList()))this.set(t.getCertNo(),t),t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.getCertNo(),t))}setAccount(t,e,r){var i;t&&t.wid&&t.account&&(i=t.wid+"."+t.account,this.account.get(i)&&this.account.get(i).delete(t.getCertNo())),erItem.wid=e,erItem.account=r,e&&r&&(i=erItem.wid+"."+erItem.account,this.account.get(i)||this.account.set(i,new Map),this.account.get(i).set(t.getCertNo(),erItem))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.getCertNo()))}getX509(t,e){return t=o(t,e,!0).toString("hex"),this.get(t)}async setX509Cert(t,e){t=new h(t),await this.db.setX509Cert(t,e),this.set(t.getCertNo(),t)}async delX509Cert(t,e){await this.db.delX509Cert(t),this.delete(t.getCertNo())}}class h{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"x509Issue",this.witness=t.witness||"",this.certSq=t.certSq,this.activeTime=t.activeTime,this.cert=t.cert||"",this.signature=t.signature||"",this.wid=t.wid||0,this.account=t.account||""}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}toOptions(t=!1){let e={};return e.oper=this.oper||"x509Issue",e.witness=this.witness||"",e.certSq=this.certSq,e.activeTime=this.activeTime,e.cert=this.cert,t&&(e.signature=this.signature||"",e.wid=this.wid||0,e.account=this.account||""),e}get certNo(){return o(this.witness,this.certSq,!0)}getCertNo(){return o(this.witness,this.certSq,!0).toString("hex")}static getKey(t,e){return o(t,e,!0).toString("hex")}static keyInfo(t){"string"==typeof t&&(t=Buffer.from(t,"hex"));var[t,e,r]=c(t);return r?{witness:t,certSq:e}:null}getSignObjSize(t){var e=0;return(e+=n.sizeVarString(t.oper,"utf8"))+n.sizeVarString(t.witness,"utf8")+4+8+n.sizeVarString(t.cert,"utf8")}toWriter(t,e){return e.writeVarString(t.oper,"utf8"),e.writeVarString(t.witness,"utf8"),e.writeU32(t.certSq),e.writeU64(t.activeTime),e.writeVarString(t.cert,"utf8"),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getSignObjSize(t))).render())}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new h).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}u.X509Cert=h,t.exports=u},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6),{SX:o,SXX:c}=r(94);class u extends i{constructor(t){super(),this.db=t||{setX509Abolish:()=>{},delX509Abolish:()=>{},loadX509AbolishList:()=>{}}}async loadHistory(){var t,e;for(t of(this.clear(),await this.db.loadX509AbolishList()))this.set(t.getCertNo(),t),t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.getCertNo(),t))}setAccount(t,e,r){var i;t&&t.wid&&t.account&&(i=t.wid+"."+t.account,this.account.get(i)&&this.account.get(i).delete(t.getCertNo())),erItem.wid=e,erItem.account=r,e&&r&&(i=erItem.wid+"."+erItem.account,this.account.get(i)||this.account.set(i,new Map),this.account.get(i).set(t.getCertNo(),erItem))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.getCertNo()))}getX509(t,e){return t=o(t,e,!1).toString("hex"),this.get(t)}async setX509Abolish(t,e){t=new h(t),await this.db.setX509Abolish(t,e),this.set(t.getCertNo(),t)}async delX509Abolish(t,e){await this.db.delX509Abolish(t),this.delete(t.getCertNo())}}class h{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"x509Abolish",this.witness=t.witness||"",this.certSq=t.certSq,this.activeTime=t.activeTime,this.signature=t.signature||"",this.wid=t.wid||0,this.account=t.account||""}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}toOptions(t=!1){let e={};return e.oper=this.oper||"x509Issue",e.witness=this.witness||"",e.certSq=this.certSq,e.activeTime=this.activeTime,t&&(e.signature=this.signature||"",e.wid=this.wid||0,e.account=this.account||""),e}get certNo(){return o(this.witness,this.certSq,!1)}getCertNo(){return o(this.witness,this.certSq,!1).toString("hex")}static getKey(t,e){return o(t,e,!1).toString("hex")}static keyInfo(t){"string"==typeof t&&(t=Buffer.from(t,"hex"));var[t,e,r]=c(t);return r?null:{witness:t,certSq:e}}getSignObjSize(t){var e=0;return(e+=n.sizeVarString(t.oper,"utf8"))+n.sizeVarString(t.witness,"utf8")+4+8}toWriter(t,e){return e.writeVarString(t.oper,"utf8"),e.writeVarString(t.witness,"utf8"),e.writeU32(t.certSq),e.writeU64(t.activeTime),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getSignObjSize(t))).render())}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new h).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}u.X509Abolish=h,t.exports=u},function(t,e,r){"use strict";
|
|
389
|
+
*/const i=r(28),s=r(238).derive,n=r(317),a=r(121);r(59),r(22);var{}=r(5);const o=e;o.execute=function(t){try{return o.handle(t)}catch(t){return new a.ErrorResultPacket(t)}},o.handle=function(t){return t.jobsHandle(o)},o.check=function(t,e,r,i){try{t.check(e,r,i)}catch(t){if("ScriptError"===t.type)return new a.CheckResultPacket(t);throw t}return new a.CheckResultPacket},o.checkInput=function(t,e,r,i,s){try{t.checkInput(e,r,i,s)}catch(t){if("ScriptError"===t.type)return new a.CheckInputResultPacket(t);throw t}return new a.CheckInputResultPacket},o.sign=function(t,e,r,i){return e=t.sign(e,!0,r,i),a.SignResultPacket.fromTX(t,e)},o.signInput=function(t,e,r,i,s){return r=t.signInput(t,e,r,i,s),a.SignInputResultPacket.fromTX(t,e,r)},o.ecVerify=function(t,e,r){return t=i.verify(t,e,r),new a.ECVerifyResultPacket(t)},o.ecSign=function(t,e){return t=i.sign(t,e),new a.ECSignResultPacket(t)},o.mine=function(t,e,r,i){return t=n(t,e,r,i),new a.MineResultPacket(t)},o.scrypt=function(t,e,r,i,n,o){return t=s(t,e,r,i,n,o),new a.ScryptResultPacket(t)}},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6),o=r(65);class c extends i{constructor(t){super(),this.db=t||{getEr:()=>{},setEr:()=>{},delEr:()=>{}},this.cache=new o(1e4)}async loadHistory(){}async getEr(t){return this.cache.get(t)||this.db.getEr(t)}async setEr(t,e){t=new u(t),await this.db.setEr(t,e),this.cache.set(t.erid,t)}async delEr(t,e){await this.db.delEr(t),this.cache.remove(t.erid)}async query(t){let e=!1,r=null,i=[];for(var s of t)if(s&&Array.isArray(s)){if("erid"==s[0])return{list:[await this.getEr(s[1])],page:0,count:1};"merge"==s[0]?e=s[1]:"pubkey"==s[0]?r=s[1]:i.push(s)}return r?this.db.byPubkey(r,i,e):{list:[],page:0,count:1}}}class u{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"erIssue",this.erid=t.erid,this.witness=t.witness||"",this.validHeight=t.validHeight,this.startHeight=t.startHeight||0,this.signature=t.signature||"",this.source=null,t.source&&(this.source={},this.source.subjectName=t.source.subjectName,this.source.pubkey=t.source.pubkey,this.source.subjectHash=t.source.subjectHash,this.source.cluster=t.source.cluster,this.source.cid=t.source.cid,this.source.uid=t.source.uid),this.wid=t.wid||0,this.account=t.account||""}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}toOptions(t=!1){let e={};return e.oper=this.oper||"erIssue",e.erid=this.erid,e.witness=this.witness||"",e.validHeight=this.validHeight,t&&(e.startHeight=this.startHeight,e.signature=this.signature||""),this.source&&(e.source={},e.source.subjectName=this.source.subjectName,e.source.pubkey=this.source.pubkey,e.source.subjectHash=this.source.subjectHash,e.source.cluster=this.source.cluster||"",e.source.cid=this.source.cid||"",e.source.uid=this.source.uid||0),e}getSignObjSize(t){let e=0;return e=(e=(e=(e+=n.sizeVarString(t.oper,"utf8"))+n.sizeVarString(t.erid,"utf8"))+n.sizeVarString(t.witness,"ascii"))+4+4,t.source?(e=(e=(e=(e+=n.sizeVarString(t.source.subjectName,"utf8"))+n.sizeVarString(t.source.pubkey,"utf8"))+n.sizeVarString(t.source.subjectHash,"utf8"))+n.sizeVarString(t.source.cluster,"utf8"))+n.sizeVarString(t.source.cid,"utf8")+4:e}toWriter(t,e){return e.writeVarString(t.oper,"utf8"),e.writeVarString(t.erid,"utf8"),e.writeVarString(t.witness,"ascii"),e.writeU32(t.validHeight),e.writeU32(t.startHeight),t.source&&(e.writeVarString(t.source.subjectName,"utf8"),e.writeVarString(t.source.pubkey,"utf8"),e.writeVarString(t.source.subjectHash,"utf8"),e.writeVarString(t.source.cluster,"utf8"),e.writeVarString(t.source.cid,"utf8"),e.writeU32(t.source.uid)),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getSignObjSize(t))).render())}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new u).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}c.ErItem=u,t.exports=c},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6);class o extends i{constructor(t){super(),this.db=t||{getErAbolish:()=>{},setErAbolish:()=>{},delErAbolish:()=>{},loadErAbolishList:()=>{}}}async loadHistory(){}async getErAb(t){return this.db.getErAbolish(t)}async setErAb(t,e){t=new c(t),await this.db.setErAbolish(t),this.set(t.erid,t)}async delErAb(t,e){await this.db.delErAbolish(t),this.delete(t.erid)}async query(t){let e=!1;for(var r of t)"cluster"==r[0]&&(e=r[1]);for(var i of t){if("erid"==i[0])return{list:[await this.getErAb(i[1])],page:0,count:1};if("pubkey"==i[0])return this.db.byPubkey(i[1],e)}return{list:[],page:0,count:1}}}class c{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"erAbolish",this.erid=t.erid,this.witness=t.witness||"",this.abolishHeight=t.abolishHeight,this.startHeight=t.startHeight||0,this.signature=t.signature||""}toOptions(t){let e={};return e.oper=this.oper||"erAbolish",e.erid=this.erid,e.witness=this.witness||"",e.abolishHeight=this.abolishHeight,t&&(e.startHeight=this.startHeight,e.signature=this.signature||""),e}getMsgSize(){var t=0;return(t+=n.sizeVarString(this.oper,"utf8"))+n.sizeVarString(this.erid,"utf8")+n.sizeVarString(this.witness,"ascii")+4+4}toWriter(t,e){return e.writeVarString(this.oper,"utf8"),e.writeVarString(this.erid,"utf8"),e.writeVarString(this.witness,"ascii"),e.writeU32(this.abolishHeight),e.writeU32(this.startHeight),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getMsgSize(t))).render())}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}fromReader(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}fromRaw(t){return this.fromReader(t)}static fromRaw(t){return(new c).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}o.ErAbolishItem=c,t.exports=o},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6),{SX:o,SXX:c}=r(94);class u extends i{constructor(t){super(),this.db=t||{setX509Cert:()=>{},delX509Cert:()=>{},loadX509CertList:()=>{}}}async loadHistory(){var t,e;for(t of(this.clear(),await this.db.loadX509CertList()))this.set(t.getCertNo(),t),t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.getCertNo(),t))}setAccount(t,e,r){var i;t&&t.wid&&t.account&&(i=t.wid+"."+t.account,this.account.get(i)&&this.account.get(i).delete(t.getCertNo())),erItem.wid=e,erItem.account=r,e&&r&&(i=erItem.wid+"."+erItem.account,this.account.get(i)||this.account.set(i,new Map),this.account.get(i).set(t.getCertNo(),erItem))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.getCertNo()))}getX509(t,e){return t=o(t,e,!0).toString("hex"),this.get(t)}async setX509Cert(t,e){t=new h(t),await this.db.setX509Cert(t,e),this.set(t.getCertNo(),t)}async delX509Cert(t,e){await this.db.delX509Cert(t),this.delete(t.getCertNo())}}class h{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"x509Issue",this.witness=t.witness||"",this.certSq=t.certSq,this.activeTime=t.activeTime,this.cert=t.cert||"",this.signature=t.signature||"",this.wid=t.wid||0,this.account=t.account||""}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}toOptions(t=!1){let e={};return e.oper=this.oper||"x509Issue",e.witness=this.witness||"",e.certSq=this.certSq,e.activeTime=this.activeTime,e.cert=this.cert,t&&(e.signature=this.signature||"",e.wid=this.wid||0,e.account=this.account||""),e}get certNo(){return o(this.witness,this.certSq,!0)}getCertNo(){return o(this.witness,this.certSq,!0).toString("hex")}static getKey(t,e){return o(t,e,!0).toString("hex")}static keyInfo(t){"string"==typeof t&&(t=Buffer.from(t,"hex"));var[t,e,r]=c(t);return r?{witness:t,certSq:e}:null}getSignObjSize(t){var e=0;return(e+=n.sizeVarString(t.oper,"utf8"))+n.sizeVarString(t.witness,"utf8")+4+8+n.sizeVarString(t.cert,"utf8")}toWriter(t,e){return e.writeVarString(t.oper,"utf8"),e.writeVarString(t.witness,"utf8"),e.writeU32(t.certSq),e.writeU64(t.activeTime),e.writeVarString(t.cert,"utf8"),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getSignObjSize(t))).render())}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new h).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}u.X509Cert=h,t.exports=u},function(t,e,r){var i=r(29);const s=r(4),n=r(3),a=r(6),{SX:o,SXX:c}=r(94);class u extends i{constructor(t){super(),this.db=t||{setX509Abolish:()=>{},delX509Abolish:()=>{},loadX509AbolishList:()=>{}}}async loadHistory(){var t,e;for(t of(this.clear(),await this.db.loadX509AbolishList()))this.set(t.getCertNo(),t),t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.getCertNo(),t))}setAccount(t,e,r){var i;t&&t.wid&&t.account&&(i=t.wid+"."+t.account,this.account.get(i)&&this.account.get(i).delete(t.getCertNo())),erItem.wid=e,erItem.account=r,e&&r&&(i=erItem.wid+"."+erItem.account,this.account.get(i)||this.account.set(i,new Map),this.account.get(i).set(t.getCertNo(),erItem))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.getCertNo()))}getX509(t,e){return t=o(t,e,!1).toString("hex"),this.get(t)}async setX509Abolish(t,e){t=new h(t),await this.db.setX509Abolish(t,e),this.set(t.getCertNo(),t)}async delX509Abolish(t,e){await this.db.delX509Abolish(t),this.delete(t.getCertNo())}}class h{constructor(t){this.fromOptions(t=t||{})}fromOptions(t){this.oper=t.oper||"x509Abolish",this.witness=t.witness||"",this.certSq=t.certSq,this.activeTime=t.activeTime,this.signature=t.signature||"",this.wid=t.wid||0,this.account=t.account||""}toRaw(){return Buffer.from(JSON.stringify(this.toOptions(!0)),"utf-8")}toOptions(t=!1){let e={};return e.oper=this.oper||"x509Issue",e.witness=this.witness||"",e.certSq=this.certSq,e.activeTime=this.activeTime,t&&(e.signature=this.signature||"",e.wid=this.wid||0,e.account=this.account||""),e}get certNo(){return o(this.witness,this.certSq,!1)}getCertNo(){return o(this.witness,this.certSq,!1).toString("hex")}static getKey(t,e){return o(t,e,!1).toString("hex")}static keyInfo(t){"string"==typeof t&&(t=Buffer.from(t,"hex"));var[t,e,r]=c(t);return r?null:{witness:t,certSq:e}}getSignObjSize(t){var e=0;return(e+=n.sizeVarString(t.oper,"utf8"))+n.sizeVarString(t.witness,"utf8")+4+8}toWriter(t,e){return e.writeVarString(t.oper,"utf8"),e.writeVarString(t.witness,"utf8"),e.writeU32(t.certSq),e.writeU64(t.activeTime),e}toHash(){var t=this.toOptions();return a.hash256(this.toWriter(t,new s(this.getSignObjSize(t))).render())}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(t){return(new h).fromRaw(t)}sign(t){this.signature=t.sign(this.toHash()).toString("hex")}verifying(t){return t.verify(this.toHash(),Buffer.from(this.signature,"hex"))}}u.X509Abolish=h,t.exports=u},function(t,e,r){"use strict";
|
|
390
390
|
/*!
|
|
391
391
|
* account.js - account object for vallnet
|
|
392
392
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
393
|
-
*/const i=r(1),s=r(0),n=r(2),a=r(4),o=r(3),c=r(111),u=r(73),h=r(17),l=r(227),p=r(124);class f{constructor(t,e){s(t,"Database is required."),this.db=t,this.network=t.network,this.wallet=null,this.receive=null,this.change=null,this.nested=null,this.wid=0,this.id=null,this.name=null,this.initialized=!1,this.witness=!0===this.db.options.witness,this.watchOnly=!1,this.type=f.types.PUBKEYHASH,this.m=1,this.n=1,this.accountIndex=0,this.receiveDepth=0,this.changeDepth=0,this.nestedDepth=0,this.lookahead=10,this.accountKey=null,this.keys=[],e&&this.fromOptions(e)}fromOptions(t){if(s(t,"Options are required."),s(i.isU32(t.wid)),s(u.isName(t.id),"Bad Wallet ID."),s(p.isHD(t.accountKey),"Account key is required."),s(i.isU32(t.accountIndex),"Account index is required."),this.wid=t.wid,this.id=t.id,null!=t.name&&(s(u.isName(t.name),"Bad account name."),this.name=t.name),null!=t.initialized&&(s("boolean"==typeof t.initialized),this.initialized=t.initialized),null!=t.witness&&(s("boolean"==typeof t.witness),this.witness=t.witness),null!=t.watchOnly&&(s("boolean"==typeof t.watchOnly),this.watchOnly=t.watchOnly),null!=t.type&&("string"==typeof t.type?(this.type=f.types[t.type.toUpperCase()],s(null!=this.type)):(s("number"==typeof t.type),this.type=t.type,s(f.typesByVal[this.type]))),null!=t.m&&(s(i.isU8(t.m)),this.m=t.m),null!=t.n&&(s(i.isU8(t.n)),this.n=t.n),null!=t.accountIndex&&(s(i.isU32(t.accountIndex)),this.accountIndex=t.accountIndex),null!=t.receiveDepth&&(s(i.isU32(t.receiveDepth)),this.receiveDepth=t.receiveDepth),null!=t.changeDepth&&(s(i.isU32(t.changeDepth)),this.changeDepth=t.changeDepth),null!=t.nestedDepth&&(s(i.isU32(t.nestedDepth)),this.nestedDepth=t.nestedDepth),null!=t.lookahead&&(s(i.isU32(t.lookahead)),s(0<=t.lookahead),s(t.lookahead<=f.MAX_LOOKAHEAD),this.lookahead=t.lookahead),this.accountKey=t.accountKey,1<this.n&&(this.type=f.types.MULTISIG),this.name||(this.name=this.accountIndex.toString(10)),this.m<1||this.m>this.n)throw new Error("m ranges between 1 and n");if(t.keys){s(Array.isArray(t.keys));for(const e of t.keys)this.pushKey(e)}return this}static fromOptions(t,e){return new f(t).fromOptions(e)}async init(){this.keys.length!==this.n-1?(s(!this.initialized),this._save()):(s(0===this.receiveDepth),s(0===this.changeDepth),s(0===this.nestedDepth),this.initialized=!0,await this.initDepth())}open(){return this.initialized&&!this.receive&&(this.receive=this.deriveReceive(this.receiveDepth-1),this.change=this.deriveChange(this.changeDepth-1),this.witness&&(this.nested=this.deriveNested(this.nestedDepth-1))),Promise.resolve()}pushKey(t){if("string"==typeof t&&(t=p.PublicKey.fromBase58(t,this.network)),s(t.network===this.network,"Network mismatch for account key."),!p.isPublic(t))throw new Error("Must add HD keys to wallet.");if(!t.isAccount())throw new Error("Must add HD account keys to BIP44 wallet.");if(this.type!==f.types.MULTISIG)throw new Error("Cannot add keys to non-multisig wallet.");if(t.equals(this.accountKey))throw new Error("Cannot add own key.");if(-1===i.binaryInsert(this.keys,t,d,!0))return!1;if(this.keys.length>this.n-1)throw i.binaryRemove(this.keys,t,d),new Error("Cannot add more keys.");return!0}spliceKey(t){if("string"==typeof t&&(t=p.PublicKey.fromBase58(t,this.network)),s(t.network===this.network,"Network mismatch for account key."),!p.isPublic(t))throw new Error("Must add HD keys to wallet.");if(!t.isAccount())throw new Error("Must add HD account keys to BIP44 wallet.");if(this.type!==f.types.MULTISIG)throw new Error("Cannot remove keys from non-multisig wallet.");if(this.keys.length===this.n-1)throw new Error("Cannot remove key.");return i.binaryRemove(this.keys,t,d)}async addSharedKey(t){var e=this.pushKey(t);if(await this.hasDuplicate())throw this.spliceKey(t),new Error("Cannot add a key from another account.");return await this.init(),e}hasDuplicate(){if(this.keys.length!==this.n-1)return!1;var t=this.deriveReceive(0).getScriptHash("hex");return this.wallet.hasAddress(t)}removeSharedKey(t){return!!this.spliceKey(t)&&(this._save(),!0)}createReceive(){return this.createKey(0)}createChange(){return this.createKey(1)}createNested(){return this.createKey(2)}async createKey(t,e=0,r=null){let i,s;if(0<(e=(0|e)>>>0))i=this.deriveKey(9,e,r),await this.saveKey(i);else switch(t){case 0:i=this.deriveReceive(this.receiveDepth,r),s=this.deriveReceive(this.receiveDepth+this.lookahead,r),this.receiveDepth++,await this.saveKey(s),this.receive=i;break;case 1:i=this.deriveChange(this.changeDepth,r),s=this.deriveChange(this.changeDepth+this.lookahead,r),this.changeDepth++,await this.saveKey(s),this.change=i;break;case 2:i=this.deriveNested(this.nestedDepth,r),s=this.deriveNested(this.nestedDepth+this.lookahead,r),this.nestedDepth++,await this.saveKey(s),this.nested=i;break;default:throw new Error(`Bad branch: ${t}.`)}return this._save(),i}deriveReceive(t,e){return this.deriveKey(0,t,e)}deriveChange(t,e){return this.deriveKey(1,t,e)}deriveNested(t,e){if(this.witness)return this.deriveKey(2,t,e);throw new Error("Cannot derive nested on non-witness account.")}derivePath(t,e){switch(t.keyType){case c.types.HD:return this.deriveKey(t.branch,t.index,e);case c.types.KEY:{s(this.type===f.types.PUBKEYHASH);let r=t.data;return t.encrypted&&!(r=e.decipher(r,t.hash))?null:l.fromImport(this,r)}case c.types.ADDRESS:return null;default:throw new Error("Bad key type.")}}deriveKey(t,e,r){s("number"==typeof t);const i=[];let n;n=(r&&r.key&&!this.watchOnly?n=r.key.deriveAccount(44,this.accountIndex):this.accountKey).derive(t).derive(e);const a=l.fromHD(this,n,t,e);switch(this.type){case f.types.PUBKEYHASH:break;case f.types.MULTISIG:i.push(n.publicKey);for(const r of this.keys){const s=r.derive(t).derive(e);i.push(s.publicKey)}a.script=h.createScript([this.m,this.n,i],h.types.MULTISIG)}return a}async save(){this.wallet.start(),this.db.saveAccount(this),await this.wallet.commit()}_save(){return this.db.saveAccount(this)}saveKey(t){return this.db.saveKey(this.wallet,t)}savePath(t){return this.db.savePath(this.wallet,t)}async initDepth(){this.receive=this.deriveReceive(0),this.receiveDepth=1,await this.saveKey(this.receive);for(let e=0;e<this.lookahead;e++){var t=this.deriveReceive(e+1);await this.saveKey(t)}this.change=this.deriveChange(0),this.changeDepth=1,await this.saveKey(this.change);for(let t=0;t<this.lookahead;t++){var e=this.deriveChange(t+1);await this.saveKey(e)}if(this.witness){this.nested=this.deriveNested(0),this.nestedDepth=1,await this.saveKey(this.nested);for(let t=0;t<this.lookahead;t++){var r=this.deriveNested(t+1);await this.saveKey(r)}}this._save()}async syncDepth(t,e,r){let i=!1,s=null;if(t>this.receiveDepth){var n=this.receiveDepth+this.lookahead;if(t<=n+1){for(let e=n;e<t+this.lookahead;e++){var a=this.deriveReceive(e);await this.saveKey(a)}this.receive=this.deriveReceive(t-1),this.receiveDepth=t,i=!0,s=this.receive}}if(e>this.changeDepth&&e<=(n=this.changeDepth+this.lookahead)+1){for(let t=n;t<e+this.lookahead;t++){var o=this.deriveChange(t);await this.saveKey(o)}this.change=this.deriveChange(e-1),this.changeDepth=e,i=!0}if(this.witness&&r>this.nestedDepth&&r<=(n=this.nestedDepth+this.lookahead)+1){for(let t=n;t<r+this.lookahead;t++){var c=this.deriveNested(t);await this.saveKey(c)}this.nested=this.deriveNested(r-1),this.nestedDepth=r,i=!0,s=this.nested}return i&&this._save(),s}async setLookahead(t){if(t===this.lookahead)this.db.logger.warning("Lookahead is not changing for: %s/%s.",this.id,this.name);else{if(t<this.lookahead)e=this.lookahead-t,this.receiveDepth+=e,this.receive=this.deriveReceive(this.receiveDepth-1),this.changeDepth+=e,this.change=this.deriveChange(this.changeDepth-1),this.witness&&(this.nestedDepth+=e,this.nested=this.deriveNested(this.nestedDepth-1));else{var e=this.receiveDepth+this.lookahead,r=this.receiveDepth+t;for(let t=e;t<r;t++){var i=this.deriveReceive(t);await this.saveKey(i)}e=this.changeDepth+this.lookahead;var s=this.changeDepth+t;for(let t=e;t<s;t++){var n=this.deriveChange(t);await this.saveKey(n)}if(this.witness){e=this.nestedDepth+this.lookahead;var a=this.nestedDepth+t;for(let t=e;t<a;t++){var o=this.deriveNested(t);await this.saveKey(o)}}}this.lookahead=t,this._save()}}getAddress(t){return this.getReceive(t)}getReceive(t){return this.receive?this.receive.getAddress(t):null}getChange(t){return this.change?this.change.getAddress(t):null}getNested(t){return this.nested?this.nested.getAddress(t):null}inspect(){return{wid:this.wid,name:this.name,network:this.network,initialized:this.initialized,witness:this.witness,watchOnly:this.watchOnly,type:f.typesByVal[this.type].toLowerCase(),m:this.m,n:this.n,accountIndex:this.accountIndex,receiveDepth:this.receiveDepth,changeDepth:this.changeDepth,nestedDepth:this.nestedDepth,lookahead:this.lookahead,address:this.initialized?this.receive.getAddress():null,nestedAddress:this.initialized&&this.nested?this.nested.getAddress():null,accountKey:this.accountKey.toBase58(),keys:this.keys.map(t=>t.toBase58())}}toJSON(t){return{wid:t?void 0:this.wid,id:t?void 0:this.id,name:this.name,initialized:this.initialized,witness:this.witness,watchOnly:this.watchOnly,type:f.typesByVal[this.type].toLowerCase(),m:this.m,n:this.n,accountIndex:this.accountIndex,receiveDepth:this.receiveDepth,changeDepth:this.changeDepth,nestedDepth:this.nestedDepth,lookahead:this.lookahead,receiveAddress:this.receive?this.receive.getAddress("string"):null,nestedAddress:this.nested?this.nested.getAddress("string"):null,changeAddress:this.change?this.change.getAddress("string"):null,accountKey:this.accountKey.toBase58(),keys:this.keys.map(t=>t.toBase58())}}getSize(){var t=0;return(t+=o.sizeVarString(this.name,"ascii"))+105+82*this.keys.length}toRaw(){var t=this.getSize();const e=new a(t);e.writeVarString(this.name,"ascii"),e.writeU8(this.initialized?1:0),e.writeU8(this.witness?1:0),e.writeU8(this.type),e.writeU8(this.m),e.writeU8(this.n),e.writeU32(this.accountIndex),e.writeU32(this.receiveDepth),e.writeU32(this.changeDepth),e.writeU32(this.nestedDepth),e.writeU8(this.lookahead),e.writeBytes(this.accountKey.toRaw()),e.writeU8(this.keys.length);for(const t of this.keys)e.writeBytes(t.toRaw());return e.render()}fromRaw(t){const e=new n(t);this.name=e.readVarString("ascii"),this.initialized=1===e.readU8(),this.witness=1===e.readU8(),this.type=e.readU8(),this.m=e.readU8(),this.n=e.readU8(),this.accountIndex=e.readU32(),this.receiveDepth=e.readU32(),this.changeDepth=e.readU32(),this.nestedDepth=e.readU32(),this.lookahead=e.readU8(),this.accountKey=p.PublicKey.fromRaw(e.readBytes(82)),s(f.typesByVal[this.type]);var r=e.readU8();for(let t=0;t<r;t++){var i=p.PublicKey.fromRaw(e.readBytes(82));this.pushKey(i)}return this}static fromRaw(t,e){return new f(t).fromRaw(e)}static isAccount(t){return t instanceof f}}function d(t,e){return t.compare(e)}f.types={PUBKEYHASH:0,MULTISIG:1},f.typesByVal={0:"pubkeyhash",1:"multisig"},f.MAX_LOOKAHEAD=40,t.exports=f},function(t,e,r){"use strict";
|
|
393
|
+
*/const i=r(1),s=r(0),n=r(2),a=r(4),o=r(3),c=r(111),u=r(73),h=r(17),l=r(227),p=r(124);class f{constructor(t,e){s(t,"Database is required."),this.db=t,this.network=t.network,this.wallet=null,this.receive=null,this.change=null,this.nested=null,this.wid=0,this.id=null,this.name=null,this.accountIndex=0,this.initialized=!1,this.witness=!0===this.db.options.witness,this.watchOnly=!1,this.type=f.types.PUBKEYHASH,this.m=1,this.n=1,this.receiveDepth=0,this.changeDepth=0,this.nestedDepth=0,this.lookahead=10,this.accountKey=null,this.keys=[],e&&this.fromOptions(e)}fromOptions(t){if(s(t,"Options are required."),s(i.isU32(t.wid)),s(u.isName(t.id),"Bad Wallet ID."),s(p.isHD(t.accountKey),"Account key is required."),s(i.isU32(t.accountIndex),"Account index is required."),this.wid=t.wid,this.id=t.id,null!=t.name&&(s(u.isName(t.name),"Bad account name."),this.name=t.name),null!=t.initialized&&(s("boolean"==typeof t.initialized),this.initialized=t.initialized),null!=t.witness&&(s("boolean"==typeof t.witness),this.witness=t.witness),null!=t.watchOnly&&(s("boolean"==typeof t.watchOnly),this.watchOnly=t.watchOnly),null!=t.type&&("string"==typeof t.type?(this.type=f.types[t.type.toUpperCase()],s(null!=this.type)):(s("number"==typeof t.type),this.type=t.type,s(f.typesByVal[this.type]))),null!=t.m&&(s(i.isU8(t.m)),this.m=t.m),null!=t.n&&(s(i.isU8(t.n)),this.n=t.n),null!=t.accountIndex&&(s(i.isU32(t.accountIndex)),this.accountIndex=t.accountIndex),null!=t.receiveDepth&&(s(i.isU32(t.receiveDepth)),this.receiveDepth=t.receiveDepth),null!=t.changeDepth&&(s(i.isU32(t.changeDepth)),this.changeDepth=t.changeDepth),null!=t.nestedDepth&&(s(i.isU32(t.nestedDepth)),this.nestedDepth=t.nestedDepth),null!=t.lookahead&&(s(i.isU32(t.lookahead)),s(0<=t.lookahead),s(t.lookahead<=f.MAX_LOOKAHEAD),this.lookahead=t.lookahead),this.accountKey=t.accountKey,1<this.n&&(this.type=f.types.MULTISIG),this.name||(this.name=this.accountIndex.toString(10)),this.m<1||this.m>this.n)throw new Error("m ranges between 1 and n");if(t.keys){s(Array.isArray(t.keys));for(const e of t.keys)this.pushKey(e)}return this}static fromOptions(t,e){return new f(t).fromOptions(e)}async init(){this.keys.length!==this.n-1?(s(!this.initialized),this._save()):(s(0===this.receiveDepth),s(0===this.changeDepth),s(0===this.nestedDepth),this.initialized=!0,await this.initDepth())}open(){return this.initialized&&!this.receive&&(this.receive=this.deriveReceive(this.receiveDepth-1),this.change=this.deriveChange(this.changeDepth-1),this.witness&&(this.nested=this.deriveNested(this.nestedDepth-1))),Promise.resolve()}pushKey(t){if("string"==typeof t&&(t=p.PublicKey.fromBase58(t,this.network)),s(t.network===this.network,"Network mismatch for account key."),!p.isPublic(t))throw new Error("Must add HD keys to wallet.");if(!t.isAccount())throw new Error("Must add HD account keys to BIP44 wallet.");if(this.type!==f.types.MULTISIG)throw new Error("Cannot add keys to non-multisig wallet.");if(t.equals(this.accountKey))throw new Error("Cannot add own key.");if(-1===i.binaryInsert(this.keys,t,d,!0))return!1;if(this.keys.length>this.n-1)throw i.binaryRemove(this.keys,t,d),new Error("Cannot add more keys.");return!0}spliceKey(t){if("string"==typeof t&&(t=p.PublicKey.fromBase58(t,this.network)),s(t.network===this.network,"Network mismatch for account key."),!p.isPublic(t))throw new Error("Must add HD keys to wallet.");if(!t.isAccount())throw new Error("Must add HD account keys to BIP44 wallet.");if(this.type!==f.types.MULTISIG)throw new Error("Cannot remove keys from non-multisig wallet.");if(this.keys.length===this.n-1)throw new Error("Cannot remove key.");return i.binaryRemove(this.keys,t,d)}async addSharedKey(t){var e=this.pushKey(t);if(await this.hasDuplicate())throw this.spliceKey(t),new Error("Cannot add a key from another account.");return await this.init(),e}hasDuplicate(){if(this.keys.length!==this.n-1)return!1;var t=this.deriveReceive(0).getScriptHash("hex");return this.wallet.hasAddress(t)}removeSharedKey(t){return!!this.spliceKey(t)&&(this._save(),!0)}createReceive(){return this.createKey(0)}createChange(){return this.createKey(1)}createNested(){return this.createKey(2)}async createKey(t,e=0,r=null){let i,s;if(0<(e=(0|e)>>>0))i=this.deriveKey(9,e,r),await this.saveKey(i);else switch(t){case 0:i=this.deriveReceive(this.receiveDepth,r),s=this.deriveReceive(this.receiveDepth+this.lookahead,r),this.receiveDepth++,await this.saveKey(s),this.receive=i;break;case 1:i=this.deriveChange(this.changeDepth,r),s=this.deriveChange(this.changeDepth+this.lookahead,r),this.changeDepth++,await this.saveKey(s),this.change=i;break;case 2:i=this.deriveNested(this.nestedDepth,r),s=this.deriveNested(this.nestedDepth+this.lookahead,r),this.nestedDepth++,await this.saveKey(s),this.nested=i;break;default:throw new Error(`Bad branch: ${t}.`)}return this._save(),i}deriveReceive(t,e){return this.deriveKey(0,t,e)}deriveChange(t,e){return this.deriveKey(1,t,e)}deriveNested(t,e){if(this.witness)return this.deriveKey(2,t,e);throw new Error("Cannot derive nested on non-witness account.")}derivePath(t,e){switch(t.keyType){case c.types.HD:return this.deriveKey(t.branch,t.index,e);case c.types.KEY:{s(this.type===f.types.PUBKEYHASH);let r=t.data;return t.encrypted&&!(r=e.decipher(r,t.hash))?null:l.fromImport(this,r)}case c.types.ADDRESS:return null;default:throw new Error("Bad key type.")}}deriveKey(t,e,r){s("number"==typeof t);const i=[];let n;n=(r&&r.key&&!this.watchOnly?n=r.key.deriveAccount(44,this.accountIndex):this.accountKey).derive(t).derive(e);const a=l.fromHD(this,n,t,e);switch(this.type){case f.types.PUBKEYHASH:break;case f.types.MULTISIG:i.push(n.publicKey);for(const r of this.keys){const s=r.derive(t).derive(e);i.push(s.publicKey)}a.script=h.createScript([this.m,this.n,i],h.types.MULTISIG)}return a}async save(){this.wallet.start(),this.db.saveAccount(this),await this.wallet.commit()}_save(){return this.db.saveAccount(this)}saveKey(t){return this.db.saveKey(this.wallet,t)}savePath(t){return this.db.savePath(this.wallet,t)}async initDepth(){this.receive=this.deriveReceive(0),this.receiveDepth=1,await this.saveKey(this.receive);for(let e=0;e<this.lookahead;e++){var t=this.deriveReceive(e+1);await this.saveKey(t)}this.change=this.deriveChange(0),this.changeDepth=1,await this.saveKey(this.change);for(let t=0;t<this.lookahead;t++){var e=this.deriveChange(t+1);await this.saveKey(e)}if(this.witness){this.nested=this.deriveNested(0),this.nestedDepth=1,await this.saveKey(this.nested);for(let t=0;t<this.lookahead;t++){var r=this.deriveNested(t+1);await this.saveKey(r)}}this._save()}async syncDepth(t,e,r){let i=!1,s=null;if(t>this.receiveDepth){var n=this.receiveDepth+this.lookahead;if(t<=n+1){for(let e=n;e<t+this.lookahead;e++){var a=this.deriveReceive(e);await this.saveKey(a)}this.receive=this.deriveReceive(t-1),this.receiveDepth=t,i=!0,s=this.receive}}if(e>this.changeDepth&&e<=(n=this.changeDepth+this.lookahead)+1){for(let t=n;t<e+this.lookahead;t++){var o=this.deriveChange(t);await this.saveKey(o)}this.change=this.deriveChange(e-1),this.changeDepth=e,i=!0}if(this.witness&&r>this.nestedDepth&&r<=(n=this.nestedDepth+this.lookahead)+1){for(let t=n;t<r+this.lookahead;t++){var c=this.deriveNested(t);await this.saveKey(c)}this.nested=this.deriveNested(r-1),this.nestedDepth=r,i=!0,s=this.nested}return i&&this._save(),s}async setLookahead(t){if(t===this.lookahead)this.db.logger.warning("Lookahead is not changing for: %s/%s.",this.id,this.name);else{if(t<this.lookahead)e=this.lookahead-t,this.receiveDepth+=e,this.receive=this.deriveReceive(this.receiveDepth-1),this.changeDepth+=e,this.change=this.deriveChange(this.changeDepth-1),this.witness&&(this.nestedDepth+=e,this.nested=this.deriveNested(this.nestedDepth-1));else{var e=this.receiveDepth+this.lookahead,r=this.receiveDepth+t;for(let t=e;t<r;t++){var i=this.deriveReceive(t);await this.saveKey(i)}e=this.changeDepth+this.lookahead;var s=this.changeDepth+t;for(let t=e;t<s;t++){var n=this.deriveChange(t);await this.saveKey(n)}if(this.witness){e=this.nestedDepth+this.lookahead;var a=this.nestedDepth+t;for(let t=e;t<a;t++){var o=this.deriveNested(t);await this.saveKey(o)}}}this.lookahead=t,this._save()}}getAddress(t){return this.getReceive(t)}getReceive(t){return this.receive?this.receive.getAddress(t):null}getChange(t){return this.change?this.change.getAddress(t):null}getNested(t){return this.nested?this.nested.getAddress(t):null}inspect(){return{wid:this.wid,name:this.name,network:this.network,initialized:this.initialized,witness:this.witness,watchOnly:this.watchOnly,type:f.typesByVal[this.type].toLowerCase(),m:this.m,n:this.n,accountIndex:this.accountIndex,receiveDepth:this.receiveDepth,changeDepth:this.changeDepth,nestedDepth:this.nestedDepth,lookahead:this.lookahead,address:this.initialized?this.receive.getAddress():null,nestedAddress:this.initialized&&this.nested?this.nested.getAddress():null,accountKey:this.accountKey.toBase58(),keys:this.keys.map(t=>t.toBase58())}}toJSON(t){return{wid:t?void 0:this.wid,id:t?void 0:this.id,name:this.name,initialized:this.initialized,witness:this.witness,watchOnly:this.watchOnly,type:f.typesByVal[this.type].toLowerCase(),m:this.m,n:this.n,accountIndex:this.accountIndex,receiveDepth:this.receiveDepth,changeDepth:this.changeDepth,nestedDepth:this.nestedDepth,lookahead:this.lookahead,receiveAddress:this.receive?this.receive.getAddress("string"):null,nestedAddress:this.nested?this.nested.getAddress("string"):null,changeAddress:this.change?this.change.getAddress("string"):null,accountKey:this.accountKey.toBase58(),keys:this.keys.map(t=>t.toBase58())}}getSize(){var t=0;return(t+=o.sizeVarString(this.name,"ascii"))+105+82*this.keys.length}toRaw(){var t=this.getSize();const e=new a(t);e.writeVarString(this.name,"ascii"),e.writeU8(this.initialized?1:0),e.writeU8(this.witness?1:0),e.writeU8(this.type),e.writeU8(this.m),e.writeU8(this.n),e.writeU32(this.accountIndex),e.writeU32(this.receiveDepth),e.writeU32(this.changeDepth),e.writeU32(this.nestedDepth),e.writeU8(this.lookahead),e.writeBytes(this.accountKey.toRaw()),e.writeU8(this.keys.length);for(const t of this.keys)e.writeBytes(t.toRaw());return e.render()}fromRaw(t){const e=new n(t);this.name=e.readVarString("ascii"),this.initialized=1===e.readU8(),this.witness=1===e.readU8(),this.type=e.readU8(),this.m=e.readU8(),this.n=e.readU8(),this.accountIndex=e.readU32(),this.receiveDepth=e.readU32(),this.changeDepth=e.readU32(),this.nestedDepth=e.readU32(),this.lookahead=e.readU8(),this.accountKey=p.PublicKey.fromRaw(e.readBytes(82)),s(f.typesByVal[this.type]);var r=e.readU8();for(let t=0;t<r;t++){var i=p.PublicKey.fromRaw(e.readBytes(82));this.pushKey(i)}return this}static fromRaw(t,e){return new f(t).fromRaw(e)}static isAccount(t){return t instanceof f}}function d(t,e){return t.compare(e)}f.types={PUBKEYHASH:0,MULTISIG:1},f.typesByVal={0:"pubkeyhash",1:"multisig"},f.MAX_LOOKAHEAD=40,t.exports=f},function(t,e,r){"use strict";
|
|
394
394
|
/*!
|
|
395
395
|
* ccmp.js - constant-time compare for vallnet
|
|
396
396
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -408,7 +408,7 @@ function i(t){let e=null;var r=i.list[t.contract.options.type];return r?new(e=r.
|
|
|
408
408
|
/*!
|
|
409
409
|
* opcode.js - opcode object for vallnet
|
|
410
410
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
411
|
-
*/const i=r(0),s=r(101),n=r(1),a=r(22),o=r(2),c=r(4),u=a.opcodes,h=[];let l=null;class p{constructor(t,e){this.value=t||0,this.data=e||null}isMinimal(){if(this.data){if(1===this.data.length){if(129===this.data[0])return!1;if(1<=this.data[0]&&this.data[0]<=16)return!1}if(this.data.length<=75)return this.value===this.data.length;if(this.data.length<=255)return this.value===u.OP_PUSHDATA1;if(this.data.length<=65535)return this.value===u.OP_PUSHDATA2;i(this.value===u.OP_PUSHDATA4)}return!0}isDisabled(){switch(this.value){case u.OP_CAT:case u.OP_SUBSTR:case u.OP_LEFT:case u.OP_RIGHT:case u.OP_INVERT:case u.OP_AND:case u.OP_OR:case u.OP_XOR:case u.OP_2MUL:case u.OP_2DIV:case u.OP_MUL:case u.OP_DIV:case u.OP_MOD:case u.OP_LSHIFT:case u.OP_RSHIFT:return!0}return!1}isBranch(){return this.value>=u.OP_IF&&this.value<=u.OP_ENDIF}equals(t){return i(p.isOpcode(t)),this.value===t.value&&(this.data?(i(t.data),this.data.equals(t.data)):(i(!t.data),!0))}toOp(){return this.value}toData(){return this.data}toLength(){return this.data?this.data.length:-1}toPush(){return this.value===u.OP_0?a.small[1]:this.value===u.OP_1NEGATE?a.small[0]:this.value>=u.OP_1&&this.value<=u.OP_16?a.small[this.value-80+1]:this.toData()}toString(t){const e=this.toPush();return e?e.toString(t||"utf8"):null}toSmall(){return this.value===u.OP_0?0:this.value>=u.OP_1&&this.value<=u.OP_16?this.value-80:-1}toNum(t,e){return this.value===u.OP_0?s.fromInt(0):this.value===u.OP_1NEGATE?s.fromInt(-1):this.value>=u.OP_1&&this.value<=u.OP_16?s.fromInt(this.value-80):this.data?s.decode(this.data,t,e):null}toInt(t,e){const r=this.toNum(t,e);return r?r.getInt():-1}toBool(){var t=this.toSmall();return-1!==t&&1===t}toSymbol(){return-1===this.value?"OP_INVALIDOPCODE":a.opcodesByVal[this.value]||"0x"+n.hex8(this.value)}getSize(){if(!this.data)return 1;switch(this.value){case u.OP_PUSHDATA1:return 2+this.data.length;case u.OP_PUSHDATA2:return 3+this.data.length;case u.OP_PUSHDATA4:return 5+this.data.length;default:return 1+this.data.length}}toWriter(t){if(-1===this.value)throw new Error("Cannot reserialize a parse error.");if(this.data)switch(this.value){case u.OP_PUSHDATA1:t.writeU8(this.value),t.writeU8(this.data.length),t.writeBytes(this.data);break;case u.OP_PUSHDATA2:t.writeU8(this.value),t.writeU16(this.data.length),t.writeBytes(this.data);break;case u.OP_PUSHDATA4:t.writeU8(this.value),t.writeU32(this.data.length),t.writeBytes(this.data);break;default:i(this.value===this.data.length),t.writeU8(this.value),t.writeBytes(this.data)}else t.writeU8(this.value);return t}toRaw(){var t=this.getSize();return this.toWriter(new c(t)).render()}toFormat(){if(-1===this.value)return"0x01";if(this.data){if(this.data.length<=4){const t=this.toNum();if(this.equals(p.fromNum(t)))return t.toString(10)}const e=a.opcodesByVal[this.value];var t=this.data.toString("hex");if(!e)return`0x${n.hex8(this.value)} 0x`+t;let r=this.data.length.toString(16);if(r.length%2!=0&&(r="0"+r),r=n.revHex(r),this.data.length<=75)return`${e} 0x${r} 0x`+t;if(this.data.length<=255)return`${e} 0x4c 0x${r} 0x`+t;if(this.data.length<=65535)return`${e} 0x4d 0x${r} 0x`+t;if(this.data.length<=4294967295)return`${e} 0x4e 0x${r} 0x`+t}return a.opcodesByVal[this.value]||"0x"+n.hex8(this.value)}toASM(t){return-1===this.value?"[error]":this.data?a.toASM(this.data,t):a.opcodesByVal[this.value]||"OP_UNKNOWN"}static fromOp(t){return i("number"==typeof t),t=h[t],i(t,"Bad opcode."),t}static fromData(t){if(i(Buffer.isBuffer(t)),1===t.length){if(129===t[0])return p.fromOp(u.OP_1NEGATE);if(1<=t[0]&&t[0]<=16)return p.fromOp(t[0]+80)}return p.fromPush(t)}static fromPush(t){if(i(Buffer.isBuffer(t)),0===t.length)return p.fromOp(u.OP_0);if(t.length<=75)return new p(t.length,t);if(t.length<=255)return new p(u.OP_PUSHDATA1,t);if(t.length<=65535)return new p(u.OP_PUSHDATA2,t);if(t.length<=4294967295)return new p(u.OP_PUSHDATA4,t);throw new Error("Pushdata size too large.")}static fromString(t,e){return i("string"==typeof t),t=Buffer.from(t,e||"utf8"),p.fromData(t)}static fromSmall(t){return i(n.isU8(t)&&0<=t&&t<=16),p.fromOp(0===t?0:t+80)}static fromNum(t){return i(s.isScriptNum(t)),p.fromData(t.encode())}static fromInt(t){return i(n.isInt(t)),0===t?p.fromOp(u.OP_0):-1===t?p.fromOp(u.OP_1NEGATE):1<=t&&t<=16?p.fromOp(t+80):p.fromNum(s.fromNumber(t))}static fromBool(t){return i("boolean"==typeof t),p.fromSmall(t?1:0)}static fromSymbol(t){i("string"==typeof t),i(0<t.length),n.isUpperCase(t)||(t=t.toUpperCase()),n.startsWith(t,"OP_")||(t="OP_"+t);var e=a.opcodes[t];return null!=e||(i(n.startsWith(t,"OP_0X"),"Unknown opcode."),i(7===t.length,"Unknown opcode."),e=parseInt(t.substring(5),16),i(n.isU8(e),"Unknown opcode.")),p.fromOp(e)}static fromReader(t){var e,r=t.readU8(),i=h[r];if(i)return i;switch(r){case u.OP_PUSHDATA1:return t.left()<1?l:(e=t.readU8(),t.left()<e?(t.seek(t.left()),l):(e=t.readBytes(e),new p(r,e)));case u.OP_PUSHDATA2:return t.left()<2?(t.seek(t.left()),l):(e=t.readU16(),t.left()<e?(t.seek(t.left()),l):(e=t.readBytes(e),new p(r,e)));case u.OP_PUSHDATA4:return t.left()<4?(t.seek(t.left()),l):(e=t.readU32(),t.left()<e?(t.seek(t.left()),l):(e=t.readBytes(e),new p(r,e)));default:return t.left()<r?(t.seek(t.left()),l):(e=t.readBytes(r),new p(r,e))}}static fromRaw(t){return p.fromReader(new o(t))}static isOpcode(t){return t instanceof p}}l=Object.freeze(new p(-1));for(let t=0;t<=255;t++){var f;1<=t&&t<=78?h.push(null):(f=new p(t),h.push(Object.freeze(f)))}t.exports=p},function(t,e,r){const i=r(5).ContractStatus;t.exports=class extends class{constructor(t){this.period=t.period}run(t){var e=this.getResult();if(e&&Array.isArray(e)&&e.length<=10)for(var r of e)t.pushInt(r)}getResult(){return[]}}{constructor(t,e){super(t),this.type=t.type,this.addr=t.addr,this.dst=t.dst,this.status=e}getResult(){return this.status===i.Expired||this.status===i.Backed?[1,2]:this.status===i.Confirmed||this.status===i.Exchanged?[2,1]:[]}}},function(t,e,r){"use strict";const i=r(0),s=r(336),n=r(337);function a(t){var e=(r=a.getBackend(t)).backend,r=r.location;return new s(e,r,t)}a.getName=function(t){let e,r;switch(t=t||"memory"){case"ldb":case"leveldb":case"leveldown":e="leveldown",r="ldb";break;case"rdb":case"rocksdb":case"rocksdown":e="rocksdown",r="rdb";break;case"mdb":case"lmdb":e="lmdb",r="mdb";break;case"mem":case"memory":case"rbt":e="memory",r="mem";break;default:e=t,r="db"}return[e,r]},a.getBackend=function(t){var[e,r]=a.getName(t.db),s=n.get(e);let o=t.location;return"string"!=typeof o&&(i("memory"===e,"Location required."),o="memory"),{backend:s,location:o+"."+r}},t.exports=a},function(t,e,r){"use strict";e.AbstractLevelDOWN=r(412),e.AbstractIterator=r(264),e.AbstractChainedBatch=r(265)},function(t,e,r){"use strict";t.exports=process.nextTick},function(t,e,r){t.exports=r(417)(__dirname)},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,r){"use strict";function i(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===c.call(t)}function s(t){if(t&&"[object Object]"===c.call(t)){var e,r=o.call(t,"constructor"),i=t.constructor&&t.constructor.prototype&&o.call(t.constructor.prototype,"isPrototypeOf");if(!t.constructor||r||i){for(e in t);return void 0===e||o.call(t,e)}}}function n(t,e){u&&"__proto__"===e.name?u(t,e.name,{enumerable:!0,configurable:!0,value:e.newValue,writable:!0}):t[e.name]=e.newValue}function a(t,e){if("__proto__"===e){if(!o.call(t,e))return;if(h)return h(t,e).value}return t[e]}var o=Object.prototype.hasOwnProperty,c=Object.prototype.toString,u=Object.defineProperty,h=Object.getOwnPropertyDescriptor;t.exports=function t(){var e,r,o,c,u,h=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof h&&(f=h,h=arguments[1]||{},l=2),(null==h||"object"!=typeof h&&"function"!=typeof h)&&(h={});l<p;++l)if(null!=(e=arguments[l]))for(r in e)u=a(h,r),h!==(o=a(e,r))&&(f&&o&&(s(o)||(c=i(o)))?n(h,{name:r,newValue:t(f,u=c?(c=!1,u&&i(u)?u:[]):u&&s(u)?u:{},o)}):void 0!==o&&n(h,{name:r,newValue:o}));return h}},function(t,e,r){"use strict";var i=r(467),s=r(8),n=r(40).Buffer;r="undefined"==typeof setImmediate?process.nextTick:setImmediate;e.paramsHaveRequestBody=function(t){return t.body||t.requestBodyStream||t.json&&"boolean"!=typeof t.json||t.multipart},e.safeStringify=function(t,e){var r;try{r=JSON.stringify(t,e)}catch(s){r=i(t,e)}return r},e.md5=function(t){return s.createHash("md5").update(t).digest("hex")},e.isReadStream=function(t){return t.readable&&t.path&&t.mode},e.toBase64=function(t){return n.from(t||"","utf8").toString("base64")},e.copy=function(t){var e={};return Object.keys(t).forEach((function(r){e[r]=t[r]})),e},e.version=function(){var t=process.version.replace("v","").split(".");return{major:parseInt(t[0],10),minor:parseInt(t[1],10),patch:parseInt(t[2],10)}},e.defer=r},function(t,e){t.exports=require("zlib")},function(t,e,r){var i=r(23),s=r(103),n=r(56),a=r(24),o=r(107),c=r(108);r=r(51);t.exports={Key:i,parseKey:i.parse,Fingerprint:s,parseFingerprint:s.parse,Signature:n,parseSignature:n.parse,PrivateKey:a,parsePrivateKey:a.parse,generatePrivateKey:a.generate,Certificate:o,parseCertificate:o.parse,createSelfSignedCertificate:o.createSelfSigned,createCertificate:o.create,Identity:c,identityFromDN:c.parseDN,identityForHost:c.forHost,identityForUser:c.forUser,identityForEmail:c.forEmail,identityFromArray:c.fromArray,FingerprintFormatError:r.FingerprintFormatError,InvalidAlgorithmError:r.InvalidAlgorithmError,KeyParseError:r.KeyParseError,SignatureParseError:r.SignatureParseError,KeyEncryptedError:r.KeyEncryptedError,CertificateParseError:r.CertificateParseError}},function(t,e){t.exports={newInvalidAsn1Error:function(t){var e=new Error;return e.name="InvalidAsn1Error",e.message=t||"",e}}},function(t,e){t.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},function(t,e,r){t.exports={DiffieHellman:d,generateECDSA:function(t){var e,r,i,a=[];return l?(e={nistp256:"prime256v1",nistp384:"secp384r1",nistp521:"secp521r1"}[t],(e=s.createECDH(e)).generateKeys(),a.push({name:"curve",data:n.from(t)}),a.push({name:"Q",data:e.getPublicKey()}),a.push({name:"d",data:e.getPrivateKey()})):(i=(e=new m(t)).getN(),r=Math.ceil((i.bitLength()+64)/8),r=new f(s.randomBytes(r)),i=i.subtract(f.ONE),r=r.mod(i).add(f.ONE),i=e.getG().multiply(r),r=n.from(r.toByteArray()),i=n.from(e.getCurve().encodePointHex(i),"hex"),a.push({name:"curve",data:n.from(t)}),a.push({name:"Q",data:i}),a.push({name:"d",data:r})),new h({type:"ecdsa",curve:t,parts:a})},generateED25519:function(){var t=c.sign.keyPair(),e=n.from(t.secretKey),r=(t=n.from(t.publicKey),i.strictEqual(e.length,64),i.strictEqual(t.length,32),[]);return r.push({name:"A",data:t}),r.push({name:"k",data:e.slice(0,32)}),new h({type:"ed25519",parts:r})}};var i=r(10),s=r(8),n=r(14).Buffer,a=r(31),o=r(25),c=r(105),u=r(23),h=r(24),l=void 0!==s.createECDH,p=(r(477),r(136)),f=r(104).BigInteger;function d(t){if(o.assertCompatible(t,u,[1,4],"key"),this._isPriv=h.isPrivateKey(t,[1,3]),this._algo=t.type,this._curve=t.curve,"dsa"===(this._key=t).type){if(!l)throw new Error("Due to bugs in the node 0.10 crypto API, node 0.12.x or later is required to use DH");this._dh=s.createDiffieHellman(t.part.p.data,void 0,t.part.g.data,void 0),this._p=t.part.p,this._g=t.part.g,this._isPriv&&this._dh.setPrivateKey(t.part.x.data),this._dh.setPublicKey(t.part.y.data)}else if("ecdsa"===t.type){var e;l?(e={nistp256:"prime256v1",nistp384:"secp384r1",nistp521:"secp521r1"}[t.curve],this._dh=s.createECDH(e),"object"!=typeof this._dh||"function"!=typeof this._dh.setPrivateKey?(l=!1,d.call(this,t)):(this._isPriv&&this._dh.setPrivateKey(t.part.d.data),this._dh.setPublicKey(t.part.Q.data))):(this._ecParams=new m(this._curve),this._isPriv&&(this._priv=new y(this._ecParams,t.part.d.data)))}else{if("curve25519"!==t.type)throw new Error("DH not supported for "+t.type+" keys");this._isPriv&&(o.assertCompatible(t,h,[1,5],"key"),this._priv=t.part.k.data)}}function m(t){t=a.curves[t];var e=(i.object(t),new f(t.p)),r=new f(t.a),s=new f(t.b),n=new f(t.n),o=f.ONE;r=(e=new p.ECCurveFp(e,r,s)).decodePointHex(t.G.toString("hex"));this.curve=e,this.g=r,this.n=n,this.h=o}function g(t,e){this._params=t,0===e[0]&&(e=e.slice(1)),this._pub=t.getCurve().decodePointHex(e.toString("hex"))}function y(t,e){this._params=t,this._priv=new f(o.mpNormalize(e))}d.prototype.getPublicKey=function(){return this._isPriv?this._key.toPublic():this._key},d.prototype.getKey=d.prototype.getPrivateKey=function(){return this._isPriv?this._key:void 0},d.prototype._keyCheck=function(t,e){if(i.object(t,"key"),e||o.assertCompatible(t,h,[1,3],"key"),o.assertCompatible(t,u,[1,4],"key"),t.type!==this._algo)throw new Error("A "+t.type+" key cannot be used in "+this._algo+" Diffie-Hellman");if(t.curve!==this._curve)throw new Error("A key from the "+t.curve+" curve cannot be used with a "+this._curve+" Diffie-Hellman");"dsa"===t.type&&(i.deepEqual(t.part.p,this._p,"DSA key prime does not match"),i.deepEqual(t.part.g,this._g,"DSA key generator does not match"))},d.prototype.setPrivateKey=d.prototype.setKey=function(t){var e;this._keyCheck(t),"dsa"===t.type?(this._dh.setPrivateKey(t.part.x.data),this._dh.setPublicKey(t.part.y.data)):"ecdsa"===t.type?l?(this._dh.setPrivateKey(t.part.d.data),this._dh.setPublicKey(t.part.Q.data)):this._priv=new y(this._ecParams,t.part.d.data):"curve25519"===t.type&&(e=t.part.k,t.part.k||(e=t.part.r),this._priv=e.data,0===this._priv[0]&&(this._priv=this._priv.slice(1)),this._priv=this._priv.slice(0,32)),this._key=t,this._isPriv=!0},d.prototype.computeSecret=function(t){if(this._keyCheck(t,!0),!this._isPriv)throw new Error("DH exchange has not been initialized with a private key yet");var e;if("dsa"===this._algo)return this._dh.computeSecret(t.part.y.data);if("ecdsa"===this._algo)return l?this._dh.computeSecret(t.part.Q.data):(e=new g(this._ecParams,t.part.Q.data),this._priv.deriveSharedSecret(e));if("curve25519"!==this._algo)throw new Error("Invalid algorithm: "+this._algo);for(e=t.part.A.data;0===e[0]&&32<e.length;)e=e.slice(1);return t=this._priv,i.strictEqual(e.length,32),i.strictEqual(t.length,32),t=c.box.before(new Uint8Array(e),new Uint8Array(t)),n.from(t)},d.prototype.generateKeys=d.prototype.generateKey=function(){var t,e,r,a=[];if("dsa"===this._algo)return this._dh.generateKeys(),a.push({name:"p",data:this._p.data}),a.push({name:"q",data:this._key.part.q.data}),a.push({name:"g",data:this._g.data}),a.push({name:"y",data:this._dh.getPublicKey()}),a.push({name:"x",data:this._dh.getPrivateKey()}),this._key=new h({type:"dsa",parts:a}),this._isPriv=!0,this._key;if("ecdsa"===this._algo)return l?(this._dh.generateKeys(),a.push({name:"curve",data:n.from(this._curve)}),a.push({name:"Q",data:this._dh.getPublicKey()}),a.push({name:"d",data:this._dh.getPrivateKey()})):(e=this._ecParams.getN(),t=new f(s.randomBytes(e.bitLength())),e=e.subtract(f.ONE),t=t.mod(e).add(f.ONE),e=this._ecParams.getG().multiply(t),t=n.from(t.toByteArray()),e=n.from(this._ecParams.getCurve().encodePointHex(e),"hex"),this._priv=new y(this._ecParams,t),a.push({name:"curve",data:n.from(this._curve)}),a.push({name:"Q",data:e}),a.push({name:"d",data:t})),this._key=new h({type:"ecdsa",curve:this._curve,parts:a}),this._isPriv=!0,this._key;if("curve25519"===this._algo)return r=c.box.keyPair(),t=n.from(r.secretKey),e=n.from(r.publicKey),t=n.concat([t,e]),i.strictEqual(t.length,64),i.strictEqual(e.length,32),a.push({name:"A",data:e}),a.push({name:"k",data:t}),this._key=new h({type:"curve25519",parts:a}),this._isPriv=!0,this._key;throw new Error("Invalid algorithm: "+this._algo)},m.prototype.getCurve=function(){return this.curve},m.prototype.getG=function(){return this.g},m.prototype.getN=function(){return this.n},m.prototype.getH=function(){return this.h},y.prototype.deriveSharedSecret=function(t){return i.ok(t instanceof g),t=t._pub.multiply(this._priv),n.from(t.getX().toBigInteger().toByteArray())}},function(t,e,r){t.exports={read:function(t,e){return h.read(t,e,"pkcs1")},readPkcs1:function(t,e,r){switch(t){case"RSA":if("public"===e)return function(t){var e=p(t,"modulus");t=p(t,"exponent");return new c({type:"rsa",parts:[{name:"e",data:t},{name:"n",data:e}]})}(r);if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e[0],0),p(t,"modulus")),p(t,"public exponent")),s=p(t,"private exponent"),n=p(t,"prime1"),a=p(t,"prime2"),o=p(t,"exponent1"),c=p(t,"exponent2");t=p(t,"iqmp");return new u({type:"rsa",parts:[{name:"n",data:e},{name:"e",data:r},{name:"d",data:s},{name:"iqmp",data:t},{name:"p",data:n},{name:"q",data:a},{name:"dmodp",data:o},{name:"dmodq",data:c}]})}(r);throw new Error("Unknown key type: "+e);case"DSA":if("public"===e)return function(t){var e=p(t,"y"),r=p(t,"p"),i=p(t,"q");t=p(t,"g");return new c({type:"dsa",parts:[{name:"y",data:e},{name:"p",data:r},{name:"q",data:i},{name:"g",data:t}]})}(r);if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e.readUInt8(0),0),p(t,"p")),p(t,"q")),s=p(t,"g"),n=p(t,"y");t=p(t,"x");return new u({type:"dsa",parts:[{name:"p",data:e},{name:"q",data:r},{name:"g",data:s},{name:"y",data:n},{name:"x",data:t}]})}(r);throw new Error("Unknown key type: "+e);case"EC":case"ECDSA":if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e.readUInt8(0),1),t.readString(s.Ber.OctetString,!0)),t.readSequence(160),l(t));i.string(r,"a known elliptic curve"),t.readSequence(161),t=t.readString(s.Ber.BitString,!0),t=o.ecNormalize(t),r={type:"ecdsa",parts:[{name:"curve",data:n.from(r)},{name:"Q",data:t},{name:"d",data:e}]};return new u(r)}(r);if("public"===e)return function(t){t.readSequence();for(var e,r=t.readOID(),u=(i.strictEqual(r,"1.2.840.10045.2.1","must be ecPublicKey"),t.readOID()),h=Object.keys(a.curves),l=0;l<h.length;++l){var p=h[l];if(a.curves[p].pkcs8oid===u){e=p;break}}return i.string(e,"a known ECDSA named curve"),r=t.readString(s.Ber.BitString,!0),r=o.ecNormalize(r),t={type:"ecdsa",parts:[{name:"curve",data:n.from(e)},{name:"Q",data:r}]},new c(t)}(r);throw new Error("Unknown key type: "+e);case"EDDSA":case"EdDSA":if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e.readUInt8(0),1),t.readString(s.Ber.OctetString,!0)),t.readSequence(160),t.readOID());i.strictEqual(r,"1.3.101.112","the ed25519 curve identifier"),t.readSequence(161),r=o.readBitString(t),t={type:"ed25519",parts:[{name:"A",data:o.zeroPadToLength(r,32)},{name:"k",data:e}]};return new u(t)}(r);throw new Error(e+" keys not supported with EdDSA");default:throw new Error("Unknown key algo: "+t)}},write:function(t,e){return h.write(t,e,"pkcs1")},writePkcs1:function(t,e){switch(t.startSequence(),e.type){case"rsa":(u.isPrivateKey(e)?function(t,e){var r=n.from([0]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.n.data,s.Ber.Integer),t.writeBuffer(e.part.e.data,s.Ber.Integer),t.writeBuffer(e.part.d.data,s.Ber.Integer),t.writeBuffer(e.part.p.data,s.Ber.Integer),t.writeBuffer(e.part.q.data,s.Ber.Integer),e.part.dmodp&&e.part.dmodq||o.addRSAMissing(e),t.writeBuffer(e.part.dmodp.data,s.Ber.Integer),t.writeBuffer(e.part.dmodq.data,s.Ber.Integer),t.writeBuffer(e.part.iqmp.data,s.Ber.Integer)}:function(t,e){t.writeBuffer(e.part.n.data,s.Ber.Integer),t.writeBuffer(e.part.e.data,s.Ber.Integer)})(t,e);break;case"dsa":(u.isPrivateKey(e)?function(t,e){var r=n.from([0]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.p.data,s.Ber.Integer),t.writeBuffer(e.part.q.data,s.Ber.Integer),t.writeBuffer(e.part.g.data,s.Ber.Integer),t.writeBuffer(e.part.y.data,s.Ber.Integer),t.writeBuffer(e.part.x.data,s.Ber.Integer)}:function(t,e){t.writeBuffer(e.part.y.data,s.Ber.Integer),t.writeBuffer(e.part.p.data,s.Ber.Integer),t.writeBuffer(e.part.q.data,s.Ber.Integer),t.writeBuffer(e.part.g.data,s.Ber.Integer)})(t,e);break;case"ecdsa":(u.isPrivateKey(e)?function(t,e){var r=n.from([1]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.d.data,s.Ber.OctetString),t.startSequence(160),r=e.part.curve.data.toString(),r=a.curves[r].pkcs8oid,i.string(r,"a known ECDSA named curve"),t.writeOID(r),t.endSequence(),t.startSequence(161),r=o.ecNormalize(e.part.Q.data,!0);t.writeBuffer(r,s.Ber.BitString),t.endSequence()}:function(t,e){t.startSequence(),t.writeOID("1.2.840.10045.2.1");var r=e.part.curve.data.toString();r=a.curves[r].pkcs8oid,i.string(r,"a known ECDSA named curve"),t.writeOID(r),t.endSequence(),r=o.ecNormalize(e.part.Q.data,!0);t.writeBuffer(r,s.Ber.BitString)})(t,e);break;case"ed25519":u.isPrivateKey(e)?function(t,e){var r=n.from([1]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.k.data,s.Ber.OctetString),t.startSequence(160),t.writeOID("1.3.101.112"),t.endSequence(),t.startSequence(161),o.writeBitString(t,e.part.A.data),t.endSequence()}(t,e):function(){throw new Error("Public keys are not supported for EdDSA PKCS#1")}();break;default:throw new Error("Unknown key algo: "+e.type)}t.endSequence()}};var i=r(10),s=r(57),n=r(14).Buffer,a=r(31),o=r(25),c=r(23),u=r(24),h=r(67),l=r(106).readECDSACurve;function p(t,e){return i.strictEqual(t.peek(),s.Ber.Integer,e+" is not an Integer"),o.mpNormalize(t.readString(s.Ber.Integer,!0))}},function(t,e,r){t.exports={read:function(t,e){"string"!=typeof t&&(i.buffer(t,"buf"),t=t.toString("ascii"));var r=t.split("\n");if(r[0].match(/^Private-key-format\: v1/)){t=r[1].split(" ");var c=parseInt(t[1],10);t=t[2];if(u[c])return function(t,e){if(u[t].match(/^RSA-/))return function(t){var e={};t.forEach((function(t){"Modulus:"===t.split(" ")[0]?e.n=h(t):"PublicExponent:"===t.split(" ")[0]?e.e=h(t):"PrivateExponent:"===t.split(" ")[0]?e.d=h(t):"Prime1:"===t.split(" ")[0]?e.p=h(t):"Prime2:"===t.split(" ")[0]?e.q=h(t):"Exponent1:"===t.split(" ")[0]?e.dmodp=h(t):"Exponent2:"===t.split(" ")[0]?e.dmodq=h(t):"Coefficient:"===t.split(" ")[0]&&(e.iqmp=h(t))})),t={type:"rsa",parts:[{name:"e",data:o.mpNormalize(e.e)},{name:"n",data:o.mpNormalize(e.n)},{name:"d",data:o.mpNormalize(e.d)},{name:"p",data:o.mpNormalize(e.p)},{name:"q",data:o.mpNormalize(e.q)},{name:"dmodp",data:o.mpNormalize(e.dmodp)},{name:"dmodq",data:o.mpNormalize(e.dmodq)},{name:"iqmp",data:o.mpNormalize(e.iqmp)}]};return new a(t)}(e);if("ECDSA-P384-SHA384"!==u[t]&&"ECDSA-P256-SHA256"!==u[t])throw new Error("Unsupported algorithm: "+u[t]);e=s.from(e[0].split(" ")[1],"base64");var r="nistp384",i=384;return"ECDSA-P256-SHA256"===u[t]&&(r="nistp256",i=256),t=o.publicFromPrivateECDSA(r,e).part.Q.data,i={type:"ecdsa",curve:r,size:i,parts:[{name:"curve",data:s.from(r)},{name:"d",data:e},{name:"Q",data:t}]},new a(i)}(c,r.slice(2));throw new Error("Unsupported algorithm: "+t)}for(var l=0;r[l].match(/^\;/);)l++;if(!r[l].match(/\. IN KEY /)&&!r[l].match(/\. IN DNSKEY /)||0!==r[l+1].length)throw new Error("Cannot parse dnssec key");return function(t){t=t.split(" ");var e=parseInt(t[5],10);if(!u[e])throw new Error("Unsupported algorithm: "+e);if(t=t.slice(6,t.length).join(),t=s.from(t,"base64"),u[e].match(/^RSA-/)){if(3!=(i=t.readUInt8(0))&&1!=i)throw new Error("Cannot parse dnssec key: unsupported exponent length");var r=t.slice(1,i+1),i=(r=o.mpNormalize(r),t.slice(1+i)),a=(i=o.mpNormalize(i),{type:"rsa",parts:[]});return a.parts.push({name:"e",data:r}),a.parts.push({name:"n",data:i}),new n(a)}if("ECDSA-P384-SHA384"!==u[e]&&"ECDSA-P256-SHA256"!==u[e])throw new Error("Unsupported algorithm: "+u[e]);return r="nistp384",i=384,u[e].match(/^ECDSA-P256-SHA256/)&&(r="nistp256",i=256),a={type:"ecdsa",curve:r,size:i,parts:[{name:"curve",data:s.from(r)},{name:"Q",data:o.ecNormalize(t)}]},new n(a)}(r[l])},write:function(t,e){if(a.isPrivateKey(t)){if("rsa"===t.type)return function(t,e){t.part.dmodp&&t.part.dmodq||o.addRSAMissing(t);var r="";r=(r+="Private-key-format: v1.3\n")+"Algorithm: "+function(t){if(t&&t.hashAlgo&&"sha1"!==t.hashAlgo){if("sha256"===t.hashAlgo)return"8 (RSASHA256)";if("sha512"===t.hashAlgo)return"10 (RSASHA512)";throw new Error("Unknown or unsupported hash: "+t.hashAlgo)}return"5 (RSASHA1)"}(e)+"\n",e=o.mpDenormalize(t.part.n.data),r+="Modulus: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.e.data),r+="PublicExponent: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.d.data),r+="PrivateExponent: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.p.data),r+="Prime1: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.q.data),r+="Prime2: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.dmodp.data),r+="Exponent1: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.dmodq.data),r+="Exponent2: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.iqmp.data),r+="Coefficient: "+e.toString("base64")+"\n",t=new Date;return r=(r=(r+="Created: "+l(t)+"\n")+"Publish: "+l(t)+"\n")+"Activate: "+l(t)+"\n",s.from(r,"ascii")}(t,e);if("ecdsa"===t.type)return function(t){var e="";if(e+="Private-key-format: v1.3\n","nistp256"===t.curve)e+="Algorithm: 13 (ECDSAP256SHA256)\n";else{if("nistp384"!==t.curve)throw new Error("Unsupported curve");e+="Algorithm: 14 (ECDSAP384SHA384)\n"}return e+="PrivateKey: "+(t=t.part.d.data.toString("base64"))+"\n",e=(e=(e+="Created: "+l(t=new Date)+"\n")+"Publish: "+l(t)+"\n")+"Activate: "+l(t)+"\n",s.from(e,"ascii")}(t);throw new Error("Unsupported algorithm: "+t.type)}throw n.isKey(t)?new Error('Format "dnssec" only supports writing private keys'):new Error("key is not a Key or PrivateKey")}};var i=r(10),s=r(14).Buffer,n=r(23),a=r(24),o=r(25),c=(r(89),r(182),{"rsa-sha1":5,"rsa-sha256":8,"rsa-sha512":10,"ecdsa-p256-sha256":13,"ecdsa-p384-sha384":14}),u={};function h(t){return s.from(t.split(" ")[1],"base64")}function l(t){var e=t.getFullYear()+""+(t.getMonth()+1)+t.getUTCDate();return(e+=""+t.getUTCHours()+t.getUTCMinutes())+t.getUTCSeconds()}Object.keys(c).forEach((function(t){u[c[t]]=t.toUpperCase()}))},function(t,e,r){t.exports={read:function(t,e){for(var r,a,p=t.toString("ascii").split(/[\r\n]+/),f=!1,d=0;d<p.length;)if((r=l(p[d++]))&&(a={"putty-user-key-file-2":2,"putty-user-key-file-3":3}[r[0].toLowerCase()])){f=!0;break}if(!f)throw new Error("No PuTTY format first line found");t=r[1];var m=(r=l(p[d++]),i.equal(r[0].toLowerCase(),"encryption"),r[1]),g=(r=l(p[d++]),i.equal(r[0].toLowerCase(),"comment"),r[1]),y=(r=l(p[d++]),i.equal(r[0].toLowerCase(),"public-lines"),parseInt(r[1],10));if(!isFinite(y)||y<0||y>p.length)throw new Error("Invalid public-lines count");var v,b=s.from(p.slice(d,d+y).join(""),"base64"),w=n.algToKeyType(t);if((b=n.read(b)).type!==w)throw new Error("Outer key algorithm mismatch");if(p[d+=y]){if(r=l(p[d++]),i.equal(r[0].toLowerCase(),"private-lines"),y=parseInt(r[1],10),!isFinite(y)||y<0||y>p.length)throw new Error("Invalid private-lines count");if(y=s.from(p.slice(d,d+y).join(""),"base64"),"none"!==m&&3===a)throw new Error("Encrypted keys arenot supported for PuTTY format version 3");if("aes256-cbc"===m){if(!e.passphrase)throw new h.KeyEncryptedError(e.filename,"PEM");m=s.alloc(16,0),(e=c.createDecipheriv("aes-256-cbc",function(t){var e=c.createHash("sha1").update(s.concat([s.from([0,0,0,0]),s.from(t)])).digest();t=c.createHash("sha1").update(s.concat([s.from([0,0,0,1]),s.from(t)])).digest();return s.concat([e,t]).slice(0,32)}(e.passphrase),m)).setAutoPadding(!1),y=s.concat([e.update(y),e.final()])}if((b=new u(b)).type!==w)throw new Error("Outer key algorithm mismatch");if(m=new o({buffer:y}),"ssh-dss"===t)v=[{name:"x",data:m.readBuffer()}];else if("ssh-rsa"===t)v=[{name:"d",data:m.readBuffer()},{name:"p",data:m.readBuffer()},{name:"q",data:m.readBuffer()},{name:"iqmp",data:m.readBuffer()}];else if(t.match(/^ecdsa-sha2-nistp/))v=[{name:"d",data:m.readBuffer()}];else{if("ssh-ed25519"!==t)throw new Error("Unsupported PPK key type: "+t);v=[{name:"k",data:m.readBuffer()}]}b=new u({type:b.type,parts:b.parts.concat(v)})}return b.comment=g,b},write:function(t,e){var r,o;if(i.object(t),a.isKey(t))return r=n.keyTypeToAlg(t),o=n.write(t),t=t.comment||"",(o=function(t){for(var e=[],r=0;r<t.length;)e.push(t.slice(r,r+64)),r+=64;return e}(o.toString("base64"))).unshift("Public-Lines: "+o.length),o.unshift("Comment: "+t),o.unshift("Encryption: none"),o.unshift("PuTTY-User-Key-File-2: "+r),s.from(o.join("\n")+"\n");throw new Error("Must be a public key")}};var i=r(10),s=r(14).Buffer,n=r(68),a=r(23),o=r(89),c=r(8),u=r(24),h=r(51);function l(t){var e=t.indexOf(":");if(-1===e)return null;var r=t.slice(0,e);for(++e;" "===t[e];)++e;return[r,t.slice(e)]}},function(t,e){function r(t){this.dict=t||{}}r.prototype.set=function(t,e,r){var i,s;if("object"!=typeof t)return void 0===r&&(r=!0),i=this.has(t),!r&&i?this.dict[i]=this.dict[i]+","+e:this.dict[i||t]=e,i;for(s in t)this.set(s,t[s],e)},r.prototype.has=function(t){for(var e=Object.keys(this.dict),r=(t=t.toLowerCase(),0);r<e.length;r++)if(e[r].toLowerCase()===t)return e[r];return!1},r.prototype.get=function(t){t=t.toLowerCase();var e,r,i=this.dict;return Object.keys(i).forEach((function(s){r=s.toLowerCase(),t===r&&(e=i[s])})),e},r.prototype.swap=function(t){var e=this.has(t);if(e!==t){if(!e)throw new Error('There is no header than matches "'+t+'"');this.dict[t]=this.dict[e],delete this.dict[e]}},r.prototype.del=function(t){var e=this.has(t);return delete this.dict[e||t]},t.exports=function(t){return new r(t)},t.exports.httpify=function(t,e){var i=new r(e);return t.setHeader=function(t,e,r){if(void 0!==e)return i.set(t,e,r)},t.hasHeader=function(t){return i.has(t)},t.getHeader=function(t){return i.get(t)},t.removeHeader=function(t){return i.del(t)},t.headers=i.dict,i}},function(t,e,r){"use strict";var i=r(505),s=r(188),n=r(90),a=r(300),o=r(507);function c(t,e,r){var i,s,n,o=this._refs[r];if("string"==typeof o){if(!this._refs[o])return c.call(this,t,e,o);o=this._refs[o]}return(o=o||this._schemas[r])instanceof a?f(o.schema,this._opts.inlineRefs)?o.schema:o.validate||this._compile(o):((o=u.call(this,e,r))&&(i=o.schema,e=o.root,n=o.baseId),i instanceof a?s=i.validate||t.call(this,i.schema,e,void 0,n):void 0!==i&&(s=f(i,this._opts.inlineRefs)?i:t.call(this,i,e,void 0,n)),s)}function u(t,e){var r=i.parse(e),s=m(r),n=d(this._getId(t.schema));if(0===Object.keys(t.schema).length||s!==n){s=y(s);var o=this._refs[s];if("string"==typeof o)return function(t,e,r){var i,s;if(e=u.call(this,t,e))return i=e.schema,s=e.baseId,t=e.root,(e=this._getId(i))&&(s=v(s,e)),l.call(this,r,s,i,t)}.call(this,t,o,r);if(o instanceof a)o.validate||this._compile(o);else{if(!((o=this._schemas[s])instanceof a))return;if(o.validate||this._compile(o),s==y(e))return{schema:o,root:t,baseId:n}}if(!(t=o).schema)return;n=d(this._getId(t.schema))}return l.call(this,r,n,t.schema,t)}(t.exports=c).normalizeId=y,c.fullPath=d,c.url=v,c.ids=function(t){var e=y(this._getId(t)),r={"":e},a={"":d(e,!1)},c={},u=this;return o(t,{allKeys:!0},(function(t,e,o,h,l,p,f){if(""!==e){var d=u._getId(t),m=r[h];h=a[h]+"/"+l;if(void 0!==f&&(h+="/"+("number"==typeof f?f:n.escapeFragment(f))),"string"==typeof d)if(d=m=y(m?i.resolve(m,d):d),(l="string"==typeof(l=u._refs[d])?u._refs[l]:l)&&l.schema){if(!s(t,l.schema))throw new Error('id "'+d+'" resolves to more than one schema')}else if(d!=y(h))if("#"==d[0]){if(c[d]&&!s(t,c[d]))throw new Error('id "'+d+'" resolves to more than one schema');c[d]=t}else u._refs[d]=h;r[e]=m,a[e]=h}})),c},c.inlineRef=f,c.schema=u;var h=n.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function l(t,e,r,i){if(t.fragment=t.fragment||"","/"==t.fragment.slice(0,1)){for(var s=t.fragment.split("/"),a=1;a<s.length;a++){var o=s[a];if(o){if(void 0===(r=r[o=n.unescapeFragment(o)]))break;h[o]||((o=this._getId(r))&&(e=v(e,o)),r.$ref&&(o=v(e,r.$ref),(o=u.call(this,i,o))&&(r=o.schema,i=o.root,e=o.baseId)))}}return void 0!==r&&r!==i.schema?{schema:r,root:i,baseId:e}:void 0}}var p=n.toHash(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum"]);function f(t,e){return!1!==e&&(void 0===e||!0===e?function t(e){var r;if(Array.isArray(e)){for(var i=0;i<e.length;i++)if("object"==typeof(r=e[i])&&!t(r))return!1}else for(var s in e){if("$ref"==s)return!1;if("object"==typeof(r=e[s])&&!t(r))return!1}return!0}(t):e?function t(e){var r,i=0;if(Array.isArray(e)){for(var s=0;s<e.length;s++)if("object"==typeof(r=e[s])&&(i+=t(r)),i==1/0)return 1/0}else for(var n in e){if("$ref"==n)return 1/0;if(p[n])i++;else if("object"==typeof(r=e[n])&&(i+=t(r)+1),i==1/0)return 1/0}return i}(t)<=e:void 0)}function d(t,e){return!1!==e&&(t=y(t)),m(i.parse(t))}function m(t){return i.serialize(t).split("#")[0]+"#"}var g=/#\/?$/;function y(t){return t?t.replace(g,""):""}function v(t,e){return e=y(e),i.resolve(t,e)}},function(t,e,r){"use strict";t.exports=function t(e,r){if(e===r)return!0;if(e&&r&&"object"==typeof e&&"object"==typeof r){if(e.constructor!==r.constructor)return!1;var i,s,n;if(Array.isArray(e)){if((i=e.length)!=r.length)return!1;for(s=i;0!=s--;)if(!t(e[s],r[s]))return!1}else{if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if((i=(n=Object.keys(e)).length)!==Object.keys(r).length)return!1;for(s=i;0!=s--;)if(!Object.prototype.hasOwnProperty.call(r,n[s]))return!1;for(s=i;0!=s--;){var a=n[s];if(!t(e[a],r[a]))return!1}}return!0}return e!=e&&r!=r}},function(t,e,r){"use strict";var i=r(187);function s(t,e,r){this.message=r||s.message(t,e),this.missingRef=i.url(t,e),this.missingSchema=i.normalizeId(i.fullPath(this.missingRef))}function n(t){return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t}t.exports={Validation:n((function(t){this.message="validation failed",this.errors=t,this.ajv=this.validation=!0})),MissingRef:n(s)},s.message=function(t,e){return"can't resolve reference "+e+" from id "+t}},function(t,e,r){var i=r(308),s=r(309);t.exports=function(t,e,r){var n=e&&r||0,a=("string"==typeof t&&(e="binary"===t?new Array(16):null,t=null),(t=t||{}).random||(t.rng||i)());if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,e)for(var o=0;o<16;++o)e[n+o]=a[o];return e||s(a)}},function(t,e,r){
|
|
411
|
+
*/const i=r(0),s=r(101),n=r(1),a=r(21),o=r(2),c=r(4),u=a.opcodes,h=[];let l=null;class p{constructor(t,e){this.value=t||0,this.data=e||null}isMinimal(){if(this.data){if(1===this.data.length){if(129===this.data[0])return!1;if(1<=this.data[0]&&this.data[0]<=16)return!1}if(this.data.length<=75)return this.value===this.data.length;if(this.data.length<=255)return this.value===u.OP_PUSHDATA1;if(this.data.length<=65535)return this.value===u.OP_PUSHDATA2;i(this.value===u.OP_PUSHDATA4)}return!0}isDisabled(){switch(this.value){case u.OP_CAT:case u.OP_SUBSTR:case u.OP_LEFT:case u.OP_RIGHT:case u.OP_INVERT:case u.OP_AND:case u.OP_OR:case u.OP_XOR:case u.OP_2MUL:case u.OP_2DIV:case u.OP_MUL:case u.OP_DIV:case u.OP_MOD:case u.OP_LSHIFT:case u.OP_RSHIFT:return!0}return!1}isBranch(){return this.value>=u.OP_IF&&this.value<=u.OP_ENDIF}equals(t){return i(p.isOpcode(t)),this.value===t.value&&(this.data?(i(t.data),this.data.equals(t.data)):(i(!t.data),!0))}toOp(){return this.value}toData(){return this.data}toLength(){return this.data?this.data.length:-1}toPush(){return this.value===u.OP_0?a.small[1]:this.value===u.OP_1NEGATE?a.small[0]:this.value>=u.OP_1&&this.value<=u.OP_16?a.small[this.value-80+1]:this.toData()}toString(t){const e=this.toPush();return e?e.toString(t||"utf8"):null}toSmall(){return this.value===u.OP_0?0:this.value>=u.OP_1&&this.value<=u.OP_16?this.value-80:-1}toNum(t,e){return this.value===u.OP_0?s.fromInt(0):this.value===u.OP_1NEGATE?s.fromInt(-1):this.value>=u.OP_1&&this.value<=u.OP_16?s.fromInt(this.value-80):this.data?s.decode(this.data,t,e):null}toInt(t,e){const r=this.toNum(t,e);return r?r.getInt():-1}toBool(){var t=this.toSmall();return-1!==t&&1===t}toSymbol(){return-1===this.value?"OP_INVALIDOPCODE":a.opcodesByVal[this.value]||"0x"+n.hex8(this.value)}getSize(){if(!this.data)return 1;switch(this.value){case u.OP_PUSHDATA1:return 2+this.data.length;case u.OP_PUSHDATA2:return 3+this.data.length;case u.OP_PUSHDATA4:return 5+this.data.length;default:return 1+this.data.length}}toWriter(t){if(-1===this.value)throw new Error("Cannot reserialize a parse error.");if(this.data)switch(this.value){case u.OP_PUSHDATA1:t.writeU8(this.value),t.writeU8(this.data.length),t.writeBytes(this.data);break;case u.OP_PUSHDATA2:t.writeU8(this.value),t.writeU16(this.data.length),t.writeBytes(this.data);break;case u.OP_PUSHDATA4:t.writeU8(this.value),t.writeU32(this.data.length),t.writeBytes(this.data);break;default:i(this.value===this.data.length),t.writeU8(this.value),t.writeBytes(this.data)}else t.writeU8(this.value);return t}toRaw(){var t=this.getSize();return this.toWriter(new c(t)).render()}toFormat(){if(-1===this.value)return"0x01";if(this.data){if(this.data.length<=4){const t=this.toNum();if(this.equals(p.fromNum(t)))return t.toString(10)}const e=a.opcodesByVal[this.value];var t=this.data.toString("hex");if(!e)return`0x${n.hex8(this.value)} 0x`+t;let r=this.data.length.toString(16);if(r.length%2!=0&&(r="0"+r),r=n.revHex(r),this.data.length<=75)return`${e} 0x${r} 0x`+t;if(this.data.length<=255)return`${e} 0x4c 0x${r} 0x`+t;if(this.data.length<=65535)return`${e} 0x4d 0x${r} 0x`+t;if(this.data.length<=4294967295)return`${e} 0x4e 0x${r} 0x`+t}return a.opcodesByVal[this.value]||"0x"+n.hex8(this.value)}toASM(t){return-1===this.value?"[error]":this.data?a.toASM(this.data,t):a.opcodesByVal[this.value]||"OP_UNKNOWN"}static fromOp(t){return i("number"==typeof t),t=h[t],i(t,"Bad opcode."),t}static fromData(t){if(i(Buffer.isBuffer(t)),1===t.length){if(129===t[0])return p.fromOp(u.OP_1NEGATE);if(1<=t[0]&&t[0]<=16)return p.fromOp(t[0]+80)}return p.fromPush(t)}static fromPush(t){if(i(Buffer.isBuffer(t)),0===t.length)return p.fromOp(u.OP_0);if(t.length<=75)return new p(t.length,t);if(t.length<=255)return new p(u.OP_PUSHDATA1,t);if(t.length<=65535)return new p(u.OP_PUSHDATA2,t);if(t.length<=4294967295)return new p(u.OP_PUSHDATA4,t);throw new Error("Pushdata size too large.")}static fromString(t,e){return i("string"==typeof t),t=Buffer.from(t,e||"utf8"),p.fromData(t)}static fromSmall(t){return i(n.isU8(t)&&0<=t&&t<=16),p.fromOp(0===t?0:t+80)}static fromNum(t){return i(s.isScriptNum(t)),p.fromData(t.encode())}static fromInt(t){return i(n.isInt(t)),0===t?p.fromOp(u.OP_0):-1===t?p.fromOp(u.OP_1NEGATE):1<=t&&t<=16?p.fromOp(t+80):p.fromNum(s.fromNumber(t))}static fromBool(t){return i("boolean"==typeof t),p.fromSmall(t?1:0)}static fromSymbol(t){i("string"==typeof t),i(0<t.length),n.isUpperCase(t)||(t=t.toUpperCase()),n.startsWith(t,"OP_")||(t="OP_"+t);var e=a.opcodes[t];return null!=e||(i(n.startsWith(t,"OP_0X"),"Unknown opcode."),i(7===t.length,"Unknown opcode."),e=parseInt(t.substring(5),16),i(n.isU8(e),"Unknown opcode.")),p.fromOp(e)}static fromReader(t){var e,r=t.readU8(),i=h[r];if(i)return i;switch(r){case u.OP_PUSHDATA1:return t.left()<1?l:(e=t.readU8(),t.left()<e?(t.seek(t.left()),l):(e=t.readBytes(e),new p(r,e)));case u.OP_PUSHDATA2:return t.left()<2?(t.seek(t.left()),l):(e=t.readU16(),t.left()<e?(t.seek(t.left()),l):(e=t.readBytes(e),new p(r,e)));case u.OP_PUSHDATA4:return t.left()<4?(t.seek(t.left()),l):(e=t.readU32(),t.left()<e?(t.seek(t.left()),l):(e=t.readBytes(e),new p(r,e)));default:return t.left()<r?(t.seek(t.left()),l):(e=t.readBytes(r),new p(r,e))}}static fromRaw(t){return p.fromReader(new o(t))}static isOpcode(t){return t instanceof p}}l=Object.freeze(new p(-1));for(let t=0;t<=255;t++){var f;1<=t&&t<=78?h.push(null):(f=new p(t),h.push(Object.freeze(f)))}t.exports=p},function(t,e,r){const i=r(5).ContractStatus;t.exports=class extends class{constructor(t){this.period=t.period}run(t){var e=this.getResult();if(e&&Array.isArray(e)&&e.length<=10)for(var r of e)t.pushInt(r)}getResult(){return[]}}{constructor(t,e){super(t),this.type=t.type,this.addr=t.addr,this.dst=t.dst,this.status=e}getResult(){return this.status===i.Expired||this.status===i.Backed?[1,2]:this.status===i.Confirmed||this.status===i.Exchanged?[2,1]:[]}}},function(t,e,r){"use strict";const i=r(0),s=r(336),n=r(337);function a(t){var e=(r=a.getBackend(t)).backend,r=r.location;return new s(e,r,t)}a.getName=function(t){let e,r;switch(t=t||"memory"){case"ldb":case"leveldb":case"leveldown":e="leveldown",r="ldb";break;case"rdb":case"rocksdb":case"rocksdown":e="rocksdown",r="rdb";break;case"mdb":case"lmdb":e="lmdb",r="mdb";break;case"mem":case"memory":case"rbt":e="memory",r="mem";break;default:e=t,r="db"}return[e,r]},a.getBackend=function(t){var[e,r]=a.getName(t.db),s=n.get(e);let o=t.location;return"string"!=typeof o&&(i("memory"===e,"Location required."),o="memory"),{backend:s,location:o+"."+r}},t.exports=a},function(t,e,r){"use strict";e.AbstractLevelDOWN=r(412),e.AbstractIterator=r(264),e.AbstractChainedBatch=r(265)},function(t,e,r){"use strict";t.exports=process.nextTick},function(t,e,r){t.exports=r(417)(__dirname)},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,r){"use strict";function i(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===c.call(t)}function s(t){if(t&&"[object Object]"===c.call(t)){var e,r=o.call(t,"constructor"),i=t.constructor&&t.constructor.prototype&&o.call(t.constructor.prototype,"isPrototypeOf");if(!t.constructor||r||i){for(e in t);return void 0===e||o.call(t,e)}}}function n(t,e){u&&"__proto__"===e.name?u(t,e.name,{enumerable:!0,configurable:!0,value:e.newValue,writable:!0}):t[e.name]=e.newValue}function a(t,e){if("__proto__"===e){if(!o.call(t,e))return;if(h)return h(t,e).value}return t[e]}var o=Object.prototype.hasOwnProperty,c=Object.prototype.toString,u=Object.defineProperty,h=Object.getOwnPropertyDescriptor;t.exports=function t(){var e,r,o,c,u,h=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof h&&(f=h,h=arguments[1]||{},l=2),(null==h||"object"!=typeof h&&"function"!=typeof h)&&(h={});l<p;++l)if(null!=(e=arguments[l]))for(r in e)u=a(h,r),h!==(o=a(e,r))&&(f&&o&&(s(o)||(c=i(o)))?n(h,{name:r,newValue:t(f,u=c?(c=!1,u&&i(u)?u:[]):u&&s(u)?u:{},o)}):void 0!==o&&n(h,{name:r,newValue:o}));return h}},function(t,e,r){"use strict";var i=r(467),s=r(8),n=r(40).Buffer;r="undefined"==typeof setImmediate?process.nextTick:setImmediate;e.paramsHaveRequestBody=function(t){return t.body||t.requestBodyStream||t.json&&"boolean"!=typeof t.json||t.multipart},e.safeStringify=function(t,e){var r;try{r=JSON.stringify(t,e)}catch(s){r=i(t,e)}return r},e.md5=function(t){return s.createHash("md5").update(t).digest("hex")},e.isReadStream=function(t){return t.readable&&t.path&&t.mode},e.toBase64=function(t){return n.from(t||"","utf8").toString("base64")},e.copy=function(t){var e={};return Object.keys(t).forEach((function(r){e[r]=t[r]})),e},e.version=function(){var t=process.version.replace("v","").split(".");return{major:parseInt(t[0],10),minor:parseInt(t[1],10),patch:parseInt(t[2],10)}},e.defer=r},function(t,e){t.exports=require("zlib")},function(t,e,r){var i=r(23),s=r(103),n=r(56),a=r(24),o=r(107),c=r(108);r=r(51);t.exports={Key:i,parseKey:i.parse,Fingerprint:s,parseFingerprint:s.parse,Signature:n,parseSignature:n.parse,PrivateKey:a,parsePrivateKey:a.parse,generatePrivateKey:a.generate,Certificate:o,parseCertificate:o.parse,createSelfSignedCertificate:o.createSelfSigned,createCertificate:o.create,Identity:c,identityFromDN:c.parseDN,identityForHost:c.forHost,identityForUser:c.forUser,identityForEmail:c.forEmail,identityFromArray:c.fromArray,FingerprintFormatError:r.FingerprintFormatError,InvalidAlgorithmError:r.InvalidAlgorithmError,KeyParseError:r.KeyParseError,SignatureParseError:r.SignatureParseError,KeyEncryptedError:r.KeyEncryptedError,CertificateParseError:r.CertificateParseError}},function(t,e){t.exports={newInvalidAsn1Error:function(t){var e=new Error;return e.name="InvalidAsn1Error",e.message=t||"",e}}},function(t,e){t.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},function(t,e,r){t.exports={DiffieHellman:d,generateECDSA:function(t){var e,r,i,a=[];return l?(e={nistp256:"prime256v1",nistp384:"secp384r1",nistp521:"secp521r1"}[t],(e=s.createECDH(e)).generateKeys(),a.push({name:"curve",data:n.from(t)}),a.push({name:"Q",data:e.getPublicKey()}),a.push({name:"d",data:e.getPrivateKey()})):(i=(e=new m(t)).getN(),r=Math.ceil((i.bitLength()+64)/8),r=new f(s.randomBytes(r)),i=i.subtract(f.ONE),r=r.mod(i).add(f.ONE),i=e.getG().multiply(r),r=n.from(r.toByteArray()),i=n.from(e.getCurve().encodePointHex(i),"hex"),a.push({name:"curve",data:n.from(t)}),a.push({name:"Q",data:i}),a.push({name:"d",data:r})),new h({type:"ecdsa",curve:t,parts:a})},generateED25519:function(){var t=c.sign.keyPair(),e=n.from(t.secretKey),r=(t=n.from(t.publicKey),i.strictEqual(e.length,64),i.strictEqual(t.length,32),[]);return r.push({name:"A",data:t}),r.push({name:"k",data:e.slice(0,32)}),new h({type:"ed25519",parts:r})}};var i=r(10),s=r(8),n=r(14).Buffer,a=r(31),o=r(25),c=r(105),u=r(23),h=r(24),l=void 0!==s.createECDH,p=(r(477),r(136)),f=r(104).BigInteger;function d(t){if(o.assertCompatible(t,u,[1,4],"key"),this._isPriv=h.isPrivateKey(t,[1,3]),this._algo=t.type,this._curve=t.curve,"dsa"===(this._key=t).type){if(!l)throw new Error("Due to bugs in the node 0.10 crypto API, node 0.12.x or later is required to use DH");this._dh=s.createDiffieHellman(t.part.p.data,void 0,t.part.g.data,void 0),this._p=t.part.p,this._g=t.part.g,this._isPriv&&this._dh.setPrivateKey(t.part.x.data),this._dh.setPublicKey(t.part.y.data)}else if("ecdsa"===t.type){var e;l?(e={nistp256:"prime256v1",nistp384:"secp384r1",nistp521:"secp521r1"}[t.curve],this._dh=s.createECDH(e),"object"!=typeof this._dh||"function"!=typeof this._dh.setPrivateKey?(l=!1,d.call(this,t)):(this._isPriv&&this._dh.setPrivateKey(t.part.d.data),this._dh.setPublicKey(t.part.Q.data))):(this._ecParams=new m(this._curve),this._isPriv&&(this._priv=new y(this._ecParams,t.part.d.data)))}else{if("curve25519"!==t.type)throw new Error("DH not supported for "+t.type+" keys");this._isPriv&&(o.assertCompatible(t,h,[1,5],"key"),this._priv=t.part.k.data)}}function m(t){t=a.curves[t];var e=(i.object(t),new f(t.p)),r=new f(t.a),s=new f(t.b),n=new f(t.n),o=f.ONE;r=(e=new p.ECCurveFp(e,r,s)).decodePointHex(t.G.toString("hex"));this.curve=e,this.g=r,this.n=n,this.h=o}function g(t,e){this._params=t,0===e[0]&&(e=e.slice(1)),this._pub=t.getCurve().decodePointHex(e.toString("hex"))}function y(t,e){this._params=t,this._priv=new f(o.mpNormalize(e))}d.prototype.getPublicKey=function(){return this._isPriv?this._key.toPublic():this._key},d.prototype.getKey=d.prototype.getPrivateKey=function(){return this._isPriv?this._key:void 0},d.prototype._keyCheck=function(t,e){if(i.object(t,"key"),e||o.assertCompatible(t,h,[1,3],"key"),o.assertCompatible(t,u,[1,4],"key"),t.type!==this._algo)throw new Error("A "+t.type+" key cannot be used in "+this._algo+" Diffie-Hellman");if(t.curve!==this._curve)throw new Error("A key from the "+t.curve+" curve cannot be used with a "+this._curve+" Diffie-Hellman");"dsa"===t.type&&(i.deepEqual(t.part.p,this._p,"DSA key prime does not match"),i.deepEqual(t.part.g,this._g,"DSA key generator does not match"))},d.prototype.setPrivateKey=d.prototype.setKey=function(t){var e;this._keyCheck(t),"dsa"===t.type?(this._dh.setPrivateKey(t.part.x.data),this._dh.setPublicKey(t.part.y.data)):"ecdsa"===t.type?l?(this._dh.setPrivateKey(t.part.d.data),this._dh.setPublicKey(t.part.Q.data)):this._priv=new y(this._ecParams,t.part.d.data):"curve25519"===t.type&&(e=t.part.k,t.part.k||(e=t.part.r),this._priv=e.data,0===this._priv[0]&&(this._priv=this._priv.slice(1)),this._priv=this._priv.slice(0,32)),this._key=t,this._isPriv=!0},d.prototype.computeSecret=function(t){if(this._keyCheck(t,!0),!this._isPriv)throw new Error("DH exchange has not been initialized with a private key yet");var e;if("dsa"===this._algo)return this._dh.computeSecret(t.part.y.data);if("ecdsa"===this._algo)return l?this._dh.computeSecret(t.part.Q.data):(e=new g(this._ecParams,t.part.Q.data),this._priv.deriveSharedSecret(e));if("curve25519"!==this._algo)throw new Error("Invalid algorithm: "+this._algo);for(e=t.part.A.data;0===e[0]&&32<e.length;)e=e.slice(1);return t=this._priv,i.strictEqual(e.length,32),i.strictEqual(t.length,32),t=c.box.before(new Uint8Array(e),new Uint8Array(t)),n.from(t)},d.prototype.generateKeys=d.prototype.generateKey=function(){var t,e,r,a=[];if("dsa"===this._algo)return this._dh.generateKeys(),a.push({name:"p",data:this._p.data}),a.push({name:"q",data:this._key.part.q.data}),a.push({name:"g",data:this._g.data}),a.push({name:"y",data:this._dh.getPublicKey()}),a.push({name:"x",data:this._dh.getPrivateKey()}),this._key=new h({type:"dsa",parts:a}),this._isPriv=!0,this._key;if("ecdsa"===this._algo)return l?(this._dh.generateKeys(),a.push({name:"curve",data:n.from(this._curve)}),a.push({name:"Q",data:this._dh.getPublicKey()}),a.push({name:"d",data:this._dh.getPrivateKey()})):(e=this._ecParams.getN(),t=new f(s.randomBytes(e.bitLength())),e=e.subtract(f.ONE),t=t.mod(e).add(f.ONE),e=this._ecParams.getG().multiply(t),t=n.from(t.toByteArray()),e=n.from(this._ecParams.getCurve().encodePointHex(e),"hex"),this._priv=new y(this._ecParams,t),a.push({name:"curve",data:n.from(this._curve)}),a.push({name:"Q",data:e}),a.push({name:"d",data:t})),this._key=new h({type:"ecdsa",curve:this._curve,parts:a}),this._isPriv=!0,this._key;if("curve25519"===this._algo)return r=c.box.keyPair(),t=n.from(r.secretKey),e=n.from(r.publicKey),t=n.concat([t,e]),i.strictEqual(t.length,64),i.strictEqual(e.length,32),a.push({name:"A",data:e}),a.push({name:"k",data:t}),this._key=new h({type:"curve25519",parts:a}),this._isPriv=!0,this._key;throw new Error("Invalid algorithm: "+this._algo)},m.prototype.getCurve=function(){return this.curve},m.prototype.getG=function(){return this.g},m.prototype.getN=function(){return this.n},m.prototype.getH=function(){return this.h},y.prototype.deriveSharedSecret=function(t){return i.ok(t instanceof g),t=t._pub.multiply(this._priv),n.from(t.getX().toBigInteger().toByteArray())}},function(t,e,r){t.exports={read:function(t,e){return h.read(t,e,"pkcs1")},readPkcs1:function(t,e,r){switch(t){case"RSA":if("public"===e)return function(t){var e=p(t,"modulus");t=p(t,"exponent");return new c({type:"rsa",parts:[{name:"e",data:t},{name:"n",data:e}]})}(r);if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e[0],0),p(t,"modulus")),p(t,"public exponent")),s=p(t,"private exponent"),n=p(t,"prime1"),a=p(t,"prime2"),o=p(t,"exponent1"),c=p(t,"exponent2");t=p(t,"iqmp");return new u({type:"rsa",parts:[{name:"n",data:e},{name:"e",data:r},{name:"d",data:s},{name:"iqmp",data:t},{name:"p",data:n},{name:"q",data:a},{name:"dmodp",data:o},{name:"dmodq",data:c}]})}(r);throw new Error("Unknown key type: "+e);case"DSA":if("public"===e)return function(t){var e=p(t,"y"),r=p(t,"p"),i=p(t,"q");t=p(t,"g");return new c({type:"dsa",parts:[{name:"y",data:e},{name:"p",data:r},{name:"q",data:i},{name:"g",data:t}]})}(r);if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e.readUInt8(0),0),p(t,"p")),p(t,"q")),s=p(t,"g"),n=p(t,"y");t=p(t,"x");return new u({type:"dsa",parts:[{name:"p",data:e},{name:"q",data:r},{name:"g",data:s},{name:"y",data:n},{name:"x",data:t}]})}(r);throw new Error("Unknown key type: "+e);case"EC":case"ECDSA":if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e.readUInt8(0),1),t.readString(s.Ber.OctetString,!0)),t.readSequence(160),l(t));i.string(r,"a known elliptic curve"),t.readSequence(161),t=t.readString(s.Ber.BitString,!0),t=o.ecNormalize(t),r={type:"ecdsa",parts:[{name:"curve",data:n.from(r)},{name:"Q",data:t},{name:"d",data:e}]};return new u(r)}(r);if("public"===e)return function(t){t.readSequence();for(var e,r=t.readOID(),u=(i.strictEqual(r,"1.2.840.10045.2.1","must be ecPublicKey"),t.readOID()),h=Object.keys(a.curves),l=0;l<h.length;++l){var p=h[l];if(a.curves[p].pkcs8oid===u){e=p;break}}return i.string(e,"a known ECDSA named curve"),r=t.readString(s.Ber.BitString,!0),r=o.ecNormalize(r),t={type:"ecdsa",parts:[{name:"curve",data:n.from(e)},{name:"Q",data:r}]},new c(t)}(r);throw new Error("Unknown key type: "+e);case"EDDSA":case"EdDSA":if("private"===e)return function(t){var e=p(t,"version"),r=(e=(i.strictEqual(e.readUInt8(0),1),t.readString(s.Ber.OctetString,!0)),t.readSequence(160),t.readOID());i.strictEqual(r,"1.3.101.112","the ed25519 curve identifier"),t.readSequence(161),r=o.readBitString(t),t={type:"ed25519",parts:[{name:"A",data:o.zeroPadToLength(r,32)},{name:"k",data:e}]};return new u(t)}(r);throw new Error(e+" keys not supported with EdDSA");default:throw new Error("Unknown key algo: "+t)}},write:function(t,e){return h.write(t,e,"pkcs1")},writePkcs1:function(t,e){switch(t.startSequence(),e.type){case"rsa":(u.isPrivateKey(e)?function(t,e){var r=n.from([0]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.n.data,s.Ber.Integer),t.writeBuffer(e.part.e.data,s.Ber.Integer),t.writeBuffer(e.part.d.data,s.Ber.Integer),t.writeBuffer(e.part.p.data,s.Ber.Integer),t.writeBuffer(e.part.q.data,s.Ber.Integer),e.part.dmodp&&e.part.dmodq||o.addRSAMissing(e),t.writeBuffer(e.part.dmodp.data,s.Ber.Integer),t.writeBuffer(e.part.dmodq.data,s.Ber.Integer),t.writeBuffer(e.part.iqmp.data,s.Ber.Integer)}:function(t,e){t.writeBuffer(e.part.n.data,s.Ber.Integer),t.writeBuffer(e.part.e.data,s.Ber.Integer)})(t,e);break;case"dsa":(u.isPrivateKey(e)?function(t,e){var r=n.from([0]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.p.data,s.Ber.Integer),t.writeBuffer(e.part.q.data,s.Ber.Integer),t.writeBuffer(e.part.g.data,s.Ber.Integer),t.writeBuffer(e.part.y.data,s.Ber.Integer),t.writeBuffer(e.part.x.data,s.Ber.Integer)}:function(t,e){t.writeBuffer(e.part.y.data,s.Ber.Integer),t.writeBuffer(e.part.p.data,s.Ber.Integer),t.writeBuffer(e.part.q.data,s.Ber.Integer),t.writeBuffer(e.part.g.data,s.Ber.Integer)})(t,e);break;case"ecdsa":(u.isPrivateKey(e)?function(t,e){var r=n.from([1]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.d.data,s.Ber.OctetString),t.startSequence(160),r=e.part.curve.data.toString(),r=a.curves[r].pkcs8oid,i.string(r,"a known ECDSA named curve"),t.writeOID(r),t.endSequence(),t.startSequence(161),r=o.ecNormalize(e.part.Q.data,!0);t.writeBuffer(r,s.Ber.BitString),t.endSequence()}:function(t,e){t.startSequence(),t.writeOID("1.2.840.10045.2.1");var r=e.part.curve.data.toString();r=a.curves[r].pkcs8oid,i.string(r,"a known ECDSA named curve"),t.writeOID(r),t.endSequence(),r=o.ecNormalize(e.part.Q.data,!0);t.writeBuffer(r,s.Ber.BitString)})(t,e);break;case"ed25519":u.isPrivateKey(e)?function(t,e){var r=n.from([1]);t.writeBuffer(r,s.Ber.Integer),t.writeBuffer(e.part.k.data,s.Ber.OctetString),t.startSequence(160),t.writeOID("1.3.101.112"),t.endSequence(),t.startSequence(161),o.writeBitString(t,e.part.A.data),t.endSequence()}(t,e):function(){throw new Error("Public keys are not supported for EdDSA PKCS#1")}();break;default:throw new Error("Unknown key algo: "+e.type)}t.endSequence()}};var i=r(10),s=r(57),n=r(14).Buffer,a=r(31),o=r(25),c=r(23),u=r(24),h=r(67),l=r(106).readECDSACurve;function p(t,e){return i.strictEqual(t.peek(),s.Ber.Integer,e+" is not an Integer"),o.mpNormalize(t.readString(s.Ber.Integer,!0))}},function(t,e,r){t.exports={read:function(t,e){"string"!=typeof t&&(i.buffer(t,"buf"),t=t.toString("ascii"));var r=t.split("\n");if(r[0].match(/^Private-key-format\: v1/)){t=r[1].split(" ");var c=parseInt(t[1],10);t=t[2];if(u[c])return function(t,e){if(u[t].match(/^RSA-/))return function(t){var e={};t.forEach((function(t){"Modulus:"===t.split(" ")[0]?e.n=h(t):"PublicExponent:"===t.split(" ")[0]?e.e=h(t):"PrivateExponent:"===t.split(" ")[0]?e.d=h(t):"Prime1:"===t.split(" ")[0]?e.p=h(t):"Prime2:"===t.split(" ")[0]?e.q=h(t):"Exponent1:"===t.split(" ")[0]?e.dmodp=h(t):"Exponent2:"===t.split(" ")[0]?e.dmodq=h(t):"Coefficient:"===t.split(" ")[0]&&(e.iqmp=h(t))})),t={type:"rsa",parts:[{name:"e",data:o.mpNormalize(e.e)},{name:"n",data:o.mpNormalize(e.n)},{name:"d",data:o.mpNormalize(e.d)},{name:"p",data:o.mpNormalize(e.p)},{name:"q",data:o.mpNormalize(e.q)},{name:"dmodp",data:o.mpNormalize(e.dmodp)},{name:"dmodq",data:o.mpNormalize(e.dmodq)},{name:"iqmp",data:o.mpNormalize(e.iqmp)}]};return new a(t)}(e);if("ECDSA-P384-SHA384"!==u[t]&&"ECDSA-P256-SHA256"!==u[t])throw new Error("Unsupported algorithm: "+u[t]);e=s.from(e[0].split(" ")[1],"base64");var r="nistp384",i=384;return"ECDSA-P256-SHA256"===u[t]&&(r="nistp256",i=256),t=o.publicFromPrivateECDSA(r,e).part.Q.data,i={type:"ecdsa",curve:r,size:i,parts:[{name:"curve",data:s.from(r)},{name:"d",data:e},{name:"Q",data:t}]},new a(i)}(c,r.slice(2));throw new Error("Unsupported algorithm: "+t)}for(var l=0;r[l].match(/^\;/);)l++;if(!r[l].match(/\. IN KEY /)&&!r[l].match(/\. IN DNSKEY /)||0!==r[l+1].length)throw new Error("Cannot parse dnssec key");return function(t){t=t.split(" ");var e=parseInt(t[5],10);if(!u[e])throw new Error("Unsupported algorithm: "+e);if(t=t.slice(6,t.length).join(),t=s.from(t,"base64"),u[e].match(/^RSA-/)){if(3!=(i=t.readUInt8(0))&&1!=i)throw new Error("Cannot parse dnssec key: unsupported exponent length");var r=t.slice(1,i+1),i=(r=o.mpNormalize(r),t.slice(1+i)),a=(i=o.mpNormalize(i),{type:"rsa",parts:[]});return a.parts.push({name:"e",data:r}),a.parts.push({name:"n",data:i}),new n(a)}if("ECDSA-P384-SHA384"!==u[e]&&"ECDSA-P256-SHA256"!==u[e])throw new Error("Unsupported algorithm: "+u[e]);return r="nistp384",i=384,u[e].match(/^ECDSA-P256-SHA256/)&&(r="nistp256",i=256),a={type:"ecdsa",curve:r,size:i,parts:[{name:"curve",data:s.from(r)},{name:"Q",data:o.ecNormalize(t)}]},new n(a)}(r[l])},write:function(t,e){if(a.isPrivateKey(t)){if("rsa"===t.type)return function(t,e){t.part.dmodp&&t.part.dmodq||o.addRSAMissing(t);var r="";r=(r+="Private-key-format: v1.3\n")+"Algorithm: "+function(t){if(t&&t.hashAlgo&&"sha1"!==t.hashAlgo){if("sha256"===t.hashAlgo)return"8 (RSASHA256)";if("sha512"===t.hashAlgo)return"10 (RSASHA512)";throw new Error("Unknown or unsupported hash: "+t.hashAlgo)}return"5 (RSASHA1)"}(e)+"\n",e=o.mpDenormalize(t.part.n.data),r+="Modulus: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.e.data),r+="PublicExponent: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.d.data),r+="PrivateExponent: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.p.data),r+="Prime1: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.q.data),r+="Prime2: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.dmodp.data),r+="Exponent1: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.dmodq.data),r+="Exponent2: "+e.toString("base64")+"\n",e=o.mpDenormalize(t.part.iqmp.data),r+="Coefficient: "+e.toString("base64")+"\n",t=new Date;return r=(r=(r+="Created: "+l(t)+"\n")+"Publish: "+l(t)+"\n")+"Activate: "+l(t)+"\n",s.from(r,"ascii")}(t,e);if("ecdsa"===t.type)return function(t){var e="";if(e+="Private-key-format: v1.3\n","nistp256"===t.curve)e+="Algorithm: 13 (ECDSAP256SHA256)\n";else{if("nistp384"!==t.curve)throw new Error("Unsupported curve");e+="Algorithm: 14 (ECDSAP384SHA384)\n"}return e+="PrivateKey: "+(t=t.part.d.data.toString("base64"))+"\n",e=(e=(e+="Created: "+l(t=new Date)+"\n")+"Publish: "+l(t)+"\n")+"Activate: "+l(t)+"\n",s.from(e,"ascii")}(t);throw new Error("Unsupported algorithm: "+t.type)}throw n.isKey(t)?new Error('Format "dnssec" only supports writing private keys'):new Error("key is not a Key or PrivateKey")}};var i=r(10),s=r(14).Buffer,n=r(23),a=r(24),o=r(25),c=(r(89),r(182),{"rsa-sha1":5,"rsa-sha256":8,"rsa-sha512":10,"ecdsa-p256-sha256":13,"ecdsa-p384-sha384":14}),u={};function h(t){return s.from(t.split(" ")[1],"base64")}function l(t){var e=t.getFullYear()+""+(t.getMonth()+1)+t.getUTCDate();return(e+=""+t.getUTCHours()+t.getUTCMinutes())+t.getUTCSeconds()}Object.keys(c).forEach((function(t){u[c[t]]=t.toUpperCase()}))},function(t,e,r){t.exports={read:function(t,e){for(var r,a,p=t.toString("ascii").split(/[\r\n]+/),f=!1,d=0;d<p.length;)if((r=l(p[d++]))&&(a={"putty-user-key-file-2":2,"putty-user-key-file-3":3}[r[0].toLowerCase()])){f=!0;break}if(!f)throw new Error("No PuTTY format first line found");t=r[1];var m=(r=l(p[d++]),i.equal(r[0].toLowerCase(),"encryption"),r[1]),g=(r=l(p[d++]),i.equal(r[0].toLowerCase(),"comment"),r[1]),y=(r=l(p[d++]),i.equal(r[0].toLowerCase(),"public-lines"),parseInt(r[1],10));if(!isFinite(y)||y<0||y>p.length)throw new Error("Invalid public-lines count");var v,b=s.from(p.slice(d,d+y).join(""),"base64"),w=n.algToKeyType(t);if((b=n.read(b)).type!==w)throw new Error("Outer key algorithm mismatch");if(p[d+=y]){if(r=l(p[d++]),i.equal(r[0].toLowerCase(),"private-lines"),y=parseInt(r[1],10),!isFinite(y)||y<0||y>p.length)throw new Error("Invalid private-lines count");if(y=s.from(p.slice(d,d+y).join(""),"base64"),"none"!==m&&3===a)throw new Error("Encrypted keys arenot supported for PuTTY format version 3");if("aes256-cbc"===m){if(!e.passphrase)throw new h.KeyEncryptedError(e.filename,"PEM");m=s.alloc(16,0),(e=c.createDecipheriv("aes-256-cbc",function(t){var e=c.createHash("sha1").update(s.concat([s.from([0,0,0,0]),s.from(t)])).digest();t=c.createHash("sha1").update(s.concat([s.from([0,0,0,1]),s.from(t)])).digest();return s.concat([e,t]).slice(0,32)}(e.passphrase),m)).setAutoPadding(!1),y=s.concat([e.update(y),e.final()])}if((b=new u(b)).type!==w)throw new Error("Outer key algorithm mismatch");if(m=new o({buffer:y}),"ssh-dss"===t)v=[{name:"x",data:m.readBuffer()}];else if("ssh-rsa"===t)v=[{name:"d",data:m.readBuffer()},{name:"p",data:m.readBuffer()},{name:"q",data:m.readBuffer()},{name:"iqmp",data:m.readBuffer()}];else if(t.match(/^ecdsa-sha2-nistp/))v=[{name:"d",data:m.readBuffer()}];else{if("ssh-ed25519"!==t)throw new Error("Unsupported PPK key type: "+t);v=[{name:"k",data:m.readBuffer()}]}b=new u({type:b.type,parts:b.parts.concat(v)})}return b.comment=g,b},write:function(t,e){var r,o;if(i.object(t),a.isKey(t))return r=n.keyTypeToAlg(t),o=n.write(t),t=t.comment||"",(o=function(t){for(var e=[],r=0;r<t.length;)e.push(t.slice(r,r+64)),r+=64;return e}(o.toString("base64"))).unshift("Public-Lines: "+o.length),o.unshift("Comment: "+t),o.unshift("Encryption: none"),o.unshift("PuTTY-User-Key-File-2: "+r),s.from(o.join("\n")+"\n");throw new Error("Must be a public key")}};var i=r(10),s=r(14).Buffer,n=r(68),a=r(23),o=r(89),c=r(8),u=r(24),h=r(51);function l(t){var e=t.indexOf(":");if(-1===e)return null;var r=t.slice(0,e);for(++e;" "===t[e];)++e;return[r,t.slice(e)]}},function(t,e){function r(t){this.dict=t||{}}r.prototype.set=function(t,e,r){var i,s;if("object"!=typeof t)return void 0===r&&(r=!0),i=this.has(t),!r&&i?this.dict[i]=this.dict[i]+","+e:this.dict[i||t]=e,i;for(s in t)this.set(s,t[s],e)},r.prototype.has=function(t){for(var e=Object.keys(this.dict),r=(t=t.toLowerCase(),0);r<e.length;r++)if(e[r].toLowerCase()===t)return e[r];return!1},r.prototype.get=function(t){t=t.toLowerCase();var e,r,i=this.dict;return Object.keys(i).forEach((function(s){r=s.toLowerCase(),t===r&&(e=i[s])})),e},r.prototype.swap=function(t){var e=this.has(t);if(e!==t){if(!e)throw new Error('There is no header than matches "'+t+'"');this.dict[t]=this.dict[e],delete this.dict[e]}},r.prototype.del=function(t){var e=this.has(t);return delete this.dict[e||t]},t.exports=function(t){return new r(t)},t.exports.httpify=function(t,e){var i=new r(e);return t.setHeader=function(t,e,r){if(void 0!==e)return i.set(t,e,r)},t.hasHeader=function(t){return i.has(t)},t.getHeader=function(t){return i.get(t)},t.removeHeader=function(t){return i.del(t)},t.headers=i.dict,i}},function(t,e,r){"use strict";var i=r(505),s=r(188),n=r(90),a=r(300),o=r(507);function c(t,e,r){var i,s,n,o=this._refs[r];if("string"==typeof o){if(!this._refs[o])return c.call(this,t,e,o);o=this._refs[o]}return(o=o||this._schemas[r])instanceof a?f(o.schema,this._opts.inlineRefs)?o.schema:o.validate||this._compile(o):((o=u.call(this,e,r))&&(i=o.schema,e=o.root,n=o.baseId),i instanceof a?s=i.validate||t.call(this,i.schema,e,void 0,n):void 0!==i&&(s=f(i,this._opts.inlineRefs)?i:t.call(this,i,e,void 0,n)),s)}function u(t,e){var r=i.parse(e),s=m(r),n=d(this._getId(t.schema));if(0===Object.keys(t.schema).length||s!==n){s=y(s);var o=this._refs[s];if("string"==typeof o)return function(t,e,r){var i,s;if(e=u.call(this,t,e))return i=e.schema,s=e.baseId,t=e.root,(e=this._getId(i))&&(s=v(s,e)),l.call(this,r,s,i,t)}.call(this,t,o,r);if(o instanceof a)o.validate||this._compile(o);else{if(!((o=this._schemas[s])instanceof a))return;if(o.validate||this._compile(o),s==y(e))return{schema:o,root:t,baseId:n}}if(!(t=o).schema)return;n=d(this._getId(t.schema))}return l.call(this,r,n,t.schema,t)}(t.exports=c).normalizeId=y,c.fullPath=d,c.url=v,c.ids=function(t){var e=y(this._getId(t)),r={"":e},a={"":d(e,!1)},c={},u=this;return o(t,{allKeys:!0},(function(t,e,o,h,l,p,f){if(""!==e){var d=u._getId(t),m=r[h];h=a[h]+"/"+l;if(void 0!==f&&(h+="/"+("number"==typeof f?f:n.escapeFragment(f))),"string"==typeof d)if(d=m=y(m?i.resolve(m,d):d),(l="string"==typeof(l=u._refs[d])?u._refs[l]:l)&&l.schema){if(!s(t,l.schema))throw new Error('id "'+d+'" resolves to more than one schema')}else if(d!=y(h))if("#"==d[0]){if(c[d]&&!s(t,c[d]))throw new Error('id "'+d+'" resolves to more than one schema');c[d]=t}else u._refs[d]=h;r[e]=m,a[e]=h}})),c},c.inlineRef=f,c.schema=u;var h=n.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function l(t,e,r,i){if(t.fragment=t.fragment||"","/"==t.fragment.slice(0,1)){for(var s=t.fragment.split("/"),a=1;a<s.length;a++){var o=s[a];if(o){if(void 0===(r=r[o=n.unescapeFragment(o)]))break;h[o]||((o=this._getId(r))&&(e=v(e,o)),r.$ref&&(o=v(e,r.$ref),(o=u.call(this,i,o))&&(r=o.schema,i=o.root,e=o.baseId)))}}return void 0!==r&&r!==i.schema?{schema:r,root:i,baseId:e}:void 0}}var p=n.toHash(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum"]);function f(t,e){return!1!==e&&(void 0===e||!0===e?function t(e){var r;if(Array.isArray(e)){for(var i=0;i<e.length;i++)if("object"==typeof(r=e[i])&&!t(r))return!1}else for(var s in e){if("$ref"==s)return!1;if("object"==typeof(r=e[s])&&!t(r))return!1}return!0}(t):e?function t(e){var r,i=0;if(Array.isArray(e)){for(var s=0;s<e.length;s++)if("object"==typeof(r=e[s])&&(i+=t(r)),i==1/0)return 1/0}else for(var n in e){if("$ref"==n)return 1/0;if(p[n])i++;else if("object"==typeof(r=e[n])&&(i+=t(r)+1),i==1/0)return 1/0}return i}(t)<=e:void 0)}function d(t,e){return!1!==e&&(t=y(t)),m(i.parse(t))}function m(t){return i.serialize(t).split("#")[0]+"#"}var g=/#\/?$/;function y(t){return t?t.replace(g,""):""}function v(t,e){return e=y(e),i.resolve(t,e)}},function(t,e,r){"use strict";t.exports=function t(e,r){if(e===r)return!0;if(e&&r&&"object"==typeof e&&"object"==typeof r){if(e.constructor!==r.constructor)return!1;var i,s,n;if(Array.isArray(e)){if((i=e.length)!=r.length)return!1;for(s=i;0!=s--;)if(!t(e[s],r[s]))return!1}else{if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if((i=(n=Object.keys(e)).length)!==Object.keys(r).length)return!1;for(s=i;0!=s--;)if(!Object.prototype.hasOwnProperty.call(r,n[s]))return!1;for(s=i;0!=s--;){var a=n[s];if(!t(e[a],r[a]))return!1}}return!0}return e!=e&&r!=r}},function(t,e,r){"use strict";var i=r(187);function s(t,e,r){this.message=r||s.message(t,e),this.missingRef=i.url(t,e),this.missingSchema=i.normalizeId(i.fullPath(this.missingRef))}function n(t){return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t}t.exports={Validation:n((function(t){this.message="validation failed",this.errors=t,this.ajv=this.validation=!0})),MissingRef:n(s)},s.message=function(t,e){return"can't resolve reference "+e+" from id "+t}},function(t,e,r){var i=r(308),s=r(309);t.exports=function(t,e,r){var n=e&&r||0,a=("string"==typeof t&&(e="binary"===t?new Array(16):null,t=null),(t=t||{}).random||(t.rng||i)());if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,e)for(var o=0;o<16;++o)e[n+o]=a[o];return e||s(a)}},function(t,e,r){
|
|
412
412
|
/*!
|
|
413
413
|
* selector.js
|
|
414
414
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -426,11 +426,11 @@ function i(t){let e=null;var r=i.list[t.contract.options.type];return r?new(e=r.
|
|
|
426
426
|
*
|
|
427
427
|
* @note 为了让打包程序正常工作,没有使用自动化方案来引入类文件
|
|
428
428
|
*/
|
|
429
|
-
const i=r(5).ContractType;t.exports=function(t){if(!t)return r(192);switch(t.oper){case i.cpRegister:return r(195);case i.cpChange:return r(197);case i.coinbase:return r(198);case i.contractPromise:return r(199);case i.scRegister:return r(202);case i.scUpdate:return r(203);case i.scState:return r(204);case i.scRun:return r(205);case i.scNotify:return r(211);case i.propFound:return r(212);case i.vote:return r(213);case i.propSale:return r(214);case i.payOrder:return r(215);case i.notify:return r(216);case i.contractCreate:return r(217);case i.contractExecute:return r(218);case i.stock:return r(219);case i.guideRegister:return r(220);case i.erIssue:return r(221);case i.erAbolish:return r(222);case i.enchanceCp:return r(223);case i.x509Issue:return r(224);case i.x509Abolish:return r(225);default:try{return r(611)("./"+t.oper)}catch(t){return r(11)}}}},function(t,e,r){var i=r(11);const s=r(
|
|
429
|
+
const i=r(5).ContractType;t.exports=function(t){if(!t)return r(192);switch(t.oper){case i.cpRegister:return r(195);case i.cpChange:return r(197);case i.coinbase:return r(198);case i.contractPromise:return r(199);case i.scRegister:return r(202);case i.scUpdate:return r(203);case i.scState:return r(204);case i.scRun:return r(205);case i.scNotify:return r(211);case i.propFound:return r(212);case i.vote:return r(213);case i.propSale:return r(214);case i.payOrder:return r(215);case i.notify:return r(216);case i.contractCreate:return r(217);case i.contractExecute:return r(218);case i.stock:return r(219);case i.guideRegister:return r(220);case i.erIssue:return r(221);case i.erAbolish:return r(222);case i.enchanceCp:return r(223);case i.x509Issue:return r(224);case i.x509Abolish:return r(225);default:try{return r(611)("./"+t.oper)}catch(t){return r(11)}}}},function(t,e,r){var i=r(11);const s=r(21).nestingCodes,n=r(119);t.exports=class extends i{async insert(){let t=this.getOpt();for(let r=0;r<t.tx.outputs.length;r++){var e=""+t.hash+r;t.env.middleHashMem.has(e)||this.setOptIndex(t,r)&&(await n(t).insert(),t.env.middleHashMem.add(e))}}async erase(){let t=this.getOpt();for(let e=0;e<t.tx.outputs.length;e++)t.env.middleHashMem.delete(""+t.hash+e),this.setOptIndex(t,e)&&await n(t).erase()}async confirm(){let t=this.getOpt();for(let r=0;r<t.tx.outputs.length;r++){var e=""+t.hash+r;t.env.middleHashChain.has(e)||this.setOptIndex(t,r)&&(await n(t).confirm(),t.env.middleHashChain.add(e))}}async unconfirm(){let t=this.getOpt();for(let e=0;e<t.tx.outputs.length;e++)t.env.middleHashChain.delete(""+t.hash+e),this.setOptIndex(t,e)&&await n(t).unconfirm()}async verify(){var t=this.getOpt();for(let e=0;e<t.tx.outputs.length;e++)if(this.setOptIndex(t,e)&&!await n(t).verify())return!1;return!0}getOpt(){return{env:this.options.env,tx:this.options.tx,block:this.options.block,height:this.options.coinbaseHeight,hash:this.options.hash}}setOptIndex(t,e){return t.i=e,t.output=t.tx.outputs[e],t.type=t.output.getReturnType(),t.data=t.output.getReturnData(s),!!t.data}}},function(t,e,r){const i=r(5).PropStatus;var s=r(58);const n=r(7),a=r(150);t.exports=class extends s{async confirm(){let{env:t,i:e,output:r,data:s,hash:n,tx:a}=this.options;var o=await t.propList.getVp(s.pid);o&&(o.current.hash!=n||o.current.index!=e)||(s.current={hash:n,index:e,address:r.getAddress().toString()},s.height=0<t.curHeight?t.curHeight+1:0,s.pst=i.Ready,s.gold=r.value,await t.propList.setVp(s,a))}async unconfirm(){let{env:t,i:e,data:r,hash:i}=this.options;var s=await t.propList.getVp(r.pid);s&&s.current.hash==i&&s.current.index==e&&await t.propList.delVp(s)}async verify(){let{env:t,i:e,output:r,data:i,hash:s}=this.options;if(!a.unittest){var o=t.cpList.getItem(i.cid);if(!o||o.current.address!=r.getAddress().toString())return!1}return!(r.value<n.MINPROPVALUE||t.network.stockReg.test(i.pid)||t.network.tokenReg.test(i.pid)||(o=await t.propList.getVp(i.pid))&&(o.current.hash!=s||o.current.index!=e))}}},function(t,e,r){const i=r(0),s=r(21).opcodes,n=r(39).broadcast;r(134).vpItem;var a=r(58);const{ContractEnvType:o,PropStatus:c}=r(5);t.exports=class extends a{async confirm(){let{env:t,i:e,output:r,data:i,hash:a,tx:u,block:h}=this.options,l=await t.propList.getVp(i.pid);if(l&&l.current.hash==i.prev.hash&&l.current.index==i.prev.index){var p,f=l.current.address,d=r.getAddress().toString();if(t.setGuider(f,i.cid,d),l.current={hash:a,index:e,address:d},l.height=t.curHeight,l.pst=c.Ready,await t.propList.setVp(l,u),t.network.stockReg.test(l.pid)){let e=t.cpList.getItem(l.cid);e&&(e.status=1,await t.cpList.addItem(e))}t.mode==o.Wallet&&(p={pid:l.pid,address:l.current.address,wid:l.wid,account:l.account,time:h.time,height:l.height,cid:l.cid},t.emit("prop/receive",p),n("prop/receive",p)),t.mode==o.Block&&l.cid==t.network.genesisId&&(t.propList.getVpByAddress(f).count<=0&&t.voteMgr.delTokenAddress(f),t.voteMgr.addTokenAddress(d));let g=0,y=i;for(;r&&r.getReturnType(s.OP_PROPEXCHANGE)&&g++<2e3;){let e=y.prev;t.middleHashChain.add(e.hash+e.index.toString());var m=await t.finder(e.hash);if(!m)break;if(r=m.outputs[e.index],!(y=r.getReturnData())||!y.prev||t.middleHashChain.has(y.prev.hash+y.prev.index.toString()))break}}}async unconfirm(){let{env:t,data:e}=this.options;var r,i,n=await t.finder(e.prev.hash);if(n&&n.outputs[e.prev.index]){let a=n.outputs[e.prev.index];a.getReturnData([s.OP_PROPEXCHANGE,s.OP_PROPCREATE])&&(r=a.getAddress().toString(),i=ori.current.address,t.unsetGuider(r,e.cid,i),ori.current.hash=e.prev.hash,ori.current.index=e.prev.index,ori.current.address=r,await t.propList.setVp(ori,n),t.mode==o.Block&&ori.cid==t.network.genesisId&&(t.propList.getVpByAddress(i).count<=0&&t.voteMgr.delTokenAddress(i),t.voteMgr.addTokenAddress(r)))}}async verify(){let{env:t,tx:e,i:r,data:s}=this.options;i.strictEqual(s.prev.hash,e.inputs[r].prevout.hash),i.strictEqual(s.prev.index,e.inputs[r].prevout.index);var n=await t.propList.getVp(s.pid);return!!n&&(n.current.hash!=s.prev.hash&&t.logger.warning("not equal:",s.pid,n.current.hash,s.prev.hash),i(n.current.hash==s.prev.hash),i(n.current.index==s.prev.index),!0)}}},function(t,e,r){var i=r(11);const s=r(5).ContractEnvType,n=r(38).VerifyError,a=r(21).opcodes,o=r(196);t.exports=class extends i{async insert(){let t=this.options.env,e=this.options.tx;var r=e.hash("hex");let i=this.data;i.current={hash:r,index:0,address:e.outputs[0].getAddress().toString()},i.height=-1,await t.cpMemList.addItem(i)}async erase(){let t=this.options.env;var e=this.data;await t.cpMemList.delItem(e)}async confirm(){let t=this.options.env,e=this.options.tx;var r=e.hash("hex");let i=this.data;i.current={hash:r,index:0,address:e.outputs[0].getAddress().toString()},i.height=this.options.coinbaseHeight,i.status=1,await t.cpList.addItem(i);for(let i=1;i<=Math.min(10,e.outputs.length-1);i++){let s=e.outputs[i].getReturnData(a.OP_PROPCREATE);if(s){t.network.stockReg.test(s.pid)&&(s.current={hash:r,index:i,address:e.outputs[i].getAddress().toString()},s.gold=e.outputs[i].value,s.height=this.options.coinbaseHeight,await t.propList.setVp(s,e))}}}async unconfirm(){let t=this.options.env;var e=this.data;let r=this.options.tx;await t.cpList.delItem(e);for(let e=1;e<=Math.min(10,r.outputs.length-1);e++){var i=r.outputs[e].getReturnData(a.OP_PROPCREATE);if(i){t.network.stockReg.test(i.pid)&&await t.propList.delVp(i)}}}async verify(){let t=this.options.env;var e=this.options.tx;if(!this.data)throw new n(e,"invalid","null cpRegister data",100);var r=o.verifyDataFormat(this.data);if(r)throw new n(e,"invalid",r,100);if(r=this.mode!=s.Mempool,await t.rpcExecute({method:"canExecute",params:[{confirm:r,cid:this.data.cid,name:this.data.name,oper:this.data.oper}]}))return!0;throw new n(e,"invalid info on "+this.data.oper,"cp.create",0)}}},function(t,e,r){"use strict";
|
|
430
430
|
/*!
|
|
431
431
|
* cpHelper.js
|
|
432
432
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
433
|
-
*/const i=r(54);t.exports=class{static verifyDataFormat(t){return t.name&&!/^(?![_.-])(?!.*?[_.-]$)[.a-zA-Z0-9_-]{4,40}$/.test(t.name)?"error name format, length 4~40":t.grate&&(t.grate<0||50<=t.grate)?"error grate value: 0~49":t.cls&&!/^(?![_.-])(?!.*?[_.-]$)[.a-zA-Z0-9_-]{2,20}$/.test(t.cls)?"error class format, length 2~20":!t.ip||i.isIPv4(i.toBuffer(t.ip))||i.isIPv6(i.toBuffer(t.ip))?null:"error ip format"}}},function(t,e,r){const i=r(0);var s=r(11);const n=r(5).ContractEnvType,a=r(38).VerifyError,o=r(
|
|
433
|
+
*/const i=r(54);t.exports=class{static verifyDataFormat(t){return t.name&&!/^(?![_.-])(?!.*?[_.-]$)[.a-zA-Z0-9_-]{4,40}$/.test(t.name)?"error name format, length 4~40":t.grate&&(t.grate<0||50<=t.grate)?"error grate value: 0~49":t.cls&&!/^(?![_.-])(?!.*?[_.-]$)[.a-zA-Z0-9_-]{2,20}$/.test(t.cls)?"error class format, length 2~20":!t.ip||i.isIPv4(i.toBuffer(t.ip))||i.isIPv6(i.toBuffer(t.ip))?null:"error ip format"}}},function(t,e,r){const i=r(0);var s=r(11);const n=r(5).ContractEnvType,a=r(38).VerifyError,o=r(21).opcodes,c=r(196);t.exports=class extends s{async insert(){let t=this.options.env,e=this.options.tx;var r=e.hash("hex");let i=e.outputs[0],s=this.data;s.current={hash:r,index:0,address:i.getAddress().toString()},s.height=-1,t.cpMemList.addItem(s),(r=await t.finder(s.prev.hash))&&r.outputs[s.prev.index]&&(r=(i=r.outputs[s.prev.index]).getReturnData([o.OP_CPCHANGE,o.OP_CPREGISTER]))&&r.name!=s.name&&t.cpMemList.removeNameIndex(r.name)}async erase(){let t=this.options.env;var e=this.data,r=(e=(t.cpMemList.delItem(e),e.prev),await t.getExtendTX(e.hash));if(r){let i=r.tx.outputs[e.index],s=i.getReturnData([o.OP_CPCHANGE,o.OP_CPREGISTER]);s&&(s.current={hash:e.hash,index:e.index,address:i.getAddress().toString()},s.height=r.height,t.cpMemList.addItem(s))}}async confirm(){let t=this.options.env,e=this.options.tx;var r=e.hash("hex");let i=e.outputs[0],s=this.data;s.current={hash:r,index:0,address:i.getAddress().toString()},s.height=this.options.coinbaseHeight,t.cpList.addItem(s),(r=await t.finder(s.prev.hash))&&r.outputs[s.prev.index]&&(r=(i=r.outputs[s.prev.index]).getReturnData([o.OP_CPCHANGE,o.OP_CPREGISTER]))&&r.name!=s.name&&t.cpList.removeNameIndex(r.name)}async unconfirm(){let t=this.options.env;var e=this.data,r=(e=(t.cpList.delItem(e),e.prev),await t.getExtendTX(e.hash));if(r){let i=r.tx.outputs[e.index],s=i.getReturnData([o.OP_CPCHANGE,o.OP_CPREGISTER]);s&&(s.current={hash:e.hash,index:e.index,address:i.getAddress().toString()},s.height=r.height,t.cpList.addItem(s))}}async verify(){let t=this.options.env;var e=this.options.tx,r=this.data;if(!r)throw new a(e,"invalid","null cpChange data",100);if(u=c.verifyDataFormat(this.data))throw new a(e,"invalid",u,100);i.strictEqual(r.prev.hash,e.inputs[0].prevout.hash),i.strictEqual(r.prev.index,e.inputs[0].prevout.index),u=await t.finder(r.prev.hash),i(u);let s=u.outputs[r.prev.index];i(s);var u=s.getReturnData([o.OP_CPREGISTER,o.OP_CPCHANGE]),h=(i(u),i(u.cid===r.cid),this.mode!=n.Mempool);if(await t.rpcExecute({method:"canExecute",params:[{confirm:h,cid:r.cid,name:u.name,oper:r.oper}]}))return!0;throw new a(e,"invalid info on "+r.oper,"cp manager",0)}}},function(t,e,r){const i=r(0),s=r(38).VerifyError;var n=r(11);const{BlockFinalType:a,ContractEnvType:o}=r(5),c=r(62).verifyData;t.exports=class extends n{async confirm(){if(this.mode==o.Block){let t=this.options.env;await t.voteMgr.calcBlock(this.data.data.addr,!0)}}async unconfirm(){if(this.mode==o.Block){let t=this.options.env;await t.voteMgr.calcBlock(this.data.data.addr,!1)}}async verify(){if(this.mode!=o.Block)return null;let t=this.options.env;if(i.strictEqual(!0,c(this.data)),i(this.data.data.addr,this.options.block.txs[0].outputs[0].getAddress().toString()),(await t.voteMgr.checkVote(this.data.data.addr)).result)return!0;throw new s(this.options.block,"invalid","bad-coinbase address invalid",100)}isBlockFinal(){return a.Final}}},function(t,e,r){const i=r(578),s=r(91),n=r(92);var a=r(11);const{BlockFinalType:o,ContractType:c,ContractStatus:u,ContractEnvType:h}=r(5),l=r(110),p=r(21).opcodes;t.exports=class extends a{async confirm(){let t=this.options.env;return this.data.current={hash:this.options.hash,index:0},this.data.raw=this.options.raw,await t.transactionList.promiseContract(this.data,!0),0<t.network.txcheckpoint.getCheck(this.data.type).length&&t.network.txchecktime[this.data.type]&&t.autoTaskMgr.addTask(new l(t.network.txcheckpoint,this.data),t.network.txchecktime[this.data.type]),!0}async unconfirm(){let t=this.options.env;await t.transactionList.delTransContract(this.data)}async verify(){let t=this.options.env,e=this.options.facade;i(1<this.options.tx.outputs.length);var r=this.options.tx.outputs[1].script.code;if(i.strictEqual(r[0].value,p.OP_PROMISE),i.strictEqual(r[2].value,p.OP_DROP),i.strictEqual(r[3].value,p.OP_GREATERTHAN),i.strictEqual(r[4].value,p.OP_IF),i.bufferEqual(r[5].data,Buffer.from(this.data.bob,"hex")),i.strictEqual(r[6].value,p.OP_ELSE),i.bufferEqual(r[7].data,Buffer.from(this.data.ori.alice,"hex")),i.strictEqual(r[8].value,p.OP_ENDIF),i.strictEqual(r[9].value,p.OP_CHECKSIG),i.strictEqual(this.data.addr,this.data.ori.addr),i.strictEqual(this.data.type,this.data.ori.type),i.strictEqual(this.data.dst,this.data.ori.dst),i.strictEqual(this.data.period,this.data.ori.period),this.mode==h.Mempool&&(r=await t.finder(this.data.prevhash))){var a=await e.FactoryOfContract({tx:r,env:t});if(!a.data||a.data.oper!==c.contractCreate)throw new s(n.errors.TYPE_ERROR,"Contract promise: Invalid ori tx type");await t.removeDoubleSpenders(r)}if(this.mode==h.Block){a=this.data;let e=this.options.env.transactionList.query(a.type,a.addr);if(e!==u.Expired&&e!==u.Confirmed){let r=new l(t.network.txcheckpoint,this.data);[,e]=await r.execute(t)}if((this.data.transStatus=e)!==u.Expired&&e!==u.Confirmed)return!1}return!0}isBlockFinal(){var t=this.options.env;return this.data.transStatus===u.Confirmed?o.Final:this.data.period<t.curHeight||this.data.transStatus===u.Expired?(this.data.transStatus=u.Expired,o.Final):o.Waiting}async checkFees(){return!0}}},function(t,e,r){"use strict";
|
|
434
434
|
/*!
|
|
435
435
|
* mnemonic.js - hd mnemonics for vallnet
|
|
436
436
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -439,7 +439,7 @@ const i=r(5).ContractType;t.exports=function(t){if(!t)return r(192);switch(t.ope
|
|
|
439
439
|
/*!
|
|
440
440
|
* mappedlock.js - lock and queue for vallnet
|
|
441
441
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
442
|
-
*/function i(t,e){this.resolve=t,this.reject=e}function s(){}t.exports=class{constructor(){this.jobs=new Map,this.busy=new Set,this.destroyed=!1}has(t){return this.busy.has(t)}hasPending(t){return this.jobs.has(t)}lock(t,e){return this.destroyed?Promise.reject(new Error("Lock is destroyed.")):null==t||e?Promise.resolve(s):this.busy.has(t)?new Promise((e,r)=>{this.jobs.has(t)||this.jobs.set(t,[]),this.jobs.get(t).push(new i(e,r))}):(this.busy.add(t),Promise.resolve(this.unlock(t)))}unlock(t){const e=this;return function r(){if(!e.destroyed&&e.busy.has(t)){e.busy.delete(t);const i=e.jobs.get(t);if(i){0===i.length&&e.jobs.delete(t);const s=i.shift();0===i.length&&e.jobs.delete(t),e.busy.add(t),s.resolve(r)}}}}destroy(){if(!this.destroyed){this.destroyed=!0;const t=this.jobs;this.busy=new Map,this.jobs=new Map;for(const e of t.values())for(const t of e)t.reject(new Error("MappedLock was destroyed."))}}}},function(t,e,r){var i=r(11);const s=r(5).ContractEnvType,n=r(38).VerifyError,a=r(154).scItem,o=r(62).verifyData,c=r(0),u=r(39).broadcast;t.exports=class extends i{async confirm(){if(this.mode==s.Block){let t=this.options.env,e=this.options.tx,r=(this.data.dst=e.outputs[1].getAddress().toString(),this.data.height=this.options.coinbaseHeight,this.data.indate?this.data.indate=this.data.height+Math.max(144,Math.min(52560,this.data.indate)):this.data.indate=this.data.height+4320,new a({type:this.data.type,addr:this.data.addr,dst:this.data.dst,height:this.data.height,state:1,ver:1,indate:this.data.indate}));this.data.cls&&(r.options.cls=this.data.cls,this.mode===s.Block&&"publish"==this.data.cls&&u("sc/publish",r.options)),r.do(),await t.scList.addItem(r)}}async unconfirm(){this.mode==s.Block&&await this.options.env.scList.delItem(this.data)}async verify(){let t=this.options.env;var e=this.options.tx;let r=e.outputs[1];if(!r||1e8!=r.value||!this.data)throw new n(e,"invalid","null scRegister data",100);var i=this.data.sig;delete this.data.sig,c.strictEqual(!0,o({data:this.data,sig:i}));let s=await t.node.cdb.get("primary");if(0<t.scList.query([["options.dst",this.data.dst]]).length)throw new n(e,"Contract Register Conflict","another contract already on "+this.data.dst,100);if(await s.ensureAccount({name:this.data.addr,witness:!0}),(await s.createReceive(this.data.addr,1)).getAddress("string")!=r.getAddress().toString())throw new n(e,"Invalid Smart Contract","Receive address error",100);return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractState:n}=r(5),a=r(38).VerifyError;var{}=r(154);const o=r(62).verifyData,c=r(0);t.exports=class extends i{async confirm(){if(this.mode==s.Block){let t=this.options.env,e=this.options.tx,r=(this.data.dst=e.outputs[1].getAddress().toString(),this.data.height=this.options.coinbaseHeight,t.scList.query([["options.dst",this.data.dst]]));1==r.list.length&&(r.list[0].options.ver+=1,r.list[0].options.type=this.data.type,r.list[0].options.height=this.data.height,r.list[0].do(),await t.scList.addItem(r.list[0]))}}async unconfirm(){this.mode==s.Block&&await this.options.env.scList.delItem(this.data)}async verify(){let t=this.options.env;var e=this.options.tx;let r=e.outputs[1];if(!r||1e5!=r.value||!this.data)throw new a(e,"Invalid Smart Contract","null scRegister data",100);var i=this.data.sig;delete this.data.sig,c.strictEqual(!0,o({data:this.data,sig:i}));let s=await t.node.cdb.get("primary");if(0==(i=t.scList.query([["options.dst",this.data.dst]])).list.length)throw new a(e,"Contract Not Exists","contract not exists",100);if(i.list[0].options.state!=n.Normal)throw new a(e,"Contract State Error","contract state error",100);if(await s.ensureAccount({name:this.data.addr,witness:!0}),(await s.createReceive(this.data.addr,1)).getAddress("string")!=r.getAddress().toString())throw new a(e,"Invalid Smart Contract","dst address error",100);return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractState:n}=r(5),a=r(38).VerifyError;var{}=r(154);const o=r(62).verifyData,c=r(0);t.exports=class extends i{async confirm(){if(this.mode==s.Block){let t=this.options.env,e=this.options.tx,r=(this.data.dst=e.outputs[1].getAddress().toString(),this.data.height=this.options.coinbaseHeight,t.scList.query([["options.dst",this.data.dst]]));1==r.list.length&&(r.list[0].options.state=this.data.state,r.list[0].options.height=this.data.height,r.list[0].do(),await t.scList.addItem(r.list[0]))}}async unconfirm(){this.mode==s.Block&&await this.options.env.scList.delItem(this.data)}async verify(){let t=this.options.env;var e=this.options.tx;let r=e.outputs[1];if(!r||1e5!=r.value||!this.data)throw new a(e,"Invalid Smart Contract","null scRegister data",100);var i=this.data.sig;delete this.data.sig,c.strictEqual(!0,o({data:this.data,sig:i}));let s=await t.node.cdb.get("primary");if(0==(i=t.scList.query([["options.dst",this.data.dst]])).list.length)throw new a(e,"Contract Not Exists","contract not exists",100);switch(i.list[0].options.state){case n.Normal:if(this.data.state!=n.Frozen&&this.data.state!=n.Destroy)throw new a(e,"Contract State Error","contract state error",100);break;case n.Frozen:if(this.data.state!=n.Normal&&this.data.state!=n.Destroy)throw new a(e,"Contract State Error","contract state error",100);break;default:throw new a(e,"Contract State Error","contract state error",100)}if(await s.ensureAccount({name:this.data.addr,witness:!0}),(await s.createReceive(this.data.addr,1)).getAddress("string")!=r.getAddress().toString())throw new a(e,"Invalid Smart Contract","dst address error",100);return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractState:n}=r(5),a=r(38).VerifyError,o=r(7),c=r(155),u=r(42);t.exports=class extends i{async onPacking(){let t=this.options.env;var e=this.options.tx.hash("hex");let r=await t.node.cdb.get("primary");var i=this.data.$top;let s={derive:[]};var n=await r.getStatusOfSC(e);if(n.txs)for(var a of n.txs)(a=await r.getTX(a))&&s.derive.push(a.tx);else if(n=await this.getContract()){n={height:t.curHeight,data:this.data,tx:this.options.tx,contract:n,wallet:r};let a=c(n);if(a)if((s=await a.run()).derive&&s.derive.length<o.MAX_PACKING_SIZE){let n=[];for(var h of s.derive){let e=await u.FactoryOfContract({tx:h,env:t});if((h=await e.onPacking()).derive){if(!(s.derive.length+n.length+h.derive.length<o.MAX_PACKING_SIZE))break;n=n.concat(h.derive)}}s.derive=s.derive.concat(n),i||await r.setStatusOfSC(e,s.derive.map(t=>t.hash("hex")))}else s.derive=[]}return s}async confirm(){if(this.mode==s.Block){let t=this.options.env,e=await this.getContract();if(e){let r=c({data:this.data,tx:this.options.tx,contract:e,wallet:await this.options.env.node.cdb.get("primary")});r&&(e.do(),await t.scList.addItem(e),await r.confirm())}return!0}}async unconfirm(){if(this.mode==s.Block){let e=this.options.env,r=await this.getContract();if(r){var t={data:this.data,tx:this.options.tx,contract:r,wallet:await this.options.env.node.cdb.get("primary")};let i=c(t);i&&(r.undo(),await e.scList.addItem(r),await i.unconfirm())}return!0}}async verify(){let t=this.options.env;var e=this.options.tx,r=await this.getContract();if(!r)throw new a(e,"invalid","contract not found",100);if(r.options.state!=n.Normal)throw new a(e,"invalid","contract version conflict",100);if(this.data.params.ver&&this.data.params.ver!=r.options.ver)throw new a(e,"invalid","contract version conflict",100);if(r.options.indate<t.curHeight)throw new a(e,"invalid","contract expired",100);e={data:this.data,tx:e,contract:r,wallet:await t.node.cdb.get("primary")};let i=c(e);return!!i&&i.verify()}async getContract(){if(0<this.options.tx.outputs.length){var t=this.options.tx.outputs[1].getAddress().toString();if((t=await this.options.env.node.chain.db.getSCList([["options.dst",t]]))&&0<t.list.length)return t.list[0]}return null}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[];var r=this.options.contract.options.addr,i=this.options.tx.outputs[1].value;let s=this.options.wallet;var n=this.options.data.params.relay,a=this.options.data.$top||0;n=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:n,value:i}],comment:JSON.stringify({$tag:"inner",$top:a+1,oper:"scrun",hash:this.options.tx.hash("hex"),account:r,params:this.options.data.params.params})},r);return e.push(n),t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[];var r=this.options.tx.outputs[1].value;let i=this.options.wallet;var s=this.options.contract.options.addr;let n=this.options.data.params.sim;if(!n){n=this.options.tx.inputs[0].getAddress().toString()}var a=this.options.data.$top||0;r=await i.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:n,value:r/2}],comment:JSON.stringify({$tag:"inner",$top:a+1,hash:this.options.tx.hash("hex"),account:s})},s);return e.push(r),t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[];var r=this.options.tx.outputs[1].value;let i=this.options.wallet;var s=this.options.contract.options.addr;let n=this.options.data.params.sim;if(!n){n=this.options.tx.inputs[0].getAddress().toString()}var a=this.options.data.$top||0;r=await i.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:n,value:r/2}],comment:JSON.stringify({$tag:"inner",$top:a+1,hash:this.options.tx.hash("hex"),account:s})},s);return e.push(r),t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){return await this.verify()?await super.run():{derive:[]}}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[],r=this.options.contract;var i=this.options.data.params.oper;let s=this.options.wallet;var n=r.options.addr;switch(i){case"pubk":{var a,o,c,u,h=this.options.data.params.addr,l=this.options.data.params.pubk;let t=this.options.data.params.partner,i=("object"==typeof r.options.contacts&&!Array.isArray(r.options.contacts)||(r.options.contacts={}),t&&t.split(",").map(t=>{r.options.contacts[t]||(r.options.contacts[t]={st:0})}),"");for(a of Object.keys(r.options.contacts))h!=a&&(o=r.options.contacts[a],c=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:a,value:1e4}],comment:JSON.stringify({oper:"scnotify",type:"mssendpubk",$tag:"inner",hash:this.options.tx.hash("hex"),data:l,m:r.options.m,n:r.options.n,contract:r.options.dst,account:n})},n),e.push(c),o.pubk&&(i&&(i+=","),i+=o.pubk));i&&(u=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:h,value:1e4}],comment:JSON.stringify({oper:"scnotify",type:"mssendpubk",$tag:"inner",hash:this.options.tx.hash("hex"),data:i,contract:r.options.dst,account:n})},n),e.push(u)),r.options.contacts[h]?r.options.contacts[h].pubk||(r.options.contacts[h].pubk=l):r.options.contacts[h]={pubk:l,st:0};break}case"puba":{var p,f=this.options.data.params.addr,d=this.options.data.params.puba;let t=!0;for(p of(r.options.puba=r.options.puba||d,Object.keys(r.options.contacts))){let e=r.options.contacts[p];p==f&&r.options.puba==d&&(e.st=1),1!=e.st&&(t=!1)}r.options.status=t;break}case"sign":if(1==r.options.status){var m,g,y=this.options.data.params.addr;for(m of Object.keys(r.options.contacts))m!=y&&(g=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:m,value:1e4}],comment:JSON.stringify({oper:"scnotify",type:"mssendtx",$tag:"inner",hash:this.options.tx.hash("hex"),data:this.options.data.params.tx,contract:r.options.dst,account:n})},n),e.push(g))}break;default:return t}return t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){var i=r(11);const s=r(5).ContractEnvType,n=r(39).broadcast;t.exports=class extends i{async confirm(){if(this.mode==s.Wallet){let t=this.options.tx.outputs[1];t&&(this.data.addr=t.getAddress().toString(),this.options.env.emit(this.data.type+"/receive",this.data),n(this.data.type+"/receive",this.data))}}async verify(){return!0}}},function(t,e,r){const i=r(0);var s=r(11);const n=r(5).PropStatus;t.exports=class extends s{async confirm(){let t=this.options.env,e=await t.propList.getVp(this.data.ori.pid);return e&&(e.pst=n.Delete,await t.propList.setVp(e)),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;let r=await t.propList.getVp(this.data.ori.pid);return r&&r.current.hash==e.inputs[0].prevout.hash&&r.current.index==e.inputs[0].prevout.index&&(r.pst=n.Ready,await t.propList.setVp(r)),!0}async verify(){let t=this.options.env;var e=this.options.tx,r=this.data;return!(!r.ori||!r.ori.pid||t.network.stockReg.test(r.ori.pid)||t.network.tokenReg.test(r.ori.pid)||!(r=await t.propList.getVp(r.ori.pid))||r.pst!=n.Ready||(i.strictEqual(r.current.hash,e.inputs[0].prevout.hash),i.strictEqual(r.current.index,e.inputs[0].prevout.index),0))}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractType:n}=r(5),a=r(7),o=r(22).opcodes;t.exports=class extends i{async confirm(){return this.options.env,this.options.tx.hash("hex"),this.mode===s.Block&&await this.HandleVoteTrans(!1),!0}async unconfirm(){return this.options.env,this.options.tx,this.mode===s.Block&&await this.HandleVoteTrans(!0),!0}async HandleVoteTrans(t){let e=this.options.env;var r=this.options.tx,i=this.options.tx.outputs[0].script.code;if(i[0].value==o.OP_RETURN)try{var s=JSON.parse(Buffer.from(i[1].data).toString());if(s&&s.oper==n.vote)switch(s.type){case"mine":{let i=0;for(var c of r.inputs){var u,h=await e.getExtendTX(c.prevout.hash);h&&e.voteMgr.isIn(h.height)?(u=h.tx.outputs[c.prevout.index])&&u.value?i+=u.value/a.COIN|0:e.logger.warning("Voting: Invalid UTXO Info"):e.logger.warning("Voting: Invalid UTXO Height")}0<i&&await e.voteMgr.calcVote(i,s.ca,t);break}case"oracle":{let i=0;for(var l of r.inputs){var p,f=await e.getExtendTX(l.prevout.hash);f&&e.voteMgr.isIn(f.height)?(p=f.tx.outputs[l.prevout.index])&&p.value?i+=p.value/1e5|0:e.logger.warning("Oracle: Invalid UTXO Info"):e.logger.warning("Oracle: Invalid UTXO Height")}0<i&&await e.voteMgr.calcOracle(i,{k:s.k,v:s.v},t);break}}}catch(i){console.log(i)}}async verify(){return!0}}},function(t,e,r){const i=r(0);var s=r(11);const{BlockFinalType:n,ContractEnvType:a,ContractType:o,PropStatus:c}=r(5),u=r(38).VerifyError,h=r(7),l=r(39).broadcast,p=r(1);t.exports=class extends s{async insert(){let t=this.options.env,e=this.options.tx;var r=2<e.outputs.length?e.outputs[2].getReturnData():null;let s=await t.propList.getVp(this.data.pid);if(r){if(this.mode==a.Wallet&&s.bid&&(r=await t.getTX(s.bid.hash))&&(r=await t.getWalletsByTX(r)))for(const e of r){const r=await t.get(e);i(r),await r.remove(s.bid.hash)}r=e.outputs[1].value;var n,o=e.outputs[2].getAddress().toString();if(r>=this.data.fixed||t.curHeight>=this.data.period&&r>s.gold){if(Reflect.deleteProperty(s,"bid"),s.current={hash:this.options.hash,index:2,address:o},s.pst=c.Ready,await t.propList.setVp(s,e),t.network.stockReg.test(s.pid)){let e=t.cpList.getItem(s.cid);e&&(e.status=1,await t.cpList.addItem(e))}this.mode==a.Wallet&&(n={pid:s.pid,address:s.current.address,wid:s.wid,account:s.account,time:p.now(),height:-1,cid:s.cid},t.emit("prop/auction",n),l("prop/auction",n))}else s.pst=c.Sale,s.bid={},s.bid.raw=this.options.raw,s.bid.fixed=this.data.fixed,s.bid.period=this.data.period,s.bid.hash=this.options.hash,s.bid.value=r,s.bid.address=o,await t.propList.setVp(s)}else s.pst=c.Sale,s.bid={},s.bid.raw=this.options.raw,s.bid.fixed=this.data.fixed,s.bid.period=this.data.period,s.bid.hash=this.options.hash,s.bid.value=s.gold,s.bid.address="",await t.propList.setVp(s);return!0}async erase(){let t=this.options.env,e=this.options.tx;var r=2<e.outputs.length?e.outputs[2].getReturnData():null,i=e.inputs[0];let s=await t.propList.getVp(this.data.pid);if(s)if(r){if(r=await t.getExtendTX(i.prevout.hash)){let e=r.tx.outputs[i.prevout.index];s.current={hash:i.prevout.hash,index:i.prevout.index,address:e.getAddress().toString()},s.bid={hash:this.options.hash,value:s.gold,address:"",raw:this.options.raw,fixed:this.data.fixed,period:this.data.period},s.pst=c.Sale,await t.propList.setVp(s,r.tx)}}else Reflect.deleteProperty(s,"bid"),s.pst=c.Ready,await t.propList.setVp(s)}async confirm(){let t=this.options.env,e=this.options.tx;var r=e.hash("hex"),i=e.outputs[2].getAddress().toString();let s=await t.propList.getVp(this.data.pid);if(Reflect.deleteProperty(s,"bid"),s.current={hash:r,index:2,address:i},s.height=this.options.coinbaseHeight,s.pst=c.Ready,await t.propList.setVp(s,e),t.network.stockReg.test(s.pid)){let e=t.cpList.getItem(s.cid);e&&(e.status=1,await t.cpList.addItem(e))}return this.mode==a.Wallet&&(r={pid:s.pid,address:s.current.address,wid:s.wid,account:s.account,time:this.options.block.time,height:s.height,cid:s.cid},t.emit("prop/auction",r),l("prop/auction",r)),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx,r=e.inputs[0].prevout,i=await t.getExtendTX(r.hash);if(i){let n=i.tx.outputs[r.index];var s=n.getReturnData();let o=await t.propList.getVp(s.pid);if(o&&(o.current={hash:r.hash,index:r.index,address:n.getAddress().toString()},o.height=i.height-1,await t.propList.setVp(o,e)),t.network.stockReg.test(o.pid)){let e=t.cpList.getItem(o.cid);e&&(e.status=1,await t.cpList.addItem(e))}this.mode==a.Wallet&&(s={pid:o.pid,address:o.current.address,wid:o.wid,account:o.account,time:this.options.block.time,height:o.height,cid:o.cid},t.emit("prop/auction",s),l("prop/auction",s))}else this.mode==a.Wallet&&(r=await t.propList.getVp(this.data.pid),await t.propList.delVp(r));return!0}async verify(){var t=this.data;let e=this.options.env,r=this.options.tx;var s=2<r.outputs.length?r.outputs[2].getReturnData():null,n=await e.propList.getVp(t.pid);if(!n)return!1;switch(this.mode){case a.Mempool:if(i.strictEqual(t.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(t.prev.index,r.inputs[0].prevout.index),i(e.curHeight+h.BLOCK_DAY>=this.data.period),i(t.cid!=e.network.genesisId),s){if(n.period<e.curHeight)throw new u(r,"sale order expired","contract",0);if(i.strictEqual(s.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(s.prev.index,r.inputs[0].prevout.index),i.strictEqual(s.pid,t.pid),i.strictEqual(s.oper,o.propExchange),!n.bid)throw new u(r,"sale order lack bid info","contract",0);if(n.bid.value>=this.data.fixed)throw new u(r,"can not bid on sale order finished","contract",0);if(r.outputs[1].value<=n.bid.value||r.outputs[1].value<=n.gold)throw new u(r,"invalid bid price","contract",0);var l=await e.getTX(n.bid.hash);l&&await e.removeDoubleSpenders(l)}else i(n.pst===c.Ready);break;case a.Block:if(i.strictEqual(t.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(t.prev.index,r.inputs[0].prevout.index),i(t.cid!=e.network.genesisId),i.strictEqual(s.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(s.prev.index,r.inputs[0].prevout.index),i.strictEqual(s.pid,t.pid),i.strictEqual(s.oper,o.propExchange),r.outputs[1].value<=n.gold)throw new u(r,"invalid bid price","contract",0)}return!0}isBlockFinal(){var t=this.options.env,e=this.options.tx;return this.data.period<t.curHeight?n.Expired:2<=e.outputs.length&&(e.outputs[1].value>=this.data.fixed||this.data.period==t.curHeight&&e.outputs[1].value>=e.outputs[2].value)?n.Final:n.Waiting}isPreVerify(){let t=this.options.tx;return!!(2<t.outputs.length&&t.outputs[2].getReturnData())}}},function(t,e,r){var i=r(11);const{OrderData:s,ContractEnvType:n,BlockFinalType:a,VerifyCode:o}=r(5),c=r(26),u=r(83).stockItem,h=r(59),l=r(27),p=r(39).broadcast,f=r(1),d=r(7);t.exports=class extends i{async insert(){if(this.mode!=n.Wallet){let n=this.options.env;var t=this.options.tx,e=this.data.addr,r=await n.getGuider(e);if(2==t.outputs.length){let s=this.data.sum,p=0;const f=h.fromTX(t);f.outputs.pop(),f.view=await n.getSpentViewUnLock(f);var i,a=f.getInputValue();let g=await n.getCpSnap(this.data.cid);if(!g)return o.SnapNull;r&&g.grate&&g.grate<50&&0<g.grate&&(m=s/100*g.grate|0,f.outputs.push(c.fromScript(r,m)),s-=m),g.addresses.map(t=>{var e=s/100*g.lords[t]*3|0;f.outputs.push(c.fromScript(t,e)),p+=e});let y=0;for(i of g.slist)if(!(i.sum>g.hSum)){var u=s/(d.STOCK_ORIENT+g.hSum)*i.sum|0;if(f.outputs.push(c.fromScript(i.addr,u)),p+=u,(y+=i.sum)>=g.hSum)break}f.outputs.push(c.fromScript(g.addrOfMaster,s-p)),f.outputs.push(c.fromScript(e,0));var m=await f.getSigopsSize(),[a]=(e=a-this.data.sum-l.getMinFee(m),0<e?f.outputs[f.outputs.length-1].value=e:f.outputs.pop(),f.commit());await n.removeDoubleSpenders(t),await n._addTX(a)}else{let t=new s(this.data.cid,this.data.uid,this.data.sn,this.data.sum,this.data.addr,r);t.publish=n.curHeight,t.height=-1,t.hash=this.options.hash,await n.addOrder(t),-1!=n.hmacConnection.indexOf(this.data.cid)&&(this.data.hash=this.options.hash,this.data.height=-1,this.data.confirm=0,this.data.time=f.now(),n.emit("contract.order.add",this.data),p("cp/orderPay",this.data))}}return!0}async confirm(){let t=this.options.env,e=this.options.tx;var r=this.data.addr,i=await t.getGuider(r);let a=new s(this.data.cid,this.data.uid,this.data.sn,this.data.sum,this.data.addr,i);switch(a.publish=t.curHeight,a.height=this.options.coinbaseHeight,a.hash=this.options.hash,this.mode){case n.Wallet:{let r=0;for(let s=1;s<=e.outputs.length-3;s++){let n=e.outputs[s];var o=n.getAddress().toString();if(1==s&&i&&o==i){r=1;let i=new u;i.height=this.options.coinbaseHeight,i.txid=e.txid(),i.type=u.RecordType.Ads,i.cid=this.data.cid,i.addr=o,i.price=n.value,await t.cpList.stockAds(i)}else if(s>r){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=o,r.price=n.value,await t.cpList.stockBonus(r)}}break}case n.Block:{await t.addOrder(a);let r=0;for(let s=1;s<=e.outputs.length-3;s++){let n=e.outputs[s];var c=n.getAddress().toString();if(1==s&&i&&c==i){r=1;let i=new u;i.height=this.options.coinbaseHeight,i.txid=e.txid(),i.type=u.RecordType.Ads,i.cid=this.data.cid,i.addr=c,i.price=n.value,await t.cpList.stockAds(i)}else if(s>r){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=c,r.price=n.value,await t.cpList.stockBonus(r)}}-1!=t.hmacConnection.indexOf(this.data.cid)&&(this.data.hash=this.options.hash,this.data.height=this.options.coinbaseHeight,this.data.confirm=1,this.data.time=this.options.block.time,t.emit("contract.order.confirm",this.data),p("cp/orderPay",this.data));break}}return!0}async unconfirm(){let t=this.options.env,e=this.options.tx;var r=this.data.addr,i=await t.getGuider(r);switch(this.mode){case n.Wallet:{let r=0;for(let s=1;s<=e.outputs.length-3;s++){let n=e.outputs[s];var a=n.getAddress().toString();if(1==s&&i&&a==i){r=1;let i=new u;i.height=this.options.coinbaseHeight,i.txid=e.txid(),i.type=u.RecordType.Ads,i.cid=this.data.cid,i.addr=a,i.price=n.value,await t.cpList.stockCancelAds(i)}else if(s>r){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=a,r.price=n.value,await t.cpList.stockCancelBonus(r)}}break}case n.Block:{let r=new s(this.data.cid,this.data.uid,this.data.sn,this.data.sum,this.data.addr,i),n=(r.publish=t.curHeight,r.height=-1,r.hash=this.options.hash,await t.addOrder(r),0);for(let r=1;r<=e.outputs.length-3;r++){let s=e.outputs[r];var o=s.getAddress().toString();if(1==r&&i&&o==i){n=1;let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Ads,r.cid=this.data.cid,r.addr=o,r.price=s.value,await t.cpList.stockCancelAds(r)}else if(r>n){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=o,r.price=s.value,await t.cpList.stockCancelBonus(r)}}-1!=t.hmacConnection.indexOf(this.data.cid)&&(this.data.hash=this.options.hash,this.data.height=-1,this.data.confirm=0,this.data.time=this.options.block.time,t.emit("contract.order.unconfirm",this.data),p("cp/orderPay",this.data));break}}return!0}async erase(){if(this.mode!=n.Wallet){let t=this.options.env;2<this.options.tx.outputs.length&&(this.data.confirm=0,t.emit("contract.order.remove",this.data))}return!0}async verify(){let t=this.options.env;var e=this.options.tx;let r=h.fromTX(e);r.view=this.options.coins||null,this.mode==n.Mempool&&(r.view=await t.node.mempool.getSpentViewUnLock(e));var i=r.getInputValue();if(i<this.data.sum)return!1;if(e.outputs.length<2)return!1;if(2!=e.outputs.length){var s=this.data.addr,a=await t.getGuider(s);let n=this.data.sum;var c=await t.getCpSnap(this.data.cid);if(!c)return o.SnapNull;let h=0,m=0;for(let t=1;t<e.outputs.length;t++){let o=e.outputs[t];var u=o.getAddress().toString();if(1==t&&a&&u==a){if(m=1,!(c.grate&&c.grate<20&&0<c.grate))return!1;if(o.value!=n/100*c.grate|0)return!1;n-=o.value}else if(t<=c.addresses.length+m){if(o.value!=n/100*c.lords[u]*3|0||u!=c.addresses[t-m-1])return!1;h+=o.value}else if(t<=c.addresses.length+m+c.slist.length){var p=c.slist[t-c.addresses.length-m-1],f=n/(d.STOCK_ORIENT+c.hSum)*p.sum|0;if(o.value!=f||u!=p.addr)return!1;h+=o.value}else if(t==c.addresses.length+m+c.slist.length+1){if(u!=c.addrOfMaster||o.value!=n-h)return!1}else if(f=await r.getSigopsSize(),p=i-this.data.sum-l.getMinFee(f),u!=s||o.value!=p)return!1}}return!0}isBlockFinal(){this.options.env;var t=this.options.tx;return t.outputs.length<2?a.Expired:2==t.outputs.length?a.Waiting:a.Final}async checkFees(){return!0}}},function(t,e,r){const i=r(0),s=r(109),{ContractEnvType:n,BlockFinalType:a}=r(5);var o=r(11);const c=r(7),u=r(39).broadcast,h=r(6),l=r(12);t.exports=class extends o{async insert(){let t=this.options.env,e=this.options.tx;switch(this.data.body.dst=e.outputs[1].getAddress().toString(),this.mode){case n.Mempool:try{var r=JSON.parse(this.data.body.content);switch(r.cmd){case"peerdel":i(this.data.body.dst==t.node.config.notifyAddress),i(l.fromString(this.data.body.dst).hash.toString("hex")==h.hash160(Buffer.from(r.pub,"hex")).toString("hex")),i(s.verifyObj(r.payload,r.sig,r.pub)),await t.node.rpc._delPeer([r.payload.host]);break;case"peeradd":i(this.data.body.dst==t.node.config.notifyAddress),i(l.fromString(this.data.body.dst).hash.toString("hex")==h.hash160(Buffer.from(r.pub,"hex")).toString("hex")),i(s.verifyObj(r.payload,r.sig,r.pub)),await t.node.rpc._addPeer([r.payload.host,r.payload.key])}}catch(t){}break;case n.Wallet:if(t.NotifyList.get(this.data.sn))return;var a=this.data.body.dst,[a,o]=await t.getAccountByAddress(a,e);this.data.account=o,this.data.wid=a,t.emit("notify/receive",this.data),u("notify/receive",this.data),await t.NotifyList.set(this.data.sn,this.data)}return!0}async confirm(){}async unconfirm(){}async erase(){let t=this.options.env;return this.options.tx,this.mode===n.Wallet&&(await t.NotifyList.delete(this.data.sn),t.emit("notify/remove",this.data),u("notify/remove",this.data)),!0}async verify(){var t=this.options.env;let e=this.options.tx;return!(e.getOutputValue()<.1*c.COIN||2<e.outputs.length||this.data.h>t.curHeight)}isBlockFinal(){var t=this.options.env;return this.data.h<t.curHeight-6?a.Expired:a.Waiting}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractStatus:n,BlockFinalType:a}=r(5),o=r(38).VerifyError;t.exports=class extends i{async insert(){let t=this.options.env;return this.data.period<t.curHeight?await t.transactionList.delTransContract(this.data,!0):(this.data.current={hash:this.options.hash,index:0},this.data.raw=this.options.raw,await t.transactionList.addTransContract(s.Mempool,this.data)),!0}async erase(){let t=this.options.env;switch(this.mode){case s.Mempool:await t.transactionList.delTransContract(this.data);break;case s.Wallet:await t.transactionList.delTransContract(this.data,!0)}}async verify(){let t=this.options.env;var e=this.options.tx;if(this.data.period<t.curHeight)throw new o(e,"transaction contract expired","contract",0);if(t.transactionList.query(this.data.type,this.data.addr)!=n.None)throw new o(e,"Same Address Contract Finded","contract",0);return!0}isBlockFinal(){var t=this.options.env;return this.data.period<t.curHeight?a.Expired:a.Waiting}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractStatus:n}=r(5),a=r(110);t.exports=class extends i{async confirm(){let t=this.options.env,e=n.Backed;switch(2==this.data.master&&(e=n.Exchanged),this.mode){case s.Block:{let r=t.transactionList.get(this.data.type+"."+this.data.addr);r?(r.transStatus=e,await t.transactionList.saveContract(r,!0)):await t.transactionList.addTransContract(s.Block,this.data,!0);break}case s.Wallet:{let r=t.transactionList.get(this.data.type+"."+this.data.addr);r?(r.transStatus=e,await t.transactionList.saveContract(r,!0)):await t.transactionList.addTransContract(s.Wallet,this.data,!0);break}}return!0}async verify(){let t=this.options.env;switch(this.mode){case s.Mempool:case s.Block:case s.Wallet:{var e=this.data.master,r=t.transactionList.get(this.data.type+"."+this.data.addr);let i=r.transStatus;if(i!==n.Expired&&i!==n.Confirmed&&i!==n.Backed&&i!==n.Exchanged){let e=new a(t.network.txcheckpoint,r);[,i]=await e.execute(t)}return(i===n.Expired||i===n.Confirmed||i===n.Backed||i===n.Exchanged)&&!(i==n.Expired&&1!=e||i==n.Confirmed&&2!=e||i==n.Backed&&1!=e||i==n.Exchanged&&2!=e)}}}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractEnvType:n}=r(5),a=r(62).verifyData,o=r(83).stockItem,c=r(7),u=r(39).broadcast;t.exports=class extends i{async confirm(){let t=this.options.env,e=this.options.tx,r=(this.data.txid=e.txid(),o.fromObj(this.data));switch(r.type){case o.RecordType.Offer:var i;await t.cpList.stockOffer(r),this.mode!=n.Block||(i=t.cpList.getRecord(r.cid))&&u("cp/stock",i);break;case o.RecordType.Purchase:if(await t.cpList.stockPurchase(r),this.mode==n.Block)try{var s=await t.accountList.query([["cid",r.cid]]);r.support=s.list.length,(s=t.cpList.getRecord(r.cid))&&(r.sum_left=s.stock.sum),u("cp/stockPurchase",r)}catch(t){}break;case o.RecordType.Bid:await t.cpList.stockBid(r),this.mode==n.Block&&u("cp/stockBid",r);break;case o.RecordType.Auction:await t.cpList.stockAuction(r),this.mode==n.Block&&u("cp/stockAuction",r);break;case o.RecordType.Send:await t.cpList.stockSend(r)}return!0}async unconfirm(){let t=this.options.env,e=this.options.tx;this.data.txid=e.txid();var r=o.fromObj(this.data);switch(r.type){case o.RecordType.Offer:t.cpList.stockCancelOffer(r);break;case o.RecordType.Bid:t.cpList.stockCancelBid(r);break;case o.RecordType.Auction:t.cpList.stockCancelAuction(r);break;case o.RecordType.Purchase:t.cpList.stockCancelPurchase(r);break;case o.RecordType.Send:t.cpList.stockCancelSend(r)}return!0}async verify(){let t=this.options.env,e=this.options.tx,r=t.accountList;if(!a(this.data.body))return s.SignFailed;if(this.data.h>t.curHeight)return s.WrongHeight;var i=this.data.body.data,u=t.cpList.getItem(i.cid);if(!u)return s.WrongPublisher;if(!i.sum||i.sum<c.STOCK_TRADE_SINGLE)return s.WrongSum;switch(i.type){case o.RecordType.Offer:if(2<e.outputs.length)return s.WrongFormat;if(u.current.address!=i.addr)return s.WrongPublisher;if(i.price<c.GRAM||i.price>c.STOCK_MAX_PRICE)return s.WrongPrice;if(i.sum<=0||i.sum>c.STOCK_ADDED_SINGLE||u.stock.hSum+i.sum>c.STOCK_ADDED)return s.WrongSum;if(u.stock.hBonus<.3*u.stock.hSum*u.stock.hPrice)return s.WrongBonus;if(this.mode==n.Block||this.mode==n.Mempool){let r=this.options.coins||null;if(this.mode==n.Mempool&&(r=await t.node.mempool.getSpentViewUnLock(e)),e.getInputValue(r)-e.getOutputValue()<.05*i.sum*i.price)return s.WrongFee}if(u.stock.hHeight){if(this.data.h-u.stock.height<=c.BLOCK_DAY*c.STOCK_OFFER_PERIOD)return s.StockOffering;if(this.data.h-u.stock.height<=c.BLOCK_DAY*c.STOCK_OFFER_CD)return s.StockCooling;if(this.data.body.data.price<u.stock.lastPrice||this.data.body.data.price>4*u.stock.lastPrice)return s.WrongPrice}break;case o.RecordType.Bid:if(u.stock.price<c.GRAM||u.stock.price>c.STOCK_MAX_PRICE)return s.WrongPrice;if(i.sum<c.STOCK_TRADE_SINGLE||i.sum>c.STOCK_MAX_TRADE_SINGLE)return s.WrongSum;if(this.mode==n.Block||this.mode==n.Mempool){let r=this.options.coins||null;if(this.mode==n.Mempool&&(r=await t.node.mempool.getSpentViewUnLock(e)),e.getInputValue(r)-e.getOutputValue()<.05*i.sum*i.price)return s.WrongFee}var h=r.getStockAccount(i.cid,i.addr);if(!h)return s.StockAccountNotExist;if(h.seq+1!==i.seq)return s.AccountSequenceWrong;if(h.sum<i.sum)return s.StockAccountNotEnoughSum;if(h.stock.period>=this.data.h)return s.StockOffering;break;case o.RecordType.Auction:{if(!(h=r.getStockAccount(i.cid,i.to)))return s.StockAccountNotExist;if(i.to==i.addr)return s.WrongPublisher;if(h.stock.sum<i.sum)return s.StockAccountNotEnoughSum;var l=r.getStockAccount(i.cid,i.addr);let t=0;if((t=l?l.seq:t)+1!==i.seq)return s.AccountSequenceWrong;if(h.stock.period<this.data.h)return s.StockOfferExpired;if(this.mode==n.Block||this.mode==n.Mempool){let t=e.outputs[1];if(i.price!=h.stock.price||t.getAddress().toString()!=h.addr||t.value!=i.sum*h.stock.price)return s.FundNotEnough}break}case o.RecordType.Purchase:{if(u.current.address!==i.to)return s.WrongPublisher;if(!u.stock.hHeight)return s.StockOfferExpired;if(this.data.h-u.stock.height>c.BLOCK_DAY*c.STOCK_OFFER_PERIOD)return s.StockOfferExpired;if(u.stock.sum<i.sum)return s.StockAccountNotEnoughSum;let a=0;if((a=(l=r.getStockAccount(i.cid,i.addr))?l.seq:a)+1!==i.seq)return s.AccountSequenceWrong;if(this.mode==n.Block||this.mode==n.Mempool){let r=this.options.coins||null;if(this.mode==n.Mempool&&(r=await t.node.mempool.getSpentViewUnLock(e)),e.getInputValue(r)-e.getOutputValue()<i.sum*i.price)return s.FundNotEnough}break}case o.RecordType.Send:if(!(h=r.getStockAccount(i.cid,i.addr)))return s.StockAccountNotExist;if(i.to==i.addr)return s.WrongPublisher;if(h.seq+1!==i.seq)return s.AccountSequenceWrong;if(h.sum<i.sum)return s.StockAccountNotEnoughSum}return!0}isPreVerify(){let t=this.options.tx;return this.data.txid=t.txid(),o.fromObj(this.data).type===o.RecordType.Bid}async checkFees(){return!0}}},function(t,e,r){r=r(11);t.exports=class extends r{async insert(){let t=this.options.env;var e=this.options.tx;for(let i=1;i<e.outputs.length;i++){let s=e.outputs[i];var r=s.getAddress().toString();1e5==s.value&&t.setGuider(this.data.addr,this.data.cid,r)}return!0}async confirm(){return!0}async unconfirm(){return!0}async erase(){let t=this.options.env;var e=this.options.tx;for(let i=1;i<e.outputs.length;i++){var r=e.outputs[i].getAddress().toString();t.unsetGuider(this.data.addr,this.data.cid,r)}return!0}async verify(){return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,VerifyCode:n}=r(5),a=r(157).ErItem,o=r(32),c=r(6),u=r(12),h=r(39).broadcast;t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;switch(this.data.startHeight=t.curHeight,await t.erList.setEr(this.data,e),this.mode){case s.Wallet:var r=u.fromWitnessPubkeyhash(c.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);r&&i&&(this.data.account=i,this.data.wid=r,t.emit("ca/issue",this.data),h("ca/issue",this.data));break;case s.Block:t.node.transmit("ca.issue",this.data),i=o.fromPrivate(Buffer.from(t.node.config.alliancePrivateKey,"hex"),!0,t.network),o.fromPrivate(c.hash256(Buffer.concat([Buffer.from(this.data.source.cid+"-"+this.data.source.uid),i.privateKey]),!0,t.network)).publicKey.toString("hex")==this.data.witness&&t.node.transmit("ca.issue.alliance",this.data);break}return!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;switch(t.erList.delEr(this.data,e),this.mode){case s.Wallet:var r=u.fromWitnessPubkeyhash(c.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);this.data.account=i,this.data.wid=r,t.emit("ca/unissue",this.data),h("ca/unissue",this.data);break;case s.Block:t.node.transmit("ca.unissue",this.data)}return!0}async erase(){return!0}async verify(){var t=this.options.env,e=this.data;t=o.fromPublic(Buffer.from(e.witness,"hex"),t.network);return!!new a(e).verifying(t)||n.SignatureNotMatch}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,VerifyCode:n,ContractType:a}=r(5),o=r(158).ErAbolishItem,c=r(32),u=r(39).broadcast,h=r(6),l=r(12);t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;switch(this.data.startHeight=t.curHeight,await t.erAbList.setErAb(this.data,e),this.mode){case s.Wallet:var r=l.fromWitnessPubkeyhash(h.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);this.data.account=i,this.data.wid=r,t.emit("ca/abolish",this.data),u("ca/abolish",this.data);break;case s.Block:t.node.transmit("ca.abolish",this.data)}return!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;switch(t.erAbList.delErAb(this.data,e),this.mode){case s.Wallet:var r=l.fromWitnessPubkeyhash(h.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);this.data.account=i,this.data.wid=r,t.emit("ca/unabolish",this.data),u("ca/unabolish",this.data);break;case s.Block:t.node.transmit("ca.unabolish",this.data)}return!0}async erase(){return!0}async verify(){let t=this.options.env;var e=this.data,r=await t.erList.getEr(e.erid);return r&&r.witness==e.witness?e&&e.oper==a.erAbolish&&(r=await t.erAbList.getErAb(e.erid))&&e.abolishHeight>=r.abolishHeight?n.NotExistER:(r=c.fromPublic(Buffer.from(e.witness,"hex"),t.network),!!new o(e).verifying(r)||n.SignatureNotMatch):n.SignatureNotMatch}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractEnvType:n}=r(5),a=r(241).EnchancementItem,o=r(32);t.exports=class extends i{async insert(){return!0}async confirm(){if(this.mode!=n.Block)return!1;let t=this.options.env,e=this.options.tx;return this.data.enchanceTx=e.txid(),t.enCpList.setEn(this.data),!0}async unconfirm(){if(this.mode!=n.Block)return!1;let t=this.options.env;var e=this.options.tx;return t.enCpList.delEn(this.data,e),!0}async erase(){return!0}async verify(){let t=this.options.env,e=this.options.tx;var r=this.data,i=t.cpList.getItem(r.to),n=e.outputs[1].getAddress().toString();return i&&i.pubAddress&&i.pubAddress==n&&(i=t.cpList.getItem(r.from))&&i.pubAddress&&i.pubKey?(n=o.fromPublic(Buffer.from(i.pubKey,"hex"),t.network),!!new a(r).verifying(n)||s.SignatureNotMatch):s.NotExistCp}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractType:n}=r(5),a=r(159).X509Cert,o=r(32);t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;return t.x509CertList.setX509Cert(this.data,e),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;return t.x509CertList.delX509Cert(this.data,e),!0}async erase(){return!0}async verify(){let t=this.options.env;var e=this.data;if(e&&e.oper==n.x509Issue&&t.x509CertList.get(a.getKey(e.witness,e.certSq)))return s.DuplicateX509;var r=t.cpList.getItem(e.signCpid);return r&&r.pubKey?(r=o.fromPublic(Buffer.from(r.pubKey,"hex"),t.network),!!new a(e).verifying(r)||s.SignatureNotMatch):s.NotExistCp}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractType:n}=r(5),a=r(160).X509Abolish,o=r(32);t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;return t.x509AbolishList.setX509Abolish(this.data,e),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;return t.x509AbolishList.delX509Abolish(this.data,e),!0}async erase(){return!0}async verify(){let t=this.options.env;var e,r=this.data;if(1==r.certSq)return s.AbolishRootError;if(r&&r.oper==n.x509Abolish&&((e=t.x509AbolishList.get(a.getKey(r.witness,r.certSq)))&&r.activeTime>=e.activeTime))return s.AbolishTimeError;return(e=t.cpList.getItem(r.witness))&&e.pubKey&&r.signature?(e=o.fromPublic(Buffer.from(e.pubKey,"hex"),t.network),!!new a(r).verifying(e)||s.SignatureNotMatch):s.NotExistCp}}},function(t,e,r){"use strict";
|
|
442
|
+
*/function i(t,e){this.resolve=t,this.reject=e}function s(){}t.exports=class{constructor(){this.jobs=new Map,this.busy=new Set,this.destroyed=!1}has(t){return this.busy.has(t)}hasPending(t){return this.jobs.has(t)}lock(t,e){return this.destroyed?Promise.reject(new Error("Lock is destroyed.")):null==t||e?Promise.resolve(s):this.busy.has(t)?new Promise((e,r)=>{this.jobs.has(t)||this.jobs.set(t,[]),this.jobs.get(t).push(new i(e,r))}):(this.busy.add(t),Promise.resolve(this.unlock(t)))}unlock(t){const e=this;return function r(){if(!e.destroyed&&e.busy.has(t)){e.busy.delete(t);const i=e.jobs.get(t);if(i){0===i.length&&e.jobs.delete(t);const s=i.shift();0===i.length&&e.jobs.delete(t),e.busy.add(t),s.resolve(r)}}}}destroy(){if(!this.destroyed){this.destroyed=!0;const t=this.jobs;this.busy=new Map,this.jobs=new Map;for(const e of t.values())for(const t of e)t.reject(new Error("MappedLock was destroyed."))}}}},function(t,e,r){var i=r(11);const s=r(5).ContractEnvType,n=r(38).VerifyError,a=r(154).scItem,o=r(62).verifyData,c=r(0),u=r(39).broadcast;t.exports=class extends i{async confirm(){if(this.mode==s.Block){let t=this.options.env,e=this.options.tx,r=(this.data.dst=e.outputs[1].getAddress().toString(),this.data.height=this.options.coinbaseHeight,this.data.indate?this.data.indate=this.data.height+Math.max(144,Math.min(52560,this.data.indate)):this.data.indate=this.data.height+4320,new a({type:this.data.type,addr:this.data.addr,dst:this.data.dst,height:this.data.height,state:1,ver:1,indate:this.data.indate}));this.data.cls&&(r.options.cls=this.data.cls,this.mode===s.Block&&"publish"==this.data.cls&&u("sc/publish",r.options)),r.do(),await t.scList.addItem(r)}}async unconfirm(){this.mode==s.Block&&await this.options.env.scList.delItem(this.data)}async verify(){let t=this.options.env;var e=this.options.tx;let r=e.outputs[1];if(!r||1e8!=r.value||!this.data)throw new n(e,"invalid","null scRegister data",100);var i=this.data.sig;delete this.data.sig,c.strictEqual(!0,o({data:this.data,sig:i}));let s=await t.node.cdb.get("primary");if(0<t.scList.query([["options.dst",this.data.dst]]).length)throw new n(e,"Contract Register Conflict","another contract already on "+this.data.dst,100);if(await s.ensureAccount({name:this.data.addr,witness:!0}),(await s.createReceive(this.data.addr,1)).getAddress("string")!=r.getAddress().toString())throw new n(e,"Invalid Smart Contract","Receive address error",100);return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractState:n}=r(5),a=r(38).VerifyError;var{}=r(154);const o=r(62).verifyData,c=r(0);t.exports=class extends i{async confirm(){if(this.mode==s.Block){let t=this.options.env,e=this.options.tx,r=(this.data.dst=e.outputs[1].getAddress().toString(),this.data.height=this.options.coinbaseHeight,t.scList.query([["options.dst",this.data.dst]]));1==r.list.length&&(r.list[0].options.ver+=1,r.list[0].options.type=this.data.type,r.list[0].options.height=this.data.height,r.list[0].do(),await t.scList.addItem(r.list[0]))}}async unconfirm(){this.mode==s.Block&&await this.options.env.scList.delItem(this.data)}async verify(){let t=this.options.env;var e=this.options.tx;let r=e.outputs[1];if(!r||1e5!=r.value||!this.data)throw new a(e,"Invalid Smart Contract","null scRegister data",100);var i=this.data.sig;delete this.data.sig,c.strictEqual(!0,o({data:this.data,sig:i}));let s=await t.node.cdb.get("primary");if(0==(i=t.scList.query([["options.dst",this.data.dst]])).list.length)throw new a(e,"Contract Not Exists","contract not exists",100);if(i.list[0].options.state!=n.Normal)throw new a(e,"Contract State Error","contract state error",100);if(await s.ensureAccount({name:this.data.addr,witness:!0}),(await s.createReceive(this.data.addr,1)).getAddress("string")!=r.getAddress().toString())throw new a(e,"Invalid Smart Contract","dst address error",100);return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractState:n}=r(5),a=r(38).VerifyError;var{}=r(154);const o=r(62).verifyData,c=r(0);t.exports=class extends i{async confirm(){if(this.mode==s.Block){let t=this.options.env,e=this.options.tx,r=(this.data.dst=e.outputs[1].getAddress().toString(),this.data.height=this.options.coinbaseHeight,t.scList.query([["options.dst",this.data.dst]]));1==r.list.length&&(r.list[0].options.state=this.data.state,r.list[0].options.height=this.data.height,r.list[0].do(),await t.scList.addItem(r.list[0]))}}async unconfirm(){this.mode==s.Block&&await this.options.env.scList.delItem(this.data)}async verify(){let t=this.options.env;var e=this.options.tx;let r=e.outputs[1];if(!r||1e5!=r.value||!this.data)throw new a(e,"Invalid Smart Contract","null scRegister data",100);var i=this.data.sig;delete this.data.sig,c.strictEqual(!0,o({data:this.data,sig:i}));let s=await t.node.cdb.get("primary");if(0==(i=t.scList.query([["options.dst",this.data.dst]])).list.length)throw new a(e,"Contract Not Exists","contract not exists",100);switch(i.list[0].options.state){case n.Normal:if(this.data.state!=n.Frozen&&this.data.state!=n.Destroy)throw new a(e,"Contract State Error","contract state error",100);break;case n.Frozen:if(this.data.state!=n.Normal&&this.data.state!=n.Destroy)throw new a(e,"Contract State Error","contract state error",100);break;default:throw new a(e,"Contract State Error","contract state error",100)}if(await s.ensureAccount({name:this.data.addr,witness:!0}),(await s.createReceive(this.data.addr,1)).getAddress("string")!=r.getAddress().toString())throw new a(e,"Invalid Smart Contract","dst address error",100);return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractState:n}=r(5),a=r(38).VerifyError,o=r(7),c=r(155),u=r(42);t.exports=class extends i{async onPacking(){let t=this.options.env;var e=this.options.tx.hash("hex");let r=await t.node.cdb.get("primary");var i=this.data.$top;let s={derive:[]};var n=await r.getStatusOfSC(e);if(n.txs)for(var a of n.txs)(a=await r.getTX(a))&&s.derive.push(a.tx);else if(n=await this.getContract()){n={height:t.curHeight,data:this.data,tx:this.options.tx,contract:n,wallet:r};let a=c(n);if(a)if((s=await a.run()).derive&&s.derive.length<o.MAX_PACKING_SIZE){let n=[];for(var h of s.derive){let e=await u.FactoryOfContract({tx:h,env:t});if((h=await e.onPacking()).derive){if(!(s.derive.length+n.length+h.derive.length<o.MAX_PACKING_SIZE))break;n=n.concat(h.derive)}}s.derive=s.derive.concat(n),i||await r.setStatusOfSC(e,s.derive.map(t=>t.hash("hex")))}else s.derive=[]}return s}async confirm(){if(this.mode==s.Block){let t=this.options.env,e=await this.getContract();if(e){let r=c({data:this.data,tx:this.options.tx,contract:e,wallet:await this.options.env.node.cdb.get("primary")});r&&(e.do(),await t.scList.addItem(e),await r.confirm())}return!0}}async unconfirm(){if(this.mode==s.Block){let e=this.options.env,r=await this.getContract();if(r){var t={data:this.data,tx:this.options.tx,contract:r,wallet:await this.options.env.node.cdb.get("primary")};let i=c(t);i&&(r.undo(),await e.scList.addItem(r),await i.unconfirm())}return!0}}async verify(){let t=this.options.env;var e=this.options.tx,r=await this.getContract();if(!r)throw new a(e,"invalid","contract not found",100);if(r.options.state!=n.Normal)throw new a(e,"invalid","contract version conflict",100);if(this.data.params.ver&&this.data.params.ver!=r.options.ver)throw new a(e,"invalid","contract version conflict",100);if(r.options.indate<t.curHeight)throw new a(e,"invalid","contract expired",100);e={data:this.data,tx:e,contract:r,wallet:await t.node.cdb.get("primary")};let i=c(e);return!!i&&i.verify()}async getContract(){if(0<this.options.tx.outputs.length){var t=this.options.tx.outputs[1].getAddress().toString();if((t=await this.options.env.node.chain.db.getSCList([["options.dst",t]]))&&0<t.list.length)return t.list[0]}return null}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[];var r=this.options.contract.options.addr,i=this.options.tx.outputs[1].value;let s=this.options.wallet;var n=this.options.data.params.relay,a=this.options.data.$top||0;n=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:n,value:i}],comment:JSON.stringify({$tag:"inner",$top:a+1,oper:"scrun",hash:this.options.tx.hash("hex"),account:r,params:this.options.data.params.params})},r);return e.push(n),t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[];var r=this.options.tx.outputs[1].value;let i=this.options.wallet;var s=this.options.contract.options.addr;let n=this.options.data.params.sim;if(!n){n=this.options.tx.inputs[0].getAddress().toString()}var a=this.options.data.$top||0;r=await i.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:n,value:r/2}],comment:JSON.stringify({$tag:"inner",$top:a+1,hash:this.options.tx.hash("hex"),account:s})},s);return e.push(r),t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[];var r=this.options.tx.outputs[1].value;let i=this.options.wallet;var s=this.options.contract.options.addr;let n=this.options.data.params.sim;if(!n){n=this.options.tx.inputs[0].getAddress().toString()}var a=this.options.data.$top||0;r=await i.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:n,value:r/2}],comment:JSON.stringify({$tag:"inner",$top:a+1,hash:this.options.tx.hash("hex"),account:s})},s);return e.push(r),t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){return await this.verify()?await super.run():{derive:[]}}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){r=r(79);t.exports=class extends r{async run(){if(!await this.verify())return{derive:[]};let t=await super.run(),e=[],r=this.options.contract;var i=this.options.data.params.oper;let s=this.options.wallet;var n=r.options.addr;switch(i){case"pubk":{var a,o,c,u,h=this.options.data.params.addr,l=this.options.data.params.pubk;let t=this.options.data.params.partner,i=("object"==typeof r.options.contacts&&!Array.isArray(r.options.contacts)||(r.options.contacts={}),t&&t.split(",").map(t=>{r.options.contacts[t]||(r.options.contacts[t]={st:0})}),"");for(a of Object.keys(r.options.contacts))h!=a&&(o=r.options.contacts[a],c=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:a,value:1e4}],comment:JSON.stringify({oper:"scnotify",type:"mssendpubk",$tag:"inner",hash:this.options.tx.hash("hex"),data:l,m:r.options.m,n:r.options.n,contract:r.options.dst,account:n})},n),e.push(c),o.pubk&&(i&&(i+=","),i+=o.pubk));i&&(u=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:h,value:1e4}],comment:JSON.stringify({oper:"scnotify",type:"mssendpubk",$tag:"inner",hash:this.options.tx.hash("hex"),data:i,contract:r.options.dst,account:n})},n),e.push(u)),r.options.contacts[h]?r.options.contacts[h].pubk||(r.options.contacts[h].pubk=l):r.options.contacts[h]={pubk:l,st:0};break}case"puba":{var p,f=this.options.data.params.addr,d=this.options.data.params.puba;let t=!0;for(p of(r.options.puba=r.options.puba||d,Object.keys(r.options.contacts))){let e=r.options.contacts[p];p==f&&r.options.puba==d&&(e.st=1),1!=e.st&&(t=!1)}r.options.status=t;break}case"sign":if(1==r.options.status){var m,g,y=this.options.data.params.addr;for(m of Object.keys(r.options.contacts))m!=y&&(g=await s.send({sendafter:!1,subtractFee:!1,sort:!1,outputs:[{address:m,value:1e4}],comment:JSON.stringify({oper:"scnotify",type:"mssendtx",$tag:"inner",hash:this.options.tx.hash("hex"),data:this.options.data.params.tx,contract:r.options.dst,account:n})},n),e.push(g))}break;default:return t}return t.derive=e,t}async confirm(){return!0}async unconfirm(){return!0}async verify(){return super.verify()}}},function(t,e,r){var i=r(11);const s=r(5).ContractEnvType,n=r(39).broadcast;t.exports=class extends i{async confirm(){if(this.mode==s.Wallet){let t=this.options.tx.outputs[1];t&&(this.data.addr=t.getAddress().toString(),this.options.env.emit(this.data.type+"/receive",this.data),n(this.data.type+"/receive",this.data))}}async verify(){return!0}}},function(t,e,r){const i=r(0);var s=r(11);const n=r(5).PropStatus;t.exports=class extends s{async confirm(){let t=this.options.env,e=await t.propList.getVp(this.data.ori.pid);return e&&(e.pst=n.Delete,await t.propList.setVp(e)),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;let r=await t.propList.getVp(this.data.ori.pid);return r&&r.current.hash==e.inputs[0].prevout.hash&&r.current.index==e.inputs[0].prevout.index&&(r.pst=n.Ready,await t.propList.setVp(r)),!0}async verify(){let t=this.options.env;var e=this.options.tx,r=this.data;return!(!r.ori||!r.ori.pid||t.network.stockReg.test(r.ori.pid)||t.network.tokenReg.test(r.ori.pid)||!(r=await t.propList.getVp(r.ori.pid))||r.pst!=n.Ready||(i.strictEqual(r.current.hash,e.inputs[0].prevout.hash),i.strictEqual(r.current.index,e.inputs[0].prevout.index),0))}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractType:n}=r(5),a=r(7),o=r(21).opcodes;t.exports=class extends i{async confirm(){return this.options.env,this.options.tx.hash("hex"),this.mode===s.Block&&await this.HandleVoteTrans(!1),!0}async unconfirm(){return this.options.env,this.options.tx,this.mode===s.Block&&await this.HandleVoteTrans(!0),!0}async HandleVoteTrans(t){let e=this.options.env;var r=this.options.tx,i=this.options.tx.outputs[0].script.code;if(i[0].value==o.OP_RETURN)try{var s=JSON.parse(Buffer.from(i[1].data).toString());if(s&&s.oper==n.vote)switch(s.type){case"mine":{let i=0;for(var c of r.inputs){var u,h=await e.getExtendTX(c.prevout.hash);h&&e.voteMgr.isIn(h.height)?(u=h.tx.outputs[c.prevout.index])&&u.value?i+=u.value/a.COIN|0:e.logger.warning("Voting: Invalid UTXO Info"):e.logger.warning("Voting: Invalid UTXO Height")}0<i&&await e.voteMgr.calcVote(i,s.ca,t);break}case"oracle":{let i=0;for(var l of r.inputs){var p,f=await e.getExtendTX(l.prevout.hash);f&&e.voteMgr.isIn(f.height)?(p=f.tx.outputs[l.prevout.index])&&p.value?i+=p.value/1e5|0:e.logger.warning("Oracle: Invalid UTXO Info"):e.logger.warning("Oracle: Invalid UTXO Height")}0<i&&await e.voteMgr.calcOracle(i,{k:s.k,v:s.v},t);break}}}catch(i){console.log(i)}}async verify(){return!0}}},function(t,e,r){const i=r(0);var s=r(11);const{BlockFinalType:n,ContractEnvType:a,ContractType:o,PropStatus:c}=r(5),u=r(38).VerifyError,h=r(7),l=r(39).broadcast,p=r(1);t.exports=class extends s{async insert(){let t=this.options.env,e=this.options.tx;var r=2<e.outputs.length?e.outputs[2].getReturnData():null;let s=await t.propList.getVp(this.data.pid);if(r){if(this.mode==a.Wallet&&s.bid&&(r=await t.getTX(s.bid.hash))&&(r=await t.getWalletsByTX(r)))for(const e of r){const r=await t.get(e);i(r),await r.remove(s.bid.hash)}r=e.outputs[1].value;var n,o=e.outputs[2].getAddress().toString();if(r>=this.data.fixed||t.curHeight>=this.data.period&&r>s.gold){if(Reflect.deleteProperty(s,"bid"),s.current={hash:this.options.hash,index:2,address:o},s.pst=c.Ready,await t.propList.setVp(s,e),t.network.stockReg.test(s.pid)){let e=t.cpList.getItem(s.cid);e&&(e.status=1,await t.cpList.addItem(e))}this.mode==a.Wallet&&(n={pid:s.pid,address:s.current.address,wid:s.wid,account:s.account,time:p.now(),height:-1,cid:s.cid},t.emit("prop/auction",n),l("prop/auction",n))}else s.pst=c.Sale,s.bid={},s.bid.raw=this.options.raw,s.bid.fixed=this.data.fixed,s.bid.period=this.data.period,s.bid.hash=this.options.hash,s.bid.value=r,s.bid.address=o,await t.propList.setVp(s)}else s.pst=c.Sale,s.bid={},s.bid.raw=this.options.raw,s.bid.fixed=this.data.fixed,s.bid.period=this.data.period,s.bid.hash=this.options.hash,s.bid.value=s.gold,s.bid.address="",await t.propList.setVp(s);return!0}async erase(){let t=this.options.env,e=this.options.tx;var r=2<e.outputs.length?e.outputs[2].getReturnData():null,i=e.inputs[0];let s=await t.propList.getVp(this.data.pid);if(s)if(r){if(r=await t.getExtendTX(i.prevout.hash)){let e=r.tx.outputs[i.prevout.index];s.current={hash:i.prevout.hash,index:i.prevout.index,address:e.getAddress().toString()},s.bid={hash:this.options.hash,value:s.gold,address:"",raw:this.options.raw,fixed:this.data.fixed,period:this.data.period},s.pst=c.Sale,await t.propList.setVp(s,r.tx)}}else Reflect.deleteProperty(s,"bid"),s.pst=c.Ready,await t.propList.setVp(s)}async confirm(){let t=this.options.env,e=this.options.tx;var r=e.hash("hex"),i=e.outputs[2].getAddress().toString();let s=await t.propList.getVp(this.data.pid);if(Reflect.deleteProperty(s,"bid"),s.current={hash:r,index:2,address:i},s.height=this.options.coinbaseHeight,s.pst=c.Ready,await t.propList.setVp(s,e),t.network.stockReg.test(s.pid)){let e=t.cpList.getItem(s.cid);e&&(e.status=1,await t.cpList.addItem(e))}return this.mode==a.Wallet&&(r={pid:s.pid,address:s.current.address,wid:s.wid,account:s.account,time:this.options.block.time,height:s.height,cid:s.cid},t.emit("prop/auction",r),l("prop/auction",r)),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx,r=e.inputs[0].prevout,i=await t.getExtendTX(r.hash);if(i){let n=i.tx.outputs[r.index];var s=n.getReturnData();let o=await t.propList.getVp(s.pid);if(o&&(o.current={hash:r.hash,index:r.index,address:n.getAddress().toString()},o.height=i.height-1,await t.propList.setVp(o,e)),t.network.stockReg.test(o.pid)){let e=t.cpList.getItem(o.cid);e&&(e.status=1,await t.cpList.addItem(e))}this.mode==a.Wallet&&(s={pid:o.pid,address:o.current.address,wid:o.wid,account:o.account,time:this.options.block.time,height:o.height,cid:o.cid},t.emit("prop/auction",s),l("prop/auction",s))}else this.mode==a.Wallet&&(r=await t.propList.getVp(this.data.pid),await t.propList.delVp(r));return!0}async verify(){var t=this.data;let e=this.options.env,r=this.options.tx;var s=2<r.outputs.length?r.outputs[2].getReturnData():null,n=await e.propList.getVp(t.pid);if(!n)return!1;switch(this.mode){case a.Mempool:if(i.strictEqual(t.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(t.prev.index,r.inputs[0].prevout.index),i(e.curHeight+h.BLOCK_DAY>=this.data.period),i(t.cid!=e.network.genesisId),s){if(n.period<e.curHeight)throw new u(r,"sale order expired","contract",0);if(i.strictEqual(s.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(s.prev.index,r.inputs[0].prevout.index),i.strictEqual(s.pid,t.pid),i.strictEqual(s.oper,o.propExchange),!n.bid)throw new u(r,"sale order lack bid info","contract",0);if(n.bid.value>=this.data.fixed)throw new u(r,"can not bid on sale order finished","contract",0);if(r.outputs[1].value<=n.bid.value||r.outputs[1].value<=n.gold)throw new u(r,"invalid bid price","contract",0);var l=await e.getTX(n.bid.hash);l&&await e.removeDoubleSpenders(l)}else i(n.pst===c.Ready);break;case a.Block:if(i.strictEqual(t.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(t.prev.index,r.inputs[0].prevout.index),i(t.cid!=e.network.genesisId),i.strictEqual(s.prev.hash,r.inputs[0].prevout.hash),i.strictEqual(s.prev.index,r.inputs[0].prevout.index),i.strictEqual(s.pid,t.pid),i.strictEqual(s.oper,o.propExchange),r.outputs[1].value<=n.gold)throw new u(r,"invalid bid price","contract",0)}return!0}isBlockFinal(){var t=this.options.env,e=this.options.tx;return this.data.period<t.curHeight?n.Expired:2<=e.outputs.length&&(e.outputs[1].value>=this.data.fixed||this.data.period==t.curHeight&&e.outputs[1].value>=e.outputs[2].value)?n.Final:n.Waiting}isPreVerify(){let t=this.options.tx;return!!(2<t.outputs.length&&t.outputs[2].getReturnData())}}},function(t,e,r){var i=r(11);const{OrderData:s,ContractEnvType:n,BlockFinalType:a,VerifyCode:o}=r(5),c=r(26),u=r(83).stockItem,h=r(59),l=r(27),p=r(39).broadcast,f=r(1),d=r(7);t.exports=class extends i{async insert(){if(this.mode!=n.Wallet){let n=this.options.env;var t=this.options.tx,e=this.data.addr,r=await n.getGuider(e);if(2==t.outputs.length){let s=this.data.sum,p=0;const f=h.fromTX(t);f.outputs.pop(),f.view=await n.getSpentViewUnLock(f);var i,a=f.getInputValue();let g=await n.getCpSnap(this.data.cid);if(!g)return o.SnapNull;r&&g.grate&&g.grate<50&&0<g.grate&&(m=s/100*g.grate|0,f.outputs.push(c.fromScript(r,m)),s-=m),g.addresses.map(t=>{var e=s/100*g.lords[t]*3|0;f.outputs.push(c.fromScript(t,e)),p+=e});let y=0;for(i of g.slist)if(!(i.sum>g.hSum)){var u=s/(d.STOCK_ORIENT+g.hSum)*i.sum|0;if(f.outputs.push(c.fromScript(i.addr,u)),p+=u,(y+=i.sum)>=g.hSum)break}f.outputs.push(c.fromScript(g.addrOfMaster,s-p)),f.outputs.push(c.fromScript(e,0));var m=await f.getSigopsSize(),[a]=(e=a-this.data.sum-l.getMinFee(m),0<e?f.outputs[f.outputs.length-1].value=e:f.outputs.pop(),f.commit());await n.removeDoubleSpenders(t),await n._addTX(a)}else{let t=new s(this.data.cid,this.data.uid,this.data.sn,this.data.sum,this.data.addr,r);t.publish=n.curHeight,t.height=-1,t.hash=this.options.hash,await n.addOrder(t),-1!=n.hmacConnection.indexOf(this.data.cid)&&(this.data.hash=this.options.hash,this.data.height=-1,this.data.confirm=0,this.data.time=f.now(),n.emit("contract.order.add",this.data),p("cp/orderPay",this.data))}}return!0}async confirm(){let t=this.options.env,e=this.options.tx;var r=this.data.addr,i=await t.getGuider(r);let a=new s(this.data.cid,this.data.uid,this.data.sn,this.data.sum,this.data.addr,i);switch(a.publish=t.curHeight,a.height=this.options.coinbaseHeight,a.hash=this.options.hash,this.mode){case n.Wallet:{let r=0;for(let s=1;s<=e.outputs.length-3;s++){let n=e.outputs[s];var o=n.getAddress().toString();if(1==s&&i&&o==i){r=1;let i=new u;i.height=this.options.coinbaseHeight,i.txid=e.txid(),i.type=u.RecordType.Ads,i.cid=this.data.cid,i.addr=o,i.price=n.value,await t.cpList.stockAds(i)}else if(s>r){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=o,r.price=n.value,await t.cpList.stockBonus(r)}}break}case n.Block:{await t.addOrder(a);let r=0;for(let s=1;s<=e.outputs.length-3;s++){let n=e.outputs[s];var c=n.getAddress().toString();if(1==s&&i&&c==i){r=1;let i=new u;i.height=this.options.coinbaseHeight,i.txid=e.txid(),i.type=u.RecordType.Ads,i.cid=this.data.cid,i.addr=c,i.price=n.value,await t.cpList.stockAds(i)}else if(s>r){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=c,r.price=n.value,await t.cpList.stockBonus(r)}}-1!=t.hmacConnection.indexOf(this.data.cid)&&(this.data.hash=this.options.hash,this.data.height=this.options.coinbaseHeight,this.data.confirm=1,this.data.time=this.options.block.time,t.emit("contract.order.confirm",this.data),p("cp/orderPay",this.data));break}}return!0}async unconfirm(){let t=this.options.env,e=this.options.tx;var r=this.data.addr,i=await t.getGuider(r);switch(this.mode){case n.Wallet:{let r=0;for(let s=1;s<=e.outputs.length-3;s++){let n=e.outputs[s];var a=n.getAddress().toString();if(1==s&&i&&a==i){r=1;let i=new u;i.height=this.options.coinbaseHeight,i.txid=e.txid(),i.type=u.RecordType.Ads,i.cid=this.data.cid,i.addr=a,i.price=n.value,await t.cpList.stockCancelAds(i)}else if(s>r){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=a,r.price=n.value,await t.cpList.stockCancelBonus(r)}}break}case n.Block:{let r=new s(this.data.cid,this.data.uid,this.data.sn,this.data.sum,this.data.addr,i),n=(r.publish=t.curHeight,r.height=-1,r.hash=this.options.hash,await t.addOrder(r),0);for(let r=1;r<=e.outputs.length-3;r++){let s=e.outputs[r];var o=s.getAddress().toString();if(1==r&&i&&o==i){n=1;let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Ads,r.cid=this.data.cid,r.addr=o,r.price=s.value,await t.cpList.stockCancelAds(r)}else if(r>n){let r=new u;r.height=this.options.coinbaseHeight,r.txid=e.txid(),r.type=u.RecordType.Bonus,r.cid=this.data.cid,r.addr=o,r.price=s.value,await t.cpList.stockCancelBonus(r)}}-1!=t.hmacConnection.indexOf(this.data.cid)&&(this.data.hash=this.options.hash,this.data.height=-1,this.data.confirm=0,this.data.time=this.options.block.time,t.emit("contract.order.unconfirm",this.data),p("cp/orderPay",this.data));break}}return!0}async erase(){if(this.mode!=n.Wallet){let t=this.options.env;2<this.options.tx.outputs.length&&(this.data.confirm=0,t.emit("contract.order.remove",this.data))}return!0}async verify(){let t=this.options.env;var e=this.options.tx;let r=h.fromTX(e);r.view=this.options.coins||null,this.mode==n.Mempool&&(r.view=await t.node.mempool.getSpentViewUnLock(e));var i=r.getInputValue();if(i<this.data.sum)return!1;if(e.outputs.length<2)return!1;if(2!=e.outputs.length){var s=this.data.addr,a=await t.getGuider(s);let n=this.data.sum;var c=await t.getCpSnap(this.data.cid);if(!c)return o.SnapNull;let h=0,m=0;for(let t=1;t<e.outputs.length;t++){let o=e.outputs[t];var u=o.getAddress().toString();if(1==t&&a&&u==a){if(m=1,!(c.grate&&c.grate<20&&0<c.grate))return!1;if(o.value!=n/100*c.grate|0)return!1;n-=o.value}else if(t<=c.addresses.length+m){if(o.value!=n/100*c.lords[u]*3|0||u!=c.addresses[t-m-1])return!1;h+=o.value}else if(t<=c.addresses.length+m+c.slist.length){var p=c.slist[t-c.addresses.length-m-1],f=n/(d.STOCK_ORIENT+c.hSum)*p.sum|0;if(o.value!=f||u!=p.addr)return!1;h+=o.value}else if(t==c.addresses.length+m+c.slist.length+1){if(u!=c.addrOfMaster||o.value!=n-h)return!1}else if(f=await r.getSigopsSize(),p=i-this.data.sum-l.getMinFee(f),u!=s||o.value!=p)return!1}}return!0}isBlockFinal(){this.options.env;var t=this.options.tx;return t.outputs.length<2?a.Expired:2==t.outputs.length?a.Waiting:a.Final}async checkFees(){return!0}}},function(t,e,r){const i=r(0),s=r(109),{ContractEnvType:n,BlockFinalType:a}=r(5);var o=r(11);const c=r(7),u=r(39).broadcast,h=r(6),l=r(12);t.exports=class extends o{async insert(){let t=this.options.env,e=this.options.tx;switch(this.data.body.dst=e.outputs[1].getAddress().toString(),this.mode){case n.Mempool:try{var r=JSON.parse(this.data.body.content);switch(r.cmd){case"peerdel":i(this.data.body.dst==t.node.config.notifyAddress),i(l.fromString(this.data.body.dst).hash.toString("hex")==h.hash160(Buffer.from(r.pub,"hex")).toString("hex")),i(s.verifyObj(r.payload,r.sig,r.pub)),await t.node.rpc._delPeer([r.payload.host]);break;case"peeradd":i(this.data.body.dst==t.node.config.notifyAddress),i(l.fromString(this.data.body.dst).hash.toString("hex")==h.hash160(Buffer.from(r.pub,"hex")).toString("hex")),i(s.verifyObj(r.payload,r.sig,r.pub)),await t.node.rpc._addPeer([r.payload.host,r.payload.key])}}catch(t){}break;case n.Wallet:if(t.NotifyList.get(this.data.sn))return;var a=this.data.body.dst,[a,o]=await t.getAccountByAddress(a,e);this.data.account=o,this.data.wid=a,t.emit("notify/receive",this.data),u("notify/receive",this.data),await t.NotifyList.set(this.data.sn,this.data)}return!0}async confirm(){}async unconfirm(){}async erase(){let t=this.options.env;return this.options.tx,this.mode===n.Wallet&&(await t.NotifyList.delete(this.data.sn),t.emit("notify/remove",this.data),u("notify/remove",this.data)),!0}async verify(){var t=this.options.env;let e=this.options.tx;return!(e.getOutputValue()<.1*c.COIN||2<e.outputs.length||this.data.h>t.curHeight)}isBlockFinal(){var t=this.options.env;return this.data.h<t.curHeight-6?a.Expired:a.Waiting}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractStatus:n,BlockFinalType:a}=r(5),o=r(38).VerifyError;t.exports=class extends i{async insert(){let t=this.options.env;return this.data.period<t.curHeight?await t.transactionList.delTransContract(this.data,!0):(this.data.current={hash:this.options.hash,index:0},this.data.raw=this.options.raw,await t.transactionList.addTransContract(s.Mempool,this.data)),!0}async erase(){let t=this.options.env;switch(this.mode){case s.Mempool:await t.transactionList.delTransContract(this.data);break;case s.Wallet:await t.transactionList.delTransContract(this.data,!0)}}async verify(){let t=this.options.env;var e=this.options.tx;if(this.data.period<t.curHeight)throw new o(e,"transaction contract expired","contract",0);if(t.transactionList.query(this.data.type,this.data.addr)!=n.None)throw new o(e,"Same Address Contract Finded","contract",0);return!0}isBlockFinal(){var t=this.options.env;return this.data.period<t.curHeight?a.Expired:a.Waiting}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,ContractStatus:n}=r(5),a=r(110);t.exports=class extends i{async confirm(){let t=this.options.env,e=n.Backed;switch(2==this.data.master&&(e=n.Exchanged),this.mode){case s.Block:{let r=t.transactionList.get(this.data.type+"."+this.data.addr);r?(r.transStatus=e,await t.transactionList.saveContract(r,!0)):await t.transactionList.addTransContract(s.Block,this.data,!0);break}case s.Wallet:{let r=t.transactionList.get(this.data.type+"."+this.data.addr);r?(r.transStatus=e,await t.transactionList.saveContract(r,!0)):await t.transactionList.addTransContract(s.Wallet,this.data,!0);break}}return!0}async verify(){let t=this.options.env;switch(this.mode){case s.Mempool:case s.Block:case s.Wallet:{var e=this.data.master,r=t.transactionList.get(this.data.type+"."+this.data.addr);let i=r.transStatus;if(i!==n.Expired&&i!==n.Confirmed&&i!==n.Backed&&i!==n.Exchanged){let e=new a(t.network.txcheckpoint,r);[,i]=await e.execute(t)}return(i===n.Expired||i===n.Confirmed||i===n.Backed||i===n.Exchanged)&&!(i==n.Expired&&1!=e||i==n.Confirmed&&2!=e||i==n.Backed&&1!=e||i==n.Exchanged&&2!=e)}}}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractEnvType:n}=r(5),a=r(62).verifyData,o=r(83).stockItem,c=r(7),u=r(39).broadcast;t.exports=class extends i{async confirm(){let t=this.options.env,e=this.options.tx,r=(this.data.txid=e.txid(),o.fromObj(this.data));switch(r.type){case o.RecordType.Offer:var i;await t.cpList.stockOffer(r),this.mode!=n.Block||(i=t.cpList.getRecord(r.cid))&&u("cp/stock",i);break;case o.RecordType.Purchase:if(await t.cpList.stockPurchase(r),this.mode==n.Block)try{var s=await t.accountList.query([["cid",r.cid]]);r.support=s.list.length,(s=t.cpList.getRecord(r.cid))&&(r.sum_left=s.stock.sum),u("cp/stockPurchase",r)}catch(t){}break;case o.RecordType.Bid:await t.cpList.stockBid(r),this.mode==n.Block&&u("cp/stockBid",r);break;case o.RecordType.Auction:await t.cpList.stockAuction(r),this.mode==n.Block&&u("cp/stockAuction",r);break;case o.RecordType.Send:await t.cpList.stockSend(r)}return!0}async unconfirm(){let t=this.options.env,e=this.options.tx;this.data.txid=e.txid();var r=o.fromObj(this.data);switch(r.type){case o.RecordType.Offer:t.cpList.stockCancelOffer(r);break;case o.RecordType.Bid:t.cpList.stockCancelBid(r);break;case o.RecordType.Auction:t.cpList.stockCancelAuction(r);break;case o.RecordType.Purchase:t.cpList.stockCancelPurchase(r);break;case o.RecordType.Send:t.cpList.stockCancelSend(r)}return!0}async verify(){let t=this.options.env,e=this.options.tx,r=t.accountList;if(!a(this.data.body))return s.SignFailed;if(this.data.h>t.curHeight)return s.WrongHeight;var i=this.data.body.data,u=t.cpList.getItem(i.cid);if(!u)return s.WrongPublisher;if(!i.sum||i.sum<c.STOCK_TRADE_SINGLE)return s.WrongSum;switch(i.type){case o.RecordType.Offer:if(2<e.outputs.length)return s.WrongFormat;if(u.current.address!=i.addr)return s.WrongPublisher;if(i.price<c.GRAM||i.price>c.STOCK_MAX_PRICE)return s.WrongPrice;if(i.sum<=0||i.sum>c.STOCK_ADDED_SINGLE||u.stock.hSum+i.sum>c.STOCK_ADDED)return s.WrongSum;if(u.stock.hBonus<.3*u.stock.hSum*u.stock.hPrice)return s.WrongBonus;if(this.mode==n.Block||this.mode==n.Mempool){let r=this.options.coins||null;if(this.mode==n.Mempool&&(r=await t.node.mempool.getSpentViewUnLock(e)),e.getInputValue(r)-e.getOutputValue()<.05*i.sum*i.price)return s.WrongFee}if(u.stock.hHeight){if(this.data.h-u.stock.height<=c.BLOCK_DAY*c.STOCK_OFFER_PERIOD)return s.StockOffering;if(this.data.h-u.stock.height<=c.BLOCK_DAY*c.STOCK_OFFER_CD)return s.StockCooling;if(this.data.body.data.price<u.stock.lastPrice||this.data.body.data.price>4*u.stock.lastPrice)return s.WrongPrice}break;case o.RecordType.Bid:if(u.stock.price<c.GRAM||u.stock.price>c.STOCK_MAX_PRICE)return s.WrongPrice;if(i.sum<c.STOCK_TRADE_SINGLE||i.sum>c.STOCK_MAX_TRADE_SINGLE)return s.WrongSum;if(this.mode==n.Block||this.mode==n.Mempool){let r=this.options.coins||null;if(this.mode==n.Mempool&&(r=await t.node.mempool.getSpentViewUnLock(e)),e.getInputValue(r)-e.getOutputValue()<.05*i.sum*i.price)return s.WrongFee}var h=r.getStockAccount(i.cid,i.addr);if(!h)return s.StockAccountNotExist;if(h.seq+1!==i.seq)return s.AccountSequenceWrong;if(h.sum<i.sum)return s.StockAccountNotEnoughSum;if(h.stock.period>=this.data.h)return s.StockOffering;break;case o.RecordType.Auction:{if(!(h=r.getStockAccount(i.cid,i.to)))return s.StockAccountNotExist;if(i.to==i.addr)return s.WrongPublisher;if(h.stock.sum<i.sum)return s.StockAccountNotEnoughSum;var l=r.getStockAccount(i.cid,i.addr);let t=0;if((t=l?l.seq:t)+1!==i.seq)return s.AccountSequenceWrong;if(h.stock.period<this.data.h)return s.StockOfferExpired;if(this.mode==n.Block||this.mode==n.Mempool){let t=e.outputs[1];if(i.price!=h.stock.price||t.getAddress().toString()!=h.addr||t.value!=i.sum*h.stock.price)return s.FundNotEnough}break}case o.RecordType.Purchase:{if(u.current.address!==i.to)return s.WrongPublisher;if(!u.stock.hHeight)return s.StockOfferExpired;if(this.data.h-u.stock.height>c.BLOCK_DAY*c.STOCK_OFFER_PERIOD)return s.StockOfferExpired;if(u.stock.sum<i.sum)return s.StockAccountNotEnoughSum;let a=0;if((a=(l=r.getStockAccount(i.cid,i.addr))?l.seq:a)+1!==i.seq)return s.AccountSequenceWrong;if(this.mode==n.Block||this.mode==n.Mempool){let r=this.options.coins||null;if(this.mode==n.Mempool&&(r=await t.node.mempool.getSpentViewUnLock(e)),e.getInputValue(r)-e.getOutputValue()<i.sum*i.price)return s.FundNotEnough}break}case o.RecordType.Send:if(!(h=r.getStockAccount(i.cid,i.addr)))return s.StockAccountNotExist;if(i.to==i.addr)return s.WrongPublisher;if(h.seq+1!==i.seq)return s.AccountSequenceWrong;if(h.sum<i.sum)return s.StockAccountNotEnoughSum}return!0}isPreVerify(){let t=this.options.tx;return this.data.txid=t.txid(),o.fromObj(this.data).type===o.RecordType.Bid}async checkFees(){return!0}}},function(t,e,r){r=r(11);t.exports=class extends r{async insert(){let t=this.options.env;var e=this.options.tx;for(let i=1;i<e.outputs.length;i++){let s=e.outputs[i];var r=s.getAddress().toString();1e5==s.value&&t.setGuider(this.data.addr,this.data.cid,r)}return!0}async confirm(){return!0}async unconfirm(){return!0}async erase(){let t=this.options.env;var e=this.options.tx;for(let i=1;i<e.outputs.length;i++){var r=e.outputs[i].getAddress().toString();t.unsetGuider(this.data.addr,this.data.cid,r)}return!0}async verify(){return!0}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,VerifyCode:n}=r(5),a=r(157).ErItem,o=r(32),c=r(6),u=r(12),h=r(39).broadcast;t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;switch(this.data.startHeight=t.curHeight,await t.erList.setEr(this.data,e),this.mode){case s.Wallet:var r=u.fromWitnessPubkeyhash(c.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);r&&i&&(this.data.account=i,this.data.wid=r,t.emit("ca/issue",this.data),h("ca/issue",this.data));break;case s.Block:t.node.transmit("ca.issue",this.data),i=o.fromPrivate(Buffer.from(t.node.config.alliancePrivateKey,"hex"),!0,t.network),o.fromPrivate(c.hash256(Buffer.concat([Buffer.from(this.data.source.cid+"-"+this.data.source.uid),i.privateKey]),!0,t.network)).publicKey.toString("hex")==this.data.witness&&t.node.transmit("ca.issue.alliance",this.data);break}return!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;switch(t.erList.delEr(this.data,e),this.mode){case s.Wallet:var r=u.fromWitnessPubkeyhash(c.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);this.data.account=i,this.data.wid=r,t.emit("ca/unissue",this.data),h("ca/unissue",this.data);break;case s.Block:t.node.transmit("ca.unissue",this.data)}return!0}async erase(){return!0}async verify(){var t=this.options.env,e=this.data;t=o.fromPublic(Buffer.from(e.witness,"hex"),t.network);return!!new a(e).verifying(t)||n.SignatureNotMatch}}},function(t,e,r){var i=r(11);const{ContractEnvType:s,VerifyCode:n,ContractType:a}=r(5),o=r(158).ErAbolishItem,c=r(32),u=r(39).broadcast,h=r(6),l=r(12);t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;switch(this.data.startHeight=t.curHeight,await t.erAbList.setErAb(this.data,e),this.mode){case s.Wallet:var r=l.fromWitnessPubkeyhash(h.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);this.data.account=i,this.data.wid=r,t.emit("ca/abolish",this.data),u("ca/abolish",this.data);break;case s.Block:t.node.transmit("ca.abolish",this.data)}return!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;switch(t.erAbList.delErAb(this.data,e),this.mode){case s.Wallet:var r=l.fromWitnessPubkeyhash(h.hash160(Buffer.from(this.data.witness,"hex")),t.network),[r,i]=await t.getAccountByAddress(r,e);this.data.account=i,this.data.wid=r,t.emit("ca/unabolish",this.data),u("ca/unabolish",this.data);break;case s.Block:t.node.transmit("ca.unabolish",this.data)}return!0}async erase(){return!0}async verify(){let t=this.options.env;var e=this.data,r=await t.erList.getEr(e.erid);return r&&r.witness==e.witness?e&&e.oper==a.erAbolish&&(r=await t.erAbList.getErAb(e.erid))&&e.abolishHeight>=r.abolishHeight?n.NotExistER:(r=c.fromPublic(Buffer.from(e.witness,"hex"),t.network),!!new o(e).verifying(r)||n.SignatureNotMatch):n.SignatureNotMatch}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractEnvType:n}=r(5),a=r(241).EnchancementItem,o=r(32);t.exports=class extends i{async insert(){return!0}async confirm(){if(this.mode!=n.Block)return!1;let t=this.options.env,e=this.options.tx;return this.data.enchanceTx=e.txid(),t.enCpList.setEn(this.data),!0}async unconfirm(){if(this.mode!=n.Block)return!1;let t=this.options.env;var e=this.options.tx;return t.enCpList.delEn(this.data,e),!0}async erase(){return!0}async verify(){let t=this.options.env,e=this.options.tx;var r=this.data,i=t.cpList.getItem(r.to),n=e.outputs[1].getAddress().toString();return i&&i.pubAddress&&i.pubAddress==n&&(i=t.cpList.getItem(r.from))&&i.pubAddress&&i.pubKey?(n=o.fromPublic(Buffer.from(i.pubKey,"hex"),t.network),!!new a(r).verifying(n)||s.SignatureNotMatch):s.NotExistCp}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractType:n}=r(5),a=r(159).X509Cert,o=r(32);t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;return t.x509CertList.setX509Cert(this.data,e),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;return t.x509CertList.delX509Cert(this.data,e),!0}async erase(){return!0}async verify(){let t=this.options.env;var e=this.data;if(e&&e.oper==n.x509Issue&&t.x509CertList.get(a.getKey(e.witness,e.certSq)))return s.DuplicateX509;var r=t.cpList.getItem(e.signCpid);return r&&r.pubKey?(r=o.fromPublic(Buffer.from(r.pubKey,"hex"),t.network),!!new a(e).verifying(r)||s.SignatureNotMatch):s.NotExistCp}}},function(t,e,r){var i=r(11);const{VerifyCode:s,ContractType:n}=r(5),a=r(160).X509Abolish,o=r(32);t.exports=class extends i{async insert(){return!0}async confirm(){let t=this.options.env;var e=this.options.tx;return t.x509AbolishList.setX509Abolish(this.data,e),!0}async unconfirm(){let t=this.options.env;var e=this.options.tx;return t.x509AbolishList.delX509Abolish(this.data,e),!0}async erase(){return!0}async verify(){let t=this.options.env;var e,r=this.data;if(1==r.certSq)return s.AbolishRootError;if(r&&r.oper==n.x509Abolish&&((e=t.x509AbolishList.get(a.getKey(r.witness,r.certSq)))&&r.activeTime>=e.activeTime))return s.AbolishTimeError;return(e=t.cpList.getItem(r.witness))&&e.pubKey&&r.signature?(e=o.fromPublic(Buffer.from(e.pubKey,"hex"),t.network),!!new a(r).verifying(e)||s.SignatureNotMatch):s.NotExistCp}}},function(t,e,r){"use strict";
|
|
443
443
|
/*!
|
|
444
444
|
* TXRecord.js
|
|
445
445
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -559,7 +559,7 @@ const i=r(5).ContractType;t.exports=function(t){if(!t)return r(192);switch(t.ope
|
|
|
559
559
|
* program.js - program object for vallnet
|
|
560
560
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
561
561
|
* https://github.com/bookmansoft/gamegold
|
|
562
|
-
*/const i=r(0),s=r(1),n=r(22),a=n.types;t.exports=class{constructor(t,e){i(s.isU8(t)),i(0<=t&&t<=16),i(Buffer.isBuffer(e)),i(2<=e.length&&e.length<=40),this.version=t,this.data=e}getType(){return 0===this.version?20===this.data.length?a.WITNESSPUBKEYHASH:32===this.data.length?a.WITNESSSCRIPTHASH:a.WITNESSMALFORMED:1===this.version?32===this.data.length?a.WITNESSMASTHASH:a.WITNESSMALFORMED:a.NONSTANDARD}isUnknown(){var t=this.getType();return t===a.WITNESSMALFORMED||t===a.NONSTANDARD}isMalformed(){return this.getType()===a.WITNESSMALFORMED}inspect(){var t=this.data.toString("hex"),e=n.typesByVal[this.getType()].toLowerCase();return`<Program: version=${this.version} data=${t} type=${e}>`}}},function(t){t.exports=JSON.parse('{"COMPRESSED_TYPE_INVALID":"compressed should be a boolean","EC_PRIVATE_KEY_TYPE_INVALID":"private key should be a Buffer","EC_PRIVATE_KEY_LENGTH_INVALID":"private key length is invalid","EC_PRIVATE_KEY_RANGE_INVALID":"private key range is invalid","EC_PRIVATE_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting private key is invalid","EC_PRIVATE_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PRIVATE_KEY_EXPORT_DER_FAIL":"couldn\'t export to DER format","EC_PRIVATE_KEY_IMPORT_DER_FAIL":"couldn\'t import from DER format","EC_PUBLIC_KEYS_TYPE_INVALID":"public keys should be an Array","EC_PUBLIC_KEYS_LENGTH_INVALID":"public keys Array should have at least 1 element","EC_PUBLIC_KEY_TYPE_INVALID":"public key should be a Buffer","EC_PUBLIC_KEY_LENGTH_INVALID":"public key length is invalid","EC_PUBLIC_KEY_PARSE_FAIL":"the public key could not be parsed or is invalid","EC_PUBLIC_KEY_CREATE_FAIL":"private was invalid, try again","EC_PUBLIC_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting public key is invalid","EC_PUBLIC_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PUBLIC_KEY_COMBINE_FAIL":"the sum of the public keys is not valid","ECDH_FAIL":"scalar was invalid (zero or overflow)","ECDSA_SIGNATURE_TYPE_INVALID":"signature should be a Buffer","ECDSA_SIGNATURE_LENGTH_INVALID":"signature length is invalid","ECDSA_SIGNATURE_PARSE_FAIL":"couldn\'t parse signature","ECDSA_SIGNATURE_PARSE_DER_FAIL":"couldn\'t parse DER signature","ECDSA_SIGNATURE_SERIALIZE_DER_FAIL":"couldn\'t serialize signature to DER format","ECDSA_SIGN_FAIL":"nonce generation function failed or private key is invalid","ECDSA_RECOVER_FAIL":"couldn\'t recover public key from signature","MSG32_TYPE_INVALID":"message should be a Buffer","MSG32_LENGTH_INVALID":"message length is invalid","OPTIONS_TYPE_INVALID":"options should be an Object","OPTIONS_DATA_TYPE_INVALID":"options.data should be a Buffer","OPTIONS_DATA_LENGTH_INVALID":"options.data length is invalid","OPTIONS_NONCEFN_TYPE_INVALID":"options.noncefn should be a Function","RECOVERY_ID_TYPE_INVALID":"recovery should be a Number","RECOVERY_ID_VALUE_INVALID":"recovery should have value between -1 and 4","TWEAK_TYPE_INVALID":"tweak should be a Buffer","TWEAK_LENGTH_INVALID":"tweak length is invalid"}')},function(t,e,r){"use strict";function i(t){return 1===t.length?"0"+t:t}function s(t){for(var e="",r=0;r<t.length;r++)e+=i(t[r].toString(16));return e}e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t)for(var i=0;i<t.length;i++)r[i]=0|t[i];else if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i<t.length;i+=2)r.push(parseInt(t[i]+t[i+1],16));else for(i=0;i<t.length;i++){var s=(n=t.charCodeAt(i))>>8,n=255&n;s?r.push(s,n):r.push(n)}return r},e.zero2=i,e.toHex=s,e.encode=function(t,e){return"hex"===e?s(t):t}},function(t,e,r){var i;function s(t){this.rand=t}if(t.exports=function(t){return(i=i||new s(null)).generate(t)},(t.exports.Rand=s).prototype.generate=function(t){return this._rand(t)},s.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?s.prototype._rand=function(t){return t=new Uint8Array(t),self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?s.prototype._rand=function(t){return t=new Uint8Array(t),self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(s.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var n=r(8);if("function"!=typeof n.randomBytes)throw new Error("Not supported");s.prototype._rand=function(t){return n.randomBytes(t)}}catch(t){}},function(t,e,r){"use strict";e.base=r(129),e.short=r(385),e.mont=r(387),e.edwards=r(388)},function(t,e,r){"use strict";var i=r(50).rotr32;function s(t,e,r){return t&e^~t&r}function n(t,e,r){return t&e^t&r^e&r}e.ft_1=function(t,e,r,i){return 0===t?s(e,r,i):1===t||3===t?e^r^i:2===t?n(e,r,i):void 0},e.ch32=s,e.maj32=n,e.p32=function(t,e,r){return t^e^r},e.s0_256=function(t){return i(t,2)^i(t,13)^i(t,22)},e.s1_256=function(t){return i(t,6)^i(t,11)^i(t,25)},e.g0_256=function(t){return i(t,7)^i(t,18)^t>>>3},e.g1_256=function(t){return i(t,17)^i(t,19)^t>>>10}},function(t,e,r){"use strict";var i=r(50),s=r(100),n=r(253),a=r(74),o=i.sum32,c=i.sum32_4,u=i.sum32_5,h=n.ch32,l=n.maj32,p=n.s0_256,f=n.s1_256,d=n.g0_256,m=n.g1_256,g=s.BlockHash,y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function v(){if(!(this instanceof v))return new v;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=y,this.W=new Array(64)}i.inherits(v,g),(t.exports=v).blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(t,e){for(var r=this.W,i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=c(m(r[i-2]),r[i-7],d(r[i-15]),r[i-16]);var s=this.h[0],n=this.h[1],g=this.h[2],y=this.h[3],v=this.h[4],b=this.h[5],w=this.h[6],x=this.h[7];for(a(this.k.length===r.length),i=0;i<r.length;i++){var k=u(x,f(v),h(v,b,w),this.k[i],r[i]),S=o(p(s),l(s,n,g));x=w,w=b,b=v,v=o(y,k),y=g,g=n,n=s,s=o(k,S)}this.h[0]=o(this.h[0],s),this.h[1]=o(this.h[1],n),this.h[2]=o(this.h[2],g),this.h[3]=o(this.h[3],y),this.h[4]=o(this.h[4],v),this.h[5]=o(this.h[5],b),this.h[6]=o(this.h[6],w),this.h[7]=o(this.h[7],x)},v.prototype._digest=function(t){return"hex"===t?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(t,e,r){"use strict";var i=r(50),s=r(100),n=r(74),a=i.rotr64_hi,o=i.rotr64_lo,c=i.shr64_hi,u=i.shr64_lo,h=i.sum64,l=i.sum64_hi,p=i.sum64_lo,f=i.sum64_4_hi,d=i.sum64_4_lo,m=i.sum64_5_hi,g=i.sum64_5_lo,y=s.BlockHash,v=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function b(){if(!(this instanceof b))return new b;y.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=v,this.W=new Array(160)}i.inherits(b,y),(t.exports=b).blockSize=1024,b.outSize=512,b.hmacStrength=192,b.padLength=128,b.prototype._prepareBlock=function(t,e){for(var r=this.W,i=0;i<32;i++)r[i]=t[e+i];for(;i<r.length;i+=2){var s=function(t,e){return(e=a(t,e,19)^a(e,t,29)^(t=c(t,e,6)))<0&&(e+=4294967296),e}(r[i-4],r[i-3]),n=function(t,e){return(e=o(t,e,19)^o(e,t,29)^(t=u(t,e,6)))<0&&(e+=4294967296),e}(r[i-4],r[i-3]),h=r[i-14],l=r[i-13],p=function(t,e){return(e=a(t,e,1)^a(t,e,8)^(t=c(t,e,7)))<0&&(e+=4294967296),e}(r[i-30],r[i-29]),m=function(t,e){return(e=o(t,e,1)^o(t,e,8)^(t=u(t,e,7)))<0&&(e+=4294967296),e}(r[i-30],r[i-29]),g=r[i-32],y=r[i-31];r[i]=f(s,n,h,l,p,m,g,y),r[i+1]=d(s,n,h,l,p,m,g,y)}},b.prototype._update=function(t,e){this._prepareBlock(t,e);var r=this.W,i=this.h[0],s=this.h[1],c=this.h[2],u=this.h[3],f=this.h[4],d=this.h[5],y=this.h[6],v=this.h[7],b=this.h[8],w=this.h[9],x=this.h[10],k=this.h[11],S=this.h[12],E=this.h[13],_=this.h[14],A=this.h[15];n(this.k.length===r.length);for(var R=0;R<r.length;R+=2){var I=_,j=A,C=function(t,e){return(t=a(t,e,14)^a(t,e,18)^(e=a(e,t,9)))<0&&(t+=4294967296),t}(b,w),P=function(t,e){return(t=o(t,e,14)^o(t,e,18)^(e=o(e,t,9)))<0&&(t+=4294967296),t}(b,w),O=function(t,e,r){return(e=t&e^~t&r)<0&&(e+=4294967296),e}(b,x,S),T=function(t,e,r){return(e=t&e^~t&r)<0&&(e+=4294967296),e}(w,k,E),F=this.k[R],B=this.k[R+1],N=r[R],D=r[R+1],L=m(I,j,C,P,O,T,F,B,N,D);O=g(I,j,C,P,O,T,F,B,N,D),I=function(t,e){return(t=a(t,e,28)^a(e,t,2)^(e=a(e,t,7)))<0&&(t+=4294967296),t}(i,s),j=function(t,e){return(t=o(t,e,28)^o(e,t,2)^(e=o(e,t,7)))<0&&(t+=4294967296),t}(i,s),C=function(t,e,r){return(t=t&e^t&r^e&r)<0&&(t+=4294967296),t}(i,c,f),P=function(t,e,r){return(t=t&e^t&r^e&r)<0&&(t+=4294967296),t}(s,u,d),T=l(I,j,C,P),F=p(I,j,C,P),_=S,A=E,S=x,E=k,x=b,k=w,b=l(y,v,L,O),w=p(v,v,L,O),y=f,v=d,f=c,d=u,c=i,u=s,i=l(L,O,T,F),s=p(L,O,T,F)}h(this.h,0,i,s),h(this.h,2,c,u),h(this.h,4,f,d),h(this.h,6,y,v),h(this.h,8,b,w),h(this.h,10,x,k),h(this.h,12,S,E),h(this.h,14,_,A)},b.prototype._digest=function(t){return"hex"===t?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(t,e,r){"use strict";
|
|
562
|
+
*/const i=r(0),s=r(1),n=r(21),a=n.types;t.exports=class{constructor(t,e){i(s.isU8(t)),i(0<=t&&t<=16),i(Buffer.isBuffer(e)),i(2<=e.length&&e.length<=40),this.version=t,this.data=e}getType(){return 0===this.version?20===this.data.length?a.WITNESSPUBKEYHASH:32===this.data.length?a.WITNESSSCRIPTHASH:a.WITNESSMALFORMED:1===this.version?32===this.data.length?a.WITNESSMASTHASH:a.WITNESSMALFORMED:a.NONSTANDARD}isUnknown(){var t=this.getType();return t===a.WITNESSMALFORMED||t===a.NONSTANDARD}isMalformed(){return this.getType()===a.WITNESSMALFORMED}inspect(){var t=this.data.toString("hex"),e=n.typesByVal[this.getType()].toLowerCase();return`<Program: version=${this.version} data=${t} type=${e}>`}}},function(t){t.exports=JSON.parse('{"COMPRESSED_TYPE_INVALID":"compressed should be a boolean","EC_PRIVATE_KEY_TYPE_INVALID":"private key should be a Buffer","EC_PRIVATE_KEY_LENGTH_INVALID":"private key length is invalid","EC_PRIVATE_KEY_RANGE_INVALID":"private key range is invalid","EC_PRIVATE_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting private key is invalid","EC_PRIVATE_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PRIVATE_KEY_EXPORT_DER_FAIL":"couldn\'t export to DER format","EC_PRIVATE_KEY_IMPORT_DER_FAIL":"couldn\'t import from DER format","EC_PUBLIC_KEYS_TYPE_INVALID":"public keys should be an Array","EC_PUBLIC_KEYS_LENGTH_INVALID":"public keys Array should have at least 1 element","EC_PUBLIC_KEY_TYPE_INVALID":"public key should be a Buffer","EC_PUBLIC_KEY_LENGTH_INVALID":"public key length is invalid","EC_PUBLIC_KEY_PARSE_FAIL":"the public key could not be parsed or is invalid","EC_PUBLIC_KEY_CREATE_FAIL":"private was invalid, try again","EC_PUBLIC_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting public key is invalid","EC_PUBLIC_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PUBLIC_KEY_COMBINE_FAIL":"the sum of the public keys is not valid","ECDH_FAIL":"scalar was invalid (zero or overflow)","ECDSA_SIGNATURE_TYPE_INVALID":"signature should be a Buffer","ECDSA_SIGNATURE_LENGTH_INVALID":"signature length is invalid","ECDSA_SIGNATURE_PARSE_FAIL":"couldn\'t parse signature","ECDSA_SIGNATURE_PARSE_DER_FAIL":"couldn\'t parse DER signature","ECDSA_SIGNATURE_SERIALIZE_DER_FAIL":"couldn\'t serialize signature to DER format","ECDSA_SIGN_FAIL":"nonce generation function failed or private key is invalid","ECDSA_RECOVER_FAIL":"couldn\'t recover public key from signature","MSG32_TYPE_INVALID":"message should be a Buffer","MSG32_LENGTH_INVALID":"message length is invalid","OPTIONS_TYPE_INVALID":"options should be an Object","OPTIONS_DATA_TYPE_INVALID":"options.data should be a Buffer","OPTIONS_DATA_LENGTH_INVALID":"options.data length is invalid","OPTIONS_NONCEFN_TYPE_INVALID":"options.noncefn should be a Function","RECOVERY_ID_TYPE_INVALID":"recovery should be a Number","RECOVERY_ID_VALUE_INVALID":"recovery should have value between -1 and 4","TWEAK_TYPE_INVALID":"tweak should be a Buffer","TWEAK_LENGTH_INVALID":"tweak length is invalid"}')},function(t,e,r){"use strict";function i(t){return 1===t.length?"0"+t:t}function s(t){for(var e="",r=0;r<t.length;r++)e+=i(t[r].toString(16));return e}e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t)for(var i=0;i<t.length;i++)r[i]=0|t[i];else if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i<t.length;i+=2)r.push(parseInt(t[i]+t[i+1],16));else for(i=0;i<t.length;i++){var s=(n=t.charCodeAt(i))>>8,n=255&n;s?r.push(s,n):r.push(n)}return r},e.zero2=i,e.toHex=s,e.encode=function(t,e){return"hex"===e?s(t):t}},function(t,e,r){var i;function s(t){this.rand=t}if(t.exports=function(t){return(i=i||new s(null)).generate(t)},(t.exports.Rand=s).prototype.generate=function(t){return this._rand(t)},s.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?s.prototype._rand=function(t){return t=new Uint8Array(t),self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?s.prototype._rand=function(t){return t=new Uint8Array(t),self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(s.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var n=r(8);if("function"!=typeof n.randomBytes)throw new Error("Not supported");s.prototype._rand=function(t){return n.randomBytes(t)}}catch(t){}},function(t,e,r){"use strict";e.base=r(129),e.short=r(385),e.mont=r(387),e.edwards=r(388)},function(t,e,r){"use strict";var i=r(50).rotr32;function s(t,e,r){return t&e^~t&r}function n(t,e,r){return t&e^t&r^e&r}e.ft_1=function(t,e,r,i){return 0===t?s(e,r,i):1===t||3===t?e^r^i:2===t?n(e,r,i):void 0},e.ch32=s,e.maj32=n,e.p32=function(t,e,r){return t^e^r},e.s0_256=function(t){return i(t,2)^i(t,13)^i(t,22)},e.s1_256=function(t){return i(t,6)^i(t,11)^i(t,25)},e.g0_256=function(t){return i(t,7)^i(t,18)^t>>>3},e.g1_256=function(t){return i(t,17)^i(t,19)^t>>>10}},function(t,e,r){"use strict";var i=r(50),s=r(100),n=r(253),a=r(74),o=i.sum32,c=i.sum32_4,u=i.sum32_5,h=n.ch32,l=n.maj32,p=n.s0_256,f=n.s1_256,d=n.g0_256,m=n.g1_256,g=s.BlockHash,y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function v(){if(!(this instanceof v))return new v;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=y,this.W=new Array(64)}i.inherits(v,g),(t.exports=v).blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(t,e){for(var r=this.W,i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=c(m(r[i-2]),r[i-7],d(r[i-15]),r[i-16]);var s=this.h[0],n=this.h[1],g=this.h[2],y=this.h[3],v=this.h[4],b=this.h[5],w=this.h[6],x=this.h[7];for(a(this.k.length===r.length),i=0;i<r.length;i++){var k=u(x,f(v),h(v,b,w),this.k[i],r[i]),S=o(p(s),l(s,n,g));x=w,w=b,b=v,v=o(y,k),y=g,g=n,n=s,s=o(k,S)}this.h[0]=o(this.h[0],s),this.h[1]=o(this.h[1],n),this.h[2]=o(this.h[2],g),this.h[3]=o(this.h[3],y),this.h[4]=o(this.h[4],v),this.h[5]=o(this.h[5],b),this.h[6]=o(this.h[6],w),this.h[7]=o(this.h[7],x)},v.prototype._digest=function(t){return"hex"===t?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(t,e,r){"use strict";var i=r(50),s=r(100),n=r(74),a=i.rotr64_hi,o=i.rotr64_lo,c=i.shr64_hi,u=i.shr64_lo,h=i.sum64,l=i.sum64_hi,p=i.sum64_lo,f=i.sum64_4_hi,d=i.sum64_4_lo,m=i.sum64_5_hi,g=i.sum64_5_lo,y=s.BlockHash,v=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function b(){if(!(this instanceof b))return new b;y.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=v,this.W=new Array(160)}i.inherits(b,y),(t.exports=b).blockSize=1024,b.outSize=512,b.hmacStrength=192,b.padLength=128,b.prototype._prepareBlock=function(t,e){for(var r=this.W,i=0;i<32;i++)r[i]=t[e+i];for(;i<r.length;i+=2){var s=function(t,e){return(e=a(t,e,19)^a(e,t,29)^(t=c(t,e,6)))<0&&(e+=4294967296),e}(r[i-4],r[i-3]),n=function(t,e){return(e=o(t,e,19)^o(e,t,29)^(t=u(t,e,6)))<0&&(e+=4294967296),e}(r[i-4],r[i-3]),h=r[i-14],l=r[i-13],p=function(t,e){return(e=a(t,e,1)^a(t,e,8)^(t=c(t,e,7)))<0&&(e+=4294967296),e}(r[i-30],r[i-29]),m=function(t,e){return(e=o(t,e,1)^o(t,e,8)^(t=u(t,e,7)))<0&&(e+=4294967296),e}(r[i-30],r[i-29]),g=r[i-32],y=r[i-31];r[i]=f(s,n,h,l,p,m,g,y),r[i+1]=d(s,n,h,l,p,m,g,y)}},b.prototype._update=function(t,e){this._prepareBlock(t,e);var r=this.W,i=this.h[0],s=this.h[1],c=this.h[2],u=this.h[3],f=this.h[4],d=this.h[5],y=this.h[6],v=this.h[7],b=this.h[8],w=this.h[9],x=this.h[10],k=this.h[11],S=this.h[12],E=this.h[13],_=this.h[14],A=this.h[15];n(this.k.length===r.length);for(var R=0;R<r.length;R+=2){var I=_,j=A,C=function(t,e){return(t=a(t,e,14)^a(t,e,18)^(e=a(e,t,9)))<0&&(t+=4294967296),t}(b,w),P=function(t,e){return(t=o(t,e,14)^o(t,e,18)^(e=o(e,t,9)))<0&&(t+=4294967296),t}(b,w),O=function(t,e,r){return(e=t&e^~t&r)<0&&(e+=4294967296),e}(b,x,S),T=function(t,e,r){return(e=t&e^~t&r)<0&&(e+=4294967296),e}(w,k,E),F=this.k[R],B=this.k[R+1],N=r[R],D=r[R+1],L=m(I,j,C,P,O,T,F,B,N,D);O=g(I,j,C,P,O,T,F,B,N,D),I=function(t,e){return(t=a(t,e,28)^a(e,t,2)^(e=a(e,t,7)))<0&&(t+=4294967296),t}(i,s),j=function(t,e){return(t=o(t,e,28)^o(e,t,2)^(e=o(e,t,7)))<0&&(t+=4294967296),t}(i,s),C=function(t,e,r){return(t=t&e^t&r^e&r)<0&&(t+=4294967296),t}(i,c,f),P=function(t,e,r){return(t=t&e^t&r^e&r)<0&&(t+=4294967296),t}(s,u,d),T=l(I,j,C,P),F=p(I,j,C,P),_=S,A=E,S=x,E=k,x=b,k=w,b=l(y,v,L,O),w=p(v,v,L,O),y=f,v=d,f=c,d=u,c=i,u=s,i=l(L,O,T,F),s=p(L,O,T,F)}h(this.h,0,i,s),h(this.h,2,c,u),h(this.h,4,f,d),h(this.h,6,y,v),h(this.h,8,b,w),h(this.h,10,x,k),h(this.h,12,S,E),h(this.h,14,_,A)},b.prototype._digest=function(t){return"hex"===t?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(t,e,r){"use strict";
|
|
563
563
|
/*!
|
|
564
564
|
* secp256k1-elliptic.js - wrapper for elliptic
|
|
565
565
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -769,12 +769,12 @@ const i=r(5).ContractType;t.exports=function(t){if(!t)return r(192);switch(t.ope
|
|
|
769
769
|
* ErrorPacket.js - worker packets for vallnet
|
|
770
770
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
771
771
|
* https://github.com/bookmansoft/gamegold
|
|
772
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
772
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18);class o extends n{constructor(t){super(),this.error=t||new Error,this.cmd=a.ERROR}getSize(){var t=this.error;let e=0;switch(e=(e=(e+=s.sizeVarString(c(t.message),"utf8"))+s.sizeVarString(c(t.stack),"utf8"))+s.sizeVarString(c(t.type),"utf8"),typeof t.code){case"number":e=e+1+4;break;case"string":e=(e+=1)+s.sizeVarString(t.code,"utf8");break;default:e+=1}return e}toWriter(t){var e=this.error;switch(t.writeVarString(c(e.message),"utf8"),t.writeVarString(c(e.stack),"utf8"),t.writeVarString(c(e.type),"utf8"),typeof e.code){case"number":t.writeU8(2),t.writeI32(e.code);break;case"string":t.writeU8(1),t.writeVarString(e.code,"utf8");break;default:t.writeU8(0)}return t}fromRaw(t){const e=new i(t,!0),r=this.error;switch(r.message=e.readVarString("utf8"),r.stack=e.readVarString("utf8"),r.type=e.readVarString("utf8"),e.readU8()){case 2:r.code=e.readI32();break;case 1:r.code=e.readVarString("utf8");break;default:r.code=null}return this}static fromRaw(t){return(new o).fromRaw(t)}workerHandle(t){t.emit("error",this.error)}masterHandle(t){t.emit("error",this.error)}}function c(t){return"string"!=typeof t?"":t}t.exports=o},function(t,e,r){"use strict";
|
|
773
773
|
/*!
|
|
774
774
|
* CheckResultPacket.js - worker packets for vallnet
|
|
775
775
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
776
776
|
* https://github.com/bookmansoft/gamegold
|
|
777
|
-
*/const i=r(2),s=r(3),n=r(114);var a=r(21);const o=r(18);class c extends a{constructor(t){super(),this.error=t||null,this.cmd=o.CHECKRESULT}getSize(){var t=this.error;let e=0;return t?e=(e=(e=(e=(e+=1)+s.sizeVarString(u(t.message),"utf8"))+s.sizeVarString(u(t.stack),"utf8"))+s.sizeVarString(u(t.code),"utf8"))+1+4:e+=1}toWriter(t){var e=this.error;return e?(t.writeU8(1),t.writeVarString(u(e.message),"utf8"),t.writeVarString(u(e.stack),"utf8"),t.writeVarString(u(e.code),"utf8"),t.writeU8(-1===e.op?255:e.op),t.writeU32(-1===e.ip?4294967295:e.ip)):t.writeU8(0),t}fromRaw(t){const e=new i(t,!0);if(0!==e.readU8()){const t=new n("");t.message=e.readVarString("utf8"),t.stack=e.readVarString("utf8"),t.code=e.readVarString("utf8"),t.op=e.readU8(),t.ip=e.readU32(),255===t.op&&(t.op=-1),4294967295===t.ip&&(t.ip=-1),this.error=t}return this}static fromRaw(t){return(new c).fromRaw(t)}}function u(t){return"string"!=typeof t?"":t}t.exports=c},function(t,e){var r,i,s,n,a,o,c,u,h,l,p,f,d,m,g,y,v,b,w,x,k,S,E,_,A,R,I,j,C,P,O,T,F,B,N,D,L,H,z,M,U,q,V,K,W,G,$={userAgent:!1},Y={},X=(r=Math,Dt=(Xt={}).lib={},i=Dt.Base={extend:function(t){J.prototype=this;var e=new J;return t&&e.mixIn(t),e.hasOwnProperty("init")||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},s=Dt.WordArray=i.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||n).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,s=t.sigBytes;if(this.clamp(),i%4)for(var n=0;n<s;n++){var a=r[n>>>2]>>>24-n%4*8&255;e[i+n>>>2]|=a<<24-(i+n)%4*8}else for(n=0;n<s;n+=4)e[i+n>>>2]=r[n>>>2];return this.sigBytes+=s,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=r.ceil(e/4)},clone:function(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i<t;i+=4)e.push(4294967296*r.random()|0);return new s.init(e,t)}}),tt=Xt.enc={},n=tt.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],s=0;s<r;s++){var n=e[s>>>2]>>>24-s%4*8&255;i.push((n>>>4).toString(16)),i.push((15&n).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i+=2)r[i>>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new s.init(r,e/2)}},a=tt.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],s=0;s<r;s++){var n=e[s>>>2]>>>24-s%4*8&255;i.push(String.fromCharCode(n))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new s.init(r,e)}},o=tt.Utf8={stringify:function(t){try{return decodeURIComponent(escape(a.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return a.parse(unescape(encodeURIComponent(t)))}},c=Dt.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=o.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e=this._data,i=e.words,n=e.sigBytes,a=this.blockSize,o=n/(4*a),c=(o=t?r.ceil(o):r.max((0|o)-this._minBufferSize,0))*a;t=r.min(4*c,n);if(c){for(var u=0;u<c;u+=a)this._doProcessBlock(i,u);var h=i.splice(0,c);e.sigBytes-=t}return new s.init(h,t)},clone:function(){var t=i.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),Dt.Hasher=c.extend({cfg:i.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){c.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(t){return function(e,r){return new t.init(r).finalize(e)}},_createHmacHelper:function(t){return function(e,r){return new u.HMAC.init(t,r).finalize(e)}}}),u=Xt.algo={},Xt);function J(){}function Z(t,e,r){var i=this._iv;i?this._iv=void 0:i=this._prevBlock;for(var s=0;s<r;s++)t[e+s]^=i[s]}Dt=(tt=X).lib,h=Dt.Base,l=Dt.WordArray,(tt=tt.x64={}).Word=h.extend({init:function(t,e){this.high=t,this.low=e}}),tt.WordArray=h.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],i=0;i<e;i++){var s=t[i];r.push(s.high),r.push(s.low)}return l.create(r,this.sigBytes)},clone:function(){for(var t=h.clone.call(this),e=t.words=this.words.slice(0),r=e.length,i=0;i<r;i++)e[i]=e[i].clone();return t}}),X.lib.Cipher||(tt=(Dt=(Xt=X).lib).Base,p=Dt.WordArray,f=Dt.BufferedBlockAlgorithm,d=Xt.enc.Base64,m=Xt.algo.EvpKDF,g=Dt.Cipher=f.extend({cfg:tt.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){f.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(t){return{encrypt:function(e,r,i){return("string"==typeof r?b:v).encrypt(t,e,r,i)},decrypt:function(e,r,i){return("string"==typeof r?b:v).decrypt(t,e,r,i)}}}}),Dt.StreamCipher=g.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),et=Xt.mode={},(Q=(Dt.BlockCipherMode=tt.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}})).extend()).Encryptor=Q.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Z.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),Q.Decryptor=Q.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,s=t.slice(e,e+i);r.decryptBlock(t,e),Z.call(this,t,e,i),this._prevBlock=s}}),et=et.CBC=Q,Q=(Xt.pad={}).Pkcs7={pad:function(t,e){for(var r=4*e,i=(r-=t.sigBytes%r)<<24|r<<16|r<<8|r,s=[],n=0;n<r;n+=4)s.push(i);r=p.create(s,r),t.concat(r)},unpad:function(t){t.sigBytes-=255&t.words[t.sigBytes-1>>>2]}},Dt.BlockCipher=g.extend({cfg:g.cfg.extend({mode:et,padding:Q}),reset:function(){g.reset.call(this);var t,e=(r=this.cfg).iv,r=r.mode;this._xformMode==this._ENC_XFORM_MODE?t=r.createEncryptor:(t=r.createDecryptor,this._minBufferSize=1),this._mode=t.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),y=Dt.CipherParams=tt.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}}),et=(Xt.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext;return((t=t.salt)?p.create([1398893684,1701076831]).concat(t).concat(e):e).toString(d)},parse:function(t){var e,r=(t=d.parse(t)).words;return 1398893684==r[0]&&1701076831==r[1]&&(e=p.create(r.slice(2,4)),r.splice(0,4),t.sigBytes-=16),y.create({ciphertext:t,salt:e})}},v=Dt.SerializableCipher=tt.extend({cfg:tt.extend({format:et}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var s=t.createEncryptor(r,i);return e=s.finalize(e),s=s.cfg,y.create({ciphertext:e,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),Xt=(Xt.kdf={}).OpenSSL={execute:function(t,e,r,i){return i=i||p.random(8),t=m.create({keySize:e+r}).compute(t,i),r=p.create(t.words.slice(e),4*r),t.sigBytes=4*e,y.create({key:t,iv:r,salt:i})}},b=Dt.PasswordBasedCipher=v.extend({cfg:v.cfg.extend({kdf:Xt}),encrypt:function(t,e,r,i){return r=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize),i.iv=r.iv,(t=v.encrypt.call(this,t,e,r.key,i)).mixIn(r),t},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),r=i.kdf.execute(r,t.keySize,t.ivSize,e.salt),i.iv=r.iv,v.decrypt.call(this,t,e,r.key,i)}}));for(var Q=X,tt=Q.lib.BlockCipher,et=Q.algo,rt=[],it=[],st=[],nt=[],at=[],ot=[],ct=[],ut=[],ht=[],lt=[],pt=[],ft=0;ft<256;ft++)pt[ft]=ft<128?ft<<1:ft<<1^283;var dt=0,mt=0;for(ft=0;ft<256;ft++){var gt=mt^mt<<1^mt<<2^mt<<3^mt<<4,yt=(rt[dt]=gt=gt>>>8^255>^99,pt[it[gt]=dt]),vt=pt[yt],bt=pt[vt],wt=257*pt[gt]^16843008*gt;st[dt]=wt<<24|wt>>>8,nt[dt]=wt<<16|wt>>>16,at[dt]=wt<<8|wt>>>24,ot[dt]=wt,ct[gt]=(wt=16843009*bt^65537*vt^257*yt^16843008*dt)<<24|wt>>>8,ut[gt]=wt<<16|wt>>>16,ht[gt]=wt<<8|wt>>>24,lt[gt]=wt,dt?(dt=yt^pt[pt[pt[bt^yt]]],mt^=pt[pt[mt]]):dt=mt=1}var xt=[0,1,2,4,8,16,32,64,128,27,54];et=et.AES=tt.extend({_doReset:function(){for(var t,e=(i=this._key).words,r=i.sigBytes/4,i=4*((this._nRounds=r+6)+1),s=this._keySchedule=[],n=0;n<i;n++)n<r?s[n]=e[n]:(t=s[n-1],n%r?6<r&&4==n%r&&(t=rt[t>>>24]<<24|rt[t>>>16&255]<<16|rt[t>>>8&255]<<8|rt[255&t]):(t=rt[(t=t<<8|t>>>24)>>>24]<<24|rt[t>>>16&255]<<16|rt[t>>>8&255]<<8|rt[255&t],t^=xt[n/r|0]<<24),s[n]=s[n-r]^t);for(e=this._invKeySchedule=[],r=0;r<i;r++)n=i-r,t=r%4?s[n]:s[n-4],e[r]=r<4||n<=4?t:ct[rt[t>>>24]]^ut[rt[t>>>16&255]]^ht[rt[t>>>8&255]]^lt[rt[255&t]]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,st,nt,at,ot,rt)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,ct,ut,ht,lt,it),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,s,n,a,o){for(var c=this._nRounds,u=t[e]^r[0],h=t[e+1]^r[1],l=t[e+2]^r[2],p=t[e+3]^r[3],f=4,d=1;d<c;d++){var m=i[u>>>24]^s[h>>>16&255]^n[l>>>8&255]^a[255&p]^r[f++],g=i[h>>>24]^s[l>>>16&255]^n[p>>>8&255]^a[255&u]^r[f++],y=i[l>>>24]^s[p>>>16&255]^n[u>>>8&255]^a[255&h]^r[f++];p=i[p>>>24]^s[u>>>16&255]^n[h>>>8&255]^a[255&l]^r[f++],u=m,h=g,l=y}m=(o[u>>>24]<<24|o[h>>>16&255]<<16|o[l>>>8&255]<<8|o[255&p])^r[f++],g=(o[h>>>24]<<24|o[l>>>16&255]<<16|o[p>>>8&255]<<8|o[255&u])^r[f++],y=(o[l>>>24]<<24|o[p>>>16&255]<<16|o[u>>>8&255]<<8|o[255&h])^r[f++],p=(o[p>>>24]<<24|o[u>>>16&255]<<16|o[h>>>8&255]<<8|o[255&l])^r[f++],t[e]=m,t[e+1]=g,t[e+2]=y,t[e+3]=p},keySize:8});function kt(t,e){e=(this._lBlock>>>t^this._rBlock)&e,this._rBlock^=e,this._lBlock^=e<<t}function St(t,e){e=(this._rBlock>>>t^this._lBlock)&e,this._lBlock^=e,this._rBlock^=e<<t}Q.AES=tt._createHelper(et),w=(Xt=(Dt=X).lib).WordArray,Xt=Xt.BlockCipher,tt=Dt.algo,x=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],k=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],S=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],E=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],_=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],A=tt.DES=Xt.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=x[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(t=this._subKeys=[],i=0;i<16;i++){var s=t[i]=[],n=S[i];for(r=0;r<24;r++)s[r/6|0]|=e[(k[r]-1+n)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(k[r+24]-1+n)%28]<<31-r%6;for(s[0]=s[0]<<1|s[0]>>>31,r=1;r<7;r++)s[r]>>>=4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(e=this._invSubKeys=[],r=0;r<16;r++)e[r]=t[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],kt.call(this,4,252645135),kt.call(this,16,65535),St.call(this,2,858993459),St.call(this,8,16711935),kt.call(this,1,1431655765);for(var i=0;i<16;i++){for(var s=r[i],n=this._lBlock,a=this._rBlock,o=0,c=0;c<8;c++)o|=E[c][((a^s[c])&_[c])>>>0];this._lBlock=a,this._rBlock=n^o}r=this._lBlock,this._lBlock=this._rBlock,this._rBlock=r,kt.call(this,1,1431655765),St.call(this,8,16711935),St.call(this,2,858993459),kt.call(this,16,65535),kt.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2}),Dt.DES=Xt._createHelper(A),tt=tt.TripleDES=Xt.extend({_doReset:function(){var t=this._key.words;this._des1=A.createEncryptor(w.create(t.slice(0,2))),this._des2=A.createEncryptor(w.create(t.slice(2,4))),this._des3=A.createEncryptor(w.create(t.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2}),Dt.TripleDES=Xt._createHelper(tt),R=(Dt=X).lib.WordArray,Dt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp(),t=[];for(var s=0;s<r;s+=3)for(var n=(e[s>>>2]>>>24-s%4*8&255)<<16|(e[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|e[s+2>>>2]>>>24-(s+2)%4*8&255,a=0;a<4&&s+.75*a<r;a++)t.push(i.charAt(n>>>6*(3-a)&63));if(e=i.charAt(64))for(;t.length%4;)t.push(e);return t.join("")},parse:function(t){var e=t.length,r=this._map;!(n=r.charAt(64))||-1!=(n=t.indexOf(n))&&(e=n);for(var i,s,n=[],a=0,o=0;o<e;o++)o%4&&(i=r.indexOf(t.charAt(o-1))<<o%4*2,s=r.indexOf(t.charAt(o))>>>6-o%4*2,n[a>>>2]|=(i|s)<<24-a%4*8,a++);return R.create(n,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="};var Et=Math;function _t(t,e,r,i,s,n,a){return((t=t+(e&r|~e&i)+s+a)<<n|t>>>32-n)+e}function At(t,e,r,i,s,n,a){return((t=t+(e&i|r&~i)+s+a)<<n|t>>>32-n)+e}function Rt(t,e,r,i,s,n,a){return((t=t+(e^r^i)+s+a)<<n|t>>>32-n)+e}function It(t,e,r,i,s,n,a){return((t=t+(r^(e|~i))+s+a)<<n|t>>>32-n)+e}for(var jt=(tt=(Xt=X).lib).WordArray,Ct=tt.Hasher,Pt=(tt=Xt.algo,[]),Ot=0;Ot<64;Ot++)Pt[Ot]=4294967296*Et.abs(Et.sin(Ot+1))|0;tt=tt.MD5=Ct.extend({_doReset:function(){this._hash=new jt.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=t[s=e+r];t[s]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}r=this._hash.words;var s=t[e+0],n=(i=t[e+1],t[e+2]),a=t[e+3],o=t[e+4],c=t[e+5],u=t[e+6],h=t[e+7],l=t[e+8],p=t[e+9],f=t[e+10],d=t[e+11],m=t[e+12],g=t[e+13],y=t[e+14],v=t[e+15],b=_t(r[0],k=r[1],x=r[2],w=r[3],s,7,Pt[0]),w=_t(w,b,k,x,i,12,Pt[1]),x=_t(x,w,b,k,n,17,Pt[2]),k=_t(k,x,w,b,a,22,Pt[3]);b=_t(b,k,x,w,o,7,Pt[4]),w=_t(w,b,k,x,c,12,Pt[5]),x=_t(x,w,b,k,u,17,Pt[6]),k=_t(k,x,w,b,h,22,Pt[7]),b=_t(b,k,x,w,l,7,Pt[8]),w=_t(w,b,k,x,p,12,Pt[9]),x=_t(x,w,b,k,f,17,Pt[10]),k=_t(k,x,w,b,d,22,Pt[11]),b=_t(b,k,x,w,m,7,Pt[12]),w=_t(w,b,k,x,g,12,Pt[13]),x=_t(x,w,b,k,y,17,Pt[14]),b=At(b,k=_t(k,x,w,b,v,22,Pt[15]),x,w,i,5,Pt[16]),w=At(w,b,k,x,u,9,Pt[17]),x=At(x,w,b,k,d,14,Pt[18]),k=At(k,x,w,b,s,20,Pt[19]),b=At(b,k,x,w,c,5,Pt[20]),w=At(w,b,k,x,f,9,Pt[21]),x=At(x,w,b,k,v,14,Pt[22]),k=At(k,x,w,b,o,20,Pt[23]),b=At(b,k,x,w,p,5,Pt[24]),w=At(w,b,k,x,y,9,Pt[25]),x=At(x,w,b,k,a,14,Pt[26]),k=At(k,x,w,b,l,20,Pt[27]),b=At(b,k,x,w,g,5,Pt[28]),w=At(w,b,k,x,n,9,Pt[29]),x=At(x,w,b,k,h,14,Pt[30]),b=Rt(b,k=At(k,x,w,b,m,20,Pt[31]),x,w,c,4,Pt[32]),w=Rt(w,b,k,x,l,11,Pt[33]),x=Rt(x,w,b,k,d,16,Pt[34]),k=Rt(k,x,w,b,y,23,Pt[35]),b=Rt(b,k,x,w,i,4,Pt[36]),w=Rt(w,b,k,x,o,11,Pt[37]),x=Rt(x,w,b,k,h,16,Pt[38]),k=Rt(k,x,w,b,f,23,Pt[39]),b=Rt(b,k,x,w,g,4,Pt[40]),w=Rt(w,b,k,x,s,11,Pt[41]),x=Rt(x,w,b,k,a,16,Pt[42]),k=Rt(k,x,w,b,u,23,Pt[43]),b=Rt(b,k,x,w,p,4,Pt[44]),w=Rt(w,b,k,x,m,11,Pt[45]),x=Rt(x,w,b,k,v,16,Pt[46]),b=It(b,k=Rt(k,x,w,b,n,23,Pt[47]),x,w,s,6,Pt[48]),w=It(w,b,k,x,h,10,Pt[49]),x=It(x,w,b,k,y,15,Pt[50]),k=It(k,x,w,b,c,21,Pt[51]),b=It(b,k,x,w,m,6,Pt[52]),w=It(w,b,k,x,a,10,Pt[53]),x=It(x,w,b,k,f,15,Pt[54]),k=It(k,x,w,b,i,21,Pt[55]),b=It(b,k,x,w,l,6,Pt[56]),w=It(w,b,k,x,v,10,Pt[57]),x=It(x,w,b,k,u,15,Pt[58]),k=It(k,x,w,b,g,21,Pt[59]),b=It(b,k,x,w,o,6,Pt[60]),w=It(w,b,k,x,d,10,Pt[61]),x=It(x,w,b,k,n,15,Pt[62]),k=It(k,x,w,b,p,21,Pt[63]);r[0]=r[0]+b|0,r[1]=r[1]+k|0,r[2]=r[2]+x|0,r[3]=r[3]+w|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes,s=(e[i>>>5]|=128<<24-i%32,Et.floor(r/4294967296));for(e[15+(64+i>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process(),e=(t=this._hash).words,r=0;r<4;r++)i=e[r],e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var t=Ct.clone.call(this);return t._hash=this._hash.clone(),t}}),Xt.MD5=Ct._createHelper(tt),Xt.HmacMD5=Ct._createHmacHelper(tt),I=(Xt=(Dt=X).lib).WordArray,j=Xt.Hasher,C=[],Xt=Dt.algo.SHA1=j.extend({_doReset:function(){this._hash=new I.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r,i=this._hash.words,s=i[0],n=i[1],a=i[2],o=i[3],c=i[4],u=0;u<80;u++)u<16?C[u]=0|t[e+u]:(r=C[u-3]^C[u-8]^C[u-14]^C[u-16],C[u]=r<<1|r>>>31),r=(s<<5|s>>>27)+c+C[u],r=u<20?r+(1518500249+(n&a|~n&o)):u<40?r+(1859775393+(n^a^o)):u<60?r+((n&a|n&o|a&o)-1894007588):r+((n^a^o)-899497514),c=o,o=a,a=n<<30|n>>>2,n=s,s=r;i[0]=i[0]+s|0,i[1]=i[1]+n|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=j.clone.call(this);return t._hash=this._hash.clone(),t}}),Dt.SHA1=j._createHelper(Xt),Dt.HmacSHA1=j._createHmacHelper(Xt);var Tt=Math;function Ft(t){return 4294967296*(t-(0|t))|0}for(var Bt=(Dt=(tt=X).lib).WordArray,Nt=Dt.Hasher,Dt=tt.algo,Lt=[],Ht=[],zt=2,Mt=0;Mt<64;){t:{for(var Ut=zt,qt=Tt.sqrt(Ut),Vt=2;Vt<=qt;Vt++)if(!(Ut%Vt)){Ut=!1;break t}Ut=!0}Ut&&(Mt<8&&(Lt[Mt]=Ft(Tt.pow(zt,.5))),Ht[Mt]=Ft(Tt.pow(zt,1/3)),Mt++),zt++}var Kt=[];Dt=Dt.SHA256=Nt.extend({_doReset:function(){this._hash=new Bt.init(Lt.slice(0))},_doProcessBlock:function(t,e){for(var r,i,s=this._hash.words,n=s[0],a=s[1],o=s[2],c=s[3],u=s[4],h=s[5],l=s[6],p=s[7],f=0;f<64;f++)f<16?Kt[f]=0|t[e+f]:(r=Kt[f-15],i=Kt[f-2],Kt[f]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+Kt[f-7]+((i<<15|i>>>17)^(i<<13|i>>>19)^i>>>10)+Kt[f-16]),r=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&h^~u&l)+Ht[f]+Kt[f],i=((n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22))+(n&a^n&o^a&o),p=l,l=h,h=u,u=c+r|0,c=o,o=a,a=n,n=r+i|0;s[0]=s[0]+n|0,s[1]=s[1]+a|0,s[2]=s[2]+o|0,s[3]=s[3]+c|0,s[4]=s[4]+u|0,s[5]=s[5]+h|0,s[6]=s[6]+l|0,s[7]=s[7]+p|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Tt.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=Nt.clone.call(this);return t._hash=this._hash.clone(),t}});function Wt(){return $t.create.apply($t,arguments)}tt.SHA256=Nt._createHelper(Dt),tt.HmacSHA256=Nt._createHmacHelper(Dt),P=(Xt=X).lib.WordArray,O=(tt=Xt.algo).SHA256,tt=tt.SHA224=O.extend({_doReset:function(){this._hash=new P.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=O._doFinalize.call(this);return t.sigBytes-=4,t}}),Xt.SHA224=O._createHelper(tt),Xt.HmacSHA224=O._createHmacHelper(tt);for(var Gt=(Dt=X).lib.Hasher,$t=(Xt=Dt.x64).Word,Yt=Xt.WordArray,Xt=Dt.algo,Jt=[Wt(1116352408,3609767458),Wt(1899447441,602891725),Wt(3049323471,3964484399),Wt(3921009573,2173295548),Wt(961987163,4081628472),Wt(1508970993,3053834265),Wt(2453635748,2937671579),Wt(2870763221,3664609560),Wt(3624381080,2734883394),Wt(310598401,1164996542),Wt(607225278,1323610764),Wt(1426881987,3590304994),Wt(1925078388,4068182383),Wt(2162078206,991336113),Wt(2614888103,633803317),Wt(3248222580,3479774868),Wt(3835390401,2666613458),Wt(4022224774,944711139),Wt(264347078,2341262773),Wt(604807628,2007800933),Wt(770255983,1495990901),Wt(1249150122,1856431235),Wt(1555081692,3175218132),Wt(1996064986,2198950837),Wt(2554220882,3999719339),Wt(2821834349,766784016),Wt(2952996808,2566594879),Wt(3210313671,3203337956),Wt(3336571891,1034457026),Wt(3584528711,2466948901),Wt(113926993,3758326383),Wt(338241895,168717936),Wt(666307205,1188179964),Wt(773529912,1546045734),Wt(1294757372,1522805485),Wt(1396182291,2643833823),Wt(1695183700,2343527390),Wt(1986661051,1014477480),Wt(2177026350,1206759142),Wt(2456956037,344077627),Wt(2730485921,1290863460),Wt(2820302411,3158454273),Wt(3259730800,3505952657),Wt(3345764771,106217008),Wt(3516065817,3606008344),Wt(3600352804,1432725776),Wt(4094571909,1467031594),Wt(275423344,851169720),Wt(430227734,3100823752),Wt(506948616,1363258195),Wt(659060556,3750685593),Wt(883997877,3785050280),Wt(958139571,3318307427),Wt(1322822218,3812723403),Wt(1537002063,2003034995),Wt(1747873779,3602036899),Wt(1955562222,1575990012),Wt(2024104815,1125592928),Wt(2227730452,2716904306),Wt(2361852424,442776044),Wt(2428436474,593698344),Wt(2756734187,3733110249),Wt(3204031479,2999351573),Wt(3329325298,3815920427),Wt(3391569614,3928383900),Wt(3515267271,566280711),Wt(3940187606,3454069534),Wt(4118630271,4000239992),Wt(116418474,1914138554),Wt(174292421,2731055270),Wt(289380356,3203993006),Wt(460393269,320620315),Wt(685471733,587496836),Wt(852142971,1086792851),Wt(1017036298,365543100),Wt(1126000580,2618297676),Wt(1288033470,3409855158),Wt(1501505948,4234509866),Wt(1607167915,987167468),Wt(1816402316,1246189591)],Zt=[],Qt=0;Qt<80;Qt++)Zt[Qt]=Wt();Xt=Xt.SHA512=Gt.extend({_doReset:function(){this._hash=new Yt.init([new $t.init(1779033703,4089235720),new $t.init(3144134277,2227873595),new $t.init(1013904242,4271175723),new $t.init(2773480762,1595750129),new $t.init(1359893119,2917565137),new $t.init(2600822924,725511199),new $t.init(528734635,4215389547),new $t.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=(u=this._hash.words)[0],i=u[1],s=u[2],n=u[3],a=u[4],o=u[5],c=u[6],u=u[7],h=r.high,l=r.low,p=i.high,f=i.low,d=s.high,m=s.low,g=n.high,y=n.low,v=a.high,b=a.low,w=o.high,x=o.low,k=c.high,S=c.low,E=u.high,_=u.low,A=h,R=l,I=p,j=f,C=d,P=m,O=g,T=y,F=v,B=b,N=w,D=x,L=k,H=S,z=E,M=_,U=0;U<80;U++){var q,V=Zt[U],K=(U<16?(q=V.high=0|t[e+2*U],Q=V.low=0|t[e+2*U+1]):(q=((Q=(q=Zt[U-15]).high)>>>1|(G=q.low)<<31)^(Q>>>8|G<<24)^Q>>>7,G=(G>>>1|Q<<31)^(G>>>8|Q<<24)^(G>>>7|Q<<25),$=((Q=($=Zt[U-2]).high)>>>19|(Y=$.low)<<13)^(Q<<3|Y>>>29)^Q>>>6,Y=(Y>>>19|Q<<13)^(Y<<3|Q>>>29)^(Y>>>6|Q<<26),K=(Q=Zt[U-7]).high,Z=(W=Zt[U-16]).high,W=W.low,q=(q=(q=q+K+((Q=G+Q.low)>>>0<G>>>0?1:0))+$+((Q+=Y)>>>0<Y>>>0?1:0))+Z+((Q+=W)>>>0<W>>>0?1:0),V.high=q,V.low=Q),F&N^~F&L),W=B&D^~B&H,G=(V=A&I^A&C^I&C,(A>>>28|R<<4)^(A<<30|R>>>2)^(A<<25|R>>>7)),$=(R>>>28|A<<4)^(R<<30|A>>>2)^(R<<25|A>>>7),Y=Jt[U],X=Y.high,J=Y.low,Z=(Z=(Z=(Z=z+((F>>>14|B<<18)^(F>>>18|B<<14)^(F<<23|B>>>9))+((Y=M+((B>>>14|F<<18)^(B>>>18|F<<14)^(B<<23|F>>>9)))>>>0<M>>>0?1:0))+K+((Y+=W)>>>0<W>>>0?1:0))+X+((Y+=J)>>>0<J>>>0?1:0))+q+((Y+=Q)>>>0<Q>>>0?1:0),Q=$+(R&j^R&P^j&P);z=L,M=H,L=N,H=D,N=F,D=B,F=O+Z+((B=T+Y|0)>>>0<T>>>0?1:0)|0,O=C,T=P,C=I,P=j,I=A,j=R,A=Z+(V=G+V+(Q>>>0<$>>>0?1:0))+((R=Y+Q|0)>>>0<Y>>>0?1:0)|0}l=r.low=l+R,r.high=h+A+(l>>>0<R>>>0?1:0),f=i.low=f+j,i.high=p+I+(f>>>0<j>>>0?1:0),m=s.low=m+P,s.high=d+C+(m>>>0<P>>>0?1:0),y=n.low=y+T,n.high=g+O+(y>>>0<T>>>0?1:0),b=a.low=b+B,a.high=v+F+(b>>>0<B>>>0?1:0),x=o.low=x+D,o.high=w+N+(x>>>0<D>>>0?1:0),S=c.low=S+H,c.high=k+L+(S>>>0<H>>>0?1:0),_=u.low=_+M,u.high=E+z+(_>>>0<M>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=Gt.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32}),Dt.SHA512=Gt._createHelper(Xt),Dt.HmacSHA512=Gt._createHmacHelper(Xt),T=(Dt=(tt=X).x64).Word,F=Dt.WordArray,B=(Dt=tt.algo).SHA512,Dt=Dt.SHA384=B.extend({_doReset:function(){this._hash=new F.init([new T.init(3418070365,3238371032),new T.init(1654270250,914150663),new T.init(2438529370,812702999),new T.init(355462360,4144912697),new T.init(1731405415,4290775857),new T.init(2394180231,1750603025),new T.init(3675008525,1694076839),new T.init(1203062813,3204075428)])},_doFinalize:function(){var t=B._doFinalize.call(this);return t.sigBytes-=16,t}}),tt.SHA384=B._createHelper(Dt),tt.HmacSHA384=B._createHmacHelper(Dt),Math,N=(tt=(Xt=X).lib).WordArray,D=tt.Hasher,tt=Xt.algo,L=N.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),H=N.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),z=N.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),M=N.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),U=N.create([0,1518500249,1859775393,2400959708,2840853838]),q=N.create([1352829926,1548603684,1836072691,2053994217,0]),tt=tt.RIPEMD160=D.extend({_doReset:function(){this._hash=N.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=t[h=e+r];t[h]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var s,n,a,o,c,u,h=this._hash.words,l=(i=U.words,q.words),p=L.words,f=H.words,d=z.words,m=M.words,g=s=h[0],y=n=h[1],v=a=h[2],b=o=h[3],w=c=h[4];for(r=0;r<80;r+=1)u=s+t[e+p[r]]|0,u=r<16?u+((n^a^o)+i[0]):r<32?u+((n&a|~n&o)+i[1]):r<48?u+(((n|~a)^o)+i[2]):r<64?u+((n&o|a&~o)+i[3]):u+((n^(a|~o))+i[4]),u=(u=(u|=0)<<d[r]|u>>>32-d[r])+c|0,s=c,c=o,o=a<<10|a>>>22,a=n,n=u,u=g+t[e+f[r]]|0,u=r<16?u+((y^(v|~b))+l[0]):r<32?u+((y&b|v&~b)+l[1]):r<48?u+(((y|~v)^b)+l[2]):r<64?u+((y&v|~y&b)+l[3]):u+((y^v^b)+l[4]),u=(u=(u|=0)<<m[r]|u>>>32-m[r])+w|0,g=w,w=b,b=v<<10|v>>>22,v=y,y=u;u=h[1]+a+b|0,h[1]=h[2]+o+w|0,h[2]=h[3]+c+g|0,h[3]=h[4]+s+y|0,h[4]=h[0]+n+v|0,h[0]=u},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;for(e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process(),e=(t=this._hash).words,r=0;r<5;r++)i=e[r],e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var t=D.clone.call(this);return t._hash=this._hash.clone(),t}}),Xt.RIPEMD160=D._createHelper(tt),Xt.HmacRIPEMD160=D._createHmacHelper(tt),V=(Dt=X).enc.Utf8,Dt.algo.HMAC=Dt.lib.Base.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=V.parse(e));var r=t.blockSize,i=4*r;(e=e.sigBytes>i?t.finalize(e):e).clamp();t=this._oKey=e.clone(),e=this._iKey=e.clone();for(var s=t.words,n=e.words,a=0;a<r;a++)s[a]^=1549556828,n[a]^=909522486;t.sigBytes=e.sigBytes=i,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher;return t=e.finalize(t),e.reset(),e.finalize(this._oKey.clone().concat(t))}}),Dt=(tt=(Xt=X).lib).Base,K=tt.WordArray,W=(tt=Xt.algo).HMAC,G=tt.PBKDF2=Dt.extend({cfg:Dt.extend({keySize:4,hasher:tt.SHA1,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var r=this.cfg,i=W.create(r.hasher,t),s=K.create(),n=K.create([1]),a=s.words,o=n.words,c=r.keySize;for(r=r.iterations;a.length<c;){var u=i.update(e).finalize(n);i.reset();for(var h=u.words,l=h.length,p=u,f=1;f<r;f++){p=i.finalize(p),i.reset();for(var d=p.words,m=0;m<l;m++)h[m]^=d[m]}s.concat(u),o[0]++}return s.sigBytes=4*c,s}}),Xt.PBKDF2=function(t,e,r){return G.create(r).compute(t,e)};
|
|
777
|
+
*/const i=r(2),s=r(3),n=r(114);var a=r(22);const o=r(18);class c extends a{constructor(t){super(),this.error=t||null,this.cmd=o.CHECKRESULT}getSize(){var t=this.error;let e=0;return t?e=(e=(e=(e=(e+=1)+s.sizeVarString(u(t.message),"utf8"))+s.sizeVarString(u(t.stack),"utf8"))+s.sizeVarString(u(t.code),"utf8"))+1+4:e+=1}toWriter(t){var e=this.error;return e?(t.writeU8(1),t.writeVarString(u(e.message),"utf8"),t.writeVarString(u(e.stack),"utf8"),t.writeVarString(u(e.code),"utf8"),t.writeU8(-1===e.op?255:e.op),t.writeU32(-1===e.ip?4294967295:e.ip)):t.writeU8(0),t}fromRaw(t){const e=new i(t,!0);if(0!==e.readU8()){const t=new n("");t.message=e.readVarString("utf8"),t.stack=e.readVarString("utf8"),t.code=e.readVarString("utf8"),t.op=e.readU8(),t.ip=e.readU32(),255===t.op&&(t.op=-1),4294967295===t.ip&&(t.ip=-1),this.error=t}return this}static fromRaw(t){return(new c).fromRaw(t)}}function u(t){return"string"!=typeof t?"":t}t.exports=c},function(t,e){var r,i,s,n,a,o,c,u,h,l,p,f,d,m,g,y,v,b,w,x,k,S,E,_,A,R,I,j,C,P,O,T,F,B,N,D,L,H,z,M,U,q,V,K,W,G,$={userAgent:!1},Y={},X=(r=Math,Dt=(Xt={}).lib={},i=Dt.Base={extend:function(t){J.prototype=this;var e=new J;return t&&e.mixIn(t),e.hasOwnProperty("init")||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},s=Dt.WordArray=i.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||n).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,s=t.sigBytes;if(this.clamp(),i%4)for(var n=0;n<s;n++){var a=r[n>>>2]>>>24-n%4*8&255;e[i+n>>>2]|=a<<24-(i+n)%4*8}else for(n=0;n<s;n+=4)e[i+n>>>2]=r[n>>>2];return this.sigBytes+=s,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=r.ceil(e/4)},clone:function(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i<t;i+=4)e.push(4294967296*r.random()|0);return new s.init(e,t)}}),tt=Xt.enc={},n=tt.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],s=0;s<r;s++){var n=e[s>>>2]>>>24-s%4*8&255;i.push((n>>>4).toString(16)),i.push((15&n).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i+=2)r[i>>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new s.init(r,e/2)}},a=tt.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],s=0;s<r;s++){var n=e[s>>>2]>>>24-s%4*8&255;i.push(String.fromCharCode(n))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new s.init(r,e)}},o=tt.Utf8={stringify:function(t){try{return decodeURIComponent(escape(a.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return a.parse(unescape(encodeURIComponent(t)))}},c=Dt.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=o.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e=this._data,i=e.words,n=e.sigBytes,a=this.blockSize,o=n/(4*a),c=(o=t?r.ceil(o):r.max((0|o)-this._minBufferSize,0))*a;t=r.min(4*c,n);if(c){for(var u=0;u<c;u+=a)this._doProcessBlock(i,u);var h=i.splice(0,c);e.sigBytes-=t}return new s.init(h,t)},clone:function(){var t=i.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),Dt.Hasher=c.extend({cfg:i.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){c.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(t){return function(e,r){return new t.init(r).finalize(e)}},_createHmacHelper:function(t){return function(e,r){return new u.HMAC.init(t,r).finalize(e)}}}),u=Xt.algo={},Xt);function J(){}function Z(t,e,r){var i=this._iv;i?this._iv=void 0:i=this._prevBlock;for(var s=0;s<r;s++)t[e+s]^=i[s]}Dt=(tt=X).lib,h=Dt.Base,l=Dt.WordArray,(tt=tt.x64={}).Word=h.extend({init:function(t,e){this.high=t,this.low=e}}),tt.WordArray=h.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],i=0;i<e;i++){var s=t[i];r.push(s.high),r.push(s.low)}return l.create(r,this.sigBytes)},clone:function(){for(var t=h.clone.call(this),e=t.words=this.words.slice(0),r=e.length,i=0;i<r;i++)e[i]=e[i].clone();return t}}),X.lib.Cipher||(tt=(Dt=(Xt=X).lib).Base,p=Dt.WordArray,f=Dt.BufferedBlockAlgorithm,d=Xt.enc.Base64,m=Xt.algo.EvpKDF,g=Dt.Cipher=f.extend({cfg:tt.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){f.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(t){return{encrypt:function(e,r,i){return("string"==typeof r?b:v).encrypt(t,e,r,i)},decrypt:function(e,r,i){return("string"==typeof r?b:v).decrypt(t,e,r,i)}}}}),Dt.StreamCipher=g.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),et=Xt.mode={},(Q=(Dt.BlockCipherMode=tt.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}})).extend()).Encryptor=Q.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Z.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),Q.Decryptor=Q.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,s=t.slice(e,e+i);r.decryptBlock(t,e),Z.call(this,t,e,i),this._prevBlock=s}}),et=et.CBC=Q,Q=(Xt.pad={}).Pkcs7={pad:function(t,e){for(var r=4*e,i=(r-=t.sigBytes%r)<<24|r<<16|r<<8|r,s=[],n=0;n<r;n+=4)s.push(i);r=p.create(s,r),t.concat(r)},unpad:function(t){t.sigBytes-=255&t.words[t.sigBytes-1>>>2]}},Dt.BlockCipher=g.extend({cfg:g.cfg.extend({mode:et,padding:Q}),reset:function(){g.reset.call(this);var t,e=(r=this.cfg).iv,r=r.mode;this._xformMode==this._ENC_XFORM_MODE?t=r.createEncryptor:(t=r.createDecryptor,this._minBufferSize=1),this._mode=t.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),y=Dt.CipherParams=tt.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}}),et=(Xt.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext;return((t=t.salt)?p.create([1398893684,1701076831]).concat(t).concat(e):e).toString(d)},parse:function(t){var e,r=(t=d.parse(t)).words;return 1398893684==r[0]&&1701076831==r[1]&&(e=p.create(r.slice(2,4)),r.splice(0,4),t.sigBytes-=16),y.create({ciphertext:t,salt:e})}},v=Dt.SerializableCipher=tt.extend({cfg:tt.extend({format:et}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var s=t.createEncryptor(r,i);return e=s.finalize(e),s=s.cfg,y.create({ciphertext:e,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),Xt=(Xt.kdf={}).OpenSSL={execute:function(t,e,r,i){return i=i||p.random(8),t=m.create({keySize:e+r}).compute(t,i),r=p.create(t.words.slice(e),4*r),t.sigBytes=4*e,y.create({key:t,iv:r,salt:i})}},b=Dt.PasswordBasedCipher=v.extend({cfg:v.cfg.extend({kdf:Xt}),encrypt:function(t,e,r,i){return r=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize),i.iv=r.iv,(t=v.encrypt.call(this,t,e,r.key,i)).mixIn(r),t},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),r=i.kdf.execute(r,t.keySize,t.ivSize,e.salt),i.iv=r.iv,v.decrypt.call(this,t,e,r.key,i)}}));for(var Q=X,tt=Q.lib.BlockCipher,et=Q.algo,rt=[],it=[],st=[],nt=[],at=[],ot=[],ct=[],ut=[],ht=[],lt=[],pt=[],ft=0;ft<256;ft++)pt[ft]=ft<128?ft<<1:ft<<1^283;var dt=0,mt=0;for(ft=0;ft<256;ft++){var gt=mt^mt<<1^mt<<2^mt<<3^mt<<4,yt=(rt[dt]=gt=gt>>>8^255>^99,pt[it[gt]=dt]),vt=pt[yt],bt=pt[vt],wt=257*pt[gt]^16843008*gt;st[dt]=wt<<24|wt>>>8,nt[dt]=wt<<16|wt>>>16,at[dt]=wt<<8|wt>>>24,ot[dt]=wt,ct[gt]=(wt=16843009*bt^65537*vt^257*yt^16843008*dt)<<24|wt>>>8,ut[gt]=wt<<16|wt>>>16,ht[gt]=wt<<8|wt>>>24,lt[gt]=wt,dt?(dt=yt^pt[pt[pt[bt^yt]]],mt^=pt[pt[mt]]):dt=mt=1}var xt=[0,1,2,4,8,16,32,64,128,27,54];et=et.AES=tt.extend({_doReset:function(){for(var t,e=(i=this._key).words,r=i.sigBytes/4,i=4*((this._nRounds=r+6)+1),s=this._keySchedule=[],n=0;n<i;n++)n<r?s[n]=e[n]:(t=s[n-1],n%r?6<r&&4==n%r&&(t=rt[t>>>24]<<24|rt[t>>>16&255]<<16|rt[t>>>8&255]<<8|rt[255&t]):(t=rt[(t=t<<8|t>>>24)>>>24]<<24|rt[t>>>16&255]<<16|rt[t>>>8&255]<<8|rt[255&t],t^=xt[n/r|0]<<24),s[n]=s[n-r]^t);for(e=this._invKeySchedule=[],r=0;r<i;r++)n=i-r,t=r%4?s[n]:s[n-4],e[r]=r<4||n<=4?t:ct[rt[t>>>24]]^ut[rt[t>>>16&255]]^ht[rt[t>>>8&255]]^lt[rt[255&t]]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,st,nt,at,ot,rt)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,ct,ut,ht,lt,it),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,s,n,a,o){for(var c=this._nRounds,u=t[e]^r[0],h=t[e+1]^r[1],l=t[e+2]^r[2],p=t[e+3]^r[3],f=4,d=1;d<c;d++){var m=i[u>>>24]^s[h>>>16&255]^n[l>>>8&255]^a[255&p]^r[f++],g=i[h>>>24]^s[l>>>16&255]^n[p>>>8&255]^a[255&u]^r[f++],y=i[l>>>24]^s[p>>>16&255]^n[u>>>8&255]^a[255&h]^r[f++];p=i[p>>>24]^s[u>>>16&255]^n[h>>>8&255]^a[255&l]^r[f++],u=m,h=g,l=y}m=(o[u>>>24]<<24|o[h>>>16&255]<<16|o[l>>>8&255]<<8|o[255&p])^r[f++],g=(o[h>>>24]<<24|o[l>>>16&255]<<16|o[p>>>8&255]<<8|o[255&u])^r[f++],y=(o[l>>>24]<<24|o[p>>>16&255]<<16|o[u>>>8&255]<<8|o[255&h])^r[f++],p=(o[p>>>24]<<24|o[u>>>16&255]<<16|o[h>>>8&255]<<8|o[255&l])^r[f++],t[e]=m,t[e+1]=g,t[e+2]=y,t[e+3]=p},keySize:8});function kt(t,e){e=(this._lBlock>>>t^this._rBlock)&e,this._rBlock^=e,this._lBlock^=e<<t}function St(t,e){e=(this._rBlock>>>t^this._lBlock)&e,this._lBlock^=e,this._rBlock^=e<<t}Q.AES=tt._createHelper(et),w=(Xt=(Dt=X).lib).WordArray,Xt=Xt.BlockCipher,tt=Dt.algo,x=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],k=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],S=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],E=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],_=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],A=tt.DES=Xt.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=x[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(t=this._subKeys=[],i=0;i<16;i++){var s=t[i]=[],n=S[i];for(r=0;r<24;r++)s[r/6|0]|=e[(k[r]-1+n)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(k[r+24]-1+n)%28]<<31-r%6;for(s[0]=s[0]<<1|s[0]>>>31,r=1;r<7;r++)s[r]>>>=4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(e=this._invSubKeys=[],r=0;r<16;r++)e[r]=t[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],kt.call(this,4,252645135),kt.call(this,16,65535),St.call(this,2,858993459),St.call(this,8,16711935),kt.call(this,1,1431655765);for(var i=0;i<16;i++){for(var s=r[i],n=this._lBlock,a=this._rBlock,o=0,c=0;c<8;c++)o|=E[c][((a^s[c])&_[c])>>>0];this._lBlock=a,this._rBlock=n^o}r=this._lBlock,this._lBlock=this._rBlock,this._rBlock=r,kt.call(this,1,1431655765),St.call(this,8,16711935),St.call(this,2,858993459),kt.call(this,16,65535),kt.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2}),Dt.DES=Xt._createHelper(A),tt=tt.TripleDES=Xt.extend({_doReset:function(){var t=this._key.words;this._des1=A.createEncryptor(w.create(t.slice(0,2))),this._des2=A.createEncryptor(w.create(t.slice(2,4))),this._des3=A.createEncryptor(w.create(t.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2}),Dt.TripleDES=Xt._createHelper(tt),R=(Dt=X).lib.WordArray,Dt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp(),t=[];for(var s=0;s<r;s+=3)for(var n=(e[s>>>2]>>>24-s%4*8&255)<<16|(e[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|e[s+2>>>2]>>>24-(s+2)%4*8&255,a=0;a<4&&s+.75*a<r;a++)t.push(i.charAt(n>>>6*(3-a)&63));if(e=i.charAt(64))for(;t.length%4;)t.push(e);return t.join("")},parse:function(t){var e=t.length,r=this._map;!(n=r.charAt(64))||-1!=(n=t.indexOf(n))&&(e=n);for(var i,s,n=[],a=0,o=0;o<e;o++)o%4&&(i=r.indexOf(t.charAt(o-1))<<o%4*2,s=r.indexOf(t.charAt(o))>>>6-o%4*2,n[a>>>2]|=(i|s)<<24-a%4*8,a++);return R.create(n,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="};var Et=Math;function _t(t,e,r,i,s,n,a){return((t=t+(e&r|~e&i)+s+a)<<n|t>>>32-n)+e}function At(t,e,r,i,s,n,a){return((t=t+(e&i|r&~i)+s+a)<<n|t>>>32-n)+e}function Rt(t,e,r,i,s,n,a){return((t=t+(e^r^i)+s+a)<<n|t>>>32-n)+e}function It(t,e,r,i,s,n,a){return((t=t+(r^(e|~i))+s+a)<<n|t>>>32-n)+e}for(var jt=(tt=(Xt=X).lib).WordArray,Ct=tt.Hasher,Pt=(tt=Xt.algo,[]),Ot=0;Ot<64;Ot++)Pt[Ot]=4294967296*Et.abs(Et.sin(Ot+1))|0;tt=tt.MD5=Ct.extend({_doReset:function(){this._hash=new jt.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=t[s=e+r];t[s]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}r=this._hash.words;var s=t[e+0],n=(i=t[e+1],t[e+2]),a=t[e+3],o=t[e+4],c=t[e+5],u=t[e+6],h=t[e+7],l=t[e+8],p=t[e+9],f=t[e+10],d=t[e+11],m=t[e+12],g=t[e+13],y=t[e+14],v=t[e+15],b=_t(r[0],k=r[1],x=r[2],w=r[3],s,7,Pt[0]),w=_t(w,b,k,x,i,12,Pt[1]),x=_t(x,w,b,k,n,17,Pt[2]),k=_t(k,x,w,b,a,22,Pt[3]);b=_t(b,k,x,w,o,7,Pt[4]),w=_t(w,b,k,x,c,12,Pt[5]),x=_t(x,w,b,k,u,17,Pt[6]),k=_t(k,x,w,b,h,22,Pt[7]),b=_t(b,k,x,w,l,7,Pt[8]),w=_t(w,b,k,x,p,12,Pt[9]),x=_t(x,w,b,k,f,17,Pt[10]),k=_t(k,x,w,b,d,22,Pt[11]),b=_t(b,k,x,w,m,7,Pt[12]),w=_t(w,b,k,x,g,12,Pt[13]),x=_t(x,w,b,k,y,17,Pt[14]),b=At(b,k=_t(k,x,w,b,v,22,Pt[15]),x,w,i,5,Pt[16]),w=At(w,b,k,x,u,9,Pt[17]),x=At(x,w,b,k,d,14,Pt[18]),k=At(k,x,w,b,s,20,Pt[19]),b=At(b,k,x,w,c,5,Pt[20]),w=At(w,b,k,x,f,9,Pt[21]),x=At(x,w,b,k,v,14,Pt[22]),k=At(k,x,w,b,o,20,Pt[23]),b=At(b,k,x,w,p,5,Pt[24]),w=At(w,b,k,x,y,9,Pt[25]),x=At(x,w,b,k,a,14,Pt[26]),k=At(k,x,w,b,l,20,Pt[27]),b=At(b,k,x,w,g,5,Pt[28]),w=At(w,b,k,x,n,9,Pt[29]),x=At(x,w,b,k,h,14,Pt[30]),b=Rt(b,k=At(k,x,w,b,m,20,Pt[31]),x,w,c,4,Pt[32]),w=Rt(w,b,k,x,l,11,Pt[33]),x=Rt(x,w,b,k,d,16,Pt[34]),k=Rt(k,x,w,b,y,23,Pt[35]),b=Rt(b,k,x,w,i,4,Pt[36]),w=Rt(w,b,k,x,o,11,Pt[37]),x=Rt(x,w,b,k,h,16,Pt[38]),k=Rt(k,x,w,b,f,23,Pt[39]),b=Rt(b,k,x,w,g,4,Pt[40]),w=Rt(w,b,k,x,s,11,Pt[41]),x=Rt(x,w,b,k,a,16,Pt[42]),k=Rt(k,x,w,b,u,23,Pt[43]),b=Rt(b,k,x,w,p,4,Pt[44]),w=Rt(w,b,k,x,m,11,Pt[45]),x=Rt(x,w,b,k,v,16,Pt[46]),b=It(b,k=Rt(k,x,w,b,n,23,Pt[47]),x,w,s,6,Pt[48]),w=It(w,b,k,x,h,10,Pt[49]),x=It(x,w,b,k,y,15,Pt[50]),k=It(k,x,w,b,c,21,Pt[51]),b=It(b,k,x,w,m,6,Pt[52]),w=It(w,b,k,x,a,10,Pt[53]),x=It(x,w,b,k,f,15,Pt[54]),k=It(k,x,w,b,i,21,Pt[55]),b=It(b,k,x,w,l,6,Pt[56]),w=It(w,b,k,x,v,10,Pt[57]),x=It(x,w,b,k,u,15,Pt[58]),k=It(k,x,w,b,g,21,Pt[59]),b=It(b,k,x,w,o,6,Pt[60]),w=It(w,b,k,x,d,10,Pt[61]),x=It(x,w,b,k,n,15,Pt[62]),k=It(k,x,w,b,p,21,Pt[63]);r[0]=r[0]+b|0,r[1]=r[1]+k|0,r[2]=r[2]+x|0,r[3]=r[3]+w|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes,s=(e[i>>>5]|=128<<24-i%32,Et.floor(r/4294967296));for(e[15+(64+i>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process(),e=(t=this._hash).words,r=0;r<4;r++)i=e[r],e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var t=Ct.clone.call(this);return t._hash=this._hash.clone(),t}}),Xt.MD5=Ct._createHelper(tt),Xt.HmacMD5=Ct._createHmacHelper(tt),I=(Xt=(Dt=X).lib).WordArray,j=Xt.Hasher,C=[],Xt=Dt.algo.SHA1=j.extend({_doReset:function(){this._hash=new I.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r,i=this._hash.words,s=i[0],n=i[1],a=i[2],o=i[3],c=i[4],u=0;u<80;u++)u<16?C[u]=0|t[e+u]:(r=C[u-3]^C[u-8]^C[u-14]^C[u-16],C[u]=r<<1|r>>>31),r=(s<<5|s>>>27)+c+C[u],r=u<20?r+(1518500249+(n&a|~n&o)):u<40?r+(1859775393+(n^a^o)):u<60?r+((n&a|n&o|a&o)-1894007588):r+((n^a^o)-899497514),c=o,o=a,a=n<<30|n>>>2,n=s,s=r;i[0]=i[0]+s|0,i[1]=i[1]+n|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=j.clone.call(this);return t._hash=this._hash.clone(),t}}),Dt.SHA1=j._createHelper(Xt),Dt.HmacSHA1=j._createHmacHelper(Xt);var Tt=Math;function Ft(t){return 4294967296*(t-(0|t))|0}for(var Bt=(Dt=(tt=X).lib).WordArray,Nt=Dt.Hasher,Dt=tt.algo,Lt=[],Ht=[],zt=2,Mt=0;Mt<64;){t:{for(var Ut=zt,qt=Tt.sqrt(Ut),Vt=2;Vt<=qt;Vt++)if(!(Ut%Vt)){Ut=!1;break t}Ut=!0}Ut&&(Mt<8&&(Lt[Mt]=Ft(Tt.pow(zt,.5))),Ht[Mt]=Ft(Tt.pow(zt,1/3)),Mt++),zt++}var Kt=[];Dt=Dt.SHA256=Nt.extend({_doReset:function(){this._hash=new Bt.init(Lt.slice(0))},_doProcessBlock:function(t,e){for(var r,i,s=this._hash.words,n=s[0],a=s[1],o=s[2],c=s[3],u=s[4],h=s[5],l=s[6],p=s[7],f=0;f<64;f++)f<16?Kt[f]=0|t[e+f]:(r=Kt[f-15],i=Kt[f-2],Kt[f]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+Kt[f-7]+((i<<15|i>>>17)^(i<<13|i>>>19)^i>>>10)+Kt[f-16]),r=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&h^~u&l)+Ht[f]+Kt[f],i=((n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22))+(n&a^n&o^a&o),p=l,l=h,h=u,u=c+r|0,c=o,o=a,a=n,n=r+i|0;s[0]=s[0]+n|0,s[1]=s[1]+a|0,s[2]=s[2]+o|0,s[3]=s[3]+c|0,s[4]=s[4]+u|0,s[5]=s[5]+h|0,s[6]=s[6]+l|0,s[7]=s[7]+p|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Tt.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=Nt.clone.call(this);return t._hash=this._hash.clone(),t}});function Wt(){return $t.create.apply($t,arguments)}tt.SHA256=Nt._createHelper(Dt),tt.HmacSHA256=Nt._createHmacHelper(Dt),P=(Xt=X).lib.WordArray,O=(tt=Xt.algo).SHA256,tt=tt.SHA224=O.extend({_doReset:function(){this._hash=new P.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=O._doFinalize.call(this);return t.sigBytes-=4,t}}),Xt.SHA224=O._createHelper(tt),Xt.HmacSHA224=O._createHmacHelper(tt);for(var Gt=(Dt=X).lib.Hasher,$t=(Xt=Dt.x64).Word,Yt=Xt.WordArray,Xt=Dt.algo,Jt=[Wt(1116352408,3609767458),Wt(1899447441,602891725),Wt(3049323471,3964484399),Wt(3921009573,2173295548),Wt(961987163,4081628472),Wt(1508970993,3053834265),Wt(2453635748,2937671579),Wt(2870763221,3664609560),Wt(3624381080,2734883394),Wt(310598401,1164996542),Wt(607225278,1323610764),Wt(1426881987,3590304994),Wt(1925078388,4068182383),Wt(2162078206,991336113),Wt(2614888103,633803317),Wt(3248222580,3479774868),Wt(3835390401,2666613458),Wt(4022224774,944711139),Wt(264347078,2341262773),Wt(604807628,2007800933),Wt(770255983,1495990901),Wt(1249150122,1856431235),Wt(1555081692,3175218132),Wt(1996064986,2198950837),Wt(2554220882,3999719339),Wt(2821834349,766784016),Wt(2952996808,2566594879),Wt(3210313671,3203337956),Wt(3336571891,1034457026),Wt(3584528711,2466948901),Wt(113926993,3758326383),Wt(338241895,168717936),Wt(666307205,1188179964),Wt(773529912,1546045734),Wt(1294757372,1522805485),Wt(1396182291,2643833823),Wt(1695183700,2343527390),Wt(1986661051,1014477480),Wt(2177026350,1206759142),Wt(2456956037,344077627),Wt(2730485921,1290863460),Wt(2820302411,3158454273),Wt(3259730800,3505952657),Wt(3345764771,106217008),Wt(3516065817,3606008344),Wt(3600352804,1432725776),Wt(4094571909,1467031594),Wt(275423344,851169720),Wt(430227734,3100823752),Wt(506948616,1363258195),Wt(659060556,3750685593),Wt(883997877,3785050280),Wt(958139571,3318307427),Wt(1322822218,3812723403),Wt(1537002063,2003034995),Wt(1747873779,3602036899),Wt(1955562222,1575990012),Wt(2024104815,1125592928),Wt(2227730452,2716904306),Wt(2361852424,442776044),Wt(2428436474,593698344),Wt(2756734187,3733110249),Wt(3204031479,2999351573),Wt(3329325298,3815920427),Wt(3391569614,3928383900),Wt(3515267271,566280711),Wt(3940187606,3454069534),Wt(4118630271,4000239992),Wt(116418474,1914138554),Wt(174292421,2731055270),Wt(289380356,3203993006),Wt(460393269,320620315),Wt(685471733,587496836),Wt(852142971,1086792851),Wt(1017036298,365543100),Wt(1126000580,2618297676),Wt(1288033470,3409855158),Wt(1501505948,4234509866),Wt(1607167915,987167468),Wt(1816402316,1246189591)],Zt=[],Qt=0;Qt<80;Qt++)Zt[Qt]=Wt();Xt=Xt.SHA512=Gt.extend({_doReset:function(){this._hash=new Yt.init([new $t.init(1779033703,4089235720),new $t.init(3144134277,2227873595),new $t.init(1013904242,4271175723),new $t.init(2773480762,1595750129),new $t.init(1359893119,2917565137),new $t.init(2600822924,725511199),new $t.init(528734635,4215389547),new $t.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=(u=this._hash.words)[0],i=u[1],s=u[2],n=u[3],a=u[4],o=u[5],c=u[6],u=u[7],h=r.high,l=r.low,p=i.high,f=i.low,d=s.high,m=s.low,g=n.high,y=n.low,v=a.high,b=a.low,w=o.high,x=o.low,k=c.high,S=c.low,E=u.high,_=u.low,A=h,R=l,I=p,j=f,C=d,P=m,O=g,T=y,F=v,B=b,N=w,D=x,L=k,H=S,z=E,M=_,U=0;U<80;U++){var q,V=Zt[U],K=(U<16?(q=V.high=0|t[e+2*U],Q=V.low=0|t[e+2*U+1]):(q=((Q=(q=Zt[U-15]).high)>>>1|(G=q.low)<<31)^(Q>>>8|G<<24)^Q>>>7,G=(G>>>1|Q<<31)^(G>>>8|Q<<24)^(G>>>7|Q<<25),$=((Q=($=Zt[U-2]).high)>>>19|(Y=$.low)<<13)^(Q<<3|Y>>>29)^Q>>>6,Y=(Y>>>19|Q<<13)^(Y<<3|Q>>>29)^(Y>>>6|Q<<26),K=(Q=Zt[U-7]).high,Z=(W=Zt[U-16]).high,W=W.low,q=(q=(q=q+K+((Q=G+Q.low)>>>0<G>>>0?1:0))+$+((Q+=Y)>>>0<Y>>>0?1:0))+Z+((Q+=W)>>>0<W>>>0?1:0),V.high=q,V.low=Q),F&N^~F&L),W=B&D^~B&H,G=(V=A&I^A&C^I&C,(A>>>28|R<<4)^(A<<30|R>>>2)^(A<<25|R>>>7)),$=(R>>>28|A<<4)^(R<<30|A>>>2)^(R<<25|A>>>7),Y=Jt[U],X=Y.high,J=Y.low,Z=(Z=(Z=(Z=z+((F>>>14|B<<18)^(F>>>18|B<<14)^(F<<23|B>>>9))+((Y=M+((B>>>14|F<<18)^(B>>>18|F<<14)^(B<<23|F>>>9)))>>>0<M>>>0?1:0))+K+((Y+=W)>>>0<W>>>0?1:0))+X+((Y+=J)>>>0<J>>>0?1:0))+q+((Y+=Q)>>>0<Q>>>0?1:0),Q=$+(R&j^R&P^j&P);z=L,M=H,L=N,H=D,N=F,D=B,F=O+Z+((B=T+Y|0)>>>0<T>>>0?1:0)|0,O=C,T=P,C=I,P=j,I=A,j=R,A=Z+(V=G+V+(Q>>>0<$>>>0?1:0))+((R=Y+Q|0)>>>0<Y>>>0?1:0)|0}l=r.low=l+R,r.high=h+A+(l>>>0<R>>>0?1:0),f=i.low=f+j,i.high=p+I+(f>>>0<j>>>0?1:0),m=s.low=m+P,s.high=d+C+(m>>>0<P>>>0?1:0),y=n.low=y+T,n.high=g+O+(y>>>0<T>>>0?1:0),b=a.low=b+B,a.high=v+F+(b>>>0<B>>>0?1:0),x=o.low=x+D,o.high=w+N+(x>>>0<D>>>0?1:0),S=c.low=S+H,c.high=k+L+(S>>>0<H>>>0?1:0),_=u.low=_+M,u.high=E+z+(_>>>0<M>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=Gt.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32}),Dt.SHA512=Gt._createHelper(Xt),Dt.HmacSHA512=Gt._createHmacHelper(Xt),T=(Dt=(tt=X).x64).Word,F=Dt.WordArray,B=(Dt=tt.algo).SHA512,Dt=Dt.SHA384=B.extend({_doReset:function(){this._hash=new F.init([new T.init(3418070365,3238371032),new T.init(1654270250,914150663),new T.init(2438529370,812702999),new T.init(355462360,4144912697),new T.init(1731405415,4290775857),new T.init(2394180231,1750603025),new T.init(3675008525,1694076839),new T.init(1203062813,3204075428)])},_doFinalize:function(){var t=B._doFinalize.call(this);return t.sigBytes-=16,t}}),tt.SHA384=B._createHelper(Dt),tt.HmacSHA384=B._createHmacHelper(Dt),Math,N=(tt=(Xt=X).lib).WordArray,D=tt.Hasher,tt=Xt.algo,L=N.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),H=N.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),z=N.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),M=N.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),U=N.create([0,1518500249,1859775393,2400959708,2840853838]),q=N.create([1352829926,1548603684,1836072691,2053994217,0]),tt=tt.RIPEMD160=D.extend({_doReset:function(){this._hash=N.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=t[h=e+r];t[h]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var s,n,a,o,c,u,h=this._hash.words,l=(i=U.words,q.words),p=L.words,f=H.words,d=z.words,m=M.words,g=s=h[0],y=n=h[1],v=a=h[2],b=o=h[3],w=c=h[4];for(r=0;r<80;r+=1)u=s+t[e+p[r]]|0,u=r<16?u+((n^a^o)+i[0]):r<32?u+((n&a|~n&o)+i[1]):r<48?u+(((n|~a)^o)+i[2]):r<64?u+((n&o|a&~o)+i[3]):u+((n^(a|~o))+i[4]),u=(u=(u|=0)<<d[r]|u>>>32-d[r])+c|0,s=c,c=o,o=a<<10|a>>>22,a=n,n=u,u=g+t[e+f[r]]|0,u=r<16?u+((y^(v|~b))+l[0]):r<32?u+((y&b|v&~b)+l[1]):r<48?u+(((y|~v)^b)+l[2]):r<64?u+((y&v|~y&b)+l[3]):u+((y^v^b)+l[4]),u=(u=(u|=0)<<m[r]|u>>>32-m[r])+w|0,g=w,w=b,b=v<<10|v>>>22,v=y,y=u;u=h[1]+a+b|0,h[1]=h[2]+o+w|0,h[2]=h[3]+c+g|0,h[3]=h[4]+s+y|0,h[4]=h[0]+n+v|0,h[0]=u},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;for(e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process(),e=(t=this._hash).words,r=0;r<5;r++)i=e[r],e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var t=D.clone.call(this);return t._hash=this._hash.clone(),t}}),Xt.RIPEMD160=D._createHelper(tt),Xt.HmacRIPEMD160=D._createHmacHelper(tt),V=(Dt=X).enc.Utf8,Dt.algo.HMAC=Dt.lib.Base.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=V.parse(e));var r=t.blockSize,i=4*r;(e=e.sigBytes>i?t.finalize(e):e).clamp();t=this._oKey=e.clone(),e=this._iKey=e.clone();for(var s=t.words,n=e.words,a=0;a<r;a++)s[a]^=1549556828,n[a]^=909522486;t.sigBytes=e.sigBytes=i,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher;return t=e.finalize(t),e.reset(),e.finalize(this._oKey.clone().concat(t))}}),Dt=(tt=(Xt=X).lib).Base,K=tt.WordArray,W=(tt=Xt.algo).HMAC,G=tt.PBKDF2=Dt.extend({cfg:Dt.extend({keySize:4,hasher:tt.SHA1,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var r=this.cfg,i=W.create(r.hasher,t),s=K.create(),n=K.create([1]),a=s.words,o=n.words,c=r.keySize;for(r=r.iterations;a.length<c;){var u=i.update(e).finalize(n);i.reset();for(var h=u.words,l=h.length,p=u,f=1;f<r;f++){p=i.finalize(p),i.reset();for(var d=p.words,m=0;m<l;m++)h[m]^=d[m]}s.concat(u),o[0]++}return s.sigBytes=4*c,s}}),Xt.PBKDF2=function(t,e,r){return G.create(r).compute(t,e)};
|
|
778
778
|
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
|
|
779
779
|
*/
|
|
780
780
|
var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function ee(t){for(var e,r="",i=0;i+3<=t.length;i+=3)e=parseInt(t.substring(i,i+3),16),r+=te.charAt(e>>6)+te.charAt(63&e);for(i+1==t.length?(e=parseInt(t.substring(i,i+1),16),r+=te.charAt(e<<2)):i+2==t.length&&(e=parseInt(t.substring(i,i+2),16),r+=te.charAt(e>>2)+te.charAt((3&e)<<4)),"=";0<(3&r.length);)r+="=";return r}function re(t){for(var e,r,i="",s=0,n=0;n<t.length&&"="!=t.charAt(n);++n)(r=te.indexOf(t.charAt(n)))<0||(s=0==s?(i+=ue(r>>2),e=3&r,1):1==s?(i+=ue(e<<2|r>>4),e=15&r,2):2==s?(i=(i+=ue(e))+ue(r>>2),e=3&r,3):(i=(i+=ue(e<<2|r>>4))+ue(15&r),0));return 1==s&&(i+=ue(e<<2)),i}function ie(t){for(var e=re(t),r=new Array,i=0;2*i<e.length;++i)r[i]=parseInt(e.substring(2*i,2*i+2),16);return r}function se(t,e,r){null!=t&&("number"==typeof t?this.fromNumber(t,e,r):null==e&&"string"!=typeof t?this.fromString(t,256):this.fromString(t,e))}function ne(){return new se(null)}Dt="Microsoft Internet Explorer"==$.appName?(se.prototype.am=function(t,e,r,i,s,n){for(var a=32767&e,o=e>>15;0<=--n;){var c=32767&this[t],u=this[t++]>>15,h=o*c+u*a;s=((c=a*c+((32767&h)<<15)+r[i]+(1073741823&s))>>>30)+(h>>>15)+o*u+(s>>>30),r[i++]=1073741823&c}return s},30):"Netscape"!=$.appName?(se.prototype.am=function(t,e,r,i,s,n){for(;0<=--n;){var a=e*this[t++]+r[i]+s;s=Math.floor(a/67108864),r[i++]=67108863&a}return s},26):(se.prototype.am=function(t,e,r,i,s,n){for(var a=16383&e,o=e>>14;0<=--n;){var c=16383&this[t],u=this[t++]>>14,h=o*c+u*a;s=((c=a*c+((16383&h)<<14)+r[i]+s)>>28)+(h>>14)+o*u,r[i++]=268435455&c}return s},28),se.prototype.DB=Dt,se.prototype.DM=(1<<Dt)-1,se.prototype.DV=1<<Dt,se.prototype.FV=Math.pow(2,52),se.prototype.F1=52-Dt,se.prototype.F2=2*Dt-52;for(var ae=new Array,oe="0".charCodeAt(0),ce=0;ce<=9;++ce)ae[oe++]=ce;for(oe="a".charCodeAt(0),ce=10;ce<36;++ce)ae[oe++]=ce;for(oe="A".charCodeAt(0),ce=10;ce<36;++ce)ae[oe++]=ce;function ue(t){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(t)}function he(t,e){return null==(t=ae[t.charCodeAt(e)])?-1:t}function le(t){var e=ne();return e.fromInt(t),e}function pe(t){var e,r=1;return 0!=(e=t>>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function fe(t){this.m=t}function de(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<t.DB-15)-1,this.mt2=2*t.t}function me(t,e){return t&e}function ge(t,e){return t|e}function ye(t,e){return t^e}function ve(t,e){return t&~e}function be(){}function we(t){return t}function xe(t){this.r2=ne(),this.q3=ne(),se.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}fe.prototype.convert=function(t){return t.s<0||0<=t.compareTo(this.m)?t.mod(this.m):t},fe.prototype.revert=function(t){return t},fe.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},fe.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},fe.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},de.prototype.convert=function(t){var e=ne();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&0<e.compareTo(se.ZERO)&&this.m.subTo(e,e),e},de.prototype.revert=function(t){var e=ne();return t.copyTo(e),this.reduce(e),e},de.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e<this.m.t;++e){var r=32767&t[e],i=r*this.mpl+((r*this.mph+(t[e]>>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,i,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),0<=t.compareTo(this.m)&&t.subTo(this.m,t)},de.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},de.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},se.prototype.copyTo=function(t){for(var e=this.t-1;0<=e;--e)t[e]=this[e];t.t=this.t,t.s=this.s},se.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,0<t?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},se.prototype.fromString=function(t,e){var r;if(16==e)r=4;else if(8==e)r=3;else if(256==e)r=8;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return void this.fromRadix(t,e);r=2}this.t=0,this.s=0;for(var i=t.length,s=!1,n=0;0<=--i;){var a=8==r?255&t[i]:he(t,i);a<0?"-"==t.charAt(i)&&(s=!0):(s=!1,0==n?this[this.t++]=a:n+r>this.DB?(this[this.t-1]|=(a&(1<<this.DB-n)-1)<<n,this[this.t++]=a>>this.DB-n):this[this.t-1]|=a<<n,(n+=r)>=this.DB&&(n-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,0<n&&(this[this.t-1]|=(1<<this.DB-n)-1<<n)),this.clamp(),s&&se.ZERO.subTo(this,this)},se.prototype.clamp=function(){for(var t=this.s&this.DM;0<this.t&&this[this.t-1]==t;)--this.t},se.prototype.dlShiftTo=function(t,e){for(var r=this.t-1;0<=r;--r)e[r+t]=this[r];for(r=t-1;0<=r;--r)e[r]=0;e.t=this.t+t,e.s=this.s},se.prototype.drShiftTo=function(t,e){for(var r=t;r<this.t;++r)e[r-t]=this[r];e.t=Math.max(this.t-t,0),e.s=this.s},se.prototype.lShiftTo=function(t,e){for(var r=t%this.DB,i=this.DB-r,s=(1<<i)-1,n=Math.floor(t/this.DB),a=this.s<<r&this.DM,o=this.t-1;0<=o;--o)e[o+n+1]=this[o]>>i|a,a=(this[o]&s)<<r;for(o=n-1;0<=o;--o)e[o]=0;e[n]=a,e.t=this.t+n+1,e.s=this.s,e.clamp()},se.prototype.rShiftTo=function(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var i=t%this.DB,s=this.DB-i,n=(1<<i)-1;e[0]=this[r]>>i;for(var a=r+1;a<this.t;++a)e[a-r-1]|=(this[a]&n)<<s,e[a-r]=this[a]>>i;0<i&&(e[this.t-r-1]|=(this.s&n)<<s),e.t=this.t-r,e.clamp()}},se.prototype.subTo=function(t,e){for(var r=0,i=0,s=Math.min(t.t,this.t);r<s;)i+=this[r]-t[r],e[r++]=i&this.DM,i>>=this.DB;if(t.t<this.t){for(i-=t.s;r<this.t;)i+=this[r],e[r++]=i&this.DM,i>>=this.DB;i+=this.s}else{for(i+=this.s;r<t.t;)i-=t[r],e[r++]=i&this.DM,i>>=this.DB;i-=t.s}e.s=i<0?-1:0,i<-1?e[r++]=this.DV+i:0<i&&(e[r++]=i),e.t=r,e.clamp()},se.prototype.multiplyTo=function(t,e){var r=this.abs(),i=t.abs(),s=r.t;for(e.t=s+i.t;0<=--s;)e[s]=0;for(s=0;s<i.t;++s)e[s+r.t]=r.am(0,i[s],e,s,0,r.t);e.s=0,e.clamp(),this.s!=t.s&&se.ZERO.subTo(e,e)},se.prototype.squareTo=function(t){for(var e=this.abs(),r=t.t=2*e.t;0<=--r;)t[r]=0;for(r=0;r<e.t-1;++r){var i=e.am(r,e[r],t,2*r,0,1);(t[r+e.t]+=e.am(r+1,2*e[r],t,2*r+1,i,e.t-r-1))>=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}0<t.t&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},se.prototype.divRemTo=function(t,e,r){if(!((u=t.abs()).t<=0)){var i=this.abs();if(i.t<u.t)null!=e&&e.fromInt(0),null!=r&&this.copyTo(r);else{null==r&&(r=ne());var s=ne(),n=this.s,a=(t=t.s,this.DB-pe(u[u.t-1])),o=(0<a?(u.lShiftTo(a,s),i.lShiftTo(a,r)):(u.copyTo(s),i.copyTo(r)),s.t),c=s[o-1];if(0!=c){var u=c*(1<<this.F1)+(1<o?s[o-2]>>this.F2:0),h=this.FV/u,l=(1<<this.F1)/u,p=1<<this.F2,f=r.t,d=f-o,m=null==e?ne():e;for(s.dlShiftTo(d,m),0<=r.compareTo(m)&&(r[r.t++]=1,r.subTo(m,r)),se.ONE.dlShiftTo(o,m),m.subTo(s,s);s.t<o;)s[s.t++]=0;for(;0<=--d;){var g=r[--f]==c?this.DM:Math.floor(r[f]*h+(r[f-1]+p)*l);if((r[f]+=s.am(0,g,r,d,0,o))<g)for(s.dlShiftTo(d,m),r.subTo(m,r);r[f]<--g;)r.subTo(m,r)}null!=e&&(r.drShiftTo(o,e),n!=t&&se.ZERO.subTo(e,e)),r.t=o,r.clamp(),0<a&&r.rShiftTo(a,r),n<0&&se.ZERO.subTo(r,r)}}}},se.prototype.invDigit=function(){var t,e;return this.t<1||0==(1&(t=this[0]))?0:0<(e=(e=(e=(e=(e=3&t)*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)?this.DV-e:-e},se.prototype.isEven=function(){return 0==(0<this.t?1&this[0]:this.s)},se.prototype.exp=function(t,e){if(4294967295<t||t<1)return se.ONE;var r,i=ne(),s=ne(),n=e.convert(this),a=pe(t)-1;for(n.copyTo(i);0<=--a;)e.sqrTo(i,s),0<(t&1<<a)?e.mulTo(s,n,i):(r=i,i=s,s=r);return e.revert(i)},se.prototype.toString=function(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var r,i=(1<<e)-1,s=!1,n="",a=this.t,o=this.DB-a*this.DB%e;if(0<a--)for(o<this.DB&&0<(r=this[a]>>o)&&(s=!0,n=ue(r));0<=a;)o<e?(r=(this[a]&(1<<o)-1)<<e-o,r|=this[--a]>>(o+=this.DB-e)):(r=this[a]>>(o-=e)&i,o<=0&&(o+=this.DB,--a)),(s=0<r||s)&&(n+=ue(r));return s?n:"0"},se.prototype.negate=function(){var t=ne();return se.ZERO.subTo(this,t),t},se.prototype.abs=function(){return this.s<0?this.negate():this},se.prototype.compareTo=function(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;0<=--r;)if(0!=(e=this[r]-t[r]))return e;return 0},se.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+pe(this[this.t-1]^this.s&this.DM)},se.prototype.mod=function(t){var e=ne();return this.abs().divRemTo(t,null,e),this.s<0&&0<e.compareTo(se.ZERO)&&t.subTo(e,e),e},se.prototype.modPowInt=function(t,e){return e=new(t<256||e.isEven()?fe:de)(e),this.exp(t,e)},se.ZERO=le(0),se.ONE=le(1),be.prototype.convert=we,be.prototype.revert=we,be.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r)},be.prototype.sqrTo=function(t,e){t.squareTo(e)},xe.prototype.convert=function(t){var e;return t.s<0||t.t>2*this.m.t?t.mod(this.m):t.compareTo(this.m)<0?t:(e=ne(),t.copyTo(e),this.reduce(e),e)},xe.prototype.revert=function(t){return t},xe.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);0<=t.compareTo(this.m);)t.subTo(this.m,t)},xe.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},xe.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)};var ke=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],Se=(1<<26)/ke[ke.length-1];
|
|
@@ -861,16 +861,16 @@ Me=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.
|
|
|
861
861
|
/*!
|
|
862
862
|
* accountdb.js - storage for account management
|
|
863
863
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
864
|
-
*/const i=r(8),s=r(0),n=r(73),a=r(122),o=r(161),c=r(617),u=r(96),h=u.walletdb,l=r(6),p=r(162),f=r(127),d=r(171),m=r(7),g=r(38).VerifyError,y=r(46),v=r(12);r(19);const b=r(59),w=r(200),x=r(69),k=r(42),{getVerifyMsg:S,BlockFinalType:E,ContractEnvType:_}=r(5),A=r(163),R=r(619),I=r(29);var j=r(72);const C=r(1),P=r(120).sortWithSeq,O=r(35),T=r(201),F=r(65),B=r(102),N=r(3),D=N.U32,L=r(347),H=r(348),z=r(349),M=z.vpItem,U=r(620),q=U.vpItem,V=r(83),K=r(621),W=V.cpItem,G=V.stockItem,$=r(158),Y=$.ErAbolishItem,X=r(159),J=X.X509Cert,Z=r(160),Q=Z.X509Abolish,tt=r(39).broadcast,et=r(134),rt=et.vpItem,it=r(236),st=it.stockAccount,nt=r(157),at=nt.ErItem,ot=r(324),ct=ot.AuditItem,ut=r(321),ht=r(111),lt=r(622),pt=r(322),ft=r(123),dt=r(623),mt=r(226),gt=r(32),yt=r(36);class vt extends j{constructor(t){super(),this.readyLoad=!1,this.options=new c(t),this.network=this.options.network,this.logger=this.options.logger.context("wallet"),this.workers=this.options.workers,this.keys={hmacSalt:N.DefaultChainCode},t.keys&&t.keys.hmacSalt&&(s(Buffer.isBuffer(t.keys.hmacSalt)),this.keys.hmacSalt=t.keys.hmacSalt),this.client=this.options.client,this.client&&(this.client.wdb=this),this.jsonp=this.options.jsonp,this.jsonp&&(this.jsonp.wdb=this),this.spv=this.options.spv,this.feeRate=this.options.feeRate,this.db=d(this.options),this.rpc=new L(this),this.primary=null,this.state=new lt,this.wallets=new Map,this.depth=0,this.rescanning=!1,this.bound=!1,this.newRecord=!0,this.readLock=new T,this.writeLock=new O,this.txLock=new O,this.scanLock=new O,this.widCache=new F(1e4),this.pathMapCache=new F(1e5),this.filter=new B,this.middleHashMem=new Set,this.middleHashChain=new Set,this.autoTaskMgr=new A(this),this.transactionList=new H(this),this.htlcList=new z(this),this.commentList=new U(this),this.NotifyList=new I,this.propList=new et(this),this.accountList=new it(this),this.$contacts=new I,this.cpList=new V(this),this.cpMemList=new V(this),this.accountCoinList=new K(this),this.auditList=new ot(this),this.erList=new nt(this),this.erAbList=new $(this),this.x509CertList=new X(this),this.x509AbolishList=new Z(this),this.hmacConnection=[],this._init()}async logAudit(t){t.height=this.curHeight,t.time=C.now(),t.erid=l.sha256(C.stringify(t)).toString("hex"),t=new ct(t),await this.auditList.setAudit(t)}async getAccountByAddress(t,e){if(t){let i=null;if(i=e?await this.getWalletsByTX(e):await this.getWallets())for(const e of i){const i=await this.get(e);if(i){var r=await i.getPath(t);if(r)return[i.wid,r.name,i.id]}}}return[0,"",""]}_init(){let t=1e6,e=-1;this.spv&&(t=2e4,e=B.flags.ALL),this.filter=B.fromRate(t,.001,e)}async getCpSnap(){return{}}get mode(){return _.Wallet}async getTXFromAll(t){return this.getTXFromDb(t)}async checkNewRecord(){var t={createIfMissing:this.db.options.createIfMissing,errorIfExists:this.db.options.errorIfExists};this.db.options.createIfMissing=!1,this.db.options.errorIfExists=!0;try{await this.db.open();var e=await this.db.checkVersion(h,6);this.newRecord="new"==e}catch(t){if(-1!=t.message.indexOf("does not exist (create_if_missing is false)"))this.newRecord=!0;else{if(-1==t.message.indexOf("exists (error_if_exists is true)"))throw t;this.newRecord=!1}}try{await this.db.close()}catch(t){}this.db.options.createIfMissing=t.createIfMissing,this.db.options.errorIfExists=t.errorIfExists}async isNewRecord(){return await this.checkNewRecord(),this.newRecord}setmnemonic(t){if(this.options.mnemonic=this.options.mnemonic||{},t.bits)this.options.mnemonic={bits:t.bits};else if(t.entropy)this.options.mnemonic={entropy:Buffer.from(t.entropy,"hex")};else if(t.phrase){var e=this.testmnemonic(t.phrase);if(0!=e.code)throw e.msg;this.options.mnemonic={phrase:t.phrase}}t.passphrase&&(this.options.mnemonic.passphrase=t.passphrase),t.language&&(this.options.mnemonic.language=t.language)}testmnemonic(t){try{return new w(t),{code:0}}catch(t){return{code:-1,msg:t.message}}}async getContracts(t){let e=await this.db.values({gte:u.txdb.tx(N.NULL_HASH),lte:u.txdb.tx(N.HIGH_HASH),parse:t=>C.parseJson(t.toString())});return t?e.filter(e=>e.srcact==t||e.dstact==t):e}isFull(){return this.spv||this.synced||!1}async _open(t){}async handleNotify(t,e=!1){if(!e){let r=t.body.content;if("string"==typeof r)try{r=JSON.parse(t.body.content)}catch(e){return}if("object"==typeof r&&"secret"===r.type){let e={contact:t.body.src,messenger:t.body.dst};r.init&&(e.init=Buffer.from(r.init,"hex")),r.packet&&(e.packet=Buffer.from(r.packet)),await this.handleSecret(e)}}}async handleSecret(t){if(t.contact&&t.messenger&&t.contact!=t.messenger){try{v.fromString(t.contact,this.network.type),v.fromString(t.messenger,this.network.type)}catch(t){return}let e=await this.ensureContact(t);e&&await e.ensureMessenger(t).answer(t)}}async scanContact(t,e=-1){var r=async t=>{var e;t.witness&&"witnesspubkeyhash"==t.getType()&&(e=t.witness.getPubkeyhashInput()[1],t=v.fromWitness(t.witness).toString(),e&&t&&await this.ensureContact({contact:t,publicKey:e}))};if(0<=e&&e<t.inputs.length)await r(t.inputs[e]);else for(var i of t.inputs)await r(i)}async ensureContact(t){if(!t.contact||t.contact==t.messenger)return null;try{v.fromString(t.contact,this.network.type),t.messenger&&v.fromString(t.messenger,this.network.type)}catch(t){return null}t.network=this.network.type,this.$contacts.get(t.contact)||this.$contacts.set(t.contact,new R(t));let e=this.$contacts.get(t.contact);if(t.messenger){let i=e.ensureMessenger(t);if(!i.wallet){var[t,r]=await this.getAccountByAddress(i.address);if(!(t=await this.get(t)))return;i.wallet=t,i.account=r}}return e}getCps(){return this.db.values({gte:u.txdb.cp(N.ZERO_CID,"hex"),lte:u.txdb.cp(N.MAX_CID,"hex"),parse:t=>W.fromRaw(t)})}async _close(){await this.disconnect(),this.http&&this.options.listen&&await this.http.close();for(const t of this.wallets.values())await t.destroy();await this.db.close(),this.options.listen&&await this.logger.close()}async destroy(){await this.db.destroy(),this.widCache.reset(),this.pathMapCache.reset()}async load(){if(this.readyLoad){const t=await this.txLock.lock();try{await this.init(),await this.watch(),await this.sync()}finally{t()}setTimeout(()=>{this.resend()},5e3)}}bind(){!this.client||this.bound||(this.bound=!0,this.client.hook("htlcassent.cancel",t=>{this.setAssent(t),this.emit("htlcassent.cancel",t)}),this.client.hook("htlcassent.deal",t=>{this.setAssent(t),this.emit("htlcassent.deal",t)}),this.client.hook("htlcassent.receive",t=>{this.setAssent(t),this.emit("htlcassent.receive",t)}),this.client.hook("htlcsuggest.cancel",t=>{this.setSuggest(t),this.emit("htlcsuggest.cancel",t)}),this.client.hook("htlcsuggest.deal",t=>{this.setSuggest(t),this.emit("htlcsuggest.deal",t)}),this.client.hook("htlcsuggest.receive",t=>{this.setSuggest(t),this.emit("htlcsuggest.receive",t)}),this.on("mssendpubk/receive",async t=>{let e=await this.get(t.addr);if(!e){e=await this.ensure({id:t.addr,type:"multisig",m:t.m,n:t.n,witness:!0});var[r,i]=await this.getAccountByAddress(t.addr);let s=await this.get(r);s&&await s.send({subtractFee:!1,sort:!1,outputs:[{address:t.contract,value:1e4}],comment:JSON.stringify({oper:"scrun",params:{oper:"pubk",addr:t.addr,puba:e.account.accountKey}})},i)}if(e.account.keys.length<e.account.n-1){var s;for(s of t.data.split(","))try{await e.addSharedKey(s)}catch(s){}if(e.account.keys.length==e.account.n-1){var[r,i]=await this.getAccountByAddress(t.addr);let s=await this.get(r);s&&await s.send({subtractFee:!1,sort:!1,outputs:[{address:t.contract,value:1e4}],comment:JSON.stringify({oper:"scrun",params:{oper:"puba",addr:t.addr,puba:e.account.receive.getAddress().toString()}})},i)}}}),this.on("mssendtx/receive",async t=>{let e=await this.get(t.addr);if(e&&e.account.type==o.types.MULTISIG){const r=b.fromRaw(t.data,"hex");r.view=await e.getCoinView(r),r.isSigned()||(t.txid=r.txid(),await this.saveMSTrans(t))}}),this.client.hook("onConnect",async()=>{await this.load()}),this.client.hook("error",t=>{this.emit("error",t)}),this.client.hook("block.connect",async(t,e)=>{try{await this.addBlock(t,e)}catch(t){this.emit("error",t)}}),this.client.hook("block.disconnect",async(t,e)=>{try{await this.removeBlock(t,e)}catch(t){this.emit("error",t)}}),this.client.hook("chain.full",()=>{this.synced=!0}),this.client.hook("block.rescan",async(t,e)=>{try{await this.rescanBlock(t,e)}catch(t){this.emit("error",t)}}),this.client.hook("tx",async(t,e,r)=>{try{await this.addTX(t,null,r)}catch(t){this.emit("error",t)}}),this.client.hook("entry.remove",async(t,e)=>{try{if(e){var r=t.tx.hash("hex"),i=await this.getWalletsByTX(t.tx);if(i)for(const e of i){const i=await this.get(e);s(i),await i.remove(r),(await k.FactoryOfContract({tx:t.tx,env:this})).erase()}}}catch(e){this.emit("error",e)}}),this.client.hook("chain.reset",async t=>{try{await this.resetChain(t)}catch(t){this.emit("error",t)}}),this.jsonp&&this.jsonp.hook("error",t=>{this.emit("error",t)}))}async disconnect(){this.client&&await this.client._close(),this.jsonp&&await this.jsonp._close()}async flushCP(t,e=!1){this.client&&(t=t||[],e||(t=this.cpList.excludeCids(t),e=e||0<t.length),e&&await this.client.execute("cp.remoteQuery",[[["cid","include",t]]]))}async watch(){let t=this.db.iterator({gte:h.p(N.NULL_HASH),lte:h.p(N.HIGH_HASH)}),e=0,r=0;for(;;){var i=await t.next();if(!i)break;try{var s=h.pp(i.key);this.filter.add(s,"hex")}catch(e){throw await t.end(),e}e++}for(t=this.db.iterator({gte:h.o(N.NULL_HASH,0),lte:h.o(N.HIGH_HASH,4294967295)});;){var n=await t.next();if(!n)break;try{var[a,o]=h.oo(n.key);var c=new y(a,o).toRaw();this.filter.add(c)}catch(e){throw await t.end(),e}r++}this.logger.info("Filter: Added %d hashes to AccountDB filter.",e),this.logger.info("Filter: Added %d outpoints to AccountDB filter.",r),await this.setFilter()}async sync(){if(this.client){let e,r=this.curHeight;for(;0<=r;){var t=await this.getBlock(r);if(!t)break;if(e=await this.client.getEntry(t.hash))break;r--}e||(r=this.state.startHeight,(e=await this.client.getEntry(this.state.startHash))||(r=0)),await this.cpList.loadHistory(),await this.cpMemList.loadHistory(),await this.propList.loadHistory(),await this.htlcList.loadHistory(),await this.commentList.loadHistory(),await this.accountList.loadHistory(),await this.transactionList.loadHistory(),await this.loadContact(),await this.erList.loadHistory(),await this.auditList.loadHistory(),await this.erAbList.loadHistory(),await this.x509CertList.loadHistory(),await this.x509AbolishList.loadHistory(),await this.accountCoinList.loadHistory(),await this.scan(r,!1)}}async scan(t,e=!0){if(this.client&&(null==t&&(t=this.state.startHeight),s(t>>>0===t,"WDB: Must pass in a height."),!await this.rollback(t,e)||0===t)){this.logger.info("AccountDB is scanning %d blocks.",this.curHeight-t+1),e=await this.getTip();try{this.rescanning=!0,await this.client.rescan(e.hash)}finally{this.rescanning=!1}}}async rescan(t){const e=await this.txLock.lock();try{return await this.scan(t,!1)}finally{e()}}async send(t){if(this.client)return this.client.send(t);this.emit("send",t)}async getTX(t){for(const r of this.wallets.values()){var e=await r.getTX(t);if(e)return e.tx}return null}async getTXFromDb(t){for(const r of this.wallets.values()){var e=await r.getTX(t);if(e)return e.tx}return null}async getExtendTX(t){for(const r of this.wallets.values()){var e=await r.getTX(t);if(e)return e}return null}async removeTX(t){this.client?await this.client.removeTX(t):this.emit("remove",t)}async estimateFee(t){return 0<this.feeRate?this.feeRate:!this.client||(t=await this.client.estimateFee(t))<this.network.feeRate?this.network.feeRate:t>this.network.maxFeeRate?this.network.maxFeeRate:t}setFilter(){return this.client?this.client.setFilter(this.filter):(this.emit("filter.set",this.filter),Promise.resolve())}addFilter(t){return this.client?this.client.addFilter(t):(this.emit("filter.add",t),Promise.resolve())}resetFilter(){return this.client?this.client.resetFilter():(this.emit("filter.reset"),Promise.resolve())}backup(t){return this.db.backup(t)}async wipe(){this.logger.warning("Wiping AccountDB TXDB..."),this.logger.warning("I hope you know what you're doing.");const t=this.db.iterator({gte:Buffer.from([0]),lte:Buffer.from([255])}),e=this.db.batch();let r=0;for(;;){var i=await t.next();if(!i)break;try{switch(i.key[0]){case 98:case 99:case 101:case 116:case 111:case 104:case 82:e.del(i.key),r++}}catch(e){throw await t.end(),e}}this.logger.warning("Wiped %d txdb records.",r),await e.write()}async getDepth(){const t=this.db.iterator({gte:h.w(0),lte:h.w(4294967295),reverse:!0,limit:1});var e=await t.next();return e?(await t.end(),h.ww(e.key)+1):1}start(t){return s(!t.current,"WDB: Batch already started."),t.current=this.db.batch(),t.accountCache.start(),t.pathCache.start(),t.current}drop(t){const e=this.batch(t);t.current=null,t.accountCache.drop(),t.pathCache.drop(),e.clear()}clear(t){const e=this.batch(t);t.accountCache.clear(),t.pathCache.clear(),e.clear()}batch(t){return s(t.current,"WDB: Batch does not exist."),t.current}async commit(t){const e=this.batch(t);try{await e.write()}catch(t){throw this.drop(),t}t.current=null,t.accountCache.commit(),t.pathCache.commit()}testFilter(t){return this.filter.test(t,"hex")}addHash(t){return this.filter.add(t,"hex"),this.addFilter(t)}addOutpoint(t,e){const r=new y(t,e);this.filter.add(r.toRaw())}dump(){return this.db.dump()}register(t){s(!this.wallets.has(t.wid)),this.wallets.set(t.wid,t)}unregister(t){s(this.wallets.has(t.wid)),this.wallets.delete(t.wid)}async getWalletID(t){if(!t)return null;if("number"==typeof t)return t;var e=this.widCache.get(t);if(e)return e;const r=await this.db.get(h.l(t));return r?(e=r.readUInt32LE(0,!0),this.widCache.set(t,e),e):null}async get(t){if(!(t=await this.getWalletID(t)))return null;const e=await this.readLock.lock(t);try{return await this._get(t)}finally{e()}}async _get(t){var e=this.wallets.get(t);if(e)return e;if(!(e=await this.db.get(h.w(t))))return null;const r=a.fromRaw(this,e);return await r.open(),this.register(r),r}save(t){var e=t.wid,r=t.id;const i=this.batch(t);this.widCache.set(r,e),i.put(h.w(e),t.toRaw()),i.put(h.l(r),D(e))}async rename(t,e){const r=await this.writeLock.lock();try{return await this._rename(t,e)}finally{r()}}async _rename(t,e){var r=t.id;if(!n.isName(e))throw new Error("WDB: Bad wallet ID.");if(await this.has(e))throw new Error("WDB: ID not available.");this.start(t).del(h.l(r)),t.id=e,this.save(t),await this.commit(t),this.widCache.remove(r);for(const r of t.pathCache.values())r.id=e}async replace(t){const e=await this.writeLock.lock();try{return await this._replace(t)}finally{e()}}async _replace(t){const e=this.start(t);e.del(h.l(t.id)),e.del(h.w(t.wid)),this.save(t),await this.commit(t),this.widCache.remove(t.id),this.wallets.delete(t.wid)}renameAccount(t,e){var r=t.wallet;this.batch(r).del(h.i(t.wid,t.name)),t.name=e,this.saveAccount(t)}async auth(t,e){if("string"==typeof e){if(!C.isHex256(e))throw new Error("WDB Authentication: Invalid Token.");e=Buffer.from(e,"hex")}t=x.getHmac(t.toString(),this.keys.hmacSalt);const r=i.createHmac("sha256",t.random);if(t=Buffer.from(r.update(t.token).digest("hex"),"hex"),!p(e,t))throw new Error("WDB Authentication: CRC Error.")}async create(t){const e=await this.writeLock.lock();t=t||{};try{return await this._create(t)}finally{e()}}async _create(t){if(await this.has(t.id))throw new Error("WDB: Wallet already exists.");"string"==typeof t.mnemonic&&(t.mnemonic={phrase:t.mnemonic}),t.mnemonic=t.mnemonic||{},!t.mnemonic.language&&this.options.mnemonic&&this.options.mnemonic.language&&(t.mnemonic.language=this.options.mnemonic.language);const e=a.fromOptions(this,t);return e.wid=this.depth++,await e.init(t),this.register(e),this.logger.info("Created wallet %s in AccountDB.",e.id),e}async has(t){return null!=await this.getWalletID(t)}async ensure(t){return await this.get(t.id)||this.create(t)}async getAccount(t,e){return(t=await this.db.get(h.a(t,e)))?o.fromRaw(this,t):null}getAccounts(t){return this.db.values({gte:h.n(t,0),lte:h.n(t,4294967295),parse:t=>t.toString("ascii")})}async getAccountIndex(t,e){const r=await this.db.get(h.i(t,e));return r?r.readUInt32LE(0,!0):-1}async getGuider(t){return t=v.fromString(t,this.network.type).getHash("hex"),(t=await this.db.get(h.g(t)))?v.fromRaw(t).toString():null}async setGuider(t,e,r){if(r=v.fromString(r,this.network.type).getHash("hex"),!await this.db.has(h.g(r))){t=v.fromString(t,this.network.type);const i=this.db.batch();i.put(h.g(r),t.toRaw()),i.put(h.gs(t.getHash("hex"),Buffer.from(e,"ascii").toString("hex"),r),null),await i.write()}}async unsetGuider(t,e,r){t=v.fromString(t,this.network.type).getHash("hex"),r=v.fromString(r,this.network.type).getHash("hex");const i=this.db.batch();i.del(h.g(r)),i.del(h.gs(t,Buffer.from(e,"ascii").toString("hex"),r)),await i.write()}async getAccountName(t,e){const r=await this.db.get(h.n(t,e));return r?r.toString("ascii"):null}saveAccount(t){var e=t.wid;const r=t.wallet;var i=t.accountIndex,s=t.name;const n=this.batch(r);n.put(h.a(e,i),t.toRaw()),n.put(h.i(e,s),D(i)),n.put(h.n(e,i),Buffer.from(s,"ascii")),r.accountCache.push(i,t)}hasAccount(t,e){return"number"==typeof t&&"number"==typeof e&&this.db.has(h.a(t,e))}async getPathMap(t){var e=this.pathMapCache.get(t);return e||((e=await this.db.get(h.p(t)))?(e=dt.fromRaw(t,e),this.pathMapCache.set(t,e),e):null)}saveKey(t,e){return this.savePath(t,e.toPath())}async savePath(t,e){var r=t.wid,i=e.hash;const s=this.batch(t);await this.addHash(i);let n=await this.getPathMap(i);(n=n||new dt(i)).add(r)&&(this.pathMapCache.set(i,n),t.pathCache.push(i,e),s.put(h.p(i),n.toRaw()),s.put(h.P(r,i),e.toRaw()),s.put(h.r(r,e.account,i),null))}async getPath(t,e){var r=await this.db.get(h.P(t,e));if(!r)return null;const i=ht.fromRaw(r);return i.wid=t,i.hash=e,i}hasPath(t,e){return this.db.has(h.P(t,e))}getHashes(){return this.db.keys({gte:h.p(N.NULL_HASH),lte:h.p(N.HIGH_HASH),parse:h.pp})}getOutpoints(){return this.db.keys({gte:h.o(N.NULL_HASH,0),lte:h.o(N.HIGH_HASH,4294967295),parse:t=>{var[t,e]=h.oo(t);return new y(t,e)}})}getWalletHashes(t){return this.db.keys({gte:h.P(t,N.NULL_HASH),lte:h.P(t,N.HIGH_HASH),parse:h.Pp})}getAccountHashes(t,e){return this.db.keys({gte:h.r(t,e,N.NULL_HASH),lte:h.r(t,e,N.HIGH_HASH),parse:h.rr})}async getWalletPaths(t){const e=[];for(const i of await this.db.range({gte:h.P(t,N.NULL_HASH),lte:h.P(t,N.HIGH_HASH)})){var r=h.Pp(i.key);const s=ht.fromRaw(i.value);s.hash=r,s.wid=t,e.push(s)}return e}async encryptKeys(t,e){var r,i=t.wid,n=await t.getPaths();const a=this.batch(t);for(r of n)if(r.data){s(!r.encrypted);var o=Buffer.from(r.hash,"hex").slice(0,16);(r=r.clone()).data=f.encipher(r.data,e,o),r.encrypted=!0,t.pathCache.push(r.hash,r),a.put(h.P(i,r.hash),r.toRaw())}}async decryptKeys(t,e){var r,i=t.wid,n=await t.getPaths();const a=this.batch(t);for(r of n)if(r.data){s(r.encrypted);var o=Buffer.from(r.hash,"hex").slice(0,16);(r=r.clone()).data=f.decipher(r.data,e,o),r.encrypted=!1,t.pathCache.push(r.hash,r),a.put(h.P(i,r.hash),r.toRaw())}}async resend(){let t={};var e;for(const e of await this.db.keys({gte:h.w(0),lte:h.w(4294967295)})){var r,i=h.ww(e);!i||(r=await this.resendPending(i))&&Array.isArray(r)&&(t[i]=r)}for(e of Object.keys(t)){let r=await this.get(parseInt(e));if(r)for(const i of t[e]){try{await this.send(i)}catch(t){this.logger.warning("wdb resend:",t.message);try{await r.abandon(i.hash("hex"))}catch(t){this.logger.warning("wdb abandon:",t.message)}}await yt.timeout(50)}}}async resendPending(t){const e=await this.get(t);var r=await this.db.keys({gte:u.txdb.prefix(t,u.txdb.p(N.NULL_HASH)),lte:u.txdb.prefix(t,u.txdb.p(N.HIGH_HASH))});if(0!==r.length){this.logger.info("Rebroadcasting %d transactions for %d.",r.length,t);const n=[];for(const a of r){var i=u.txdb.pp(a),s=u.txdb.prefix(t,u.txdb.t(i));if(s=await this.db.get(s)){const r=mt.fromRaw(s);if(!r.tx.isCoinbase())try{let t=await k.FactoryOfContract({tx:r.tx,env:this});"notify"!=t.oper&&(await t.isBlockFinal()==E.Expired?e&&(await this.removeTX(r.tx),await e.remove(i),await t.erase()):n.push(r.tx))}catch(t){this.logger.error("TX(%s) Smart Contract Error: %s",r.tx.txid(),t.message)}}}return await P(n,this)}}getWallets(){return this.db.keys({gte:h.l("\0"),lte:h.l("ÿ"),parse:h.ll})}async getWalletsByTX(t){const e=new Set;if(!t.isCoinbase())for(const i of t.inputs){const t=i.prevout;if(this.testFilter(t.toRaw())){var r=await this.getOutpointMap(t.hash,t.index);if(r)for(const t of r.wids)e.add(t)}}for(const r of t.getOutputHashes("hex"))if(this.testFilter(r)){var i=await this.getPathMap(r);if(i)for(const t of i.wids)e.add(t)}return 0===e.size?null:e}async getState(){var t=await this.db.get(h.R);return t?lt.fromRaw(t):null}async init(){var t=this.options.startHeight;let e;if(this.client){if(null!=t){if(!(e=await this.client.getEntry(t)))throw new Error("WDB: Could not find start block.")}else e=await this.client.getTip();e=ft.fromEntry(e)}else e=ft.fromEntry(this.network.genesis);this.logger.info("Initializing AccountDB chain state (height %d).",e.height),(t=await this.getState())?this.state=t:await this.resetState(e,!1)}async resetState(t,e){const r=this.state.clone(),i=(r.startHeight=t.height,r.startHash=t.hash,r.height=t.height,r.marked=e,this.db.batch()),s=this.db.iterator({gte:h.h(t.height),lte:h.h(4294967295),values:!1});for(;;){var n=await s.next();if(!n)break;try{i.del(n.key)}catch(t){throw await s.end(),t}}i.put(h.h(t.height),t.toHash()),i.put(h.R,r.toRaw()),await i.write(),this.state=r}async syncState(t){const e=this.state.clone(),r=this.db.batch();if(t.height<e.height){let s=e.height;var i=s-t.height;for(let t=0;t<i;t++)r.del(h.h(s--))}else t.height>e.height&&s(t.height===e.height+1,`Bad chain sync tip ${t.height} while state `+e.height);e.height=t.height,r.put(h.h(t.height),t.toHash()),r.put(h.R,e.toRaw()),await r.write(),this.state=e,tt("block/tips",e)}get curHeight(){return this.state.height}get tidCreator(){return u.txdb.tx}get finder(){return this.getTXFromDb.bind(this)}rpcExecute(){return this.rpc.execute.apply(this.rpc,arguments)}async getBlockMap(t){var e=await this.db.get(h.b(t));return e?pt.fromRaw(t,e):null}writeBlockMap(t,e,r){this.batch(t).put(h.b(e),r.toRaw())}unwriteBlockMap(t,e){this.batch(t).del(h.b(e))}async getOutpointMap(t,e){var r=await this.db.get(h.o(t,e));return r?ut.fromRaw(t,e,r):null}writeOutpointMap(t,e,r,i){const s=this.batch(t);this.addOutpoint(e,r),s.put(h.o(e,r),i.toRaw())}unwriteOutpointMap(t,e,r){this.batch(t).del(h.o(e,r))}async writeBalanceLog(t,e){var r=h.log(t.wid,e.aidx,e.height,e.hash);e=Buffer.from(JSON.stringify(e));const i=await this.writeLock.lock();try{this.start(t).put(r,e),await this.commit(t)}finally{i()}}async queryBalanceLog(t,e,r=0){return this.db.values({gte:h.log(t,e,r,N.NULL_HASH),lte:h.log(t,e,this.curHeight,N.HIGH_HASH),parse:t=>JSON.parse(t.toString())})}async getBlock(t){const e=await this.db.get(h.h(t));if(!e)return null;const r=new ft;return r.hash=e.toString("hex"),r.height=t,r}async getTip(){var t=await this.getBlock(this.curHeight);if(t)return t;throw new Error("WDB: Tip not found!")}async rollback(t,e=!0){if(t>this.curHeight)throw new Error("WDB: Cannot rollback to the future.");if(t===this.curHeight)return this.logger.debug("Rolled back to same height (%d).",t),!0;this.logger.info("Rolling back %d AccountDB blocks to height %d.",this.curHeight-t,t);let r=await this.getBlock(t),i=!1;return r?(await this.revert(r.height),await this.syncState(r),e):(r=new ft,t>=this.state.startHeight?(r.height=this.state.startHeight,r.hash=this.state.startHash,i=this.state.marked,this.logger.warning("Rolling back AccountDB to start block (%d).",r.height)):(r.height=0,r.hash=this.network.genesis.hash,i=!1,this.logger.warning("Rolling back AccountDB to genesis block.")),await this.revert(r.height),await this.resetState(r,i),!1)}async revert(t){const e=this.db.iterator({gte:h.b(t+1),lte:h.b(4294967295),reverse:!0,values:!0});let r=0;for(;;){var i=await e.next();if(!i)break;try{var s=h.bb(i.key);var n=pt.fromRaw(s,i.value).toArray();r+=n.length;for(let t=n.length-1;0<=t;t--)await this._unconfirm(n[t])}catch(t){throw await e.end(),t}}this.logger.info("Rolled back %d AccountDB transactions.",r)}async addBlock(t,e){const r=await this.txLock.lock();try{return await this._addBlock(t,e)}finally{r()}}async _addBlock(t,e){var r=ft.fromEntry(t);let i=0;if(r.height<this.curHeight)this.logger.warning("AccountDB is connecting low blocks (%d).",r.height);else{if(r.height===this.curHeight)this.logger.warning("Already saw AccountDB block (%d).",r.height);else if(r.height!==this.curHeight+1)throw new Error(`WDB(addBlock): Bad disconnection (height mismatch, tip ${r.height} while state ${this.curHeight})`);if(await this.syncState(r),!(this.options.checkpoints&&r.height<=this.network.lastCheckpoint)){for(const t of e)await this._insert(t,r)&&i++;0<i&&this.logger.info("Connected AccountDB block %s (tx=%d).",C.revHex(r.hash),i)}}return i}async removeBlock(t,e){const r=await this.txLock.lock();try{return await this._removeBlock(t,e)}finally{r()}}async _removeBlock(t,e){if((t=ft.fromEntry(t)).height>this.curHeight)return this.logger.warning("AccountDB is disconnecting high blocks (%d).",t.height),0;if(t.height!==this.curHeight)throw new Error(`WDB(removeBlock): Bad disconnection (height mismatch, tip ${t.height} / ${C.revHex(t.hash)} while state ${this.curHeight})`);var r=await this.getBlock(t.height-1);if(!r)throw new Error(`WDB(removeBlock): Bad disconnection (no previous block of ${t.height} / ${C.revHex(t.hash)}).`);var i=await this.getBlockMap(t.height);if(i){for(let t=e.length-1;0<=t;t--){var s=e[t];await this._unconfirm(s,i)}this.logger.warning("Disconnected wallet block %s (tx=%d).",C.revHex(t.hash),i.txs.size)}return await this.syncState(r),i?i.txs.size:0}async rescanBlock(t,e){if(this.rescanning){const r=await this.scanLock.lock();try{await this._addBlock(t,e)}catch(t){throw this.emit("error",t),t}finally{r()}}else this.logger.warning("Unsolicited rescan block: %s.",t.height)}async addTX(t,e,r){const i=await this.txLock.lock();try{return await this._insert(t,e,r)}finally{i()}}listNotify(t){return this.NotifyList.deletes([["h","<",this.curHeight-12]]),this.NotifyList.query(t)}listContact(t,e,r){return this.$contacts.query(t,e,r)}async setCp(t){await this.batchPut(u.txdb.cp(t.cid),t.toRaw())}async delCp(t){await this.batchDel(u.txdb.cp(t))}async delVp(t){var e;t.pid&&(e=await this.propList.getVp(t.pid),this.propList.delAccount(e));let r=this.db.batch();r.del(u.txdb.VP(t.pid)),await r.write()}async setVp(t,e){var r;e&&t.current&&([e,r]=await this.getAccountByAddress(t.current.address,e),this.propList.setAccount(t,e,r));let i=this.db.batch();i.put(u.txdb.VP(t.pid),t.toRaw()),await i.write()}async getVp(t){return(t=await this.db.get(u.txdb.VP(t)))?rt.fromRaw(t):null}async loadVpList(){return this.db.values({gte:u.txdb.VP(N.ZERO_CID,"hex"),lte:u.txdb.VP(N.MAX_CID,"hex"),parse:t=>rt.fromRaw(t)})}async saveContact(t){let e=this.db.batch();e.put(u.txdb.CT(t.getAddress()),t.toRaw()),await e.write()}async loadContact(t){var e;for(e of await this.db.values({gte:u.txdb.CT(N.ZERO_HASH160_HEX),lte:u.txdb.CT(N.MAX_HASH160_HEX),parse:t=>R.fromRaw(t,this)}))e.sender&&(e.sender.wallet=await this.get(e.sender.wid)),this.$contacts.set(e.address,e)}async delHtlc(t){if((t=new M(t)).id){this.htlcList.delete(t.id),this.htlcList.delAccount(t);let e=this.db.batch();e.del(u.txdb.VH(t.shash,t.sidx)),await e.write()}}async setSuggest(t){let e=new M(t);this.htlcList.set(e.id,e);var[t,r]=await this.getAccountByAddress(e.aa),[t,r]=(t&&this.htlcList.setAccount(e,t,r),await this.getAccountByAddress(e.ba));t&&this.htlcList.setAccount(e,t,r);let i=this.db.batch();i.put(u.txdb.VH(e.shash,e.sidx),e.toRaw()),await i.write()}async setAssent(t){let e=new M(t);this.htlcList.set(e.id,e);var[t,r]=await this.getAccountByAddress(e.ab),[t,r]=(t&&this.htlcList.setAccount(e,t,r),await this.getAccountByAddress(e.bb));t&&this.htlcList.setAccount(e,t,r);let i=this.db.batch();i.put(u.txdb.VH(e.shash,e.sidx),e.toRaw()),await i.write()}async loadHtlcList(){return this.db.values({gte:u.txdb.VH(N.ZERO_CID,0),lte:u.txdb.VH(N.MAX_CID,4294967295),parse:t=>M.fromRaw(t)})}async delComment(t){if((t=new q(t)).id){this.commentList.delete(t.id),this.commentList.delAccount(t);let e=this.db.batch();e.del(u.txdb.VC(t.shash,t.sidx)),await e.write()}}async setComment(t){let e=new q(t);this.commentList.set(e.id,e);var[t,r]=await this.getAccountByAddress(e.bob);t&&(this.commentList.setAccount(e,t,r),this.emit("comm.comment",e));let i=this.db.batch();i.put(u.txdb.VC(e.shash,e.sidx),e.toRaw()),await i.write()}async loadCommentList(){return this.db.values({gte:u.txdb.VC(N.ZERO_CID,0),lte:u.txdb.VC(N.MAX_CID,4294967295),parse:t=>q.fromRaw(t)})}async setStockRecord(t){let e=this.db.batch();switch(e.put(t.itemNo,t.toRaw()),t.type){case G.RecordType.Offer:break;case G.RecordType.Bid:{let r=this.accountList.getStockAccount(t.cid,t.addr);if(!r)break;r.stock.sum=t.sum,r.stock.price=t.price,r.stock.period=this.curHeight+10*m.BLOCK_DAY,r.seq=t.seq,e.put(r.getItemNo(),r.toRaw());break}case G.RecordType.Auction:{let i=this.accountList.getStockAccount(t.cid,t.addr);i?(r=i.sum+t.sum,i.price=(t.sum*t.price+i.sum*i.price)/r|0,i.sum=r,i.seq=t.seq):((i=new st(t.cid,t.addr,t.sum,t.price,0)).seq=t.seq,this.accountList.setStockAccount(i)),e.put(i.getItemNo(),i.toRaw());let s=this.accountList.getStockAccount(t.cid,t.to);if(!s)break;var r=s.sum-t.sum;s.sum=r,s.stock.sum-=t.sum,e.put(s.getItemNo(),s.toRaw());break}case G.RecordType.Purchase:{let i=this.accountList.getStockAccount(t.cid,t.addr);i?(r=i.sum+t.sum,i.price=(t.sum*t.price+i.sum*i.price)/r,i.sum=r,i.seq=t.seq):((i=new st(t.cid,t.addr,t.sum,t.price,0)).seq=t.seq,this.accountList.setStockAccount(i)),e.put(i.getItemNo(),i.toRaw());break}case G.RecordType.Send:{let i=this.accountList.getStockAccount(t.cid,t.addr);if(i){i.sum-=t.sum,i.seq=t.seq;let s=this.accountList.getStockAccount(t.cid,t.to);s||(s=new st(t.cid,t.to,0,0,0),this.accountList.setStockAccount(s)),r=s.sum+t.sum,s.price=(t.sum*i.price+s.sum*s.price)/r,s.sum=r,e.put(i.getItemNo(),i.toRaw()),e.put(s.getItemNo(),s.toRaw())}break}case G.RecordType.Bonus:case G.RecordType.Ads:}await e.write()}async unsetStockRecord(t){let e=this.db.batch();switch(e.del(t.itemNo),t.type){case G.RecordType.Offer:break;case G.RecordType.Bid:{let r=this.accountList.getStockAccount(t.cid,t.addr);if(!r)break;r.stock.sum=0,r.stock.price=0,r.stock.period=0,r.seq=t.seq-1,e.put(r.getItemNo(),r.toRaw());break}case G.RecordType.Auction:{let i=this.accountList.getStockAccount(t.cid,t.addr);if(!i)break;var r=i.sum-t.sum;i.price=(i.sum*i.price-t.sum*t.price)/r|0,i.sum=r,i.seq=t.seq-1,e.put(i.getItemNo(),i.toRaw());let s=this.accountList.getStockAccount(t.cid,t.to);if(!s)break;r=s.sum+t.sum,s.sum=r,s.stock.sum+=t.sum,e.put(s.getItemNo(),s.toRaw());break}case G.RecordType.Purchase:{let i=this.accountList.getStockAccount(t.cid,t.addr);i&&(r=i.sum-t.sum,i.price=(i.sum*i.price-t.sum*t.price)/r,i.sum=r,i.seq=t.seq-1,e.put(i.getItemNo(),i.toRaw()));break}case G.RecordType.Send:{let i=this.accountList.getStockAccount(t.cid,t.addr);if(i){i.sum+=t.sum,i.seq=t.seq-1,e.put(i.getItemNo(),i.toRaw());let s=this.accountList.getStockAccount(t.cid,t.to);s&&(r=s.sum-t.sum,s.price=(s.sum*s.price-t.sum*i.price)/r|0,s.sum=r,e.put(s.getItemNo(),s.toRaw()))}break}case G.RecordType.Bonus:}await e.write()}async getStockRecordById(t){return(t=await this.db.get(t))?G.fromRaw(t):null}async verifyClsTx(t,e){if(!this.spv){let r=await k.FactoryOfContract({env:this,block:e,tx:t});if(1!=(e=await r.verify()))throw new g(t,S(e),"bad-contract-verify",100)}return!0}async getStockRecord(t,e,r){let i=6,s=N.ZERO_CID_BUF,n=N.MAX_CID_BUF,a=0;return t&&(i=t,e&&(s=e,n=e,a=r||0)),t=new I,(await this.db.values({gte:G.itemNo(i,s,a,N.NULL_HASH,0),lte:G.itemNo(i,n,4294967295,N.HIGH_HASH,4294967295),parse:G.fromRaw})).reduce((t,e)=>(t.set(e.itemNo,e),t),t),t}async getStockRecordByCid(t,e){let r=new I;for(var i of Object.keys(G.RecordType))i=await this.getStockRecord(G.RecordType[i],t,e),r.merge(i);return r}async getStockAccountList(t){var e;return t?(e=st.SN(t,N.NULL_HASH),t=st.SN(t,N.HIGH_HASH),this.db.values({gte:e,lte:t,parse:st.fromRaw})):this.db.values({gte:st.SN(N.ZERO_CID_BUF,N.NULL_HASH),lte:st.SN(N.MAX_CID_BUF,N.HIGH_HASH),parse:st.fromRaw})}async delEr(t){let e=this.db.batch();e.del(u.txdb.ER(t.erid)),e.del(u.txdb.ERR(t.witness,t.erid)),await e.write()}async setEr(t,e){e&&t.source&&(i=v.fromWitnessPubkeyhash(l.hash160(Buffer.from(t.source.pubkey,"hex")),this.network),[i,e]=await this.getAccountByAddress(i,e),t.wid=i,t.account=e);let r=this.db.batch();var i=u.txdb.ERR(t.witness,t.erid);r.put(i,t.toRaw()),r.put(u.txdb.ER(t.erid),i),await r.write()}async getEr(t){return(t=(t=await this.db.get(u.txdb.ER(t)))&&await this.db.get(t))?at.fromRaw(t):null}async byPubkey(t,e,r=!1){let i=new I;var s;t=await this.db.values({gte:u.txdb.ERR(t,N.ZERO_CID),lte:u.txdb.ERR(t,N.MAX_CID),parse:t=>at.fromRaw(t)});let n=[],a=new Map;if(r){for(var o of t)(!a.get(o.source.cluster)||o.startHeight>a.get(o.source.cluster).startHeight)&&a.set(o.source.cluster,await this.caVerifyObj(o));n=a.values()}else n=t;for(s of n)i.set(s.erid,s);return i.query(e)}async caVerifyObj(t){var e={verify:!1};if(!t||t.validHeight<=this.curHeight)return e;var r=await this.erAbList.getErAb(t.erid);return r&&r.abolishHeight<this.curHeight?e:(r=gt.fromPublic(Buffer.from(t.witness,"hex"),this.network.type),t.verify(r)?(t.verify=!0,0<(r=this.cpList.query([["pubKey",t.witness]])).list.length&&(t.cpid=r.list[0].cid),t):e)}async delErAbolish(t){let e=this.db.batch();e.del(u.txdb.ERA(t.erid)),await e.write()}async setErAbolish(t){let e=this.db.batch();e.put(u.txdb.ERA(t.erid),t.toRaw()),await e.write()}async getErAbolish(t){return(t=await this.db.get(u.txdb.ERA(t)))?Y.fromRaw(t):null}loadErAbolishList(){return this.db.values({gte:u.txdb.ERA(N.ZERO_CID),lte:u.txdb.ERA(N.MAX_CID),parse:t=>Y.fromRaw(t)})}async delAudit(t){let e=this.db.batch();e.del(u.txdb.AU(t.erid)),await e.write()}async setAudit(t){let e=this.db.batch();e.put(u.txdb.AU(t.erid),t.toRaw()),await e.write()}async getAudit(t){return(t=await this.db.get(u.txdb.AU(t)))?ct.fromRaw(t):null}async loadAuditList(){return this.db.values({gte:u.txdb.AU(N.NULL_HASH),lte:u.txdb.AU(N.HIGH_HASH),parse:t=>ct.fromRaw(t)})}async delX509Cert(t){let e=this.db.batch();e.del(u.txdb.SX(t.witness,t.certSq,!0)),await e.write()}async setX509Cert(t){let e=this.db.batch();e.put(u.txdb.SX(t.witness,t.certSq,!0),t.toRaw()),await e.write()}loadX509CertList(){return this.db.values({gte:u.txdb.SX(N.ZERO_CID_BUF,N.ZERO_U32_NUM,!0),lte:u.txdb.SX(N.MAX_CID_BUF,N.MAX_U32_NUM,!0),parse:t=>J.fromRaw(t)})}async delX509Abolish(t){let e=this.db.batch();e.del(u.txdb.SX(t.witness,t.secertSqq,!1)),await e.write()}async setX509Abolish(t){let e=this.db.batch();e.put(u.txdb.SX(t.witness,t.certSq,!1),t.toRaw()),await e.write()}loadX509AbolishList(){return this.db.values({gte:u.txdb.SX(N.ZERO_CID_BUF,N.ZERO_U32_NUM,!1),lte:u.txdb.SX(N.MAX_CID_BUF,N.MAX_U32_NUM,!1),parse:t=>Q.fromRaw(t)})}async batchPut(t,e){const r=this.db.batch();r.put(t,e),await r.write()}async batchDel(t){const e=this.db.batch();e.del(t),await e.write()}async _insert(t,e,r){s(!t.mutable,"WDB: Cannot add mutable TX.");let i=await this.getWalletsByTX(t);if(i){this.logger.info("Incoming transaction for %d wallets in AccountDB (%s).",i.size,t.txid()),!e||this.state.marked||(this.logger.info("Marking AccountDB start block at %s (%d).",C.revHex(e.hash),e.height),await this.resetState(e,!0));let n=!1;for(const a of i){const i=await this.get(a);s(i),await i.add(t,e,r)&&(this.logger.info("Added transaction to wallet in AccountDB: %s (%d).",i.id,a),n=!0)}n||(i=null)}try{let r=await k.FactoryOfContract({env:this,block:e,tx:t});e?await r.confirm():await r.insert()}catch(r){e?this.logger.error("TX(%s) Smart Contract Confirm Error: %s",t.txid(),r.message):this.logger.error("TX(%s) Smart Contract Insert Error: %s",t.txid(),r.message)}return i}async _unconfirm(t,e){if(e)try{let r=await k.FactoryOfContract({env:this,block:e,tx:t});await r.unconfirm()}catch(i){this.logger.error("TX(%s) Smart Contract Unconfirm Error: %s",t.txid(),i.message)}let r,i=null;if(r=t.wids?(i=t.wids,t.hash):(i=await this.getWalletsByTX(t),t.hash("hex")),!i)return null;for(const t of i){const e=await this.get(t);s(e),await e.unconfirm(r)}}async resetChain(t){const e=await this.txLock.lock();try{return await this._resetChain(t)}finally{e()}}async _resetChain(t){if(t.height>this.curHeight)throw new Error(`WDB: Bad reset height ${t.height} while curHeight `+this.curHeight);var e;for(e of(await this.rollback(t.height)||await this.scan(),await this.getWallets())){const r=await this.get(e);for(const e of await r.getPending())try{await r.abandon(e.hash)}catch(t){}await r.resetBalance()}}async saveMSTrans(t){const e=await this.writeLock.lock();try{return await this._saveMSTrans(t)}finally{e()}}async _saveMSTrans(t){const e=this.db.batch();e.put(h.ms(v.getHash(t.addr,"hex"),t.txid),Buffer.from(JSON.stringify(t))),await e.write()}async listMSTrans(t){return t=v.getHash(t,"hex"),this.db.values({gte:h.ms(t,N.NULL_HASH),lte:h.ms(t,N.HIGH_HASH),parse:t=>JSON.parse(t.toString())})}async delMSTrans(t,e){const r=await this.writeLock.lock();try{return await this._delMSTrans(t,e)}finally{r()}}async _delMSTrans(t,e){t=v.getHash(t,"hex");const r=this.db.batch();r.del(h.ms(t,e)),await r.write()}}vt.layout=h,t.exports=vt},function(t,e,r){"use strict";
|
|
864
|
+
*/const i=r(8),s=r(0),n=r(73),a=r(122),o=r(161),c=r(617),u=r(96),h=u.walletdb,l=r(6),p=r(162),f=r(127),d=r(171),m=r(7),g=r(38).VerifyError,y=r(46),v=r(12);r(19);const b=r(59),w=r(200),x=r(69),k=r(42),{getVerifyMsg:S,BlockFinalType:E,ContractEnvType:_}=r(5),A=r(163),R=r(619),I=r(29);var j=r(72);const C=r(1),P=r(120).sortWithSeq,O=r(35),T=r(201),F=r(65),B=r(102),N=r(3),D=N.U32,L=r(347),H=r(348),z=r(349),M=z.vpItem,U=r(620),q=U.vpItem,V=r(83),K=r(621),W=V.cpItem,G=V.stockItem,$=r(158),Y=$.ErAbolishItem,X=r(159),J=X.X509Cert,Z=r(160),Q=Z.X509Abolish,tt=r(39).broadcast,et=r(134),rt=et.vpItem,it=r(236),st=it.stockAccount,nt=r(157),at=nt.ErItem,ot=r(324),ct=ot.AuditItem,ut=r(321),ht=r(111),lt=r(622),pt=r(322),ft=r(123),dt=r(623),mt=r(226),gt=r(32),yt=r(36);class vt extends j{constructor(t){super(),this.readyLoad=!1,this.options=new c(t),this.network=this.options.network,this.logger=this.options.logger.context("wallet"),this.workers=this.options.workers,this.keys={hmacSalt:N.DefaultChainCode},t.keys&&t.keys.hmacSalt&&(s(Buffer.isBuffer(t.keys.hmacSalt)),this.keys.hmacSalt=t.keys.hmacSalt),this.client=this.options.client,this.client&&(this.client.wdb=this),this.jsonp=this.options.jsonp,this.jsonp&&(this.jsonp.wdb=this),this.spv=this.options.spv,this.feeRate=this.options.feeRate,this.db=d(this.options),this.rpc=new L(this),this.primary=null,this.state=new lt,this.wallets=new Map,this.depth=0,this.rescanning=!1,this.bound=!1,this.newRecord=!0,this.readLock=new T,this.writeLock=new O,this.txLock=new O,this.scanLock=new O,this.widCache=new F(1e4),this.pathMapCache=new F(1e5),this.filter=new B,this.middleHashMem=new Set,this.middleHashChain=new Set,this.autoTaskMgr=new A(this),this.transactionList=new H(this),this.htlcList=new z(this),this.commentList=new U(this),this.NotifyList=new I,this.propList=new et(this),this.accountList=new it(this),this.$contacts=new I,this.cpList=new V(this),this.cpMemList=new V(this),this.accountCoinList=new K(this),this.auditList=new ot(this),this.erList=new nt(this),this.erAbList=new $(this),this.x509CertList=new X(this),this.x509AbolishList=new Z(this),this.hmacConnection=[],this._init()}async logAudit(t){t.height=this.curHeight,t.time=C.now(),t.erid=l.sha256(C.stringify(t)).toString("hex"),t=new ct(t),await this.auditList.setAudit(t)}async getAccountByAddress(t,e){if(t){let i=null;if(i=e?await this.getWalletsByTX(e):await this.getWallets())for(const e of i){const i=await this.get(e);if(i){var r=await i.getPath(t);if(r)return[i.wid,r.name,i.id]}}}return[0,"",""]}_init(){let t=1e6,e=-1;this.spv&&(t=2e4,e=B.flags.ALL),this.filter=B.fromRate(t,.001,e)}async getCpSnap(){return{}}get mode(){return _.Wallet}async getTXFromAll(t){return this.getTXFromDb(t)}async checkNewRecord(){var t={createIfMissing:this.db.options.createIfMissing,errorIfExists:this.db.options.errorIfExists};this.db.options.createIfMissing=!1,this.db.options.errorIfExists=!0;try{await this.db.open();var e=await this.db.checkVersion(h,6);this.newRecord="new"==e}catch(t){if(-1!=t.message.indexOf("does not exist (create_if_missing is false)"))this.newRecord=!0;else{if(-1==t.message.indexOf("exists (error_if_exists is true)"))throw t;this.newRecord=!1}}try{await this.db.close()}catch(t){}this.db.options.createIfMissing=t.createIfMissing,this.db.options.errorIfExists=t.errorIfExists}async isNewRecord(){return await this.checkNewRecord(),this.newRecord}setmnemonic(t){if(this.options.mnemonic=this.options.mnemonic||{},t.bits)this.options.mnemonic={bits:t.bits};else if(t.entropy)this.options.mnemonic={entropy:Buffer.from(t.entropy,"hex")};else if(t.phrase){var e=this.testmnemonic(t.phrase);if(0!=e.code)throw e.msg;this.options.mnemonic={phrase:t.phrase}}t.passphrase&&(this.options.mnemonic.passphrase=t.passphrase),t.language&&(this.options.mnemonic.language=t.language)}testmnemonic(t){try{return new w(t),{code:0}}catch(t){return{code:-1,msg:t.message}}}async getContracts(t){let e=await this.db.values({gte:u.txdb.tx(N.NULL_HASH),lte:u.txdb.tx(N.HIGH_HASH),parse:t=>C.parseJson(t.toString())});return t?e.filter(e=>e.srcact==t||e.dstact==t):e}isFull(){return this.spv||this.synced||!1}async _open(t){}async handleNotify(t,e=!1){if(!e){let r=t.body.content;if("string"==typeof r)try{r=JSON.parse(t.body.content)}catch(e){return}if("object"==typeof r&&"secret"===r.type){let e={contact:t.body.src,messenger:t.body.dst};r.init&&(e.init=Buffer.from(r.init,"hex")),r.packet&&(e.packet=Buffer.from(r.packet)),await this.handleSecret(e)}}}async handleSecret(t){if(t.contact&&t.messenger&&t.contact!=t.messenger){try{v.fromString(t.contact,this.network.type),v.fromString(t.messenger,this.network.type)}catch(t){return}let e=await this.ensureContact(t);e&&await e.ensureMessenger(t).answer(t)}}async scanContact(t,e=-1){var r=async t=>{var e;t.witness&&"witnesspubkeyhash"==t.getType()&&(e=t.witness.getPubkeyhashInput()[1],t=v.fromWitness(t.witness).toString(),e&&t&&await this.ensureContact({contact:t,publicKey:e}))};if(0<=e&&e<t.inputs.length)await r(t.inputs[e]);else for(var i of t.inputs)await r(i)}async ensureContact(t){if(!t.contact||t.contact==t.messenger)return null;try{v.fromString(t.contact,this.network.type),t.messenger&&v.fromString(t.messenger,this.network.type)}catch(t){return null}t.network=this.network.type,this.$contacts.get(t.contact)||this.$contacts.set(t.contact,new R(t));let e=this.$contacts.get(t.contact);if(t.messenger){let i=e.ensureMessenger(t);if(!i.wallet){var[t,r]=await this.getAccountByAddress(i.address);if(!(t=await this.get(t)))return;i.wallet=t,i.account=r}}return e}getCps(){return this.db.values({gte:u.txdb.cp(N.ZERO_CID,"hex"),lte:u.txdb.cp(N.MAX_CID,"hex"),parse:t=>W.fromRaw(t)})}async _close(){await this.disconnect(),this.http&&this.options.listen&&await this.http.close();for(const t of this.wallets.values())await t.destroy();await this.db.close(),this.options.listen&&await this.logger.close()}async destroy(){await this.db.destroy(),this.widCache.reset(),this.pathMapCache.reset()}async load(){if(this.readyLoad){const t=await this.txLock.lock();try{await this.init(),await this.watch(),await this.sync()}finally{t()}setTimeout(()=>{this.resend()},5e3)}}bind(){!this.client||this.bound||(this.bound=!0,this.client.hook("htlcassent.cancel",t=>{this.setAssent(t),this.emit("htlcassent.cancel",t)}),this.client.hook("htlcassent.deal",t=>{this.setAssent(t),this.emit("htlcassent.deal",t)}),this.client.hook("htlcassent.receive",t=>{this.setAssent(t),this.emit("htlcassent.receive",t)}),this.client.hook("htlcsuggest.cancel",t=>{this.setSuggest(t),this.emit("htlcsuggest.cancel",t)}),this.client.hook("htlcsuggest.deal",t=>{this.setSuggest(t),this.emit("htlcsuggest.deal",t)}),this.client.hook("htlcsuggest.receive",t=>{this.setSuggest(t),this.emit("htlcsuggest.receive",t)}),this.on("mssendpubk/receive",async t=>{let e=await this.get(t.addr);if(!e){e=await this.ensure({id:t.addr,type:"multisig",m:t.m,n:t.n,witness:!0});var[r,i]=await this.getAccountByAddress(t.addr);let s=await this.get(r);s&&await s.send({subtractFee:!1,sort:!1,outputs:[{address:t.contract,value:1e4}],comment:JSON.stringify({oper:"scrun",params:{oper:"pubk",addr:t.addr,puba:e.account.accountKey}})},i)}if(e.account.keys.length<e.account.n-1){var s;for(s of t.data.split(","))try{await e.addSharedKey(s)}catch(s){}if(e.account.keys.length==e.account.n-1){var[r,i]=await this.getAccountByAddress(t.addr);let s=await this.get(r);s&&await s.send({subtractFee:!1,sort:!1,outputs:[{address:t.contract,value:1e4}],comment:JSON.stringify({oper:"scrun",params:{oper:"puba",addr:t.addr,puba:e.account.receive.getAddress().toString()}})},i)}}}),this.on("mssendtx/receive",async t=>{let e=await this.get(t.addr);if(e&&e.account.type==o.types.MULTISIG){const r=b.fromRaw(t.data,"hex");r.view=await e.getCoinView(r),r.isSigned()||(t.txid=r.txid(),await this.saveMSTrans(t))}}),this.client.hook("onConnect",async()=>{await this.load()}),this.client.hook("error",t=>{this.emit("error",t)}),this.client.hook("block.connect",async(t,e)=>{try{await this.addBlock(t,e)}catch(t){this.emit("error",t)}}),this.client.hook("block.disconnect",async(t,e)=>{try{await this.removeBlock(t,e)}catch(t){this.emit("error",t)}}),this.client.hook("chain.full",()=>{this.synced=!0}),this.client.hook("block.rescan",async(t,e)=>{try{await this.rescanBlock(t,e)}catch(t){this.emit("error",t)}}),this.client.hook("tx",async(t,e,r)=>{try{await this.addTX(t,null,r)}catch(t){this.emit("error",t)}}),this.client.hook("entry.remove",async(t,e)=>{try{if(e){var r=t.tx.hash("hex"),i=await this.getWalletsByTX(t.tx);if(i)for(const e of i){const i=await this.get(e);s(i),await i.remove(r),(await k.FactoryOfContract({tx:t.tx,env:this})).erase()}}}catch(e){this.emit("error",e)}}),this.client.hook("chain.reset",async t=>{try{await this.resetChain(t)}catch(t){this.emit("error",t)}}),this.jsonp&&this.jsonp.hook("error",t=>{this.emit("error",t)}))}async disconnect(){this.client&&await this.client._close(),this.jsonp&&await this.jsonp._close()}async flushCP(t,e=!1){this.client&&(t=t||[],e||(t=this.cpList.excludeCids(t),e=e||0<t.length),e&&await this.client.execute("cp.remoteQuery",[[["cid","include",t]]]))}async watch(){let t=this.db.iterator({gte:h.p(N.NULL_HASH),lte:h.p(N.HIGH_HASH)}),e=0,r=0;for(;;){var i=await t.next();if(!i)break;try{var s=h.pp(i.key);this.filter.add(s,"hex")}catch(e){throw await t.end(),e}e++}for(t=this.db.iterator({gte:h.o(N.NULL_HASH,0),lte:h.o(N.HIGH_HASH,4294967295)});;){var n=await t.next();if(!n)break;try{var[a,o]=h.oo(n.key);var c=new y(a,o).toRaw();this.filter.add(c)}catch(e){throw await t.end(),e}r++}this.logger.info("Filter: Added %d hashes to AccountDB filter.",e),this.logger.info("Filter: Added %d outpoints to AccountDB filter.",r),await this.setFilter()}async sync(){if(this.client){let e,r=this.curHeight;for(;0<=r;){var t=await this.getBlock(r);if(!t)break;if(e=await this.client.getEntry(t.hash))break;r--}e||(r=this.state.startHeight,(e=await this.client.getEntry(this.state.startHash))||(r=0)),await this.cpList.loadHistory(),await this.cpMemList.loadHistory(),await this.propList.loadHistory(),await this.htlcList.loadHistory(),await this.commentList.loadHistory(),await this.accountList.loadHistory(),await this.transactionList.loadHistory(),await this.loadContact(),await this.erList.loadHistory(),await this.auditList.loadHistory(),await this.erAbList.loadHistory(),await this.x509CertList.loadHistory(),await this.x509AbolishList.loadHistory(),await this.accountCoinList.loadHistory(),await this.scan(r,!1)}}async scan(t,e=!0){if(this.client&&(null==t&&(t=this.state.startHeight),s(t>>>0===t,"WDB: Must pass in a height."),!await this.rollback(t,e)||0===t)){this.logger.info("AccountDB is scanning %d blocks.",this.curHeight-t+1),e=await this.getTip();try{this.rescanning=!0,await this.client.rescan(e.hash)}finally{this.rescanning=!1}}}async rescan(t){const e=await this.txLock.lock();try{return await this.scan(t,!1)}finally{e()}}async send(t){if(this.client)return this.client.send(t);this.emit("send",t)}async getTX(t){for(const r of this.wallets.values()){var e=await r.getTX(t);if(e)return e.tx}return null}async getTXFromDb(t){for(const r of this.wallets.values()){var e=await r.getTX(t);if(e)return e.tx}return null}async getExtendTX(t){for(const r of this.wallets.values()){var e=await r.getTX(t);if(e)return e}return null}async removeTX(t){this.client?await this.client.removeTX(t):this.emit("remove",t)}async estimateFee(t){return 0<this.feeRate?this.feeRate:!this.client||(t=await this.client.estimateFee(t))<this.network.feeRate?this.network.feeRate:t>this.network.maxFeeRate?this.network.maxFeeRate:t}setFilter(){return this.client?this.client.setFilter(this.filter):(this.emit("filter.set",this.filter),Promise.resolve())}addFilter(t){return this.client?this.client.addFilter(t):(this.emit("filter.add",t),Promise.resolve())}resetFilter(){return this.client?this.client.resetFilter():(this.emit("filter.reset"),Promise.resolve())}backup(t){return this.db.backup(t)}async wipe(){this.logger.warning("Wiping AccountDB TXDB..."),this.logger.warning("I hope you know what you're doing.");const t=this.db.iterator({gte:Buffer.from([0]),lte:Buffer.from([255])}),e=this.db.batch();let r=0;for(;;){var i=await t.next();if(!i)break;try{switch(i.key[0]){case 98:case 99:case 101:case 116:case 111:case 104:case 82:e.del(i.key),r++}}catch(e){throw await t.end(),e}}this.logger.warning("Wiped %d txdb records.",r),await e.write()}async getDepth(){const t=this.db.iterator({gte:h.w(0),lte:h.w(4294967295),reverse:!0,limit:1});var e=await t.next();return e?(await t.end(),h.ww(e.key)+1):1}start(t){return s(!t.current,"WDB: Batch already started."),t.current=this.db.batch(),t.accountCache.start(),t.pathCache.start(),t.current}drop(t){const e=this.batch(t);t.current=null,t.accountCache.drop(),t.pathCache.drop(),e.clear()}clear(t){const e=this.batch(t);t.accountCache.clear(),t.pathCache.clear(),e.clear()}batch(t){return s(t.current,"WDB: Batch does not exist."),t.current}async commit(t){const e=this.batch(t);try{await e.write()}catch(t){throw this.drop(),t}t.current=null,t.accountCache.commit(),t.pathCache.commit()}testFilter(t){return this.filter.test(t,"hex")}addHash(t){return this.filter.add(t,"hex"),this.addFilter(t)}addOutpoint(t,e){const r=new y(t,e);this.filter.add(r.toRaw())}dump(){return this.db.dump()}register(t){s(!this.wallets.has(t.wid)),this.wallets.set(t.wid,t)}unregister(t){s(this.wallets.has(t.wid)),this.wallets.delete(t.wid)}async getWalletID(t){if(!t)return null;if("number"==typeof t)return t;var e=this.widCache.get(t);if(e)return e;const r=await this.db.get(h.l(t));return r?(e=r.readUInt32LE(0,!0),this.widCache.set(t,e),e):null}async get(t){if(!(t=await this.getWalletID(t)))return null;const e=await this.readLock.lock(t);try{return await this._get(t)}finally{e()}}async _get(t){var e=this.wallets.get(t);if(e)return e;if(!(e=await this.db.get(h.w(t))))return null;const r=a.fromRaw(this,e);return await r.open(),this.register(r),r}save(t){var e=t.wid,r=t.id;const i=this.batch(t);this.widCache.set(r,e),i.put(h.w(e),t.toRaw()),i.put(h.l(r),D(e))}async rename(t,e){const r=await this.writeLock.lock();try{return await this._rename(t,e)}finally{r()}}async _rename(t,e){var r=t.id;if(!n.isName(e))throw new Error("WDB: Bad wallet ID.");if(await this.has(e))throw new Error("WDB: ID not available.");this.start(t).del(h.l(r)),t.id=e,this.save(t),await this.commit(t),this.widCache.remove(r);for(const r of t.pathCache.values())r.id=e}async replace(t){const e=await this.writeLock.lock();try{return await this._replace(t)}finally{e()}}async _replace(t){const e=this.start(t);e.del(h.l(t.id)),e.del(h.w(t.wid)),this.save(t),await this.commit(t),this.widCache.remove(t.id),this.wallets.delete(t.wid)}renameAccount(t,e){var r=t.wallet;this.batch(r).del(h.i(t.wid,t.name)),t.name=e,this.saveAccount(t)}async auth(t,e){if("string"==typeof e){if(!C.isHex256(e))throw new Error("WDB Authentication: Invalid Token.");e=Buffer.from(e,"hex")}t=x.getHmac(t.toString(),this.keys.hmacSalt);const r=i.createHmac("sha256",t.random);if(t=Buffer.from(r.update(t.token).digest("hex"),"hex"),!p(e,t))throw new Error("WDB Authentication: CRC Error.")}async create(t){const e=await this.writeLock.lock();t=t||{};try{return await this._create(t)}finally{e()}}async _create(t){if(await this.has(t.id))throw new Error("WDB: Wallet already exists.");"string"==typeof t.mnemonic&&(t.mnemonic={phrase:t.mnemonic}),t.mnemonic=t.mnemonic||{},!t.mnemonic.language&&this.options.mnemonic&&this.options.mnemonic.language&&(t.mnemonic.language=this.options.mnemonic.language);const e=a.fromOptions(this,t);return e.wid=this.depth++,await e.init(t),this.register(e),this.logger.info("Created wallet %s in AccountDB.",e.id),e}async has(t){return null!=await this.getWalletID(t)}async ensure(t){return await this.get(t.id)||this.create(t)}async getAccount(t,e){return(t=await this.db.get(h.a(t,e)))?o.fromRaw(this,t):null}getAccounts(t){return this.db.values({gte:h.n(t,0),lte:h.n(t,4294967295),parse:t=>t.toString("ascii")})}async getAccountIndex(t,e){const r=await this.db.get(h.i(t,e));return r?r.readUInt32LE(0,!0):-1}async getGuider(t){return t=v.fromString(t,this.network.type).getHash("hex"),(t=await this.db.get(h.g(t)))?v.fromRaw(t).toString():null}async setGuider(t,e,r){if(r=v.fromString(r,this.network.type).getHash("hex"),!await this.db.has(h.g(r))){t=v.fromString(t,this.network.type);const i=this.db.batch();i.put(h.g(r),t.toRaw()),i.put(h.gs(t.getHash("hex"),Buffer.from(e,"ascii").toString("hex"),r),null),await i.write()}}async unsetGuider(t,e,r){t=v.fromString(t,this.network.type).getHash("hex"),r=v.fromString(r,this.network.type).getHash("hex");const i=this.db.batch();i.del(h.g(r)),i.del(h.gs(t,Buffer.from(e,"ascii").toString("hex"),r)),await i.write()}async getAccountName(t,e){const r=await this.db.get(h.n(t,e));return r?r.toString("ascii"):null}saveAccount(t){var e=t.wid;const r=t.wallet;var i=t.accountIndex,s=t.name;const n=this.batch(r);n.put(h.a(e,i),t.toRaw()),n.put(h.i(e,s),D(i)),n.put(h.n(e,i),Buffer.from(s,"ascii")),r.accountCache.push(i,t)}hasAccount(t,e){return"number"==typeof t&&"number"==typeof e&&this.db.has(h.a(t,e))}async getPathMap(t){var e=this.pathMapCache.get(t);return e||((e=await this.db.get(h.p(t)))?(e=dt.fromRaw(t,e),this.pathMapCache.set(t,e),e):null)}saveKey(t,e){return this.savePath(t,e.toPath())}async savePath(t,e){var r=t.wid,i=e.hash;const s=this.batch(t);await this.addHash(i);let n=await this.getPathMap(i);(n=n||new dt(i)).add(r)&&(this.pathMapCache.set(i,n),t.pathCache.push(i,e),s.put(h.p(i),n.toRaw()),s.put(h.P(r,i),e.toRaw()),s.put(h.r(r,e.account,i),null))}async getPath(t,e){var r=await this.db.get(h.P(t,e));if(!r)return null;const i=ht.fromRaw(r);return i.wid=t,i.hash=e,i}hasPath(t,e){return this.db.has(h.P(t,e))}getHashes(){return this.db.keys({gte:h.p(N.NULL_HASH),lte:h.p(N.HIGH_HASH),parse:h.pp})}getOutpoints(){return this.db.keys({gte:h.o(N.NULL_HASH,0),lte:h.o(N.HIGH_HASH,4294967295),parse:t=>{var[t,e]=h.oo(t);return new y(t,e)}})}getWalletHashes(t){return this.db.keys({gte:h.P(t,N.NULL_HASH),lte:h.P(t,N.HIGH_HASH),parse:h.Pp})}getAccountHashes(t,e){return this.db.keys({gte:h.r(t,e,N.NULL_HASH),lte:h.r(t,e,N.HIGH_HASH),parse:h.rr})}async getWalletPaths(t){const e=[];for(const i of await this.db.range({gte:h.P(t,N.NULL_HASH),lte:h.P(t,N.HIGH_HASH)})){var r=h.Pp(i.key);const s=ht.fromRaw(i.value);s.hash=r,s.wid=t,e.push(s)}return e}async encryptKeys(t,e){var r,i=t.wid,n=await t.getPaths();const a=this.batch(t);for(r of n)if(r.data){s(!r.encrypted);var o=Buffer.from(r.hash,"hex").slice(0,16);(r=r.clone()).data=f.encipher(r.data,e,o),r.encrypted=!0,t.pathCache.push(r.hash,r),a.put(h.P(i,r.hash),r.toRaw())}}async decryptKeys(t,e){var r,i=t.wid,n=await t.getPaths();const a=this.batch(t);for(r of n)if(r.data){s(r.encrypted);var o=Buffer.from(r.hash,"hex").slice(0,16);(r=r.clone()).data=f.decipher(r.data,e,o),r.encrypted=!1,t.pathCache.push(r.hash,r),a.put(h.P(i,r.hash),r.toRaw())}}async resend(){let t={};var e;for(const e of await this.db.keys({gte:h.w(0),lte:h.w(4294967295)})){var r,i=h.ww(e);!i||(r=await this.resendPending(i))&&Array.isArray(r)&&(t[i]=r)}for(e of Object.keys(t)){let r=await this.get(parseInt(e));if(r)for(const i of t[e]){try{await this.send(i)}catch(t){this.logger.warning("wdb resend:",t.message);try{await r.abandon(i.hash("hex"))}catch(t){this.logger.warning("wdb abandon:",t.message)}}await yt.timeout(50)}}}async resendPending(t){const e=await this.get(t);var r=await this.db.keys({gte:u.txdb.prefix(t,u.txdb.p(N.NULL_HASH)),lte:u.txdb.prefix(t,u.txdb.p(N.HIGH_HASH))});if(0!==r.length){this.logger.info("Rebroadcasting %d transactions for %d.",r.length,t);const n=[];for(const a of r){var i=u.txdb.pp(a),s=u.txdb.prefix(t,u.txdb.t(i));if(s=await this.db.get(s)){const r=mt.fromRaw(s);if(!r.tx.isCoinbase())try{let t=await k.FactoryOfContract({tx:r.tx,env:this});"notify"!=t.oper&&(await t.isBlockFinal()==E.Expired?e&&(await this.removeTX(r.tx),await e.remove(i),await t.erase()):n.push(r.tx))}catch(t){this.logger.error("TX(%s) Smart Contract Error: %s",r.tx.txid(),t.message)}}}return await P(n,this)}}getWallets(){return this.db.keys({gte:h.l("\0"),lte:h.l("ÿ"),parse:h.ll})}async getWalletsByTX(t){const e=new Set;if(!t.isCoinbase())for(const i of t.inputs){const t=i.prevout;if(this.testFilter(t.toRaw())){var r=await this.getOutpointMap(t.hash,t.index);if(r)for(const t of r.wids)e.add(t)}}for(const r of t.getOutputHashes("hex"))if(this.testFilter(r)){var i=await this.getPathMap(r);if(i)for(const t of i.wids)e.add(t)}return 0===e.size?null:e}async getState(){var t=await this.db.get(h.R);return t?lt.fromRaw(t):null}async init(){var t=this.options.startHeight;let e;if(this.client){if(null!=t){if(!(e=await this.client.getEntry(t)))throw new Error("WDB: Could not find start block.")}else e=await this.client.getTip();e=ft.fromEntry(e)}else e=ft.fromEntry(this.network.genesis);this.logger.info("Initializing AccountDB chain state (height %d).",e.height),(t=await this.getState())?this.state=t:await this.resetState(e,!1)}async resetState(t,e){const r=this.state.clone(),i=(r.startHeight=t.height,r.startHash=t.hash,r.height=t.height,r.marked=e,this.db.batch()),s=this.db.iterator({gte:h.h(t.height),lte:h.h(4294967295),values:!1});for(;;){var n=await s.next();if(!n)break;try{i.del(n.key)}catch(t){throw await s.end(),t}}i.put(h.h(t.height),t.toHash()),i.put(h.R,r.toRaw()),await i.write(),this.state=r}async syncState(t){const e=this.state.clone(),r=this.db.batch();if(t.height<e.height){let s=e.height;var i=s-t.height;for(let t=0;t<i;t++)r.del(h.h(s--))}else t.height>e.height&&s(t.height===e.height+1,`Bad chain sync tip ${t.height} while state `+e.height);e.height=t.height,r.put(h.h(t.height),t.toHash()),r.put(h.R,e.toRaw()),await r.write(),this.state=e,tt("block/tips",e)}get curHeight(){return this.state.height}get tidCreator(){return u.txdb.tx}get finder(){return this.getTXFromDb.bind(this)}rpcExecute(){return this.rpc.execute.apply(this.rpc,arguments)}async getBlockMap(t){var e=await this.db.get(h.b(t));return e?pt.fromRaw(t,e):null}writeBlockMap(t,e,r){this.batch(t).put(h.b(e),r.toRaw())}unwriteBlockMap(t,e){this.batch(t).del(h.b(e))}async getOutpointMap(t,e){var r=await this.db.get(h.o(t,e));return r?ut.fromRaw(t,e,r):null}writeOutpointMap(t,e,r,i){const s=this.batch(t);this.addOutpoint(e,r),s.put(h.o(e,r),i.toRaw())}unwriteOutpointMap(t,e,r){this.batch(t).del(h.o(e,r))}async writeBalanceLog(t,e){var r=h.log(t.wid,e.aidx,e.height,e.hash);e=Buffer.from(JSON.stringify(e));const i=await this.writeLock.lock();try{this.start(t).put(r,e),await this.commit(t)}finally{i()}}async queryBalanceLog(t,e,r=0){return this.db.values({gte:h.log(t,e,r,N.NULL_HASH),lte:h.log(t,e,this.curHeight,N.HIGH_HASH),parse:t=>JSON.parse(t.toString())})}async getBlock(t){const e=await this.db.get(h.h(t));if(!e)return null;const r=new ft;return r.hash=e.toString("hex"),r.height=t,r}async getTip(){var t=await this.getBlock(this.curHeight);if(t)return t;throw new Error("WDB: Tip not found!")}async rollback(t,e=!0){if(t>this.curHeight)throw new Error("WDB: Cannot rollback to the future.");if(t===this.curHeight)return this.logger.debug("Rolled back to same height (%d).",t),!0;this.logger.info("Rolling back %d AccountDB blocks to height %d.",this.curHeight-t,t);let r=await this.getBlock(t),i=!1;return r?(await this.revert(r.height),await this.syncState(r),e):(r=new ft,t>=this.state.startHeight?(r.height=this.state.startHeight,r.hash=this.state.startHash,i=this.state.marked,this.logger.warning("Rolling back AccountDB to start block (%d).",r.height)):(r.height=0,r.hash=this.network.genesis.hash,i=!1,this.logger.warning("Rolling back AccountDB to genesis block.")),await this.revert(r.height),await this.resetState(r,i),!1)}async revert(t){const e=this.db.iterator({gte:h.b(t+1),lte:h.b(4294967295),reverse:!0,values:!0});let r=0;for(;;){var i=await e.next();if(!i)break;try{var s=h.bb(i.key);var n=pt.fromRaw(s,i.value).toArray();r+=n.length;for(let t=n.length-1;0<=t;t--)await this._unconfirm(n[t])}catch(t){throw await e.end(),t}}this.logger.info("Rolled back %d AccountDB transactions.",r)}async addBlock(t,e){const r=await this.txLock.lock();try{return await this._addBlock(t,e)}finally{r()}}async _addBlock(t,e){var r=ft.fromEntry(t);let i=0;if(r.height<this.curHeight)this.logger.warning("AccountDB is connecting low blocks (%d).",r.height);else{if(r.height===this.curHeight)this.logger.warning("Already saw AccountDB block (%d).",r.height);else if(r.height!==this.curHeight+1)throw new Error(`WDB(addBlock): Bad disconnection (height mismatch, tip ${r.height} while state ${this.curHeight})`);if(await this.syncState(r),!(this.options.checkpoints&&r.height<=this.network.lastCheckpoint)){for(const t of e)await this._insert(t,r)&&i++;0<i&&this.logger.info("Connected AccountDB block %s (tx=%d).",C.revHex(r.hash),i)}}return i}async removeBlock(t,e){const r=await this.txLock.lock();try{return await this._removeBlock(t,e)}finally{r()}}async _removeBlock(t,e){if((t=ft.fromEntry(t)).height>this.curHeight)return this.logger.warning("AccountDB is disconnecting high blocks (%d).",t.height),0;if(t.height!==this.curHeight)throw new Error(`WDB(removeBlock): Bad disconnection (height mismatch, tip ${t.height} / ${C.revHex(t.hash)} while state ${this.curHeight})`);var r=await this.getBlock(t.height-1);if(!r)throw new Error(`WDB(removeBlock): Bad disconnection (no previous block of ${t.height} / ${C.revHex(t.hash)}).`);var i=await this.getBlockMap(t.height);if(i){for(let t=e.length-1;0<=t;t--){var s=e[t];await this._unconfirm(s,i)}this.logger.warning("Disconnected wallet block %s (tx=%d).",C.revHex(t.hash),i.txs.size)}return await this.syncState(r),i?i.txs.size:0}async rescanBlock(t,e){if(this.rescanning){const r=await this.scanLock.lock();try{await this._addBlock(t,e)}catch(t){throw this.emit("error",t),t}finally{r()}}else this.logger.warning("Unsolicited rescan block: %s.",t.height)}async addTX(t,e,r){const i=await this.txLock.lock();try{return await this._insert(t,e,r)}finally{i()}}listNotify(t){return this.NotifyList.deletes([["h","<",this.curHeight-12]]),this.NotifyList.query(t)}listContact(t,e,r){return this.$contacts.query(t,e,r)}async setCp(t){await this.batchPut(u.txdb.cp(t.cid),t.toRaw())}async delCp(t){await this.batchDel(u.txdb.cp(t))}async delVp(t){var e;t.pid&&(e=await this.propList.getVp(t.pid),this.propList.delAccount(e));let r=this.db.batch();r.del(u.txdb.VP(t.pid)),await r.write()}async setVp(t,e){var r;e&&t.current&&([e,r]=await this.getAccountByAddress(t.current.address,e),this.propList.setAccount(t,e,r));let i=this.db.batch();i.put(u.txdb.VP(t.pid),t.toRaw()),await i.write()}async getVp(t){return(t=await this.db.get(u.txdb.VP(t)))?rt.fromRaw(t):null}async getVpByAddress(t){return{list:[],count:0}}async getVpByOid(t){return{list:[],count:0}}async loadVpList(){return this.db.values({gte:u.txdb.VP(N.ZERO_CID,"hex"),lte:u.txdb.VP(N.MAX_CID,"hex"),parse:t=>rt.fromRaw(t)})}async saveContact(t){let e=this.db.batch();e.put(u.txdb.CT(t.getAddress()),t.toRaw()),await e.write()}async loadContact(t){var e;for(e of await this.db.values({gte:u.txdb.CT(N.ZERO_HASH160_HEX),lte:u.txdb.CT(N.MAX_HASH160_HEX),parse:t=>R.fromRaw(t,this)}))e.sender&&(e.sender.wallet=await this.get(e.sender.wid)),this.$contacts.set(e.address,e)}async delHtlc(t){if((t=new M(t)).id){this.htlcList.delete(t.id),this.htlcList.delAccount(t);let e=this.db.batch();e.del(u.txdb.VH(t.shash,t.sidx)),await e.write()}}async setSuggest(t){let e=new M(t);this.htlcList.set(e.id,e);var[t,r]=await this.getAccountByAddress(e.aa),[t,r]=(t&&this.htlcList.setAccount(e,t,r),await this.getAccountByAddress(e.ba));t&&this.htlcList.setAccount(e,t,r);let i=this.db.batch();i.put(u.txdb.VH(e.shash,e.sidx),e.toRaw()),await i.write()}async setAssent(t){let e=new M(t);this.htlcList.set(e.id,e);var[t,r]=await this.getAccountByAddress(e.ab),[t,r]=(t&&this.htlcList.setAccount(e,t,r),await this.getAccountByAddress(e.bb));t&&this.htlcList.setAccount(e,t,r);let i=this.db.batch();i.put(u.txdb.VH(e.shash,e.sidx),e.toRaw()),await i.write()}async loadHtlcList(){return this.db.values({gte:u.txdb.VH(N.ZERO_CID,0),lte:u.txdb.VH(N.MAX_CID,4294967295),parse:t=>M.fromRaw(t)})}async delComment(t){if((t=new q(t)).id){this.commentList.delete(t.id),this.commentList.delAccount(t);let e=this.db.batch();e.del(u.txdb.VC(t.shash,t.sidx)),await e.write()}}async setComment(t){let e=new q(t);this.commentList.set(e.id,e);var[t,r]=await this.getAccountByAddress(e.bob);t&&(this.commentList.setAccount(e,t,r),this.emit("comm.comment",e));let i=this.db.batch();i.put(u.txdb.VC(e.shash,e.sidx),e.toRaw()),await i.write()}async loadCommentList(){return this.db.values({gte:u.txdb.VC(N.ZERO_CID,0),lte:u.txdb.VC(N.MAX_CID,4294967295),parse:t=>q.fromRaw(t)})}async setStockRecord(t){let e=this.db.batch();switch(e.put(t.itemNo,t.toRaw()),t.type){case G.RecordType.Offer:break;case G.RecordType.Bid:{let r=this.accountList.getStockAccount(t.cid,t.addr);if(!r)break;r.stock.sum=t.sum,r.stock.price=t.price,r.stock.period=this.curHeight+10*m.BLOCK_DAY,r.seq=t.seq,e.put(r.getItemNo(),r.toRaw());break}case G.RecordType.Auction:{let i=this.accountList.getStockAccount(t.cid,t.addr);i?(r=i.sum+t.sum,i.price=(t.sum*t.price+i.sum*i.price)/r|0,i.sum=r,i.seq=t.seq):((i=new st(t.cid,t.addr,t.sum,t.price,0)).seq=t.seq,this.accountList.setStockAccount(i)),e.put(i.getItemNo(),i.toRaw());let s=this.accountList.getStockAccount(t.cid,t.to);if(!s)break;var r=s.sum-t.sum;s.sum=r,s.stock.sum-=t.sum,e.put(s.getItemNo(),s.toRaw());break}case G.RecordType.Purchase:{let i=this.accountList.getStockAccount(t.cid,t.addr);i?(r=i.sum+t.sum,i.price=(t.sum*t.price+i.sum*i.price)/r,i.sum=r,i.seq=t.seq):((i=new st(t.cid,t.addr,t.sum,t.price,0)).seq=t.seq,this.accountList.setStockAccount(i)),e.put(i.getItemNo(),i.toRaw());break}case G.RecordType.Send:{let i=this.accountList.getStockAccount(t.cid,t.addr);if(i){i.sum-=t.sum,i.seq=t.seq;let s=this.accountList.getStockAccount(t.cid,t.to);s||(s=new st(t.cid,t.to,0,0,0),this.accountList.setStockAccount(s)),r=s.sum+t.sum,s.price=(t.sum*i.price+s.sum*s.price)/r,s.sum=r,e.put(i.getItemNo(),i.toRaw()),e.put(s.getItemNo(),s.toRaw())}break}case G.RecordType.Bonus:case G.RecordType.Ads:}await e.write()}async unsetStockRecord(t){let e=this.db.batch();switch(e.del(t.itemNo),t.type){case G.RecordType.Offer:break;case G.RecordType.Bid:{let r=this.accountList.getStockAccount(t.cid,t.addr);if(!r)break;r.stock.sum=0,r.stock.price=0,r.stock.period=0,r.seq=t.seq-1,e.put(r.getItemNo(),r.toRaw());break}case G.RecordType.Auction:{let i=this.accountList.getStockAccount(t.cid,t.addr);if(!i)break;var r=i.sum-t.sum;i.price=(i.sum*i.price-t.sum*t.price)/r|0,i.sum=r,i.seq=t.seq-1,e.put(i.getItemNo(),i.toRaw());let s=this.accountList.getStockAccount(t.cid,t.to);if(!s)break;r=s.sum+t.sum,s.sum=r,s.stock.sum+=t.sum,e.put(s.getItemNo(),s.toRaw());break}case G.RecordType.Purchase:{let i=this.accountList.getStockAccount(t.cid,t.addr);i&&(r=i.sum-t.sum,i.price=(i.sum*i.price-t.sum*t.price)/r,i.sum=r,i.seq=t.seq-1,e.put(i.getItemNo(),i.toRaw()));break}case G.RecordType.Send:{let i=this.accountList.getStockAccount(t.cid,t.addr);if(i){i.sum+=t.sum,i.seq=t.seq-1,e.put(i.getItemNo(),i.toRaw());let s=this.accountList.getStockAccount(t.cid,t.to);s&&(r=s.sum-t.sum,s.price=(s.sum*s.price-t.sum*i.price)/r|0,s.sum=r,e.put(s.getItemNo(),s.toRaw()))}break}case G.RecordType.Bonus:}await e.write()}async getStockRecordById(t){return(t=await this.db.get(t))?G.fromRaw(t):null}async verifyClsTx(t,e){if(!this.spv){let r=await k.FactoryOfContract({env:this,block:e,tx:t});if(1!=(e=await r.verify()))throw new g(t,S(e),"bad-contract-verify",100)}return!0}async getStockRecord(t,e,r){let i=6,s=N.ZERO_CID_BUF,n=N.MAX_CID_BUF,a=0;return t&&(i=t,e&&(s=e,n=e,a=r||0)),t=new I,(await this.db.values({gte:G.itemNo(i,s,a,N.NULL_HASH,0),lte:G.itemNo(i,n,4294967295,N.HIGH_HASH,4294967295),parse:G.fromRaw})).reduce((t,e)=>(t.set(e.itemNo,e),t),t),t}async getStockRecordByCid(t,e){let r=new I;for(var i of Object.keys(G.RecordType))i=await this.getStockRecord(G.RecordType[i],t,e),r.merge(i);return r}async getStockAccountList(t){var e;return t?(e=st.SN(t,N.NULL_HASH),t=st.SN(t,N.HIGH_HASH),this.db.values({gte:e,lte:t,parse:st.fromRaw})):this.db.values({gte:st.SN(N.ZERO_CID_BUF,N.NULL_HASH),lte:st.SN(N.MAX_CID_BUF,N.HIGH_HASH),parse:st.fromRaw})}async delEr(t){let e=this.db.batch();e.del(u.txdb.ER(t.erid)),e.del(u.txdb.ERR(t.witness,t.erid)),await e.write()}async setEr(t,e){e&&t.source&&(i=v.fromWitnessPubkeyhash(l.hash160(Buffer.from(t.source.pubkey,"hex")),this.network),[i,e]=await this.getAccountByAddress(i,e),t.wid=i,t.account=e);let r=this.db.batch();var i=u.txdb.ERR(t.witness,t.erid);r.put(i,t.toRaw()),r.put(u.txdb.ER(t.erid),i),await r.write()}async getEr(t){return(t=(t=await this.db.get(u.txdb.ER(t)))&&await this.db.get(t))?at.fromRaw(t):null}async byPubkey(t,e,r=!1){let i=new I;var s;t=await this.db.values({gte:u.txdb.ERR(t,N.ZERO_CID),lte:u.txdb.ERR(t,N.MAX_CID),parse:t=>at.fromRaw(t)});let n=[],a=new Map;if(r){for(var o of t)(!a.get(o.source.cluster)||o.startHeight>a.get(o.source.cluster).startHeight)&&a.set(o.source.cluster,await this.caVerifyObj(o));n=a.values()}else n=t;for(s of n)i.set(s.erid,s);return i.query(e)}async caVerifyObj(t){var e={verify:!1};if(!t||t.validHeight<=this.curHeight)return e;var r=await this.erAbList.getErAb(t.erid);return r&&r.abolishHeight<this.curHeight?e:(r=gt.fromPublic(Buffer.from(t.witness,"hex"),this.network.type),t.verify(r)?(t.verify=!0,0<(r=this.cpList.query([["pubKey",t.witness]])).list.length&&(t.cpid=r.list[0].cid),t):e)}async delErAbolish(t){let e=this.db.batch();e.del(u.txdb.ERA(t.erid)),await e.write()}async setErAbolish(t){let e=this.db.batch();e.put(u.txdb.ERA(t.erid),t.toRaw()),await e.write()}async getErAbolish(t){return(t=await this.db.get(u.txdb.ERA(t)))?Y.fromRaw(t):null}loadErAbolishList(){return this.db.values({gte:u.txdb.ERA(N.ZERO_CID),lte:u.txdb.ERA(N.MAX_CID),parse:t=>Y.fromRaw(t)})}async delAudit(t){let e=this.db.batch();e.del(u.txdb.AU(t.erid)),await e.write()}async setAudit(t){let e=this.db.batch();e.put(u.txdb.AU(t.erid),t.toRaw()),await e.write()}async getAudit(t){return(t=await this.db.get(u.txdb.AU(t)))?ct.fromRaw(t):null}async loadAuditList(){return this.db.values({gte:u.txdb.AU(N.NULL_HASH),lte:u.txdb.AU(N.HIGH_HASH),parse:t=>ct.fromRaw(t)})}async delX509Cert(t){let e=this.db.batch();e.del(u.txdb.SX(t.witness,t.certSq,!0)),await e.write()}async setX509Cert(t){let e=this.db.batch();e.put(u.txdb.SX(t.witness,t.certSq,!0),t.toRaw()),await e.write()}loadX509CertList(){return this.db.values({gte:u.txdb.SX(N.ZERO_CID_BUF,N.ZERO_U32_NUM,!0),lte:u.txdb.SX(N.MAX_CID_BUF,N.MAX_U32_NUM,!0),parse:t=>J.fromRaw(t)})}async delX509Abolish(t){let e=this.db.batch();e.del(u.txdb.SX(t.witness,t.secertSqq,!1)),await e.write()}async setX509Abolish(t){let e=this.db.batch();e.put(u.txdb.SX(t.witness,t.certSq,!1),t.toRaw()),await e.write()}loadX509AbolishList(){return this.db.values({gte:u.txdb.SX(N.ZERO_CID_BUF,N.ZERO_U32_NUM,!1),lte:u.txdb.SX(N.MAX_CID_BUF,N.MAX_U32_NUM,!1),parse:t=>Q.fromRaw(t)})}async batchPut(t,e){const r=this.db.batch();r.put(t,e),await r.write()}async batchDel(t){const e=this.db.batch();e.del(t),await e.write()}async _insert(t,e,r){s(!t.mutable,"WDB: Cannot add mutable TX.");let i=await this.getWalletsByTX(t);if(i){this.logger.info("Incoming transaction for %d wallets in AccountDB (%s).",i.size,t.txid()),!e||this.state.marked||(this.logger.info("Marking AccountDB start block at %s (%d).",C.revHex(e.hash),e.height),await this.resetState(e,!0));let n=!1;for(const a of i){const i=await this.get(a);s(i),await i.add(t,e,r)&&(this.logger.info("Added transaction to wallet in AccountDB: %s (%d).",i.id,a),n=!0)}n||(i=null)}try{let r=await k.FactoryOfContract({env:this,block:e,tx:t});e?await r.confirm():await r.insert()}catch(r){e?this.logger.error("TX(%s) Smart Contract Confirm Error: %s",t.txid(),r.message):this.logger.error("TX(%s) Smart Contract Insert Error: %s",t.txid(),r.message)}return i}async _unconfirm(t,e){if(e)try{let r=await k.FactoryOfContract({env:this,block:e,tx:t});await r.unconfirm()}catch(i){this.logger.error("TX(%s) Smart Contract Unconfirm Error: %s",t.txid(),i.message)}let r,i=null;if(r=t.wids?(i=t.wids,t.hash):(i=await this.getWalletsByTX(t),t.hash("hex")),!i)return null;for(const t of i){const e=await this.get(t);s(e),await e.unconfirm(r)}}async resetChain(t){const e=await this.txLock.lock();try{return await this._resetChain(t)}finally{e()}}async _resetChain(t){if(t.height>this.curHeight)throw new Error(`WDB: Bad reset height ${t.height} while curHeight `+this.curHeight);var e;for(e of(await this.rollback(t.height)||await this.scan(),await this.getWallets())){const r=await this.get(e);for(const e of await r.getPending())try{await r.abandon(e.hash)}catch(t){}await r.resetBalance()}}async saveMSTrans(t){const e=await this.writeLock.lock();try{return await this._saveMSTrans(t)}finally{e()}}async _saveMSTrans(t){const e=this.db.batch();e.put(h.ms(v.getHash(t.addr,"hex"),t.txid),Buffer.from(JSON.stringify(t))),await e.write()}async listMSTrans(t){return t=v.getHash(t,"hex"),this.db.values({gte:h.ms(t,N.NULL_HASH),lte:h.ms(t,N.HIGH_HASH),parse:t=>JSON.parse(t.toString())})}async delMSTrans(t,e){const r=await this.writeLock.lock();try{return await this._delMSTrans(t,e)}finally{r()}}async _delMSTrans(t,e){t=v.getHash(t,"hex");const r=this.db.batch();r.del(h.ms(t,e)),await r.write()}}vt.layout=h,t.exports=vt},function(t,e,r){"use strict";
|
|
865
865
|
/*!
|
|
866
866
|
* txdb.js - persistent transaction pool
|
|
867
867
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
868
|
-
*/const i=r(1),s=r(65),n=r(0),a=r(34),o=r(60),c=r(53),u=r(46),h=r(321),l=r(96).txdb,p=r(3),f=r(27),d=r(17),m=r(322),g=r(226),y=r(323),v=r(614),b=r(615);r(122),r(123);const w=r(616);r(19);const x=r(42),k=r(119),S=r(22).nestingCodes;class E{constructor(t){this.wallet=t,this.walletdb=t.db,this.logger=this.walletdb.logger,this.network=this.walletdb.network,this.options=this.walletdb.options,this.coinCache=new s(this.options.coinCache),this.conserved=new Set,this.lockedCoins=new Map,this.state=null,this.pending=null,this.events=[]}async open(){let t=null;try{t=await this.getState()}catch(e){this.logger.info("TXDB State Format Error."),t=null}t?(this.state=t,this.logger.info("TXDB loaded for %s.",this.wallet.id)):(this.state=new v(this.wallet.wid,this.wallet.id),this.logger.info("TXDB created for %s.",this.wallet.id)),this.logger.info("TXDB State: tx=%d coin=%s.",this.state.tx,this.state.coin),this.logger.info("Balance: unconfirmed=%s confirmed=%s.",a.btc(this.state.unconfirmed),a.btc(this.state.confirmed)),this.pending=this.state.clone(),await this.loadLockedCoins(),this.state=this.pending}start(){return this.pending=this.state.clone(),this.coinCache.start(),this.walletdb.accountCoinList.start(),this.wallet.start()}drop(){return this.pending=null,this.events.length=0,this.coinCache.drop(),this.walletdb.accountCoinList.drop(),this.wallet.drop()}clear(){return this.pending=this.state.clone(),this.events.length=0,this.coinCache.clear(),this.walletdb.accountCoinList.clear(),this.wallet.clear()}async commit(){try{await this.wallet.commit()}catch(t){throw this.pending=null,this.events.length=0,this.coinCache.drop(),this.walletdb.accountCoinList.drop(),t}if(this.pending.committed)for(var[t,e,r]of(this.state=this.pending,this.events))this.walletdb.emit(t,this.wallet.id,e,r),"tx"==t&&this.walletdb.emit("tx.received."+e.rhash(),this.wallet.id,e,r),this.wallet.emit(t,e,r);this.pending=null,this.events.length=0,this.coinCache.commit(),this.walletdb.accountCoinList.commit()}emit(t,e,r){this.events.push([t,e,r])}prefix(t){return n(this.wallet.wid),l.prefix(this.wallet.wid,t)}put(t,e){n(this.wallet.current),this.wallet.current.put(this.prefix(t),e)}del(t){n(this.wallet.current),this.wallet.current.del(this.prefix(t))}get(t){return this.walletdb.db.get(this.prefix(t))}has(t){return this.walletdb.db.has(this.prefix(t))}range(t){return t.gte&&(t.gte=this.prefix(t.gte)),t.lte&&(t.lte=this.prefix(t.lte)),this.walletdb.db.range(t)}keys(t){return t.gte&&(t.gte=this.prefix(t.gte)),t.lte&&(t.lte=this.prefix(t.lte)),this.walletdb.db.keys(t)}values(t){return t.gte&&(t.gte=this.prefix(t.gte)),t.lte&&(t.lte=this.prefix(t.lte)),this.walletdb.db.values(t)}async getPath(t){return(t=t.getAddress())?this.wallet.getPath(t):null}async hasPath(t){return!!(t=t.getAddress())&&this.wallet.hasPath(t)}async saveCredit(t,e){const r=t.coin;var i=r.toKey(),s=t.toRaw();let n=await this.walletdb.getOutpointMap(r.hash,r.index),a=((n=n||new h(r.hash,r.index)).add(this.wallet.wid)&&this.walletdb.writeOutpointMap(this.wallet,r.hash,r.index,n),this.put(l.c(r.hash,r.index),s),this.put(l.C(e.account,r.hash,r.index),null),this.coinCache.push(i,t),new u(r.hash,r.index));a.wid=this.wallet.wid,a.account=e.account,this.walletdb.accountCoinList.push(i,a)}async removeCredit(t,e){const r=t.coin;t=r.toKey(),await this.removeOutpointMap(r.hash,r.index),this.del(l.C(e.account,r.hash,r.index)),this.del(l.c(r.hash,r.index)),this.coinCache.unpush(t),this.walletdb.accountCoinList.unpush(t)}spendCredit(t,e,r){var i=e.inputs[r].prevout;const s=u.fromTX(e,r);this.put(l.s(i.hash,i.index),s.toRaw()),this.put(l.d(s.hash,s.index),t.coin.toRaw())}unspendCredit(t,e){var r=t.inputs[e].prevout;t=u.fromTX(t,e);this.del(l.s(r.hash,r.index)),this.del(l.d(t.hash,t.index))}writeInput(t,e){var r=t.inputs[e].prevout;const i=u.fromTX(t,e);this.put(l.s(r.hash,r.index),i.toRaw())}removeInput(t,e){t=t.inputs[e].prevout,this.del(l.s(t.hash,t.index))}async resolveInput(t,e,r,i,s,a){var o=t.hash("hex");if(!(o=await this.getSpender(o,e)))return!1;if(await this.hasSpentCoin(o))return!1;var c=await this.getTX(o.hash);n(c);const u=b.fromTX(t,e,r,i);return u.own=a,this.spendCredit(u,c.tx,o.index),-1===c.height&&(u.spent=!0,-1!==r&&(this.changeConfirmed(this.pending,u.coin,1),(u.coin.lockedByLocktime(r,i)||u.coin.lockedBySequence(r,i))&&this.addLocked(u.coin)),await this.saveCredit(u,s)),!0}async isDoubleSpend(t){for(var{prevout:e}of t.inputs)if(await this.isSpent(e.hash,e.index))return!0;return!1}async isRBF(t){if(t.isRBF())return!0;for(var{prevout:e}of t.inputs)if(e=l.r(e.hash),await this.has(e))return!0;return!1}async getSpender(t,e){return(t=await this.get(l.s(t,e)))?u.fromRaw(t):null}isSpent(t,e){return this.has(l.s(t,e))}async removeOutpointMap(t,e){const r=await this.walletdb.getOutpointMap(t,e);r&&r.remove(this.wallet.wid)&&(0===r.wids.size?this.walletdb.unwriteOutpointMap(this.wallet,t,e):this.walletdb.writeOutpointMap(this.wallet,t,e,r))}async addBlockMap(t,e){let r=await this.walletdb.getBlockMap(e);(r=r||new m(e)).add(t,this.wallet.wid)&&this.walletdb.writeBlockMap(this.wallet,e,r)}async removeBlockMap(t,e){const r=await this.walletdb.getBlockMap(e);r&&r.remove(t,this.wallet.wid)&&(0===r.txs.size?this.walletdb.unwriteBlockMap(this.wallet,e):this.walletdb.writeBlockMap(this.wallet,e,r))}getBlocks(){return this.keys({gte:l.b(0),lte:l.b(4294967295),parse:t=>l.bb(t)})}async getStatusOfSC(t){let e=await this.get(l.de(t));return e?{txs:e.toString().split(",")}:{}}async _setStatusOfSC(t,e){e=e.reduce((t,e)=>(t&&(t+=","),t+e),""),this.put(l.de(t),Buffer.from(e))}async getBlock(t){return(t=await this.get(l.b(t)))?w.fromRaw(t):null}async addBlock(t,e){var r=l.b(e.height);let i,s=await this.get(r);s||(i=w.fromMeta(e),s=i.toRaw()),i=Buffer.allocUnsafe(s.length+32),s.copy(i,0),e=i.readUInt32LE(40,!0),i.writeUInt32LE(e+1,40,!0),t.copy(i,s.length),this.put(r,i)}async removeBlock(t,e){e=l.b(e);const r=await this.get(e);if(r){var i=r.readUInt32LE(40,!0);if(n(0<i),n(r.slice(-32).equals(t)),1===i)this.del(e);else{const t=r.slice(0,-32);t.writeUInt32LE(i-1,40,!0),this.put(e,t)}}}async addBlockSlow(t,e){let r=await this.getBlock(e.height);(r=r||w.fromMeta(e)).add(t)&&this.put(l.b(e.height),r.toRaw())}async removeBlockSlow(t,e){const r=await this.getBlock(e);r&&r.remove(t)&&(0===r.hashes.length?this.del(l.b(e)):this.put(l.b(e),r.toRaw()))}async _add(t,e,r){n(!t.mutable,"Cannot add mutable TX to wallet."),r=r||{};var i=t.hash("hex"),s=await this.getTX(i);if(e){if(!t.isCoinbase()){var a=await this.getSpentCredits(t);for(let r=0;r<t.inputs.length;r++){var o=t.inputs[r],c=o.prevout;let i=a[r];(i=i||await this.getCredit(c.hash,c.index))&&await this.emitCoinSpent(o,i.coin,t,e)}}if(s)return-1!==s.height&&-2!==s.height?null:this._confirm(s,e);await this.removeConflicts(t,!1),this.del(l.r(i))}else{if(s&&!r.reorg)return null;if(await this.isRBF(t))return this.put(l.r(i),null),null;if(!await this.removeConflicts(t,!0))return null}return s=g.fromTX(t,e),this.insert(s,e)}async insert(t,e){const r=t.tx;var s=t.hash,a=e?e.height:-1,o=e?e.mtp:0;const c=new _(this,t,e),u=new Set;let h=!1,p=!1;if(!r.isCoinbase())for(let t=0;t<r.inputs.length;t++){var f=r.inputs[t].prevout;const i=await this.getCredit(f.hash,f.index);if(i){if(f=i.coin,!e&&!await this.verifyInput(r,t,f))return this.clear(),null;var d=await this.getPath(f);n(d),c.setInput(t,d,f),u.add(d.account),this.spendCredit(i,r,t),this.pending.coin--,this.changeUnconfirmed(this.pending,f,-1),e?(this.changeConfirmed(this.pending,f,-1),await this.removeCredit(i,d),this.removeLocked(f)):(i.spent=!0,await this.saveCredit(i,d)),p=!0,h=!0}else this.writeInput(r,t)}for(let t=0;t<r.outputs.length;t++){var m=r.outputs[t],g=await this.getPath(m);if(g){if(c.setOutput(t,g),u.add(g.account),!await this.resolveInput(r,t,a,o,g,h)){const i=b.fromTX(r,t,a,o);i.own=h,this.pending.coin++,this.changeUnconfirmed(this.pending,m,1),e&&this.changeConfirmed(this.pending,m,1),await this.saveCredit(i,g),(i.coin.lockedByLocktime(a,o)||i.coin.lockedBySequence(a,o))&&this.addLocked(i.coin)}p=!0}}if(!p)return this.clear(),null;this.put(l.t(s),t.toRaw()),this.logger.spam("layout.t insert",i.revHex(s)),this.put(l.m(t.mtime,s),null),e?this.put(l.h(a,s),null):this.put(l.p(s),null);for(const r of u)this.put(l.T(r,s),null),this.put(l.M(r,t.mtime,s),null),e?this.put(l.H(r,a,s),null):this.put(l.P(r,s),null);return e&&(await this.addBlockMap(s,a),await this.addBlock(r.hash(),e),this.refreshLocked(a,i.now())),this.pending.tx++,this.put(l.R,this.pending.commit()),this.unConserveTX(r),this.emit("tx",r,c),this.emit("balance",this.pending.toBalance(),c),c}async _confirm(t,e){const r=t.tx;var s=t.hash,a=e.height,o=e.mtp||e.time;const c=new _(this,t,e),u=new Set;if(t.setBlock(e),!r.isCoinbase()){var h=await this.getSpentCredits(r);for(let e=0;e<r.inputs.length;e++){var p=r.inputs[e].prevout;let i=h[e];if(!i){if(!(i=await this.getCredit(p.hash,p.index)))continue;this.spendCredit(i,r,e),this.pending.coin--,this.changeUnconfirmed(this.pending,i.coin,-1)}p=i.coin;try{n(-1!==p.height&&-2!==p.height)}catch(t){this.logger.warning("tx(%s): coin.height = -1: %s",r.txid(),t.message)}var f=await this.getPath(p);n(f),c.setInput(e,f,p),u.add(f.account),this.changeConfirmed(this.pending,p,-1),await this.removeCredit(i,f),this.removeLocked(i.coin)}}for(let t=0;t<r.outputs.length;t++){var d=r.outputs[t],m=await this.getPath(d);if(m){c.setOutput(t,m),u.add(m.account);const e=await this.getCredit(s,t);e||(this.logger.warning("_confirm: credit not found."),n(e)),e.spent&&await this.updateSpentCoin(r,t,a),this.changeConfirmed(this.pending,d,1),e.coin.time=o,e.coin.height=a,await this.saveCredit(e,m),(e.coin.lockedByLocktime(a,o)||e.coin.lockedBySequence(a,o))&&this.addLocked(e.coin)}}this.del(l.r(s)),this.put(l.t(s),t.toRaw()),this.logger.spam("layout.t confirm",i.revHex(s)),this.del(l.p(s)),this.put(l.h(a,s),null);for(const t of u)this.del(l.P(t,s)),this.put(l.H(t,a,s),null);return e&&(await this.addBlockMap(s,a),await this.addBlock(r.hash(),e),this.refreshLocked(a,i.now())),this.put(l.R,this.pending.commit()),this.unConserveTX(r),this.emit("confirmed",r,c),this.emit("balance",this.pending.toBalance(),c),c}async remove(t){return(t=await this.getTX(t))?this.removeRecursive(t):null}changeUnconfirmed(t,e,r){e.isColored||(1===r?t.unconfirmed+=e.value:t.unconfirmed-=e.value)}resetBalance(){balance.unconfirmed=balance.confirmed}changeConfirmed(t,e,r){e.isColored||(1===r?t.confirmed+=e.value:t.confirmed-=e.value)}changeLocked(t,e,r){e.isColored||(1===r?t.locked+=e.value:t.locked-=e.value)}async removeRecursive(t){n(t);var e=t.tx,r=t.hash;for(let t=0;t<e.outputs.length;t++){var i=await this.getSpender(r,t);i&&(i=await this.getTX(i.hash),await this.removeRecursive(i))}return this.start(),t=await this.erase(t,t.getBlock()),n(t),await this.commit(),t}async unconfirm(t){let e;this.start();try{e=await this._unconfirm(t)}catch(t){throw this.drop(),t}return await this.commit(),e}async _unconfirm(t){const e=await this.getTX(t);return e&&-1!==e.height?this.disconnect(e,e.getBlock()):null}async disconnect(t,e){n(e);const r=t.tx;var s=t.hash,a=e.height,o=e.mtp||e.time;const c=new _(this,t,e),u=new Set;if(t.unsetBlock(),!r.isCoinbase()){var h=await this.getSpentCredits(r);for(let e=0;e<r.inputs.length;e++){const i=h[e];if(i){var p=i.coin;try{n(-1!==p.height&&-2!==p.height)}catch(t){this.logger.warning("tx(%s): coin.height = -1: %s",r.txid(),t.message)}var f=await this.getPath(p);n(f),c.setInput(e,f,p),u.add(f.account),this.changeConfirmed(this.pending,p,1),i.spent=!0,await this.saveCredit(i,f),(i.coin.lockedByLocktime(a,o)||i.coin.lockedBySequence(a,o))&&this.addLocked(i.coin)}}}for(let t=0;t<r.outputs.length;t++){var d=r.outputs[t],m=await this.getPath(d);if(m){const e=await this.getCredit(s,t);e?(e.spent&&await this.updateSpentCoin(r,t,a),c.setOutput(t,m),u.add(m.account),this.changeConfirmed(this.pending,d,-1),e.coin.height=-1,await this.saveCredit(e,m)):await this.updateSpentCoin(r,t,a)}}await this.removeBlockMap(s,a),await this.removeBlock(r.hash(),a),this.refreshLocked(a,i.now()),this.put(l.t(s),t.toRaw()),this.put(l.p(s),null),this.del(l.h(a,s));for(const t of u)this.put(l.P(t,s),null),this.del(l.H(t,a,s));return this.put(l.R,this.pending.commit()),this.emit("unconfirmed",r,c),this.emit("balance",this.pending.toBalance(),c),c}async erase(t,e){const r=t.tx;var s=t.hash,a=e?e.height:-1,o=e?e.mtp:0;const c=new _(this,t,e),u=new Set;if(!r.isCoinbase()){var h,p,f=await this.getSpentCredits(r);for(let t=0;t<r.inputs.length;t++){const i=f[t];i?(h=i.coin,p=await this.getPath(h),n(p),c.setInput(t,p,h),u.add(p.account),this.pending.coin++,this.changeUnconfirmed(this.pending,h,1),e&&this.changeConfirmed(this.pending,h,1),this.unspendCredit(r,t),await this.saveCredit(i,p),(i.coin.lockedByLocktime(a,o)||i.coin.lockedBySequence(a,o))&&this.addLocked(i.coin)):this.removeInput(r,t)}}for(let t=0;t<r.outputs.length;t++){var d,m=r.outputs[t],g=await this.getPath(m);g&&(c.setOutput(t,g),u.add(g.account),d=b.fromTX(r,t,a,o),this.pending.coin--,this.changeUnconfirmed(this.pending,m,-1),e&&this.changeConfirmed(this.pending,m,-1),await this.removeCredit(d,g),this.removeLocked(d.coin))}this.del(l.r(s)),this.del(l.t(s)),this.logger.spam("layout.t erase",i.revHex(s)),this.del(l.m(t.mtime,s)),e?this.del(l.h(a,s)):this.del(l.p(s));for(const r of u)this.del(l.T(r,s)),this.del(l.M(r,t.mtime,s)),e?this.del(l.H(r,a,s)):this.del(l.P(r,s));e&&(await this.removeBlockMap(s,a),await this.removeBlockSlow(s,a),this.refreshLocked(a,i.now())),this.pending.tx--,this.put(l.R,this.pending.commit());try{let t=await x.FactoryOfContract({env:this.walletdb,tx:r,block:e});await t.erase()}catch(t){this.logger.error("TX(%s) Smart Contract Erase Error: %s",r.txid(),t.message)}return this.emit("tx.remove",r,c),this.emit("balance",this.pending.toBalance(),c),c}async removeConflict(t){if(!t)return Promise.resolve();const e=t.tx;return this.logger.warning("Handling conflicting tx: %s.",e.txid()),this.drop(),t=await this.removeRecursive(t),this.start(),this.logger.warning("Removed conflict: %s.",e.txid()),this.emit("conflict",e,t),t}async removeConflicts(t,e){var r=t.hash("hex");const i=[];if(!t.isCoinbase()){for(let a=0;a<t.inputs.length;a++){var s=t.inputs[a].prevout;if(s.hash!==p.NULL_HASH&&(s=await this.getSpender(s.hash,s.index))&&s.hash!==r){const t=await this.getTX(s.hash);if(n(t),s=t.getBlock(),e&&s)return!1;i[a]=t}}for(const t of i)await this.removeConflict(t)}return!0}async verifyInput(t,e,r){var i=d.flags.MANDATORY_VERIFY_FLAGS;return!this.options.verify||t.verifyInput(e,r,i)}conserveTX(t){if(!t.isCoinbase())for(const e of t.inputs)this.conserveCoin(e.prevout)}unConserveTX(t){if(!t.isCoinbase())for(const e of t.inputs)this.unConserveCoin(e.prevout)}conserveCoin(t){t=t.toKey(),this.conserved.add(t)}unConserveCoin(t){return t=t.toKey(),this.conserved.delete(t)}isConserved(t){return t=t.toKey(),this.conserved.has(t)}filterConserved(t){const e=[];for(const r of t)this.isConserved(r)||e.push(r);return e}getConserved(){const t=[];for(const e of this.conserved.keys())t.push(u.fromKey(e));return t}getAccountHistoryHashes(t){return this.keys({gte:l.T(t,p.NULL_HASH),lte:l.T(t,p.HIGH_HASH),parse:t=>{var[,t]=l.Tt(t);return t}})}getHistoryHashes(t){return null!=t?this.getAccountHistoryHashes(t):this.keys({gte:l.t(p.NULL_HASH),lte:l.t(p.HIGH_HASH),parse:t=>l.tt(t)})}getAccountPendingHashes(t){return this.keys({gte:l.P(t,p.NULL_HASH),lte:l.P(t,p.HIGH_HASH),parse:t=>{var[,t]=l.Pp(t);return t}})}getPendingHashes(t){return null!=t?this.getAccountPendingHashes(t):this.keys({gte:l.p(p.NULL_HASH),lte:l.p(p.HIGH_HASH),parse:t=>l.pp(t)})}getAccountOutpoints(t){return void 0!==t&&null!=t?this.walletdb.accountCoinList.getAccount(this.wallet.wid,t):this.walletdb.accountCoinList.ToArray()}getAccountHeightRangeHashes(t,e){var r=e.start||0,i=e.end||4294967295;return this.keys({gte:l.H(t,r,p.NULL_HASH),lte:l.H(t,i,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,,t]=l.Hh(t);return t}})}getHeightRangeHashes(t,e){var r;return t&&"object"==typeof t&&(e=t,t=null),null!=t?this.getAccountHeightRangeHashes(t,e):(t=e.start||0,r=e.end||4294967295,this.keys({gte:l.h(t,p.NULL_HASH),lte:l.h(r,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,t]=l.hh(t);return t}}))}getHeightHashes(t){return this.getHeightRangeHashes({start:t,end:t})}getAccountRangeHashes(t,e){var r=e.start||0,i=e.end||4294967295;return this.keys({gte:l.M(t,r,p.NULL_HASH),lte:l.M(t,i,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,,t]=l.Mm(t);return t}})}getRangeHashes(t,e){var r;return t&&"object"==typeof t&&(e=t,t=null),null!=t?this.getAccountRangeHashes(t,e):(t=e.start||0,r=e.end||4294967295,this.keys({gte:l.m(t,p.NULL_HASH),lte:l.m(r,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,t]=l.mm(t);return t}}))}async getRange(t,e){const r=[];t&&"object"==typeof t&&(e=t,t=null);for(const s of await this.getRangeHashes(t,e)){var i=await this.getTX(s);n(i),r.push(i)}return r}getLast(t,e){return this.getRange(t,{start:0,end:4294967295,reverse:!0,limit:e||10})}getHistory(t){return null!=t?this.getAccountHistory(t):this.values({gte:l.t(p.NULL_HASH),lte:l.t(p.HIGH_HASH),parse:g.fromRaw})}async getAccountHistory(t){const e=[];for(const i of await this.getHistoryHashes(t)){var r=await this.getTX(i);n(r),e.push(r)}return e}async getPending(t){const e=[];for(const i of await this.getPendingHashes(t)){var r=await this.getTX(i);n(r),e.push(r)}return e}getCredits(t){return void 0!==t&&null!=t?this.getAccountCredits(t):this.range({gte:l.c(p.NULL_HASH,0),lte:l.c(p.HIGH_HASH,4294967295),parse:(t,e)=>{var[t,r]=l.cc(t);const i=b.fromRaw(e);return e=u.toKey(t,r),i.coin.hash=t,i.coin.index=r,this.coinCache.set(e,i),i}})}async fillCoins(){var t,e=await this.keys({gte:l.C(0,p.NULL_HASH,0),lte:l.C(4294967295,p.HIGH_HASH,4294967295),parse:t=>{var[t,e,r]=l.Cc(t);let i=new u(e,r);return i.wid=this.wallet.wid,i.account=t,[i.toKey(),i]}});for(t of e){var r=await this.get(l.c(t[1].hash,t[1].index));if(r){const e=b.fromRaw(r);e.coin.hash=t[1].hash,e.coin.index=t[1].index,this.coinCache.set(t[0],e)}}this.walletdb.accountCoinList.load(e)}async getAccountCredits(t){const e=[];for(const i of await this.getAccountOutpoints(t)){var r=await this.getCredit(i.hash,i.index);r||(this.logger.warning("getAccountCredits: credit not found."),n(r)),e.push(r)}return e}async getSpentCredits(t){if(t.isCoinbase())return[];var e=t.hash("hex");const r=[];for(let e=0;e<t.inputs.length;e++)r.push(null);return await this.range({gte:l.d(e,0),lte:l.d(e,4294967295),parse:(e,i)=>{var[,e]=l.dd(e);const s=c.fromRaw(i);i=t.inputs[e],n(i),s.hash=i.prevout.hash,s.index=i.prevout.index,r[e]=new b(s)}}),r}async getCoins(t){const e=[];if(void 0!==t&&null!=t)for(const i of await this.getAccountOutpoints(t)){var r=await this.getCredit(i.hash,i.index);r||(this.logger.warning("getAccountCredits: credit not found."),n(r)),r.spent||e.push(r.coin)}else await this.range({gte:l.c(p.NULL_HASH,0),lte:l.c(p.HIGH_HASH,4294967295),parse:(t,r)=>{var[t,i]=l.cc(t);const s=b.fromRaw(r);r=u.toKey(t,i),s.coin.hash=t,s.coin.index=i,this.coinCache.set(r,s),s.spent||e.push(s.coin)}});return e}async getSpentCoins(t){if(t.isCoinbase())return[];const e=[];for(const r of await this.getSpentCredits(t))r?e.push(r.coin):e.push(null);return e}async getCoinView(t){const e=new o;if(!t.isCoinbase())for(const i of t.inputs){var r=i.prevout;(r=await this.getCoin(r.hash,r.index))&&e.addCoin(r)}return e}async getSpentView(t){const e=new o;if(!t.isCoinbase())for(const r of await this.getSpentCoins(t))r&&e.addCoin(r);return e}async getState(){var t=await this.get(l.R);return t?v.fromRaw(this.wallet.wid,this.wallet.id,t):null}async loadLockedCoins(){var t=this.walletdb.curHeight,e=i.now();for(const r of await this.wallet.getCredits()){let i=r.coin;i.getAddress()&&(i.lockedByLocktime(t,e)||i.lockedBySequence(t,e))&&this.addLocked(i)}}refreshLocked(t,e){for(const r of this.lockedCoins.values())r.lockedByLocktime(t,e)||r.lockedBySequence(t,e)||this.removeLocked(r)}addLocked(t){var e=l.prefix(this.wallet.wid,l.c(t.hash,t.index));this.lockedCoins.has(e)||(this.lockedCoins.set(e,t),this.changeLocked(this.pending,t,1))}removeLocked(t){var e=l.prefix(this.wallet.wid,l.c(t.hash,t.index));this.lockedCoins.has(e)&&(this.lockedCoins.delete(e),this.changeLocked(this.pending,t,-1))}async getTX(t){return(t=await this.get(l.t(t)))?g.fromRaw(t):null}async getDetails(t){return(t=await this.getTX(t))?this.toDetails(t):null}async toDetails(t){const e=[];if(!Array.isArray(t))return this._toDetail(t);for(const i of t){var r=await this._toDetail(i);r&&e.push(r)}return e}async _toDetail(t){var e=t.tx,r=t.getBlock();const i=new _(this,t,r);var s=await this.getSpentCoins(e);for(let t=0;t<e.inputs.length;t++){var n=s[t];let e=null;n&&(e=await this.getPath(n)),i.setInput(t,e,n)}for(let t=0;t<e.outputs.length;t++){var a=e.outputs[t];a=await this.getPath(a);i.setOutput(t,a)}return i}hasTX(t){return this.has(l.t(t))}async getCoin(t,e){return(t=await this.getCredit(t,e))?t.coin:null}async emitCoinSpent(t,e,r,i){(r={env:this.walletdb,block:i,tx:r,hash:t.prevout.hash,i:t.prevout.index,height:i.height,output:e,type:e.getReturnType(),data:e.getReturnData(S)}).data&&await k(r).spent(t)}async getCredit(t,e){var r=this.state,i=u.toKey(t,e);let s=this.coinCache.get(i);if(s)return s;if(s=await this.get(l.c(t,e))){const n=b.fromRaw(s);return n.coin.hash=t,n.coin.index=e,r===this.state&&this.coinCache.set(i,n),n}return null}async getSpentCoin(t,e){if(!(t=await this.get(l.d(t.hash,t.index))))return null;const r=c.fromRaw(t);return r.hash=e.hash,r.index=e.index,r}hasSpentCoin(t){return this.has(l.d(t.hash,t.index))}async updateSpentCoin(t,e,r){if(t=u.fromTX(t,e),e=await this.getSpender(t.hash,t.index)){const i=await this.getSpentCoin(e,t);i&&(i.height=r,this.put(l.d(e.hash,e.index),i.toRaw()))}}async hasCoin(t,e){var r=u.toKey(t,e);return!!this.coinCache.has(r)||this.has(l.c(t,e))}async getBalance(t){return null!=t?this.getAccountBalance(t):this.state.toBalance()}async getAccountBalance(t){var e=await this.getAccountCredits(t);const r=new y(this.wallet.wid,this.wallet.id,t);var i=this.walletdb.curHeight,s=this.network.now();for(const t of e){const e=t.coin;-2!==e.height&&(-1===e.height||e.isColored||(r.confirmed+=e.value),t.spent||e.isColored||(r.unconfirmed+=e.value),(e.lockedByLocktime(i,s)||e.lockedBySequence(i,s))&&this.changeLocked(r,e,1))}return r}async zap(t,e){n(i.isU32(e));var r=i.now();const s=[];for(const i of await this.getRange(t,{start:0,end:r-e}))-1===i.height&&(n(r-i.mtime>=e),this.logger.debug("Zapping TX: %s (%s)",i.tx.txid(),this.wallet.id),await this.remove(i.hash),s.push(i.hash));return s}async abandon(t){if(await this.has(l.p(t)))return this.remove(t)}}E.layout=l;class _{constructor(t,e,r){this.wallet=t.wallet,this.network=this.wallet.network,this.wid=this.wallet.wid,this.id=this.wallet.id,this.chainHeight=t.walletdb.curHeight,this.hash=e.hash,this.tx=e.tx,this.mtime=e.mtime,this.size=this.tx.getSize(),this.vsize=this.tx.getVirtualSize(),this.block=null,this.height=-1,this.time=0,r&&(this.block=r.hash,this.height=r.height,this.time=r.time),this.inputs=[],this.outputs=[],this.init()}init(){for(const t of this.tx.inputs){const e=new A;e.address=t.getAddress(),this.inputs.push(e)}for(const t of this.tx.outputs){const e=new A;e.value=t.value,e.address=t.getAddress(),this.outputs.push(e)}}setInput(t,e,r){const i=this.inputs[t];i.prevout=this.tx.inputs[t].prevout,r&&(i.value=r.value,i.address=r.getAddress()),e&&(i.path=e)}setOutput(t,e){const r=this.outputs[t];e&&(r.path=e)}getDepth(){var t;return-1===this.height||(t=this.chainHeight-this.height)<0?0:1+t}getFee(){let t=0,e=0;for(const e of this.inputs){if(!e.path)return 0;t+=e.value}for(const t of this.outputs)e+=t.value;return t-e}getRate(t){return f.getRate(this.vsize,t)}toJSON(){var t=this.getFee();let e=this.getRate(t);return Number.isSafeInteger(e)||(e=0),{wid:this.wid,id:this.id,hash:i.revHex(this.hash),height:this.height,block:this.block?i.revHex(this.block):null,time:this.time,mtime:this.mtime,date:i.date(this.time||this.mtime),size:this.size,virtualSize:this.vsize,fee:t,rate:e,confirmations:this.getDepth(),inputs:this.inputs.map(t=>t.getJSON(this.network)),outputs:this.outputs.map(t=>t.getJSON(this.network)),tx:this.tx.toRaw().toString("hex")}}}class A{constructor(){this.value=0,this.address=null,this.path=null}toJSON(){return this.getJSON()}getJSON(t){return{prevout:this.prevout?this.prevout.toJSON():null,value:this.value,address:this.address?this.address.toString(t):null,path:this.path?this.path.toJSON():null}}}t.exports=E},function(t,e,r){"use strict";
|
|
868
|
+
*/const i=r(1),s=r(65),n=r(0),a=r(34),o=r(60),c=r(53),u=r(46),h=r(321),l=r(96).txdb,p=r(3),f=r(27),d=r(17),m=r(322),g=r(226),y=r(323),v=r(614),b=r(615);r(122),r(123);const w=r(616);r(19);const x=r(42),k=r(119),S=r(21).nestingCodes;class E{constructor(t){this.wallet=t,this.walletdb=t.db,this.logger=this.walletdb.logger,this.network=this.walletdb.network,this.options=this.walletdb.options,this.coinCache=new s(this.options.coinCache),this.conserved=new Set,this.lockedCoins=new Map,this.state=null,this.pending=null,this.events=[]}async open(){let t=null;try{t=await this.getState()}catch(e){this.logger.info("TXDB State Format Error."),t=null}t?(this.state=t,this.logger.info("TXDB loaded for %s.",this.wallet.id)):(this.state=new v(this.wallet.wid,this.wallet.id),this.logger.info("TXDB created for %s.",this.wallet.id)),this.logger.info("TXDB State: tx=%d coin=%s.",this.state.tx,this.state.coin),this.logger.info("Balance: unconfirmed=%s confirmed=%s.",a.btc(this.state.unconfirmed),a.btc(this.state.confirmed)),this.pending=this.state.clone(),await this.loadLockedCoins(),this.state=this.pending}start(){return this.pending=this.state.clone(),this.coinCache.start(),this.walletdb.accountCoinList.start(),this.wallet.start()}drop(){return this.pending=null,this.events.length=0,this.coinCache.drop(),this.walletdb.accountCoinList.drop(),this.wallet.drop()}clear(){return this.pending=this.state.clone(),this.events.length=0,this.coinCache.clear(),this.walletdb.accountCoinList.clear(),this.wallet.clear()}async commit(){try{await this.wallet.commit()}catch(t){throw this.pending=null,this.events.length=0,this.coinCache.drop(),this.walletdb.accountCoinList.drop(),t}if(this.pending.committed)for(var[t,e,r]of(this.state=this.pending,this.events))this.walletdb.emit(t,this.wallet.id,e,r),"tx"==t&&this.walletdb.emit("tx.received."+e.rhash(),this.wallet.id,e,r),this.wallet.emit(t,e,r);this.pending=null,this.events.length=0,this.coinCache.commit(),this.walletdb.accountCoinList.commit()}emit(t,e,r){this.events.push([t,e,r])}prefix(t){return n(this.wallet.wid),l.prefix(this.wallet.wid,t)}put(t,e){n(this.wallet.current),this.wallet.current.put(this.prefix(t),e)}del(t){n(this.wallet.current),this.wallet.current.del(this.prefix(t))}get(t){return this.walletdb.db.get(this.prefix(t))}has(t){return this.walletdb.db.has(this.prefix(t))}range(t){return t.gte&&(t.gte=this.prefix(t.gte)),t.lte&&(t.lte=this.prefix(t.lte)),this.walletdb.db.range(t)}keys(t){return t.gte&&(t.gte=this.prefix(t.gte)),t.lte&&(t.lte=this.prefix(t.lte)),this.walletdb.db.keys(t)}values(t){return t.gte&&(t.gte=this.prefix(t.gte)),t.lte&&(t.lte=this.prefix(t.lte)),this.walletdb.db.values(t)}async getPath(t){return(t=t.getAddress())?this.wallet.getPath(t):null}async hasPath(t){return!!(t=t.getAddress())&&this.wallet.hasPath(t)}async saveCredit(t,e){const r=t.coin;var i=r.toKey(),s=t.toRaw();let n=await this.walletdb.getOutpointMap(r.hash,r.index),a=((n=n||new h(r.hash,r.index)).add(this.wallet.wid)&&this.walletdb.writeOutpointMap(this.wallet,r.hash,r.index,n),this.put(l.c(r.hash,r.index),s),this.put(l.C(e.account,r.hash,r.index),null),this.coinCache.push(i,t),new u(r.hash,r.index));a.wid=this.wallet.wid,a.account=e.account,this.walletdb.accountCoinList.push(i,a)}async removeCredit(t,e){const r=t.coin;t=r.toKey(),await this.removeOutpointMap(r.hash,r.index),this.del(l.C(e.account,r.hash,r.index)),this.del(l.c(r.hash,r.index)),this.coinCache.unpush(t),this.walletdb.accountCoinList.unpush(t)}spendCredit(t,e,r){var i=e.inputs[r].prevout;const s=u.fromTX(e,r);this.put(l.s(i.hash,i.index),s.toRaw()),this.put(l.d(s.hash,s.index),t.coin.toRaw())}unspendCredit(t,e){var r=t.inputs[e].prevout;t=u.fromTX(t,e);this.del(l.s(r.hash,r.index)),this.del(l.d(t.hash,t.index))}writeInput(t,e){var r=t.inputs[e].prevout;const i=u.fromTX(t,e);this.put(l.s(r.hash,r.index),i.toRaw())}removeInput(t,e){t=t.inputs[e].prevout,this.del(l.s(t.hash,t.index))}async resolveInput(t,e,r,i,s,a){var o=t.hash("hex");if(!(o=await this.getSpender(o,e)))return!1;if(await this.hasSpentCoin(o))return!1;var c=await this.getTX(o.hash);n(c);const u=b.fromTX(t,e,r,i);return u.own=a,this.spendCredit(u,c.tx,o.index),-1===c.height&&(u.spent=!0,-1!==r&&(this.changeConfirmed(this.pending,u.coin,1),(u.coin.lockedByLocktime(r,i)||u.coin.lockedBySequence(r,i))&&this.addLocked(u.coin)),await this.saveCredit(u,s)),!0}async isDoubleSpend(t){for(var{prevout:e}of t.inputs)if(await this.isSpent(e.hash,e.index))return!0;return!1}async isRBF(t){if(t.isRBF())return!0;for(var{prevout:e}of t.inputs)if(e=l.r(e.hash),await this.has(e))return!0;return!1}async getSpender(t,e){return(t=await this.get(l.s(t,e)))?u.fromRaw(t):null}isSpent(t,e){return this.has(l.s(t,e))}async removeOutpointMap(t,e){const r=await this.walletdb.getOutpointMap(t,e);r&&r.remove(this.wallet.wid)&&(0===r.wids.size?this.walletdb.unwriteOutpointMap(this.wallet,t,e):this.walletdb.writeOutpointMap(this.wallet,t,e,r))}async addBlockMap(t,e){let r=await this.walletdb.getBlockMap(e);(r=r||new m(e)).add(t,this.wallet.wid)&&this.walletdb.writeBlockMap(this.wallet,e,r)}async removeBlockMap(t,e){const r=await this.walletdb.getBlockMap(e);r&&r.remove(t,this.wallet.wid)&&(0===r.txs.size?this.walletdb.unwriteBlockMap(this.wallet,e):this.walletdb.writeBlockMap(this.wallet,e,r))}getBlocks(){return this.keys({gte:l.b(0),lte:l.b(4294967295),parse:t=>l.bb(t)})}async getStatusOfSC(t){let e=await this.get(l.de(t));return e?{txs:e.toString().split(",")}:{}}async _setStatusOfSC(t,e){e=e.reduce((t,e)=>(t&&(t+=","),t+e),""),this.put(l.de(t),Buffer.from(e))}async getBlock(t){return(t=await this.get(l.b(t)))?w.fromRaw(t):null}async addBlock(t,e){var r=l.b(e.height);let i,s=await this.get(r);s||(i=w.fromMeta(e),s=i.toRaw()),i=Buffer.allocUnsafe(s.length+32),s.copy(i,0),e=i.readUInt32LE(40,!0),i.writeUInt32LE(e+1,40,!0),t.copy(i,s.length),this.put(r,i)}async removeBlock(t,e){e=l.b(e);const r=await this.get(e);if(r){var i=r.readUInt32LE(40,!0);if(n(0<i),n(r.slice(-32).equals(t)),1===i)this.del(e);else{const t=r.slice(0,-32);t.writeUInt32LE(i-1,40,!0),this.put(e,t)}}}async addBlockSlow(t,e){let r=await this.getBlock(e.height);(r=r||w.fromMeta(e)).add(t)&&this.put(l.b(e.height),r.toRaw())}async removeBlockSlow(t,e){const r=await this.getBlock(e);r&&r.remove(t)&&(0===r.hashes.length?this.del(l.b(e)):this.put(l.b(e),r.toRaw()))}async _add(t,e,r){n(!t.mutable,"Cannot add mutable TX to wallet."),r=r||{};var i=t.hash("hex"),s=await this.getTX(i);if(e){if(!t.isCoinbase()){var a=await this.getSpentCredits(t);for(let r=0;r<t.inputs.length;r++){var o=t.inputs[r],c=o.prevout;let i=a[r];(i=i||await this.getCredit(c.hash,c.index))&&await this.emitCoinSpent(o,i.coin,t,e)}}if(s)return-1!==s.height&&-2!==s.height?null:this._confirm(s,e);await this.removeConflicts(t,!1),this.del(l.r(i))}else{if(s&&!r.reorg)return null;if(await this.isRBF(t))return this.put(l.r(i),null),null;if(!await this.removeConflicts(t,!0))return null}return s=g.fromTX(t,e),this.insert(s,e)}async insert(t,e){const r=t.tx;var s=t.hash,a=e?e.height:-1,o=e?e.mtp:0;const c=new _(this,t,e),u=new Set;let h=!1,p=!1;if(!r.isCoinbase())for(let t=0;t<r.inputs.length;t++){var f=r.inputs[t].prevout;const i=await this.getCredit(f.hash,f.index);if(i){if(f=i.coin,!e&&!await this.verifyInput(r,t,f))return this.clear(),null;var d=await this.getPath(f);n(d),c.setInput(t,d,f),u.add(d.account),this.spendCredit(i,r,t),this.pending.coin--,this.changeUnconfirmed(this.pending,f,-1),e?(this.changeConfirmed(this.pending,f,-1),await this.removeCredit(i,d),this.removeLocked(f)):(i.spent=!0,await this.saveCredit(i,d)),p=!0,h=!0}else this.writeInput(r,t)}for(let t=0;t<r.outputs.length;t++){var m=r.outputs[t],g=await this.getPath(m);if(g){if(c.setOutput(t,g),u.add(g.account),!await this.resolveInput(r,t,a,o,g,h)){const i=b.fromTX(r,t,a,o);i.own=h,this.pending.coin++,this.changeUnconfirmed(this.pending,m,1),e&&this.changeConfirmed(this.pending,m,1),await this.saveCredit(i,g),(i.coin.lockedByLocktime(a,o)||i.coin.lockedBySequence(a,o))&&this.addLocked(i.coin)}p=!0}}if(!p)return this.clear(),null;this.put(l.t(s),t.toRaw()),this.logger.spam("layout.t insert",i.revHex(s)),this.put(l.m(t.mtime,s),null),e?this.put(l.h(a,s),null):this.put(l.p(s),null);for(const r of u)this.put(l.T(r,s),null),this.put(l.M(r,t.mtime,s),null),e?this.put(l.H(r,a,s),null):this.put(l.P(r,s),null);return e&&(await this.addBlockMap(s,a),await this.addBlock(r.hash(),e),this.refreshLocked(a,i.now())),this.pending.tx++,this.put(l.R,this.pending.commit()),this.unConserveTX(r),this.emit("tx",r,c),this.emit("balance",this.pending.toBalance(),c),c}async _confirm(t,e){const r=t.tx;var s=t.hash,a=e.height,o=e.mtp||e.time;const c=new _(this,t,e),u=new Set;if(t.setBlock(e),!r.isCoinbase()){var h=await this.getSpentCredits(r);for(let e=0;e<r.inputs.length;e++){var p=r.inputs[e].prevout;let i=h[e];if(!i){if(!(i=await this.getCredit(p.hash,p.index)))continue;this.spendCredit(i,r,e),this.pending.coin--,this.changeUnconfirmed(this.pending,i.coin,-1)}p=i.coin;try{n(-1!==p.height&&-2!==p.height)}catch(t){this.logger.warning("tx(%s): coin.height = -1: %s",r.txid(),t.message)}var f=await this.getPath(p);n(f),c.setInput(e,f,p),u.add(f.account),this.changeConfirmed(this.pending,p,-1),await this.removeCredit(i,f),this.removeLocked(i.coin)}}for(let t=0;t<r.outputs.length;t++){var d=r.outputs[t],m=await this.getPath(d);if(m){c.setOutput(t,m),u.add(m.account);const e=await this.getCredit(s,t);e||(this.logger.warning("_confirm: credit not found."),n(e)),e.spent&&await this.updateSpentCoin(r,t,a),this.changeConfirmed(this.pending,d,1),e.coin.time=o,e.coin.height=a,await this.saveCredit(e,m),(e.coin.lockedByLocktime(a,o)||e.coin.lockedBySequence(a,o))&&this.addLocked(e.coin)}}this.del(l.r(s)),this.put(l.t(s),t.toRaw()),this.logger.spam("layout.t confirm",i.revHex(s)),this.del(l.p(s)),this.put(l.h(a,s),null);for(const t of u)this.del(l.P(t,s)),this.put(l.H(t,a,s),null);return e&&(await this.addBlockMap(s,a),await this.addBlock(r.hash(),e),this.refreshLocked(a,i.now())),this.put(l.R,this.pending.commit()),this.unConserveTX(r),this.emit("confirmed",r,c),this.emit("balance",this.pending.toBalance(),c),c}async remove(t){return(t=await this.getTX(t))?this.removeRecursive(t):null}changeUnconfirmed(t,e,r){e.isColored||(1===r?t.unconfirmed+=e.value:t.unconfirmed-=e.value)}resetBalance(){balance.unconfirmed=balance.confirmed}changeConfirmed(t,e,r){e.isColored||(1===r?t.confirmed+=e.value:t.confirmed-=e.value)}changeLocked(t,e,r){e.isColored||(1===r?t.locked+=e.value:t.locked-=e.value)}async removeRecursive(t){n(t);var e=t.tx,r=t.hash;for(let t=0;t<e.outputs.length;t++){var i=await this.getSpender(r,t);i&&(i=await this.getTX(i.hash),await this.removeRecursive(i))}return this.start(),t=await this.erase(t,t.getBlock()),n(t),await this.commit(),t}async unconfirm(t){let e;this.start();try{e=await this._unconfirm(t)}catch(t){throw this.drop(),t}return await this.commit(),e}async _unconfirm(t){const e=await this.getTX(t);return e&&-1!==e.height?this.disconnect(e,e.getBlock()):null}async disconnect(t,e){n(e);const r=t.tx;var s=t.hash,a=e.height,o=e.mtp||e.time;const c=new _(this,t,e),u=new Set;if(t.unsetBlock(),!r.isCoinbase()){var h=await this.getSpentCredits(r);for(let e=0;e<r.inputs.length;e++){const i=h[e];if(i){var p=i.coin;try{n(-1!==p.height&&-2!==p.height)}catch(t){this.logger.warning("tx(%s): coin.height = -1: %s",r.txid(),t.message)}var f=await this.getPath(p);n(f),c.setInput(e,f,p),u.add(f.account),this.changeConfirmed(this.pending,p,1),i.spent=!0,await this.saveCredit(i,f),(i.coin.lockedByLocktime(a,o)||i.coin.lockedBySequence(a,o))&&this.addLocked(i.coin)}}}for(let t=0;t<r.outputs.length;t++){var d=r.outputs[t],m=await this.getPath(d);if(m){const e=await this.getCredit(s,t);e?(e.spent&&await this.updateSpentCoin(r,t,a),c.setOutput(t,m),u.add(m.account),this.changeConfirmed(this.pending,d,-1),e.coin.height=-1,await this.saveCredit(e,m)):await this.updateSpentCoin(r,t,a)}}await this.removeBlockMap(s,a),await this.removeBlock(r.hash(),a),this.refreshLocked(a,i.now()),this.put(l.t(s),t.toRaw()),this.put(l.p(s),null),this.del(l.h(a,s));for(const t of u)this.put(l.P(t,s),null),this.del(l.H(t,a,s));return this.put(l.R,this.pending.commit()),this.emit("unconfirmed",r,c),this.emit("balance",this.pending.toBalance(),c),c}async erase(t,e){const r=t.tx;var s=t.hash,a=e?e.height:-1,o=e?e.mtp:0;const c=new _(this,t,e),u=new Set;if(!r.isCoinbase()){var h,p,f=await this.getSpentCredits(r);for(let t=0;t<r.inputs.length;t++){const i=f[t];i?(h=i.coin,p=await this.getPath(h),n(p),c.setInput(t,p,h),u.add(p.account),this.pending.coin++,this.changeUnconfirmed(this.pending,h,1),e&&this.changeConfirmed(this.pending,h,1),this.unspendCredit(r,t),await this.saveCredit(i,p),(i.coin.lockedByLocktime(a,o)||i.coin.lockedBySequence(a,o))&&this.addLocked(i.coin)):this.removeInput(r,t)}}for(let t=0;t<r.outputs.length;t++){var d,m=r.outputs[t],g=await this.getPath(m);g&&(c.setOutput(t,g),u.add(g.account),d=b.fromTX(r,t,a,o),this.pending.coin--,this.changeUnconfirmed(this.pending,m,-1),e&&this.changeConfirmed(this.pending,m,-1),await this.removeCredit(d,g),this.removeLocked(d.coin))}this.del(l.r(s)),this.del(l.t(s)),this.logger.spam("layout.t erase",i.revHex(s)),this.del(l.m(t.mtime,s)),e?this.del(l.h(a,s)):this.del(l.p(s));for(const r of u)this.del(l.T(r,s)),this.del(l.M(r,t.mtime,s)),e?this.del(l.H(r,a,s)):this.del(l.P(r,s));e&&(await this.removeBlockMap(s,a),await this.removeBlockSlow(s,a),this.refreshLocked(a,i.now())),this.pending.tx--,this.put(l.R,this.pending.commit());try{let t=await x.FactoryOfContract({env:this.walletdb,tx:r,block:e});await t.erase()}catch(t){this.logger.error("TX(%s) Smart Contract Erase Error: %s",r.txid(),t.message)}return this.emit("tx.remove",r,c),this.emit("balance",this.pending.toBalance(),c),c}async removeConflict(t){if(!t)return Promise.resolve();const e=t.tx;return this.logger.warning("Handling conflicting tx: %s.",e.txid()),this.drop(),t=await this.removeRecursive(t),this.start(),this.logger.warning("Removed conflict: %s.",e.txid()),this.emit("conflict",e,t),t}async removeConflicts(t,e){var r=t.hash("hex");const i=[];if(!t.isCoinbase()){for(let a=0;a<t.inputs.length;a++){var s=t.inputs[a].prevout;if(s.hash!==p.NULL_HASH&&(s=await this.getSpender(s.hash,s.index))&&s.hash!==r){const t=await this.getTX(s.hash);if(n(t),s=t.getBlock(),e&&s)return!1;i[a]=t}}for(const t of i)await this.removeConflict(t)}return!0}async verifyInput(t,e,r){var i=d.flags.MANDATORY_VERIFY_FLAGS;return!this.options.verify||t.verifyInput(e,r,i)}conserveTX(t){if(!t.isCoinbase())for(const e of t.inputs)this.conserveCoin(e.prevout)}unConserveTX(t){if(!t.isCoinbase())for(const e of t.inputs)this.unConserveCoin(e.prevout)}conserveCoin(t){t=t.toKey(),this.conserved.add(t)}unConserveCoin(t){return t=t.toKey(),this.conserved.delete(t)}isConserved(t){return t=t.toKey(),this.conserved.has(t)}filterConserved(t){const e=[];for(const r of t)this.isConserved(r)||e.push(r);return e}getConserved(){const t=[];for(const e of this.conserved.keys())t.push(u.fromKey(e));return t}getAccountHistoryHashes(t){return this.keys({gte:l.T(t,p.NULL_HASH),lte:l.T(t,p.HIGH_HASH),parse:t=>{var[,t]=l.Tt(t);return t}})}getHistoryHashes(t){return null!=t?this.getAccountHistoryHashes(t):this.keys({gte:l.t(p.NULL_HASH),lte:l.t(p.HIGH_HASH),parse:t=>l.tt(t)})}getAccountPendingHashes(t){return this.keys({gte:l.P(t,p.NULL_HASH),lte:l.P(t,p.HIGH_HASH),parse:t=>{var[,t]=l.Pp(t);return t}})}getPendingHashes(t){return null!=t?this.getAccountPendingHashes(t):this.keys({gte:l.p(p.NULL_HASH),lte:l.p(p.HIGH_HASH),parse:t=>l.pp(t)})}getAccountOutpoints(t){return void 0!==t&&null!=t?this.walletdb.accountCoinList.getAccount(this.wallet.wid,t):this.walletdb.accountCoinList.ToArray()}getAccountHeightRangeHashes(t,e){var r=e.start||0,i=e.end||4294967295;return this.keys({gte:l.H(t,r,p.NULL_HASH),lte:l.H(t,i,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,,t]=l.Hh(t);return t}})}getHeightRangeHashes(t,e){var r;return t&&"object"==typeof t&&(e=t,t=null),null!=t?this.getAccountHeightRangeHashes(t,e):(t=e.start||0,r=e.end||4294967295,this.keys({gte:l.h(t,p.NULL_HASH),lte:l.h(r,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,t]=l.hh(t);return t}}))}getHeightHashes(t){return this.getHeightRangeHashes({start:t,end:t})}getAccountRangeHashes(t,e){var r=e.start||0,i=e.end||4294967295;return this.keys({gte:l.M(t,r,p.NULL_HASH),lte:l.M(t,i,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,,t]=l.Mm(t);return t}})}getRangeHashes(t,e){var r;return t&&"object"==typeof t&&(e=t,t=null),null!=t?this.getAccountRangeHashes(t,e):(t=e.start||0,r=e.end||4294967295,this.keys({gte:l.m(t,p.NULL_HASH),lte:l.m(r,p.HIGH_HASH),limit:e.limit,reverse:e.reverse,parse:t=>{var[,t]=l.mm(t);return t}}))}async getRange(t,e){const r=[];t&&"object"==typeof t&&(e=t,t=null);for(const s of await this.getRangeHashes(t,e)){var i=await this.getTX(s);n(i),r.push(i)}return r}getLast(t,e){return this.getRange(t,{start:0,end:4294967295,reverse:!0,limit:e||10})}getHistory(t){return null!=t?this.getAccountHistory(t):this.values({gte:l.t(p.NULL_HASH),lte:l.t(p.HIGH_HASH),parse:g.fromRaw})}async getAccountHistory(t){const e=[];for(const i of await this.getHistoryHashes(t)){var r=await this.getTX(i);n(r),e.push(r)}return e}async getPending(t){const e=[];for(const i of await this.getPendingHashes(t)){var r=await this.getTX(i);n(r),e.push(r)}return e}getCredits(t){return void 0!==t&&null!=t?this.getAccountCredits(t):this.range({gte:l.c(p.NULL_HASH,0),lte:l.c(p.HIGH_HASH,4294967295),parse:(t,e)=>{var[t,r]=l.cc(t);const i=b.fromRaw(e);return e=u.toKey(t,r),i.coin.hash=t,i.coin.index=r,this.coinCache.set(e,i),i}})}async fillCoins(){var t,e=await this.keys({gte:l.C(0,p.NULL_HASH,0),lte:l.C(4294967295,p.HIGH_HASH,4294967295),parse:t=>{var[t,e,r]=l.Cc(t);let i=new u(e,r);return i.wid=this.wallet.wid,i.account=t,[i.toKey(),i]}});for(t of e){var r=await this.get(l.c(t[1].hash,t[1].index));if(r){const e=b.fromRaw(r);e.coin.hash=t[1].hash,e.coin.index=t[1].index,this.coinCache.set(t[0],e)}}this.walletdb.accountCoinList.load(e)}async getAccountCredits(t){const e=[];for(const i of await this.getAccountOutpoints(t)){var r=await this.getCredit(i.hash,i.index);r||(this.logger.warning("getAccountCredits: credit not found."),n(r)),e.push(r)}return e}async getSpentCredits(t){if(t.isCoinbase())return[];var e=t.hash("hex");const r=[];for(let e=0;e<t.inputs.length;e++)r.push(null);return await this.range({gte:l.d(e,0),lte:l.d(e,4294967295),parse:(e,i)=>{var[,e]=l.dd(e);const s=c.fromRaw(i);i=t.inputs[e],n(i),s.hash=i.prevout.hash,s.index=i.prevout.index,r[e]=new b(s)}}),r}async getCoins(t){const e=[];if(void 0!==t&&null!=t)for(const i of await this.getAccountOutpoints(t)){var r=await this.getCredit(i.hash,i.index);r||(this.logger.warning("getAccountCredits: credit not found."),n(r)),r.spent||e.push(r.coin)}else await this.range({gte:l.c(p.NULL_HASH,0),lte:l.c(p.HIGH_HASH,4294967295),parse:(t,r)=>{var[t,i]=l.cc(t);const s=b.fromRaw(r);r=u.toKey(t,i),s.coin.hash=t,s.coin.index=i,this.coinCache.set(r,s),s.spent||e.push(s.coin)}});return e}async getSpentCoins(t){if(t.isCoinbase())return[];const e=[];for(const r of await this.getSpentCredits(t))r?e.push(r.coin):e.push(null);return e}async getCoinView(t){const e=new o;if(!t.isCoinbase())for(const i of t.inputs){var r=i.prevout;(r=await this.getCoin(r.hash,r.index))&&e.addCoin(r)}return e}async getSpentView(t){const e=new o;if(!t.isCoinbase())for(const r of await this.getSpentCoins(t))r&&e.addCoin(r);return e}async getState(){var t=await this.get(l.R);return t?v.fromRaw(this.wallet.wid,this.wallet.id,t):null}async loadLockedCoins(){var t=this.walletdb.curHeight,e=i.now();for(const r of await this.wallet.getCredits()){let i=r.coin;i.getAddress()&&(i.lockedByLocktime(t,e)||i.lockedBySequence(t,e))&&this.addLocked(i)}}refreshLocked(t,e){for(const r of this.lockedCoins.values())r.lockedByLocktime(t,e)||r.lockedBySequence(t,e)||this.removeLocked(r)}addLocked(t){var e=l.prefix(this.wallet.wid,l.c(t.hash,t.index));this.lockedCoins.has(e)||(this.lockedCoins.set(e,t),this.changeLocked(this.pending,t,1))}removeLocked(t){var e=l.prefix(this.wallet.wid,l.c(t.hash,t.index));this.lockedCoins.has(e)&&(this.lockedCoins.delete(e),this.changeLocked(this.pending,t,-1))}async getTX(t){return(t=await this.get(l.t(t)))?g.fromRaw(t):null}async getDetails(t){return(t=await this.getTX(t))?this.toDetails(t):null}async toDetails(t){const e=[];if(!Array.isArray(t))return this._toDetail(t);for(const i of t){var r=await this._toDetail(i);r&&e.push(r)}return e}async _toDetail(t){var e=t.tx,r=t.getBlock();const i=new _(this,t,r);var s=await this.getSpentCoins(e);for(let t=0;t<e.inputs.length;t++){var n=s[t];let e=null;n&&(e=await this.getPath(n)),i.setInput(t,e,n)}for(let t=0;t<e.outputs.length;t++){var a=e.outputs[t];a=await this.getPath(a);i.setOutput(t,a)}return i}hasTX(t){return this.has(l.t(t))}async getCoin(t,e){return(t=await this.getCredit(t,e))?t.coin:null}async emitCoinSpent(t,e,r,i){(r={env:this.walletdb,block:i,tx:r,hash:t.prevout.hash,i:t.prevout.index,height:i.height,output:e,type:e.getReturnType(),data:e.getReturnData(S)}).data&&await k(r).spent(t)}async getCredit(t,e){var r=this.state,i=u.toKey(t,e);let s=this.coinCache.get(i);if(s)return s;if(s=await this.get(l.c(t,e))){const n=b.fromRaw(s);return n.coin.hash=t,n.coin.index=e,r===this.state&&this.coinCache.set(i,n),n}return null}async getSpentCoin(t,e){if(!(t=await this.get(l.d(t.hash,t.index))))return null;const r=c.fromRaw(t);return r.hash=e.hash,r.index=e.index,r}hasSpentCoin(t){return this.has(l.d(t.hash,t.index))}async updateSpentCoin(t,e,r){if(t=u.fromTX(t,e),e=await this.getSpender(t.hash,t.index)){const i=await this.getSpentCoin(e,t);i&&(i.height=r,this.put(l.d(e.hash,e.index),i.toRaw()))}}async hasCoin(t,e){var r=u.toKey(t,e);return!!this.coinCache.has(r)||this.has(l.c(t,e))}async getBalance(t){return null!=t?this.getAccountBalance(t):this.state.toBalance()}async getAccountBalance(t){var e=await this.getAccountCredits(t);const r=new y(this.wallet.wid,this.wallet.id,t);var i=this.walletdb.curHeight,s=this.network.now();for(const t of e){const e=t.coin;-2!==e.height&&(-1===e.height||e.isColored||(r.confirmed+=e.value),t.spent||e.isColored||(r.unconfirmed+=e.value),(e.lockedByLocktime(i,s)||e.lockedBySequence(i,s))&&this.changeLocked(r,e,1))}return r}async zap(t,e){n(i.isU32(e));var r=i.now();const s=[];for(const i of await this.getRange(t,{start:0,end:r-e}))-1===i.height&&(n(r-i.mtime>=e),this.logger.debug("Zapping TX: %s (%s)",i.tx.txid(),this.wallet.id),await this.remove(i.hash),s.push(i.hash));return s}async abandon(t){if(await this.has(l.p(t)))return this.remove(t)}}E.layout=l;class _{constructor(t,e,r){this.wallet=t.wallet,this.network=this.wallet.network,this.wid=this.wallet.wid,this.id=this.wallet.id,this.chainHeight=t.walletdb.curHeight,this.hash=e.hash,this.tx=e.tx,this.mtime=e.mtime,this.size=this.tx.getSize(),this.vsize=this.tx.getVirtualSize(),this.block=null,this.height=-1,this.time=0,r&&(this.block=r.hash,this.height=r.height,this.time=r.time),this.inputs=[],this.outputs=[],this.init()}init(){for(const t of this.tx.inputs){const e=new A;e.address=t.getAddress(),this.inputs.push(e)}for(const t of this.tx.outputs){const e=new A;e.value=t.value,e.address=t.getAddress(),this.outputs.push(e)}}setInput(t,e,r){const i=this.inputs[t];i.prevout=this.tx.inputs[t].prevout,r&&(i.value=r.value,i.address=r.getAddress()),e&&(i.path=e)}setOutput(t,e){const r=this.outputs[t];e&&(r.path=e)}getDepth(){var t;return-1===this.height||(t=this.chainHeight-this.height)<0?0:1+t}getFee(){let t=0,e=0;for(const e of this.inputs){if(!e.path)return 0;t+=e.value}for(const t of this.outputs)e+=t.value;return t-e}getRate(t){return f.getRate(this.vsize,t)}toJSON(){var t=this.getFee();let e=this.getRate(t);return Number.isSafeInteger(e)||(e=0),{wid:this.wid,id:this.id,hash:i.revHex(this.hash),height:this.height,block:this.block?i.revHex(this.block):null,time:this.time,mtime:this.mtime,date:i.date(this.time||this.mtime),size:this.size,virtualSize:this.vsize,fee:t,rate:e,confirmations:this.getDepth(),inputs:this.inputs.map(t=>t.getJSON(this.network)),outputs:this.outputs.map(t=>t.getJSON(this.network)),tx:this.tx.toRaw().toString("hex")}}}class A{constructor(){this.value=0,this.address=null,this.path=null}toJSON(){return this.getJSON()}getJSON(t){return{prevout:this.prevout?this.prevout.toJSON():null,value:this.value,address:this.address?this.address.toString(t):null,path:this.path?this.path.toJSON():null}}}t.exports=E},function(t,e,r){"use strict";
|
|
869
869
|
/*!
|
|
870
870
|
* rpc.js - bitcoind-compatible json rpc for vallnet.
|
|
871
871
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
872
872
|
* https://github.com/bookmansoft/gamegold
|
|
873
|
-
*/const i=r(0),s=r(320),n=r(73),a=r(122),o=r(96).walletdb,c=r(161),u=r(243),h=r(92),l=h.errors,p=h.MAGIC_STRING,f=r(91),d=r(63),m=r(109),g=r(1),y=r(196),v=r(3),b=r(78),w=r(34),x=r(17),k=r(7),S=r(6),E=r(28),_=r(12),A=r(32),R=r(133),I=r(59),j=r(46),C=r(19),P=r(138),O=r(139),{ContractType:T,ContractState:F,PropStatus:B,HtlcStatus:N}=r(5),D=r(140),L=r(125),H=r(124),z=H.Mnemonic,M=r(143);t.exports=class extends h{constructor(t){super(t),i(t,"RPC requires a WalletDB."),this.wdb=t,this.keys=t.keys,this.network=t.network,this.logger=t.logger.context("rpc"),this.client=t.client,this.init()}init(){this.add("sys.alliance.create",this.allianceCreate),this.add("sys.alliance.import",this.allianceImport),this.add("sys.alliance.delete",this.allianceDelete),this.add("sys.alliance.refresh",this.refreshAlliance),this.add("sys.alliance.refresh.async",this.refreshAllianceAsync),this.add("sys.alliance.gettoken",this.getAllianceNodeToken),this.add("sys.alliance.user",this.allianceUserCreate),this.add("wallet",this.routerOfWallet),this.add("wallet.create",this.mkwallet),this.add("wallet.backup",this.backup),this.add("wallet.exportmnemonic",this.exportMnemonic),this.add("wallet.export",this.dumpWallet),this.add("wallet.import",this.importWallet),this.add("wallet.list",this.getWallets),this.add("wallet.info",this.getWalletInfo),this.add("wallet.block",this.getWalletBlock),this.add("wallet.layouth",this.getWalletLayoutH),this.add("wallet.encrypt",this.encryptWallet),this.add("wallet.decrypt",this.decryptWallet),this.add("wallet.changepassphrase",this.changePassphrase),this.add("wallet.lock",this.walletLock),this.add("wallet.unlock",this.unlock),this.add("wallet.blocks",this.getblocks),this.add("wallet.auth",this.walletAuth),this.add("key",this.routerOfKey),this.add("key.export.private",this.dumpPrivKey),this.add("key.export.public",this.getKey),this.add("key.master.admin",this.masterkey),this.add("key.import.private",this.importPrivKey),this.add("key.import.public",this.importPubkey),this.add("key.import.address",this.importAddress),this.add("key.shared.add",this.addShared),this.add("key.shared.del",this.removeShared),this.add("account",this.routerOfAccount),this.add("account.list",this.listAccounts),this.add("account.get",this.accountGet),this.add("account.create",this.accountCreate),this.add("account.received",this.getReceivedByAccount),this.add("account.listreceived",this.listReceivedByAccount),this.add("balance.confirmed",this.getBalance),this.add("balance.all",this.getBalanceAll),this.add("balance.unconfirmed",this.getUnconfirmedBalance),this.add("balance.log",this.getBalanceLog),this.add("comm.notify",this.commNotify),this.add("comm.hash",this.calcHash),this.add("comm.listNotify",this.listNotify),this.add("comm.secret",this.sendSecret),this.add("comm.listContact",this.listContact),this.add("comm.scanContact",this.scanContact),this.add("comm.comment",this.sendComment),this.add("comm.comment.query",this.commentQuery),this.add("sys.walletdb.stop",this.stop),this.add("sys.walletnode.shutdown",this.shutdown),this.add("sys.walletdb.create",this.createWalletDb),this.add("sys.walletdb.destroy",this.destroyWalletDb),this.add("sys.zap",this.zap),this.add("sys.setfee",this.setTXFee),this.add("sys.message.sign",this.signMessage),this.add("sys.rescan",this.rescan),this.add("sys.log",this.sysLog),this.add("address",this.routerOfAddress),this.add("address.list",this.getAddressesByAccount),this.add("address.index",this.getAddressesByIndex),this.add("address.receive",this.getAccountAddress),this.add("address.change",this.getAccountChangeAddress),this.add("address.nested",this.getAccountNestedAddress),this.add("address.create",this.createAddress),this.add("address.create.admin",this.createAddressAdmin),this.add("address.receive.create",this.createAddress),this.add("address.change.create",this.createChange),this.add("address.nested.create",this.createNested),this.add("address.import",this.importAddress),this.add("address.key.admin",this.getPrivKey),this.add("address.wif.admin",this.getwif),this.add("address.has",this.hasAddress),this.add("address.amount",this.getReceivedByAddress),this.add("address.account",this.getAccount),this.add("address.received",this.getReceivedByAddress),this.add("address.received.list",this.listReceivedByAddress),this.add("cp",this.routerOfCp),this.add("cp.create",this.cpRegister),this.add("cp.create.async",this.cpRegisterAsync),this.add("cp.change",this.cpChange),this.add("cp.query",this.cpQuery),this.add("cp.mine",this.cpMine),this.add("cp.x509",this.cpX509),this.add("cp.user",this.getUserToken),this.add("sc",this.routerOfSc),this.add("sc.register",this.scRegister),this.add("sc.run",this.scRun),this.add("ca",this.routerOfCa),this.add("ca.issue",this.caIssue),this.add("ca.user.status",this.caUserStatus),this.add("ca.user.log",this.caUserLog),this.add("ca.abolish",this.caAbolish),this.add("ca.enchance",this.enchanceCp),this.add("ca.list.me",this.queryMyErlist),this.add("ca.issue.async",this.caIssueAsync),this.add("ca.abolish.async",this.caAbolishAsync),this.add("ca.issue.public",this.caIssuePublic),this.add("ca.abolish.public",this.caAbolishPublic),this.add("order",this.routerOfOrder),this.add("order.setGuider",this.setGuider),this.add("order.getGuider.wallet",this.getGuider),this.add("order.pay",this.payOrder),this.add("order.query.wallet",this.queryOrderList),this.add("prop",this.routerOfProp),this.add("prop.create",this.propCreate),this.add("prop.send",this.propExchange),this.add("prop.donate",this.propDonate),this.add("prop.receive",this.propReceive),this.add("prop.createlist",this.propCreateList),this.add("prop.sendlist",this.propSendList),this.add("prop.order",this.propOrder),this.add("prop.found",this.propFound),this.add("prop.sale",this.propSale),this.add("prop.buy",this.propBuy),this.add("prop.getbyid",this.propGet),this.add("prop.getbyoid",this.propGetByOid),this.add("prop.getbyaddress",this.propGetByAddress),this.add("contract",this.routerOfContract),this.add("contract.create",this.contractCreate),this.add("contract.promise",this.contractPromise),this.add("contract.execute",this.contractExecute),this.add("contract.mine",this.contractOfMine),this.add("htlc",this.routerOfHTLC),this.add("htlc.suggest",this.htlcSuggest),this.add("htlc.suggest.cancel",this.htlcSuggestCancel),this.add("htlc.suggest.deal",this.htlcSuggestDeal),this.add("htlc.assent",this.htlcAssent),this.add("htlc.assent.cancel",this.htlcAssentCancel),this.add("htlc.assent.deal",this.htlcAssentDeal),this.add("htlc.query",this.htlcQuery),this.add("vote.send",this.sendVote),this.add("vote.send.async",this.sendVoteAsync),this.add("oracle.send",this.sendOracle),this.add("stock.offer",this.stockOffer),this.add("stock.purchase",this.stockPurchase),this.add("stock.purchaseTo",this.stockPurchaseTo),this.add("stock.send",this.stockSend),this.add("stock.bid",this.stockBid),this.add("stock.auction",this.stockAuction),this.add("stock.list.wallet",this.stockList),this.add("stock.record.wallet",this.stockRecordList),this.add("tx.get.wallet",this.getTransaction),this.add("tx.list",this.listTransactions),this.add("tx.create",this.createTX),this.add("tx.send",this.sendTX),this.add("tx.send.async",this.sendTXAsync),this.add("tx.last",this.getLast),this.add("tx.pending",this.getPending),this.add("tx.pending.get",this.getPendingItem),this.add("tx.pending.hash",this.getPendingHash),this.add("tx.pending.count",this.getPendingCount),this.add("tx.resend.admin",this.resendWalletTransactions),this.add("tx.mstrans",this.listMSTrans),this.add("tx.mstrans.sign",this.signMSTrans),this.add("tx.history",this.getHistory),this.add("tx.history.since",this.listSinceBlock),this.add("tx.range",this.getRange),this.add("tx.abandon.admin",this.abandonTransaction),this.add("tx.abandonall.admin",this.abandonPending),this.add("tx.importprunedfunds.admin",this.importPrunedFunds),this.add("tx.removeprunedfunds.admin",this.removePrunedFunds),this.add("tx.resendall.admin",this.resend),this.add("tx.sign.admin",this.signTX),this.add("tx.fund.admin",this.fundRawTransaction),this.add("coin",this.routerOfCoin),this.add("coin.get",this.getCoin),this.add("coin.spender",this.getSpender),this.add("coin.cache",this.getCoincacheSize),this.add("coin.list",this.listUnspent),this.add("coin.selectone",this.selectone),this.add("coin.conserved.get",this.getConservedCoins),this.add("coin.conserved.add",this.conserveCoin),this.add("coin.conserved.del",this.unConserveCoin),this.add("coin.conserved.list",this.listConservedUnspent),this.add("coin.conserved.oper.list",this.listOperUnspent),this.add("coin.locked.list",this.listLockedUnspent)}async routerOfCoin(t){throw new f(l.MISC_ERROR,"\n coin.get 查询硬币-UTXO\n coin.spender 查询硬币的消费者\n coin.list 列表硬币-UTXO\n coin.conserved.get 获取钱包保持的Coin的信息\n coin.conserved.add 钱包增加需要保持的Coin\n coin.conserved.del 钱包减少需要保持的Coin\n coin.conserved.list 列表钱包保持的UTXO\n coin.conserved.oper.list 批量锁定/解锁一组UTXO \n coin.locked.list 列表目前交易层锁定的UTXO\n ")}async routerOfContract(t){throw new f(l.MISC_ERROR,"\n contract.create 发布交易对合约\n contract.promise 签署交易对合约\n contract.execute 执行交易对合约\n contract.mine 获取已签署交易对合约列表\n contract.list 查询并返回交易对\n ")}async routerOfHTLC(t){throw new f(l.MISC_ERROR,"\n htlc.suggest 发布跨链合约\n htlc.suggest.deal 兑现合约\n htlc.suggest.cancel 取消合约\n htlc.assent 响应跨链合约\n htlc.assent.deal 兑现响应\n htlc.assent.cancel 取消响应\n htlc.query 查询合约\n ")}async routerOfWallet(t){throw new f(l.MISC_ERROR,"\n wallet.create 创建钱包\n wallet.list 列表钱包\n wallet.info 查询钱包概要\n wallet.block 查询区块信息\n wallet.exportmnemonic 导出钱包助记词备份\n wallet.export 导出钱包备份\n wallet.import 导入钱包备份\n wallet.backup 备份钱包库\n wallet.encrypt 将主私钥永久加密\n wallet.decrypt 将主私钥永久解密\n wallet.changepassphrase 在主私钥已经加密的情况下,修改其加密密码,要提交旧/新两个密码。如果尚未加密则执行失败\n wallet.lock 在主私钥已加密的前提下,清理内存中的密钥信息以确保锁定,相当于手工执行自动锁定\n wallet.unlock 在主私钥已加密的前提下,解密主私钥,持续一段时间后自动锁定\n wallet.blocks 列表钱包相关区块\n ")}async routerOfAddress(t){throw new f(l.MISC_ERROR,"\n address.list 列表指定账户下地址\n address.receive 列表指定账户下收款地址\n address.change 列表指定账户下找零地址\n address.nested 列表指定账户下嵌套地址\n address.create 创建一个收款地址\n address.create.admin 创建一个收款地址,回显私钥\n address.receive.create 创建一个收款地址\n address.change.create 创建一个找零地址\n address.nested.create 创建一个嵌套地址\n address.import 导入一个地址\n address.key.admin 查询地址的密钥\n address.amount 查询指定地址上的余额\n address.account 查询指定地址对应的账户\n address.wif.admin 查询地址对应的私钥\n address.has 判断钱包是否包含地址\n address.received 根据地址查询进项总额\n address.received.list 根据地址查询进项\n address.filter 在订单流水中,查询符合筛选条件的地址集\n ")}async routerOfAccount(t){throw new f(l.MISC_ERROR,"\n account.list 列表账户\n account.get 查询账户\n account.create 创建账户\n account.received 查询收款总额\n account.listreceived 列表收款记录\n balance.confirmed 已确认余额\n balance.all 余额\n balance.unconfirmed 未确认余额\n balance.log 查询指定账户变更日志\n ")}async routerOfKey(t){throw new f(l.MISC_ERROR,"\n key.export.private 根据输入地址,导出私钥\n key.export.public 根据输入地址,打出公钥\n key.master.admin 导出根密钥和助记词, 注意 encrypt 状态下无法导出私钥\n key.import.private 导入私钥\n key.import.public 导入公钥\n key.import.address 导入地址\n key.shared.add 新增共享公钥\n key.shared.del 删除共享公钥\n ")}async routerOfCp(t){throw new f(l.MISC_ERROR,"\n cp.create 创建CP记录\n cp.change 修改CP记录\n cp.snap 查询CP历史快照\n cp.sps 查询CP权证列表\n cp.remoteQuery 查询全节点中的CP列表\n cp.query 查询本地CP列表\n cp.byClass 根据游戏类别查询CP记录\n cp.byName 根据名称查询CP记录\n cp.byId 根据ID查询CP记录\n cp.mine 当前操作员注册的CP\n cp.x509 为CP创建根证书\n cp.user 生成用户令牌(钱包)\n ")}async routerOfSc(t){throw new f(l.MISC_ERROR,"\n sc.model 查询托管合约模板列表\n sc.register 指定托管合约模板,创建新的实例\n sc.query 查询托管合约实例列表\n sc.run 调用托管合约实例\n ")}async routerOfCa(t){throw new f(l.MISC_ERROR,"\n ca.issue 电子证书签发\n ca.abolish 电子证书废止记录\n ca.verify 电子证书验证\n ca.user.status 根据企业证书编号和用户编号查询\n ca.user.log 根据企业证书编号和用户编号查询日志\n ca.enchance CA机构间增信\n ca.rank 查询CA信用等级\n ca.list 查询电子证书列表\n ca.list.ab 查询电子证书废止记录列表\n ca.list.me 查询钱包内证书列表\n ")}async routerOfOrder(t){throw new f(l.MISC_ERROR,"\n order.pay 支付订单(钱包)\n order.query 查询订单记录\n order.query.admin 查询订单列表(特约节点)\n order.query.wallet 查询订单列表(钱包)\n order.setGuider 为指定厂商、指定用户设定推广员\n order.getGuider 查询指定地址对应的推广员\n order.getGuider.wallet 查询指定地址对应的推广员\n order.queryGuider 查询指定推广员的推广统计\n ")}async routerOfProp(t){throw new f(l.MISC_ERROR,"\n prop.create 创建道具\n prop.send 转移道具\n prop.donate 捐赠道具\n prop.receive 接收捐赠道具\n prop.createlist 批量创建道具\n prop.sendlist 批量转移道具\n prop.order 订购:制备并发送\n prop.found 熔铸道具\n prop.sale 拍卖道具\n prop.buy 购买道具\n prop.getbyid 根据PID查询自己拥有的道具\n prop.getbyoid 根据OID查询自己拥有的道具\n prop.getbyaddress 根据current.address查询自己拥有的道具\n ")}async allianceCreate(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"sys.alliance.create password nodeid alliancename (host): 创建联盟节点证书 备份密码 节点编号 盟友名称 (节点地址)");const i=new b([t]);t=i.str(0);var s=i.uint(1,0),n=i.str(2,""),a=i.str(3,"");if(!s||!t)throw new f(l.MISC_ERROR,"节点编号、备份密码都不能为空");let[o,c]=await this.accessControl(r,""),h=(await o.ensureAccount({name:"alliance",witness:!0}),await o.createReceive("alliance",1,o.master));var p=h.getAddress("string"),g=S.hash256(Buffer.concat([Buffer.from(n+"-"+s),o.master.key.privateKey]));const y=new z({entropy:g,language:o.master.mnemonic.language,passphrase:o.master.mnemonic.passphrase});g=u.fromKey(H.fromMnemonic(y),this.network.type).key.deriveAccount(44,0).derive(9).derive(1);const v=S.hash256(Buffer.concat([Buffer.from(n),o.master.key.privateKey]));if(g={body:{language:y.language,phrase:y.getPhrase(),passphrase:y.passphrase,alliancePrivateKey:v.toString("hex"),allianceName:n,allianceNodeId:s,awardAddress:_.fromWitnessPubkeyhash(S.hash160(g.publicKey),this.network.type).toString(this.network.type),allianceNodeToken:await this.getAllianceNodeToken([s,n],e,r),notifyAddress:p},password:t,network:this.network.type,file:this.network.type+`-${n}-${s}.keystore`},e=L.encrypt(g),this.wdb.$parent){let r=!1;for(var w of this.wdb.$parent.config.alliances)if((w=w.split("|"))[0]==n&&w[1]==s){r=!0;break}r||(this.wdb.$parent.config.alliances.push(`${n}|${s}|${e}|${t}|${g.body.awardAddress}|`+a),await this.wdb.$parent.config.saveAsync()),a&&this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([a,g.body.allianceNodeToken.pub])}return r={host:a,key:g.body.allianceNodeToken.pub},t=m.signObj(r,h.privateKey),await o.commNotify({dst:h.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:r,sig:t,pub:h.publicKey.toString("hex")})}),await d.writeFile(g.file,e,"utf8"),r=(await o.getAccount(c)).getReceive().toString(),await this.wdb.logAudit({address:r,oper:"node.create",hash:n+"."+s,index:0}),{nodeid:s,alliancename:n,publicKey:u.fromKey(H.fromMnemonic(y),this.network.type).key.publicKey.toString("hex"),host:a,peerPubkey:g.body.allianceNodeToken.pub,awardAddress:g.body.awardAddress,file:g.file,notifyAddress:p}}async allianceImport(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"sys.alliance.import password nodeid alliancename key (host): 导入联盟节点 备份密码 节点编号 盟友名称 节点公钥 (节点地址)");const i=new b([t]);t=i.str(0);var s=i.uint(1,0),n=i.str(2,""),a=i.str(3,""),o=i.str(4,"");if(!s||!t||!a)throw new f(l.MISC_ERROR,"节点编号、备份密码、节点公钥都不能为空");let[c,u]=await this.accessControl(r,""),h=(await c.ensureAccount({name:"alliance",witness:!0}),await c.createReceive("alliance",1,c.master));var p=h.getAddress("string");if(e={body:{alliancePrivateKey:S.hash256(Buffer.concat([Buffer.from(n),c.master.key.privateKey])).toString("hex"),allianceName:n,allianceNodeId:s,allianceNodeToken:await this.getAllianceNodeToken([s,n],e,r),awardAddress:_.fromWitnessPubkeyhash(S.hash160(Buffer.from(a,"hex")),this.network.type).toString(this.network.type),notifyAddress:p},password:t,network:this.network.type,file:this.network.type+`-${n}-${s}.keystore`},r=L.encrypt(e),this.wdb.$parent){let i=!1;for(var g of this.wdb.$parent.config.alliances)if((g=g.split("|"))[0]==n&&g[1]==s){i=!0;break}i||(this.wdb.$parent.config.alliances.push(`${n}|${s}|${r}|${t}|${e.body.awardAddress}|`+o),await this.wdb.$parent.config.saveAsync()),o&&this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([o,e.body.allianceNodeToken.pub])}t={host:o,key:e.body.allianceNodeToken.pub};var y=m.signObj(t,h.privateKey);return await c.commNotify({dst:h.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:t,sig:y,pub:h.publicKey.toString("hex")})}),await d.writeFile(e.file,r,"utf8"),t=(await c.getAccount(u)).getReceive().toString(),await this.wdb.logAudit({address:t,oper:"node.create",hash:n+"."+s,index:0}),{nodeid:s,alliancename:n,publicKey:a,host:o,peerPubkey:e.body.allianceNodeToken.pub,awardAddress:e.body.awardAddress,file:e.file,notifyAddress:p}}async refreshAlliance(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.refresh amount: 为联盟成员批量充值 充值金额");var i=new b([t]).uint(0,0);if(i<1e4||5e9<i)throw new f(l.MISC_ERROR,"无效的充值金额(10000~5000000000)");let[s,n]=await this.accessControl(r);if(this.wdb.$parent)for(var a of this.wdb.$parent.config.alliances){a=a.split("|"),_.fromString(a[4],this.network.type).isWitnessPubkeyhash()&&await s.send({outputs:[{address:a[4],value:i}]},n);var o=L.decrypt({network:this.network.type,password:a[3],body:a[2]});this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([a[5],o.allianceNodeToken.pub]),await s.ensureAccount({name:"alliance",witness:!0});let t=await s.createReceive("alliance",1,s.master);a={host:a[5],key:o.allianceNodeToken.pub},o=m.signObj(a,t.privateKey),await s.commNotify({dst:t.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:a,sig:o,pub:t.publicKey.toString("hex")})})}}async refreshAllianceAsync(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.refresh.async amount: 为联盟成员批量充值 充值金额");var i=new b([t]).uint(0,0);if(i<1e4||5e9<i)throw new f(l.MISC_ERROR,"无效的充值金额(10000~5000000000)");let[s,n]=await this.accessControl(r);if(this.wdb.$parent)for(var a of this.wdb.$parent.config.alliances){a=a.split("|"),_.fromString(a[4],this.network.type).isWitnessPubkeyhash()&&s.send({outputs:[{address:a[4],value:i}]},n);var o=L.decrypt({network:this.network.type,password:a[3],body:a[2]});this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([a[5],o.allianceNodeToken.pub]),await s.ensureAccount({name:"alliance",witness:!0});let t=await s.createReceive("alliance",1,s.master);a={host:a[5],key:o.allianceNodeToken.pub},o=m.signObj(a,t.privateKey),s.commNotify({dst:t.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:a,sig:o,pub:t.publicKey.toString("hex")})})}}async allianceDelete(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"sys.alliance.delete nodeid alliancename: 删除联盟节点证书 节点编号 盟友名称");const i=new b([t]);var s=i.uint(0,0),n=i.str(1,"");let[a,o]=await this.accessControl(r,"");if(!s||!n)throw new f(l.MISC_ERROR,"节点编号、节点名称都不能为空");if(this.wdb.$parent)for(let t=0;t<this.wdb.$parent.config.alliances.length;t++){var c=this.wdb.$parent.config.alliances[t].split("|");c[0]==n&&c[1]==s&&(this.wdb.$parent.config.alliances.splice(t,1),await this.wdb.$parent.config.saveAsync(),c[5]&&await this.wdb.$parent.rpc.delPeer([c[5]]))}return e=(await a.getAccount(o)).getReceive().toString(),await this.wdb.logAudit({address:e,oper:"node.delete",hash:n+"."+s,index:0}),!0}async getAllianceNodeToken(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.gettoken (nodeid alliancename): 创建联盟节点信道密钥 (节点编号 盟友名称)");const i=new b([t]);e=i.uint(0,0),t=i.str(1);var[r]=await this.accessControl(r);let s=z.fromOptions(r.master.mnemonic),n=(t&&(o=S.hash256(Buffer.concat([Buffer.from(t+"-"+e),r.master.key.privateKey])),s=new z({entropy:o,language:r.master.mnemonic.language,passphrase:r.master.mnemonic.passphrase})),S.hash256(Buffer.from(s.toSeed().toString("hex")))),a=E.publicKeyCreate(n,!0);var o=_.fromWitnessPubkeyhash(S.hash160(a),this.network.type).toString();return{network:this.network.type,alliancename:t,sn:e,prv:n.toString("hex"),pub:a.toString("hex"),address:o}}async allianceUserCreate(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.user cid uid (alliancename): 创建企业用户 企业编号 用户编号 (盟友名称)");return this.$allianceUserCreate(t,r)}async $allianceUserCreate(t,e,r){const i=new b([t]);t=i.str(0);var s=i.uint(1),n=i.str(2,"");let a=null,o=null;o=n?([e]=await this.accessControl(e),S.hash256(Buffer.concat([Buffer.from(n),e.master.key.privateKey]))):Buffer.from(this.wdb.$parent.config.alliancePrivateKey,"hex"),n=A.fromPrivate(o,!0,this.network);let c=A.fromPrivate(S.hash256(Buffer.concat([Buffer.from(t+"-"+s),n.privateKey]),!0,this.network));return c.witness=!0,a=c.signData({cid:t,uid:s}),r&&(a.prvkey=c.privateKey.toString("hex")),a}async isReady(t){return this.wdb.isFull()}async shutdown(t,e){return this.wdb.$parent&&this.wdb.$parent.close().catch(t=>{setImmediate(()=>{throw t})}).finally(async()=>{await new Promise(t=>{setTimeout(t,1e4)}),process.exit(0)}),"Stopping."}async stop(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"sys.walletdb.stop");return this.wdb.close(),"Stopping walletdb..."}async destroyWalletDb(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"sys.walletdb.destroy: 删除钱包数据库");return await this.wdb.close(),await this.wdb.destroy(),"Destroyed."}async createWalletDb(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"sys.walletdb.create: 删除原有钱包数据库并重建");return await this.wdb.close(),await this.wdb.destroy(),await this.wdb.open(),"Created."}async fundRawTransaction(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'tx.fund.admin "hexstring" ( options openid )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.buf(0),t=i.obj(1),!e)throw new f(l.TYPE_ERROR,"Invalid hex string.");const a=I.fromRaw(e);if(0===a.outputs.length)throw new f(l.INVALID_PARAMETER,"TX must have at least one output.");let o=null,c=null;if(t){const e=new b([t]);o=e.ufixed("feeRate",8),c=(c=e.str("changeAddress"))&&h.parseAddress(c,this.network)}return await s.fund(a,{rate:o,changeAddress:c,account:n}),{hex:a.toRaw().toString("hex"),changepos:a.changeIndex,fee:w.btc(a.getFee(),!0)}}async backup(t,e,r){if(t=new b([t]).str(0))return await this.wdb.backup(t),!0;throw new f(l.MISC_ERROR,'backup "destination"')}async dumpPrivKey(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"key.export.private address [account]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(e=i.str(0,""),!await s.belongToAccount(n,e))throw new f(l.MISC_ERROR,"Invald Account.");t=h.parseHash(e,this.network);const a=await s.getPrivateKey(t);if(a)return a.toSecret();throw new f(l.MISC_ERROR,"Key not found.")}async exportMnemonic(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,"wallet.exportmnemonic password: 备份钱包助记符 备份密码");const i=new b([t]);let[s,n]=await this.accessControl(r);if(e=i.str(0),"primary"==s.id&&"default"!=n)throw new f(l.MISC_ERROR,"wallet.exportmnemonic: Invalid Account");let a={body:{phrase:s.master.mnemonic.getPhrase(),language:s.master.mnemonic.language,passphrase:s.master.mnemonic.passphrase},password:e,network:this.network,file:`./${this.network.type}-wallet${s.db.options.spv?"-spv":""}.keystore`};return this.wdb.$parent&&(a.body.awardAddress=this.wdb.$parent.config.coinbaseAddress),await L.writeEncryptFile(a),!0}async dumpWallet(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'wallet.export "filename"');const i=new b([t]);let[s,n]=await this.accessControl(r);if("primary"==s.id&&"default"!=n)throw new f(l.MISC_ERROR,"Invalid Account");if(e=i.str(0))return await s.exportToFile({file:e}),!0;throw new f(l.TYPE_ERROR,"Invalid filename.")}async encryptWallet(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'wallet.encrypt "passphrase"');const i=new b([t]);let[s,n]=await this.accessControl(r);if(e=i.str(0,""),"primary"==s.id&&"default"!=n)throw new f(l.MISC_ERROR,"Invalid Account");if(s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Already running with an encrypted wallet.");if(e.length<1)throw new f(l.MISC_ERROR,'wallet.encrypt "passphrase"');try{await s.setPassphrase(null,e)}catch(t){throw new f(l.WALLET_ENCRYPTION_FAILED,"Encryption failed.")}return"wallet encrypted"}async getAccount(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'address.account "address"');const i=new b([t]);let[s,n]=await this.accessControl(r);return("primary"!=s.id||"default"==n)&&(e=i.str(0,""),t=h.parseHash(e,this.network),r=await s.getPath(t))?r.name:""}async getAddressesByIndex(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'address.index "index"');const i=new b([t]);let[s,n]=await this.accessControl(r);if("primary"!=s.id||"default"==n){var a=i.uint(0);for(const t of await s.getPaths("default")){const e=t.toAddress();if(0==t.branch&&t.index==a)return e.toString(this.network)}}}async accessControl(t,e){let r=await this.wdb.get("primary");if(this.wdb.options.acl.isRoot(t.options.cid))"primary"!==t.options.wid?(r=await this.wdb.get(t.options.wid),e=null):"*"===(e=e||"default")&&(e=null);else if("primary"!==t.options.wid){if(!await r.belongToAccount(t.options.cid,t.options.wid))throw new f(l.TYPE_ERROR,"Invalid wid.");r=await this.wdb.get(t.options.wid),e=null}else e=t.options.cid;return await r.ensureAccount({name:e,witness:!0}),[r,e]}async getAddressesByAccount(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.list "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=[],o=[],c=[];for(const t of await s.getPaths(n)){const e=t.toAddress();(0==t.branch?a:1==t.branch?o:c).push(e.toString(this.network))}return[a,o,c]}async getAccountAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.receive "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);if(a)return a.receive.getAddress("string")}async getAccountChangeAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.change.list "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);if(a)return a.change.getAddress("string")}async getAccountNestedAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.nested.list "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);if(a)return a.nested.getAddress("string")}async getBalance(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,'balance.confirmed ( "account" minconf includeWatchonly )');const i=new b([t]);let s,[n,a]=await this.accessControl(r,i.str(0,""));return e=i.u32(1,1),t=i.bool(2,!1),n.watchOnly!==t?0:(r=await n.getBalance(a),s=0<e?r.confirmed:r.unconfirmed,w.btc(s,!0))}async getBalanceLog(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'balance.log "account" (height)');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0));return e=i.uint(1,0),s.queryBalanceLog(n,e)}async getBalanceAll(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,'balance.all ( "account" minconf includeWatchonly )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0));return(await s.getBalance(n)).toJSON()}async getUserToken(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"cp.user cid uid: 生成登录令牌 厂商编码 用户编码");const i=new b([t]);e=i.str(0),t=i.str(1);let[s]=await this.accessControl(r);return s.tokenCreate({cid:e,uid:t},t)}async masterkey(t,e,r){let[i,s]=await this.accessControl(r);if("primary"==i.id||"default"==s)return i.master.toJSON(!0)}async getHistory(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,"tx.history (page acct):查询交易历史记录 (页码 账号)");const i=new b([t]);var s=i.uint(0,1);if(s<1)throw new f(l.MISC_ERROR,"页面必须是大于0的数字");let[a,o]=await this.accessControl(r,i.str(1));var c;e=await a.getHistory(o);n.sortTX(e);let u=0,h=[];for(c of e){if(u<10*(s-1));else{if(u>=10*s)break;h.push(c)}u++}t=await a.toDetails(h);const p={};return p.items=t,p.pageSize=10,p.pageNum=s,p.total=e.length,p}async stockOffer(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.offer cid amount price (openid): 发行凭证 厂商编码 发行总量 发行单价 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,""),!(t=i.uint(1,0))||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_ADDED_SINGLE)throw new f(l.MISC_ERROR,`stock.offer amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_ADDED_SINGLE);if(!(r=i.uint(2,0))||r<k.GRAM||r>k.STOCK_MAX_PRICE)throw new f(l.MISC_ERROR,`stock.offer price error: must over ${k.GRAM} and less `+k.STOCK_MAX_PRICE);return s.stockOffer(e,t,r,n)}async stockPurchase(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"stock.purchase cid amount (openid): 购买凭证 厂商编码 购买量 (资金账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.str(0,""),!(t=i.uint(1,0))||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);return s.stockPurchase(e,t,n)}async stockPurchaseTo(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.purchaseTo cid amount dst (src): 代买凭证 厂商编码 购买量 目标账号 (资金账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,""),t=i.uint(1,0),r=i.str(2,""),!t||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);let a={};return a.order=await s.stockPurchaseTo(e,t,r,n),a}async stockSend(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.send cid amount recvaddr (openid sendaddr): 转让凭证 厂商编码 转让量 接收地址 (玩家账号 发送地址)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0,""),t=i.uint(1,0),r=i.str(2,null);var a=i.str(4,null);if(!t||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`stock.send amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);return s.stockSend(e,t,r,n,a)}async stockBid(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.bid cid amount price (openid srcAddr): 转让凭证 厂商编码 转让总量 转让单价 (玩家账户 凭证账户地址)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0,""),t=i.uint(1,0),r=i.uint(2,0);var a=i.str(4,"");if(!t||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`stock.bid amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);return s.stockBid(e,t,r,n,a)}async stockAuction(t,e,r){if(e||t.length<4)throw new f(l.MISC_ERROR,"stock.auction cid addr amount price (openid): 购买凭证 CP编号 转让者地址 购买量 价格 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.str(0,""),t=i.str(1,""),r=i.uint(2);var a=i.uint(3);if(!r||r<k.STOCK_TRADE_SINGLE)throw new f(l.MISC_ERROR,"stock.auction amount error: must over "+k.STOCK_TRADE_SINGLE);if(a)return s.stockAuction(e,t,r,a,n);throw new f(l.MISC_ERROR,"stock.auction price error")}async stockList(t,e,r){if(e)throw new f(l.MISC_ERROR,"stock.list.wallet conditions: 我的凭证列表 查询条件");return e=new b([t]).array(0,[]),this.wdb.accountList.query(e)}async stockRecordList(t,e,r){if(e)throw new f(l.MISC_ERROR,"stock.record.wallet type (cid height conditions): 查询凭证流水 流水类型(0代表全部类型) (厂商编号 最小高度 组合查询条件)");const i=new b([t]);let[s]=await this.accessControl(r);e=i.uint(0,0),t=i.str(1),r=i.uint(2,0);var n,a,o,c=i.array(3,[]);let u=null;for([n,a]of(u=e?await s.db.getStockRecord(e,t,r):await s.db.getStockRecordByCid(t,r)).data)a.account||(o=await s.getAccountByAddress(a.addr))&&(a.wid=o.wid,a.account=o.name,u.set(a.itemNo,a));return u.query(c)}async sendSecret(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"comm.secret dst message (openid): 安全通信消息 收信地址 信息内容 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,""),t=i.str(1,""),h.parseAddress(e,this.network))return s.sendSecret(e,t,n);throw new f(l.TYPE_ERROR,"Invalid Destination Address.")}async calcHash(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"comm.hash content: 计算输入的哈希值");return e=new b([t]).str(0,""),S.hash256(Buffer.from(e)).toString("hex")}async commNotify(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"comm.notify addr content (openid): 发送点对点消息 地址 内容 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));return e=i.str(0,""),t=i.obj(1,{}),s.commNotify({dst:e,content:t,account:n})}async setGuider(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"order.setGuider src cid dst: 设定推广员 推广员地址 厂商编码 目标用户地址(逗分) [支付账号]");const i=new b([t]);var[,t]=await this.accessControl(r,i.str(3)),s=i.str(0,""),n=i.str(1,"");let a=i.array(2,[]);return 1==a.length&&await this.wdb.getGuider(a[0])==s?null:this.createTX([{comment:{oper:"greg",addr:s,cid:n}},a.map(t=>({address:t,value:1e4})),t],e,r)}async getGuider(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"order.getGuider.wallet dst: 查询推广员 目标用户地址");return e=new b([t]).str(0,""),this.wdb.getGuider(e)}async payOrder(t,e,r){if(e||t.length<4)throw new f(l.MISC_ERROR,"order.pay cid uid sn sum (openid): 支付订单 厂商编码 玩家游戏内编码 订单编码 总额 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.str(0,""),t=i.str(1,""),r=i.str(2,"");var a=i.uint(3,0);return s.payOrder(e,t,r,a,n)}async scanContact(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'comm.scanContact "txid" ( index )');const s=new b([t]);let[n]=await this.accessControl(r);if(e=s.hash(0),i(e,"Hash is required."),t=s.uint(1,-1),!e)throw new f(l.TYPE_ERROR,"Invalid parameter");if(r=await n.getTX(e))return this.wdb.scanContact(r.tx,t);throw new f(l.WALLET_ERROR,"TX not found.")}async listContact(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.listContact: 列表联系人");return e=new b([t]).array(0,[]),this.wdb.listContact(e,null,["address"])}async listNotify(t,e,r){if(e)throw new f(l.MISC_ERROR,"comm.listNotify (query): 通知列表 (查询条件,使用 account 参数可分账号查询)");return e=new b([t]).array(0,[]),this.wdb.listNotify(e)}async queryOrderList(t,e,r){if(e)throw new f(l.MISC_ERROR,"order.query.wallet (conditions account): 支付订单列表 (查询条件 子账户)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));return e=i.array(0,[]),s.getOrderList(e,n)}async getReceivedByAccount(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'account.received "account" ( minconf )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));var a=i.u32(1,0),o=this.wdb.curHeight;e=await s.getPaths(n);const c=new Set;for(const t of e)c.add(t.hash);let u=0,h=-1;for(const t of await s.getHistory(n)){var p=t.getDepth(o);if(!(p<a)){(-1===h||p<h)&&(h=p);for(const e of t.tx.outputs){var d=e.getHash("hex");d&&c.has(d)&&(u+=e.value)}}}return w.btc(u,!0)}async getReceivedByAddress(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'address.received "address" ( minconf )');const i=new b([t]);let[s]=await this.accessControl(r);e=i.str(0,"");var n=i.u32(1,0),a=this.wdb.curHeight,o=h.parseHash(e,this.network);let c=0;for(const t of await s.getHistory())if(!(t.getDepth(a)<n))for(const e of t.tx.outputs)e.getHash("hex")===o&&(c+=e.value);return w.btc(c,!0)}async _toWalletTX(t,e){let[r]=await this.accessControl(t);const i=await r.toDetails(e);if(!i)throw new f(l.WALLET_ERROR,"TX not found.");let s=!0;for(const t of i.inputs)if(t.path){s=!1;break}const n=[];let a=0,o=0;for(let t=0;t<i.outputs.length;t++){const e=i.outputs[t];e.path?1!==e.path.branch&&(n.push({account:e.path.name,address:e.address.toString(this.network),category:"receive",amount:w.btc(e.value,!0),label:e.path.name,vout:t}),o+=e.value):s||(n.push({account:"",address:e.address?e.address.toString(this.network):null,category:"send",amount:-w.btc(e.value,!0),fee:-w.btc(i.getFee(),!0),vout:t}),a+=e.value)}return{amount:w.btc(s?o:-a,!0),confirmations:i.confirmations,blockhash:i.block?g.revHex(i.block):null,blockindex:i.index,blocktime:i.time,txid:g.revHex(i.hash),walletconflicts:[],time:i.mtime,timereceived:i.mtime,"bip125-replaceable":"no",details:n,hex:i.tx.toRaw().toString("hex")}}async getTransaction(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'gettransaction "txid" ( includeWatchonly )');const s=new b([t]);let[n]=await this.accessControl(r);if(e=s.hash(0),i(e,"Hash is required."),t=s.bool(1,!1),!e)throw new f(l.TYPE_ERROR,"Invalid parameter");if(e=await n.getTX(e))return this._toWalletTX(r,e,t);throw new f(l.WALLET_ERROR,"TX not found.")}async abandonPending(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.abandonall.admin [account]: 废弃所有挂起的交易");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));for(const e of await s.getPending(n))try{await s.abandon(e.hash)}catch(t){this.logger.warning(t.message)}return null}async abandonTransaction(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'tx.abandon.admin "txid"');const i=new b([t]);let[s]=await this.accessControl(r);if(!(e=i.hash(0)))throw new f(l.TYPE_ERROR,"Invalid parameter.");if(await s.abandon(e))return null;throw new f(l.WALLET_ERROR,"Transaction not in wallet.")}async getUnconfirmedBalance(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,"balance.unconfirmed");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=await s.getBalance(n),w.btc(e.unconfirmed,!0)}async importPrivKey(t,e,r){if(e||t.length<1||4<t.length)throw new f(l.MISC_ERROR,'key.import.private account "privatekey" passphrase [rescan]');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));e=i.str(1),t=i.str(2),r=i.bool(3,!1);const a=h.parseSecret(e,this.network);return a.witness=!0,await s.importKey(n,a,t),r&&await this.wdb.rescan(0),!0}async walletAuth(t,e,r){return!0}async importWallet(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'wallet.import "filename" ( rescan )');const i=new b([t]);let[s]=await this.accessControl(r);var n,o,u,p;e=i.str(0),t=i.bool(1,!1);if(d.unsupported)throw new f(l.INTERNAL_ERROR,"FS not available.");const m=await d.readFile(e,"utf8"),g=[];for(n of m.split(/\n+/))if(0!==(n=n.trim()).length&&!/^\s*#/.test(n)){var y=n.split(/\s+/);if(y.length<4)throw new f(l.DESERIALIZATION_ERROR,"Malformed wallet Data File.");switch(y[0]){case"W":{var v=Buffer.from(y[1],"base64");const t=a.fromRaw(s.db,v);if(s.wid!=t.wid)throw new f(l.DESERIALIZATION_ERROR,"Malformed wallet Key");await t.db.replace(t),s=(await this.accessControl(r))[0];break}case"C":{v=Buffer.from(y[1],"base64");const t=c.fromRaw(s.db,v);t.wallet=s,t.wid=s.wid,t.id=s.id,t.watchOnly=s.watchOnly,await s.saveAccount(t);break}case"A":var w=h.parseSecret(y[1],this.network),x=parseInt(y[5]),k=parseInt(y[7]);g.push([w,x,k])}}for([o,u,p]of(s.accountCache.reset(),g))try{await s.importKey(u,o)}catch(t){continue}return t&&await this.wdb.rescan(0),!0}async importAddress(t,e,r){if(e||t.length<1||4<t.length)throw new f(l.MISC_ERROR,"address.import account address [rescan p2sh]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,"")),a=i.str(1,"");if(e=i.bool(2,!1),i.bool(3,!1)){let t=i.buf(0);if(!t)throw new f(l.TYPE_ERROR,"Invalid parameters.");t=x.fromRaw(t),t=x.createScript(t.hash160(),x.types.SCRIPTHASH),a=_.fromScript(t)}else a=h.parseAddress(a,this.network);return await s.importAddress(n,a),e&&await this.wdb.rescan(0),!0}async importPubkey(t,e,r){if(e||t.length<1||4<t.length)throw new f(l.MISC_ERROR,"key.import.public account pubkey [rescan]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));if(e=i.buf(1),t=i.bool(2,!1),e)return r=A.fromPublic(e,this.network),await s.importKey(n,r),t&&await this.wdb.rescan(0),!0;throw new f(l.TYPE_ERROR,"Invalid parameter.")}async listAccounts(t,e,r){if(e||2<t.length)throw new f(l.MISC_ERROR,"account.list ( minconf includeWatchonly)");const i=new b([t]);let[s]=await this.accessControl(r);var n=i.u32(0,0),a=i.bool(1,!1);const o={};for(const t of await s.getAccounts()){var c=await s.getBalance(t);let e=c.unconfirmed;0<n&&(e=c.confirmed),s.watchOnly!==a&&(e=0),o[t]=w.btc(e,!0)}return o}async listConservedUnspent(t,e,r){if(e||0<t.length)throw new f(l.MISC_ERROR,"coin.conserved.list: 查询已经保持的Unspent列表");let[i]=await this.accessControl(r);const s=[];for(const t of i.getConserved())s.push({txid:t.txid(),vout:t.index});return s}async listReceivedByAccount(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,"account.listreceived ( minconf includeempty includeWatchonly )");const i=new b([t]);e=i.u32(0,0),t=i.bool(1,!1);var s=i.bool(2,!1);return this._listReceived(r,e,t,s,!0)}async listReceivedByAddress(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,"address.received.list ( minconf includeempty includeWatchonly )");const i=new b([t]);e=i.u32(0,0),t=i.bool(1,!1);var s=i.bool(2,!1);return this._listReceived(r,e,t,s,!1)}async _listReceived(t,e,r,i,s){let[n]=await this.accessControl(t);t=await n.getPaths();var a=this.wdb.curHeight;const o=new Map;for(const e of t){const t=e.toAddress();o.set(e.hash,{involvesWatchonly:n.watchOnly,address:t.toString(this.network),account:e.name,amount:0,confirmations:-1,label:""})}for(const t of await n.getHistory()){var c=t.getDepth(a);if(!(c<e))for(const e of t.tx.outputs){const t=e.getAddress();if(t){var u=t.getHash("hex");const r=o.get(u);r&&((-1===r.confirmations||c<r.confirmations)&&(r.confirmations=c),r.address=t.toString(this.network),r.amount+=e.value)}}}let h=[];for(const t of o.values())h.push(t);if(s){const t=new Map;for(const e of h){const r=t.get(e.account);r?r.amount+=e.amount:(t.set(e.account,e),e.address=void 0)}h=[];for(const e of t.values())h.push(e)}const l=[];for(const e of h)if(r||0!==e.amount){-1===e.confirmations&&(e.confirmations=0);try{e.amount=w.btc(e.amount,!0),l.push(e)}catch(t){this.logger.error("invalid amount:entry(%s) msg(%s)",JSON.stringify(e),t.message)}}return l}async listSinceBlock(t,e,r){if(e)throw new f(l.MISC_ERROR,'tx.history.since ( "blockhash" target-confirmations includeWatchonly account)');var i=this.wdb.curHeight;const s=new b([t]);let[n,a]=await this.accessControl(r,s.str(3,""));e=s.hash(0);var o,c=s.u32(1,0);t=s.bool(2,!1);if(n.watchOnly!==t)return[];let u=-1;e&&(t=await this.client.getEntry(e))&&(u=t.height),-1===u&&(u=i);const h=[];let p;for(const t of await n.getHistory(a))t.height<u||t.getDepth(i)<c||((!p||t.height>p)&&(p=t),o=await this._toListTX(r,t),h.push(o));return{transactions:h,lastblock:p&&p.block?g.revHex(p.block):v.NULL_HASH}}async _toListTX(t,e){let[r]=await this.accessControl(t);const s=await r.toDetails(e);if(!s)throw new f(l.WALLET_ERROR,"TX not found.");let n=!0;for(const t of s.inputs)if(t.path){n=!1;break}let a,o,c,u,h,p,d=0,m=0;for(let t=0;t<s.outputs.length;t++){const e=s.outputs[t];e.path?1!==e.path.branch&&(m+=e.value,o=e,u=t):(d+=e.value,a=e,c=t)}return p=n?(h=o,u):(h=a,c),h||(i(!n),n=!0,h=o,p=u),{account:h.path?h.path.name:"",address:h.address?h.address.toString(this.network):null,category:n?"receive":"send",amount:w.btc(n?m:-d,!0),label:h.path?h.path.name:void 0,vout:p,confirmations:s.getDepth(),blockhash:s.block?g.revHex(s.block):null,blockindex:s.index,blocktime:s.time,txid:g.revHex(s.hash),walletconflicts:[],time:s.mtime,timereceived:s.mtime,"bip125-replaceable":"no"}}async listTransactions(t,e,r){if(e||4<t.length)throw new f(l.MISC_ERROR,'tx.list ( "account" count from includeWatchonly)');const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(0,""));e=i.u32(1,10),t=i.u32(2,0);var o=i.bool(3,!1);if(s.watchOnly!==o)return[];var c=await s.getHistory(a),u=(o=(n.sortTX(c),t+e),Math.min(o,c.length));const h=[];for(let e=t;e<u;e++){var p=c[e];p=await this._toListTX(r,p);h.push(p)}return h}async selectone(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"coin.selectone options (account)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));var a=i.obj(0,{});const o=[];for(const t of await s.getCoins(n)){var c=t.getDepth(this.wdb.curHeight);const e=t.getAddress();if(e){var u=t.getHash("hex");if(u&&!t.isColored&&!(a.value&&t.value<a.value||t.coinbase&&0<t.height&&this.wdb.curHeight<t.height+k.COINBASE_MATURITY)){const r=await s.getKey(u);if(o.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:r?r.name:void 0,redeemScript:r&&r.script?r.script.toJSON():void 0,scriptPubKey:t.script.toJSON(),amount:w.btc(t.value,!0),confirmations:c,spendable:!s.isConserved(t),solvable:!0}),a.len&&o.length>=a.len)break}}}return o}async listUnspent(t,e,r){if(e||4<t.length)throw new f(l.MISC_ERROR,'coin.list ( minconf maxconf ["address", account] )');const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(3,""));var o=i.u32(0,1),c=i.u32(1,9999999),u=i.array(2),p=this.wdb.curHeight;const d=new Set;if(u){const t=new b([u]);for(let e=0;e<u.length;e++){var m=t.str(e,"");m=h.parseHash(m,this.network);if(d.has(m))throw new f(l.INVALID_PARAMETER,"Duplicate address.");d.add(m)}}e=await s.getCoins(a),n.sortCoins(e);const g=[];for(const t of e){var y=t.getDepth(p);if(!(y<o||c<y)){const e=t.getAddress();if(e){var v=t.getHash("hex");if(!u||v&&d.has(v)){const r=await s.getKey(v);g.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:r?r.name:void 0,redeemScript:r&&r.script?r.script.toJSON():void 0,scriptPubKey:t.script.toJSON(),amount:w.btc(t.value,!0),confirmations:y,spendable:!s.isConserved(t),solvable:!0})}}}}return g}async listLockedUnspent(t,e,r){if(e||2<t.length)throw new f(l.MISC_ERROR,'coin.list.locked ["address", account]');const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(1,""));var o=i.array(0),c=this.wdb.curHeight,u=g.now();const p=new Set;if(o){const t=new b([o]);for(let e=0;e<o.length;e++){var d=t.str(e,"");d=h.parseHash(d,this.network);if(p.has(d))throw new f(l.INVALID_PARAMETER,"Duplicate address.");p.add(d)}}let m;m=account?await s.getCoins(a):s.getLockedCoins(),n.sortCoins(m);const y=[];for(const t of m)if(t.lockedByLocktime(c,u)||t.lockedBySequence(c,u)){const e=t.getAddress();if(e){var v=t.getDepth(c),x=t.getHash("hex");if(!o||x&&p.has(x)){var[k,S,E]=t.getLockStatus();const r=await s.getKey(x);y.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:r?r.name:void 0,redeemScript:r&&r.script?r.script.toJSON():void 0,scriptPubKey:t.script.toJSON(),amount:w.btc(t.value,!0),confirmations:v,spendable:!1,solvable:!0,locktype:k,lockheight:S,locktime:E})}}}return y}async listOperUnspent(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'coin.conserved.oper.list unlock ([{"txid":"txid","vout":n},...]) 保持/解除保持一组UTXO: true/false [{"txid": "交易id","vout": "输出序号"}]');const i=new b([t]);let[s]=await this.accessControl(r);var n=i.bool(0,!1);if(!(e=i.array(1)))throw new f(l.TYPE_ERROR,"Invalid parameter.");for(const t of e){const e=new b([t]);var a=e.hash("txid"),o=e.u32("vout");if(null==a||null==o)throw new f(l.INVALID_PARAMETER,"Invalid parameter.");a=new j(a,o),n?s.unConserveCoin(a):s.conserveCoin(a)}return!0}async setTXFee(t,e,r){if(e||t.length<1||1<t.length)throw new f(l.MISC_ERROR,"sys.setfee rate");if(null==(e=new b([t]).ufixed(0,8)))throw new f(l.TYPE_ERROR,"Invalid parameter.");return this.wdb.feeRate=e,!0}async signMessage(t,e,r){if(e||2!==t.length)throw new f(l.MISC_ERROR,'sys.message.sign "address" "message"');const i=new b([t]);let[s]=await this.accessControl(r);if(!s.master.key)throw new f(l.WALLET_UNLOCK_NEEDED,"Wallet is locked.");e=i.str(0,""),t=h.parseHash(e,this.network);const n=await s.getKey(t);if(!n)throw new f(l.WALLET_ERROR,"Address not found.");r=i.str(1,"");return n.sign(S.hash256(Buffer.from(p+r,"utf8"))).toString("base64")}async changePassphrase(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'wallet.changepassphrase "oldpassphrase" "newpassphrase"');const i=new b([t]);let[s]=await this.accessControl(r);if(e=i.str(0,""),t=i.str(1,""),!s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Wallet is not encrypted.");if(e.length<1||t.length<1)throw new f(l.INVALID_PARAMETER,"Invalid parameter");return await s.setPassphrase(e,t),null}async unlock(t,e,r){const i=new b([t]);let[s]=await this.accessControl(r);r=i.str(0);var n=i.u32(1,60);if(e||s.master.encrypted&&0==t.length)throw new f(l.MISC_ERROR,'wallet.unlock "passphrase" timeout');if(!s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Wallet is not encrypted.");if(r.length<1)throw new f(l.INVALID_PARAMETER,"Invalid parameter");if(null==n)throw new f(l.TYPE_ERROR,"Invalid parameter");return await s.unlock(r,n),null}async decryptWallet(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'wallet.decrypt "passphrase"');const i=new b([t]);let[s]=await this.accessControl(r);if(e=i.str(0,""),!s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Running with an decrypted wallet.");if(e.length<1)throw new f(l.MISC_ERROR,'wallet.decrypt "passphrase"');try{await s.setPassphrase(e)}catch(t){throw new f(l.WALLET_ENCRYPTION_FAILED,"Decryption failed.")}return"wallet decrypted"}async importPrunedFunds(t,e,r){if(e||t.length<2||3<t.length)throw new f(l.MISC_ERROR,'tx.importprunedfunds.admin "rawtransaction" "txoutproof" ( "label" )');const i=new b([t]);if(e=i.buf(0),t=i.buf(1),!e||!t)throw new f(l.TYPE_ERROR,"Invalid parameter.");const s=C.fromRaw(e),n=R.fromRaw(t);if(e=n.hash("hex"),!n.verify())throw new f(l.VERIFY_ERROR,"Invalid proof.");if(!n.hasTX(s.hash("hex")))throw new f(l.VERIFY_ERROR,"Invalid proof.");if(-1===(t=await this.client.getEntry(e)))throw new f(l.VERIFY_ERROR,"Invalid proof.");if(e={hash:e,time:n.time,mtp:n.mtp,height:t},await this.wdb.addTX(s,e))return null;throw new f(l.WALLET_ERROR,"No tracked address for TX.")}async removePrunedFunds(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'tx.removeprunedfunds.admin "txid"');const i=new b([t]);let[s]=await this.accessControl(r);if(!(e=i.hash(0)))throw new f(l.TYPE_ERROR,"Invalid parameter.");if(await s.remove(e))return null;throw new f(l.WALLET_ERROR,"Transaction not in wallet.")}async getWallets(t,e,r){return this.wdb.getWallets()}async getWalletBlock(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"wallet.block height");const i=new b([t]);let[s]=await this.accessControl(r);e=i.uint(0);const n=await s.getBlock(e);return n?n.toJSON():null}async getWalletLayoutH(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"wallet.layouth height");e=new b([t]).uint(0);const i=await this.wdb.getBlock(e);return i?i.toJSON():null}async getWalletInfo(t,e,r){if(e)throw new f(l.MISC_ERROR,"wallet.info");if(e=new b([t]).str(0,"")){return(await this.wdb.get(e)).toJSON(!1)}return(await this.accessControl(r))[0].toJSON(!1)}async scRegister(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"sc.register options (account): 发布合约 合约参数列表 (子账户)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,"")),a=i.obj(0);if(!a)throw new f(l.MISC_ERROR,"sc.register: options is null");let o=1e5;switch(a.oper){case"change":if(a.oper=T.scState,!a.dst||!a.state)throw new f(l.TYPE_ERROR,"sc.register: dst or state is null.");if(!this.wdb.$parent)throw new f(l.TYPE_ERROR,"sc.register: not support this operation.");var c=await this.wdb.$parent.chain.db.getSCList([["options.dst",a.dst]]);if(!c||0==c.list.length)throw new f(l.TYPE_ERROR,"sc.register: contract not exist.");switch(c.list[0].options.state){case F.Normal:if(a.state!=F.Frozen&&a.state!=F.Destroy)throw new f(l.TYPE_ERROR,"Contract State Error");break;case F.Frozen:if(a.state!=F.Normal&&a.state!=F.Destroy)throw new f(l.TYPE_ERROR,"Contract State Error");break;default:throw new f(l.TYPE_ERROR,"Contract State Error")}if(a.addr=c.list[0].options.addr,await s.belongToAccount(n,a.addr))break;throw new f(l.MISC_ERROR,"sc.register: Invald Account.");case"update":if(a.oper=T.scUpdate,!a.dst)throw new f(l.TYPE_ERROR,"sc.register: dst is null.");if(!this.wdb.$parent)throw new f(l.TYPE_ERROR,"sc.register: not support this operation.");if(!(c=await this.wdb.$parent.chain.db.getSCList([["options.dst",a.dst]]))||0==c.list.length)throw new f(l.TYPE_ERROR,"sc.register: contract not exist.");if(c.list[0].options.state!=F.Normal)throw new f(l.TYPE_ERROR,"sc.register: contract state error.");if(a.addr=c.list[0].options.addr,await s.belongToAccount(n,a.addr))break;throw new f(l.MISC_ERROR,"sc.register: Invald Account.");default:if(o=1e8,a.oper=T.scRegister,a.addr=(await s.createReceive(n)).getAddress("string"),a.dst=s.getSCAddress(g.hashInt(a.addr)).toString(),this.wdb.$parent&&(c=await this.wdb.$parent.chain.db.getSCList([["options.dst",a.dst]]))&&0<c.list.length)throw new f(l.TYPE_ERROR,"sc.register: contract address conflict.")}let u=(await s.getPrivateKey(a.addr)).signData(a);u.data.sig=u.sig,a=u.data;const h=await s.send({subtractFee:!1,sort:!1,outputs:[{address:a.dst,value:o}],comment:JSON.stringify(a)},n);return await this.wdb.logAudit({address:a.addr,oper:a.oper,hash:h.hash("hex"),index:0}),a.txid=h.rhash(),a}async scRun(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'sc.run str options (account): 调用合约 逗分参数字符串("合约收款地址,转账金额") 参数对象 (子账户)');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));const a=i.str(0).split(",");if(e=i.obj(1,{}),t=a.shift(),!this.wdb.$parent)throw new f(l.TYPE_ERROR,"sc.run: not support this operation.");if(!(r=await this.wdb.$parent.chain.db.getSCList([["options.dst",t]]))||0==r.list.length)throw new f(l.TYPE_ERROR,"sc.run: contract not exist.");if(1!=r.list[0].options.state)throw new f(l.TYPE_ERROR,`sc.run: contract execute disabled(state ${r.list[0].options.state}).`);if(e.ver&&e.ver!=r.list[0].options.ver)throw new f(l.TYPE_ERROR,"sc.run: contract version inconsistency.");r=(0|parseInt(a.shift()))>>>0,h.parseAddress(t,this.network);const o=await s.send({subtractFee:!1,sort:!1,outputs:[{address:t,value:r}],comment:JSON.stringify({oper:"scrun",params:e})},n),c=await s.getAccount(n);return(await this.wdb.logAudit({address:c.receive.getAddress("string"),oper:T.scRun,hash:o.hash("hex"),index:0}),await s.getDetails(o.hash("hex"))).toJSON()}async cpRegister(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'cp.create name "ip,addr,class,rate" (openid): 注册厂商 名称(不少于4个字符) "IP地址,注册地址,类别,媒体分成比例" (子账号)');return this.$cpRegister(t,r,!1)}async cpRegisterAsync(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'cp.create.async name "ip,addr,class,rate" (openid): 注册厂商 名称(不少于4个字符) "IP地址,注册地址,类别,媒体分成比例" (子账号)');return this.$cpRegister(t,r,!0)}async $cpRegister(t,e,r){const i=new b([t]);t=decodeURIComponent(i.str(0));var s=(o=i.str(1,"").split(","))[0],n=o[1],a=o[2],o=o[3]?parseInt(o[3]):15;let[c,u]=await this.accessControl(e,i.str(2,""));if(e=y.verifyDataFormat({name:t,ip:s,grate:o,cls:a}))throw new f(l.MISC_ERROR,e);return e={cid:M(),oper:T.cpRegister,name:t,ip:s,grate:o,cls:a},await c.cpRegister(g.isBech32(n)?n:null,e,u,r),e}async cpChange(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'cp.change cid "newname,ip,addr,class,rate" "openid": 修改厂商信息 CP编号 "新的名称,IP,新的注册地址,类别,分成比例" 授权账号');const s=new b([t]);let[n,a]=await this.accessControl(r,s.str(2,""));e=s.str(0),r=(t=decodeURIComponent(s.str(1,"")).split(","))[0];var o=t[1];let c=t[2];var u=t[3],h=(t=parseInt(t[4])||null,y.verifyDataFormat({name:r,ip:o,grate:t,cls:u}));if(h)throw new f(l.MISC_ERROR,h);c&&(c=_.fromString(c),i(c instanceof _,"Not an address."));let p={cid:e,newName:r,ip:o,addr:c,grate:t,cls:u};var[]=await n.cpChange(p,a);return p.addr=p.addr.toString(),p}async cpQuery(t,e,r){if(e)throw new f(l.MISC_ERROR,"cp.query (conditions account): 查询钱包中的厂商列表 (复合条件 子帐号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));var a;e=i.array(0,[]),t=s.db.cpList.query(e);for(a of t.list)a.owned=await s.belongToAccount(n,a.current.address);return t}async cpMine(t,e,r){if(e)throw new f(l.MISC_ERROR,"cp.mine (conditions account): 查询钱包中归属当前操作员/指定账户的厂商列表 (复合条件 子帐号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));const a=i.array(0,[]);return a.push(["size",-1]),(await s.db.cpList.predict(async(t,e)=>s.belongToAccount(n,e.current.address))).query(a)}async cpX509(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"cp.x509 cid [openid]: 生成厂商根证书 CP编号 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.str(0);var[t]=await s.cpX509(e,n);return t}async x509Issue(t,e,r){if(e||t.length<4||5<t.length)throw new f(l.MISC_ERROR,"cp.x509.issue cid csrfile addr activetime [openid]: 签发X509证书 CP编号 请求文件 证书存放地址 证书存活时间 [子账号]");const i=new b([t]);let[n,a]=await this.accessControl(r,i.str(4,""));e=i.str(0),i.str(1),t=i.str(2),r=i.u64(3);var o=s.KEYUTIL.generateKeypair("EC","secp256k1"),[e]=(o=s.asn1.csr.CSRUtil.newCSRPEM({subject:{str:"/C=US/O=Test/CN=example.com"},sbjpubkey:o.pubKeyObj,sigalg:"SHA256withECDSA",sbjprvkey:o.prvKeyObj}),t=_.fromString(t,this.network),await n.x509Issue({cid:e,csrData:o,addr:t,activeTime:r},a));return e}async x509Abolish(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"cp.x509.abolish cid seqno activetime [openid]: 作废X509证书 CP编号 证书编号 作废生效时间[子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0),t=i.u32(1),r=i.u64(2);var[e]=await s.x509Abolish({cid:e,seqno:t,activeTime:r},n);return e}async htlcSuggest(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.suggest params [account]: 发起HTLC 参数对象({alice, bob, amount, rate}) [子账户]");const i=new b([t]),s=i.obj(0,{});let[n,a]=await this.accessControl(r,i.str(1,""));if(!s.ab)throw new f(l.MISC_ERROR,"htlc.suggest: params.ab(alice bchain address) is null");if(!Number.isInteger(s.amount))throw new f(l.MISC_ERROR,"htlc.suggest: illegal params.amount");if(s.amount=parseInt(s.amount),s.amount<0||s.amount>1e4*k.COIN)throw new f(l.MISC_ERROR,"htlc.suggest: illegal params.amount");if(s.rate=parseFloat(s.rate),s.rate<0||s.amount*s.rate>k.MAX_MONEY)throw new f(l.MISC_ERROR,"htlc.suggest: illegal params.rate");if(!s.target)throw new f(l.MISC_ERROR,"htlc.suggest: params.target is null");e=(await n.createReceive(a)).getAddress().toString(this.network),t={amount:s.amount,rate:s.rate,dst:s.target,aa:_.fromString(e).hash,ab:_.fromString(s.ab).hash,ba:_.fromString(s.ba).hash};const[o]=await n.sendContracts([t],a,P);return o?{txid:o.rhash(),aa:e}:null}async htlcAssent(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.assent params({txid}) [account]: 响应HTLC 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));const a=i.obj(0,{});if(!Number.isInteger(a.amount))throw new f(l.MISC_ERROR,"htlc.assent: illegal params.amount");if(a.amount=parseInt(a.amount),a.amount<0||a.amount>1e4*k.COIN)throw new f(l.MISC_ERROR,"htlc.assent: illegal params.amount");if(a.rate=parseFloat(a.rate),a.rate<0||a.amount*a.rate>k.MAX_MONEY)throw new f(l.MISC_ERROR,"htlc.assent: illegal params.rate");e=(await s.createReceive(n)).getAddress().toString(this.network),t={src:a.src,dst:a.dst,hash:a.hash,index:a.index,ab:Buffer.from(a.ab,"hex"),ba:Buffer.from(a.ba,"hex"),bb:_.fromString(e).hash,amount:a.amount*a.rate};const[o]=await s.sendContracts([t],n,O);return o?{txid:o.rhash()}:null}async htlcSuggestDeal(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.suggest.deal params({txid,index,sa}) [account]: 兑付HTLC 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={suggest:!0,hash:g.revHex(e.txid),index:e.index,sa:e.sa};const[a]=await s.htlcDeal(t,n);return a?{txid:a.rhash()}:null}async htlcQuery(t,e,r){if(e)throw new f(l.MISC_ERROR,"htlc.query query: 条件查询HTLC合约 条件数组");const i=new b([t]).array(0,[]);return i.push(["pst","!=",N.Cancel]),this.wdb.htlcList.query(i)}async htlcAssentDeal(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.assent.deal params({txid,index,sa}) [account]: 兑付HTLC 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={hash:g.revHex(e.txid),index:e.index,sa:e.sa};const[a]=await s.htlcDeal(t,n);return a?{txid:a.rhash()}:null}async htlcAssentCancel(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.assent.cancel params({txid, index, master}) [account]: 取消HTLC应答 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={hash:g.revHex(e.txid),index:e.index,master:e.bb};const[a]=await s.htlcCancel(t,n);return a?{txid:a.rhash()}:null}async htlcSuggestCancel(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.suggest.cancel params({txid, index, sa, master}) [account]: 取消HTLC请求 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={suggest:!0,hash:g.revHex(e.txid),index:e.index,sa:e.sa,master:e.aa};const[a]=await s.htlcCancel(t,n);return a?{txid:a.rhash()}:null}async sendComment(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"comm.comment params [account]: 发起附言交易 参数对象({body, bob}) [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));const a=i.obj(0,{});if(!Number.isInteger(a.amount))throw new f(l.MISC_ERROR,"comm.comment: illegal params.amount");if(a.amount=parseInt(a.amount),a.amount<0||a.amount>1e4*k.COIN)throw new f(l.MISC_ERROR,"comm.comment: illegal params.amount");if(e={bob:a.bob,body:a.body,amount:a.amount},!a.alice&&(a.alice=s.getAddress(),n)){let t=await s.createReceive(n);a.alice=t.getAddress()}let o=(await s.getPrivateKey(a.alice)).signData(e);o.data.sig=o.sig;const[c]=await s.sendContracts([o.data],n,D);return c?{txid:c.rhash()}:null}async commentQuery(t,e,r){if(e)throw new f(l.MISC_ERROR,"comm.comment.query query: 条件查询附言输出 条件数组");return e=new b([t]).array(0,[]),this.wdb.commentList.query(e)}async contractExecute(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"contract.execute tid master: 执行交易对合约 交易编号 执行方(1-发起人,2-承兑人)");const i=new b([t]);let[s]=await this.accessControl(r);e=i.str(0),t=i.u32(1,2);const[n]=await s.contractExecute(e,t);return n.toJSON()}async contractPromise(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"contract.promise tid [openid]: 签署交易对合约 交易编号(type.address) [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.str(0);const[a]=await s.contractPromise(e,n);return a.toJSON()}async contractOfMine(t,e,r){if(e||t.length<1||3<t.length)throw new f(l.MISC_ERROR,"contract.mine type page [openid]: 获取已签署交易对合约列表 交易对类型 页码 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));return e=i.uint(0,1),t=i.uint(1,1),s.db.getContracts(e,t,n)}async contractCreate(t,e,r){if(e||t.length<4||5<t.length)throw new f(l.MISC_ERROR,"contract.create type src dst addr [openid] : 发布一个交易对合约 交易对类型 出让游戏金数值 换取兑换币数值 兑换币收款地址 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.u64(0),t=i.u64(1),r=i.u64(2);var a=i.str(3);const[o]=await s.contractCreate(e,t,r,a,n);return o.toJSON()}async propGet(t,e,r){if(e)throw new f(l.MISC_ERROR,"prop.getbyid pid: 查询自己的物品 PID");e=new b([t]).str(0,"");let i=[];return(t=await this.wdb.propList.getVp(e))&&t.pst!=B.Delete&&i.push(item),i}async propGetByOid(t,e,r){if(e)throw new f(l.MISC_ERROR,"prop.getbyoid oid: 查询自己的物品 OID");return e=new b([t]).str(0,""),this.wdb.propList.getVpByOid(e)}async propGetByAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,"prop.getbyaddress address: 查询自己的物品 地址");return e=new b([t]).str(0,""),this.wdb.propList.getVpByAddress(e)}async propBuy(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"prop.buy pid price [openid] : 竞拍道具 道具编号 出价 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));e=i.str(0),t=i.u64(1);const[a]=await s.propBuy(e,t,n);return a.toJSON()}async propFound(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.found pid (openid): 熔铸道具 道具编号 (账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(e=i.str(0),!(t=await s.db.propList.getVp(e))||t.pst==B.Delete)throw new f(l.MISC_ERROR,"prop.found prop not exist");if(t.account!=n)throw new f(l.MISC_ERROR,"prop.found not owned prop");if(t.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop.found prop can not be found on current status");const[a,,o]=await s.propFound(t.current.hash,n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),index:0,cid:o.cid,pid:o.pid,oid:o.oid,gold:a.outputs[0].value}}async propSale(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"prop.sale pid fixedPrice [openid]: 拍卖道具 道具编号 一口价 [子帐号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.str(0),!(t=await s.db.propList.getVp(e))||t.pst==B.Delete)throw new f(l.MISC_ERROR,"prop.sale prop not exist");if(t.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop.sale prop cannt be sent on current status");r=i.u64(1,0);const[a]=await s.propSale(t.current.hash,t.current.index,r,n);return a.toJSON()}async propSendList(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.sendlist (addr|txid|index)(n,) [openid]: 批量转移道具 道具数组(地址|交易ID|输出索引) [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,"")),a=[];if((e=i.str(0).split(","))&&Array.isArray(e))for(var o of e){var c,u;3<=(o=o.split("|")).length&&(c=o[0],u=new j(g.revHex(o[1]),parseInt(o[2])),4<=o.length?a.push([u,_.fromString(c),o[3]]):a.push([u,_.fromString(c)]))}const[h,,p]=await s.propExchangeList(a,n);if(h&&p){let t=h.hash("hex"),e=h.rhash();return p.map(r=>({hash:t,txid:e,cid:r.cid,pid:r.pid,oid:r.oid,gold:r.gold,addr:r.addr}))}}async propReceive(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.receive tx [account]: 捐赠接收函数 捐赠交易字符串 [接收账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(!(e=i.buf(0)))throw new f(l.TYPE_ERROR,"Invalid TX Info.");t=C.fromRaw(e);const[a,,o]=await s.propReceive(t,n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),cid:o.cid,pid:o.pid,oid:o.oid,gold:o.gold,addr:o.simAddr,gaddr:o.gaddr}}async propDonate(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.donate pid [openid]: 捐赠道具函数 道具ID [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(e=i.str(0),!(t=await s.db.propList.getVp(e))||t.pst==B.Delete)throw new f(l.MISC_ERROR,"prop not exist");if(t.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop cannt be sent on current status");r=new j(t.current.hash,t.current.index);const[a,,o]=await s.propDonate(r,n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),cid:o.cid,pid:o.pid,oid:o.oid,gold:o.gold,raw:a.toRaw().toString("hex")}}async propExchange(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"prop.send addr pid [openid]: 转移道具函数 接收地址 物品编号 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.str(0),t=i.str(1),!(r=await s.db.propList.getVp(t))||r.pst==B.Delete)throw new f(l.MISC_ERROR,"prop.send prop not exist");if(r.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop.send prop cannt be sent on current status");const[a,,o]=await s.propExchange(new j(r.current.hash,r.current.index),_.fromString(e),n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),cid:o.cid,pid:o.pid,oid:o.oid,gold:o.gold,addr:e}}async propCreateList(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.createlist (cid|oid|gold)(n,) [openid]: 批量创建道具 道具信息数组 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,"")),a=[];if((e=i.str(0).split(","))&&Array.isArray(e))for(var o of e)if(3<=(o=o.split("|")).length){var c=o[0],u=o[1],h=parseInt(o[2]);let t=null;4<=o.length&&(t=o[3]),h<k.MINPROPVALUE||a.push([c,u,h,t])}a=a.map(t=>{var[t,e,r,i]=t;return{oper:T.propCreate,cid:t,oid:e,gold:r,pid:i}});var[t]=await s.propCreate(a,n);return t?a:null}async propCreate(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"prop.create cid oid gold (openid): 创建道具 厂商编码 道具原始码 含金量 (账户)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0),t=i.str(1),r=i.u64(2,k.MINPROPVALUE);var a=i.str(3,null);if(r<k.MINPROPVALUE)throw new f(l.PROP_MINVALUE,"prop.create: not a valid value");e={oper:T.propCreate,cid:e,oid:t,gold:r,pid:a};var[t]=await s.propCreate([e],n);return t?e:null}async propOrder(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"prop.order cid oid gold [addr openid]: 制备道具 厂商编码 道具原始码 含金量 [接收地址 资金账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.str(0),t=i.str(1),r=i.u64(2);let a=i.str(3);if(a)a=_.fromString(a);else if(n){a=(await s.createReceive(n)).getAddress()}else a=s.getAddress();var o,c={oper:T.propCreate,cid:e,oid:t,gold:r};const[u]=await s.propCreate([c],n);if(u){o=u.rhash(),await new Promise(t=>{s.db.once("tx.received."+o,(e,r,i)=>{t()})});let[i,,c]=await s.propExchange([u,0],a,n);if(i)return{hash:i.hash("hex"),txid:i.rhash(),cid:e,pid:c.pid,oid:t,gold:r,addr:a.toString()}}return null}async walletLock(t,e,r){if(e)throw new f(l.MISC_ERROR,"wallet.lock [passphrase]");let[i]=await this.accessControl(r);if(!i.master.encrypted){if((e=new b([t]).str(0,"")).length<1)throw new f(l.MISC_ERROR,"Wallet is not encrypted, please run wallet.lock passphrase");try{await i.setPassphrase(null,e)}catch(t){throw new f(l.WALLET_ENCRYPTION_FAILED,"Encryption failed.")}}return await i.lock(),null}async listMSTrans(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.mstrans");return e=new b([t]).str(0,""),this.wdb.listMSTrans(e)}async signMSTrans(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"tx.mstrans.sign txid");const i=new b([t]);e=i.str(0,""),t=i.str(1,"");let[s,n]=await this.accessControl(r,i.str(2,"")),a=await this.wdb.db.get(o.ms(_.getHash(e,"hex"),t));if(!a)throw new f(l.MISC_ERROR,"tx.mstrans.sign txid");if(r=JSON.parse(a.toString()),!await s.belongToAccount(n,r.addr))throw new f(l.MISC_ERROR,"tx.mstrans.sign invalid account");let u=await this.wdb.get(r.addr);if(u&&u.account.type==c.types.MULTISIG){const e=I.fromRaw(r.data,"hex");e.view=await u.getCoinView(e),await u.sign(e),e.isSigned()?await u.sendMTX(e):await s.send({subtractFee:!1,sort:!1,outputs:[{address:r.contract,value:1e4}],comment:JSON.stringify({oper:"scrun",params:{oper:"sign",addr:r.addr,tx:e.toRaw().toString("hex")}})},n),await this.wdb.delMSTrans(r.addr,t)}}async resendWalletTransactions(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"tx.resend.admin");let[i]=await this.accessControl(r);const s=[];for(const t of await i.resend())s.push(t.txid());return s}async resend(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"tx.resendall.admin: 重发挂起交易");var i=await this.wdb.resend();if(i)for(var s of Object.keys(i))if(s)for(const t of i[s])await this.wdb.send(t);return!0}async rescan(t,e,r){if(e)throw new f(l.MISC_ERROR,'sys.rescan ( "height" )');return e=new b([t]).u32(0),await this.wdb.rescan(e),this.logger.info("Rescanning..."),!0}async createAddress(t,e,r){if(e||2<t.length)throw new f(l.MISC_ERROR,'address.create ( "account" "uid" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));e=i.u32(1,0);const a=await s.createReceive(n,e);return a?a.toJSON():null}async createAddressAdmin(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,'address.create.admin ( "account" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createReceive(n,0,s.master);return a?a.toJSON(!0):null}async createChange(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,'address.change.create ( "account" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createChange(n);return a?a.toJSON():null}async createNested(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,'address.nested.create ( "account" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createNested(n);return a?a.toJSON():null}async mkwallet(t,e,r){const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createReceive(n),o=await this.wdb.ensure({id:a.getAddress("string"),type:i.str(1),m:i.u32(2),n:i.u32(3),mnemonic:i.str(4),passphrase:i.str(5),master:i.str(6),witness:i.bool(7),watchOnly:i.bool(8),accountKey:i.str(9)});return o?o.toJSON(!1):null}async accountGet(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"account.get account: 查询账户");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);return a?a.toJSON():null}async getPending(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.pending [account]: 查询挂起的交易");const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(0,""));e=await s.getPending(a),n.sortTX(e);const o=[];for(const t of await s.toDetails(e))o.push(t.toJSON());return o}async getPendingItem(t,e,r){const i=new b([t]);var s,n=i.hash(0,"");let[a,o]=await this.accessControl(r,i.str(1,""));for(s of await a.getPending(o))if(s.hash==n)return(s=await a.toDetails(s)).toJSON()}async getPendingHash(t,e,r){const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(0,""));t=await s.getPending(a),n.sortTX(t);const o=[];for(const e of await s.toDetails(t))o.push(g.revHex(e.hash));return o}async getPendingCount(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.pending.count [account]: 查询挂起的交易数");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=await s.ensureIndex(n),(await s.txdb.getPendingHashes(e)).length}async accountCreate(t,e,r){const i=new b([t]);let[s]=await this.accessControl(r);t=i.obj(0),r=i.str(1);const n=new b([t]);t={name:n.str("name"),witness:n.bool("witness",!0),type:n.str("type","pubkeyhash"),m:n.u32("m",1),n:n.u32("n",1),watchOnly:n.bool("watch",!1),accountKey:n.str("key",null),lookahead:n.u32("lookahead",10)};try{let e=await s.getAccount(t.name);if(e)return e.toJSON();{let i=(e=await s.createAccount(t,r)).toJSON();return i.isNew=!0,i}}catch(e){return null}}async getblocks(t,e,r){if(e)throw new f(l.MISC_ERROR,"wallet.blocks");let[i]=await this.accessControl(r);return await i.getBlocks()}async getKey(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,"key.export.public address: 查询地址的密钥");const s=new b([t]);let[n]=await this.accessControl(r);e=s.str(0),i(e,"Address is required.");const a=await n.getKey(e);return a?a.toJSON():null}async getPrivKey(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,"address.key.admin address: 查询地址的密钥");const s=new b([t]);let[n]=await this.accessControl(r);e=s.str(0),i(e,"Address is required.");const a=await n.getKey(e);return a?a.toJSON(!0):null}async getwif(t,e,r){if(e||1!=t.length)throw new f(l.MISC_ERROR,"address.wif.admin address: 查询地址对应的私钥 地址");const s=new b([t]);let[n]=await this.accessControl(r);e=s.str(0),t=s.str(1),i(e,"Address is required.");const a=await n.getPrivateKey(e,t);return a?a.toSecret():null}async hasAddress(t,e,r){if(e||1!=t.length)throw new f(l.MISC_ERROR,"address.has address: 查询钱包是否包含一个地址 地址");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.str(0),i(e,"Address is required."),(t=await n.hasAddress(e))||!1}async getCoin(t,e,r){const s=new b([t]);let[n]=await this.accessControl(r);t=s.hash(0),r=s.u32(1),i(t,"Hash is required."),i(null!=r,"Index is required.");const a=await n.getCoin(t,r);return a?a.getJSON(this.network):null}async getSpender(t,e,r){const s=new b([t]);let[n]=await this.accessControl(r);return t=s.hash(0),r=s.u32(1),i(t,"Hash is required."),i(null!=r,"Index is required."),(t=await n.txdb.getSpender(t,r))?{hash:g.revHex(t.hash),index:t.index}:null}async getCoincacheSize(t,e,r){var[r]=await this.accessControl(r);return r.txdb.coinCache.size}async conserveCoin(t,e,r){if(e||2!=t.length)throw new f(l.MISC_ERROR,"coin.conserved.add txhash index: 新增需要保持的硬币: 交易Hash 输出序号");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.hash(0),t=s.u32(1),i(e,"Hash is required."),i(null!=t,"Index is required."),r=new j(e,t),n.conserveCoin(r),!0}async getConservedCoins(t,e,r){if(e||0<t.length)throw new f(l.MISC_ERROR,"coin.conserved.get: 查询已经保持的Coin列表");let[i]=await this.accessControl(r);const s=[];for(const t of i.getConserved())s.push(t.toJSON());return s}async unConserveCoin(t,e,r){if(e||2!=t.length)throw new f(l.MISC_ERROR,"coin.conserved.del: 减少需要保持的硬币: 交易Hash 输出序号");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.hash(0),t=s.u32(1),i(e,"Hash is required."),i(null!=t,"Index is required."),r=new j(e,t),n.unConserveCoin(r),!0}async addShared(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"key.shared.add [account] key: 新增共享公钥 [账号] 公钥");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=i.str(1),await s.addSharedKey(n,e),!0}async removeShared(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"key.shared.del [account] key: 删除共享公钥 [账号] 公钥");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=i.str(1),await s.removeSharedKey(n,e),!0}async zap(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.zap [age]: 移除挂起交易 挂起时长(默认三天)");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.str(0),t=s.u32(1,259200),i(t,"Age is required."),await n.zap(e,t),!0}async sendOracle(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"oracle.send k v amount [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,null),t=i.str(1,null),null==(r=i.u64(2)))throw new f(l.TYPE_ERROR,"Invalid parameter.");if(!e||!t)throw new f(l.MISC_ERROR,"oracle.send k v amount [openid]");r={subtractFee:!1,selection:"age",sort:!1,outputs:[{address:(await s.createReceive(n)).getAddress("string"),value:r}],comment:JSON.stringify({oper:T.vote,type:"oracle",k:e,v:t})};const a=await s.send(r,n);return(await s.getDetails(a.hash("hex"))).toJSON()}async sendVote(t,e,r){if(e||t.length<2||3<t.length)throw new f(l.MISC_ERROR,"vote.send addresses amount [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));const a=i.str(0);var o;if(null==(e=i.u64(1)))throw new f(l.TYPE_ERROR,"Invalid parameter.");for(o of a.split(","))if(!h.parseAddress(o,this.network))throw new f(l.TYPE_ERROR,"Invalid address.");t={subtractFee:!1,selection:"age",sort:!1,outputs:[{address:(await s.createReceive(n)).getAddress("string"),value:e}],comment:`{"oper": "${T.vote}", "type": "mine", "ca": "${a}"}`};const c=await s.send(t,n);return(await s.getDetails(c.hash("hex"))).toJSON()}async sendVoteAsync(t,e,r){if(e||t.length<2||3<t.length)throw new f(l.MISC_ERROR,"vote.send.async addresses amount [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));const a=i.str(0);var o;if(null==(e=i.u64(1)))throw new f(l.TYPE_ERROR,"Invalid parameter.");for(o of a.split(","))if(!h.parseAddress(o,this.network))throw new f(l.TYPE_ERROR,"Invalid address.");t={subtractFee:!1,selection:"age",sort:!1,outputs:[{address:(await s.createReceive(n)).getAddress("string"),value:e}],comment:`{"oper": "${T.vote}", "type": "mine", "ca": "${a}"}`},s.send(t,n)}async sendTX(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"tx.send addr amount [openid]:发送交易 地址 金额 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));e=i.str(0),t=i.u64(1);const a=await s.send({outputs:[{address:e,value:t}]},n);return(await s.getDetails(a.hash("hex"))).toJSON()}async sendTXAsync(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"tx.send.async addr amount [openid]:发送交易 地址 金额 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));e=i.str(0),t=i.u64(1),s.send({outputs:[{address:e,value:t}]},n)}async signTX(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"tx.sign.admin txdata [sendnow passphrase]: 对交易签名/发送 交易原始数据 [立即发送 解锁密码]");const s=new b([t]);let[n]=await this.accessControl(r);e=s.buf(0),i(e,"TX is required."),t=s.bool(1,!1),r=s.str(2);const a=I.fromRaw(e);a.view=await n.getCoinView(a),await n.sign(a,r);let o=null;if(t&&a.isSigned()){o=(await n.sendMTX(a)).getJSON(this.network)}else o=a.getJSON(this.network);return n.account.type==c.types.MULTISIG&&(e=a.getMultisig(this.network),o.ms={m:e.m,n:e.n,c:e.c}),o}async createTX(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"tx.create options outputs [openid]: 创建交易 参数对象 输出数组 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.obj(0),t=i.array(1),Array.isArray(e.in))for(var a of e.in)a.hash=g.revHex(a.hash);const o=new b([e]),u={comment:o.obj("comment",null),sendnow:o.bool("sendnow",!0),account:o.str("account"),rate:o.u64("rate"),blocks:o.u32("blocks"),maxFee:o.u64("maxFee"),selection:o.str("selection"),smart:o.bool("smart"),subtractFee:o.bool("subtractFee"),subtractIndex:o.get("subtractIndex"),depth:o.u32(["confirmations","depth"]),inputs:o.array("in",null),outputs:[]};for(const e of t){const t=new b([e]);let r={value:t.u64("value")};if(r.address=t.str("address"),!r.address)if(h=t.str("account")){await s.ensureAccount({name:h,witness:!0});const t=await s.createReceive(h);if(!t)throw new f(l.MISC_ERROR,`tx.create: account ${h} not exist`);r.address=t.getAddress("string")}var h,p=((h=t.buf("script"))&&(r.script=x.fromRaw(h)),t.str("locktype"));if(p){var d=t.u64("locktime",0);if(d){if("no"!=p&&"clb"!=p&&"clt"!=p&&"csb"!=p&&"cst"!=p)throw new f(l.MISC_ERROR,'locktype should be "no"-不锁定 or "clb"-绝对高度锁定 or clt(绝对时间锁定) or "csb"-相对高度锁定 or "cst"-相对时间锁定 !');if(p==x.outputLockType.CHECKABSOLUTETIME&&d<=k.LOCKTIME_THRESHOLD)throw new f(l.MISC_ERROR,"lock absolute time should not less than 500000000!");if(p==x.outputLockType.CHECKABSOLUTEBLOCK&&d>k.LOCKTIME_THRESHOLD)throw new f(l.MISC_ERROR,"lock absolute block should not more than 500000000!");if((p==x.outputLockType.CHECKRELATIVEBLOCK||p==x.outputLockType.CHECKRELATIVETIME)&&65535<d)throw new f(l.MISC_ERROR,"lock relative block/time should not more than 65535!");r.locktype=p,r.locktime=d}}u.outputs.push(r)}n&&(u.account=n);let m=null;if(u.sendnow){const t=await s.send(u);m=(await s.getDetails(t.hash("hex"))).toJSON()}else{const t=await s.createTX(u);await s.sign(t),m=t.getJSON(this.network),s.account.type==c.types.MULTISIG&&(r=t.getMultisig(this.network),m.ms={m:r.m,n:r.n,c:r.c})}return m}async getLast(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"tx.last account [limit]: 最近的交易 账号 [最大记录数]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0));e=i.u32(1);const a=[];t=await s.getLast(n,e);for(const e of await s.toDetails(t))a.push(e.toJSON());return a}async getRange(t,e,r){if(e||t.length<4)throw new f(l.MISC_ERROR,"tx.range account start end limit [reserve]: 指定时限内的交易 账号 开始时间 结束时间 最大记录数 [反转]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));e={start:i.u32(1),end:i.u32(2),limit:i.u32(3),reverse:i.bool(4)},t=await s.getRange(n,e);const a=[];for(const e of await s.toDetails(t))a.push(e.toJSON());return a}async caUserStatus(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"ca.user.status cid uid (query)");const i=new b([t]);e=i.str(0,""),t=i.uint(1,0);const s=i.array(2,[]);let n=null;for(let t=0;t<s.length;t++){var a=s[t];a&&Array.isArray(a)?"alliancename"==a[0]&&(n=a[1],delete s[t]):delete s[t]}let[o]=await this.accessControl(r);return e=await this.$allianceUserCreate([e,t,n],r),s.push(["pubkey",e.data.pubkey]),s.push(["merge",!0]),o.db.client.execute("ca.list",[s])}async caUserLog(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"ca.user.log cid uid (query)");const i=new b([t]);e=i.str(0,""),t=i.uint(1,0);const s=i.array(2,[]);let n=null;for(let t=0;t<s.length;t++){var a=s[t];a&&Array.isArray(a)?"alliancename"==a[0]&&(n=a[1],delete s[t]):delete s[t]}let[o]=await this.accessControl(r,e);return e=await this.$allianceUserCreate([e,t,n],r),s.push(["pubkey",e.data.pubkey]),o.db.client.execute("ca.list",[s])}async sysLog(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.log (query openid)");const i=new b([t]);var s;e=i.array(0,[]);let[n]=await this.accessControl(r,i.str(1,"")),a=[];for(s of(await this.wdb.auditList.query(e)).list){let t=Object.assign({},s);var o=h.parseHash(s.address,this.network);(o=await n.getPath(o))&&(t.account=o.name),t.time=new Date(1e3*s.time).toLocaleString(),a.push(t)}return a}async caIssuePublic(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"ca.issue.public cert witness pubkey [openid]: 签发证书 证书对象 见证地址 存证地址公钥 [见证账户]");const i=new b([t]),s=i.obj(0,{});e=i.str(1,""),t=i.str(2);let[n,a]=await this.accessControl(r,i.str(3,""));if(await n.belongToAccount(a,e)){if(64!=s.hash.length)throw new f(l.TYPE_ERROR,"err hash length");s.height||(s.height=k.retargetInterval);const r=await n.getPrivateKey(e);if(r)return await n.issueCreate({erid:s.hash,key:r.privateKey.toString("hex"),address:r.getAddress().toString(),witness:r.publicKey.toString("hex"),validHeight:this.wdb.curHeight+s.height,source:{subjectName:s.name,pubkey:t,subjectHash:s.hash,cluster:s.cluster}},a)}throw new f(l.TYPE_ERROR,"Invalid witness.")}async caAbolishPublic(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"ca.abolish.public array[[witness erid height [openid]]]: 废止授信交易 废止交易信息数组");let i=[];const s=new b([t]);var n;for(n of s.array(0,[])){var a=n[0],o=n[1],c=parseInt(n[2]);let[t,e]=await this.accessControl(r,n[3]);if(!await t.belongToAccount(e,a))throw new f(l.TYPE_ERROR,"Invalid witness.");const s=await t.getKey(a);if(!s)throw new f(l.TYPE_ERROR,"Invalid witness.");(a=await t.caAbolish({key:s.privateKey.toString("hex"),witness:s.publicKey.toString("hex"),address:a,erid:o,abolishHeight:c,cid:"",uid:0},e))&&i.push(a)}return i}async caIssue(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"ca.issue cert uid cid [openid]: 签发证书 证书对象 见证人 见证人归属单位 [消费账户]");return this.$caIssue(t,r,!1)}async caIssueAsync(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"ca.issue.async cert uid cid [openid]: 签发证书 证书对象 见证人 见证人归属单位 [消费账户]");return this.$caIssue(t,r,!0)}async $caIssue(t,e,r){const i=new b([t]),s=i.obj(0,{});t=i.uint(1,0);var n=i.str(2,"");let[a,o]=await this.accessControl(e,i.str(3,""));var c=await a.ensureCp(n);if(!c||"forbidden"==c.cls)throw new f(l.MISC_ERROR,"Invalid Account");if(64!=s.hash.length)throw new f(l.TYPE_ERROR,"err hash length");if(this.wdb.$parent&&await this.wdb.$parent.chain.db.erList.getEr(s.hash))throw new f(l.TYPE_ERROR,"cert.hash conflicted");return s.height||(s.height=k.retargetInterval),c=await this.$allianceUserCreate([n,t],e,!0),await a.issueCreate({erid:s.hash,key:c.prvkey,witness:c.data.pubkey,address:c.data.addr,validHeight:this.wdb.curHeight+s.height,source:{subjectName:s.name,pubkey:c.data.pubkey,subjectHash:s.hash,cluster:s.cluster,cid:n,uid:t}},o,r)}async caAbolish(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"ca.abolish [[uid cid erid height [openid]]]: 废止授信交易 废止交易信息数组");return this.$caAbolish(t,r,!1)}async caAbolishAsync(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"ca.abolish.async [[uid cid erid height [openid]]]: 废止授信交易 废止交易信息数组");return this.$caAbolish(t,r,!0)}async $caAbolish(t,e,r){let i=[];const s=new b([t]);var n;for(n of s.array(0,[])){var a=n[0],o=n[1],c=n[2],u=parseInt(n[3]);let[t,s]=await this.accessControl(e,n[4]);var h=await this.$allianceUserCreate([o,a],e,!0);(o=await t.caAbolish({cid:o,uid:a,key:h.prvkey,witness:h.data.pubkey,address:h.data.addr,erid:c,abolishHeight:u},s,r))&&i.push(o)}return i}async enchanceCp(t,e,r){if(e||t.length<2||4<t.length)throw new f(l.MISC_ERROR,"ca.enchance toCid fromCid height [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3));e=i.str(0,0),t=i.str(1,0);let a=i.uint(2,0);(!a||a<this.wdb.curHeight)&&(a=this.wdb.curHeight+k.retargetInterval);var[r,e]=await s.enchanceCp({to:e,from:t,enchanceHeight:a},n);return r&&e?e:null}async queryMyErlist(t,e,r){if(e)throw new f(l.MISC_ERROR,"ca.list.me query: 条件查询自己的电子权利 条件数组");return e=new b([t]).array(0,[]),this.wdb.erList.query(e)}}},function(t,e,r){var i=r(29);const{ContractEnvType:s,ContractStatus:n}=r(5),a=r(6),o=r(110);t.exports=class extends i{constructor(t){super(),this.db=t}async loadHistory(){var t;for(t of await this.db.getContracts())t&&(t.period<this.db.curHeight&&t.transStatus==n.CreatedOnMem?await this.delTransContract(t,!0):(t.id=t.type+"."+t.addr,await this.saveContract(t),t.transStatus==n.Promised&&this.db.autoTaskMgr.addTask(new o(this.db.network.txcheckpoint,t),this.db.network.txchecktime[t.type])))}query(t,e){return(t=this.get(t+"."+e))?t.transStatus:n.None}async addTransContract(t,e,r=!1){e.id=e.type+"."+e.addr;var i=this.get(e.id);t===s.Mempool&&((e=i||e).transStatus||(e.transStatus=n.CreatedOnMem),await this.saveContract(e,r))}async saveContract(t,e=!1){t.id=t.id||t.type+"."+t.addr,this.set(t.id,t),e&&(e=a.hash256(Buffer.from(t.id)).toString("hex"),await this.db.batchPut(this.db.tidCreator(e),Buffer.from(JSON.stringify(t))))}async promiseContract(t,e=!1){let r=!1;var i=t.type+"."+t.addr;let s=this.get(i);return s&&s.oper==t.oper||(r=!0,s=t),(!s.transStatus||s.transStatus<n.Promised)&&(r=!0,s.transStatus=n.Promised),r&&await this.saveContract(s,e),r}async confirmContract(t,e,r){t=t.type+"."+t.addr;let i=this.get(t);!i||i.transStatus!=n.Promised||e!=n.Confirmed&&e!=n.Expired||(i.transStatus=e,await this.saveContract(i,r))}async delTransContract(t,e){var r=t.type+"."+t.addr,i=this.get(r);i&&i.oper==t.oper&&(this.delete(r),e&&(i=a.hash256(Buffer.from(r)).toString("hex"),await this.db.batchDel(this.db.tidCreator(i))))}}},function(t,e,r){const i=r(5).HtlcStatus;r=r(29);class s extends r{constructor(t){super(),this.db=t}async loadHistory(){var t,e;for(t of(this.clear(),await this.db.loadHtlcList()))this.set(t.id,t),t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.id,t))}setAccount(t,e,r){this.delAccount(t),e&&r&&(t.wid=e,t.account=r,e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.id,t))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.id))}}s.vpItem=class t{constructor(t){this.fromOptions(t||{})}fromOptions(t){this.shash=t.shash,this.sidx=t.sidx,this.sheight=t.sheight,this.ahash=t.ahash,this.aidx=t.aidx,this.aheight=t.aheight,this.src=t.src,this.dst=t.dst,this.aa=t.aa,this.ab=t.ab,this.ba=t.ba,this.bb=t.bb,this.amount=t.amount,this.rate=t.rate,this.pst=t.pst}toRaw(){let t={};return t.shash=this.shash,t.sidx=this.sidx,t.sheight=this.sheight,t.ahash=this.ahash,t.aidx=this.aidx,t.aheight=this.aheight,t.src=this.src,t.dst=this.dst,t.amount=this.amount,t.rate=this.rate,t.pst=this.pst||i.Init,t.aa=this.aa||"",t.ab=this.ab||"",t.ba=this.ba||"",t.bb=this.bb||"",Buffer.from(JSON.stringify(t),"utf-8")}get id(){return""+this.shash+this.sidx}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(e){return(new t).fromRaw(e)}},t.exports=s},,,,,,,,,,,,,,,function(t,e,r){"use strict";
|
|
873
|
+
*/const i=r(0),s=r(320),n=r(73),a=r(122),o=r(96).walletdb,c=r(161),u=r(243),h=r(92),l=h.errors,p=h.MAGIC_STRING,f=r(91),d=r(63),m=r(109),g=r(1),y=r(196),v=r(3),b=r(78),w=r(34),x=r(17),k=r(7),S=r(6),E=r(28),_=r(12),A=r(32),R=r(133),I=r(59),j=r(46),C=r(19),P=r(138),O=r(139),{ContractType:T,ContractState:F,PropStatus:B,HtlcStatus:N}=r(5),D=r(140),L=r(125),H=r(124),z=H.Mnemonic,M=r(143),U=r(21).opcodes;t.exports=class extends h{constructor(t){super(t),i(t,"RPC requires a WalletDB."),this.wdb=t,this.keys=t.keys,this.network=t.network,this.logger=t.logger.context("rpc"),this.client=t.client,this.init()}init(){this.add("sys.alliance.create",this.allianceCreate),this.add("sys.alliance.import",this.allianceImport),this.add("sys.alliance.delete",this.allianceDelete),this.add("sys.alliance.refresh",this.refreshAlliance),this.add("sys.alliance.refresh.async",this.refreshAllianceAsync),this.add("sys.alliance.gettoken",this.getAllianceNodeToken),this.add("sys.alliance.user",this.allianceUserCreate),this.add("wallet",this.routerOfWallet),this.add("wallet.create",this.mkwallet),this.add("wallet.exportmnemonic",this.exportMnemonic),this.add("wallet.export",this.dumpWallet),this.add("wallet.import",this.importWallet),this.add("wallet.list",this.getWallets),this.add("wallet.info",this.getWalletInfo),this.add("wallet.block",this.getWalletBlock),this.add("wallet.layouth",this.getWalletLayoutH),this.add("wallet.encrypt",this.encryptWallet),this.add("wallet.decrypt",this.decryptWallet),this.add("wallet.changepassphrase",this.changePassphrase),this.add("wallet.lock",this.walletLock),this.add("wallet.unlock",this.unlock),this.add("wallet.blocks",this.getblocks),this.add("wallet.auth",this.walletAuth),this.add("key",this.routerOfKey),this.add("key.export.private",this.dumpPrivKey),this.add("key.export.public",this.getKey),this.add("key.master.admin",this.masterkey),this.add("key.import.private",this.importPrivKey),this.add("key.import.public",this.importPubkey),this.add("key.import.address",this.importAddress),this.add("key.shared.add",this.addShared),this.add("key.shared.del",this.removeShared),this.add("account",this.routerOfAccount),this.add("account.list",this.listAccounts),this.add("account.get",this.accountGet),this.add("account.create",this.accountCreate),this.add("account.received",this.getReceivedByAccount),this.add("account.listreceived",this.listReceivedByAccount),this.add("balance.confirmed",this.getBalance),this.add("balance.all",this.getBalanceAll),this.add("balance.unconfirmed",this.getUnconfirmedBalance),this.add("balance.log",this.getBalanceLog),this.add("comm.notify",this.commNotify),this.add("comm.hash",this.calcHash),this.add("comm.listNotify",this.listNotify),this.add("comm.secret",this.sendSecret),this.add("comm.listContact",this.listContact),this.add("comm.scanContact",this.scanContact),this.add("comm.comment",this.sendComment),this.add("comm.comment.query",this.commentQuery),this.add("sys.walletdb.stop",this.stop),this.add("sys.walletnode.shutdown",this.shutdown),this.add("sys.walletdb.create",this.createWalletDb),this.add("sys.walletdb.destroy",this.destroyWalletDb),this.add("sys.zap",this.zap),this.add("sys.setfee",this.setTXFee),this.add("sys.message.sign",this.signMessage),this.add("sys.rescan",this.rescan),this.add("sys.log",this.sysLog),this.add("address",this.routerOfAddress),this.add("address.list",this.getAddressesByAccount),this.add("address.index",this.getAddressesByIndex),this.add("address.receive",this.getAccountAddress),this.add("address.change",this.getAccountChangeAddress),this.add("address.nested",this.getAccountNestedAddress),this.add("address.create",this.createAddress),this.add("address.create.admin",this.createAddressAdmin),this.add("address.receive.create",this.createAddress),this.add("address.change.create",this.createChange),this.add("address.nested.create",this.createNested),this.add("address.import",this.importAddress),this.add("address.key.admin",this.getPrivKey),this.add("address.wif.admin",this.getwif),this.add("address.has",this.hasAddress),this.add("address.amount",this.getReceivedByAddress),this.add("address.account",this.getAccount),this.add("address.received",this.getReceivedByAddress),this.add("address.received.list",this.listReceivedByAddress),this.add("cp",this.routerOfCp),this.add("cp.create",this.cpRegister),this.add("cp.create.async",this.cpRegisterAsync),this.add("cp.change",this.cpChange),this.add("cp.query",this.cpQuery),this.add("cp.mine",this.cpMine),this.add("cp.x509",this.cpX509),this.add("cp.user",this.getUserToken),this.add("sc",this.routerOfSc),this.add("sc.register",this.scRegister),this.add("sc.run",this.scRun),this.add("ca",this.routerOfCa),this.add("ca.issue",this.caIssue),this.add("ca.user.status",this.caUserStatus),this.add("ca.user.log",this.caUserLog),this.add("ca.abolish",this.caAbolish),this.add("ca.enchance",this.enchanceCp),this.add("ca.list.me",this.queryMyErlist),this.add("ca.issue.async",this.caIssueAsync),this.add("ca.abolish.async",this.caAbolishAsync),this.add("ca.issue.public",this.caIssuePublic),this.add("ca.abolish.public",this.caAbolishPublic),this.add("order",this.routerOfOrder),this.add("order.setGuider",this.setGuider),this.add("order.getGuider.wallet",this.getGuider),this.add("order.pay",this.payOrder),this.add("order.query.wallet",this.queryOrderList),this.add("prop",this.routerOfProp),this.add("prop.create",this.propCreate),this.add("prop.send",this.propExchange),this.add("prop.donate",this.propDonate),this.add("prop.receive",this.propReceive),this.add("prop.createlist",this.propCreateList),this.add("prop.sendlist",this.propSendList),this.add("prop.order",this.propOrder),this.add("prop.found",this.propFound),this.add("prop.sale",this.propSale),this.add("prop.buy",this.propBuy),this.add("prop.wallet.byid",this.propGet),this.add("prop.wallet.byoid",this.listPropByOid),this.add("prop.wallet.byaddress",this.listProp),this.add("contract",this.routerOfContract),this.add("contract.create",this.contractCreate),this.add("contract.promise",this.contractPromise),this.add("contract.execute",this.contractExecute),this.add("contract.mine",this.contractOfMine),this.add("htlc",this.routerOfHTLC),this.add("htlc.suggest",this.htlcSuggest),this.add("htlc.suggest.cancel",this.htlcSuggestCancel),this.add("htlc.suggest.deal",this.htlcSuggestDeal),this.add("htlc.assent",this.htlcAssent),this.add("htlc.assent.cancel",this.htlcAssentCancel),this.add("htlc.assent.deal",this.htlcAssentDeal),this.add("htlc.query",this.htlcQuery),this.add("vote.send",this.sendVote),this.add("vote.send.async",this.sendVoteAsync),this.add("oracle.send",this.sendOracle),this.add("stock.offer",this.stockOffer),this.add("stock.purchase",this.stockPurchase),this.add("stock.purchaseTo",this.stockPurchaseTo),this.add("stock.send",this.stockSend),this.add("stock.bid",this.stockBid),this.add("stock.auction",this.stockAuction),this.add("stock.list.wallet",this.stockList),this.add("stock.record.wallet",this.stockRecordList),this.add("tx.get.wallet",this.getTransaction),this.add("tx.list",this.listTransactions),this.add("tx.create",this.createTX),this.add("tx.send",this.sendTX),this.add("tx.send.async",this.sendTXAsync),this.add("tx.last",this.getLast),this.add("tx.pending",this.getPending),this.add("tx.pending.get",this.getPendingItem),this.add("tx.pending.hash",this.getPendingHash),this.add("tx.pending.count",this.getPendingCount),this.add("tx.resend.admin",this.resendWalletTransactions),this.add("tx.mstrans",this.listMSTrans),this.add("tx.mstrans.sign",this.signMSTrans),this.add("tx.history",this.getHistory),this.add("tx.history.since",this.listSinceBlock),this.add("tx.range",this.getRange),this.add("tx.abandon.admin",this.abandonTransaction),this.add("tx.abandonall.admin",this.abandonPending),this.add("tx.importprunedfunds.admin",this.importPrunedFunds),this.add("tx.removeprunedfunds.admin",this.removePrunedFunds),this.add("tx.resendall.admin",this.resend),this.add("tx.sign.admin",this.signTX),this.add("tx.fund.admin",this.fundRawTransaction),this.add("coin",this.routerOfCoin),this.add("coin.get",this.getCoin),this.add("coin.spender",this.getSpender),this.add("coin.cache",this.getCoincacheSize),this.add("coin.list",this.listUnspent),this.add("coin.selectone",this.selectone),this.add("coin.conserved.get",this.getConservedCoins),this.add("coin.conserved.add",this.conserveCoin),this.add("coin.conserved.del",this.unConserveCoin),this.add("coin.conserved.list",this.listConservedUnspent),this.add("coin.conserved.oper.list",this.listOperUnspent),this.add("coin.locked.list",this.listLockedUnspent)}async routerOfCoin(t){throw new f(l.MISC_ERROR,"\n coin.get 查询硬币-UTXO\n coin.spender 查询硬币的消费者\n coin.list 列表硬币-UTXO\n coin.conserved.get 获取钱包保持的Coin的信息\n coin.conserved.add 钱包增加需要保持的Coin\n coin.conserved.del 钱包减少需要保持的Coin\n coin.conserved.list 列表钱包保持的UTXO\n coin.conserved.oper.list 批量锁定/解锁一组UTXO \n coin.locked.list 列表目前交易层锁定的UTXO\n ")}async routerOfContract(t){throw new f(l.MISC_ERROR,"\n contract.create 发布交易对合约\n contract.promise 签署交易对合约\n contract.execute 执行交易对合约\n contract.mine 获取已签署交易对合约列表\n contract.list 查询并返回交易对\n ")}async routerOfHTLC(t){throw new f(l.MISC_ERROR,"\n htlc.suggest 发布跨链合约\n htlc.suggest.deal 兑现合约\n htlc.suggest.cancel 取消合约\n htlc.assent 响应跨链合约\n htlc.assent.deal 兑现响应\n htlc.assent.cancel 取消响应\n htlc.query 查询合约\n ")}async routerOfWallet(t){throw new f(l.MISC_ERROR,"\n wallet.create 创建钱包\n wallet.list 列表钱包\n wallet.info 查询钱包概要\n wallet.block 查询区块信息\n wallet.exportmnemonic 导出钱包助记词备份\n wallet.export 导出钱包备份\n wallet.import 导入钱包备份\n wallet.encrypt 将主私钥永久加密\n wallet.decrypt 将主私钥永久解密\n wallet.changepassphrase 在主私钥已经加密的情况下,修改其加密密码,要提交旧/新两个密码。如果尚未加密则执行失败\n wallet.lock 在主私钥已加密的前提下,清理内存中的密钥信息以确保锁定,相当于手工执行自动锁定\n wallet.unlock 在主私钥已加密的前提下,解密主私钥,持续一段时间后自动锁定\n wallet.blocks 列表钱包相关区块\n ")}async routerOfAddress(t){throw new f(l.MISC_ERROR,"\n address.list 列表指定账户下地址\n address.receive 列表指定账户下收款地址\n address.change 列表指定账户下找零地址\n address.nested 列表指定账户下嵌套地址\n address.create 创建一个收款地址\n address.create.admin 创建一个收款地址,回显私钥\n address.receive.create 创建一个收款地址\n address.change.create 创建一个找零地址\n address.nested.create 创建一个嵌套地址\n address.import 导入一个地址\n address.key.admin 查询地址的密钥\n address.amount 查询指定地址上的余额\n address.account 查询指定地址对应的账户\n address.wif.admin 查询地址对应的私钥\n address.has 判断钱包是否包含地址\n address.received 根据地址查询进项总额\n address.received.list 根据地址查询进项\n address.filter 在订单流水中,查询符合筛选条件的地址集\n ")}async routerOfAccount(t){throw new f(l.MISC_ERROR,"\n account.list 列表账户\n account.get 查询账户\n account.create 创建账户\n account.received 查询收款总额\n account.listreceived 列表收款记录\n balance.confirmed 已确认余额\n balance.all 余额\n balance.unconfirmed 未确认余额\n balance.log 查询指定账户变更日志\n ")}async routerOfKey(t){throw new f(l.MISC_ERROR,"\n key.export.private 根据输入地址,导出私钥\n key.export.public 根据输入地址,打出公钥\n key.master.admin 导出根密钥和助记词, 注意 encrypt 状态下无法导出私钥\n key.import.private 导入私钥\n key.import.public 导入公钥\n key.import.address 导入地址\n key.shared.add 新增共享公钥\n key.shared.del 删除共享公钥\n ")}async routerOfCp(t){throw new f(l.MISC_ERROR,"\n cp.create 创建CP记录\n cp.change 修改CP记录\n cp.snap 查询CP历史快照\n cp.sps 查询CP权证列表\n cp.remoteQuery 查询全节点中的CP列表\n cp.query 查询本地CP列表\n cp.byClass 根据游戏类别查询CP记录\n cp.byName 根据名称查询CP记录\n cp.byId 根据ID查询CP记录\n cp.mine 当前操作员注册的CP\n cp.x509 为CP创建根证书\n cp.user 生成用户令牌(钱包)\n ")}async routerOfSc(t){throw new f(l.MISC_ERROR,"\n sc.model 查询托管合约模板列表\n sc.register 指定托管合约模板,创建新的实例\n sc.query 查询托管合约实例列表\n sc.run 调用托管合约实例\n ")}async routerOfCa(t){throw new f(l.MISC_ERROR,"\n ca.issue 电子证书签发\n ca.abolish 电子证书废止记录\n ca.verify 电子证书验证\n ca.user.status 根据企业证书编号和用户编号查询\n ca.user.log 根据企业证书编号和用户编号查询日志\n ca.enchance CA机构间增信\n ca.rank 查询CA信用等级\n ca.list 查询电子证书列表\n ca.list.ab 查询电子证书废止记录列表\n ca.list.me 查询钱包内证书列表\n ")}async routerOfOrder(t){throw new f(l.MISC_ERROR,"\n order.pay 支付订单(钱包)\n order.query 查询订单记录\n order.query.admin 查询订单列表(特约节点)\n order.query.wallet 查询订单列表(钱包)\n order.setGuider 为指定厂商、指定用户设定推广员\n order.getGuider 查询指定地址对应的推广员\n order.getGuider.wallet 查询指定地址对应的推广员\n order.queryGuider 查询指定推广员的推广统计\n ")}async routerOfProp(t){throw new f(l.MISC_ERROR,"\n prop.create 创建道具\n prop.send 转移道具\n prop.donate 捐赠道具\n prop.receive 接收捐赠道具\n prop.createlist 批量创建道具\n prop.sendlist 批量转移道具\n prop.order 订购:制备并发送\n prop.found 熔铸道具\n prop.sale 拍卖道具\n prop.buy 购买道具\n prop.byaddress 根据地址查询自己拥有的道具\n prop.wallet.byaddress 根据地址查询自己拥有的道具\n prop.wallet.byid 根据PID查询自己拥有的道具\n prop.wallet.byoid 根据OID查询自己拥有的道具\n ")}async allianceCreate(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"sys.alliance.create password nodeid alliancename (host): 创建联盟节点证书 备份密码 节点编号 盟友名称 (节点地址)");const i=new b([t]);t=i.str(0);var s=i.uint(1,0),n=i.str(2,""),a=i.str(3,"");if(!s||!t)throw new f(l.MISC_ERROR,"节点编号、备份密码都不能为空");let[o,c]=await this.accessControl(r,""),h=(await o.ensureAccount({name:"alliance",witness:!0}),await o.createReceive("alliance",1,o.master));var p=h.getAddress("string"),g=S.hash256(Buffer.concat([Buffer.from(n+"-"+s),o.master.key.privateKey]));const y=new z({entropy:g,language:o.master.mnemonic.language,passphrase:o.master.mnemonic.passphrase});g=u.fromKey(H.fromMnemonic(y),this.network.type).key.deriveAccount(44,0).derive(9).derive(1);const v=S.hash256(Buffer.concat([Buffer.from(n),o.master.key.privateKey]));if(g={body:{language:y.language,phrase:y.getPhrase(),passphrase:y.passphrase,alliancePrivateKey:v.toString("hex"),allianceName:n,allianceNodeId:s,awardAddress:_.fromWitnessPubkeyhash(S.hash160(g.publicKey),this.network.type).toString(this.network.type),allianceNodeToken:await this.getAllianceNodeToken([s,n],e,r),notifyAddress:p},password:t,network:this.network.type,file:this.network.type+`-${n}-${s}.keystore`},e=L.encrypt(g),this.wdb.$parent){let r=!1;for(var w of this.wdb.$parent.config.alliances)if((w=w.split("|"))[0]==n&&w[1]==s){r=!0;break}r||(this.wdb.$parent.config.alliances.push(`${n}|${s}|${e}|${t}|${g.body.awardAddress}|`+a),await this.wdb.$parent.config.saveAsync()),a&&this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([a,g.body.allianceNodeToken.pub])}return r={host:a,key:g.body.allianceNodeToken.pub},t=m.signObj(r,h.privateKey),await o.commNotify({dst:h.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:r,sig:t,pub:h.publicKey.toString("hex")})}),await d.writeFile(g.file,e,"utf8"),r=(await o.getAccount(c)).getReceive().toString(),await this.wdb.logAudit({address:r,oper:"node.create",hash:n+"."+s,index:0}),{nodeid:s,alliancename:n,publicKey:u.fromKey(H.fromMnemonic(y),this.network.type).key.publicKey.toString("hex"),host:a,peerPubkey:g.body.allianceNodeToken.pub,awardAddress:g.body.awardAddress,file:g.file,notifyAddress:p}}async allianceImport(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"sys.alliance.import password nodeid alliancename key (host): 导入联盟节点 备份密码 节点编号 盟友名称 节点公钥 (节点地址)");const i=new b([t]);t=i.str(0);var s=i.uint(1,0),n=i.str(2,""),a=i.str(3,""),o=i.str(4,"");if(!s||!t||!a)throw new f(l.MISC_ERROR,"节点编号、备份密码、节点公钥都不能为空");let[c,u]=await this.accessControl(r,""),h=(await c.ensureAccount({name:"alliance",witness:!0}),await c.createReceive("alliance",1,c.master));var p=h.getAddress("string");if(e={body:{alliancePrivateKey:S.hash256(Buffer.concat([Buffer.from(n),c.master.key.privateKey])).toString("hex"),allianceName:n,allianceNodeId:s,allianceNodeToken:await this.getAllianceNodeToken([s,n],e,r),awardAddress:_.fromWitnessPubkeyhash(S.hash160(Buffer.from(a,"hex")),this.network.type).toString(this.network.type),notifyAddress:p},password:t,network:this.network.type,file:this.network.type+`-${n}-${s}.keystore`},r=L.encrypt(e),this.wdb.$parent){let i=!1;for(var g of this.wdb.$parent.config.alliances)if((g=g.split("|"))[0]==n&&g[1]==s){i=!0;break}i||(this.wdb.$parent.config.alliances.push(`${n}|${s}|${r}|${t}|${e.body.awardAddress}|`+o),await this.wdb.$parent.config.saveAsync()),o&&this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([o,e.body.allianceNodeToken.pub])}t={host:o,key:e.body.allianceNodeToken.pub};var y=m.signObj(t,h.privateKey);return await c.commNotify({dst:h.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:t,sig:y,pub:h.publicKey.toString("hex")})}),await d.writeFile(e.file,r,"utf8"),t=(await c.getAccount(u)).getReceive().toString(),await this.wdb.logAudit({address:t,oper:"node.create",hash:n+"."+s,index:0}),{nodeid:s,alliancename:n,publicKey:a,host:o,peerPubkey:e.body.allianceNodeToken.pub,awardAddress:e.body.awardAddress,file:e.file,notifyAddress:p}}async refreshAlliance(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.refresh amount: 为联盟成员批量充值 充值金额");var i=new b([t]).uint(0,0);if(i<1e4||5e9<i)throw new f(l.MISC_ERROR,"无效的充值金额(10000~5000000000)");let[s,n]=await this.accessControl(r);if(this.wdb.$parent)for(var a of this.wdb.$parent.config.alliances){a=a.split("|"),_.fromString(a[4],this.network.type).isWitnessPubkeyhash()&&await s.send({outputs:[{address:a[4],value:i}]},n);var o=L.decrypt({network:this.network.type,password:a[3],body:a[2]});this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([a[5],o.allianceNodeToken.pub]),await s.ensureAccount({name:"alliance",witness:!0});let t=await s.createReceive("alliance",1,s.master);a={host:a[5],key:o.allianceNodeToken.pub},o=m.signObj(a,t.privateKey),await s.commNotify({dst:t.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:a,sig:o,pub:t.publicKey.toString("hex")})})}}async refreshAllianceAsync(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.refresh.async amount: 为联盟成员批量充值 充值金额");var i=new b([t]).uint(0,0);if(i<1e4||5e9<i)throw new f(l.MISC_ERROR,"无效的充值金额(10000~5000000000)");let[s,n]=await this.accessControl(r);if(this.wdb.$parent)for(var a of this.wdb.$parent.config.alliances){a=a.split("|"),_.fromString(a[4],this.network.type).isWitnessPubkeyhash()&&s.send({outputs:[{address:a[4],value:i}]},n);var o=L.decrypt({network:this.network.type,password:a[3],body:a[2]});this.wdb.$parent.rpc.addPeer&&await this.wdb.$parent.rpc.addPeer([a[5],o.allianceNodeToken.pub]),await s.ensureAccount({name:"alliance",witness:!0});let t=await s.createReceive("alliance",1,s.master);a={host:a[5],key:o.allianceNodeToken.pub},o=m.signObj(a,t.privateKey),s.commNotify({dst:t.getAddress("string"),content:JSON.stringify({cmd:"peeradd",payload:a,sig:o,pub:t.publicKey.toString("hex")})})}}async allianceDelete(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"sys.alliance.delete nodeid alliancename: 删除联盟节点证书 节点编号 盟友名称");const i=new b([t]);var s=i.uint(0,0),n=i.str(1,"");let[a,o]=await this.accessControl(r,"");if(!s||!n)throw new f(l.MISC_ERROR,"节点编号、节点名称都不能为空");if(this.wdb.$parent)for(let t=0;t<this.wdb.$parent.config.alliances.length;t++){var c=this.wdb.$parent.config.alliances[t].split("|");c[0]==n&&c[1]==s&&(this.wdb.$parent.config.alliances.splice(t,1),await this.wdb.$parent.config.saveAsync(),c[5]&&await this.wdb.$parent.rpc.delPeer([c[5]]))}return e=(await a.getAccount(o)).getReceive().toString(),await this.wdb.logAudit({address:e,oper:"node.delete",hash:n+"."+s,index:0}),!0}async getAllianceNodeToken(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.gettoken (nodeid alliancename): 创建联盟节点信道密钥 (节点编号 盟友名称)");const i=new b([t]);e=i.uint(0,0),t=i.str(1);var[r]=await this.accessControl(r);let s=z.fromOptions(r.master.mnemonic),n=(t&&(o=S.hash256(Buffer.concat([Buffer.from(t+"-"+e),r.master.key.privateKey])),s=new z({entropy:o,language:r.master.mnemonic.language,passphrase:r.master.mnemonic.passphrase})),S.hash256(Buffer.from(s.toSeed().toString("hex")))),a=E.publicKeyCreate(n,!0);var o=_.fromWitnessPubkeyhash(S.hash160(a),this.network.type).toString();return{network:this.network.type,alliancename:t,sn:e,prv:n.toString("hex"),pub:a.toString("hex"),address:o}}async allianceUserCreate(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.alliance.user cid uid (alliancename): 创建企业用户 企业编号 用户编号 (盟友名称)");return this.$allianceUserCreate(t,r)}async $allianceUserCreate(t,e,r){const i=new b([t]);t=i.str(0);var s=i.uint(1),n=i.str(2,"");let a=null,o=null;o=n?([e]=await this.accessControl(e),S.hash256(Buffer.concat([Buffer.from(n),e.master.key.privateKey]))):Buffer.from(this.wdb.$parent.config.alliancePrivateKey,"hex"),n=A.fromPrivate(o,!0,this.network);let c=A.fromPrivate(S.hash256(Buffer.concat([Buffer.from(t+"-"+s),n.privateKey]),!0,this.network));return c.witness=!0,a=c.signData({cid:t,uid:s}),r&&(a.prvkey=c.privateKey.toString("hex")),a}async isReady(t){return this.wdb.isFull()}async shutdown(t,e){return this.wdb.$parent&&this.wdb.$parent.close().catch(t=>{setImmediate(()=>{throw t})}).finally(async()=>{await new Promise(t=>{setTimeout(t,1e4)}),process.exit(0)}),"Stopping."}async stop(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"sys.walletdb.stop");return this.wdb.close(),"Stopping walletdb..."}async destroyWalletDb(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"sys.walletdb.destroy: 删除钱包数据库");return await this.wdb.close(),await this.wdb.destroy(),"Destroyed."}async createWalletDb(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"sys.walletdb.create: 删除原有钱包数据库并重建");return await this.wdb.close(),await this.wdb.destroy(),await this.wdb.open(),"Created."}async fundRawTransaction(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'tx.fund.admin "hexstring" ( options openid )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.buf(0),t=i.obj(1),!e)throw new f(l.TYPE_ERROR,"Invalid hex string.");const a=I.fromRaw(e);if(0===a.outputs.length)throw new f(l.INVALID_PARAMETER,"TX must have at least one output.");let o=null,c=null;if(t){const e=new b([t]);o=e.ufixed("feeRate",8),c=(c=e.str("changeAddress"))&&h.parseAddress(c,this.network)}return await s.fund(a,{rate:o,changeAddress:c,account:n}),{hex:a.toRaw().toString("hex"),changepos:a.changeIndex,fee:w.btc(a.getFee(),!0)}}async dumpPrivKey(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"key.export.private address [account]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(e=i.str(0,""),!await s.belongToAccount(n,e))throw new f(l.MISC_ERROR,"Invald Account.");t=h.parseHash(e,this.network);const a=await s.getPrivateKey(t);if(a)return a.toSecret();throw new f(l.MISC_ERROR,"Key not found.")}async exportMnemonic(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,"wallet.exportmnemonic password: 备份钱包助记符 备份密码");const i=new b([t]);let[s,n]=await this.accessControl(r);if(e=i.str(0),"primary"==s.id&&"default"!=n)throw new f(l.MISC_ERROR,"wallet.exportmnemonic: Invalid Account");let a={body:{phrase:s.master.mnemonic.getPhrase(),language:s.master.mnemonic.language,passphrase:s.master.mnemonic.passphrase},password:e,network:this.network,file:`./${this.network.type}-wallet${s.db.options.spv?"-spv":""}.keystore`};return this.wdb.$parent&&(a.body.awardAddress=this.wdb.$parent.config.coinbaseAddress),await L.writeEncryptFile(a),!0}async dumpWallet(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'wallet.export "filename"');const i=new b([t]);let[s,n]=await this.accessControl(r);if("primary"==s.id&&"default"!=n)throw new f(l.MISC_ERROR,"Invalid Account");if(e=i.str(0))return await s.exportToFile({file:e}),!0;throw new f(l.TYPE_ERROR,"Invalid filename.")}async encryptWallet(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'wallet.encrypt "passphrase"');const i=new b([t]);let[s,n]=await this.accessControl(r);if(e=i.str(0,""),"primary"==s.id&&"default"!=n)throw new f(l.MISC_ERROR,"Invalid Account");if(s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Already running with an encrypted wallet.");if(e.length<1)throw new f(l.MISC_ERROR,'wallet.encrypt "passphrase"');try{await s.setPassphrase(null,e)}catch(t){throw new f(l.WALLET_ENCRYPTION_FAILED,"Encryption failed.")}return"wallet encrypted"}async getAccount(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'address.account "address"');const i=new b([t]);let[s,n]=await this.accessControl(r);return("primary"!=s.id||"default"==n)&&(e=i.str(0,""),t=h.parseHash(e,this.network),r=await s.getPath(t))?r.name:""}async getAddressesByIndex(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'address.index "index"');const i=new b([t]);let[s,n]=await this.accessControl(r);if("primary"!=s.id||"default"==n){var a=i.uint(0);for(const t of await s.getPaths("default")){const e=t.toAddress();if(0==t.branch&&t.index==a)return e.toString(this.network)}}}async accessControl(t,e){let r=await this.wdb.get("primary");if(this.wdb.options.acl.isRoot(t.options.cid))"primary"!==t.options.wid?(r=await this.wdb.get(t.options.wid),e=null):"*"===(e=e||"default")&&(e=null);else if("primary"!==t.options.wid){if(!await r.belongToAccount(t.options.cid,t.options.wid))throw new f(l.TYPE_ERROR,"Invalid wid.");r=await this.wdb.get(t.options.wid),e=null}else e=t.options.cid;return await r.ensureAccount({name:e,witness:!0}),[r,e]}async getAddressesByAccount(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.list "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=[],o=[],c=[];for(const t of await s.getPaths(n)){const e=t.toAddress();(0==t.branch?a:1==t.branch?o:c).push(e.toString(this.network))}return[a,o,c]}async getAccountAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.receive "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);if(a)return a.receive.getAddress("string")}async getAccountChangeAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.change.list "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);if(a)return a.change.getAddress("string")}async getAccountNestedAddress(t,e,r){if(e)throw new f(l.MISC_ERROR,'address.nested.list "account"');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);if(a)return a.nested.getAddress("string")}async getBalance(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,'balance.confirmed ( "account" minconf includeWatchonly )');const i=new b([t]);let s,[n,a]=await this.accessControl(r,i.str(0,""));return e=i.u32(1,1),t=i.bool(2,!1),n.watchOnly!==t?0:(r=await n.getBalance(a),s=0<e?r.confirmed:r.unconfirmed,w.btc(s,!0))}async getBalanceLog(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'balance.log "account" (height)');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0));return e=i.uint(1,0),s.queryBalanceLog(n,e)}async getBalanceAll(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,'balance.all ( "account" minconf includeWatchonly )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0));return(await s.getBalance(n)).toJSON()}async getUserToken(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"cp.user cid uid: 生成登录令牌 厂商编码 用户编码");const i=new b([t]);e=i.str(0),t=i.str(1);let[s]=await this.accessControl(r);return s.tokenCreate({cid:e,uid:t},t)}async masterkey(t,e,r){let[i,s]=await this.accessControl(r);if("primary"==i.id||"default"==s)return i.master.toJSON(!0)}async getHistory(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,"tx.history (page acct):查询交易历史记录 (页码 账号)");const i=new b([t]);var s=i.uint(0,1);if(s<1)throw new f(l.MISC_ERROR,"页面必须是大于0的数字");let[a,o]=await this.accessControl(r,i.str(1));var c;e=await a.getHistory(o);n.sortTX(e);let u=0,h=[];for(c of e){if(u<10*(s-1));else{if(u>=10*s)break;h.push(c)}u++}t=await a.toDetails(h);const p={};return p.items=t,p.pageSize=10,p.pageNum=s,p.total=e.length,p}async stockOffer(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.offer cid amount price (openid): 发行凭证 厂商编码 发行总量 发行单价 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,""),!(t=i.uint(1,0))||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_ADDED_SINGLE)throw new f(l.MISC_ERROR,`stock.offer amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_ADDED_SINGLE);if(!(r=i.uint(2,0))||r<k.GRAM||r>k.STOCK_MAX_PRICE)throw new f(l.MISC_ERROR,`stock.offer price error: must over ${k.GRAM} and less `+k.STOCK_MAX_PRICE);return s.stockOffer(e,t,r,n)}async stockPurchase(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"stock.purchase cid amount (openid): 购买凭证 厂商编码 购买量 (资金账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.str(0,""),!(t=i.uint(1,0))||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);return s.stockPurchase(e,t,n)}async stockPurchaseTo(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.purchaseTo cid amount dst (src): 代买凭证 厂商编码 购买量 目标账号 (资金账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,""),t=i.uint(1,0),r=i.str(2,""),!t||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);let a={};return a.order=await s.stockPurchaseTo(e,t,r,n),a}async stockSend(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.send cid amount recvaddr (openid sendaddr): 转让凭证 厂商编码 转让量 接收地址 (玩家账号 发送地址)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0,""),t=i.uint(1,0),r=i.str(2,null);var a=i.str(4,null);if(!t||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`stock.send amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);return s.stockSend(e,t,r,n,a)}async stockBid(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"stock.bid cid amount price (openid srcAddr): 转让凭证 厂商编码 转让总量 转让单价 (玩家账户 凭证账户地址)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0,""),t=i.uint(1,0),r=i.uint(2,0);var a=i.str(4,"");if(!t||t<k.STOCK_TRADE_SINGLE||t>k.STOCK_MAX_TRADE_SINGLE)throw new f(l.MISC_ERROR,`stock.bid amount error: must over ${k.STOCK_TRADE_SINGLE} and less `+k.STOCK_MAX_TRADE_SINGLE);return s.stockBid(e,t,r,n,a)}async stockAuction(t,e,r){if(e||t.length<4)throw new f(l.MISC_ERROR,"stock.auction cid addr amount price (openid): 购买凭证 CP编号 转让者地址 购买量 价格 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.str(0,""),t=i.str(1,""),r=i.uint(2);var a=i.uint(3);if(!r||r<k.STOCK_TRADE_SINGLE)throw new f(l.MISC_ERROR,"stock.auction amount error: must over "+k.STOCK_TRADE_SINGLE);if(a)return s.stockAuction(e,t,r,a,n);throw new f(l.MISC_ERROR,"stock.auction price error")}async stockList(t,e,r){if(e)throw new f(l.MISC_ERROR,"stock.list.wallet conditions: 我的凭证列表 查询条件");return e=new b([t]).array(0,[]),this.wdb.accountList.query(e)}async stockRecordList(t,e,r){if(e)throw new f(l.MISC_ERROR,"stock.record.wallet type (cid height conditions): 查询凭证流水 流水类型(0代表全部类型) (厂商编号 最小高度 组合查询条件)");const i=new b([t]);let[s]=await this.accessControl(r);e=i.uint(0,0),t=i.str(1),r=i.uint(2,0);var n,a,o,c=i.array(3,[]);let u=null;for([n,a]of(u=e?await s.db.getStockRecord(e,t,r):await s.db.getStockRecordByCid(t,r)).data)a.account||(o=await s.getAccountByAddress(a.addr))&&(a.wid=o.wid,a.account=o.name,u.set(a.itemNo,a));return u.query(c)}async sendSecret(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"comm.secret dst message (openid): 安全通信消息 收信地址 信息内容 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,""),t=i.str(1,""),h.parseAddress(e,this.network))return s.sendSecret(e,t,n);throw new f(l.TYPE_ERROR,"Invalid Destination Address.")}async calcHash(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"comm.hash content: 计算输入的哈希值");return e=new b([t]).str(0,""),S.hash256(Buffer.from(e)).toString("hex")}async commNotify(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"comm.notify addr content (openid): 发送点对点消息 地址 内容 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));return e=i.str(0,""),t=i.obj(1,{}),s.commNotify({dst:e,content:t,account:n})}async setGuider(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"order.setGuider src cid dst: 设定推广员 推广员地址 厂商编码 目标用户地址(逗分) [支付账号]");const i=new b([t]);var[,t]=await this.accessControl(r,i.str(3)),s=i.str(0,""),n=i.str(1,"");let a=i.array(2,[]);return 1==a.length&&await this.wdb.getGuider(a[0])==s?null:this.createTX([{comment:{oper:"greg",addr:s,cid:n}},a.map(t=>({address:t,value:1e4})),t],e,r)}async getGuider(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"order.getGuider.wallet dst: 查询推广员 目标用户地址");return e=new b([t]).str(0,""),this.wdb.getGuider(e)}async payOrder(t,e,r){if(e||t.length<4)throw new f(l.MISC_ERROR,"order.pay cid uid sn sum (openid): 支付订单 厂商编码 玩家游戏内编码 订单编码 总额 (玩家账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.str(0,""),t=i.str(1,""),r=i.str(2,"");var a=i.uint(3,0);return s.payOrder(e,t,r,a,n)}async scanContact(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'comm.scanContact "txid" ( index )');const s=new b([t]);let[n]=await this.accessControl(r);if(e=s.hash(0),i(e,"Hash is required."),t=s.uint(1,-1),!e)throw new f(l.TYPE_ERROR,"Invalid parameter");if(r=await n.getTX(e))return this.wdb.scanContact(r.tx,t);throw new f(l.WALLET_ERROR,"TX not found.")}async listContact(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.listContact: 列表联系人");return e=new b([t]).array(0,[]),this.wdb.listContact(e,null,["address"])}async listNotify(t,e,r){if(e)throw new f(l.MISC_ERROR,"comm.listNotify (query): 通知列表 (查询条件,使用 account 参数可分账号查询)");return e=new b([t]).array(0,[]),this.wdb.listNotify(e)}async queryOrderList(t,e,r){if(e)throw new f(l.MISC_ERROR,"order.query.wallet (conditions account): 支付订单列表 (查询条件 子账户)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));return e=i.array(0,[]),s.getOrderList(e,n)}async getReceivedByAccount(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'account.received "account" ( minconf )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));var a=i.u32(1,0),o=this.wdb.curHeight;e=await s.getPaths(n);const c=new Set;for(const t of e)c.add(t.hash);let u=0,h=-1;for(const t of await s.getHistory(n)){var p=t.getDepth(o);if(!(p<a)){(-1===h||p<h)&&(h=p);for(const e of t.tx.outputs){var d=e.getHash("hex");d&&c.has(d)&&(u+=e.value)}}}return w.btc(u,!0)}async getReceivedByAddress(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'address.received "address" ( minconf )');const i=new b([t]);let[s]=await this.accessControl(r);e=i.str(0,"");var n=i.u32(1,0),a=this.wdb.curHeight,o=h.parseHash(e,this.network);let c=0;for(const t of await s.getHistory())if(!(t.getDepth(a)<n))for(const e of t.tx.outputs)e.getHash("hex")===o&&(c+=e.value);return w.btc(c,!0)}async _toWalletTX(t,e){let[r]=await this.accessControl(t);const i=await r.toDetails(e);if(!i)throw new f(l.WALLET_ERROR,"TX not found.");let s=!0;for(const t of i.inputs)if(t.path){s=!1;break}const n=[];let a=0,o=0;for(let t=0;t<i.outputs.length;t++){const e=i.outputs[t];e.path?1!==e.path.branch&&(n.push({account:e.path.name,address:e.address.toString(this.network),category:"receive",amount:w.btc(e.value,!0),label:e.path.name,vout:t}),o+=e.value):s||(n.push({account:"",address:e.address?e.address.toString(this.network):null,category:"send",amount:-w.btc(e.value,!0),fee:-w.btc(i.getFee(),!0),vout:t}),a+=e.value)}return{amount:w.btc(s?o:-a,!0),confirmations:i.confirmations,blockhash:i.block?g.revHex(i.block):null,blockindex:i.index,blocktime:i.time,txid:g.revHex(i.hash),walletconflicts:[],time:i.mtime,timereceived:i.mtime,"bip125-replaceable":"no",details:n,hex:i.tx.toRaw().toString("hex")}}async getTransaction(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'gettransaction "txid" ( includeWatchonly )');const s=new b([t]);let[n]=await this.accessControl(r);if(e=s.hash(0),i(e,"Hash is required."),t=s.bool(1,!1),!e)throw new f(l.TYPE_ERROR,"Invalid parameter");if(e=await n.getTX(e))return this._toWalletTX(r,e,t);throw new f(l.WALLET_ERROR,"TX not found.")}async abandonPending(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.abandonall.admin [account]: 废弃所有挂起的交易");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));for(const e of await s.getPending(n))try{await s.abandon(e.hash)}catch(t){this.logger.warning(t.message)}return null}async abandonTransaction(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'tx.abandon.admin "txid"');const i=new b([t]);let[s]=await this.accessControl(r);if(!(e=i.hash(0)))throw new f(l.TYPE_ERROR,"Invalid parameter.");if(await s.abandon(e))return null;throw new f(l.WALLET_ERROR,"Transaction not in wallet.")}async getUnconfirmedBalance(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,"balance.unconfirmed");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=await s.getBalance(n),w.btc(e.unconfirmed,!0)}async importPrivKey(t,e,r){if(e||t.length<1||4<t.length)throw new f(l.MISC_ERROR,'key.import.private account "privatekey" passphrase [rescan]');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));e=i.str(1),t=i.str(2),r=i.bool(3,!1);const a=h.parseSecret(e,this.network);return a.witness=!0,await s.importKey(n,a,t),r&&await this.wdb.rescan(0),!0}async walletAuth(t,e,r){return!0}async importWallet(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'wallet.import "filename" ( rescan )');const i=new b([t]);let[s]=await this.accessControl(r);var n,o,u,p;e=i.str(0),t=i.bool(1,!1);if(d.unsupported)throw new f(l.INTERNAL_ERROR,"FS not available.");const m=await d.readFile(e,"utf8"),g=[];for(n of m.split(/\n+/))if(0!==(n=n.trim()).length&&!/^\s*#/.test(n)){var y=n.split(/\s+/);if(y.length<4)throw new f(l.DESERIALIZATION_ERROR,"Malformed wallet Data File.");switch(y[0]){case"W":{var v=Buffer.from(y[1],"base64");const t=a.fromRaw(s.db,v);if(s.wid!=t.wid)throw new f(l.DESERIALIZATION_ERROR,"Malformed wallet Key");await t.db.replace(t),s=(await this.accessControl(r))[0];break}case"C":{v=Buffer.from(y[1],"base64");const t=c.fromRaw(s.db,v);t.wallet=s,t.wid=s.wid,t.id=s.id,t.watchOnly=s.watchOnly,await s.saveAccount(t);break}case"A":var w=h.parseSecret(y[1],this.network),x=parseInt(y[5]),k=parseInt(y[7]);g.push([w,x,k])}}for([o,u,p]of(s.accountCache.reset(),g))try{await s.importKey(u,o)}catch(t){continue}return t&&await this.wdb.rescan(0),!0}async importAddress(t,e,r){if(e||t.length<1||4<t.length)throw new f(l.MISC_ERROR,"address.import account address [rescan p2sh]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,"")),a=i.str(1,"");if(e=i.bool(2,!1),i.bool(3,!1)){let t=i.buf(0);if(!t)throw new f(l.TYPE_ERROR,"Invalid parameters.");t=x.fromRaw(t),t=x.createScript(t.hash160(),x.types.SCRIPTHASH),a=_.fromScript(t)}else a=h.parseAddress(a,this.network);return await s.importAddress(n,a),e&&await this.wdb.rescan(0),!0}async importPubkey(t,e,r){if(e||t.length<1||4<t.length)throw new f(l.MISC_ERROR,"key.import.public account pubkey [rescan]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));if(e=i.buf(1),t=i.bool(2,!1),e)return r=A.fromPublic(e,this.network),await s.importKey(n,r),t&&await this.wdb.rescan(0),!0;throw new f(l.TYPE_ERROR,"Invalid parameter.")}async listAccounts(t,e,r){if(e||2<t.length)throw new f(l.MISC_ERROR,"account.list ( minconf includeWatchonly)");const i=new b([t]);let[s]=await this.accessControl(r);var n=i.u32(0,0),a=i.bool(1,!1);const o={};for(const t of await s.getAccounts()){var c=await s.getBalance(t);let e=c.unconfirmed;0<n&&(e=c.confirmed),s.watchOnly!==a&&(e=0),o[t]=w.btc(e,!0)}return o}async listConservedUnspent(t,e,r){if(e||0<t.length)throw new f(l.MISC_ERROR,"coin.conserved.list: 查询已经保持的Unspent列表");let[i]=await this.accessControl(r);const s=[];for(const t of i.getConserved())s.push({txid:t.txid(),vout:t.index});return s}async listReceivedByAccount(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,"account.listreceived ( minconf includeempty includeWatchonly )");const i=new b([t]);e=i.u32(0,0),t=i.bool(1,!1);var s=i.bool(2,!1);return this._listReceived(r,e,t,s,!0)}async listReceivedByAddress(t,e,r){if(e||3<t.length)throw new f(l.MISC_ERROR,"address.received.list ( minconf includeempty includeWatchonly )");const i=new b([t]);e=i.u32(0,0),t=i.bool(1,!1);var s=i.bool(2,!1);return this._listReceived(r,e,t,s,!1)}async _listReceived(t,e,r,i,s){let[n]=await this.accessControl(t);t=await n.getPaths();var a=this.wdb.curHeight;const o=new Map;for(const e of t){const t=e.toAddress();o.set(e.hash,{involvesWatchonly:n.watchOnly,address:t.toString(this.network),account:e.name,amount:0,confirmations:-1,label:""})}for(const t of await n.getHistory()){var c=t.getDepth(a);if(!(c<e))for(const e of t.tx.outputs){const t=e.getAddress();if(t){var u=t.getHash("hex");const r=o.get(u);r&&((-1===r.confirmations||c<r.confirmations)&&(r.confirmations=c),r.address=t.toString(this.network),r.amount+=e.value)}}}let h=[];for(const t of o.values())h.push(t);if(s){const t=new Map;for(const e of h){const r=t.get(e.account);r?r.amount+=e.amount:(t.set(e.account,e),e.address=void 0)}h=[];for(const e of t.values())h.push(e)}const l=[];for(const e of h)if(r||0!==e.amount){-1===e.confirmations&&(e.confirmations=0);try{e.amount=w.btc(e.amount,!0),l.push(e)}catch(t){this.logger.error("invalid amount:entry(%s) msg(%s)",JSON.stringify(e),t.message)}}return l}async listSinceBlock(t,e,r){if(e)throw new f(l.MISC_ERROR,'tx.history.since ( "blockhash" target-confirmations includeWatchonly account)');var i=this.wdb.curHeight;const s=new b([t]);let[n,a]=await this.accessControl(r,s.str(3,""));e=s.hash(0);var o,c=s.u32(1,0);t=s.bool(2,!1);if(n.watchOnly!==t)return[];let u=-1;e&&(t=await this.client.getEntry(e))&&(u=t.height),-1===u&&(u=i);const h=[];let p;for(const t of await n.getHistory(a))t.height<u||t.getDepth(i)<c||((!p||t.height>p)&&(p=t),o=await this._toListTX(r,t),h.push(o));return{transactions:h,lastblock:p&&p.block?g.revHex(p.block):v.NULL_HASH}}async _toListTX(t,e){let[r]=await this.accessControl(t);const s=await r.toDetails(e);if(!s)throw new f(l.WALLET_ERROR,"TX not found.");let n=!0;for(const t of s.inputs)if(t.path){n=!1;break}let a,o,c,u,h,p,d=0,m=0;for(let t=0;t<s.outputs.length;t++){const e=s.outputs[t];e.path?1!==e.path.branch&&(m+=e.value,o=e,u=t):(d+=e.value,a=e,c=t)}return p=n?(h=o,u):(h=a,c),h||(i(!n),n=!0,h=o,p=u),{account:h.path?h.path.name:"",address:h.address?h.address.toString(this.network):null,category:n?"receive":"send",amount:w.btc(n?m:-d,!0),label:h.path?h.path.name:void 0,vout:p,confirmations:s.getDepth(),blockhash:s.block?g.revHex(s.block):null,blockindex:s.index,blocktime:s.time,txid:g.revHex(s.hash),walletconflicts:[],time:s.mtime,timereceived:s.mtime,"bip125-replaceable":"no"}}async listTransactions(t,e,r){if(e||4<t.length)throw new f(l.MISC_ERROR,'tx.list ( "account" count from includeWatchonly)');const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(0,""));e=i.u32(1,10),t=i.u32(2,0);var o=i.bool(3,!1);if(s.watchOnly!==o)return[];var c=await s.getHistory(a),u=(o=(n.sortTX(c),t+e),Math.min(o,c.length));const h=[];for(let e=t;e<u;e++){var p=c[e];p=await this._toListTX(r,p);h.push(p)}return h}async selectone(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"coin.selectone options (account)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));var a=i.obj(0,{});const o=[];for(const t of await s.getCoins(n)){var c=t.getDepth(this.wdb.curHeight);const e=t.getAddress();if(e){var u=t.getHash("hex");if(u&&!t.isColored&&!(a.value&&t.value<a.value||t.coinbase&&0<t.height&&this.wdb.curHeight<t.height+k.COINBASE_MATURITY)){const r=await s.getKey(u);if(o.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:r?r.name:void 0,redeemScript:r&&r.script?r.script.toJSON():void 0,scriptPubKey:t.script.toJSON(),amount:w.btc(t.value,!0),confirmations:c,spendable:!s.isConserved(t),solvable:!0}),a.len&&o.length>=a.len)break}}}return o}async listUnspent(t,e,r){if(e||4<t.length)throw new f(l.MISC_ERROR,'coin.list ( minconf maxconf ["address", account] )');const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(3,""));var o=i.u32(0,1),c=i.u32(1,9999999),u=i.array(2),p=this.wdb.curHeight;const d=new Set;if(u){const t=new b([u]);for(let e=0;e<u.length;e++){var m=t.str(e,"");m=h.parseHash(m,this.network);if(d.has(m))throw new f(l.INVALID_PARAMETER,"Duplicate address.");d.add(m)}}e=await s.getCoins(a),n.sortCoins(e);const g=[];for(const t of e){var y=t.getDepth(p);if(!(y<o||c<y)){const e=t.getAddress();if(e){var v=t.getHash("hex");if(!u||v&&d.has(v)){const r=await s.getKey(v);g.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:r?r.name:void 0,redeemScript:r&&r.script?r.script.toJSON():void 0,scriptPubKey:t.script.toJSON(),amount:w.btc(t.value,!0),confirmations:y,spendable:!s.isConserved(t),solvable:!0})}}}}return g}async listProp(t,e,r){if(e||4<t.length)throw new f(l.MISC_ERROR,"prop.wallet.byaddress ( minconf maxconf [address, account] )");const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(3,""));var o=i.u32(0,1),c=i.u32(1,9999999),u=i.array(2),p=this.wdb.curHeight;const d=new Set;if(u){const t=new b([u]);for(let e=0;e<u.length;e++){var m=t.str(e,"");m=h.parseHash(m,this.network);if(d.has(m))throw new f(l.INVALID_PARAMETER,"Duplicate address.");d.add(m)}}e=await s.getCoins(a),n.sortCoins(e);const g=[];for(const t of e){var y,v,x=t.getDepth(p);if(!(x<o||c<x)){const e=t.getAddress();e&&(y=t.getHash("hex"),(!u||y&&d.has(y))&&(y=await s.getKey(y),(v=t.getReturnData([U.OP_PROPCREATE,U.OP_PROPCREATE]))&&g.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:y?y.name:void 0,amount:w.btc(t.value,!0),confirmations:x,spendable:!s.isConserved(t),solvable:!0,nd:v})))}}return g}async listPropByOid(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.wallet.byoid oid");const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(1,""));var o=i.str(0),c=this.wdb.curHeight;new Set,e=await s.getCoins(a);n.sortCoins(e);const u=[];for(const t of e){var h,p,d=t.getDepth(c);if(!(d<0||9999999<d)){const e=t.getAddress();e&&(h=t.getHash("hex"),h=await s.getKey(h),(p=t.getReturnData([U.OP_PROPCREATE,U.OP_PROPCREATE]))&&p.oid==o&&u.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:h?h.name:void 0,amount:w.btc(t.value,!0),confirmations:d,spendable:!s.isConserved(t),solvable:!0,nd:p}))}}return{list:u,count:u.length}}async listLockedUnspent(t,e,r){if(e||2<t.length)throw new f(l.MISC_ERROR,'coin.list.locked ["address", account]');const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(1,""));var o=i.array(0),c=this.wdb.curHeight,u=g.now();const p=new Set;if(o){const t=new b([o]);for(let e=0;e<o.length;e++){var d=t.str(e,"");d=h.parseHash(d,this.network);if(p.has(d))throw new f(l.INVALID_PARAMETER,"Duplicate address.");p.add(d)}}let m;m=account?await s.getCoins(a):s.getLockedCoins(),n.sortCoins(m);const y=[];for(const t of m)if(t.lockedByLocktime(c,u)||t.lockedBySequence(c,u)){const e=t.getAddress();if(e){var v=t.getDepth(c),x=t.getHash("hex");if(!o||x&&p.has(x)){var[k,S,E]=t.getLockStatus();const r=await s.getKey(x);y.push({txid:t.txid(),vout:t.index,address:e?e.toString(this.network):null,account:r?r.name:void 0,redeemScript:r&&r.script?r.script.toJSON():void 0,scriptPubKey:t.script.toJSON(),amount:w.btc(t.value,!0),confirmations:v,spendable:!1,solvable:!0,locktype:k,lockheight:S,locktime:E})}}}return y}async listOperUnspent(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,'coin.conserved.oper.list unlock ([{"txid":"txid","vout":n},...]) 保持/解除保持一组UTXO: true/false [{"txid": "交易id","vout": "输出序号"}]');const i=new b([t]);let[s]=await this.accessControl(r);var n=i.bool(0,!1);if(!(e=i.array(1)))throw new f(l.TYPE_ERROR,"Invalid parameter.");for(const t of e){const e=new b([t]);var a=e.hash("txid"),o=e.u32("vout");if(null==a||null==o)throw new f(l.INVALID_PARAMETER,"Invalid parameter.");a=new j(a,o),n?s.unConserveCoin(a):s.conserveCoin(a)}return!0}async setTXFee(t,e,r){if(e||t.length<1||1<t.length)throw new f(l.MISC_ERROR,"sys.setfee rate");if(null==(e=new b([t]).ufixed(0,8)))throw new f(l.TYPE_ERROR,"Invalid parameter.");return this.wdb.feeRate=e,!0}async signMessage(t,e,r){if(e||2!==t.length)throw new f(l.MISC_ERROR,'sys.message.sign "address" "message"');const i=new b([t]);let[s]=await this.accessControl(r);if(!s.master.key)throw new f(l.WALLET_UNLOCK_NEEDED,"Wallet is locked.");e=i.str(0,""),t=h.parseHash(e,this.network);const n=await s.getKey(t);if(!n)throw new f(l.WALLET_ERROR,"Address not found.");r=i.str(1,"");return n.sign(S.hash256(Buffer.from(p+r,"utf8"))).toString("base64")}async changePassphrase(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'wallet.changepassphrase "oldpassphrase" "newpassphrase"');const i=new b([t]);let[s]=await this.accessControl(r);if(e=i.str(0,""),t=i.str(1,""),!s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Wallet is not encrypted.");if(e.length<1||t.length<1)throw new f(l.INVALID_PARAMETER,"Invalid parameter");return await s.setPassphrase(e,t),null}async unlock(t,e,r){const i=new b([t]);let[s]=await this.accessControl(r);r=i.str(0);var n=i.u32(1,60);if(e||s.master.encrypted&&0==t.length)throw new f(l.MISC_ERROR,'wallet.unlock "passphrase" timeout');if(!s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Wallet is not encrypted.");if(r.length<1)throw new f(l.INVALID_PARAMETER,"Invalid parameter");if(null==n)throw new f(l.TYPE_ERROR,"Invalid parameter");return await s.unlock(r,n),null}async decryptWallet(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'wallet.decrypt "passphrase"');const i=new b([t]);let[s]=await this.accessControl(r);if(e=i.str(0,""),!s.master.encrypted)throw new f(l.WALLET_WRONG_ENC_STATE,"Running with an decrypted wallet.");if(e.length<1)throw new f(l.MISC_ERROR,'wallet.decrypt "passphrase"');try{await s.setPassphrase(e)}catch(t){throw new f(l.WALLET_ENCRYPTION_FAILED,"Decryption failed.")}return"wallet decrypted"}async importPrunedFunds(t,e,r){if(e||t.length<2||3<t.length)throw new f(l.MISC_ERROR,'tx.importprunedfunds.admin "rawtransaction" "txoutproof" ( "label" )');const i=new b([t]);if(e=i.buf(0),t=i.buf(1),!e||!t)throw new f(l.TYPE_ERROR,"Invalid parameter.");const s=C.fromRaw(e),n=R.fromRaw(t);if(e=n.hash("hex"),!n.verify())throw new f(l.VERIFY_ERROR,"Invalid proof.");if(!n.hasTX(s.hash("hex")))throw new f(l.VERIFY_ERROR,"Invalid proof.");if(-1===(t=await this.client.getEntry(e)))throw new f(l.VERIFY_ERROR,"Invalid proof.");if(e={hash:e,time:n.time,mtp:n.mtp,height:t},await this.wdb.addTX(s,e))return null;throw new f(l.WALLET_ERROR,"No tracked address for TX.")}async removePrunedFunds(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,'tx.removeprunedfunds.admin "txid"');const i=new b([t]);let[s]=await this.accessControl(r);if(!(e=i.hash(0)))throw new f(l.TYPE_ERROR,"Invalid parameter.");if(await s.remove(e))return null;throw new f(l.WALLET_ERROR,"Transaction not in wallet.")}async getWallets(t,e,r){return this.wdb.getWallets()}async getWalletBlock(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"wallet.block height");const i=new b([t]);let[s]=await this.accessControl(r);e=i.uint(0);const n=await s.getBlock(e);return n?n.toJSON():null}async getWalletLayoutH(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"wallet.layouth height");e=new b([t]).uint(0);const i=await this.wdb.getBlock(e);return i?i.toJSON():null}async getWalletInfo(t,e,r){if(e)throw new f(l.MISC_ERROR,"wallet.info");if(e=new b([t]).str(0,"")){return(await this.wdb.get(e)).toJSON(!1)}return(await this.accessControl(r))[0].toJSON(!1)}async scRegister(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"sc.register options (account): 发布合约 合约参数列表 (子账户)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,"")),a=i.obj(0);if(!a)throw new f(l.MISC_ERROR,"sc.register: options is null");let o=1e5;switch(a.oper){case"change":if(a.oper=T.scState,!a.dst||!a.state)throw new f(l.TYPE_ERROR,"sc.register: dst or state is null.");if(!this.wdb.$parent)throw new f(l.TYPE_ERROR,"sc.register: not support this operation.");var c=await this.wdb.$parent.chain.db.getSCList([["options.dst",a.dst]]);if(!c||0==c.list.length)throw new f(l.TYPE_ERROR,"sc.register: contract not exist.");switch(c.list[0].options.state){case F.Normal:if(a.state!=F.Frozen&&a.state!=F.Destroy)throw new f(l.TYPE_ERROR,"Contract State Error");break;case F.Frozen:if(a.state!=F.Normal&&a.state!=F.Destroy)throw new f(l.TYPE_ERROR,"Contract State Error");break;default:throw new f(l.TYPE_ERROR,"Contract State Error")}if(a.addr=c.list[0].options.addr,await s.belongToAccount(n,a.addr))break;throw new f(l.MISC_ERROR,"sc.register: Invald Account.");case"update":if(a.oper=T.scUpdate,!a.dst)throw new f(l.TYPE_ERROR,"sc.register: dst is null.");if(!this.wdb.$parent)throw new f(l.TYPE_ERROR,"sc.register: not support this operation.");if(!(c=await this.wdb.$parent.chain.db.getSCList([["options.dst",a.dst]]))||0==c.list.length)throw new f(l.TYPE_ERROR,"sc.register: contract not exist.");if(c.list[0].options.state!=F.Normal)throw new f(l.TYPE_ERROR,"sc.register: contract state error.");if(a.addr=c.list[0].options.addr,await s.belongToAccount(n,a.addr))break;throw new f(l.MISC_ERROR,"sc.register: Invald Account.");default:if(o=1e8,a.oper=T.scRegister,a.addr=(await s.createReceive(n)).getAddress("string"),a.dst=s.getSCAddress(g.hashInt(a.addr)).toString(),this.wdb.$parent&&(c=await this.wdb.$parent.chain.db.getSCList([["options.dst",a.dst]]))&&0<c.list.length)throw new f(l.TYPE_ERROR,"sc.register: contract address conflict.")}let u=(await s.getPrivateKey(a.addr)).signData(a);u.data.sig=u.sig,a=u.data;const h=await s.send({subtractFee:!1,sort:!1,outputs:[{address:a.dst,value:o}],comment:JSON.stringify(a)},n);return await this.wdb.logAudit({address:a.addr,oper:a.oper,hash:h.hash("hex"),index:0}),a.txid=h.rhash(),a}async scRun(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,'sc.run str options (account): 调用合约 逗分参数字符串("合约收款地址,转账金额") 参数对象 (子账户)');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));const a=i.str(0).split(",");if(e=i.obj(1,{}),t=a.shift(),!this.wdb.$parent)throw new f(l.TYPE_ERROR,"sc.run: not support this operation.");if(!(r=await this.wdb.$parent.chain.db.getSCList([["options.dst",t]]))||0==r.list.length)throw new f(l.TYPE_ERROR,"sc.run: contract not exist.");if(1!=r.list[0].options.state)throw new f(l.TYPE_ERROR,`sc.run: contract execute disabled(state ${r.list[0].options.state}).`);if(e.ver&&e.ver!=r.list[0].options.ver)throw new f(l.TYPE_ERROR,"sc.run: contract version inconsistency.");r=(0|parseInt(a.shift()))>>>0,h.parseAddress(t,this.network);const o=await s.send({subtractFee:!1,sort:!1,outputs:[{address:t,value:r}],comment:JSON.stringify({oper:"scrun",params:e})},n),c=await s.getAccount(n);return(await this.wdb.logAudit({address:c.receive.getAddress("string"),oper:T.scRun,hash:o.hash("hex"),index:0}),await s.getDetails(o.hash("hex"))).toJSON()}async cpRegister(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'cp.create name "ip,addr,class,rate" (openid): 注册厂商 名称(不少于4个字符) "IP地址,注册地址,类别,媒体分成比例" (子账号)');return this.$cpRegister(t,r,!1)}async cpRegisterAsync(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'cp.create.async name "ip,addr,class,rate" (openid): 注册厂商 名称(不少于4个字符) "IP地址,注册地址,类别,媒体分成比例" (子账号)');return this.$cpRegister(t,r,!0)}async $cpRegister(t,e,r){const i=new b([t]);t=decodeURIComponent(i.str(0));var s=(o=i.str(1,"").split(","))[0],n=o[1],a=o[2],o=o[3]?parseInt(o[3]):15;let[c,u]=await this.accessControl(e,i.str(2,""));if(e=y.verifyDataFormat({name:t,ip:s,grate:o,cls:a}))throw new f(l.MISC_ERROR,e);return e={cid:M(),oper:T.cpRegister,name:t,ip:s,grate:o,cls:a},await c.cpRegister(g.isBech32(n)?n:null,e,u,r),e}async cpChange(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,'cp.change cid "newname,ip,addr,class,rate" "openid": 修改厂商信息 CP编号 "新的名称,IP,新的注册地址,类别,分成比例" 授权账号');const s=new b([t]);let[n,a]=await this.accessControl(r,s.str(2,""));e=s.str(0),r=(t=decodeURIComponent(s.str(1,"")).split(","))[0];var o=t[1];let c=t[2];var u=t[3],h=(t=parseInt(t[4])||null,y.verifyDataFormat({name:r,ip:o,grate:t,cls:u}));if(h)throw new f(l.MISC_ERROR,h);c&&(c=_.fromString(c),i(c instanceof _,"Not an address."));let p={cid:e,newName:r,ip:o,addr:c,grate:t,cls:u};var[]=await n.cpChange(p,a);return p.addr=p.addr.toString(),p}async cpQuery(t,e,r){if(e)throw new f(l.MISC_ERROR,"cp.query (conditions account): 查询钱包中的厂商列表 (复合条件 子帐号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));var a;e=i.array(0,[]),t=s.db.cpList.query(e);for(a of t.list)a.owned=await s.belongToAccount(n,a.current.address);return t}async cpMine(t,e,r){if(e)throw new f(l.MISC_ERROR,"cp.mine (conditions account): 查询钱包中归属当前操作员/指定账户的厂商列表 (复合条件 子帐号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));const a=i.array(0,[]);return a.push(["size",-1]),(await s.db.cpList.predict(async(t,e)=>s.belongToAccount(n,e.current.address))).query(a)}async cpX509(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"cp.x509 cid [openid]: 生成厂商根证书 CP编号 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.str(0);var[t]=await s.cpX509(e,n);return t}async x509Issue(t,e,r){if(e||t.length<4||5<t.length)throw new f(l.MISC_ERROR,"cp.x509.issue cid csrfile addr activetime [openid]: 签发X509证书 CP编号 请求文件 证书存放地址 证书存活时间 [子账号]");const i=new b([t]);let[n,a]=await this.accessControl(r,i.str(4,""));e=i.str(0),i.str(1),t=i.str(2),r=i.u64(3);var o=s.KEYUTIL.generateKeypair("EC","secp256k1"),[e]=(o=s.asn1.csr.CSRUtil.newCSRPEM({subject:{str:"/C=US/O=Test/CN=example.com"},sbjpubkey:o.pubKeyObj,sigalg:"SHA256withECDSA",sbjprvkey:o.prvKeyObj}),t=_.fromString(t,this.network),await n.x509Issue({cid:e,csrData:o,addr:t,activeTime:r},a));return e}async x509Abolish(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"cp.x509.abolish cid seqno activetime [openid]: 作废X509证书 CP编号 证书编号 作废生效时间[子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0),t=i.u32(1),r=i.u64(2);var[e]=await s.x509Abolish({cid:e,seqno:t,activeTime:r},n);return e}async htlcSuggest(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.suggest params [account]: 发起HTLC 参数对象({alice, bob, amount, rate}) [子账户]");const i=new b([t]),s=i.obj(0,{});let[n,a]=await this.accessControl(r,i.str(1,""));if(!s.ab)throw new f(l.MISC_ERROR,"htlc.suggest: params.ab(alice bchain address) is null");if(!Number.isInteger(s.amount))throw new f(l.MISC_ERROR,"htlc.suggest: illegal params.amount");if(s.amount=parseInt(s.amount),s.amount<0||s.amount>1e4*k.COIN)throw new f(l.MISC_ERROR,"htlc.suggest: illegal params.amount");if(s.rate=parseFloat(s.rate),s.rate<0||s.amount*s.rate>k.MAX_MONEY)throw new f(l.MISC_ERROR,"htlc.suggest: illegal params.rate");if(!s.target)throw new f(l.MISC_ERROR,"htlc.suggest: params.target is null");e=(await n.createReceive(a)).getAddress().toString(this.network),t={amount:s.amount,rate:s.rate,dst:s.target,aa:_.fromString(e).hash,ab:_.fromString(s.ab).hash,ba:_.fromString(s.ba).hash};const[o]=await n.sendContracts([t],a,P);return o?{txid:o.rhash(),aa:e}:null}async htlcAssent(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.assent params({txid}) [account]: 响应HTLC 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));const a=i.obj(0,{});if(!Number.isInteger(a.amount))throw new f(l.MISC_ERROR,"htlc.assent: illegal params.amount");if(a.amount=parseInt(a.amount),a.amount<0||a.amount>1e4*k.COIN)throw new f(l.MISC_ERROR,"htlc.assent: illegal params.amount");if(a.rate=parseFloat(a.rate),a.rate<0||a.amount*a.rate>k.MAX_MONEY)throw new f(l.MISC_ERROR,"htlc.assent: illegal params.rate");e=(await s.createReceive(n)).getAddress().toString(this.network),t={src:a.src,dst:a.dst,hash:a.hash,index:a.index,ab:Buffer.from(a.ab,"hex"),ba:Buffer.from(a.ba,"hex"),bb:_.fromString(e).hash,amount:a.amount*a.rate};const[o]=await s.sendContracts([t],n,O);return o?{txid:o.rhash()}:null}async htlcSuggestDeal(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.suggest.deal params({txid,index,sa}) [account]: 兑付HTLC 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={suggest:!0,hash:g.revHex(e.txid),index:e.index,sa:e.sa};const[a]=await s.htlcDeal(t,n);return a?{txid:a.rhash()}:null}async htlcQuery(t,e,r){if(e)throw new f(l.MISC_ERROR,"htlc.query query: 条件查询HTLC合约 条件数组");const i=new b([t]).array(0,[]);return i.push(["pst","!=",N.Cancel]),this.wdb.htlcList.query(i)}async htlcAssentDeal(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.assent.deal params({txid,index,sa}) [account]: 兑付HTLC 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={hash:g.revHex(e.txid),index:e.index,sa:e.sa};const[a]=await s.htlcDeal(t,n);return a?{txid:a.rhash()}:null}async htlcAssentCancel(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.assent.cancel params({txid, index, master}) [account]: 取消HTLC应答 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={hash:g.revHex(e.txid),index:e.index,master:e.bb};const[a]=await s.htlcCancel(t,n);return a?{txid:a.rhash()}:null}async htlcSuggestCancel(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"htlc.suggest.cancel params({txid, index, sa, master}) [account]: 取消HTLC请求 参数对象 [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.obj(0),t={suggest:!0,hash:g.revHex(e.txid),index:e.index,sa:e.sa,master:e.aa};const[a]=await s.htlcCancel(t,n);return a?{txid:a.rhash()}:null}async sendComment(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"comm.comment params [account]: 发起附言交易 参数对象({body, bob}) [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));const a=i.obj(0,{});if(!Number.isInteger(a.amount))throw new f(l.MISC_ERROR,"comm.comment: illegal params.amount");if(a.amount=parseInt(a.amount),a.amount<0||a.amount>1e4*k.COIN)throw new f(l.MISC_ERROR,"comm.comment: illegal params.amount");if(e={bob:a.bob,body:a.body,amount:a.amount},!a.alice&&(a.alice=s.getAddress(),n)){let t=await s.createReceive(n);a.alice=t.getAddress()}let o=(await s.getPrivateKey(a.alice)).signData(e);o.data.sig=o.sig;const[c]=await s.sendContracts([o.data],n,D);return c?{txid:c.rhash()}:null}async commentQuery(t,e,r){if(e)throw new f(l.MISC_ERROR,"comm.comment.query query: 条件查询附言输出 条件数组");return e=new b([t]).array(0,[]),this.wdb.commentList.query(e)}async contractExecute(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"contract.execute tid master: 执行交易对合约 交易编号 执行方(1-发起人,2-承兑人)");const i=new b([t]);let[s]=await this.accessControl(r);e=i.str(0),t=i.u32(1,2);const[n]=await s.contractExecute(e,t);return n.toJSON()}async contractPromise(t,e,r){if(e||t.length<1||2<t.length)throw new f(l.MISC_ERROR,"contract.promise tid [openid]: 签署交易对合约 交易编号(type.address) [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));e=i.str(0);const[a]=await s.contractPromise(e,n);return a.toJSON()}async contractOfMine(t,e,r){if(e||t.length<1||3<t.length)throw new f(l.MISC_ERROR,"contract.mine type page [openid]: 获取已签署交易对合约列表 交易对类型 页码 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));return e=i.uint(0,1),t=i.uint(1,1),s.db.getContracts(e,t,n)}async contractCreate(t,e,r){if(e||t.length<4||5<t.length)throw new f(l.MISC_ERROR,"contract.create type src dst addr [openid] : 发布一个交易对合约 交易对类型 出让游戏金数值 换取兑换币数值 兑换币收款地址 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.u64(0),t=i.u64(1),r=i.u64(2);var a=i.str(3);const[o]=await s.contractCreate(e,t,r,a,n);return o.toJSON()}async propGet(t,e,r){if(e)throw new f(l.MISC_ERROR,"prop.wallet.byid pid: 查询自己的物品 PID");e=new b([t]).str(0,"");let i=[];return(t=await this.wdb.propList.getVp(e))&&t.pst!=B.Delete&&i.push(t),i}async propBuy(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"prop.buy pid price [openid] : 竞拍道具 道具编号 出价 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));e=i.str(0),t=i.u64(1);const[a]=await s.propBuy(e,t,n);return a.toJSON()}async propFound(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.found pid (openid): 熔铸道具 道具编号 (账号)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(e=i.str(0),!(t=await s.db.propList.getVp(e))||t.pst==B.Delete)throw new f(l.MISC_ERROR,"prop.found prop not exist");if(t.account!=n)throw new f(l.MISC_ERROR,"prop.found not owned prop");if(t.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop.found prop can not be found on current status");const[a,,o]=await s.propFound(t.current.hash,n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),index:0,cid:o.cid,pid:o.pid,oid:o.oid,gold:a.outputs[0].value}}async propSale(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"prop.sale pid fixedPrice [openid]: 拍卖道具 道具编号 一口价 [子帐号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.str(0),!(t=await s.db.propList.getVp(e))||t.pst==B.Delete)throw new f(l.MISC_ERROR,"prop.sale prop not exist");if(t.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop.sale prop cannt be sent on current status");r=i.u64(1,0);const[a]=await s.propSale(t.current.hash,t.current.index,r,n);return a.toJSON()}async propSendList(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.sendlist (addr|txid|index)(n,) [openid]: 批量转移道具 道具数组(地址|交易ID|输出索引) [子账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,"")),a=[];if((e=i.str(0).split(","))&&Array.isArray(e))for(var o of e){var c,u;3<=(o=o.split("|")).length&&(c=o[0],u=new j(g.revHex(o[1]),parseInt(o[2])),4<=o.length?a.push([u,_.fromString(c),o[3]]):a.push([u,_.fromString(c)]))}const[h,,p]=await s.propExchangeList(a,n);if(h&&p){let t=h.hash("hex"),e=h.rhash();return p.map(r=>({hash:t,txid:e,cid:r.cid,pid:r.pid,oid:r.oid,gold:r.gold,addr:r.addr}))}}async propReceive(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.receive tx [account]: 捐赠接收函数 捐赠交易字符串 [接收账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(!(e=i.buf(0)))throw new f(l.TYPE_ERROR,"Invalid TX Info.");t=C.fromRaw(e);const[a,,o]=await s.propReceive(t,n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),cid:o.cid,pid:o.pid,oid:o.oid,gold:o.gold,addr:o.simAddr,gaddr:o.gaddr}}async propDonate(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.donate pid [openid]: 捐赠道具函数 道具ID [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,""));if(e=i.str(0),!(t=await s.db.propList.getVp(e))||t.pst==B.Delete)throw new f(l.MISC_ERROR,"prop not exist");if(t.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop cannt be sent on current status");r=new j(t.current.hash,t.current.index);const[a,,o]=await s.propDonate(r,n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),cid:o.cid,pid:o.pid,oid:o.oid,gold:o.gold,raw:a.toRaw().toString("hex")}}async propExchange(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"prop.send addr pid [openid]: 转移道具函数 接收地址 物品编号 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.str(0),t=i.str(1),!(r=await s.db.propList.getVp(t))||r.pst==B.Delete)throw new f(l.MISC_ERROR,"prop.send prop not exist");if(r.pst!=B.Ready)throw new f(l.MISC_ERROR,"prop.send prop cannt be sent on current status");const[a,,o]=await s.propExchange(new j(r.current.hash,r.current.index),_.fromString(e),n);if(a&&o)return{hash:a.hash("hex"),txid:a.rhash(),cid:o.cid,pid:o.pid,oid:o.oid,gold:o.gold,addr:e}}async propCreateList(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"prop.createlist (cid|oid|gold)(n,) [openid]: 批量创建道具 道具信息数组 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(1,"")),a=[];if((e=i.str(0).split(","))&&Array.isArray(e))for(var o of e)if(3<=(o=o.split("|")).length){var c=o[0],u=o[1],h=parseInt(o[2]);let t=null;4<=o.length&&(t=o[3]),h<k.MINPROPVALUE||a.push([c,u,h,t])}a=a.map(t=>{var[t,e,r,i]=t;return{oper:T.propCreate,cid:t,oid:e,gold:r,pid:i}});var[t]=await s.propCreate(a,n);return t?a:null}async propCreate(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"prop.create cid oid gold (openid): 创建道具 厂商编码 道具原始码 含金量 (账户)");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));e=i.str(0),t=i.str(1),r=i.u64(2,k.MINPROPVALUE);var a=i.str(3,null);if(r<k.MINPROPVALUE)throw new f(l.PROP_MINVALUE,"prop.create: not a valid value");e={oper:T.propCreate,cid:e,oid:t,gold:r,pid:a};var[t]=await s.propCreate([e],n);return t?e:null}async propOrder(t,e,r){if(e||t.length<3)throw new f(l.MISC_ERROR,"prop.order cid oid gold [addr openid]: 制备道具 厂商编码 道具原始码 含金量 [接收地址 资金账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(4,""));e=i.str(0),t=i.str(1),r=i.u64(2);let a=i.str(3);if(a)a=_.fromString(a);else if(n){a=(await s.createReceive(n)).getAddress()}else a=s.getAddress();var o,c={oper:T.propCreate,cid:e,oid:t,gold:r};const[u]=await s.propCreate([c],n);if(u){o=u.rhash(),await new Promise(t=>{s.db.once("tx.received."+o,(e,r,i)=>{t()})});let[i,,c]=await s.propExchange([u,0],a,n);if(i)return{hash:i.hash("hex"),txid:i.rhash(),cid:e,pid:c.pid,oid:t,gold:r,addr:a.toString()}}return null}async walletLock(t,e,r){if(e)throw new f(l.MISC_ERROR,"wallet.lock [passphrase]");let[i]=await this.accessControl(r);if(!i.master.encrypted){if((e=new b([t]).str(0,"")).length<1)throw new f(l.MISC_ERROR,"Wallet is not encrypted, please run wallet.lock passphrase");try{await i.setPassphrase(null,e)}catch(t){throw new f(l.WALLET_ENCRYPTION_FAILED,"Encryption failed.")}}return await i.lock(),null}async listMSTrans(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.mstrans");return e=new b([t]).str(0,""),this.wdb.listMSTrans(e)}async signMSTrans(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"tx.mstrans.sign txid");const i=new b([t]);e=i.str(0,""),t=i.str(1,"");let[s,n]=await this.accessControl(r,i.str(2,"")),a=await this.wdb.db.get(o.ms(_.getHash(e,"hex"),t));if(!a)throw new f(l.MISC_ERROR,"tx.mstrans.sign txid");if(r=JSON.parse(a.toString()),!await s.belongToAccount(n,r.addr))throw new f(l.MISC_ERROR,"tx.mstrans.sign invalid account");let u=await this.wdb.get(r.addr);if(u&&u.account.type==c.types.MULTISIG){const e=I.fromRaw(r.data,"hex");e.view=await u.getCoinView(e),await u.sign(e),e.isSigned()?await u.sendMTX(e):await s.send({subtractFee:!1,sort:!1,outputs:[{address:r.contract,value:1e4}],comment:JSON.stringify({oper:"scrun",params:{oper:"sign",addr:r.addr,tx:e.toRaw().toString("hex")}})},n),await this.wdb.delMSTrans(r.addr,t)}}async resendWalletTransactions(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"tx.resend.admin");let[i]=await this.accessControl(r);const s=[];for(const t of await i.resend())s.push(t.txid());return s}async resend(t,e,r){if(e||0!==t.length)throw new f(l.MISC_ERROR,"tx.resendall.admin: 重发挂起交易");var i=await this.wdb.resend();if(i)for(var s of Object.keys(i))if(s)for(const t of i[s])await this.wdb.send(t);return!0}async rescan(t,e,r){if(e)throw new f(l.MISC_ERROR,'sys.rescan ( "height" )');return e=new b([t]).u32(0),await this.wdb.rescan(e),this.logger.info("Rescanning..."),!0}async createAddress(t,e,r){if(e||2<t.length)throw new f(l.MISC_ERROR,'address.create ( "account" "uid" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));e=i.u32(1,0);const a=await s.createReceive(n,e);return a?a.toJSON():null}async createAddressAdmin(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,'address.create.admin ( "account" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createReceive(n,0,s.master);return a?a.toJSON(!0):null}async createChange(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,'address.change.create ( "account" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createChange(n);return a?a.toJSON():null}async createNested(t,e,r){if(e||1<t.length)throw new f(l.MISC_ERROR,'address.nested.create ( "account" )');const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createNested(n);return a?a.toJSON():null}async mkwallet(t,e,r){const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.createReceive(n),o=await this.wdb.ensure({id:a.getAddress("string"),type:i.str(1),m:i.u32(2),n:i.u32(3),mnemonic:i.str(4),passphrase:i.str(5),master:i.str(6),witness:i.bool(7),watchOnly:i.bool(8),accountKey:i.str(9)});return o?o.toJSON(!1):null}async accountGet(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"account.get account: 查询账户");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));const a=await s.getAccount(n);return a?a.toJSON():null}async getPending(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.pending [account]: 查询挂起的交易");const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(0,""));e=await s.getPending(a),n.sortTX(e);const o=[];for(const t of await s.toDetails(e))o.push(t.toJSON());return o}async getPendingItem(t,e,r){const i=new b([t]);var s,n=i.hash(0,"");let[a,o]=await this.accessControl(r,i.str(1,""));for(s of await a.getPending(o))if(s.hash==n)return(s=await a.toDetails(s)).toJSON()}async getPendingHash(t,e,r){const i=new b([t]);let[s,a]=await this.accessControl(r,i.str(0,""));t=await s.getPending(a),n.sortTX(t);const o=[];for(const e of await s.toDetails(t))o.push(g.revHex(e.hash));return o}async getPendingCount(t,e,r){if(e)throw new f(l.MISC_ERROR,"tx.pending.count [account]: 查询挂起的交易数");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=await s.ensureIndex(n),(await s.txdb.getPendingHashes(e)).length}async accountCreate(t,e,r){const i=new b([t]);let[s]=await this.accessControl(r);t=i.obj(0),r=i.str(1);const n=new b([t]);t={name:n.str("name"),witness:n.bool("witness",!0),type:n.str("type","pubkeyhash"),m:n.u32("m",1),n:n.u32("n",1),watchOnly:n.bool("watch",!1),accountKey:n.str("key",null),lookahead:n.u32("lookahead",10)};try{let e=await s.getAccount(t.name);if(e)return e.toJSON();{let i=(e=await s.createAccount(t,r)).toJSON();return i.isNew=!0,i}}catch(e){return null}}async getblocks(t,e,r){if(e)throw new f(l.MISC_ERROR,"wallet.blocks");let[i]=await this.accessControl(r);return await i.getBlocks()}async getKey(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,"key.export.public address: 查询地址的密钥");const s=new b([t]);let[n]=await this.accessControl(r);e=s.str(0),i(e,"Address is required.");const a=await n.getKey(e);return a?a.toJSON():null}async getPrivKey(t,e,r){if(e||1!==t.length)throw new f(l.MISC_ERROR,"address.key.admin address: 查询地址的密钥");const s=new b([t]);let[n]=await this.accessControl(r);e=s.str(0),i(e,"Address is required.");const a=await n.getKey(e);return a?a.toJSON(!0):null}async getwif(t,e,r){if(e||1!=t.length)throw new f(l.MISC_ERROR,"address.wif.admin address: 查询地址对应的私钥 地址");const s=new b([t]);let[n]=await this.accessControl(r);e=s.str(0),t=s.str(1),i(e,"Address is required.");const a=await n.getPrivateKey(e,t);return a?a.toSecret():null}async hasAddress(t,e,r){if(e||1!=t.length)throw new f(l.MISC_ERROR,"address.has address: 查询钱包是否包含一个地址 地址");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.str(0),i(e,"Address is required."),(t=await n.hasAddress(e))||!1}async getCoin(t,e,r){const s=new b([t]);let[n]=await this.accessControl(r);t=s.hash(0),r=s.u32(1),i(t,"Hash is required."),i(null!=r,"Index is required.");const a=await n.getCoin(t,r);return a?a.getJSON(this.network):null}async getSpender(t,e,r){const s=new b([t]);let[n]=await this.accessControl(r);return t=s.hash(0),r=s.u32(1),i(t,"Hash is required."),i(null!=r,"Index is required."),(t=await n.txdb.getSpender(t,r))?{hash:g.revHex(t.hash),index:t.index}:null}async getCoincacheSize(t,e,r){var[r]=await this.accessControl(r);return r.txdb.coinCache.size}async conserveCoin(t,e,r){if(e||2!=t.length)throw new f(l.MISC_ERROR,"coin.conserved.add txhash index: 新增需要保持的硬币: 交易Hash 输出序号");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.hash(0),t=s.u32(1),i(e,"Hash is required."),i(null!=t,"Index is required."),r=new j(e,t),n.conserveCoin(r),!0}async getConservedCoins(t,e,r){if(e||0<t.length)throw new f(l.MISC_ERROR,"coin.conserved.get: 查询已经保持的Coin列表");let[i]=await this.accessControl(r);const s=[];for(const t of i.getConserved())s.push(t.toJSON());return s}async unConserveCoin(t,e,r){if(e||2!=t.length)throw new f(l.MISC_ERROR,"coin.conserved.del: 减少需要保持的硬币: 交易Hash 输出序号");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.hash(0),t=s.u32(1),i(e,"Hash is required."),i(null!=t,"Index is required."),r=new j(e,t),n.unConserveCoin(r),!0}async addShared(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"key.shared.add [account] key: 新增共享公钥 [账号] 公钥");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=i.str(1),await s.addSharedKey(n,e),!0}async removeShared(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"key.shared.del [account] key: 删除共享公钥 [账号] 公钥");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));return e=i.str(1),await s.removeSharedKey(n,e),!0}async zap(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.zap [age]: 移除挂起交易 挂起时长(默认三天)");const s=new b([t]);let[n]=await this.accessControl(r);return e=s.str(0),t=s.u32(1,259200),i(t,"Age is required."),await n.zap(e,t),!0}async sendOracle(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"oracle.send k v amount [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3,""));if(e=i.str(0,null),t=i.str(1,null),null==(r=i.u64(2)))throw new f(l.TYPE_ERROR,"Invalid parameter.");if(!e||!t)throw new f(l.MISC_ERROR,"oracle.send k v amount [openid]");r={subtractFee:!1,selection:"age",sort:!1,outputs:[{address:(await s.createReceive(n)).getAddress("string"),value:r}],comment:JSON.stringify({oper:T.vote,type:"oracle",k:e,v:t})};const a=await s.send(r,n);return(await s.getDetails(a.hash("hex"))).toJSON()}async sendVote(t,e,r){if(e||t.length<2||3<t.length)throw new f(l.MISC_ERROR,"vote.send addresses amount [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));const a=i.str(0);var o;if(null==(e=i.u64(1)))throw new f(l.TYPE_ERROR,"Invalid parameter.");for(o of a.split(","))if(!h.parseAddress(o,this.network))throw new f(l.TYPE_ERROR,"Invalid address.");t={subtractFee:!1,selection:"age",sort:!1,outputs:[{address:(await s.createReceive(n)).getAddress("string"),value:e}],comment:`{"oper": "${T.vote}", "type": "mine", "ca": "${a}"}`};const c=await s.send(t,n);return(await s.getDetails(c.hash("hex"))).toJSON()}async sendVoteAsync(t,e,r){if(e||t.length<2||3<t.length)throw new f(l.MISC_ERROR,"vote.send.async addresses amount [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));const a=i.str(0);var o;if(null==(e=i.u64(1)))throw new f(l.TYPE_ERROR,"Invalid parameter.");for(o of a.split(","))if(!h.parseAddress(o,this.network))throw new f(l.TYPE_ERROR,"Invalid address.");t={subtractFee:!1,selection:"age",sort:!1,outputs:[{address:(await s.createReceive(n)).getAddress("string"),value:e}],comment:`{"oper": "${T.vote}", "type": "mine", "ca": "${a}"}`},s.send(t,n)}async sendTX(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"tx.send addr amount [openid]:发送交易 地址 金额 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));e=i.str(0),t=i.u64(1);const a=await s.send({outputs:[{address:e,value:t}]},n);return(await s.getDetails(a.hash("hex"))).toJSON()}async sendTXAsync(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"tx.send.async addr amount [openid]:发送交易 地址 金额 [发起账户]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));e=i.str(0),t=i.u64(1),s.send({outputs:[{address:e,value:t}]},n)}async signTX(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"tx.sign.admin txdata [sendnow passphrase]: 对交易签名/发送 交易原始数据 [立即发送 解锁密码]");const s=new b([t]);let[n]=await this.accessControl(r);e=s.buf(0),i(e,"TX is required."),t=s.bool(1,!1),r=s.str(2);const a=I.fromRaw(e);a.view=await n.getCoinView(a),await n.sign(a,r);let o=null;if(t&&a.isSigned()){o=(await n.sendMTX(a)).getJSON(this.network)}else o=a.getJSON(this.network);return n.account.type==c.types.MULTISIG&&(e=a.getMultisig(this.network),o.ms={m:e.m,n:e.n,c:e.c}),o}async createTX(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"tx.create options outputs [openid]: 创建交易 参数对象 输出数组 [子账号]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(2,""));if(e=i.obj(0),t=i.array(1),Array.isArray(e.in))for(var a of e.in)a.hash=g.revHex(a.hash);const o=new b([e]),u={comment:o.obj("comment",null),sendnow:o.bool("sendnow",!0),account:o.str("account"),rate:o.u64("rate"),blocks:o.u32("blocks"),maxFee:o.u64("maxFee"),selection:o.str("selection"),smart:o.bool("smart"),subtractFee:o.bool("subtractFee"),subtractIndex:o.get("subtractIndex"),depth:o.u32(["confirmations","depth"]),inputs:o.array("in",null),outputs:[]};for(const e of t){const t=new b([e]);let r={value:t.u64("value")};if(r.address=t.str("address"),!r.address)if(h=t.str("account")){await s.ensureAccount({name:h,witness:!0});const t=await s.createReceive(h);if(!t)throw new f(l.MISC_ERROR,`tx.create: account ${h} not exist`);r.address=t.getAddress("string")}var h,p=((h=t.buf("script"))&&(r.script=x.fromRaw(h)),t.str("locktype"));if(p){var d=t.u64("locktime",0);if(d){if("no"!=p&&"clb"!=p&&"clt"!=p&&"csb"!=p&&"cst"!=p)throw new f(l.MISC_ERROR,'locktype should be "no"-不锁定 or "clb"-绝对高度锁定 or clt(绝对时间锁定) or "csb"-相对高度锁定 or "cst"-相对时间锁定 !');if(p==x.outputLockType.CHECKABSOLUTETIME&&d<=k.LOCKTIME_THRESHOLD)throw new f(l.MISC_ERROR,"lock absolute time should not less than 500000000!");if(p==x.outputLockType.CHECKABSOLUTEBLOCK&&d>k.LOCKTIME_THRESHOLD)throw new f(l.MISC_ERROR,"lock absolute block should not more than 500000000!");if((p==x.outputLockType.CHECKRELATIVEBLOCK||p==x.outputLockType.CHECKRELATIVETIME)&&65535<d)throw new f(l.MISC_ERROR,"lock relative block/time should not more than 65535!");r.locktype=p,r.locktime=d}}u.outputs.push(r)}n&&(u.account=n);let m=null;if(u.sendnow){const t=await s.send(u);m=(await s.getDetails(t.hash("hex"))).toJSON()}else{const t=await s.createTX(u);await s.sign(t),m=t.getJSON(this.network),s.account.type==c.types.MULTISIG&&(r=t.getMultisig(this.network),m.ms={m:r.m,n:r.n,c:r.c})}return m}async getLast(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"tx.last account [limit]: 最近的交易 账号 [最大记录数]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0));e=i.u32(1);const a=[];t=await s.getLast(n,e);for(const e of await s.toDetails(t))a.push(e.toJSON());return a}async getRange(t,e,r){if(e||t.length<4)throw new f(l.MISC_ERROR,"tx.range account start end limit [reserve]: 指定时限内的交易 账号 开始时间 结束时间 最大记录数 [反转]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(0,""));e={start:i.u32(1),end:i.u32(2),limit:i.u32(3),reverse:i.bool(4)},t=await s.getRange(n,e);const a=[];for(const e of await s.toDetails(t))a.push(e.toJSON());return a}async caUserStatus(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"ca.user.status cid uid (query)");const i=new b([t]);e=i.str(0,""),t=i.uint(1,0);const s=i.array(2,[]);let n=null;for(let t=0;t<s.length;t++){var a=s[t];a&&Array.isArray(a)?"alliancename"==a[0]&&(n=a[1],delete s[t]):delete s[t]}let[o]=await this.accessControl(r);return e=await this.$allianceUserCreate([e,t,n],r),s.push(["pubkey",e.data.pubkey]),s.push(["merge",!0]),o.db.client.execute("ca.list",[s])}async caUserLog(t,e,r){if(e||t.length<2)throw new f(l.MISC_ERROR,"ca.user.log cid uid (query)");const i=new b([t]);e=i.str(0,""),t=i.uint(1,0);const s=i.array(2,[]);let n=null;for(let t=0;t<s.length;t++){var a=s[t];a&&Array.isArray(a)?"alliancename"==a[0]&&(n=a[1],delete s[t]):delete s[t]}let[o]=await this.accessControl(r,e);return e=await this.$allianceUserCreate([e,t,n],r),s.push(["pubkey",e.data.pubkey]),o.db.client.execute("ca.list",[s])}async sysLog(t,e,r){if(e)throw new f(l.MISC_ERROR,"sys.log (query openid)");const i=new b([t]);var s;e=i.array(0,[]);let[n]=await this.accessControl(r,i.str(1,"")),a=[];for(s of(await this.wdb.auditList.query(e)).list){let t=Object.assign({},s);var o=h.parseHash(s.address,this.network);(o=await n.getPath(o))&&(t.account=o.name),t.time=new Date(1e3*s.time).toLocaleString(),a.push(t)}return a}async caIssuePublic(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"ca.issue.public cert witness pubkey [openid]: 签发证书 证书对象 见证地址 存证地址公钥 [见证账户]");const i=new b([t]),s=i.obj(0,{});e=i.str(1,""),t=i.str(2);let[n,a]=await this.accessControl(r,i.str(3,""));if(await n.belongToAccount(a,e)){if(64!=s.hash.length)throw new f(l.TYPE_ERROR,"err hash length");s.height||(s.height=k.retargetInterval);const r=await n.getPrivateKey(e);if(r)return await n.issueCreate({erid:s.hash,key:r.privateKey.toString("hex"),address:r.getAddress().toString(),witness:r.publicKey.toString("hex"),validHeight:this.wdb.curHeight+s.height,source:{subjectName:s.name,pubkey:t,subjectHash:s.hash,cluster:s.cluster}},a)}throw new f(l.TYPE_ERROR,"Invalid witness.")}async caAbolishPublic(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"ca.abolish.public array[[witness erid height [openid]]]: 废止授信交易 废止交易信息数组");let i=[];const s=new b([t]);var n;for(n of s.array(0,[])){var a=n[0],o=n[1],c=parseInt(n[2]);let[t,e]=await this.accessControl(r,n[3]);if(!await t.belongToAccount(e,a))throw new f(l.TYPE_ERROR,"Invalid witness.");const s=await t.getKey(a);if(!s)throw new f(l.TYPE_ERROR,"Invalid witness.");(a=await t.caAbolish({key:s.privateKey.toString("hex"),witness:s.publicKey.toString("hex"),address:a,erid:o,abolishHeight:c,cid:"",uid:0},e))&&i.push(a)}return i}async caIssue(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"ca.issue cert uid cid [openid]: 签发证书 证书对象 见证人 见证人归属单位 [消费账户]");return this.$caIssue(t,r,!1)}async caIssueAsync(t,e,r){if(e||t.length<3||4<t.length)throw new f(l.MISC_ERROR,"ca.issue.async cert uid cid [openid]: 签发证书 证书对象 见证人 见证人归属单位 [消费账户]");return this.$caIssue(t,r,!0)}async $caIssue(t,e,r){const i=new b([t]),s=i.obj(0,{});t=i.uint(1,0);var n=i.str(2,"");let[a,o]=await this.accessControl(e,i.str(3,""));var c=await a.ensureCp(n);if(!c||"forbidden"==c.cls)throw new f(l.MISC_ERROR,"Invalid Account");if(64!=s.hash.length)throw new f(l.TYPE_ERROR,"err hash length");if(this.wdb.$parent&&await this.wdb.$parent.chain.db.erList.getEr(s.hash))throw new f(l.TYPE_ERROR,"cert.hash conflicted");return s.height||(s.height=k.retargetInterval),c=await this.$allianceUserCreate([n,t],e,!0),await a.issueCreate({erid:s.hash,key:c.prvkey,witness:c.data.pubkey,address:c.data.addr,validHeight:this.wdb.curHeight+s.height,source:{subjectName:s.name,pubkey:c.data.pubkey,subjectHash:s.hash,cluster:s.cluster,cid:n,uid:t}},o,r)}async caAbolish(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"ca.abolish [[uid cid erid height [openid]]]: 废止授信交易 废止交易信息数组");return this.$caAbolish(t,r,!1)}async caAbolishAsync(t,e,r){if(e||t.length<1)throw new f(l.MISC_ERROR,"ca.abolish.async [[uid cid erid height [openid]]]: 废止授信交易 废止交易信息数组");return this.$caAbolish(t,r,!0)}async $caAbolish(t,e,r){let i=[];const s=new b([t]);var n;for(n of s.array(0,[])){var a=n[0],o=n[1],c=n[2],u=parseInt(n[3]);let[t,s]=await this.accessControl(e,n[4]);var h=await this.$allianceUserCreate([o,a],e,!0);(o=await t.caAbolish({cid:o,uid:a,key:h.prvkey,witness:h.data.pubkey,address:h.data.addr,erid:c,abolishHeight:u},s,r))&&i.push(o)}return i}async enchanceCp(t,e,r){if(e||t.length<2||4<t.length)throw new f(l.MISC_ERROR,"ca.enchance toCid fromCid height [openid]");const i=new b([t]);let[s,n]=await this.accessControl(r,i.str(3));e=i.str(0,0),t=i.str(1,0);let a=i.uint(2,0);(!a||a<this.wdb.curHeight)&&(a=this.wdb.curHeight+k.retargetInterval);var[r,e]=await s.enchanceCp({to:e,from:t,enchanceHeight:a},n);return r&&e?e:null}async queryMyErlist(t,e,r){if(e)throw new f(l.MISC_ERROR,"ca.list.me query: 条件查询自己的电子权利 条件数组");return e=new b([t]).array(0,[]),this.wdb.erList.query(e)}}},function(t,e,r){var i=r(29);const{ContractEnvType:s,ContractStatus:n}=r(5),a=r(6),o=r(110);t.exports=class extends i{constructor(t){super(),this.db=t}async loadHistory(){var t;for(t of await this.db.getContracts())t&&(t.period<this.db.curHeight&&t.transStatus==n.CreatedOnMem?await this.delTransContract(t,!0):(t.id=t.type+"."+t.addr,await this.saveContract(t),t.transStatus==n.Promised&&this.db.autoTaskMgr.addTask(new o(this.db.network.txcheckpoint,t),this.db.network.txchecktime[t.type])))}query(t,e){return(t=this.get(t+"."+e))?t.transStatus:n.None}async addTransContract(t,e,r=!1){e.id=e.type+"."+e.addr;var i=this.get(e.id);t===s.Mempool&&((e=i||e).transStatus||(e.transStatus=n.CreatedOnMem),await this.saveContract(e,r))}async saveContract(t,e=!1){t.id=t.id||t.type+"."+t.addr,this.set(t.id,t),e&&(e=a.hash256(Buffer.from(t.id)).toString("hex"),await this.db.batchPut(this.db.tidCreator(e),Buffer.from(JSON.stringify(t))))}async promiseContract(t,e=!1){let r=!1;var i=t.type+"."+t.addr;let s=this.get(i);return s&&s.oper==t.oper||(r=!0,s=t),(!s.transStatus||s.transStatus<n.Promised)&&(r=!0,s.transStatus=n.Promised),r&&await this.saveContract(s,e),r}async confirmContract(t,e,r){t=t.type+"."+t.addr;let i=this.get(t);!i||i.transStatus!=n.Promised||e!=n.Confirmed&&e!=n.Expired||(i.transStatus=e,await this.saveContract(i,r))}async delTransContract(t,e){var r=t.type+"."+t.addr,i=this.get(r);i&&i.oper==t.oper&&(this.delete(r),e&&(i=a.hash256(Buffer.from(r)).toString("hex"),await this.db.batchDel(this.db.tidCreator(i))))}}},function(t,e,r){const i=r(5).HtlcStatus;r=r(29);class s extends r{constructor(t){super(),this.db=t}async loadHistory(){var t,e;for(t of(this.clear(),await this.db.loadHtlcList()))this.set(t.id,t),t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.id,t))}setAccount(t,e,r){this.delAccount(t),e&&r&&(t.wid=e,t.account=r,e=t.wid+"."+t.account,this.account.get(e)||this.account.set(e,new Map),this.account.get(e).set(t.id,t))}delAccount(t){var e;t&&t.wid&&t.account&&(e=t.wid+"."+t.account,this.account.get(e)&&this.account.get(e).delete(t.id))}}s.vpItem=class t{constructor(t){this.fromOptions(t||{})}fromOptions(t){this.shash=t.shash,this.sidx=t.sidx,this.sheight=t.sheight,this.ahash=t.ahash,this.aidx=t.aidx,this.aheight=t.aheight,this.src=t.src,this.dst=t.dst,this.aa=t.aa,this.ab=t.ab,this.ba=t.ba,this.bb=t.bb,this.amount=t.amount,this.rate=t.rate,this.pst=t.pst}toRaw(){let t={};return t.shash=this.shash,t.sidx=this.sidx,t.sheight=this.sheight,t.ahash=this.ahash,t.aidx=this.aidx,t.aheight=this.aheight,t.src=this.src,t.dst=this.dst,t.amount=this.amount,t.rate=this.rate,t.pst=this.pst||i.Init,t.aa=this.aa||"",t.ab=this.ab||"",t.ba=this.ba||"",t.bb=this.bb||"",Buffer.from(JSON.stringify(t),"utf-8")}get id(){return""+this.shash+this.sidx}fromRaw(t){return t=JSON.parse(t.toString("utf8")),this.fromOptions(t),this}static fromRaw(e){return(new t).fromRaw(e)}},t.exports=s},,,,,,,,,,,,,,,function(t,e,r){"use strict";
|
|
874
874
|
/*!
|
|
875
875
|
* int64.js - int64 object for javascript.
|
|
876
876
|
* Copyright (c) 2017, Christopher Jeffrey (MIT License).
|
|
@@ -987,7 +987,7 @@ t.exports=r(487)},function(t){t.exports=JSON.parse('{"application/1d-interleaved
|
|
|
987
987
|
* EnvPacket.js - worker packets for vallnet
|
|
988
988
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
989
989
|
* https://github.com/bookmansoft/gamegold
|
|
990
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
990
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18),o=r(1);class c extends n{constructor(t){super(),this.env=t||{},this.json=JSON.stringify(this.env),this.cmd=a.ENV}getSize(){return s.sizeVarString(this.json,"utf8")}toWriter(t){return t.writeVarString(this.json,"utf8"),t}fromRaw(t){const e=new i(t,!0);return this.json=e.readVarString("utf8"),this.env=o.parseJson(this.json),this}static fromRaw(t){return(new c).fromRaw(t)}masterHandle(t){t.setEnv(this.env)}}t.exports=c},function(t,e,r){"use strict";
|
|
991
991
|
/*!
|
|
992
992
|
* parent.js - parent worker processes for vallnet
|
|
993
993
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -997,12 +997,12 @@ t.exports=r(487)},function(t){t.exports=JSON.parse('{"application/1d-interleaved
|
|
|
997
997
|
* EventPacket.js - worker packets for vallnet
|
|
998
998
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
999
999
|
* https://github.com/bookmansoft/gamegold
|
|
1000
|
-
*/const i=r(2),s=r(3),n=r(18);var a=r(
|
|
1000
|
+
*/const i=r(2),s=r(3),n=r(18);var a=r(22);const o=r(1);class c extends a{constructor(t){super(),this.items=t||[],this.json=JSON.stringify(this.items),this.cmd=n.EVENT}getSize(){return s.sizeVarString(this.json,"utf8")}toWriter(t){return t.writeVarString(this.json,"utf8"),t}fromRaw(t){const e=new i(t,!0);return this.json=e.readVarString("utf8"),this.items=o.parseJson(this.json),this}static fromRaw(t){return(new c).fromRaw(t)}workerHandle(t){t.emit("event",this.items),t.emit(...this.items)}masterHandle(t){t.emit("event",this.items),t.emit(...this.items)}}t.exports=c},function(t,e,r){"use strict";
|
|
1001
1001
|
/*!
|
|
1002
1002
|
* LogPacket.js - worker packets for vallnet
|
|
1003
1003
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1004
1004
|
* https://github.com/bookmansoft/gamegold
|
|
1005
|
-
*/const i=r(2),s=r(3),n=r(18);class a extends(r(
|
|
1005
|
+
*/const i=r(2),s=r(3),n=r(18);class a extends(r(22)){constructor(t){super(),this.text=t||"",this.cmd=n.LOG}getSize(){return s.sizeVarString(this.text,"utf8")}toWriter(t){return t.writeVarString(this.text,"utf8"),t}fromRaw(t){const e=new i(t,!0);return this.text=e.readVarString("utf8"),this}static fromRaw(t){return(new a).fromRaw(t)}workerHandle(t){t.emit("log",this.text)}}t.exports=a},function(t,e,r){"use strict";
|
|
1006
1006
|
/*!
|
|
1007
1007
|
* ErrorResultPacket.js - worker packets for vallnet
|
|
1008
1008
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -1012,22 +1012,22 @@ t.exports=r(487)},function(t){t.exports=JSON.parse('{"application/1d-interleaved
|
|
|
1012
1012
|
* CheckPacket.js - worker packets for vallnet
|
|
1013
1013
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1014
1014
|
* https://github.com/bookmansoft/gamegold
|
|
1015
|
-
*/const i=r(2),s=r(19),n=r(60);var a=r(
|
|
1015
|
+
*/const i=r(2),s=r(19),n=r(60);var a=r(22);const o=r(18),c=r(5).ContractStatus;class u extends a{constructor(t,e,r,i){super(),this.tx=t||null,this.view=e||null,this.flags=null!=r?r:null,this.status=null!=i?i:c.None,this.cmd=o.CHECK}getSize(){return this.tx.getSize()+this.view.getSize(this.tx)+4+4}toWriter(t){return this.tx.toWriter(t),this.view.toWriter(t,this.tx),t.writeI32(null!=this.flags?this.flags:-1),t.writeI32(null!=this.status?this.status:0),t}fromRaw(t){const e=new i(t,!0);return this.tx=s.fromReader(e),this.view=n.fromReader(e,this.tx),this.flags=e.readI32(),-1===this.flags&&(this.flags=null),this.status=e.readI32(),this.status<0&&(this.status=c.None),this}static fromRaw(t){return(new u).fromRaw(t)}jobsHandle(t){return t.check(this.tx,this.view,this.flags,this.status)}}t.exports=u},function(t,e,r){"use strict";
|
|
1016
1016
|
/*!
|
|
1017
1017
|
* SignPacket.js - worker packets for vallnet
|
|
1018
1018
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1019
1019
|
* https://github.com/bookmansoft/gamegold
|
|
1020
|
-
*/const i=r(2),s=r(3),n=r(59),a=r(32);var o=r(
|
|
1020
|
+
*/const i=r(2),s=r(3),n=r(59),a=r(32);var o=r(22);const c=r(18);r(156);class u extends o{constructor(t,e,r,i){super(),this.tx=t||null,this.rings=e||[],this.type=null!=r?r:1,this.except=i||[],this.cmd=c.SIGN}getSize(){let t=0;t=(t=(t+=this.tx.getSize())+this.tx.view.getSize(this.tx))+s.sizeVarint(this.rings.length);for(const e of this.rings)t+=e.getSize();return(t=(t+=1)+s.sizeVarint(this.except.length))+ +this.except.length}toWriter(t){this.tx.toWriter(t),this.tx.view.toWriter(t,this.tx),t.writeVarint(this.rings.length);for(const e of this.rings)e.toWriter(t);t.writeU8(this.type),t.writeVarint(this.except.length);for(const e of this.except)t.writeU8(e);return t}fromRaw(t){const e=new i(t,!0);this.tx=n.fromReader(e),this.tx.view.fromReader(e,this.tx);var r=e.readVarint();for(let t=0;t<r;t++){var s=a.fromReader(e);this.rings.push(s)}this.type=e.readU8();var o=e.readVarint();for(let t=0;t<o;t++)this.except.push(e.readU8());return this}static fromRaw(t){return(new u).fromRaw(t)}jobsHandle(t){return t.sign(this.tx,this.rings,this.type,this.except)}}t.exports=u},function(t,e,r){"use strict";
|
|
1021
1021
|
/*!
|
|
1022
1022
|
* SignResultPacket.js - worker packets for vallnet
|
|
1023
1023
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1024
1024
|
* https://github.com/bookmansoft/gamegold
|
|
1025
|
-
*/const i=r(0),s=r(2),n=r(3),a=r(17),o=r(131);var c=r(
|
|
1025
|
+
*/const i=r(0),s=r(2),n=r(3),a=r(17),o=r(131);var c=r(22);const u=r(18);class h extends c{constructor(t,e,r){super(),this.total=t||0,this.script=r||[],this.witness=e||[],this.cmd=u.SIGNRESULT}fromTX(t,e){this.total=e;for(const e of t.inputs)this.script.push(e.script),this.witness.push(e.witness);return this}static fromTX(t,e){return(new h).fromTX(t,e)}getSize(){let t=0;t=(t+=n.sizeVarint(this.total))+n.sizeVarint(this.script.length);for(let e=0;e<this.script.length;e++){const r=this.script[e],i=this.witness[e];t=(t+=r.getVarSize())+i.getVarSize()}return t}toWriter(t){i(this.script.length===this.witness.length),t.writeVarint(this.total),t.writeVarint(this.script.length);for(let e=0;e<this.script.length;e++)this.script[e].toWriter(t),this.witness[e].toWriter(t);return t}inject(t){i(this.script.length===t.inputs.length),i(this.witness.length===t.inputs.length);for(let e=0;e<t.inputs.length;e++){const r=t.inputs[e];r.script=this.script[e],r.witness=this.witness[e]}}fromRaw(t){const e=new s(t,!0);this.total=e.readVarint();var r=e.readVarint();for(let t=0;t<r;t++)this.script.push(a.fromReader(e)),this.witness.push(o.fromReader(e));return this}static fromRaw(t){return(new h).fromRaw(t)}}t.exports=h},function(t,e,r){"use strict";
|
|
1026
1026
|
/*!
|
|
1027
1027
|
* CheckInputPacket.js - worker packets for vallnet
|
|
1028
1028
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1029
1029
|
* https://github.com/bookmansoft/gamegold
|
|
1030
|
-
*/const i=r(2),s=r(3),n=r(26),a=r(19),o=r(18);var c=r(
|
|
1030
|
+
*/const i=r(2),s=r(3),n=r(26),a=r(19),o=r(18);var c=r(22);const u=r(5).ContractStatus;class h extends c{constructor(t,e,r,i,s){super(),this.tx=t||null,this.index=e,this.coin=r||null,this.flags=null!=i?i:null,this.status=null!=s?s:u.None,this.cmd=o.CHECKINPUT}getSize(){var t=0;return(t+=this.tx.getSize())+s.sizeVarint(this.index)+s.sizeVarint(this.coin.value)+this.coin.script.getVarSize()+4+4}toWriter(t){return this.tx.toWriter(t),t.writeVarint(this.index),t.writeVarint(this.coin.value),this.coin.script.toWriter(t),t.writeI32(null!=this.flags?this.flags:-1),t.writeI32(null!=this.status?this.status:0),t}fromRaw(t){const e=new i(t,!0);return this.tx=a.fromReader(e),this.index=e.readVarint(),this.coin=new n,this.coin.value=e.readVarint(),this.coin.script.fromReader(e),this.flags=e.readI32(),-1===this.flags&&(this.flags=null),this.status=e.readI32(),this.status<0&&(this.status=u.None),this}static fromRaw(t){return(new h).fromRaw(t)}jobsHandle(t){return t.checkInput(this.tx,this.index,this.coin,this.flags,this.status)}}t.exports=h},function(t,e,r){"use strict";
|
|
1031
1031
|
/*!
|
|
1032
1032
|
* CheckInputResultPacket.js - worker packets for vallnet
|
|
1033
1033
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
@@ -1037,52 +1037,52 @@ t.exports=r(487)},function(t){t.exports=JSON.parse('{"application/1d-interleaved
|
|
|
1037
1037
|
* SignInputPacket.js - worker packets for vallnet
|
|
1038
1038
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1039
1039
|
* https://github.com/bookmansoft/gamegold
|
|
1040
|
-
*/const i=r(2),s=r(3),n=r(26),a=r(59),o=r(32);var c=r(
|
|
1040
|
+
*/const i=r(2),s=r(3),n=r(26),a=r(59),o=r(32);var c=r(22);const u=r(18);class h extends c{constructor(t,e,r,i,s){super(),this.tx=t||null,this.index=e,this.coin=r||null,this.ring=i||null,this.type=null!=s?s:1,this.cmd=u.SIGNINPUT}getSize(){var t=0;return(t+=this.tx.getSize())+s.sizeVarint(this.index)+s.sizeVarint(this.coin.value)+this.coin.script.getVarSize()+this.ring.getSize()+1}toWriter(t){return this.tx.toWriter(t),t.writeVarint(this.index),t.writeVarint(this.coin.value),this.coin.script.toWriter(t),this.ring.toWriter(t),t.writeU8(this.type),t}fromRaw(t){const e=new i(t,!0);return this.tx=a.fromReader(e),this.index=e.readVarint(),this.coin=new n,this.coin.value=e.readVarint(),this.coin.script.fromReader(e),this.ring=o.fromReader(e),this.type=e.readU8(),this}static fromRaw(t){return(new h).fromRaw(t)}jobsHandle(t){return t.signInput(this.tx,this.index,this.coin,this.ring,this.type)}}t.exports=h},function(t,e,r){"use strict";
|
|
1041
1041
|
/*!
|
|
1042
1042
|
* SignInputResultPacket.js - worker packets for vallnet
|
|
1043
1043
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1044
1044
|
* https://github.com/bookmansoft/gamegold
|
|
1045
|
-
*/const i=r(0),s=r(2),n=r(17),a=r(131);var o=r(
|
|
1045
|
+
*/const i=r(0),s=r(2),n=r(17),a=r(131);var o=r(22);const c=r(18);class u extends o{constructor(t,e,r){super(),this.value=t||!1,this.script=r||null,this.witness=e||null,this.cmd=c.SIGNINPUTRESULT}fromTX(t,e,r){return t=t.inputs[e],i(t),this.value=r,this.script=t.script,this.witness=t.witness,this}static fromTX(t,e,r){return(new u).fromTX(t,e,r)}getSize(){return 1+this.script.getVarSize()+this.witness.getVarSize()}toWriter(t){return t.writeU8(this.value?1:0),this.script.toWriter(t),this.witness.toWriter(t),t}inject(t,e){const r=t.inputs[e];i(r),r.script=this.script,r.witness=this.witness}fromRaw(t){const e=new s(t,!0);return this.value=1===e.readU8(),this.script=n.fromReader(e),this.witness=a.fromReader(e),this}static fromRaw(t){return(new u).fromRaw(t)}}t.exports=u},function(t,e,r){"use strict";
|
|
1046
1046
|
/*!
|
|
1047
1047
|
* ECVerifyPacket.js - worker packets for vallnet
|
|
1048
1048
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1049
1049
|
* https://github.com/bookmansoft/gamegold
|
|
1050
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
1050
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18);class o extends n{constructor(t,e,r){super(),this.msg=t||null,this.sig=e||null,this.key=r||null,this.cmd=a.ECVERIFY}getSize(){var t=0;return(t+=s.sizeVarBytes(this.msg))+s.sizeVarBytes(this.sig)+s.sizeVarBytes(this.key)}toWriter(t){return t.writeVarBytes(this.msg),t.writeVarBytes(this.sig),t.writeVarBytes(this.key),t}fromRaw(t){const e=new i(t,!0);return this.msg=e.readVarBytes(),this.sig=e.readVarBytes(),this.key=e.readVarBytes(),this}static fromRaw(t){return(new o).fromRaw(t)}jobsHandle(t){return t.ecVerify(this.msg,this.sig,this.key)}}t.exports=o},function(t,e,r){"use strict";
|
|
1051
1051
|
/*!
|
|
1052
1052
|
* ECVerifyResultPacket.js - worker packets for vallnet
|
|
1053
1053
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1054
1054
|
* https://github.com/bookmansoft/gamegold
|
|
1055
|
-
*/const i=r(2);var s=r(
|
|
1055
|
+
*/const i=r(2);var s=r(22);const n=r(18);class a extends s{constructor(t){super(),this.value=t,this.cmd=n.ECVERIFYRESULT}getSize(){return 1}toWriter(t){return t.writeU8(this.value?1:0),t}fromRaw(t){const e=new i(t,!0);return this.value=1===e.readU8(),this}static fromRaw(t){return(new a).fromRaw(t)}}t.exports=a},function(t,e,r){"use strict";
|
|
1056
1056
|
/*!
|
|
1057
1057
|
* ECSignPacket.js - worker packets for vallnet
|
|
1058
1058
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1059
1059
|
* https://github.com/bookmansoft/gamegold
|
|
1060
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
1060
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18);class o extends n{constructor(t,e){super(),this.msg=t||null,this.key=e||null,this.cmd=a.ECSIGN}getSize(){var t=0;return(t+=s.sizeVarBytes(this.msg))+s.sizeVarBytes(this.key)}toWriter(t){return t.writeVarBytes(this.msg),t.writeVarBytes(this.key),t}fromRaw(t){const e=new i(t,!0);return this.msg=e.readVarBytes(),this.key=e.readVarBytes(),this}static fromRaw(t){return(new o).fromRaw(t)}jobsHandle(t){return t.ecSign(this.msg,this.key)}}t.exports=o},function(t,e,r){"use strict";
|
|
1061
1061
|
/*!
|
|
1062
1062
|
* ECSignResultPacket.js - worker packets for vallnet
|
|
1063
1063
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1064
1064
|
* https://github.com/bookmansoft/gamegold
|
|
1065
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
1065
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18);class o extends n{constructor(t){super(),this.sig=t,this.cmd=a.ECSIGNRESULT}getSize(){return s.sizeVarBytes(this.sig)}toWriter(t){return t.writeVarBytes(this.sig),t}fromRaw(t){const e=new i(t,!0);return this.sig=e.readVarBytes(),this}static fromRaw(t){return(new o).fromRaw(t)}}t.exports=o},function(t,e,r){"use strict";
|
|
1066
1066
|
/*!
|
|
1067
1067
|
* MinePacket.js - worker packets for vallnet
|
|
1068
1068
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1069
1069
|
* https://github.com/bookmansoft/gamegold
|
|
1070
|
-
*/const i=r(2);var s=r(
|
|
1070
|
+
*/const i=r(2);var s=r(22);const n=r(18);class a extends s{constructor(t,e,r,i){super(),this.data=t||null,this.target=e||null,this.min=null!=r?r:-1,this.max=null!=i?i:-1,this.cmd=n.MINE}getSize(){return 120}toWriter(t){return t.writeBytes(this.data),t.writeBytes(this.target),t.writeU32(this.min),t.writeU32(this.max),t}fromRaw(t){const e=new i(t,!0);return this.data=e.readBytes(80),this.target=e.readBytes(32),this.min=e.readU32(),this.max=e.readU32(),this}static fromRaw(t){return(new a).fromRaw(t)}jobsHandle(t){return t.mine(this.data,this.target,this.min,this.max)}}t.exports=a},function(t,e,r){"use strict";
|
|
1071
1071
|
/*!
|
|
1072
1072
|
* MineResultPacket.js - worker packets for vallnet
|
|
1073
1073
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1074
1074
|
* https://github.com/bookmansoft/gamegold
|
|
1075
|
-
*/const i=r(2);var s=r(
|
|
1075
|
+
*/const i=r(2);var s=r(22);const n=r(18);class a extends s{constructor(t){super(),this.nonce=null!=t?t:-1,this.cmd=n.MINERESULT}getSize(){return 5}toWriter(t){return t.writeU8(-1!==this.nonce?1:0),t.writeU32(this.nonce),t}fromRaw(t){const e=new i(t,!0);return this.nonce=-1,1===e.readU8()&&(this.nonce=e.readU32()),this}static fromRaw(t){return(new a).fromRaw(t)}}t.exports=a},function(t,e,r){"use strict";
|
|
1076
1076
|
/*!
|
|
1077
1077
|
* ScryptPacket.js - worker packets for vallnet
|
|
1078
1078
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1079
1079
|
* https://github.com/bookmansoft/gamegold
|
|
1080
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
1080
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18);class o extends n{constructor(t,e,r,i,s,n){super(),this.passwd=t||null,this.salt=e||null,this.N=null!=r?r:-1,this.r=null!=i?i:-1,this.p=null!=s?s:-1,this.len=null!=n?n:-1,this.cmd=a.SCRYPT}getSize(){var t=0;return(t+=s.sizeVarBytes(this.passwd))+s.sizeVarBytes(this.salt)+16}toWriter(t){return t.writeVarBytes(this.passwd),t.writeVarBytes(this.salt),t.writeU32(this.N),t.writeU32(this.r),t.writeU32(this.p),t.writeU32(this.len),t}fromRaw(t){const e=new i(t,!0);return this.passwd=e.readVarBytes(),this.salt=e.readVarBytes(),this.N=e.readU32(),this.r=e.readU32(),this.p=e.readU32(),this.len=e.readU32(),this}static fromRaw(t){return(new o).fromRaw(t)}jobsHandle(t){return t.scrypt(this.passwd,this.salt,this.N,this.r,this.p,this.len)}}t.exports=o},function(t,e,r){"use strict";
|
|
1081
1081
|
/*!
|
|
1082
1082
|
* ScryptResultPacket.js - worker packets for vallnet
|
|
1083
1083
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|
|
1084
1084
|
* https://github.com/bookmansoft/gamegold
|
|
1085
|
-
*/const i=r(2),s=r(3);var n=r(
|
|
1085
|
+
*/const i=r(2),s=r(3);var n=r(22);const a=r(18);class o extends n{constructor(t){super(),this.key=t||null,this.cmd=a.SCRYPTRESULT}getSize(){return s.sizeVarBytes(this.key)}toWriter(t){return t.writeVarBytes(this.key),t}fromRaw(t){const e=new i(t,!0);return this.key=e.readVarBytes(),this}static fromRaw(t){return(new o).fromRaw(t)}}t.exports=o},function(t,e,r){var i={"./ConvertScript":170,"./ConvertScript.js":170,"./checkContract":110,"./checkContract.js":110,"./coinbase":198,"./coinbase.js":198,"./comm":5,"./comm.js":5,"./contractcreate":217,"./contractcreate.js":217,"./contractexecute":218,"./contractexecute.js":218,"./contractpromise":199,"./contractpromise.js":199,"./cpRegister":195,"./cpRegister.js":195,"./cpchange":197,"./cpchange.js":197,"./electronicright/enchancecp":223,"./electronicright/enchancecp.js":223,"./electronicright/erAbolish":222,"./electronicright/erAbolish.js":222,"./electronicright/erIssue":221,"./electronicright/erIssue.js":221,"./facade":42,"./facade.js":42,"./guideRegister":220,"./guideRegister.js":220,"./model/base":79,"./model/base.js":79,"./model/example":208,"./model/example.js":208,"./model/issue":209,"./model/issue.js":209,"./model/multisig":210,"./model/multisig.js":210,"./model/relay":206,"./model/relay.js":206,"./model/selector":155,"./model/selector.js":155,"./model/vem":207,"./model/vem.js":207,"./nesting":192,"./nesting.js":192,"./nesting/comment":140,"./nesting/comment.js":140,"./nesting/default":58,"./nesting/default.js":58,"./nesting/htlcassent":139,"./nesting/htlcassent.js":139,"./nesting/htlcsuggest":138,"./nesting/htlcsuggest.js":138,"./nesting/propcreate":193,"./nesting/propcreate.js":193,"./nesting/propexchange":194,"./nesting/propexchange.js":194,"./nesting/selector":119,"./nesting/selector.js":119,"./notify":216,"./notify.js":216,"./payorder":215,"./payorder.js":215,"./plugin":242,"./plugin.js":242,"./propfound":212,"./propfound.js":212,"./propsale":214,"./propsale.js":214,"./scnotify":211,"./scnotify.js":211,"./scregister":202,"./scregister.js":202,"./scrun":205,"./scrun.js":205,"./scstate":204,"./scstate.js":204,"./scupdate":203,"./scupdate.js":203,"./selector":191,"./selector.js":191,"./stock":219,"./stock.js":219,"./taskManager":163,"./taskManager.js":163,"./transaction":11,"./transaction.js":11,"./vote":213,"./vote.js":213,"./x509/x509AboTransaction":225,"./x509/x509AboTransaction.js":225,"./x509/x509IssueTransaction":224,"./x509/x509IssueTransaction.js":224};function s(t){return t=n(t),r(t)}function n(t){if(r.o(i,t))return i[t];throw(t=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",t}s.keys=function(){return Object.keys(i)},s.resolve=n,(t.exports=s).id=611},function(t,e,r){"use strict";
|
|
1086
1086
|
/*!
|
|
1087
1087
|
* contractdb.js - storage for SmartContract account management
|
|
1088
1088
|
* Copyright (c) 2019-2022, Bookman Software (MIT License).
|