gamegold 5.5.1 → 5.5.2

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.
@@ -201,7 +201,7 @@ let r=[];[i(558),i(559),i(560),i(561),i(562),i(563),i(564),i(565),i(566),i(567),
201
201
  * pkg.js - package constants
202
202
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
203
203
  * https://github.com/bookmansoft/gamegold
204
- */t.protocol="vallnet",t.version="5.5.1",t.url="https://github.com/bookmansoft/gamegold"},function(e,t,i){"use strict";
204
+ */t.protocol="vallnet",t.version="5.5.2",t.url="https://github.com/bookmansoft/gamegold"},function(e,t,i){"use strict";
205
205
  /*!
206
206
  * common.js - p2p constants for vallnet
207
207
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
@@ -424,7 +424,7 @@ function r(e){let t=null;var i=r.list[e.contract.options.type];return i?new(t=i.
424
424
  *
425
425
  * @note 为了让打包程序正常工作,没有使用自动化方案来引入类文件
426
426
  */
427
- const r=i(5).ContractType;e.exports=function(e){if(!e)return i(188);switch(e.oper){case r.cpRegister:return i(192);case r.cpChange:return i(194);case r.coinbase:return i(195);case r.contractPromise:return i(196);case r.scRegister:return i(199);case r.scUpdate:return i(200);case r.scState:return i(201);case r.scRun:return i(202);case r.scNotify:return i(208);case r.propFound:return i(209);case r.vote:return i(210);case r.propSale:return i(211);case r.notify:return i(212);case r.contractCreate:return i(213);case r.contractExecute:return i(214);case r.erIssue:return i(215);case r.erAbolish:return i(216);case r.enchanceCp:return i(217);default:try{return i(581)("./"+e.oper)}catch(e){return i(14)}}}},function(e,t,i){var r=i(14);const a=i(19).nestingExtentCodes,s=i(117);e.exports=class extends r{async insert(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashMem.has(t)||this.setOptIndex(e,i)&&(await s(e).insert(),e.env.middleHashMem.add(t))}}async erase(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashMem.delete(""+e.hash+t),this.setOptIndex(e,t)&&await s(e).erase()}async confirm(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashChain.has(t)||this.setOptIndex(e,i)&&(await s(e).confirm(),e.env.middleHashChain.add(t))}}async unconfirm(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashChain.delete(""+e.hash+t),this.setOptIndex(e,t)&&await s(e).unconfirm()}async verify(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++)if(this.setOptIndex(e,i)){var t=await s(e).verify();if(1!=t)return t}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(e,t){return e.i=t,e.output=e.tx.outputs[t],e.type=e.output.getReturnType(),e.data=e.output.getReturnData(a),!!e.data}}},function(e,t,i){const{ContractEnvType:r,PropStatus:a}=i(5);var s=i(52);const n=i(7),o=i(147);e.exports=class extends s{async confirm(){var{env:e,i:t,output:i,data:s,hash:n,block:o,tx:c}=this.options,u=await e.propList.getVp(s.pid);!u||u.current.hash==n&&u.current.index==t?(s.current={hash:n,index:t,address:i.getAddress().toString()},s.height=0<e.curHeight?e.curHeight+1:0,s.pst=a.Ready,s.gold=i.value,await e.propList.setVp(s,c),e.mode==r.Block&&(i={pid:s.pid,oid:s.oid,cid:s.cid,dst:s.current.address,time:o.time,height:s.height,value:s.gold},e.node.transmit("prop.create",i))):e.logger.warning("PropCreate.conflict",s.pid,", height: ",o?o.height:0,"mode: ",e.mode,n,t,u.current.hash,u.current.index)}async unconfirm(){var e,{env:t,i:i,data:e,hash:r}=this.options;(e=await t.propList.getVp(e.pid))&&e.current.hash==r&&e.current.index==i&&await t.propList.delVp(e)}async verify(){var{env:e,output:t,data:i}=this.options;if(!o.unittest){var r=e.cpList.getItem(i.cid);if(!r||r.current.address!=t.getAddress().toString())return"PropCreate.errorAddress"}return t.value<n.MINPROPVALUE?"PropCreate.MINPROPVALUE":!e.network.tokenReg.test(i.pid)||"PropCreate.invalidPid"}}},function(e,t,i){const r=i(5).ContractEnvType;i=i(52);e.exports=class extends i{async confirm(){var{env:e,i:t,output:i,data:a,hash:s,block:n}=this.options;e.mode==r.Block&&(a={data:a,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:n.time,current:{hash:s,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.confirm",a))}async unconfirm(){var{env:e,i:t,output:i,data:a,hash:s,block:n}=this.options;e.mode==r.Block&&(a={data:a,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:n.time,current:{hash:s,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.unconfirm",a))}async verify(){return!0}}},function(e,t,i){const r=i(0),a=i(19).opcodes,s=i(44).broadcast,n=i(131).vpItem;var o=i(52);const{ContractEnvType:c,PropStatus:u}=i(5);e.exports=class extends o{async confirm(){let{env:e,i:t,output:i,data:r,hash:o,tx:h,block:l}=this.options;if(e.mode==c.Wallet){var p=await e.propList.getVp(r.pid);if(p&&(p.current.hash!=r.prev.hash||p.current.index!=r.prev.index))return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);p=new n({pid:r.pid,cid:r.cid,oid:r.oid,gold:i.value,current:{hash:o,index:t,address:i.getAddress().toString()},height:0<e.curHeight?e.curHeight+1:0,pst:u.Ready,wid:0,account:""}),await e.propList.setVp(p,h),p={pid:p.pid,address:p.current.address,wid:p.wid,account:p.account,time:l.time,height:p.height,cid:p.cid},e.emit("prop/receive",p),s("prop/receive",p)}else{if(!(p=await e.propList.getVp(r.pid))||p.current.hash!=r.prev.hash||p.current.index!=r.prev.index)return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);var d,f=p.current.address,m=i.getAddress().toString();if(p.current={hash:o,index:t,address:m},p.height=0<e.curHeight?e.curHeight+1:0,p.pst=u.Ready,await e.propList.setVp(p,h),e.mode==c.Block){if(p.cid==e.network.genesisId){for(d of(await e.propList.getVpByAddress(f)).list){if(d.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(f)}e.voteMgr.addTokenAddress(m)}m={pid:p.pid,oid:p.oid,cid:p.cid,src:f,dst:m,time:l.time,height:p.height},e.node.transmit("prop.exchange",m)}}let g=0,v=r;for(;i&&i.getReturnType(a.OP_PROPEXCHANGE)&&g++<2e3;){var y=v.prev,b=(e.middleHashChain.add(y.hash+y.index.toString()),await e.finder(y.hash));if(!b)break;if(i=b.outputs[y.index],!(v=i.getReturnData())||!v.prev||e.middleHashChain.has(v.prev.hash+v.prev.index.toString()))break}}async unconfirm(){var{env:e,data:t}=this.options,i=await e.finder(t.prev.hash);if(i&&i.outputs[t.prev.index]&&(n=i.outputs[t.prev.index]).getReturnData([a.OP_PROPEXCHANGE,a.OP_PROPCREATE])){var r=await e.propList.getVp(t.pid);if(r){var s,n=n.getAddress().toString(),o=r.current.address,u=r.height;if(r.current.hash=t.prev.hash,r.current.index=t.prev.index,r.current.address=n,await e.propList.setVp(r,i),e.mode==c.Block){if(r.cid==e.network.genesisId){for(s of(await e.propList.getVpByAddress(o)).list){if(s.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(o)}e.voteMgr.addTokenAddress(n)}t={pid:r.pid,src:o,dst:n,height:u},e.node.transmit("prop.unexchange",t)}}}}async verify(){var{env:e,tx:t,i:i,data:a}=this.options;return r.strictEqual(a.prev.hash,t.inputs[i].prevout.hash),r.strictEqual(a.prev.index,t.inputs[i].prevout.index),await e.propList.getVp(a.pid),!0}}},function(e,t,i){var r=i(14);const a=i(5).ContractEnvType,s=i(37).VerifyError;var{}=i(19);const n=i(193);e.exports=class extends r{async insert(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=-1,await e.cpMemList.addItem(r)}async erase(){var e=this.options.env,t=this.data;await e.cpMemList.delItem(t)}async confirm(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=this.options.coinbaseHeight,r.status=1,await e.cpList.addItem(r),e.mode==a.Block&&(i={cid:r.cid,name:r.name,address:r.current.address},e.node.transmit("cp.create",i)),this.mode==a.Block&&await e.chain.node.mempool.cpMemList.delItem(r)}async unconfirm(){var e=this.options.env,t=this.data;this.options.tx,await e.cpList.delItem(t)}async verify(){var e=this.options.env,t=this.options.tx;if(!this.data)throw new s(t,"invalid","null cpRegister data",100);var i=n.verifyDataFormat(this.data);if(i)throw new s(t,"invalid",i,100);if((this.mode!=a.Block||"spv"!=e.node.nodeType)&&(i=this.mode!=a.Mempool,!await e.rpcExecute({method:"canExecute",params:[{confirm:i,cid:this.data.cid,name:this.data.name,oper:this.data.oper}]})))throw new s(t,"invalid info on "+this.data.oper,"cp.create",0);return!0}}},function(e,t,i){"use strict";
427
+ const r=i(5).ContractType;e.exports=function(e){if(!e)return i(188);switch(e.oper){case r.cpRegister:return i(192);case r.cpChange:return i(194);case r.coinbase:return i(195);case r.contractPromise:return i(196);case r.scRegister:return i(199);case r.scUpdate:return i(200);case r.scState:return i(201);case r.scRun:return i(202);case r.scNotify:return i(208);case r.propFound:return i(209);case r.vote:return i(210);case r.propSale:return i(211);case r.notify:return i(212);case r.contractCreate:return i(213);case r.contractExecute:return i(214);case r.erIssue:return i(215);case r.erAbolish:return i(216);case r.enchanceCp:return i(217);default:try{return i(581)("./"+e.oper)}catch(e){return i(14)}}}},function(e,t,i){var r=i(14);const a=i(19).nestingExtentCodes,s=i(117);e.exports=class extends r{async insert(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashMem.has(t)||this.setOptIndex(e,i)&&(await s(e).insert(),e.env.middleHashMem.add(t))}}async erase(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashMem.delete(""+e.hash+t),this.setOptIndex(e,t)&&await s(e).erase()}async confirm(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashChain.has(t)||this.setOptIndex(e,i)&&(await s(e).confirm(),e.env.middleHashChain.add(t))}}async unconfirm(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashChain.delete(""+e.hash+t),this.setOptIndex(e,t)&&await s(e).unconfirm()}async verify(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++)if(this.setOptIndex(e,i)){var t=await s(e).verify();if(1!=t)return t}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(e,t){return e.i=t,e.output=e.tx.outputs[t],e.type=e.output.getReturnType(),e.data=e.output.getReturnData(a),!!e.data}}},function(e,t,i){const{ContractEnvType:r,PropStatus:a}=i(5);var s=i(52);const n=i(7),o=i(147);e.exports=class extends s{async confirm(){var{env:e,i:t,output:i,data:s,hash:n,block:o,tx:c}=this.options,u=await e.propList.getVp(s.pid);!u||u.current.hash==n&&u.current.index==t?(s.current={hash:n,index:t,address:i.getAddress().toString()},s.height=0<e.curHeight?e.curHeight+1:0,s.pst=a.Ready,s.gold=i.value,await e.propList.setVp(s,c),e.mode==r.Block&&(i={pid:s.pid,oid:s.oid,cid:s.cid,dst:s.current.address,time:o.time,height:s.height,value:s.gold},e.node.transmit("prop.create",i))):e.logger.warning("PropCreate.conflict",s.pid,", height: ",o?o.height:0,"mode: ",e.mode,n,t,u.current.hash,u.current.index)}async unconfirm(){var{env:e,i:t,data:i,hash:a}=this.options,s=await e.propList.getVp(i.pid);s&&s.current.hash==a&&s.current.index==t&&(await e.propList.delVp(s),e.mode==r.Block)&&(a={pid:i.pid},e.node.transmit("prop.uncreate",a))}async verify(){var{env:e,output:t,data:i}=this.options;if(!o.unittest){var r=e.cpList.getItem(i.cid);if(!r||r.current.address!=t.getAddress().toString())return"PropCreate.errorAddress"}return t.value<n.MINPROPVALUE?"PropCreate.MINPROPVALUE":!e.network.tokenReg.test(i.pid)||"PropCreate.invalidPid"}}},function(e,t,i){const r=i(5).ContractEnvType;i=i(52);e.exports=class extends i{async confirm(){var{env:e,i:t,output:i,data:a,hash:s,block:n}=this.options;e.mode==r.Block&&(a={data:a,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:n.time,current:{hash:s,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.confirm",a))}async unconfirm(){var{env:e,i:t,output:i,data:a,hash:s,block:n}=this.options;e.mode==r.Block&&(a={data:a,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:n.time,current:{hash:s,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.unconfirm",a))}async verify(){return!0}}},function(e,t,i){const r=i(0),a=i(19).opcodes,s=i(44).broadcast,n=i(131).vpItem;var o=i(52);const{ContractEnvType:c,PropStatus:u}=i(5);e.exports=class extends o{async confirm(){let{env:e,i:t,output:i,data:r,hash:o,tx:h,block:l}=this.options;if(e.mode==c.Wallet){var p=await e.propList.getVp(r.pid);if(p&&(p.current.hash!=r.prev.hash||p.current.index!=r.prev.index))return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);p=new n({pid:r.pid,cid:r.cid,oid:r.oid,gold:i.value,current:{hash:o,index:t,address:i.getAddress().toString()},height:0<e.curHeight?e.curHeight+1:0,pst:u.Ready,wid:0,account:""}),await e.propList.setVp(p,h),p={pid:p.pid,address:p.current.address,wid:p.wid,account:p.account,time:l.time,height:p.height,cid:p.cid},e.emit("prop/receive",p),s("prop/receive",p)}else{if(!(p=await e.propList.getVp(r.pid))||p.current.hash!=r.prev.hash||p.current.index!=r.prev.index)return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);var d,f=p.current.address,m=i.getAddress().toString();if(p.current={hash:o,index:t,address:m},p.height=0<e.curHeight?e.curHeight+1:0,p.pst=u.Ready,await e.propList.setVp(p,h),e.mode==c.Block){if(p.cid==e.network.genesisId){for(d of(await e.propList.getVpByAddress(f)).list){if(d.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(f)}e.voteMgr.addTokenAddress(m)}m={pid:p.pid,oid:p.oid,cid:p.cid,src:f,dst:m,time:l.time,height:p.height},e.node.transmit("prop.exchange",m)}}let g=0,v=r;for(;i&&i.getReturnType(a.OP_PROPEXCHANGE)&&g++<2e3;){var y=v.prev,b=(e.middleHashChain.add(y.hash+y.index.toString()),await e.finder(y.hash));if(!b)break;if(i=b.outputs[y.index],!(v=i.getReturnData())||!v.prev||e.middleHashChain.has(v.prev.hash+v.prev.index.toString()))break}}async unconfirm(){var{env:e,data:t}=this.options,i=await e.finder(t.prev.hash);if(i&&i.outputs[t.prev.index]&&(n=i.outputs[t.prev.index]).getReturnData([a.OP_PROPEXCHANGE,a.OP_PROPCREATE])){var r=await e.propList.getVp(t.pid);if(r){var s,n=n.getAddress().toString(),o=r.current.address,u=r.height;if(r.current.hash=t.prev.hash,r.current.index=t.prev.index,r.current.address=n,await e.propList.setVp(r,i),e.mode==c.Block){if(r.cid==e.network.genesisId){for(s of(await e.propList.getVpByAddress(o)).list){if(s.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(o)}e.voteMgr.addTokenAddress(n)}t={pid:r.pid,src:o,dst:n,height:u},e.node.transmit("prop.unexchange",t)}}}}async verify(){var{env:e,tx:t,i:i,data:a}=this.options;return r.strictEqual(a.prev.hash,t.inputs[i].prevout.hash),r.strictEqual(a.prev.index,t.inputs[i].prevout.index),await e.propList.getVp(a.pid),!0}}},function(e,t,i){var r=i(14);const a=i(5).ContractEnvType,s=i(37).VerifyError;var{}=i(19);const n=i(193);e.exports=class extends r{async insert(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=-1,await e.cpMemList.addItem(r)}async erase(){var e=this.options.env,t=this.data;await e.cpMemList.delItem(t)}async confirm(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=this.options.coinbaseHeight,r.status=1,await e.cpList.addItem(r),await e.cpMemList.delItem(r),e.mode==a.Block&&(i={cid:r.cid,name:r.name,address:r.current.address},e.node.transmit("cp.create",i))}async unconfirm(){var e=this.options.env,t=this.data;this.options.tx,await e.cpMemList.addItem(t),await e.cpList.delItem(t),e.mode==a.Block&&(t={cid:t.cid},e.node.transmit("cp.uncreate",t))}async verify(){var e=this.options.env,t=this.options.tx;if(!this.data)throw new s(t,"invalid","null cpRegister data",100);var i=n.verifyDataFormat(this.data);if(i)throw new s(t,"invalid",i,100);if((this.mode!=a.Block||"spv"!=e.node.nodeType)&&(i=this.mode!=a.Mempool,!await e.rpcExecute({method:"canExecute",params:[{confirm:i,cid:this.data.cid,name:this.data.name,oper:this.data.oper}]})))throw new s(t,"invalid info on "+this.data.oper,"cp.create",0);return!0}}},function(e,t,i){"use strict";
428
428
  /*!
429
429
  * cpHelper.js
430
430
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
package/lib/gamegold.js CHANGED
@@ -211,7 +211,7 @@ let r=[];[i(558),i(559),i(560),i(561),i(562),i(563),i(564),i(565),i(566),i(567),
211
211
  * pkg.js - package constants
212
212
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
213
213
  * https://github.com/bookmansoft/gamegold
214
- */t.protocol="vallnet",t.version="5.5.1",t.url="https://github.com/bookmansoft/gamegold"},function(e,t,i){"use strict";
214
+ */t.protocol="vallnet",t.version="5.5.2",t.url="https://github.com/bookmansoft/gamegold"},function(e,t,i){"use strict";
215
215
  /*!
216
216
  * common.js - p2p constants for vallnet
217
217
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
@@ -438,7 +438,7 @@ function r(e){let t=null;var i=r.list[e.contract.options.type];return i?new(t=i.
438
438
  *
439
439
  * @note 为了让打包程序正常工作,没有使用自动化方案来引入类文件
440
440
  */
441
- const r=i(5).ContractType;e.exports=function(e){if(!e)return i(188);switch(e.oper){case r.cpRegister:return i(192);case r.cpChange:return i(194);case r.coinbase:return i(195);case r.contractPromise:return i(196);case r.scRegister:return i(199);case r.scUpdate:return i(200);case r.scState:return i(201);case r.scRun:return i(202);case r.scNotify:return i(208);case r.propFound:return i(209);case r.vote:return i(210);case r.propSale:return i(211);case r.notify:return i(212);case r.contractCreate:return i(213);case r.contractExecute:return i(214);case r.erIssue:return i(215);case r.erAbolish:return i(216);case r.enchanceCp:return i(217);default:try{return i(581)("./"+e.oper)}catch(e){return i(14)}}}},function(e,t,i){var r=i(14);const s=i(19).nestingExtentCodes,n=i(117);e.exports=class extends r{async insert(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashMem.has(t)||this.setOptIndex(e,i)&&(await n(e).insert(),e.env.middleHashMem.add(t))}}async erase(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashMem.delete(""+e.hash+t),this.setOptIndex(e,t)&&await n(e).erase()}async confirm(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashChain.has(t)||this.setOptIndex(e,i)&&(await n(e).confirm(),e.env.middleHashChain.add(t))}}async unconfirm(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashChain.delete(""+e.hash+t),this.setOptIndex(e,t)&&await n(e).unconfirm()}async verify(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++)if(this.setOptIndex(e,i)){var t=await n(e).verify();if(1!=t)return t}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(e,t){return e.i=t,e.output=e.tx.outputs[t],e.type=e.output.getReturnType(),e.data=e.output.getReturnData(s),!!e.data}}},function(e,t,i){const{ContractEnvType:r,PropStatus:s}=i(5);var n=i(52);const a=i(7),o=i(147);e.exports=class extends n{async confirm(){var{env:e,i:t,output:i,data:n,hash:a,block:o,tx:c}=this.options,h=await e.propList.getVp(n.pid);!h||h.current.hash==a&&h.current.index==t?(n.current={hash:a,index:t,address:i.getAddress().toString()},n.height=0<e.curHeight?e.curHeight+1:0,n.pst=s.Ready,n.gold=i.value,await e.propList.setVp(n,c),e.mode==r.Block&&(i={pid:n.pid,oid:n.oid,cid:n.cid,dst:n.current.address,time:o.time,height:n.height,value:n.gold},e.node.transmit("prop.create",i))):e.logger.warning("PropCreate.conflict",n.pid,", height: ",o?o.height:0,"mode: ",e.mode,a,t,h.current.hash,h.current.index)}async unconfirm(){var e,{env:t,i:i,data:e,hash:r}=this.options;(e=await t.propList.getVp(e.pid))&&e.current.hash==r&&e.current.index==i&&await t.propList.delVp(e)}async verify(){var{env:e,output:t,data:i}=this.options;if(!o.unittest){var r=e.cpList.getItem(i.cid);if(!r||r.current.address!=t.getAddress().toString())return"PropCreate.errorAddress"}return t.value<a.MINPROPVALUE?"PropCreate.MINPROPVALUE":!e.network.tokenReg.test(i.pid)||"PropCreate.invalidPid"}}},function(e,t,i){const r=i(5).ContractEnvType;i=i(52);e.exports=class extends i{async confirm(){var{env:e,i:t,output:i,data:s,hash:n,block:a}=this.options;e.mode==r.Block&&(s={data:s,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:a.time,current:{hash:n,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.confirm",s))}async unconfirm(){var{env:e,i:t,output:i,data:s,hash:n,block:a}=this.options;e.mode==r.Block&&(s={data:s,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:a.time,current:{hash:n,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.unconfirm",s))}async verify(){return!0}}},function(e,t,i){const r=i(0),s=i(19).opcodes,n=i(44).broadcast,a=i(131).vpItem;var o=i(52);const{ContractEnvType:c,PropStatus:h}=i(5);e.exports=class extends o{async confirm(){let{env:e,i:t,output:i,data:r,hash:o,tx:u,block:l}=this.options;if(e.mode==c.Wallet){var p=await e.propList.getVp(r.pid);if(p&&(p.current.hash!=r.prev.hash||p.current.index!=r.prev.index))return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);p=new a({pid:r.pid,cid:r.cid,oid:r.oid,gold:i.value,current:{hash:o,index:t,address:i.getAddress().toString()},height:0<e.curHeight?e.curHeight+1:0,pst:h.Ready,wid:0,account:""}),await e.propList.setVp(p,u),p={pid:p.pid,address:p.current.address,wid:p.wid,account:p.account,time:l.time,height:p.height,cid:p.cid},e.emit("prop/receive",p),n("prop/receive",p)}else{if(!(p=await e.propList.getVp(r.pid))||p.current.hash!=r.prev.hash||p.current.index!=r.prev.index)return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);var d,f=p.current.address,m=i.getAddress().toString();if(p.current={hash:o,index:t,address:m},p.height=0<e.curHeight?e.curHeight+1:0,p.pst=h.Ready,await e.propList.setVp(p,u),e.mode==c.Block){if(p.cid==e.network.genesisId){for(d of(await e.propList.getVpByAddress(f)).list){if(d.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(f)}e.voteMgr.addTokenAddress(m)}m={pid:p.pid,oid:p.oid,cid:p.cid,src:f,dst:m,time:l.time,height:p.height},e.node.transmit("prop.exchange",m)}}let g=0,y=r;for(;i&&i.getReturnType(s.OP_PROPEXCHANGE)&&g++<2e3;){var v=y.prev,b=(e.middleHashChain.add(v.hash+v.index.toString()),await e.finder(v.hash));if(!b)break;if(i=b.outputs[v.index],!(y=i.getReturnData())||!y.prev||e.middleHashChain.has(y.prev.hash+y.prev.index.toString()))break}}async unconfirm(){var{env:e,data:t}=this.options,i=await e.finder(t.prev.hash);if(i&&i.outputs[t.prev.index]&&(a=i.outputs[t.prev.index]).getReturnData([s.OP_PROPEXCHANGE,s.OP_PROPCREATE])){var r=await e.propList.getVp(t.pid);if(r){var n,a=a.getAddress().toString(),o=r.current.address,h=r.height;if(r.current.hash=t.prev.hash,r.current.index=t.prev.index,r.current.address=a,await e.propList.setVp(r,i),e.mode==c.Block){if(r.cid==e.network.genesisId){for(n of(await e.propList.getVpByAddress(o)).list){if(n.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(o)}e.voteMgr.addTokenAddress(a)}t={pid:r.pid,src:o,dst:a,height:h},e.node.transmit("prop.unexchange",t)}}}}async verify(){var{env:e,tx:t,i:i,data:s}=this.options;return r.strictEqual(s.prev.hash,t.inputs[i].prevout.hash),r.strictEqual(s.prev.index,t.inputs[i].prevout.index),await e.propList.getVp(s.pid),!0}}},function(e,t,i){var r=i(14);const s=i(5).ContractEnvType,n=i(37).VerifyError;var{}=i(19);const a=i(193);e.exports=class extends r{async insert(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=-1,await e.cpMemList.addItem(r)}async erase(){var e=this.options.env,t=this.data;await e.cpMemList.delItem(t)}async confirm(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=this.options.coinbaseHeight,r.status=1,await e.cpList.addItem(r),e.mode==s.Block&&(i={cid:r.cid,name:r.name,address:r.current.address},e.node.transmit("cp.create",i)),this.mode==s.Block&&await e.chain.node.mempool.cpMemList.delItem(r)}async unconfirm(){var e=this.options.env,t=this.data;this.options.tx,await e.cpList.delItem(t)}async verify(){var e=this.options.env,t=this.options.tx;if(!this.data)throw new n(t,"invalid","null cpRegister data",100);var i=a.verifyDataFormat(this.data);if(i)throw new n(t,"invalid",i,100);if((this.mode!=s.Block||"spv"!=e.node.nodeType)&&(i=this.mode!=s.Mempool,!await e.rpcExecute({method:"canExecute",params:[{confirm:i,cid:this.data.cid,name:this.data.name,oper:this.data.oper}]})))throw new n(t,"invalid info on "+this.data.oper,"cp.create",0);return!0}}},function(e,t,i){"use strict";
441
+ const r=i(5).ContractType;e.exports=function(e){if(!e)return i(188);switch(e.oper){case r.cpRegister:return i(192);case r.cpChange:return i(194);case r.coinbase:return i(195);case r.contractPromise:return i(196);case r.scRegister:return i(199);case r.scUpdate:return i(200);case r.scState:return i(201);case r.scRun:return i(202);case r.scNotify:return i(208);case r.propFound:return i(209);case r.vote:return i(210);case r.propSale:return i(211);case r.notify:return i(212);case r.contractCreate:return i(213);case r.contractExecute:return i(214);case r.erIssue:return i(215);case r.erAbolish:return i(216);case r.enchanceCp:return i(217);default:try{return i(581)("./"+e.oper)}catch(e){return i(14)}}}},function(e,t,i){var r=i(14);const s=i(19).nestingExtentCodes,n=i(117);e.exports=class extends r{async insert(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashMem.has(t)||this.setOptIndex(e,i)&&(await n(e).insert(),e.env.middleHashMem.add(t))}}async erase(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashMem.delete(""+e.hash+t),this.setOptIndex(e,t)&&await n(e).erase()}async confirm(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++){var t=""+e.hash+i;e.env.middleHashChain.has(t)||this.setOptIndex(e,i)&&(await n(e).confirm(),e.env.middleHashChain.add(t))}}async unconfirm(){var e=this.getOpt();for(let t=0;t<e.tx.outputs.length;t++)e.env.middleHashChain.delete(""+e.hash+t),this.setOptIndex(e,t)&&await n(e).unconfirm()}async verify(){var e=this.getOpt();for(let i=0;i<e.tx.outputs.length;i++)if(this.setOptIndex(e,i)){var t=await n(e).verify();if(1!=t)return t}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(e,t){return e.i=t,e.output=e.tx.outputs[t],e.type=e.output.getReturnType(),e.data=e.output.getReturnData(s),!!e.data}}},function(e,t,i){const{ContractEnvType:r,PropStatus:s}=i(5);var n=i(52);const a=i(7),o=i(147);e.exports=class extends n{async confirm(){var{env:e,i:t,output:i,data:n,hash:a,block:o,tx:c}=this.options,h=await e.propList.getVp(n.pid);!h||h.current.hash==a&&h.current.index==t?(n.current={hash:a,index:t,address:i.getAddress().toString()},n.height=0<e.curHeight?e.curHeight+1:0,n.pst=s.Ready,n.gold=i.value,await e.propList.setVp(n,c),e.mode==r.Block&&(i={pid:n.pid,oid:n.oid,cid:n.cid,dst:n.current.address,time:o.time,height:n.height,value:n.gold},e.node.transmit("prop.create",i))):e.logger.warning("PropCreate.conflict",n.pid,", height: ",o?o.height:0,"mode: ",e.mode,a,t,h.current.hash,h.current.index)}async unconfirm(){var{env:e,i:t,data:i,hash:s}=this.options,n=await e.propList.getVp(i.pid);n&&n.current.hash==s&&n.current.index==t&&(await e.propList.delVp(n),e.mode==r.Block)&&(s={pid:i.pid},e.node.transmit("prop.uncreate",s))}async verify(){var{env:e,output:t,data:i}=this.options;if(!o.unittest){var r=e.cpList.getItem(i.cid);if(!r||r.current.address!=t.getAddress().toString())return"PropCreate.errorAddress"}return t.value<a.MINPROPVALUE?"PropCreate.MINPROPVALUE":!e.network.tokenReg.test(i.pid)||"PropCreate.invalidPid"}}},function(e,t,i){const r=i(5).ContractEnvType;i=i(52);e.exports=class extends i{async confirm(){var{env:e,i:t,output:i,data:s,hash:n,block:a}=this.options;e.mode==r.Block&&(s={data:s,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:a.time,current:{hash:n,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.confirm",s))}async unconfirm(){var{env:e,i:t,output:i,data:s,hash:n,block:a}=this.options;e.mode==r.Block&&(s={data:s,height:0<e.curHeight?e.curHeight+1:0,gold:i.value,time:a.time,current:{hash:n,index:t,address:i.getAddress().toString()}},e.node.transmit("attach.unconfirm",s))}async verify(){return!0}}},function(e,t,i){const r=i(0),s=i(19).opcodes,n=i(44).broadcast,a=i(131).vpItem;var o=i(52);const{ContractEnvType:c,PropStatus:h}=i(5);e.exports=class extends o{async confirm(){let{env:e,i:t,output:i,data:r,hash:o,tx:u,block:l}=this.options;if(e.mode==c.Wallet){var p=await e.propList.getVp(r.pid);if(p&&(p.current.hash!=r.prev.hash||p.current.index!=r.prev.index))return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);p=new a({pid:r.pid,cid:r.cid,oid:r.oid,gold:i.value,current:{hash:o,index:t,address:i.getAddress().toString()},height:0<e.curHeight?e.curHeight+1:0,pst:h.Ready,wid:0,account:""}),await e.propList.setVp(p,u),p={pid:p.pid,address:p.current.address,wid:p.wid,account:p.account,time:l.time,height:p.height,cid:p.cid},e.emit("prop/receive",p),n("prop/receive",p)}else{if(!(p=await e.propList.getVp(r.pid))||p.current.hash!=r.prev.hash||p.current.index!=r.prev.index)return void e.logger.warning("PropExchange.conflict",r.pid,", height: ",l?l.height:0,"mode: ",e.mode,"sim: ",o,t,"ori: ",p.current.hash,p.current.index);var d,f=p.current.address,m=i.getAddress().toString();if(p.current={hash:o,index:t,address:m},p.height=0<e.curHeight?e.curHeight+1:0,p.pst=h.Ready,await e.propList.setVp(p,u),e.mode==c.Block){if(p.cid==e.network.genesisId){for(d of(await e.propList.getVpByAddress(f)).list){if(d.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(f)}e.voteMgr.addTokenAddress(m)}m={pid:p.pid,oid:p.oid,cid:p.cid,src:f,dst:m,time:l.time,height:p.height},e.node.transmit("prop.exchange",m)}}let g=0,y=r;for(;i&&i.getReturnType(s.OP_PROPEXCHANGE)&&g++<2e3;){var v=y.prev,b=(e.middleHashChain.add(v.hash+v.index.toString()),await e.finder(v.hash));if(!b)break;if(i=b.outputs[v.index],!(y=i.getReturnData())||!y.prev||e.middleHashChain.has(y.prev.hash+y.prev.index.toString()))break}}async unconfirm(){var{env:e,data:t}=this.options,i=await e.finder(t.prev.hash);if(i&&i.outputs[t.prev.index]&&(a=i.outputs[t.prev.index]).getReturnData([s.OP_PROPEXCHANGE,s.OP_PROPCREATE])){var r=await e.propList.getVp(t.pid);if(r){var n,a=a.getAddress().toString(),o=r.current.address,h=r.height;if(r.current.hash=t.prev.hash,r.current.index=t.prev.index,r.current.address=a,await e.propList.setVp(r,i),e.mode==c.Block){if(r.cid==e.network.genesisId){for(n of(await e.propList.getVpByAddress(o)).list){if(n.cid==e.network.genesisId)break;e.voteMgr.delTokenAddress(o)}e.voteMgr.addTokenAddress(a)}t={pid:r.pid,src:o,dst:a,height:h},e.node.transmit("prop.unexchange",t)}}}}async verify(){var{env:e,tx:t,i:i,data:s}=this.options;return r.strictEqual(s.prev.hash,t.inputs[i].prevout.hash),r.strictEqual(s.prev.index,t.inputs[i].prevout.index),await e.propList.getVp(s.pid),!0}}},function(e,t,i){var r=i(14);const s=i(5).ContractEnvType,n=i(37).VerifyError;var{}=i(19);const a=i(193);e.exports=class extends r{async insert(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=-1,await e.cpMemList.addItem(r)}async erase(){var e=this.options.env,t=this.data;await e.cpMemList.delItem(t)}async confirm(){var e=this.options.env,t=this.options.tx,i=t.hash("hex"),r=this.data;r.current={hash:i,index:0,address:t.outputs[0].getAddress().toString()},r.height=this.options.coinbaseHeight,r.status=1,await e.cpList.addItem(r),await e.cpMemList.delItem(r),e.mode==s.Block&&(i={cid:r.cid,name:r.name,address:r.current.address},e.node.transmit("cp.create",i))}async unconfirm(){var e=this.options.env,t=this.data;this.options.tx,await e.cpMemList.addItem(t),await e.cpList.delItem(t),e.mode==s.Block&&(t={cid:t.cid},e.node.transmit("cp.uncreate",t))}async verify(){var e=this.options.env,t=this.options.tx;if(!this.data)throw new n(t,"invalid","null cpRegister data",100);var i=a.verifyDataFormat(this.data);if(i)throw new n(t,"invalid",i,100);if((this.mode!=s.Block||"spv"!=e.node.nodeType)&&(i=this.mode!=s.Mempool,!await e.rpcExecute({method:"canExecute",params:[{confirm:i,cid:this.data.cid,name:this.data.name,oper:this.data.oper}]})))throw new n(t,"invalid info on "+this.data.oper,"cp.create",0);return!0}}},function(e,t,i){"use strict";
442
442
  /*!
443
443
  * cpHelper.js
444
444
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
@@ -877,7 +877,7 @@ var r=i(775),s=i(777),n=i(778),a=i(779),o=i(780),c=i(781),h=i(782);i=i(783),s=[]
877
877
  /*!
878
878
  * chaindb.js - blockchain data management for vallnet
879
879
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
880
- */const r=i(0),s=i(2),n=i(1),a=i(4),o=i(33),c=i(3),h=i(15),u=i(60),l=i(247),p=i(167),d=i(328),f=i(63),m=i(75),g=i(46),y=i(31),v=i(13),b=i(329),w=i(330),k=i(145),x=c.U8,S=c.U32,{getVerifyMsg:_,BlockFinalType:E,ContractEnvType:R,ContractType:A}=i(5);var O=i(71);const C=i(42),I=i(20),j=i(68),P=i(113),T=i(28),B=i(6),N=i(143),M=i(7),L=i(159),F=i(151),z=F.scItem,H=i(339),D=i(313),U=D.cpItem,q=i(131),V=q.vpItem,K=i(340),W=K.vpItem,$=i(728),X=i(153),G=X.ErItem,Y=i(154),J=Y.ErAbolishItem,Z=i(228),Q=Z.EnchancementItem;i(54);const ee=i(341),te=i(117),{opcodes:ie,nestingCodes:re}=i(19),se=i(122),ne=i(26),ae=i(38),oe=i(37).VerifyError;class ce extends O{constructor(e){super(),this.chain=e,this.eid="chaindb",this.fromOptions(e.options),this.db=p(this.options),this.stateCache=new le(this.network),this.state=new ue,this.pending=null,this.current=null,this.coinCache=new f(this.options.coinCache),this.cacheHash=new f(this.options.entryCache),this.cacheHeight=new f(this.options.entryCache),this.autoTaskMgr=new L(this),this.propList=new q(this),this.htlcList=new K(this),this.$voteMgr=new $(this),this.transactionList=new H(this),this.cpList=new D(this),this.scList=new F(this),this.erList=new X(this),this.erAbList=new Y(this),this.enCpList=new Z(this,{type:"cp"}),this.middleHashChain=new Set}get hmacConnection(){return this.node.specialCp.content()}get voteMgr(){return this.$voteMgr}get mode(){return R.Block}fromOptions(e){this.options=e,this.node=e.node,this.network=e.network,this.logger=e.logger.context("chaindb")}get curHeight(){return this.chain.height}get finder(){return this.node.getTXFromAll?this.node.getTXFromAll.bind(this.node):()=>{}}get tidCreator(){return d.tx}rpcExecute(){return this.node.rpc.execute.apply(this.node.rpc,arguments)}createGenesisCoinbase(e,t){var i,r=new I,s=new P,n=((i=((i=(s.script.pushInt(0),s.script.pushData(c.ZERO_HASH160),Buffer.allocUnsafe(4))).writeUInt32LE(0,0,!0),s.script.pushData(i),s.script.pushData(c.ZERO_U64),s.script.compile(),s.witness.push(c.ZERO_HASH),s.witness.compile(),r.inputs.push(s),new T)).script.createScript(c.ZERO_HASH160),i.value=M.ORIGINAL,r.outputs.push(i),c.ZERO_HASH),a=[],[a,,]=(a.push(c.ZERO_HASH),N.createRoot(a));a=B.root256(a,n);return(n=new T).script.fromCommitment(a),r.outputs.push(n),s.script.setData(1,t),s.script.compile(),i.script.fromAddress(e.addresses[0]),r}dummyInput(){return P.fromOutpoint(new g(c.NULL_HASH,0))}createGenesisBlock(e){if(!e.addresses||e.addresses.length<11)throw new Error("addresses length expect 11.");let t=e.flags;t=t||Buffer.from("In the name of Athena: Of the user, By the user, and For the user.","ascii");var i=this.createGenesisCoinbase(e,t),r=this.network.genesisId,n=new j,[n,,]=(n.addInput(this.dummyInput()),n.cpRegister(e.addresses[0],M.COIN,{cid:r,oper:A.cpRegister,name:"ATHENA",ip:"*",pubAddress:"",pubKey:"",signMethod:""}),n.commit()),a=new j;a.addInput(this.dummyInput());for(let t=0;t<10;t++)for(let i=0;i<10;i++){var o={oper:A.propCreate,pid:""+this.network.tokenFix+s.sprintf("%04d",10*t+i+1),oid:this.network.tokenFix+"0000",cid:r,gold:M.COIN};a.propCreate(e.addresses[t+1],o)}var[h,,]=a.commit(),u=new m({version:e.version,prevBlock:c.NULL_HASH,merkleRoot:i.hash("hex"),time:e.time,bits:e.bits,nonce:e.nonce,height:0});return u.txs.push(i),u.txs.push(n),u.txs.push(h),u.refresh(!0),u.merkleRoot=u.createMerkleRoot("hex"),u}async open(e){this.logger.info("Opening ChainDB..."),await this.db.open();var t=await this.db.checkVersion(d,3);if(i=await this.getState()){var i;if(await this.verifyFlags(i),await this.verifyDeployments(),this.stateCache=await this.getStateCache(),this.state=i,!(i=await this.getEntry(0)))throw new Error("genesis block not found.");this.network.genesis.hash=i.hash,this.network.genesis.merkleRoot=i.merkleRoot,this.logger.info("ChainDB successfully loaded.")}else e&&(i=await this.getGenesisParams(e),this.node.miner&&(this.node.miner.addresses=[new v(i.coinbaseAddress)]),this.node.config)&&this.node.config.changeParams(i),await this.saveFlags(),await this.saveDeployments(),await this.saveGenesis(),this.logger.info("ChainDB successfully initialized.");return this.logger.info("Chain State: hash=%s tx=%d coin=%d value=%s.",this.state.rhash(),this.state.tx,this.state.coin,o.btc(this.state.value)),t}async getGenesisParams(e){if(e.isGenesisParams)return e;e=e||{};var t=new ee({name:"wallet-test",db:"memory",resolution:!1,verify:!1}),i=(t=(e.getMnemonicFromMemory=!0,await t.open(e),await t.get("primary")),[]);for(const s of await t.getPaths("default")){var r=s.toAddress();0==s.branch&&i.push(""+r.toString(e.network))}var s,n,a,o,h={};return h[e.network+"Addresses"]=i.reduce((e,t)=>e+(""==e?t:","+t),""),h.coinbaseAddress=i[1],h.notifyAddress=t.notifyAddress,this.node.config.notifyAddress=h.notifyAddress,await se.writeFile(h,e.network+"-genesis.params"),e.isGenesisEncrypt||(s=B.hash256(Buffer.from(t.master.mnemonic.toSeed().toString("hex"))),n=ne.publicKeyCreate(s,!0),a=v.fromWitnessPubkeyhash(B.hash160(n),this.network.type).toString(),o=B.hash256(Buffer.concat([Buffer.from("root"),t.master.key.privateKey])),t={body:{language:t.master.mnemonic.language,phrase:t.master.mnemonic.getPhrase(),passphrase:t.master.mnemonic.passphrase,awardAddress:h.coinbaseAddress,notifyAddress:t.notifyAddress,alliancePrivateKey:o.toString("hex"),allianceName:"root",allianceNodeId:0,allianceNodeToken:{prv:s.toString("hex"),pub:n.toString("hex"),address:a}},password:e.password||c.MNEMONIC_SALT,network:e.network,file:e.network+"-genesis.keystore"},await se.writeEncryptFile(t)),h}close(){return this.db.close()}start(){return r(!this.current),r(!this.pending),this.current=this.db.batch(),this.pending=this.state.clone(),this.coinCache.start(),this.cacheHash.start(),this.cacheHeight.start(),this.current}put(e,t){r(this.current),this.current.put(e,t)}del(e){r(this.current),this.current.del(e)}batch(){return r(this.current),this.current}drop(){var e=this.current;r(this.current),r(this.pending),this.current=null,this.pending=null,this.coinCache.drop(),this.cacheHash.drop(),this.cacheHeight.drop(),this.stateCache.drop(),e.clear()}async commit(){r(this.current),r(this.pending);try{await this.current.write()}catch(e){throw this.current=null,this.pending=null,this.coinCache.drop(),this.cacheHash.drop(),this.cacheHeight.drop(),e}this.pending.committed&&(this.state=this.pending),this.current=null,this.pending=null,this.coinCache.commit(),this.cacheHash.commit(),this.cacheHeight.commit(),this.stateCache.commit()}hasCache(e){return("number"==typeof e?this.cacheHeight:(r("string"==typeof e),this.cacheHash)).has(e)}getCache(e){return("number"==typeof e?this.cacheHeight:(r("string"==typeof e),this.cacheHash)).get(e)}async getHeight(e){var t;return"number"==typeof e?e:(r("string"==typeof e),e===c.NULL_HASH?-1:(t=this.cacheHash.get(e))?t.height:(t=await this.db.get(d.h(e)))?t.readUInt32LE(0,!0):-1)}async getHash(e){var t;return"string"==typeof e?e:(r("number"==typeof e),e<0?null:(t=this.cacheHeight.get(e))?t.hash:(t=await this.db.get(d.H(e)))?t.toString("hex"):null)}async getEntryByHeight(e){var t;return r("number"==typeof e),e<0?null:this.cacheHeight.get(e)||((e=await this.db.get(d.H(e)))&&(e=e.toString("hex"),t=this.state,e=await this.getEntryByHash(e))?(this.state===t&&this.cacheHeight.set(e.height,e),e):null)}async getEntryByHash(e){return r("string"==typeof e),e===c.NULL_HASH?null:this.cacheHash.get(e)||((e=await this.db.get(d.e(e)))?(e=b.fromRaw(e),this.cacheHash.set(e.hash,e),e):null)}getEntry(e){return"number"==typeof e?this.getEntryByHeight(e):this.getEntryByHash(e)}async hasEntry(e){return-1!==await this.getHeight(e)}async getAncestor(e,t){if(t<0)return null;if(r(0<=t),r(t<=e.height),await this.isMainChain(e))return this.getEntryByHeight(t);for(;e.height!==t;){e=this.getPrevCache(e)||await this.getPrevious(e),r(e)}return e}getPrevious(e){return this.getEntryByHash(e.prevBlock)}getPrevCache(e){return this.cacheHash.get(e.prevBlock)||null}async getNext(e){return(e=await this.getNextHash(e.hash))?this.getEntryByHash(e):null}async getNextEntry(e){var t=await this.getEntryByHeight(e.height+1);return t&&t.prevBlock===e.hash?t:null}getTip(){return this.getEntryByHash(this.state.tip)}async getState(){var e=await this.db.get(d.R);return e?ue.fromRaw(e):null}async saveGenesis(){let e=[];e=(this.node.config?this.node.config[this.network.type+"Addresses"]:this.network.genesis.addresses).split(",");var t=this.createGenesisBlock({version:this.network.genesis.version,time:this.network.genesis.time,bits:this.network.genesis.bits,nonce:this.network.genesis.nonce,addresses:e}),i=(this.network.genesis.hash=t.hash("hex"),this.network.genesis.merkleRoot=t.merkleRoot,b.fromBlock(t)),r=(this.logger.info("Writing genesis block to ChainDB."),new u);for(let e=0;e<t.txs.length;e++)r.addTX(t.txs[e],t.height,t.time);await this.save(i,t,r)}async getFlags(){var e=await this.db.get(d.O);return e?he.fromRaw(e):null}async verifyFlags(e){var t=this.options,i=await this.getFlags();let r=!1,s=!1;if(!i)throw new Error("No flags found.");if(t.network!==i.network)throw new Error("Network mismatch for chain.");if(t.spv&&!i.spv)throw new Error("Cannot retroactively enable SPV.");if(!t.spv&&i.spv)throw new Error("Cannot retroactively disable SPV.");if(!i.witness){if(!t.forceFlags)throw new Error("Cannot retroactively enable witness.");r=!0}if(t.prune&&!i.prune){if(!t.forceFlags)throw new Error("Cannot retroactively prune.");s=!0}if(!t.prune&&i.prune)throw new Error("Cannot retroactively unprune.");if(t.indexTX&&!i.indexTX)throw new Error("Cannot retroactively enable TX indexing.");if(!t.indexTX&&i.indexTX)throw new Error("Cannot retroactively disable TX indexing.");if(t.indexAddress&&!i.indexAddress)throw new Error("Cannot retroactively enable address indexing.");if(!t.indexAddress&&i.indexAddress)throw new Error("Cannot retroactively disable address indexing.");r&&(await this.logger.info("Rewriting chain flags."),await this.saveFlags()),s&&(await this.logger.info("Retroactively pruning chain."),await this.prune(e.tip))}async getStateCache(){var e=new le(this.network);for(const s of await this.db.range({gte:d.v(0,c.ZERO_HASH),lte:d.v(255,c.MAX_HASH),values:!0})){var[t,i]=d.vv(s.key),r=s.value[0];e.insert(t,i,r)}return e}saveDeployments(){var e=this.db.batch();return this.writeDeployments(e),e.write()}async batchPut(e,t){var i=this.db.batch();i.put(e,t),await i.write()}async batchDel(e){var t=this.db.batch();t.del(e),await t.write()}writeDeployments(e){var t=new a(1+17*this.network.deploys.length);t.writeU8(this.network.deploys.length);for(const e of this.network.deploys)t.writeU8(e.bit),t.writeU32(e.startTime),t.writeU32(e.timeout),t.writeI32(e.threshold),t.writeI32(e.window);e.put(d.V,t.render())}async checkDeployments(){var e=await this.db.get(d.V),t=(r(e,"No deployment table found."),new n(e)),i=t.readU8(),s=[];for(let e=0;e<i;e++){var a=t.readU8(),o=t.readU32(),c=t.readU32(),h=t.readI32(),u=t.readI32(),l=this.network.byBit(a);l&&o===l.startTime&&c===l.timeout&&h===l.threshold&&u===l.window||s.push(a)}return s}async verifyDeployments(){let e;try{e=await this.checkDeployments()}catch(t){if("EncodingError"!==t.type)throw t;e=[];for(let t=0;t<32;t++)e.push(t)}if(0===e.length)return!0;var t=this.db.batch();for(const i of e)this.logger.warning("Versionbit deployment params modified."),this.logger.warning("Invalidating cache for bit %d.",i),await this.invalidateCache(i,t);return this.writeDeployments(t),await t.write(),!1}async invalidateCache(e,t){for(const i of await this.db.keys({gte:d.v(e,c.ZERO_HASH),lte:d.v(e,c.MAX_HASH)}))t.del(i)}async prune(){var e=this.options,t=this.network.block.keepBlocks,i=this.network.block.pruneAfterHeight;if((await this.getFlags()).prune)throw new Error("Chain is already pruned.");var s=await this.getHeight(this.state.tip);if(s<=i+t)return!1;i+=1;var n=s-t,a=this.db.batch();for(let e=i;e<=n;e++){var o=await this.getHash(e);if(!o)throw new Error(`Cannot find hash for ${e}.`);a.del(d.b(o)),a.del(d.u(o))}try{e.prune=!0;const t=he.fromOptions(e);r(t.prune),a.put(d.O,t.toRaw()),await a.write()}catch(t){throw e.prune=!1,t}return await this.db.compactRange(),!0}async getNextHash(e){return(e=await this.db.get(d.n(e)))?e.toString("hex"):null}async isMainHash(e){if(r("string"==typeof e),e===c.NULL_HASH)return!1;if(e===this.network.genesis.hash)return!0;if(e===this.state.tip)return!0;var t=this.cacheHash.get(e);return t&&(t=this.cacheHeight.get(t.height))?t.hash===e:!!await this.getNextHash(e)}async isMainChain(e){var t;return!!e.isGenesis()||e.hash===this.state.tip||((t=this.getCache(e.height))?e.hash===t.hash:!!await this.getNextHash(e.hash))}getEntries(){return this.db.values({gte:d.e(c.ZERO_HASH),lte:d.e(c.MAX_HASH),parse:e=>b.fromRaw(e)})}getTimestampHashes(e,t){return this.db.keys({gte:d.th(t,c.ZERO_HASH),lte:d.th(e,c.MAX_HASH),parse:d.thh})}getContracts(){return this.db.values({gte:d.tx(c.NULL_HASH),lte:d.tx(c.HIGH_HASH),parse:e=>s.parseJson(e.toString())})}getCps(){return this.db.values({gte:d.CP(c.ZERO_CID,"hex"),lte:d.CP(c.MAX_CID,"hex"),parse:e=>U.fromRaw(e)})}async setCp(e){var t=this.db.batch();t.put(d.CP(e.cid),e.toRaw()),await t.write()}async delCp(e){var t=this.db.batch();t.del(d.CP(e)),await t.write()}getScs(){return this.db.values({gte:d.SC(c.ZERO_CID,"hex"),lte:d.SC(c.MAX_CID,"hex"),parse:e=>z.fromRaw(e)})}async setSc(e){var t=this.db.batch();t.put(d.SC(e.id),e.toRaw()),await t.write()}async delSc(e){var t=this.db.batch();t.del(d.SC(e)),await t.write()}async getSCList(e){return r(Array.isArray(e)),this.scList.query(e)}async delVp(e){var t=this.db.batch();t.del(d.VP(e.pid)),await t.write()}async setVp(e){var t=this.db.batch();t.put(d.VP(e.pid),e.toRaw()),await t.write()}async getVp(e){return(e=await this.db.get(d.VP(e)))?V.fromRaw(e):null}loadVpList(){return this.db.values({gte:d.VP(c.ZERO_CID,"hex"),lte:d.VP(c.MAX_CID,"hex"),parse:e=>V.fromRaw(e)})}async delHtlc(e){var t;e.id&&(this.htlcList.delete(e.id),this.htlcList.delAccount(e),(t=this.db.batch()).del(d.VH(e.shash,e.sidx)),await t.write())}async setSuggest(e){e=new W(e);var t=(this.htlcList.set(e.id,e),this.db.batch());t.put(d.VH(e.shash,e.sidx),e.toRaw()),await t.write()}async setAssent(e){e=new W(e);var t=(this.htlcList.set(e.id,e),this.db.batch());t.put(d.VH(e.shash,e.sidx),e.toRaw()),await t.write()}async loadHtlcList(){return this.db.values({gte:d.VH(c.ZERO_CID,0),lte:d.VH(c.MAX_CID,4294967295),parse:e=>W.fromRaw(e)})}async delErAbolish(e){var t=this.db.batch();t.del(d.ERA(e.erid)),await t.write()}async setErAbolish(e){var t=this.db.batch();t.put(d.ERA(e.erid),e.toRaw()),await t.write()}async getErAbolish(e){return(e=await this.db.get(d.ERA(e)))?J.fromRaw(e):null}loadErAbolishList(){return this.db.values({gte:d.ERA(c.ZERO_CID),lte:d.ERA(c.MAX_CID),parse:e=>J.fromRaw(e)})}async delCpEn(e){var t=this.db.batch();t.del(d.EN2(e.to,e.from)),await t.write()}async setCpEn(e){var t=this.db.batch();t.put(d.EN2(e.to,e.from),e.toRaw()),await t.write()}loadCpEnList(){return this.db.values({gte:d.EN2(c.ZERO_CID,c.ZERO_CID,"ascii"),lte:d.EN2(c.MAX_CID,c.MAX_CID,"ascii"),parse:e=>Q.fromRaw(e)})}queryCpEnListByCid(e){return this.db.values({gte:d.EN2(e,c.ZERO_CID,"ascii"),lte:d.EN2(e,c.MAX_CID,"ascii"),parse:e=>Q.fromRaw(e)})}async delEr(e){var t=this.db.batch();t.del(d.ER(e.erid)),t.del(d.ERR(e.witness,e.erid,e.txid)),await t.write()}async setEr(e,t){var i=this.db.batch(),r=d.ERR(e.witness,e.erid,e.txid);i.put(r,e.toRaw()),i.put(d.ER(e.erid),r),await i.write()}async getEr(e){var t;return(e=await this.db.get(d.ER(e)))&&([,,t]=d.ERRR(e),e=await this.db.get(e))?((e=G.fromRaw(e)).txid=t,e):null}async byPubkey(e,t,i=!1){if(!(e=await this.db.values({gte:d.ERR(e,c.NULL_HASH,c.NULL_HASH),lte:d.ERR(e,c.HIGH_HASH,c.HIGH_HASH),parse:e=>G.fromRaw(e)}))||0==e.length)return[];let r=null;if(i){var s,n=new Map;for(s of e){var a,o=await this.caVerifyObj(s);o&&((a=n.get(o.source.cluster))?o.startHeight>a.startHeight&&n.set(s.source.cluster,o):n.set(o.source.cluster,o))}r=n.values()}else r=e;if(!r||0==r.length)return[];var h,u=new y;for(h of r)u.set(h.erid,h);return u.query(t)}async caVerify(e){return this.caVerifyObj(await this.erList.getEr(e))}async caVerifyObj(e){var t;return e?(e.verify=!1,e.validHeight<=this.chain.height||(t=await this.erAbList.getErAb(e.erid))&&t.abolishHeight<this.chain.height||(t=ae.fromPublic(Buffer.from(e.witness,"hex"),this.network.type),e.verifying(t)&&(e.verify=!0,0<(t=this.cpList.query([["pubKey",e.witness]])).list.length)&&(e.cpid=t.list[0].cid)),e):null}async saveVote(e,t){var i=this.db.batch();i.put(d.VM(e),Buffer.from(JSON.stringify(t))),await i.write()}async saveOracle(e,t){var i=this.db.batch();i.put(d.VO(e),Buffer.from(JSON.stringify(t))),await i.write()}getTips(){return this.db.keys({gte:d.p(c.ZERO_HASH),lte:d.p(c.MAX_HASH),parse:d.pp})}async readCoin(e){var t,i,r,s;return this.options.spv?null:(({hash:t,index:i}=e),e=e.toKey(),r=this.state,(s=this.coinCache.get(e))?k.fromRaw(s):(s=await this.db.get(d.c(t,i)))?(r===this.state&&this.coinCache.set(e,s),k.fromRaw(s)):null)}async getCoin(e,t){return e=new g(e,t),(t=await this.readCoin(e))?t.toCoin(e):null}async hasCoins(e){for(let i=0;i<e.outputs.length;i++){var t=d.c(e.hash(),i);if(await this.db.has(t))return!0}return!1}async getCoinView(e){var t,i=new u;for({prevout:t}of e.inputs){var r=await this.readCoin(t);r&&i.addEntry(t,r)}return i}async getSpentView(e){var t,i=await this.getCoinView(e);for({prevout:t}of e.inputs)if(!i.hasEntry(t)){var r,{hash:r,index:s}=t;if(r=await this.getMeta(r)){const{tx:e,height:t,time:n}=r;s<e.outputs.length&&i.addIndex(e,s,t,n)}}return i}async getUndoCoins(e){return(e=await this.db.get(d.u(e)))?l.fromRaw(e):new l}async getBlock(e){return(e=await this.getRawBlock(e))?m.fromRaw(e):null}async getRawBlock(e){return!this.options.spv&&(e=await this.getHash(e))?this.db.get(d.b(e)):null}async getBlockView(e){var t=new u,i=await this.getUndoCoins(e.hash());if(!i.isEmpty()){for(let r=e.txs.length-1;0<r;r--){var s=e.txs[r];for(let e=s.inputs.length-1;0<=e;e--){var n=s.inputs[e];i.apply(t,n.prevout)}}r(i.isEmpty(),"Undo coins data inconsistency.")}return t}async getMeta(e){return this.options.indexTX&&(e=await this.db.get(d.t(e)))?w.fromRaw(e):null}async getTX(e){return(e=await this.getMeta(e))?e.tx:null}async getExtendTX(e){return(e=await this.getMeta(e))||null}async hasTX(e){return!!this.options.indexTX&&this.db.has(d.t(e))}async getCoinsByAddress(e){if(!this.options.indexAddress)return[];var t=[];for(const o of e=Array.isArray(e)?e:[e]){var i,s,n=v.getHash(o);for([i,s]of await this.db.keys({gte:d.C(n,c.ZERO_HASH,0),lte:d.C(n,c.MAX_HASH,4294967295),parse:d.Cc})){var a=await this.getCoin(i,s);r(a),t.push(a)}}return t}async getHashesByAddress(e,t="both"){if(Array.isArray(e)||(e=[e]),!this.options.indexTX||!this.options.indexAddress)return[];const i=Object.create(null);for(const s of e){var r=v.getHash(s);let e,n;n="input"==t?(e=d.TI(r,c.ZERO_HASH),d.TI(r,c.MAX_HASH)):"output"==t?(e=d.TO(r,c.ZERO_HASH),d.TO(r,c.MAX_HASH)):(e=d.T(r,c.ZERO_HASH),d.T(r,c.MAX_HASH)),await this.db.keys({gte:e,lte:n,parse:e=>{e=d.Tt(e),i[e]=!0}})}return Object.keys(i)}async getTXByAddress(e){var t=[];for(const i of await this.getMetaByAddress(e))t.push(i.tx);return t}async getVpByOid(e){return{list:[],count:0}}async getVpByAddress(e,t="both"){t=await this.getMetaByAddress(e,t);var i=new Map;for(const e of t)for(let t=0;t<e.tx.outputs.length;t++){var r=e.tx.outputs[t],s=r.getReturnData([ie.OP_PROPCREATE,ie.OP_PROPEXCHANGE]);s&&(s.current={height:e.height,hash:e.tx.rhash("hex"),index:t,address:r.getAddress().toString()},!(r=i.get(s.pid))||r.current.height<s.current.height)&&i.set(s.pid,s)}let n=[];return i.forEach(t=>{t.current.address==e&&n.push(t)}),{list:n,count:n.length}}async getMetaByAddress(e,t="both"){if(!this.options.indexTX||!this.options.indexAddress)return[];Array.isArray(e)||(e=[e]);var i=[];for(const n of await this.getHashesByAddress(e,t)){var s=await this.getMeta(n);r(s),i.push(s)}return i}async scan(e,t,i){"number"==typeof(e=null==e?this.network.genesis.hash:e)?this.logger.info("Scanning from height %d.",e):this.logger.info("Scanning from block %s.",s.revHex(e));let r=await this.getEntry(e);if(r){if(!await this.isMainChain(r))throw new Error("Cannot rescan an alternate chain.");let e=0;for(;r;){var n=await this.getBlock(r.hash),a=[];if(e++,n){this.logger.info("Scanning block %s (%d).",r.rhash(),r.height);for(let e=0;e<n.txs.length;e++){var o=n.txs[e];let i=!1;for(let e=0;e<o.outputs.length;e++){var c=o.outputs[e].getHash();c&&(0==r.height||t&&t.test(c))&&(c=g.fromTX(o,e),t&&t.add(c.toRaw()),i=!0)}if(!t||i)a.push(o);else if(0!==e)for(var{prevout:h}of o.inputs)if(!t||t.test(h.toRaw())){a.push(o);break}}}else if(!this.options.spv&&!this.options.prune)throw new Error("Block not found.");await i(r,a),r=await this.getNext(r)}this.logger.info("Finished scanning %d blocks.",e)}}async save(e,t,i){this.start();try{await this._save(e,t,i)}catch(e){throw this.drop(),e}await this.commit()}async _save(e,t,i){var r=t.hash();this.put(d.h(r),S(e.height)),this.put(d.th(t.time,r),null),this.put(d.e(r),e.toRaw()),this.cacheHash.push(e.hash,e),this.del(d.p(e.prevBlock)),this.put(d.p(r),null),this.saveUpdates(),i?(e.isGenesis()||this.put(d.n(e.prevBlock),r),this.put(d.H(e.height),r),this.cacheHeight.push(e.height,e),await this.saveBlock(e,t,i),this.put(d.R,this.pending.commit(r))):await this.saveBlock(e,t)}async reconnect(e,t,i){this.start();try{await this._reconnect(e,t,i)}catch(e){throw this.drop(),e}await this.commit()}async _reconnect(e,t,i){var s=t.hash();r(!e.isGenesis()),this.put(d.n(e.prevBlock),s),this.put(d.H(e.height),s),this.cacheHeight.push(e.height,e),this.cacheHash.push(e.hash,e),this.saveUpdates(),await this.connectBlock(e,t,i),this.put(d.R,this.pending.commit(s))}async disconnect(e,t){let i;this.start();try{i=await this._disconnect(e,t)}catch(e){throw this.drop(),e}return await this.commit(),i}async _disconnect(e,t){return this.del(d.n(e.prevBlock)),this.del(d.H(e.height)),this.cacheHeight.unpush(e.height),this.saveUpdates(),t=await this.disconnectBlock(e,t),this.put(d.R,this.pending.commit(e.prevBlock)),t}saveUpdates(){var e=this.stateCache.updates;if(0!==e.length){this.logger.info("Saving %d state cache updates.",e.length);for(const r of e){var{bit:t,hash:i}=r;this.put(d.v(t,i),r.toRaw())}}}async reset(e){var t=await this.getEntry(e);if(!t)throw new Error("Block not found.");if(!await this.isMainChain(t))throw new Error("Cannot reset on alternate chain.");if(this.options.prune)throw new Error("Cannot reset when pruned.");await this.removeChains();let i=await this.getTip();for(r(i),this.logger.debug("Resetting main chain to: %s",t.rhash());;){if(this.start(),i.hash===t.hash){this.put(d.R,this.pending.commit(i.hash)),await this.commit();break}r(!i.isGenesis()),this.del(d.p(i.hash)),this.put(d.p(i.prevBlock),null),this.del(d.H(i.height)),this.del(d.h(i.hash)),this.del(d.th(i.time,i.hash)),this.del(d.e(i.hash)),this.del(d.n(i.prevBlock));try{await this.removeBlock(i)}catch(e){throw this.drop(),e}this.cacheHeight.remove(i.height),this.cacheHash.remove(i.hash),i=await this.getPrevious(i),r(i)}return i}async removeChains(){var e=await this.getTips();this.start();try{for(const t of e)await this._removeChain(t)}catch(e){throw this.drop(),e}await this.commit()}async _removeChain(e){let t=await this.getEntryByHash(e);if(!t)throw new Error("Alternate chain tip not found.");for(this.logger.debug("Removing alternate chain: %s.",t.rhash());!await this.isMainChain(t);)r(!t.isGenesis()),this.del(d.p(t.hash)),this.del(d.h(t.hash)),this.del(d.th(t.time,t.hash)),this.del(d.e(t.hash)),this.del(d.b(t.hash)),this.cacheHash.unpush(t.hash),t=await this.getPrevious(t),r(t)}async saveBlock(e,t,i){var r=t.hash();this.options.spv||(this.put(d.b(r),t.toRaw()),i&&await this.connectBlock(e,t,i))}async removeBlock(e){if(this.options.spv)return new u;var t=await this.getBlock(e.hash);if(!t)throw new Error("Block not found.");this.del(d.b(t.hash()));var i=await this.disconnectBlock(e,t);return this.put(d.R,this.pending.commit(e.prevBlock)),await this.commit(),await this.chain.fire("block.disconnect",e,t,i),i}saveView(e){for(var[t,i]of e.map)for(var[r,s]of i.outputs){var n;s.spent?(this.del(d.c(t,r)),this.node.transmit("utxo.remove",{oper:"utxo.remove",hash:t,index:r,address:s.output.getAddress()?s.output.getAddress().toString():null,color:s.output.isColored,value:s.output.value,height:s.height}),this.coinCache.unpush(t+r)):(this.del(d.s(t,r)),n=s.toRaw(),this.put(d.c(t,r),n),this.node.transmit("utxo.add",{oper:"utxo.add",hash:t,index:r,color:s.output.isColored,address:s.output.getAddress()?s.output.getAddress().toString():null,value:s.output.value,height:s.height}),this.coinCache.push(t+r,n))}}async getSpender(e,t){return(e=await this.db.get(d.s(e,t)))?I.DecodeSpenderValue(e):null}async connectBlock(e,t,i){if(!this.options.spv){var r=t.hash("hex");this.pending.connect(t);for(let u=0;u<t.txs.length;u++){var s=t.txs[u],n=s.hash("hex");if(!e.isGenesis()&&0<u)for(let e=0;e<s.inputs.length;e++){var a=s.inputs[e].prevout,o=i.getOutput(a);this.pending.spend(o);try{await this.emitCoinSpent(s.inputs[e],o,s,t)}catch(e){this.logger.error("connect block:",e.message)}this.put(d.s(a.hash,a.index),I.EncodeSpenderValue(n,e,t.height,r))}for(const e of s.outputs)e.script.isUnspendable()||this.pending.add(e);try{var c=await C.FactoryOfContract({env:this,block:t,tx:s,coins:i});if(!e.isGenesis()){var h=await c.verify();if(1!=h)throw new oe(s,_(h),"bad-contract-verify",100)}await c.isBlockFinal()==E.Final&&await c.confirm()}catch(e){this.logger.error("TX(%s) Smart Contract Execute Error: %s",s.txid(),e.message)}this.indexTX(s,i,e,u)}this.saveView(i),i.undo.isEmpty()||this.put(d.u(r),i.undo.commit()),await this.voteMgr.saveVote(),await this.propList.save(),this.scList.deletes([["indate","<",this.chain.height]]),await this.pruneBlock(e)}}async disconnectBlock(e,t){var i=new u;if(!this.options.spv){var s=t.hash(),n=await this.getUndoCoins(s);this.pending.disconnect(t);for(let r=t.txs.length-1;0<=r;r--){var a=t.txs[r];if(0<r)for(let e=a.inputs.length-1;0<=e;e--){var o=a.inputs[e].prevout;n.apply(i,o),this.pending.add(i.getOutput(o))}i.removeTX(a,e.height,e.time);for(let e=a.outputs.length-1;0<=e;e--){var c=a.outputs[e];c.script.isUnspendable()||this.pending.spend(c)}try{await(await C.FactoryOfContract({env:this,block:t,tx:a})).unconfirm()}catch(s){this.logger.error("TX(%s) Smart Contract Unconfirm Error: %s",a.txid(),s.message)}await this.unindexTX(a,i)}r(n.isEmpty(),"Undo coins data inconsistency."),this.saveView(i),this.del(d.u(s)),await this.voteMgr.saveVote(),await this.propList.save()}return i}async pruneBlock(e){this.options.spv||!this.options.prune||(e=e.height-this.network.block.keepBlocks)<=this.network.block.pruneAfterHeight||(e=await this.getHash(e))&&(this.del(d.b(e)),this.del(d.u(e)))}saveFlags(){var e=he.fromOptions(this.options),t=this.db.batch();return t.put(d.O,e.toRaw()),t.write()}indexTX(e,t,i,r){var s=e.hash();if(this.options.indexTX&&(r=w.fromTX(e,i,r),this.put(d.t(s),r.toRaw()),this.options.indexAddress)){for(const t of e.getHashes())this.put(d.T(t,s),null);for(const t of e.getOutputHashes())this.put(d.TO(t,s),null);for(const i of e.getInputHashes(t))this.put(d.TI(i,s),null)}if(this.options.indexAddress){if(!i.isGenesis()&&!e.isCoinbase())for(var{prevout:n}of e.inputs){var a=t.getOutput(n).getHash();a&&this.del(d.C(a,n.hash,n.index))}for(let t=0;t<e.outputs.length;t++){var o=e.outputs[t].getHash();o&&this.put(d.C(o,s,t),null)}}}async unindexTX(e,t){var i,r=e.hash();if(this.options.indexTX&&(this.del(d.t(r)),this.options.indexAddress))for(i of e.getHashes(t))this.del(d.T(i,r)),this.del(d.TI(i,r)),this.del(d.TO(i,r));if(this.options.indexAddress){if(!e.isCoinbase())for(var{prevout:s}of e.inputs){var n=t.getOutput(s).getHash();n&&this.put(d.C(n,s.hash,s.index),null)}for(let t=0;t<e.outputs.length;t++){var a=e.outputs[t].getHash();a&&this.del(d.C(a,r,t))}}}async readHostList(){return this.db.get(d.HL)}async writeHostList(e){var t=this.db.batch();return t.put(d.HL,e),t.write()}async emitCoinSpent(e,t,i,r){(i={env:this,block:r,tx:i,hash:e.prevout.hash,i:e.prevout.index,height:r.height,output:t,type:t.getReturnType(),data:t.getReturnData(re)}).data&&await te(i).spent(e)}}function he(e){if(!(this instanceof he))return new he(e);this.network=h.primary,this.spv=!1,this.witness=!0,this.prune=!1,this.indexTX=!1,this.indexAddress=!1,e&&this.fromOptions(e)}ce.layout=d,he.prototype.fromOptions=function(e){return this.network=h.get(e.network),null!=e.spv&&(r("boolean"==typeof e.spv),this.spv=e.spv),null!=e.prune&&(r("boolean"==typeof e.prune),this.prune=e.prune),null!=e.indexTX&&(r("boolean"==typeof e.indexTX),this.indexTX=e.indexTX),null!=e.indexAddress&&(r("boolean"==typeof e.indexAddress),this.indexAddress=e.indexAddress),this},he.fromOptions=function(e){return(new he).fromOptions(e)},he.prototype.toRaw=function(){var e=new a(12);let t=0;return this.spv&&(t|=1),this.witness&&(t|=2),this.prune&&(t|=4),this.indexTX&&(t|=8),this.indexAddress&&(t|=16),e.writeU32(this.network.magic),e.writeU32(t),e.writeU32(0),e.render()},he.prototype.fromRaw=function(e){return e=new n(e),this.network=h.fromMagic(e.readU32()),e=e.readU32(),this.spv=0!=(1&e),this.witness=0!=(2&e),this.prune=0!=(4&e),this.indexTX=0!=(8&e),this.indexAddress=0!=(16&e),this},he.fromRaw=function(e){return(new he).fromRaw(e)};class ue{constructor(){this.tip=c.NULL_HASH,this.tx=0,this.coin=0,this.value=0,this.committed=!1}rhash(){return s.revHex(this.tip)}clone(){var e=new ue;return e.tip=this.tip,e.tx=this.tx,e.coin=this.coin,e.value=this.value,e}connect(e){this.tx+=e.txs.length}disconnect(e){this.tx-=e.txs.length}add(e){this.coin++,this.value+=e.value}spend(e){this.coin--,this.value-=e.value}commit(e){return"string"!=typeof e&&(e=e.toString("hex")),this.tip=e,this.committed=!0,this.toRaw()}toRaw(){var e=new a(56);return e.writeHash(this.tip),e.writeU64(this.tx),e.writeU64(this.coin),e.writeU64(this.value),e.render()}static fromRaw(e){var t=new ue;e=new n(e);return t.tip=e.readHash("hex"),t.tx=e.readU64(),t.coin=e.readU64(),t.value=e.readU64(),t}}function le(e){this.network=e,this.bits=[],this.updates=[],this._init()}function pe(e,t,i){this.bit=e,this.hash=t,this.state=i}le.prototype._init=function(){for(let e=0;e<32;e++)this.bits.push(null);for(var{bit:e}of this.network.deploys)r(!this.bits[e]),this.bits[e]=new Map},le.prototype.set=function(e,t,i){var s=this.bits[e];r(s),s.get(t.hash)!==i&&(s.set(t.hash,i),this.updates.push(new pe(e,t.hash,i)))},le.prototype.get=function(e,t){return e=this.bits[e],r(e),null==(e=e.get(t.hash))?-1:e},le.prototype.commit=function(){this.updates.length=0},le.prototype.drop=function(){for(var{bit:e,hash:t}of this.updates)e=this.bits[e],r(e),e.delete(t);this.updates.length=0},le.prototype.insert=function(e,t,i){e=this.bits[e],r(e),e.set(t,i)},pe.prototype.toRaw=function(){return x(this.state)},e.exports=ce},function(e,t,i){"use strict";
880
+ */const r=i(0),s=i(2),n=i(1),a=i(4),o=i(33),c=i(3),h=i(15),u=i(60),l=i(247),p=i(167),d=i(328),f=i(63),m=i(75),g=i(46),y=i(31),v=i(13),b=i(329),w=i(330),k=i(145),x=c.U8,S=c.U32,{getVerifyMsg:_,BlockFinalType:E,ContractEnvType:R,ContractType:A}=i(5);var O=i(71);const C=i(42),I=i(20),j=i(68),P=i(113),T=i(28),B=i(6),N=i(143),M=i(7),L=i(159),F=i(151),z=F.scItem,H=i(339),D=i(313),U=D.cpItem,q=i(131),V=q.vpItem,K=i(340),W=K.vpItem,$=i(728),X=i(153),G=X.ErItem,Y=i(154),J=Y.ErAbolishItem,Z=i(228),Q=Z.EnchancementItem;i(54);const ee=i(341),te=i(117),{opcodes:ie,nestingCodes:re}=i(19),se=i(122),ne=i(26),ae=i(38),oe=i(37).VerifyError;class ce extends O{constructor(e){super(),this.chain=e,this.eid="chaindb",this.fromOptions(e.options),this.db=p(this.options),this.stateCache=new le(this.network),this.state=new ue,this.pending=null,this.current=null,this.coinCache=new f(this.options.coinCache),this.cacheHash=new f(this.options.entryCache),this.cacheHeight=new f(this.options.entryCache),this.autoTaskMgr=new L(this),this.propList=new q(this),this.htlcList=new K(this),this.$voteMgr=new $(this),this.transactionList=new H(this),this.cpList=new D(this),this.scList=new F(this),this.erList=new X(this),this.erAbList=new Y(this),this.enCpList=new Z(this,{type:"cp"}),this.middleHashChain=new Set}get cpMemList(){return this.node.mempool.cpMemList}get hmacConnection(){return this.node.specialCp.content()}get voteMgr(){return this.$voteMgr}get mode(){return R.Block}fromOptions(e){this.options=e,this.node=e.node,this.network=e.network,this.logger=e.logger.context("chaindb")}get curHeight(){return this.chain.height}get finder(){return this.node.getTXFromAll?this.node.getTXFromAll.bind(this.node):()=>{}}get tidCreator(){return d.tx}rpcExecute(){return this.node.rpc.execute.apply(this.node.rpc,arguments)}createGenesisCoinbase(e,t){var i,r=new I,s=new P,n=((i=((i=(s.script.pushInt(0),s.script.pushData(c.ZERO_HASH160),Buffer.allocUnsafe(4))).writeUInt32LE(0,0,!0),s.script.pushData(i),s.script.pushData(c.ZERO_U64),s.script.compile(),s.witness.push(c.ZERO_HASH),s.witness.compile(),r.inputs.push(s),new T)).script.createScript(c.ZERO_HASH160),i.value=M.ORIGINAL,r.outputs.push(i),c.ZERO_HASH),a=[],[a,,]=(a.push(c.ZERO_HASH),N.createRoot(a));a=B.root256(a,n);return(n=new T).script.fromCommitment(a),r.outputs.push(n),s.script.setData(1,t),s.script.compile(),i.script.fromAddress(e.addresses[0]),r}dummyInput(){return P.fromOutpoint(new g(c.NULL_HASH,0))}createGenesisBlock(e){if(!e.addresses||e.addresses.length<11)throw new Error("addresses length expect 11.");let t=e.flags;t=t||Buffer.from("In the name of Athena: Of the user, By the user, and For the user.","ascii");var i=this.createGenesisCoinbase(e,t),r=this.network.genesisId,n=new j,[n,,]=(n.addInput(this.dummyInput()),n.cpRegister(e.addresses[0],M.COIN,{cid:r,oper:A.cpRegister,name:"ATHENA",ip:"*",pubAddress:"",pubKey:"",signMethod:""}),n.commit()),a=new j;a.addInput(this.dummyInput());for(let t=0;t<10;t++)for(let i=0;i<10;i++){var o={oper:A.propCreate,pid:""+this.network.tokenFix+s.sprintf("%04d",10*t+i+1),oid:this.network.tokenFix+"0000",cid:r,gold:M.COIN};a.propCreate(e.addresses[t+1],o)}var[h,,]=a.commit(),u=new m({version:e.version,prevBlock:c.NULL_HASH,merkleRoot:i.hash("hex"),time:e.time,bits:e.bits,nonce:e.nonce,height:0});return u.txs.push(i),u.txs.push(n),u.txs.push(h),u.refresh(!0),u.merkleRoot=u.createMerkleRoot("hex"),u}async open(e){this.logger.info("Opening ChainDB..."),await this.db.open();var t=await this.db.checkVersion(d,3);if(i=await this.getState()){var i;if(await this.verifyFlags(i),await this.verifyDeployments(),this.stateCache=await this.getStateCache(),this.state=i,!(i=await this.getEntry(0)))throw new Error("genesis block not found.");this.network.genesis.hash=i.hash,this.network.genesis.merkleRoot=i.merkleRoot,this.logger.info("ChainDB successfully loaded.")}else e&&(i=await this.getGenesisParams(e),this.node.miner&&(this.node.miner.addresses=[new v(i.coinbaseAddress)]),this.node.config)&&this.node.config.changeParams(i),await this.saveFlags(),await this.saveDeployments(),await this.saveGenesis(),this.logger.info("ChainDB successfully initialized.");return this.logger.info("Chain State: hash=%s tx=%d coin=%d value=%s.",this.state.rhash(),this.state.tx,this.state.coin,o.btc(this.state.value)),t}async getGenesisParams(e){if(e.isGenesisParams)return e;e=e||{};var t=new ee({name:"wallet-test",db:"memory",resolution:!1,verify:!1}),i=(t=(e.getMnemonicFromMemory=!0,await t.open(e),await t.get("primary")),[]);for(const s of await t.getPaths("default")){var r=s.toAddress();0==s.branch&&i.push(""+r.toString(e.network))}var s,n,a,o,h={};return h[e.network+"Addresses"]=i.reduce((e,t)=>e+(""==e?t:","+t),""),h.coinbaseAddress=i[1],h.notifyAddress=t.notifyAddress,this.node.config.notifyAddress=h.notifyAddress,await se.writeFile(h,e.network+"-genesis.params"),e.isGenesisEncrypt||(s=B.hash256(Buffer.from(t.master.mnemonic.toSeed().toString("hex"))),n=ne.publicKeyCreate(s,!0),a=v.fromWitnessPubkeyhash(B.hash160(n),this.network.type).toString(),o=B.hash256(Buffer.concat([Buffer.from("root"),t.master.key.privateKey])),t={body:{language:t.master.mnemonic.language,phrase:t.master.mnemonic.getPhrase(),passphrase:t.master.mnemonic.passphrase,awardAddress:h.coinbaseAddress,notifyAddress:t.notifyAddress,alliancePrivateKey:o.toString("hex"),allianceName:"root",allianceNodeId:0,allianceNodeToken:{prv:s.toString("hex"),pub:n.toString("hex"),address:a}},password:e.password||c.MNEMONIC_SALT,network:e.network,file:e.network+"-genesis.keystore"},await se.writeEncryptFile(t)),h}close(){return this.db.close()}start(){return r(!this.current),r(!this.pending),this.current=this.db.batch(),this.pending=this.state.clone(),this.coinCache.start(),this.cacheHash.start(),this.cacheHeight.start(),this.current}put(e,t){r(this.current),this.current.put(e,t)}del(e){r(this.current),this.current.del(e)}batch(){return r(this.current),this.current}drop(){var e=this.current;r(this.current),r(this.pending),this.current=null,this.pending=null,this.coinCache.drop(),this.cacheHash.drop(),this.cacheHeight.drop(),this.stateCache.drop(),e.clear()}async commit(){r(this.current),r(this.pending);try{await this.current.write()}catch(e){throw this.current=null,this.pending=null,this.coinCache.drop(),this.cacheHash.drop(),this.cacheHeight.drop(),e}this.pending.committed&&(this.state=this.pending),this.current=null,this.pending=null,this.coinCache.commit(),this.cacheHash.commit(),this.cacheHeight.commit(),this.stateCache.commit()}hasCache(e){return("number"==typeof e?this.cacheHeight:(r("string"==typeof e),this.cacheHash)).has(e)}getCache(e){return("number"==typeof e?this.cacheHeight:(r("string"==typeof e),this.cacheHash)).get(e)}async getHeight(e){var t;return"number"==typeof e?e:(r("string"==typeof e),e===c.NULL_HASH?-1:(t=this.cacheHash.get(e))?t.height:(t=await this.db.get(d.h(e)))?t.readUInt32LE(0,!0):-1)}async getHash(e){var t;return"string"==typeof e?e:(r("number"==typeof e),e<0?null:(t=this.cacheHeight.get(e))?t.hash:(t=await this.db.get(d.H(e)))?t.toString("hex"):null)}async getEntryByHeight(e){var t;return r("number"==typeof e),e<0?null:this.cacheHeight.get(e)||((e=await this.db.get(d.H(e)))&&(e=e.toString("hex"),t=this.state,e=await this.getEntryByHash(e))?(this.state===t&&this.cacheHeight.set(e.height,e),e):null)}async getEntryByHash(e){return r("string"==typeof e),e===c.NULL_HASH?null:this.cacheHash.get(e)||((e=await this.db.get(d.e(e)))?(e=b.fromRaw(e),this.cacheHash.set(e.hash,e),e):null)}getEntry(e){return"number"==typeof e?this.getEntryByHeight(e):this.getEntryByHash(e)}async hasEntry(e){return-1!==await this.getHeight(e)}async getAncestor(e,t){if(t<0)return null;if(r(0<=t),r(t<=e.height),await this.isMainChain(e))return this.getEntryByHeight(t);for(;e.height!==t;){e=this.getPrevCache(e)||await this.getPrevious(e),r(e)}return e}getPrevious(e){return this.getEntryByHash(e.prevBlock)}getPrevCache(e){return this.cacheHash.get(e.prevBlock)||null}async getNext(e){return(e=await this.getNextHash(e.hash))?this.getEntryByHash(e):null}async getNextEntry(e){var t=await this.getEntryByHeight(e.height+1);return t&&t.prevBlock===e.hash?t:null}getTip(){return this.getEntryByHash(this.state.tip)}async getState(){var e=await this.db.get(d.R);return e?ue.fromRaw(e):null}async saveGenesis(){let e=[];e=(this.node.config?this.node.config[this.network.type+"Addresses"]:this.network.genesis.addresses).split(",");var t=this.createGenesisBlock({version:this.network.genesis.version,time:this.network.genesis.time,bits:this.network.genesis.bits,nonce:this.network.genesis.nonce,addresses:e}),i=(this.network.genesis.hash=t.hash("hex"),this.network.genesis.merkleRoot=t.merkleRoot,b.fromBlock(t)),r=(this.logger.info("Writing genesis block to ChainDB."),new u);for(let e=0;e<t.txs.length;e++)r.addTX(t.txs[e],t.height,t.time);await this.save(i,t,r)}async getFlags(){var e=await this.db.get(d.O);return e?he.fromRaw(e):null}async verifyFlags(e){var t=this.options,i=await this.getFlags();let r=!1,s=!1;if(!i)throw new Error("No flags found.");if(t.network!==i.network)throw new Error("Network mismatch for chain.");if(t.spv&&!i.spv)throw new Error("Cannot retroactively enable SPV.");if(!t.spv&&i.spv)throw new Error("Cannot retroactively disable SPV.");if(!i.witness){if(!t.forceFlags)throw new Error("Cannot retroactively enable witness.");r=!0}if(t.prune&&!i.prune){if(!t.forceFlags)throw new Error("Cannot retroactively prune.");s=!0}if(!t.prune&&i.prune)throw new Error("Cannot retroactively unprune.");if(t.indexTX&&!i.indexTX)throw new Error("Cannot retroactively enable TX indexing.");if(!t.indexTX&&i.indexTX)throw new Error("Cannot retroactively disable TX indexing.");if(t.indexAddress&&!i.indexAddress)throw new Error("Cannot retroactively enable address indexing.");if(!t.indexAddress&&i.indexAddress)throw new Error("Cannot retroactively disable address indexing.");r&&(await this.logger.info("Rewriting chain flags."),await this.saveFlags()),s&&(await this.logger.info("Retroactively pruning chain."),await this.prune(e.tip))}async getStateCache(){var e=new le(this.network);for(const s of await this.db.range({gte:d.v(0,c.ZERO_HASH),lte:d.v(255,c.MAX_HASH),values:!0})){var[t,i]=d.vv(s.key),r=s.value[0];e.insert(t,i,r)}return e}saveDeployments(){var e=this.db.batch();return this.writeDeployments(e),e.write()}async batchPut(e,t){var i=this.db.batch();i.put(e,t),await i.write()}async batchDel(e){var t=this.db.batch();t.del(e),await t.write()}writeDeployments(e){var t=new a(1+17*this.network.deploys.length);t.writeU8(this.network.deploys.length);for(const e of this.network.deploys)t.writeU8(e.bit),t.writeU32(e.startTime),t.writeU32(e.timeout),t.writeI32(e.threshold),t.writeI32(e.window);e.put(d.V,t.render())}async checkDeployments(){var e=await this.db.get(d.V),t=(r(e,"No deployment table found."),new n(e)),i=t.readU8(),s=[];for(let e=0;e<i;e++){var a=t.readU8(),o=t.readU32(),c=t.readU32(),h=t.readI32(),u=t.readI32(),l=this.network.byBit(a);l&&o===l.startTime&&c===l.timeout&&h===l.threshold&&u===l.window||s.push(a)}return s}async verifyDeployments(){let e;try{e=await this.checkDeployments()}catch(t){if("EncodingError"!==t.type)throw t;e=[];for(let t=0;t<32;t++)e.push(t)}if(0===e.length)return!0;var t=this.db.batch();for(const i of e)this.logger.warning("Versionbit deployment params modified."),this.logger.warning("Invalidating cache for bit %d.",i),await this.invalidateCache(i,t);return this.writeDeployments(t),await t.write(),!1}async invalidateCache(e,t){for(const i of await this.db.keys({gte:d.v(e,c.ZERO_HASH),lte:d.v(e,c.MAX_HASH)}))t.del(i)}async prune(){var e=this.options,t=this.network.block.keepBlocks,i=this.network.block.pruneAfterHeight;if((await this.getFlags()).prune)throw new Error("Chain is already pruned.");var s=await this.getHeight(this.state.tip);if(s<=i+t)return!1;i+=1;var n=s-t,a=this.db.batch();for(let e=i;e<=n;e++){var o=await this.getHash(e);if(!o)throw new Error(`Cannot find hash for ${e}.`);a.del(d.b(o)),a.del(d.u(o))}try{e.prune=!0;const t=he.fromOptions(e);r(t.prune),a.put(d.O,t.toRaw()),await a.write()}catch(t){throw e.prune=!1,t}return await this.db.compactRange(),!0}async getNextHash(e){return(e=await this.db.get(d.n(e)))?e.toString("hex"):null}async isMainHash(e){if(r("string"==typeof e),e===c.NULL_HASH)return!1;if(e===this.network.genesis.hash)return!0;if(e===this.state.tip)return!0;var t=this.cacheHash.get(e);return t&&(t=this.cacheHeight.get(t.height))?t.hash===e:!!await this.getNextHash(e)}async isMainChain(e){var t;return!!e.isGenesis()||e.hash===this.state.tip||((t=this.getCache(e.height))?e.hash===t.hash:!!await this.getNextHash(e.hash))}getEntries(){return this.db.values({gte:d.e(c.ZERO_HASH),lte:d.e(c.MAX_HASH),parse:e=>b.fromRaw(e)})}getTimestampHashes(e,t){return this.db.keys({gte:d.th(t,c.ZERO_HASH),lte:d.th(e,c.MAX_HASH),parse:d.thh})}getContracts(){return this.db.values({gte:d.tx(c.NULL_HASH),lte:d.tx(c.HIGH_HASH),parse:e=>s.parseJson(e.toString())})}getCps(){return this.db.values({gte:d.CP(c.ZERO_CID,"hex"),lte:d.CP(c.MAX_CID,"hex"),parse:e=>U.fromRaw(e)})}async setCp(e){var t=this.db.batch();t.put(d.CP(e.cid),e.toRaw()),await t.write()}async delCp(e){var t=this.db.batch();t.del(d.CP(e)),await t.write()}getScs(){return this.db.values({gte:d.SC(c.ZERO_CID,"hex"),lte:d.SC(c.MAX_CID,"hex"),parse:e=>z.fromRaw(e)})}async setSc(e){var t=this.db.batch();t.put(d.SC(e.id),e.toRaw()),await t.write()}async delSc(e){var t=this.db.batch();t.del(d.SC(e)),await t.write()}async getSCList(e){return r(Array.isArray(e)),this.scList.query(e)}async delVp(e){var t=this.db.batch();t.del(d.VP(e.pid)),await t.write()}async setVp(e){var t=this.db.batch();t.put(d.VP(e.pid),e.toRaw()),await t.write()}async getVp(e){return(e=await this.db.get(d.VP(e)))?V.fromRaw(e):null}loadVpList(){return this.db.values({gte:d.VP(c.ZERO_CID,"hex"),lte:d.VP(c.MAX_CID,"hex"),parse:e=>V.fromRaw(e)})}async delHtlc(e){var t;e.id&&(this.htlcList.delete(e.id),this.htlcList.delAccount(e),(t=this.db.batch()).del(d.VH(e.shash,e.sidx)),await t.write())}async setSuggest(e){e=new W(e);var t=(this.htlcList.set(e.id,e),this.db.batch());t.put(d.VH(e.shash,e.sidx),e.toRaw()),await t.write()}async setAssent(e){e=new W(e);var t=(this.htlcList.set(e.id,e),this.db.batch());t.put(d.VH(e.shash,e.sidx),e.toRaw()),await t.write()}async loadHtlcList(){return this.db.values({gte:d.VH(c.ZERO_CID,0),lte:d.VH(c.MAX_CID,4294967295),parse:e=>W.fromRaw(e)})}async delErAbolish(e){var t=this.db.batch();t.del(d.ERA(e.erid)),await t.write()}async setErAbolish(e){var t=this.db.batch();t.put(d.ERA(e.erid),e.toRaw()),await t.write()}async getErAbolish(e){return(e=await this.db.get(d.ERA(e)))?J.fromRaw(e):null}loadErAbolishList(){return this.db.values({gte:d.ERA(c.ZERO_CID),lte:d.ERA(c.MAX_CID),parse:e=>J.fromRaw(e)})}async delCpEn(e){var t=this.db.batch();t.del(d.EN2(e.to,e.from)),await t.write()}async setCpEn(e){var t=this.db.batch();t.put(d.EN2(e.to,e.from),e.toRaw()),await t.write()}loadCpEnList(){return this.db.values({gte:d.EN2(c.ZERO_CID,c.ZERO_CID,"ascii"),lte:d.EN2(c.MAX_CID,c.MAX_CID,"ascii"),parse:e=>Q.fromRaw(e)})}queryCpEnListByCid(e){return this.db.values({gte:d.EN2(e,c.ZERO_CID,"ascii"),lte:d.EN2(e,c.MAX_CID,"ascii"),parse:e=>Q.fromRaw(e)})}async delEr(e){var t=this.db.batch();t.del(d.ER(e.erid)),t.del(d.ERR(e.witness,e.erid,e.txid)),await t.write()}async setEr(e,t){var i=this.db.batch(),r=d.ERR(e.witness,e.erid,e.txid);i.put(r,e.toRaw()),i.put(d.ER(e.erid),r),await i.write()}async getEr(e){var t;return(e=await this.db.get(d.ER(e)))&&([,,t]=d.ERRR(e),e=await this.db.get(e))?((e=G.fromRaw(e)).txid=t,e):null}async byPubkey(e,t,i=!1){if(!(e=await this.db.values({gte:d.ERR(e,c.NULL_HASH,c.NULL_HASH),lte:d.ERR(e,c.HIGH_HASH,c.HIGH_HASH),parse:e=>G.fromRaw(e)}))||0==e.length)return[];let r=null;if(i){var s,n=new Map;for(s of e){var a,o=await this.caVerifyObj(s);o&&((a=n.get(o.source.cluster))?o.startHeight>a.startHeight&&n.set(s.source.cluster,o):n.set(o.source.cluster,o))}r=n.values()}else r=e;if(!r||0==r.length)return[];var h,u=new y;for(h of r)u.set(h.erid,h);return u.query(t)}async caVerify(e){return this.caVerifyObj(await this.erList.getEr(e))}async caVerifyObj(e){var t;return e?(e.verify=!1,e.validHeight<=this.chain.height||(t=await this.erAbList.getErAb(e.erid))&&t.abolishHeight<this.chain.height||(t=ae.fromPublic(Buffer.from(e.witness,"hex"),this.network.type),e.verifying(t)&&(e.verify=!0,0<(t=this.cpList.query([["pubKey",e.witness]])).list.length)&&(e.cpid=t.list[0].cid)),e):null}async saveVote(e,t){var i=this.db.batch();i.put(d.VM(e),Buffer.from(JSON.stringify(t))),await i.write()}async saveOracle(e,t){var i=this.db.batch();i.put(d.VO(e),Buffer.from(JSON.stringify(t))),await i.write()}getTips(){return this.db.keys({gte:d.p(c.ZERO_HASH),lte:d.p(c.MAX_HASH),parse:d.pp})}async readCoin(e){var t,i,r,s;return this.options.spv?null:(({hash:t,index:i}=e),e=e.toKey(),r=this.state,(s=this.coinCache.get(e))?k.fromRaw(s):(s=await this.db.get(d.c(t,i)))?(r===this.state&&this.coinCache.set(e,s),k.fromRaw(s)):null)}async getCoin(e,t){return e=new g(e,t),(t=await this.readCoin(e))?t.toCoin(e):null}async hasCoins(e){for(let i=0;i<e.outputs.length;i++){var t=d.c(e.hash(),i);if(await this.db.has(t))return!0}return!1}async getCoinView(e){var t,i=new u;for({prevout:t}of e.inputs){var r=await this.readCoin(t);r&&i.addEntry(t,r)}return i}async getSpentView(e){var t,i=await this.getCoinView(e);for({prevout:t}of e.inputs)if(!i.hasEntry(t)){var r,{hash:r,index:s}=t;if(r=await this.getMeta(r)){const{tx:e,height:t,time:n}=r;s<e.outputs.length&&i.addIndex(e,s,t,n)}}return i}async getUndoCoins(e){return(e=await this.db.get(d.u(e)))?l.fromRaw(e):new l}async getBlock(e){return(e=await this.getRawBlock(e))?m.fromRaw(e):null}async getRawBlock(e){return!this.options.spv&&(e=await this.getHash(e))?this.db.get(d.b(e)):null}async getBlockView(e){var t=new u,i=await this.getUndoCoins(e.hash());if(!i.isEmpty()){for(let r=e.txs.length-1;0<r;r--){var s=e.txs[r];for(let e=s.inputs.length-1;0<=e;e--){var n=s.inputs[e];i.apply(t,n.prevout)}}r(i.isEmpty(),"Undo coins data inconsistency.")}return t}async getMeta(e){return this.options.indexTX&&(e=await this.db.get(d.t(e)))?w.fromRaw(e):null}async getTX(e){return(e=await this.getMeta(e))?e.tx:null}async getExtendTX(e){return(e=await this.getMeta(e))||null}async hasTX(e){return!!this.options.indexTX&&this.db.has(d.t(e))}async getCoinsByAddress(e){if(!this.options.indexAddress)return[];var t=[];for(const o of e=Array.isArray(e)?e:[e]){var i,s,n=v.getHash(o);for([i,s]of await this.db.keys({gte:d.C(n,c.ZERO_HASH,0),lte:d.C(n,c.MAX_HASH,4294967295),parse:d.Cc})){var a=await this.getCoin(i,s);r(a),t.push(a)}}return t}async getHashesByAddress(e,t="both"){if(Array.isArray(e)||(e=[e]),!this.options.indexTX||!this.options.indexAddress)return[];const i=Object.create(null);for(const s of e){var r=v.getHash(s);let e,n;n="input"==t?(e=d.TI(r,c.ZERO_HASH),d.TI(r,c.MAX_HASH)):"output"==t?(e=d.TO(r,c.ZERO_HASH),d.TO(r,c.MAX_HASH)):(e=d.T(r,c.ZERO_HASH),d.T(r,c.MAX_HASH)),await this.db.keys({gte:e,lte:n,parse:e=>{e=d.Tt(e),i[e]=!0}})}return Object.keys(i)}async getTXByAddress(e){var t=[];for(const i of await this.getMetaByAddress(e))t.push(i.tx);return t}async getVpByOid(e){return{list:[],count:0}}async getVpByAddress(e,t="both"){t=await this.getMetaByAddress(e,t);var i=new Map;for(const e of t)for(let t=0;t<e.tx.outputs.length;t++){var r=e.tx.outputs[t],s=r.getReturnData([ie.OP_PROPCREATE,ie.OP_PROPEXCHANGE]);s&&(s.current={height:e.height,hash:e.tx.rhash("hex"),index:t,address:r.getAddress().toString()},!(r=i.get(s.pid))||r.current.height<s.current.height)&&i.set(s.pid,s)}let n=[];return i.forEach(t=>{t.current.address==e&&n.push(t)}),{list:n,count:n.length}}async getMetaByAddress(e,t="both"){if(!this.options.indexTX||!this.options.indexAddress)return[];Array.isArray(e)||(e=[e]);var i=[];for(const n of await this.getHashesByAddress(e,t)){var s=await this.getMeta(n);r(s),i.push(s)}return i}async scan(e,t,i){"number"==typeof(e=null==e?this.network.genesis.hash:e)?this.logger.info("Scanning from height %d.",e):this.logger.info("Scanning from block %s.",s.revHex(e));let r=await this.getEntry(e);if(r){if(!await this.isMainChain(r))throw new Error("Cannot rescan an alternate chain.");let e=0;for(;r;){var n=await this.getBlock(r.hash),a=[];if(e++,n){this.logger.info("Scanning block %s (%d).",r.rhash(),r.height);for(let e=0;e<n.txs.length;e++){var o=n.txs[e];let i=!1;for(let e=0;e<o.outputs.length;e++){var c=o.outputs[e].getHash();c&&(0==r.height||t&&t.test(c))&&(c=g.fromTX(o,e),t&&t.add(c.toRaw()),i=!0)}if(!t||i)a.push(o);else if(0!==e)for(var{prevout:h}of o.inputs)if(!t||t.test(h.toRaw())){a.push(o);break}}}else if(!this.options.spv&&!this.options.prune)throw new Error("Block not found.");await i(r,a),r=await this.getNext(r)}this.logger.info("Finished scanning %d blocks.",e)}}async save(e,t,i){this.start();try{await this._save(e,t,i)}catch(e){throw this.drop(),e}await this.commit()}async _save(e,t,i){var r=t.hash();this.put(d.h(r),S(e.height)),this.put(d.th(t.time,r),null),this.put(d.e(r),e.toRaw()),this.cacheHash.push(e.hash,e),this.del(d.p(e.prevBlock)),this.put(d.p(r),null),this.saveUpdates(),i?(e.isGenesis()||this.put(d.n(e.prevBlock),r),this.put(d.H(e.height),r),this.cacheHeight.push(e.height,e),await this.saveBlock(e,t,i),this.put(d.R,this.pending.commit(r))):await this.saveBlock(e,t)}async reconnect(e,t,i){this.start();try{await this._reconnect(e,t,i)}catch(e){throw this.drop(),e}await this.commit()}async _reconnect(e,t,i){var s=t.hash();r(!e.isGenesis()),this.put(d.n(e.prevBlock),s),this.put(d.H(e.height),s),this.cacheHeight.push(e.height,e),this.cacheHash.push(e.hash,e),this.saveUpdates(),await this.connectBlock(e,t,i),this.put(d.R,this.pending.commit(s))}async disconnect(e,t){let i;this.start();try{i=await this._disconnect(e,t)}catch(e){throw this.drop(),e}return await this.commit(),i}async _disconnect(e,t){return this.del(d.n(e.prevBlock)),this.del(d.H(e.height)),this.cacheHeight.unpush(e.height),this.saveUpdates(),t=await this.disconnectBlock(e,t),this.put(d.R,this.pending.commit(e.prevBlock)),t}saveUpdates(){var e=this.stateCache.updates;if(0!==e.length){this.logger.info("Saving %d state cache updates.",e.length);for(const r of e){var{bit:t,hash:i}=r;this.put(d.v(t,i),r.toRaw())}}}async reset(e){var t=await this.getEntry(e);if(!t)throw new Error("Block not found.");if(!await this.isMainChain(t))throw new Error("Cannot reset on alternate chain.");if(this.options.prune)throw new Error("Cannot reset when pruned.");await this.removeChains();let i=await this.getTip();for(r(i),this.logger.debug("Resetting main chain to: %s",t.rhash());;){if(this.start(),i.hash===t.hash){this.put(d.R,this.pending.commit(i.hash)),await this.commit();break}r(!i.isGenesis()),this.del(d.p(i.hash)),this.put(d.p(i.prevBlock),null),this.del(d.H(i.height)),this.del(d.h(i.hash)),this.del(d.th(i.time,i.hash)),this.del(d.e(i.hash)),this.del(d.n(i.prevBlock));try{await this.removeBlock(i)}catch(e){throw this.drop(),e}this.cacheHeight.remove(i.height),this.cacheHash.remove(i.hash),i=await this.getPrevious(i),r(i)}return i}async removeChains(){var e=await this.getTips();this.start();try{for(const t of e)await this._removeChain(t)}catch(e){throw this.drop(),e}await this.commit()}async _removeChain(e){let t=await this.getEntryByHash(e);if(!t)throw new Error("Alternate chain tip not found.");for(this.logger.debug("Removing alternate chain: %s.",t.rhash());!await this.isMainChain(t);)r(!t.isGenesis()),this.del(d.p(t.hash)),this.del(d.h(t.hash)),this.del(d.th(t.time,t.hash)),this.del(d.e(t.hash)),this.del(d.b(t.hash)),this.cacheHash.unpush(t.hash),t=await this.getPrevious(t),r(t)}async saveBlock(e,t,i){var r=t.hash();this.options.spv||(this.put(d.b(r),t.toRaw()),i&&await this.connectBlock(e,t,i))}async removeBlock(e){if(this.options.spv)return new u;var t=await this.getBlock(e.hash);if(!t)throw new Error("Block not found.");this.del(d.b(t.hash()));var i=await this.disconnectBlock(e,t);return this.put(d.R,this.pending.commit(e.prevBlock)),await this.commit(),await this.chain.fire("block.disconnect",e,t,i),i}saveView(e){for(var[t,i]of e.map)for(var[r,s]of i.outputs){var n;s.spent?(this.del(d.c(t,r)),this.node.transmit("utxo.remove",{oper:"utxo.remove",hash:t,index:r,address:s.output.getAddress()?s.output.getAddress().toString():null,color:s.output.isColored,value:s.output.value,height:s.height}),this.coinCache.unpush(t+r)):(this.del(d.s(t,r)),n=s.toRaw(),this.put(d.c(t,r),n),this.node.transmit("utxo.add",{oper:"utxo.add",hash:t,index:r,color:s.output.isColored,address:s.output.getAddress()?s.output.getAddress().toString():null,value:s.output.value,height:s.height}),this.coinCache.push(t+r,n))}}async getSpender(e,t){return(e=await this.db.get(d.s(e,t)))?I.DecodeSpenderValue(e):null}async connectBlock(e,t,i){if(!this.options.spv){var r=t.hash("hex");this.pending.connect(t);for(let u=0;u<t.txs.length;u++){var s=t.txs[u],n=s.hash("hex");if(!e.isGenesis()&&0<u)for(let e=0;e<s.inputs.length;e++){var a=s.inputs[e].prevout,o=i.getOutput(a);this.pending.spend(o);try{await this.emitCoinSpent(s.inputs[e],o,s,t)}catch(e){this.logger.error("connect block:",e.message)}this.put(d.s(a.hash,a.index),I.EncodeSpenderValue(n,e,t.height,r))}for(const e of s.outputs)e.script.isUnspendable()||this.pending.add(e);try{var c=await C.FactoryOfContract({env:this,block:t,tx:s,coins:i});if(!e.isGenesis()){var h=await c.verify();if(1!=h)throw new oe(s,_(h),"bad-contract-verify",100)}await c.isBlockFinal()==E.Final&&await c.confirm()}catch(e){this.logger.error("TX(%s) Smart Contract Execute Error: %s",s.txid(),e.message)}this.indexTX(s,i,e,u)}this.saveView(i),i.undo.isEmpty()||this.put(d.u(r),i.undo.commit()),await this.voteMgr.saveVote(),await this.propList.save(),this.scList.deletes([["indate","<",this.chain.height]]),await this.pruneBlock(e)}}async disconnectBlock(e,t){var i=new u;if(!this.options.spv){var s=t.hash(),n=await this.getUndoCoins(s);this.pending.disconnect(t);for(let r=t.txs.length-1;0<=r;r--){var a=t.txs[r];if(0<r)for(let e=a.inputs.length-1;0<=e;e--){var o=a.inputs[e].prevout;n.apply(i,o),this.pending.add(i.getOutput(o))}i.removeTX(a,e.height,e.time);for(let e=a.outputs.length-1;0<=e;e--){var c=a.outputs[e];c.script.isUnspendable()||this.pending.spend(c)}try{await(await C.FactoryOfContract({env:this,block:t,tx:a})).unconfirm()}catch(s){this.logger.error("TX(%s) Smart Contract Unconfirm Error: %s",a.txid(),s.message)}await this.unindexTX(a,i)}r(n.isEmpty(),"Undo coins data inconsistency."),this.saveView(i),this.del(d.u(s)),await this.voteMgr.saveVote(),await this.propList.save()}return i}async pruneBlock(e){this.options.spv||!this.options.prune||(e=e.height-this.network.block.keepBlocks)<=this.network.block.pruneAfterHeight||(e=await this.getHash(e))&&(this.del(d.b(e)),this.del(d.u(e)))}saveFlags(){var e=he.fromOptions(this.options),t=this.db.batch();return t.put(d.O,e.toRaw()),t.write()}indexTX(e,t,i,r){var s=e.hash();if(this.options.indexTX&&(r=w.fromTX(e,i,r),this.put(d.t(s),r.toRaw()),this.options.indexAddress)){for(const t of e.getHashes())this.put(d.T(t,s),null);for(const t of e.getOutputHashes())this.put(d.TO(t,s),null);for(const i of e.getInputHashes(t))this.put(d.TI(i,s),null)}if(this.options.indexAddress){if(!i.isGenesis()&&!e.isCoinbase())for(var{prevout:n}of e.inputs){var a=t.getOutput(n).getHash();a&&this.del(d.C(a,n.hash,n.index))}for(let t=0;t<e.outputs.length;t++){var o=e.outputs[t].getHash();o&&this.put(d.C(o,s,t),null)}}}async unindexTX(e,t){var i,r=e.hash();if(this.options.indexTX&&(this.del(d.t(r)),this.options.indexAddress))for(i of e.getHashes(t))this.del(d.T(i,r)),this.del(d.TI(i,r)),this.del(d.TO(i,r));if(this.options.indexAddress){if(!e.isCoinbase())for(var{prevout:s}of e.inputs){var n=t.getOutput(s).getHash();n&&this.put(d.C(n,s.hash,s.index),null)}for(let t=0;t<e.outputs.length;t++){var a=e.outputs[t].getHash();a&&this.del(d.C(a,r,t))}}}async readHostList(){return this.db.get(d.HL)}async writeHostList(e){var t=this.db.batch();return t.put(d.HL,e),t.write()}async emitCoinSpent(e,t,i,r){(i={env:this,block:r,tx:i,hash:e.prevout.hash,i:e.prevout.index,height:r.height,output:t,type:t.getReturnType(),data:t.getReturnData(re)}).data&&await te(i).spent(e)}}function he(e){if(!(this instanceof he))return new he(e);this.network=h.primary,this.spv=!1,this.witness=!0,this.prune=!1,this.indexTX=!1,this.indexAddress=!1,e&&this.fromOptions(e)}ce.layout=d,he.prototype.fromOptions=function(e){return this.network=h.get(e.network),null!=e.spv&&(r("boolean"==typeof e.spv),this.spv=e.spv),null!=e.prune&&(r("boolean"==typeof e.prune),this.prune=e.prune),null!=e.indexTX&&(r("boolean"==typeof e.indexTX),this.indexTX=e.indexTX),null!=e.indexAddress&&(r("boolean"==typeof e.indexAddress),this.indexAddress=e.indexAddress),this},he.fromOptions=function(e){return(new he).fromOptions(e)},he.prototype.toRaw=function(){var e=new a(12);let t=0;return this.spv&&(t|=1),this.witness&&(t|=2),this.prune&&(t|=4),this.indexTX&&(t|=8),this.indexAddress&&(t|=16),e.writeU32(this.network.magic),e.writeU32(t),e.writeU32(0),e.render()},he.prototype.fromRaw=function(e){return e=new n(e),this.network=h.fromMagic(e.readU32()),e=e.readU32(),this.spv=0!=(1&e),this.witness=0!=(2&e),this.prune=0!=(4&e),this.indexTX=0!=(8&e),this.indexAddress=0!=(16&e),this},he.fromRaw=function(e){return(new he).fromRaw(e)};class ue{constructor(){this.tip=c.NULL_HASH,this.tx=0,this.coin=0,this.value=0,this.committed=!1}rhash(){return s.revHex(this.tip)}clone(){var e=new ue;return e.tip=this.tip,e.tx=this.tx,e.coin=this.coin,e.value=this.value,e}connect(e){this.tx+=e.txs.length}disconnect(e){this.tx-=e.txs.length}add(e){this.coin++,this.value+=e.value}spend(e){this.coin--,this.value-=e.value}commit(e){return"string"!=typeof e&&(e=e.toString("hex")),this.tip=e,this.committed=!0,this.toRaw()}toRaw(){var e=new a(56);return e.writeHash(this.tip),e.writeU64(this.tx),e.writeU64(this.coin),e.writeU64(this.value),e.render()}static fromRaw(e){var t=new ue;e=new n(e);return t.tip=e.readHash("hex"),t.tx=e.readU64(),t.coin=e.readU64(),t.value=e.readU64(),t}}function le(e){this.network=e,this.bits=[],this.updates=[],this._init()}function pe(e,t,i){this.bit=e,this.hash=t,this.state=i}le.prototype._init=function(){for(let e=0;e<32;e++)this.bits.push(null);for(var{bit:e}of this.network.deploys)r(!this.bits[e]),this.bits[e]=new Map},le.prototype.set=function(e,t,i){var s=this.bits[e];r(s),s.get(t.hash)!==i&&(s.set(t.hash,i),this.updates.push(new pe(e,t.hash,i)))},le.prototype.get=function(e,t){return e=this.bits[e],r(e),null==(e=e.get(t.hash))?-1:e},le.prototype.commit=function(){this.updates.length=0},le.prototype.drop=function(){for(var{bit:e,hash:t}of this.updates)e=this.bits[e],r(e),e.delete(t);this.updates.length=0},le.prototype.insert=function(e,t,i){e=this.bits[e],r(e),e.set(t,i)},pe.prototype.toRaw=function(){return x(this.state)},e.exports=ce},function(e,t,i){"use strict";
881
881
  /*!
882
882
  * lowlevelup.js - LevelUP module for vallnet
883
883
  * Copyright (c) 2019-2022, Bookman Software (MIT License).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gamegold",
3
- "version": "5.5.1",
3
+ "version": "5.5.2",
4
4
  "description": "Vallnet Core",
5
5
  "license": "MIT",
6
6
  "repository": "git://github.com/bookmansoft/gamegold",