From 46599335d1a13f6730eccabf0c0a874dcf5e928b Mon Sep 17 00:00:00 2001 From: jkrvivian Date: Wed, 18 Oct 2023 16:28:19 +0800 Subject: [PATCH 01/13] Calculate and set maxBurnedMana correctly --- tools/evil-spammer/accountwallet/faucet.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/evil-spammer/accountwallet/faucet.go b/tools/evil-spammer/accountwallet/faucet.go index 3a6948142..713f9049c 100644 --- a/tools/evil-spammer/accountwallet/faucet.go +++ b/tools/evil-spammer/accountwallet/faucet.go @@ -2,6 +2,7 @@ package accountwallet import ( "context" + "fmt" "sync" "time" @@ -52,12 +53,13 @@ func (a *AccountWallet) RequestFaucetFunds(clt models.Client, receiveAddr iotago return nil, err } - _, err = a.PostWithBlock(clt, signedTx, a.faucet.account, congestionResp, issuerResp, version) + blkID, err := a.PostWithBlock(clt, signedTx, a.faucet.account, congestionResp, issuerResp, version) if err != nil { log.Errorf("failed to create block: %s", err) return nil, err } + fmt.Println("block sent:", blkID.ToHex()) // set remainder output to be reused by the Faucet wallet a.faucet.unspentOutput = &models.Output{ @@ -114,9 +116,9 @@ func (a *AccountWallet) CreateBlock(payload iotago.Payload, issuer blockhandler. blockBuilder.StrongParents(issuerResp.StrongParents) blockBuilder.WeakParents(issuerResp.WeakParents) blockBuilder.ShallowLikeParents(issuerResp.ShallowLikeParents) - blockBuilder.MaxBurnedMana(congestionResp.ReferenceManaCost) blockBuilder.Payload(payload) + blockBuilder.CalculateAndSetMaxBurnedMana(congestionResp.ReferenceManaCost) blockBuilder.Sign(issuer.ID(), issuer.PrivateKey()) blk, err := blockBuilder.Build() From 1a488e2a119a80e87ee2cb26a07aeb6fc0bc2b45 Mon Sep 17 00:00:00 2001 From: jkrvivian Date: Wed, 18 Oct 2023 17:12:37 +0800 Subject: [PATCH 02/13] Update visualizer --- ...cc0a4d0.js => app.991aa07a823b10139416.js} | 2 +- ...js.map => app.991aa07a823b10139416.js.map} | 2 +- .../dashboard/frontend/build/index.html | 2 +- .../frontend/src/app/misc/Payload.ts | 4 +-- components/dashboard/visualizer.go | 25 +++++++++---------- 5 files changed, 17 insertions(+), 18 deletions(-) rename components/dashboard/frontend/build/{app.9e5b91b17efd1cc0a4d0.js => app.991aa07a823b10139416.js} (99%) rename components/dashboard/frontend/build/{app.9e5b91b17efd1cc0a4d0.js.map => app.991aa07a823b10139416.js.map} (99%) diff --git a/components/dashboard/frontend/build/app.9e5b91b17efd1cc0a4d0.js b/components/dashboard/frontend/build/app.991aa07a823b10139416.js similarity index 99% rename from components/dashboard/frontend/build/app.9e5b91b17efd1cc0a4d0.js rename to components/dashboard/frontend/build/app.991aa07a823b10139416.js index 2375828af..c9b6d7b57 100644 --- a/components/dashboard/frontend/build/app.9e5b91b17efd1cc0a4d0.js +++ b/components/dashboard/frontend/build/app.991aa07a823b10139416.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{286:function(e,t){e.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2N3B4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NyA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48cGF0aCBkPSJNIDMyLjM4IDE4IEwgMzIuMzggNDgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+"},287:function(e,t){e.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NnB4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NiA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+"},298:function(e,t,n){var r={"./af":107,"./af.js":107,"./ar":108,"./ar-dz":109,"./ar-dz.js":109,"./ar-kw":110,"./ar-kw.js":110,"./ar-ly":111,"./ar-ly.js":111,"./ar-ma":112,"./ar-ma.js":112,"./ar-sa":113,"./ar-sa.js":113,"./ar-tn":114,"./ar-tn.js":114,"./ar.js":108,"./az":115,"./az.js":115,"./be":116,"./be.js":116,"./bg":117,"./bg.js":117,"./bm":118,"./bm.js":118,"./bn":119,"./bn-bd":120,"./bn-bd.js":120,"./bn.js":119,"./bo":121,"./bo.js":121,"./br":122,"./br.js":122,"./bs":123,"./bs.js":123,"./ca":124,"./ca.js":124,"./cs":125,"./cs.js":125,"./cv":126,"./cv.js":126,"./cy":127,"./cy.js":127,"./da":128,"./da.js":128,"./de":129,"./de-at":130,"./de-at.js":130,"./de-ch":131,"./de-ch.js":131,"./de.js":129,"./dv":132,"./dv.js":132,"./el":133,"./el.js":133,"./en-au":134,"./en-au.js":134,"./en-ca":135,"./en-ca.js":135,"./en-gb":136,"./en-gb.js":136,"./en-ie":137,"./en-ie.js":137,"./en-il":138,"./en-il.js":138,"./en-in":139,"./en-in.js":139,"./en-nz":140,"./en-nz.js":140,"./en-sg":141,"./en-sg.js":141,"./eo":142,"./eo.js":142,"./es":143,"./es-do":144,"./es-do.js":144,"./es-mx":145,"./es-mx.js":145,"./es-us":146,"./es-us.js":146,"./es.js":143,"./et":147,"./et.js":147,"./eu":148,"./eu.js":148,"./fa":149,"./fa.js":149,"./fi":150,"./fi.js":150,"./fil":151,"./fil.js":151,"./fo":152,"./fo.js":152,"./fr":153,"./fr-ca":154,"./fr-ca.js":154,"./fr-ch":155,"./fr-ch.js":155,"./fr.js":153,"./fy":156,"./fy.js":156,"./ga":157,"./ga.js":157,"./gd":158,"./gd.js":158,"./gl":159,"./gl.js":159,"./gom-deva":160,"./gom-deva.js":160,"./gom-latn":161,"./gom-latn.js":161,"./gu":162,"./gu.js":162,"./he":163,"./he.js":163,"./hi":164,"./hi.js":164,"./hr":165,"./hr.js":165,"./hu":166,"./hu.js":166,"./hy-am":167,"./hy-am.js":167,"./id":168,"./id.js":168,"./is":169,"./is.js":169,"./it":170,"./it-ch":171,"./it-ch.js":171,"./it.js":170,"./ja":172,"./ja.js":172,"./jv":173,"./jv.js":173,"./ka":174,"./ka.js":174,"./kk":175,"./kk.js":175,"./km":176,"./km.js":176,"./kn":177,"./kn.js":177,"./ko":178,"./ko.js":178,"./ku":179,"./ku.js":179,"./ky":180,"./ky.js":180,"./lb":181,"./lb.js":181,"./lo":182,"./lo.js":182,"./lt":183,"./lt.js":183,"./lv":184,"./lv.js":184,"./me":185,"./me.js":185,"./mi":186,"./mi.js":186,"./mk":187,"./mk.js":187,"./ml":188,"./ml.js":188,"./mn":189,"./mn.js":189,"./mr":190,"./mr.js":190,"./ms":191,"./ms-my":192,"./ms-my.js":192,"./ms.js":191,"./mt":193,"./mt.js":193,"./my":194,"./my.js":194,"./nb":195,"./nb.js":195,"./ne":196,"./ne.js":196,"./nl":197,"./nl-be":198,"./nl-be.js":198,"./nl.js":197,"./nn":199,"./nn.js":199,"./oc-lnc":200,"./oc-lnc.js":200,"./pa-in":201,"./pa-in.js":201,"./pl":202,"./pl.js":202,"./pt":203,"./pt-br":204,"./pt-br.js":204,"./pt.js":203,"./ro":205,"./ro.js":205,"./ru":206,"./ru.js":206,"./sd":207,"./sd.js":207,"./se":208,"./se.js":208,"./si":209,"./si.js":209,"./sk":210,"./sk.js":210,"./sl":211,"./sl.js":211,"./sq":212,"./sq.js":212,"./sr":213,"./sr-cyrl":214,"./sr-cyrl.js":214,"./sr.js":213,"./ss":215,"./ss.js":215,"./sv":216,"./sv.js":216,"./sw":217,"./sw.js":217,"./ta":218,"./ta.js":218,"./te":219,"./te.js":219,"./tet":220,"./tet.js":220,"./tg":221,"./tg.js":221,"./th":222,"./th.js":222,"./tk":223,"./tk.js":223,"./tl-ph":224,"./tl-ph.js":224,"./tlh":225,"./tlh.js":225,"./tr":226,"./tr.js":226,"./tzl":227,"./tzl.js":227,"./tzm":228,"./tzm-latn":229,"./tzm-latn.js":229,"./tzm.js":228,"./ug-cn":230,"./ug-cn.js":230,"./uk":231,"./uk.js":231,"./ur":232,"./ur.js":232,"./uz":233,"./uz-latn":234,"./uz-latn.js":234,"./uz.js":233,"./vi":235,"./vi.js":235,"./x-pseudo":236,"./x-pseudo.js":236,"./yo":237,"./yo.js":237,"./zh-cn":238,"./zh-cn.js":238,"./zh-hk":239,"./zh-hk.js":239,"./zh-mo":240,"./zh-mo.js":240,"./zh-tw":241,"./zh-tw.js":241};function a(e){var t=s(e);return n(t)}function s(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=s,e.exports=a,a.id=298},434:function(e,t,n){"use strict";n.r(t);var r=n(1),a=n(24),s=n(6),l=n(25),o=(n(297),n(285)),i=n(56),c=n(39),p=n(12),d=n(11),u=n(9),m=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let h=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Uptime: ",this.props.nodeStore.uptime)}};h=m([Object(s.b)("nodeStore"),s.c],h);var f=h,b=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let g=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Version: ",this.props.nodeStore.status.version)}};g=b([Object(s.b)("nodeStore"),s.c],g);var y=g,E=n(15),v=n(29),I={elements:{line:{tension:0}},animation:{duration:0},hover:{animationDuration:0},responsiveAnimationDuration:0},k=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const x=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return Math.abs(e)},fontSize:10,maxTicksLimit:4,beginAtZero:!0}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${Math.abs(e.value)}`}}}},I);let S=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Blocks Per Second"),r.createElement("small",null,"BPS: ",this.props.nodeStore.last_mps_metric.mps,"."),r.createElement(v.Line,{height:50,data:this.props.nodeStore.mpsSeries,options:x})))}};S=k([Object(s.b)("nodeStore"),s.c],S);var j=S,O=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const w=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return Math.abs(e)},fontSize:10,maxTicksLimit:4,beginAtZero:!0}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${Math.abs(e.value)}`}}}},I);let C=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Current Tips"),r.createElement("small",null,"Tips: ",this.props.nodeStore.last_tips_metric.totaltips,"."),r.createElement(v.Line,{height:50,data:this.props.nodeStore.tipsSeries,options:w})))}};C=O([Object(s.b)("nodeStore"),s.c],C);var D=C,R=n(2),_=n(28),N=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const T=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},showXLabels:10,gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return _(Math.abs(e))},maxTicksLimit:3,fontSize:10}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${_(Math.abs(e.value))}`}}}},I);let P=class extends r.Component{render(){let e=this.props.nodeStore.status.mem;return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Memory Usage"," ",_(e.heap_alloc)),r.createElement("small",null,"GC Cycles: ",e.num_gc," (Last Cycle: ",e.last_pause_gc/1e6,"ms) - "," ","Heap: "," ","[Obj: ",e.heap_objects,", In-Use: ",_(e.heap_sys-e.heap_idle),", Retained: ",_(e.heap_idle-e.heap_released),"]"),r.createElement(v.Line,{height:50,data:this.props.nodeStore.memSeries,options:T})))}};P=N([Object(s.b)("nodeStore"),s.c],P);var M=P,L=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const A=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return Math.abs(e)},fontSize:10,maxTicksLimit:4,beginAtZero:!0}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${Math.abs(e.value)}`}}}},I);let B=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Component Counter Blocks Per Second"),r.createElement("div",{style:{display:"flex",flexDirection:"column"}},r.createElement("small",null,"BPS: ",this.props.nodeStore.last_component_counter_metric.store,"."),r.createElement("small",null,"Rate Setter - Estimate: ",this.props.nodeStore.last_rate_setter_metric.estimate)),r.createElement(v.Line,{height:50,data:this.props.nodeStore.componentSeries,options:A})))}};B=L([Object(s.b)("nodeStore"),s.c],B);var z=B,H=n(14),F=n(20),V=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Z=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"TangleTime Synced: ",this.props.nodeStore.status.tangleTime.synced?"Yes":"No"),r.createElement("small",null,r.createElement("div",null,r.createElement("hr",null),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Accepted Block: ",r.createElement(H.Link,{to:"/explorer/block/"+this.props.nodeStore.status.tangleTime.acceptedBlockID},this.props.nodeStore.status.tangleTime.acceptedBlockID))),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Confirmed Block: ",r.createElement(H.Link,{to:"/explorer/block/"+this.props.nodeStore.status.tangleTime.confirmedBlockID},this.props.nodeStore.status.tangleTime.confirmedBlockID))),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Confirmed Slot:",this.props.nodeStore.status.tangleTime.confirmedSlot)),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Committed Slot:",this.props.nodeStore.status.tangleTime.committedSlot)),r.createElement("hr",null),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-3"},"Acceptance Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.ATT/1e6),"dd.mm.yyyy HH:MM:ss")),r.createElement("div",{className:"col-3"},"Confirmation Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.CTT/1e6),"dd.mm.yyyy HH:MM:ss"))),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-3"},"Relative Acceptance Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.RATT/1e6),"dd.mm.yyyy HH:MM:ss")),r.createElement("div",{className:"col-3"},"Relative Confirmation Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.RCTT/1e6),"dd.mm.yyyy HH:MM:ss")))))))}};Z=V([Object(s.b)("nodeStore"),s.c],Z);var U=Z,W=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let J=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Bootstrapped: ",this.props.nodeStore.status.tangleTime.bootstrapped?"Yes":"No")}};J=W([Object(s.b)("nodeStore"),s.c],J);var G=J,q=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let X=class extends r.Component{render(){return r.createElement(p.a,null,r.createElement("h3",null,"Dashboard"),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Node: ",this.props.nodeStore.status.id),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement(R.a.Item,null,r.createElement(f,null)))),r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement(R.a.Item,null,r.createElement(G,null)))),r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement(R.a.Item,null,r.createElement(y,null))))))))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(U,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(j,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(D,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(z,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(M,null))))}};X=q([Object(s.b)("nodeStore"),s.c],X);var Q=n(16),K=n(23),$=n(22),Y=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let ee=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.props.explorerStore.updateSearch(e.target.value)},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.searchAny()}}render(){let{search:e,searching:t}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Address or Block ID","aria-label":"Address or Block ID","aria-describedby":"basic-addon1",value:e,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:t})))))}};ee=Y([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],ee);var te=n(71),ne=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let re=class extends r.Component{render(){let{blksLiveFeed:e}=this.props.explorerStore;return r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Live Feed"),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{height:"500px",overflow:"auto"}},r.createElement("h6",null,"Blocks"),r.createElement(te.a,null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("td",null,"Id"),r.createElement("td",null,"Payload Type"))),r.createElement("tbody",null,e))))))))}};re=ne([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],re);var ae=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let se=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.txID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/transaction/"+this.txID)}}render(){let{searching:e}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Transaction ID","aria-label":"Transaction ID","aria-describedby":"basic-addon1",value:this.txID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};se=ae([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],se);var le=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let oe=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.outputID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/output/"+this.outputID)}}render(){let{searching:e}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Output ID","aria-label":"Output ID","aria-describedby":"basic-addon1",value:this.outputID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};oe=le([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],oe);var ie=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let ce=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.conflictID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/conflict/"+this.conflictID)}}render(){let{searching:e}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Conflict ID","aria-label":"Conflict ID","aria-describedby":"basic-addon1",value:this.conflictID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};ce=ie([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],ce);var pe=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let de=class extends r.Component{render(){return r.createElement(p.a,null,r.createElement("h3",null,"Tangle Explorer"),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("p",null,"Search for addresses, blocks, transactions, outputs and conflicts."))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(ee,null)),r.createElement(u.a,null,r.createElement(se,null))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(oe,null)),r.createElement(u.a,null,r.createElement(ce,null))),r.createElement(re,null),r.createElement("small",null,"This explorer implementation is heavily inspired by ",r.createElement("a",{href:"https://thetangle.org"},"thetangle.org"),"."))}};de=pe([Object(s.b)("nodeStore"),s.c],de);var ue=n(288),me=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let he=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.props.explorerStore.updateSearch(e.target.value)},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.searchAny()}}render(){let{search:e,searching:t}=this.props.explorerStore;return r.createElement(ue.a,{inline:!0,as:"div"},r.createElement(K.a,{type:"text",onChange:this.updateSearch,placeholder:"Search the Tangle...",value:e,className:" mr-sm-2",disabled:t,onKeyUp:this.executeSearch}))}};he=me([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],he);var fe,be=n(17),ge=n(44),ye=n(3);!function(e){e[e.Status=0]="Status",e[e.BPSMetrics=1]="BPSMetrics",e[e.Block=2]="Block",e[e.NeighborStats=3]="NeighborStats",e[e.ComponentCounterMetrics=4]="ComponentCounterMetrics",e[e.TipsMetrics=5]="TipsMetrics",e[e.Vertex=6]="Vertex",e[e.TXAccepted=7]="TXAccepted",e[e.TipInfo=8]="TipInfo",e[e.Mana=9]="Mana",e[e.ManaMapOverall=10]="ManaMapOverall",e[e.ManaMapOnline=11]="ManaMapOnline",e[e.BlkManaDashboardAddress=12]="BlkManaDashboardAddress",e[e.RateSetter=13]="RateSetter",e[e.ConflictSet=14]="ConflictSet",e[e.Conflict=15]="Conflict",e[e.SlotInfo=16]="SlotInfo"}(fe||(fe={}));let Ee={};function ve(e,t){Ee[e]=t}function Ie(e){delete Ee[e]}var ke,xe,Se,je;!function(e){e[e.TaggedData=5]="TaggedData",e[e.Transaction=6]="Transaction",e[e.Faucet=3]="Faucet"}(ke||(ke={}));class Oe{}class we{}function Ce(e){switch(e){case ke.TaggedData:return"TaggedData";case ke.Transaction:return"Transaction";case ke.Faucet:return"Faucet";default:return"Unknown"}}class De extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.token.id},r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",this.props.token.id),r.createElement(R.a.Item,null,"Amount: ",this.props.token.amount)))}}class Re extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.address},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address Type: ",this.props.unlock.address.type)),r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address: ",this.props.unlock.address.pubKeyHash)))}}class _e extends r.Component{render(){return this.props.unlock.unixTime&&r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.unixTime},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Unix Time: ",this.props.unlock.unixTime)))}}class Ne extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.returnAddress},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Return Address: ",this.props.unlock.returnAddress),r.createElement(R.a.Item,null,"Amount: ",this.props.unlock.amount)))}}class Te extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.returnAddress},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Return Address: ",this.props.unlock.returnAddress),r.createElement(R.a.Item,null,"Unix Time: ",this.props.unlock.unixTime)))}}function Pe(e){switch(e.type){case xe.Address:case xe.StateControllerAddress:case xe.GovernorAddress:return r.createElement(Re,{unlock:e});case xe.StorageDepositReturn:return r.createElement(Ne,{unlock:e});case xe.Expiration:return r.createElement(Te,{unlock:e});case xe.Timelock:return r.createElement(_e,{unlock:e})}}!function(e){e[e.Address=0]="Address",e[e.StorageDepositReturn=1]="StorageDepositReturn",e[e.Timelock=2]="Timelock",e[e.Expiration=3]="Expiration",e[e.StateControllerAddress=4]="StateControllerAddress",e[e.GovernorAddress=5]="GovernorAddress",e[e.ImmutableAlias=6]="ImmutableAlias"}(xe||(xe={}));class Me extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.address},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address: ",this.props.feature.address)))}}class Le extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.data},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Data: ",this.props.feature.data)))}}class Ae extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.tag},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Data: ",this.props.feature.tag)))}}function Be(e){switch(e.type){case Se.Sender:case Se.Issuer:return r.createElement(Me,{feature:e.feature});case Se.Metadata:return r.createElement(Le,{feature:e.feature});case Se.Tag:return r.createElement(Ae,{feature:e.feature})}}!function(e){e[e.Sender=0]="Sender",e[e.Issuer=1]="Issuer",e[e.Metadata=2]="Metadata",e[e.Tag=3]="Tag"}(Se||(Se={}));class ze extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: BasicOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}class He extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,{style:{wordBreak:"break-word"}},r.createElement(R.a.Item,null,"Type: AliasOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(R.a.Item,null,"AliasID: ",this.props.output.aliasId),r.createElement(R.a.Item,null,"StateIndex: ",this.props.output.stateIndex),r.createElement(R.a.Item,null,"State Metadata: ",this.props.output.stateMetadata," "),r.createElement(R.a.Item,null,"Foundry Counter: ",this.props.output.foundryCounter),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}class Fe extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: FoundryOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(R.a.Item,null,"Serial Number: ",this.props.output.serialNumber),r.createElement(R.a.Item,null,"Token Scheme: ",this.props.output.tokenScheme),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}class Ve extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: FoundryOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(R.a.Item,null,"NFT ID: ",this.props.output.nftId),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}function Ze(e){let t=e.outputID;switch(e.type){case je.Basic:return r.createElement(ze,{output:e.output,id:t});case je.Alias:return r.createElement(He,{output:e.output,id:t});case je.Foundry:return r.createElement(Fe,{output:e.output,id:t});case je.NFT:return r.createElement(Ve,{output:e.output,id:t});default:return}}!function(e){e[e.Treasury=2]="Treasury",e[e.Basic=3]="Basic",e[e.Alias=4]="Alias",e[e.Foundry=5]="Foundry",e[e.NFT=6]="NFT"}(je||(je={}));var Ue=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},We=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},Je=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};const Ge="1111111111111111111111111111111111111111111111111111111111111111";class qe{}var Xe;!function(e){e[e.NotFound=1]="NotFound",e[e.BadRequest=2]="BadRequest"}(Xe||(Xe={}));class Qe{constructor(e){this.latest_blocks=[],this.blk=null,this.addr=null,this.tx=null,this.txMetadata=null,this.txAttachments=[],this.output=null,this.outputMetadata=null,this.outputConsumers=null,this.pendingMana=null,this.conflict=null,this.conflictChildren=null,this.conflictConflicts=null,this.conflictVoters=null,this.tips=null,this.slotInfo=new qe,this.query_loading=!1,this.query_err=null,this.search="",this.search_result=null,this.searching=!1,this.searchAny=()=>Je(this,void 0,void 0,(function*(){this.updateSearching(!0);try{let e=yield fetch("/api/search/"+this.search),t=yield e.json();this.updateSearchResult(t)}catch(e){this.updateQueryError(e)}})),this.resetSearch=()=>{this.search_result=null,this.searching=!1},this.updateSearchResult=e=>{this.search_result=e,this.searching=!1;let t=this.search;this.search="",this.search_result.block?this.routerStore.push("/explorer/block/"+t):this.search_result.address?this.routerStore.push("/explorer/address/"+t):this.routerStore.push("/explorer/404/"+t)},this.updateSearch=e=>{this.search=e},this.updateSearching=e=>this.searching=e,this.searchBlock=e=>Je(this,void 0,void 0,(function*(){this.updateQueryLoading(!0);const t=yield this.fetchJson("get","/api/block/"+e);this.updateBlock(t)})),this.searchAddress=e=>Je(this,void 0,void 0,(function*(){this.updateQueryLoading(!0);const t=yield this.fetchJson("get","/api/address/"+e);this.updateAddress(t)})),this.getSlotDetails=e=>Je(this,void 0,void 0,(function*(){yield this.getSlotInfo(e)})),this.getTransaction=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/transaction/"+e);for(let e=0;eJe(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/transaction/${e}/attachments`);this.txAttachments=t})),this.getTransactionMetadata=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/transaction/${e}/metadata`);this.txMetadata=t})),this.getOutput=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/output/"+e);this.output=t})),this.getOutputMetadata=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/output/${e}/metadata`);this.outputMetadata=t})),this.getOutputConsumers=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/output/${e}/consumers`);this.outputConsumers=t})),this.getPendingMana=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/mana/pending?OutputID="+e);this.pendingMana=t})),this.getConflict=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/conflict/"+e);this.conflict=t})),this.getConflictChildren=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/conflict/${e}/children`);this.conflictChildren=t})),this.getConflictConflicts=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/conflict/${e}/conflicts`);this.conflictConflicts=t})),this.getConflictVoters=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/conflict/${e}/voters`);this.conflictVoters=t})),this.getSlotInfo=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/slot/commitment/"+e);this.slotInfo=t})),this.getTips=()=>Je(this,void 0,void 0,(function*(){const e=yield this.fetchJson("get","/api/tips");this.tips=e})),this.reset=()=>{this.blk=null,this.query_err=null,this.tx=null,this.txMetadata=null,this.txAttachments=[],this.output=null,this.outputMetadata=null,this.outputConsumers=null,this.pendingMana=null,this.conflict=null,this.conflictChildren=null,this.conflictConflicts=null,this.tips=null,this.slotInfo=new qe},this.updateAddress=e=>{this.addr=e,this.query_err=null,this.query_loading=!1},this.updateBlock=e=>{switch(this.blk=e,this.blk.conflictIDs=this.blk.conflictIDs?this.blk.conflictIDs:[],this.blk.addedConflictIDs=this.blk.addedConflictIDs?this.blk.addedConflictIDs:[],this.blk.subtractedConflictIDs=this.blk.subtractedConflictIDs?this.blk.subtractedConflictIDs:[],this.blk.strongChildren=this.blk.strongChildren?this.blk.strongChildren:[],this.blk.weakChildren=this.blk.weakChildren?this.blk.weakChildren:[],this.blk.shallowLikeChildren=this.blk.shallowLikeChildren?this.blk.shallowLikeChildren:[],this.blk.strongParents=this.blk.strongParents?this.blk.strongParents:[],this.blk.weakParents=this.blk.weakParents?this.blk.weakParents:[],this.blk.shallowLikedParents=this.blk.shallowLikedParents?this.blk.shallowLikedParents:[],this.query_err=null,this.query_loading=!1,e.payloadType){case ke.Transaction:case ke.TaggedData:this.payload=e.payload;break;case ke.Faucet:this.payload=e.payload;default:this.payload=e.payload}},this.updateQueryLoading=e=>this.query_loading=e,this.updateQueryError=e=>{this.query_err=e,this.query_loading=!1,this.searching=!1},this.addLiveFeedBlock=e=>{-1===this.latest_blocks.findIndex(t=>t.id==e.id)&&(this.latest_blocks.length>=50&&this.latest_blocks.shift(),this.latest_blocks.push(e))},this.routerStore=e,ve(fe.Block,this.addLiveFeedBlock)}get blksLiveFeed(){let e=[];for(let t=this.latest_blocks.length-1;t>=0;t--){let n=this.latest_blocks[t];e.push(r.createElement("tr",{key:n.id},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/block/"+n.id},n.id)),r.createElement("td",null,Ce(n.payload_type))))}return e}get tipsList(){let e=[];if(this.tips)for(let t=0;t=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let et=class extends r.Component{render(){let{payload:e}=this.props.explorerStore;return e&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,e.content_title,": "," ",e.content)))}};et=Ye([Object(s.b)("explorerStore"),s.c],et);var tt,nt=n(0),rt=n(282);!function(e){e[e.Ed25519=0]="Ed25519",e[e.BLS=1]="BLS"}(tt||(tt={}));class at extends r.Component{render(){let e=this.props.signature;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Public Key: ",e.publicKey),r.createElement(R.a.Item,null,"Signature: ",e.signature)))))}}class st extends r.Component{renderSignatureComponent(){switch(this.props.block.signatureType){case tt.Ed25519:return r.createElement(at,{signature:this.props.block.signature})}}render(){let e=this.props.block;return r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,"Index: ",r.createElement(Q.a,{variant:"primary"},this.props.key),r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: ",e.type),e.signatureType&&r.createElement(R.a.Item,null,"Signature Type: ",function(e){switch(e){case tt.Ed25519:return"Ed25519 Signature";case tt.BLS:return"BLS Signature";default:return"Unknown Signature Type"}}(e.signatureType)),this.renderSignatureComponent())))}}const lt={maxHeight:"1000px",overflow:"auto",width:"47%",fontSize:"85%"};class ot extends r.Component{render(){let e=this.props.txID,t=this.props.tx;return t&&e&&r.createElement("div",null,r.createElement("h4",null,"Transaction"),r.createElement("p",null," ",e," "),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("div",{style:{marginTop:"10px",marginBottom:"20px",paddingBottom:"10px",borderBottom:"2px solid #eee"}},r.createElement("h5",null,"Transaction Essence")),r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",r.createElement("a",{href:"/explorer/transaction/"+e}," ",e)),r.createElement(R.a.Item,null,"Network ID: ",t.networkId),r.createElement(R.a.Item,null,"Creation Time: ",t.creationSlot),r.createElement(R.a.Item,null,r.createElement("div",{className:"d-flex justify-content-between align-items-center"},r.createElement("div",{className:"align-self-start input-output-list",style:lt},r.createElement("span",null,"Inputs"),r.createElement("hr",null),t.inputs.map((e,t)=>r.createElement("div",{className:"mb-2",key:t},r.createElement("span",{className:"mb-2"},"Index: ",r.createElement(Q.a,{variant:"primary"},t)),r.createElement("div",{className:"mb-2",key:"input"+t},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Output ID: ",e.referencedOutputID.hex)))))),r.createElement(nt.b.Provider,{value:{color:"#00a0ff",size:"2em"}},r.createElement("div",null,r.createElement(rt.a,null))),r.createElement("div",{style:lt},r.createElement("span",null,"Outputs"),r.createElement("hr",null),t.outputs.map((e,t)=>r.createElement("div",{className:"mb-2",key:t},r.createElement("span",{className:"mb-2"},"Index: ",r.createElement(Q.a,{variant:"primary"},t)),Ze(e)))))),t.payload&&r.createElement(R.a.Item,null,"Data payload: ",t.payload)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("div",{style:{marginBottom:"20px",paddingBottom:"10px",borderBottom:"2px solid #eee"}},r.createElement("h5",null,"Unlock Blocks")),r.createElement(r.Fragment,null,t.unlocks.map((e,t)=>r.createElement(st,{block:e,key:t}))))))}}var it=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let ct=class extends r.Component{render(){let{payload:e,blk:t}=this.props.explorerStore,n=t.txId,a=e;return r.createElement(p.a,null,r.createElement(ot,{txID:n,tx:a}))}};function pt(e){switch(e){case dt:return"MasterConflictID";case ut:return"UndefinedConflictID";case mt:return"LazyBookedConflictsConflictID";case ht:return"InvalidConflictID";default:return e}}ct=it([Object(s.b)("explorerStore"),s.c],ct);const dt="4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM",ut="11111111111111111111111111111111",mt="JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF",ht="JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG";var ft=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let bt=class extends r.Component{render(){let{payload:e}=this.props.explorerStore;return e&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address: ",e.address),r.createElement(R.a.Item,null,"Access Mana Pledge ID: ",e.accessManaPledgeID),r.createElement(R.a.Item,null,"Consensus Mana Pledge ID: ",e.consensusManaPledgeID),r.createElement(R.a.Item,null,"Nonce: ",e.nonce)))))}};bt=ft([Object(s.b)("explorerStore"),s.c],bt);var gt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let yt=class extends r.Component{render(){let{payload:e}=this.props.explorerStore;return e&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Tag: ",e.tag),r.createElement(R.a.Item,null,"Data: ",e.data)))))}};yt=gt([Object(s.b)("explorerStore"),s.c],yt);var Et=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let vt=class extends r.Component{componentDidMount(){this.props.explorerStore.resetSearch(),this.props.explorerStore.searchBlock(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}getSnapshotBeforeUpdate(e,t){return e.match.params.id!==this.props.match.params.id&&this.props.explorerStore.searchBlock(this.props.match.params.id),null}getPayloadType(){return Ce(this.props.explorerStore.blk.payloadType)}renderPayload(){switch(this.props.explorerStore.blk.payloadType){case ke.Transaction:return this.props.explorerStore.blk.objectivelyInvalid?r.createElement(et,null):r.createElement(ct,null);case ke.TaggedData:return r.createElement(yt,null);case ke.Faucet:return r.createElement(bt,null);default:return r.createElement(et,null)}}render(){let{id:e}=this.props.match.params,{blk:t,query_loading:n,query_err:a}=this.props.explorerStore;return e===Ge?r.createElement(p.a,null,r.createElement("h3",null,"Genesis Block"),r.createElement("p",null,"In the beginning there was the genesis.")):a?r.createElement(p.a,null,r.createElement("h3",null,"Block not available - 404"),r.createElement("p",null,"Block with ID ",e," not found.")):r.createElement(p.a,null,r.createElement("h3",null,"Block"),r.createElement("p",null,e," "," ",t&&r.createElement(r.Fragment,null,r.createElement("br",null),r.createElement("span",null,r.createElement(Q.a,{variant:"light",style:{marginRight:10}},"Issuance Time: ",F(new Date(1e3*t.issuanceTimestamp),"dd.mm.yyyy HH:MM:ss")),r.createElement(Q.a,{variant:"light"},"Solidification Time: ",F(new Date(1e3*t.solidificationTimestamp),"dd.mm.yyyy HH:MM:ss"))))),t&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Payload Type: ",this.getPayloadType()),r.createElement(R.a.Item,null,"Sequence Number: ",t.sequenceNumber),r.createElement(R.a.Item,null,"ConflictIDs:",r.createElement(R.a,null,t.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"AddedConflictIDs:",r.createElement(R.a,null,t.addedConflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"AddedConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"SubtractedConflictIDs:",r.createElement(R.a,null,t.subtractedConflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"SubtractedConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"Solid: ",t.solid?"Yes":"No"),r.createElement(R.a.Item,null,"Scheduled: ",t.scheduled?"Yes":"No"),r.createElement(R.a.Item,null,"Booked: ",t.booked?"Yes":"No"),r.createElement(R.a.Item,null,"Orphaned: ",t.orphaned?"Yes":"No"),r.createElement(R.a.Item,null,"Objectively Invalid: ",t.objectivelyInvalid?"Yes":"No"),r.createElement(R.a.Item,null,"Subjectively Invalid: ",t.subjectivelyInvalid?"Yes":"No"),r.createElement(R.a.Item,null,"Acceptance: ",t.acceptance?"Yes":"No"),r.createElement(R.a.Item,null,"Acceptance Time: ",F(new Date(1e3*t.acceptanceTime),"dd.mm.yyyy HH:MM:ss")),r.createElement(R.a.Item,null,"Confirmation: ",t.confirmation?"Yes":"No"),r.createElement(R.a.Item,null,"Confirmation Time: ",F(new Date(1e3*t.confirmationTime),"dd.mm.yyyy HH:MM:ss")),r.createElement(R.a.Item,null,"Confirmation by slot: ",t.confirmationBySlot?"Yes":"No"),r.createElement(R.a.Item,null,"Confirmation by slot time: ",F(new Date(1e3*t.confirmationBySlotTime),"dd.mm.yyyy HH:MM:ss"))))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("h5",null,"Slot Commitment"),r.createElement(R.a,null,r.createElement(R.a.Item,null,"CommitmentID: ",t.commitmentID),r.createElement(R.a.Item,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Index: ",t.commitment.index),r.createElement(R.a.Item,null,"prevID: ",t.commitment.prevID),r.createElement(R.a.Item,null,"rootsID: ",t.commitment.rootsID),r.createElement(R.a.Item,null,"Cumulative Weight: ",t.commitment.cumulativeWeight))),r.createElement(R.a.Item,null,"LatestConfirmedSlot: ",t.latestConfirmedSlot)))),!!t.rank&&r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("h5",null,"Markers"),r.createElement(R.a,null,r.createElement(R.a.Item,null,"Rank: ",t.rank),r.createElement(R.a.Item,null,"SequenceID: ",t.sequenceID),r.createElement(R.a.Item,null,"PastMarkerGap: ",t.pastMarkerGap),r.createElement(R.a.Item,null,"IsPastMarker: ",t.isPastMarker?"Yes":"No"),r.createElement(R.a.Item,null,"Past markers: ",t.pastMarkers)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"IssuerID: ",t.issuerID),r.createElement(R.a.Item,{style:{overflow:"auto"}},"Block Signature: ",t.signature)))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.strongParents.map((e,n)=>r.createElement(R.a.Item,{key:"Strong Parent"+n+1,className:"text-break"},"Strong Parents ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.strongParents[n]},t.strongParents[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.weakParents.map((e,n)=>r.createElement(R.a.Item,{key:"Weak Parent"+n+1,className:"text-break"},"Weak Parents ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.weakParents[n]},t.weakParents[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.shallowLikedParents.map((e,n)=>r.createElement(R.a.Item,{key:"Shallow Liked Parent"+n+1,className:"text-break"},"Shallow Liked Parents ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.shallowLikedParents[n]},t.shallowLikedParents[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.strongChildren.map((e,n)=>r.createElement(R.a.Item,{key:"Strong Child"+n+1,className:"text-break"},"Strong Child ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.strongChildren[n]},t.strongChildren[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.weakChildren.map((e,n)=>r.createElement(R.a.Item,{key:"Weak Child"+n+1,className:"text-break"},"Weak Child ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.weakChildren[n]},t.weakChildren[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.shallowLikeChildren.map((e,n)=>r.createElement(R.a.Item,{key:"ShallowLike Child"+n+1,className:"text-break"},"ShallowLike Child ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.shallowLikeChildren[n]},t.shallowLikeChildren[n])))))),r.createElement(d.a,{className:"mb-3",style:{marginTop:"20px",marginBottom:"20px"}},r.createElement(u.a,null,r.createElement("h3",null,"Payload"))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,this.renderPayload()))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,n&&r.createElement($e.a,{animation:"border"}))))}};vt=Et([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],vt);var It=n(289);function kt(e){let t="",n=Math.round(e);return t=n<1e3?n.toString(10)+" m":n<1e6?(n/1e3).toFixed(3)+" Km":n<1e9?(n/1e6).toFixed(3)+" Mm":n<1e12?(n/1e9).toFixed(3)+" Gm":n<1e15?(n/1e12).toFixed(3)+" Tm":(n/1e15).toFixed(3)+" Pm",t}var xt=n(281),St=n(99),jt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Ot=class extends r.Component{componentDidMount(){this.props.explorerStore.resetSearch(),this.props.explorerStore.searchAddress(this.props.match.params.id)}getSnapshotBeforeUpdate(e,t){return e.match.params.id!==this.props.match.params.id&&this.props.explorerStore.searchAddress(this.props.match.params.id),null}render(){let{id:e}=this.props.match.params,{addr:t,query_loading:n,query_err:a}=this.props.explorerStore,s=[],l=[],o=[];if(a)return r.createElement(p.a,null,r.createElement("h3",null,"Address not available - 404"),r.createElement("p",null,"Address ",e," not found."));if(t){t.explorerOutputs.forEach(e=>{e.metadata.consumerCount>0?s.push(e):l.push(e)});let e=(e,t)=>t.txTimestamp===e.txTimestamp?t.id.transactionID==e.id.transactionID?t.id.outputIndex-e.id.outputIndex:t.id.transactionID.localeCompare(e.id.transactionID):t.txTimestamp-e.txTimestamp;l.sort(e),s.sort(e)}return r.createElement(p.a,null,r.createElement("h3",{style:{marginBottom:"40px"}},"Address ",r.createElement("strong",null,e)," ",null!==t&&r.createElement("span",null,"(",t.explorerOutputs.length," Outputs)")),null!==t?r.createElement(r.Fragment,null,null!==t.explorerOutputs&&100===t.explorerOutputs.length&&r.createElement(It.a,{variant:"warning"},"Max. 100 outputs are shown."),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:7},r.createElement(R.a,null,r.createElement("h4",null,"Available Balances"),0===o.length?"There are no balances currently available.":r.createElement("div",null,r.createElement(xt.a,{style:{textAlign:"center"},key:"header"},r.createElement(d.a,null,r.createElement(u.a,{xs:9},r.createElement("strong",null,"Color")),r.createElement(u.a,null,r.createElement("strong",null,"Balance")))),o)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement("h4",null,"Unspent Outputs"),0===l.length?"There are no unspent outputs currently available.":r.createElement("div",null,l.map(e=>r.createElement(wt,{output:e})))))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement("h4",null,"Spent Outputs"),0===s.length?"There are no spent outputs currently available.":r.createElement("div",null,s.map(e=>r.createElement(wt,{output:e}))))))):r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,n&&r.createElement($e.a,{animation:"border"}))))}};Ot=jt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Ot);class wt extends r.Component{constructor(e){super(e),this.state={enabled:!1}}render(){return r.createElement(R.a.Item,null,r.createElement(St.a,{variant:Dt(this.props.output.output.type),onClick:()=>{this.setState({enabled:!this.state.enabled})},block:!0},r.createElement(d.a,null,r.createElement(u.a,{xs:6,style:{textAlign:"left"}},this.props.output.id.base58," "),r.createElement(u.a,{style:{textAlign:"left"}},function(e){switch(e){case je.Basic:return"Basic Output";case je.Alias:return"Alias Output";case je.Foundry:return"Foundry Output";case je.NFT:return"NFT Output";default:return}}(this.props.output.output.type)," "),r.createElement(u.a,{style:{textAlign:"left"}},new Date(1e3*this.props.output.txTimestamp).toLocaleString()))),r.createElement(d.a,{style:{fontSize:"90%"}},r.createElement(u.a,null,this.state.enabled?Ze(this.props.output.output):null),r.createElement(u.a,null,this.state.enabled?r.createElement(Ct,{metadata:this.props.output.metadata,timestamp:this.props.output.txTimestamp,pendingMana:this.props.output.pendingMana}):null)))}}class Ct extends r.Component{render(){let e=this.props.metadata,t=this.props.timestamp,n=this.props.pendingMana;return r.createElement(R.a,null,"ConflictIDs:",r.createElement(R.a,null,e.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e))))),r.createElement(R.a.Item,null,"Pending mana: ",kt(n)),r.createElement(R.a.Item,null,"Timestamp: ",new Date(1e3*t).toLocaleString()),r.createElement(R.a.Item,null,"Consumer Count: ",e.consumerCount),e.confirmedConsumer&&r.createElement(R.a.Item,null,"Confirmed Consumer: ",r.createElement("a",{href:"/explorer/transaction/"+e.confirmedConsumer},e.confirmedConsumer)," "))}}let Dt=e=>{switch(e){case je.Basic:case je.Alias:return"light";case je.Foundry:return"success";case je.NFT:return"info";default:return"danger"}};var Rt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let _t=class extends r.Component{render(){let{search:e}=this.props.match.params;return r.createElement(p.a,null,r.createElement("h3",null,"Tangle Explorer 404"),r.createElement("p",null,"The search via '",e,"' did not yield any results."))}};_t=Rt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],_t);var Nt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const Tt=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},showXLabels:10,gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return _(Math.abs(e))},maxTicksLimit:3,fontSize:10}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${_(Math.abs(e.value))}`}}}},I);let Pt=class extends r.Component{render(){let e=this.props.nodeStore.neighbor_metrics.get(this.props.identity),t=e.current;return r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,r.createElement("h5",null,t.id)),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,{variant:"flush",as:"small"},r.createElement(R.a.Item,null,"Origin:"," ",t.connection_origin))),r.createElement(u.a,null,r.createElement(R.a,{variant:"flush",as:"small"},r.createElement(R.a.Item,null,"Address: ",t.address)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("h6",null,"Network (Tx/Rx)"),r.createElement(Q.a,{pill:!0,variant:"light"},"Total: ",t.packets_written," / ",t.packets_read)," ",r.createElement(Q.a,{pill:!0,variant:"light"},"Current: ",_(e.currentNetIO&&e.currentNetIO.tx)," / ",_(e.currentNetIO&&e.currentNetIO.rx)),r.createElement(v.Line,{height:30,data:e.netIOSeries,options:Tt})))))))}};Pt=Nt([Object(s.b)("nodeStore"),s.c],Pt);var Mt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Lt=class extends r.Component{render(){let e=[];return this.props.nodeStore.neighbor_metrics.forEach((t,n)=>{e.push(r.createElement(Pt,{key:n,identity:n}))}),r.createElement(p.a,null,r.createElement("h3",null,"Neighbors ",e.length>0&&r.createElement("span",null,"(",e.length,")")),r.createElement("p",null,"Currently connected neighbors."),e)}};Lt=Mt([Object(s.b)("nodeStore"),s.c],Lt);var At=n(57),Bt=n(103),zt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Ht=class extends r.Component{constructor(){super(...arguments),this.updateVerticesLimit=e=>{this.props.visualizerStore.updateVerticesLimit(e.target.value)},this.pauseResumeVisualizer=e=>{this.props.visualizerStore.pauseResume()},this.updateSearch=e=>{this.props.visualizerStore.updateSearch(e.target.value)},this.searchAndHighlight=e=>{"Enter"===e.key&&this.props.visualizerStore.searchAndHighlight()},this.toggleBackgroundDataCollection=()=>{this.props.nodeStore.collecting?this.props.nodeStore.unregisterHandlers():this.props.nodeStore.registerHandlers()}}componentDidMount(){this.props.visualizerStore.start()}componentWillUnmount(){this.props.visualizerStore.stop(),this.props.nodeStore.registerHandlers()}render(){let{vertices:e,finalized_count:t,selected:n,verticesLimit:a,tips_count:s,paused:l,search:o}=this.props.visualizerStore,{last_mps_metric:i,collecting:c}=this.props.nodeStore;return r.createElement(p.a,null,r.createElement("h3",null,"Visualizer"),r.createElement(d.a,{className:"mb-1"},r.createElement(u.a,{xs:5},r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement($.a.Prepend,null,r.createElement($.a.Text,{id:"vertices-limit"},"Vertices Limit")),r.createElement(K.a,{placeholder:"limit",type:"number",value:a.toString(),onChange:this.updateVerticesLimit,"aria-label":"vertices-limit","aria-describedby":"vertices-limit"})),r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement($.a.Prepend,null,r.createElement($.a.Text,{id:"vertices-limit"},"Search Vertex")),r.createElement(K.a,{placeholder:"search",type:"text",value:o,onChange:this.updateSearch,"aria-label":"vertices-search",onKeyUp:this.searchAndHighlight,"aria-describedby":"vertices-search"})),r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement(Bt.a,{trigger:["hover","focus"],placement:"right",overlay:r.createElement(At.a,{id:"popover-basic"},r.createElement(At.a.Content,null,"Ensures that only data needed for the visualizer is collected."))},r.createElement(St.a,{variant:"outline-secondary",onClick:this.toggleBackgroundDataCollection,size:"sm"},c?"Stop Background Data Collection":"Collect Background data")),r.createElement("br",null)),r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement(Bt.a,{trigger:["hover","focus"],placement:"right",overlay:r.createElement(At.a,{id:"popover-basic"},r.createElement(At.a.Content,null,"Pauses/resumes rendering the graph."))},r.createElement(St.a,{onClick:this.pauseResumeVisualizer,size:"sm",variant:"outline-secondary"},l?"Resume Rendering":"Pause Rendering")))),r.createElement(u.a,{xs:{span:5,offset:2}},r.createElement("p",null,r.createElement(Q.a,{pill:!0,style:{background:"#b9b7bd",color:"white"}},"BLK Pending")," ",r.createElement(Q.a,{pill:!0,style:{background:"#6c71c4",color:"white"}},"BLK Confirmed")," ",r.createElement(Q.a,{pill:!0,style:{background:"#393e46",color:"white"}},"TX Pending")," ",r.createElement(Q.a,{pill:!0,style:{background:"#fad02c",color:"white"}},"TX Confirmed")," ",r.createElement(Q.a,{pill:!0,style:{background:"#cb4b16",color:"white"}},"Tip")," ",r.createElement(Q.a,{pill:!0,style:{background:"#b58900",color:"white"}},"Unknown"),r.createElement("br",null),"Vertices: ",e.size,", Tips: ",s,", Confirmed/UnConfirmed: ",t,"/",e.size-t,","," ","BPS: ",i.mps,r.createElement("br",null),"Selected: ",n?r.createElement(H.Link,{to:"/explorer/block/"+n.id},n.id.substr(0,10)):"-",r.createElement("br",null),n?n.strongParents&&r.createElement("span",null," Strong:"," ",n.strongParents.map(e=>r.createElement(H.Link,{to:"/explorer/block/"+e},e.substr(0,10)+" "))):"",r.createElement("br",null),n?n.weakParents&&r.createElement("span",null," Weak:"," ",n.weakParents.map(e=>r.createElement(H.Link,{to:"/explorer/block/"+e},e.substr(0,10)+" "))):"",r.createElement("br",null),n?n.shallowLikedParents&&r.createElement("span",null," Shallow Liked:"," ",n.shallowLikedParents.map(e=>r.createElement(H.Link,{to:"/explorer/block/"+e},e.substr(0,10)+" "))):""))),r.createElement("div",{className:"visualizer",style:{zIndex:-1,position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"#ededed"},id:"visualizer"}))}};Ht=zt([Object(s.b)("visualizerStore"),Object(s.b)("nodeStore"),s.c],Ht);var Ft=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Vt=class extends r.Component{componentDidMount(){this.props.explorerStore.getTips()}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{tipsList:e}=this.props.explorerStore;return r.createElement(p.a,null,r.createElement("h3",null,"Tips"),r.createElement(te.a,{bordered:!0},r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"BlockID"))),r.createElement("tbody",null,e)))}};Vt=Ft([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Vt);var Zt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Ut=class extends r.Component{componentDidMount(){this.props.explorerStore.getTransaction(this.props.txId)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{txId:e}=this.props,{query_err:t,tx:n}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Transaction not available - 404"),r.createElement("p",null,"Transaction with ID ",e," not found.")):r.createElement(ot,{txID:e,tx:n})}};Ut=Zt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Ut);var Wt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Jt=class extends r.Component{componentDidMount(){this.props.explorerStore.getTransactionMetadata(this.props.txId)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{txId:e}=this.props,{query_err:t,txMetadata:n}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Metadata"),r.createElement("p",null," Metadata for transaction ID ",e," not found.")):r.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},r.createElement("h4",null,"Metadata"),n&&r.createElement(R.a,null,r.createElement(R.a.Item,null,"ConflictIDs:",r.createElement(R.a,null,n.conflictIDs&&n.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement("a",{href:"/explorer/transaction/"+e},e))))),r.createElement(R.a.Item,null,"Booked: ",n.booked.toString()),r.createElement(R.a.Item,null,"Confirmation State: ",n.confirmationState)))}};Jt=Wt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Jt);var Gt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let qt=class extends r.Component{componentDidMount(){this.props.explorerStore.getTransactionAttachments(this.props.txId)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{txAttachments:e}=this.props.explorerStore;return r.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},r.createElement("h4",null,"Attachments"),e&&e.blockIDs&&r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,e.blockIDs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/block/"+e},e)))))))}};qt=Gt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],qt);class Xt extends r.Component{render(){let{id:e}=this.props.match.params;return r.createElement(p.a,null,r.createElement(Ut,{txId:e}),r.createElement(Jt,{txId:e}),r.createElement(qt,{txId:e}))}}var Qt;function Kt(e){switch(e){case Qt.Undefined:return"Undefined";case Qt.Rejected:return"Rejected";case Qt.Pending:return"Pending";case Qt.Accepted:return"Accepted";case Qt.Confirmed:return"Confirmed";default:return"Undefined Confirmation State"}}!function(e){e[e.Undefined=0]="Undefined",e[e.Rejected=1]="Rejected",e[e.Pending=2]="Pending",e[e.Accepted=3]="Accepted",e[e.Confirmed=4]="Confirmed"}(Qt||(Qt={}));var $t=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Yt=class extends r.Component{componentDidMount(){this.props.explorerStore.getOutput(this.props.match.params.id),this.props.explorerStore.getPendingMana(this.props.match.params.id),this.props.explorerStore.getOutputMetadata(this.props.match.params.id),this.props.explorerStore.getOutputConsumers(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{id:e}=this.props.match.params,{query_err:t,output:n,pendingMana:a,outputMetadata:s,outputConsumers:l}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Output not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Output"),n&&r.createElement("div",{className:"mb-2"},Ze(n),r.createElement(R.a,null,a&&r.createElement(R.a.Item,null,"Pending Mana",r.createElement("hr",null),r.createElement("div",null,"Value: ",kt(a.mana)),r.createElement("div",null,"Timestamp: ",new Date(1e3*a.timestamp).toLocaleString())))),r.createElement("h4",null,"Metadata"),s&&r.createElement("div",{className:"mb-2"},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Transaction ID: ",r.createElement("a",{href:"/explorer/transaction/"+s.outputID.transactionID},s.outputID.transactionID)," "),"ConflictIDs:",r.createElement(R.a,null,s.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e))))),r.createElement(R.a.Item,null,"Consumer Count: ",s.consumerCount),r.createElement(R.a.Item,null,"Confirmed Consumer: ",r.createElement("a",{href:"/explorer/transaction/"+s.confirmedConsumer},s.confirmedConsumer)," "),r.createElement(R.a.Item,null,"Confirmation State: ",Kt(s.confirmationState)),r.createElement(R.a.Item,null,"Confirmation State Time: ",new Date(1e3*s.confirmationStateTime).toLocaleString()))),r.createElement("h4",null,"Consumers"),l&&r.createElement("div",null,r.createElement(R.a,null,l.consumers.map((e,t)=>{return r.createElement(R.a.Item,{key:t},r.createElement("div",null,"Transaction ID: ",r.createElement("a",{href:"/explorer/transaction/"+e.transactionID},e.transactionID)),r.createElement("div",null,"Valid: ","true"===(n=e.valid)?r.createElement(Q.a,{variant:"success"},"True"):"false"===n?r.createElement(Q.a,{variant:"danger"},"False"):r.createElement(Q.a,{variant:"warning"},"Maybe")," "));var n}))))}};Yt=$t([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Yt);var en=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let tn=class extends r.Component{componentDidMount(){this.props.explorerStore.getConflict(this.props.match.params.id),this.props.explorerStore.getConflictChildren(this.props.match.params.id),this.props.explorerStore.getConflictConflicts(this.props.match.params.id),this.props.explorerStore.getConflictVoters(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{id:e}=this.props.match.params,{query_err:t,conflict:n,conflictChildren:a,conflictConflicts:s,conflictVoters:l}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Conflict not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Conflict"),n&&r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",pt(n.id)),r.createElement(R.a.Item,null,"Parents:",r.createElement(R.a,null,n.parents.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"Conflicts:",n.conflictIDs&&r.createElement(R.a,null,n.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e))))),r.createElement(R.a.Item,null,"ConfirmationState: ",Kt(n.confirmationState)),r.createElement(R.a.Item,null," Children:",a&&r.createElement(R.a,null,a.childConflicts.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/conflict/"+e.conflictID},pt(e.conflictID)))))),r.createElement(R.a.Item,null," Conflicts:",s&&r.createElement(R.a,null,s.conflicts.map((e,t)=>r.createElement("div",{key:t},"OutputID: ",r.createElement("a",{href:"/explorer/output/"+e.outputID.base58},e.outputID.base58),r.createElement(R.a,{className:"mb-2"},e.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/conflict/"+e},pt(e))))))))),r.createElement(R.a.Item,null," Voters:",l&&r.createElement(R.a,null,l.voters.map((e,t)=>r.createElement(R.a.Item,{key:e+t},e))))))}};tn=en([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],tn);var nn=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let rn=class extends r.Component{render(){let{slotLiveFeed:e}=this.props.slotStore;return r.createElement(p.a,null,r.createElement("h3",null,"Slots"),r.createElement(te.a,{bordered:!0},r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"Index"),r.createElement("th",null,"Commitment ID"))),r.createElement("tbody",null,e)))}};rn=nn([Object(s.b)("nodeStore"),Object(s.b)("slotStore"),s.c],rn);var an=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let sn=class extends r.Component{componentDidMount(){const e=this.props.match.params.commitment;this.props.explorerStore.getSlotDetails(e)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{commitment:e}=this.props.match.params,{query_err:t,slotInfo:n}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Slot not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Slot"),n&&r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",e),r.createElement(R.a.Item,null,"Index: ",n.index),r.createElement(R.a.Item,null,"RootsID: ",n.rootsID),r.createElement(R.a.Item,null,"PrevEC: ",n.prevID),r.createElement(R.a.Item,null,"Cumulative Weight: ",n.cumulativeWeight),r.createElement(R.a.Item,null,"Blocks:",n.blocks&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.blocks.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/block/"+e},e)))))))))),r.createElement(R.a.Item,null,"Transactions:",n.transactions&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.transactions.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/transaction/"+e},e)))))))))),r.createElement(R.a.Item,null," Created outputs:",n.createdOutputs&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.createdOutputs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e)))))))))),r.createElement(R.a.Item,null," Spent outputs:",n.spentOutputs&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.spentOutputs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e))))))))))))}};sn=an([Object(s.b)("explorerStore"),s.c],sn);var ln=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let on=class extends r.Component{renderDevTool(){0}componentDidMount(){this.props.nodeStore.connect()}render(){return r.createElement("div",{className:"container"},r.createElement(i.a,{expand:"lg",bg:"light",variant:"light",className:"mb-4"},r.createElement(i.a.Brand,null,"iota-core"),r.createElement(c.a,{className:"mr-auto"},r.createElement(ge.LinkContainer,{to:"/dashboard"},r.createElement(c.a.Link,null,"Dashboard")),r.createElement(ge.LinkContainer,{to:"/neighbors"},r.createElement(c.a.Link,null,"Neighbors")),r.createElement(ge.LinkContainer,{to:"/explorer"},r.createElement(c.a.Link,null,"Explorer")),r.createElement(ge.LinkContainer,{to:"/visualizer"},r.createElement(c.a.Link,null,"Visualizer")),r.createElement(ge.LinkContainer,{to:"/slots"},r.createElement(c.a.Link,null,"Slot")),r.createElement(ge.LinkContainer,{to:"/tips"},r.createElement(c.a.Link,null,"Tips"))),r.createElement(i.a.Collapse,{className:"justify-content-end"},r.createElement(he,null),r.createElement(i.a.Text,null,!this.props.nodeStore.websocketConnected&&r.createElement(Q.a,{variant:"danger"},"WS not connected!")))),r.createElement(be.g,null,r.createElement(be.d,{exact:!0,path:"/dashboard",component:X}),r.createElement(be.d,{exact:!0,path:"/neighbors",component:Lt}),r.createElement(be.d,{exact:!0,path:"/explorer/block/:id",component:vt}),r.createElement(be.d,{exact:!0,path:"/explorer/address/:id",component:Ot}),r.createElement(be.d,{exact:!0,path:"/explorer/transaction/:id",component:Xt}),r.createElement(be.d,{exact:!0,path:"/explorer/output/:id",component:Yt}),r.createElement(be.d,{exact:!0,path:"/explorer/conflict/:id",component:tn}),r.createElement(be.d,{exact:!0,path:"/explorer/slot/commitment/:commitment",component:sn}),r.createElement(be.d,{exact:!0,path:"/explorer/404/:search",component:_t}),r.createElement(be.d,{exact:!0,path:"/slots",component:rn}),r.createElement(be.d,{exact:!0,path:"/tips",component:Vt}),r.createElement(be.d,{exact:!0,path:"/explorer",component:de}),r.createElement(be.d,{exact:!0,path:"/visualizer",component:Ht}),r.createElement(be.d,{exact:!0,path:"/visualizer/history",component:Ht}),r.createElement(be.c,{to:"/dashboard"})),this.props.children,this.renderDevTool())}};on=ln([Object(s.b)("nodeStore"),Object(s.b)("routerStore"),s.c],on);const cn=Object(o.hot)(({history:e})=>r.createElement(on,{history:e}));var pn=n(102),dn=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},un=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class mn{}class hn{constructor(){this.mem=new bn,this.scheduler=new En}}class fn{}class bn{}class gn{}class yn{}class En{}class vn{constructor(){this.collected=[],this.network_io=[]}addMetric(e){e.ts=F(Date.now(),"HH:MM:ss"),this.collected.push(e),this.collected.length>Sn&&this.collected.shift();let t=this.currentNetIO;t&&(this.network_io.length>Sn&&this.network_io.shift(),this.network_io.push(t))}get current(){return this.collected[this.collected.length-1]}get secondLast(){let e=this.collected.length-2;if(!(e<0))return this.collected[e]}get currentNetIO(){return this.current&&this.secondLast?{tx:this.current.packets_written-this.secondLast.packets_written,rx:this.current.packets_read-this.secondLast.packets_read,ts:F(new Date,"HH:MM:ss")}:null}get netIOSeries(){let e=Object.assign({},kn,xn("Tx","rgba(53, 180, 219,1)","rgba(53, 180, 219,0.4)")),t=Object.assign({},kn,xn("Rx","rgba(235, 134, 52)","rgba(235, 134, 52,0.4)")),n=[];for(let r=0;r{ve(fe.Status,this.updateStatus),ve(fe.BPSMetrics,e=>{this.addBPSMetric(this.updateLastBPSMetric(e))}),ve(fe.NeighborStats,this.updateNeighborMetrics),ve(fe.TipsMetrics,this.updateLastTipsMetric),ve(fe.ComponentCounterMetrics,this.updateLastComponentMetric),ve(fe.RateSetter,this.updateLastRateSetterMetric),this.updateCollecting(!0)},this.unregisterHandlers=()=>{Ie(fe.Status),Ie(fe.BPSMetrics),Ie(fe.NeighborStats),Ie(fe.TipsMetrics),Ie(fe.ComponentCounterMetrics),Ie(fe.RateSetter),this.updateCollecting(!1)},this.updateCollecting=e=>{this.collecting=e},this.updateWebSocketConnected=e=>this.websocketConnected=e,this.updateStatus=e=>{e.mem.ts=F(Date.now(),"HH:MM:ss"),this.collected_mem_metrics.length>Sn&&this.collected_mem_metrics.shift(),this.collected_mem_metrics.push(e.mem),this.status=e,e.scheduler.ts=F(Date.now(),"HH:MM:ss"),this.collected_scheduler_metrics.length>Sn&&this.collected_scheduler_metrics.shift(),this.collected_scheduler_metrics.push(e.scheduler)},this.updateNeighborMetrics=e=>{if(!e)return;let t=[];for(let n=0;n{e.ts=F(Date.now(),"HH:MM:ss"),this.last_rate_setter_metric=e,this.collected_rate_setter_metrics.length>Sn&&this.collected_rate_setter_metrics.shift(),this.collected_rate_setter_metrics.push(e)},this.updateLastBPSMetric=e=>{let t=new mn;return t.mps=e,t.ts=F(Date.now(),"HH:MM:ss"),this.last_mps_metric=t,t},this.addBPSMetric=e=>{this.collected_mps_metrics.length>Sn&&this.collected_mps_metrics.shift(),this.collected_mps_metrics.push(e)},this.updateLastTipsMetric=e=>{e.ts=F(Date.now(),"HH:MM:ss"),this.last_tips_metric=e,this.collected_tips_metrics.length>Sn&&this.collected_tips_metrics.shift(),this.collected_tips_metrics.push(e)},this.updateLastComponentMetric=e=>{e.ts=F(Date.now(),"HH:MM:ss"),this.last_component_counter_metric=e,this.collected_component_counter_metrics.length>Sn&&this.collected_component_counter_metrics.shift(),this.collected_component_counter_metrics.push(e)},this.status.tangleTime=new fn,this.status.tangleTime.ATT=0,this.status.tangleTime.RATT=0,this.status.tangleTime.CTT=0,this.status.tangleTime.RCTT=0,this.registerHandlers()}reset(){this.collected_mps_metrics=[],this.collected_mem_metrics=[],this.collected_scheduler_metrics=[],this.neighbor_metrics=new ye.ObservableMap,this.collected_tips_metrics=[],this.collected_component_counter_metrics=[]}reconnect(){this.updateWebSocketConnected(!1),setTimeout(()=>{this.connect()},5e3)}connect(){!function(e,t,n,r){let a=window.location,s="ws:";"https:"===a.protocol&&(s="wss:"),s+="//"+a.host+e;let l=new WebSocket(s);l.onopen=t,l.onclose=n,l.onerror=r,l.onmessage=e=>{let t=JSON.parse(e.data),n=Ee[t.type];n&&n(t.data)}}("/ws",()=>this.updateWebSocketConnected(!0),()=>this.reconnect(),()=>this.updateWebSocketConnected(!1))}get mpsSeries(){let e=Object.assign({},kn,xn("BPS","rgba(67, 196, 99,1)","rgba(67, 196, 99,0.4)")),t=[];for(let n=0;n1&&(a+=e+" Days, "),t>=0&&(a+=t<10?"0"+t+":":t+":"),n>=0&&(a+=n<10?"0"+n+":":n+":"),r>=0&&(a+=r<10?"0"+r:r),a}get memSeries(){let e=Object.assign({},kn,xn("Heap Sys","rgba(168, 50, 76,1)","rgba(168, 50, 76,0.4)")),t=Object.assign({},kn,xn("Heap Alloc","rgba(222, 49, 87,1)","rgba(222, 49, 87,0.4)")),n=Object.assign({},kn,xn("Heap Idle","rgba(222, 49, 182,1)","rgba(222, 49, 182,0.4)")),r=Object.assign({},kn,xn("Heap Released","rgba(250, 76, 252,1)","rgba(250, 76, 252,0.4)")),a=[];for(let s=0;s=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},Dn=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},Rn=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};!function(e){e[e.NotFound=0]="NotFound"}(On||(On={}));class _n{constructor(e){this.send_addr="",this.send_access_mana_node_id="",this.send_consensus_mana_node_id="",this.sending=!1,this.sendResult=null,this.query_error="",this.sendReq=()=>Rn(this,void 0,void 0,(function*(){this.updateSending(!0);try{let e=yield fetch(`/api/faucet/${this.send_addr}?accessMana=${this.send_access_mana_node_id}&consensusMana=${this.send_consensus_mana_node_id}`);if(200!==e.status)return void this.updateQueryError(On.NotFound);let t=yield e.json();setTimeout(()=>{this.updateSendResult(t)},2e3)}catch(e){this.updateQueryError(e)}})),this.updateSendResult=e=>{this.sending=!1,this.sendResult=e,this.routerStore.history.push("/explorer/address/"+this.send_addr)},this.updateSend=e=>{this.send_addr=e},this.updateSendAccessManaNodeID=e=>{this.send_access_mana_node_id=e},this.updateSendConsensusManaNodeID=e=>{this.send_consensus_mana_node_id=e},this.updateSending=e=>{this.sending=e,this.query_error=""},this.reset=()=>{this.send_addr=null,this.send_access_mana_node_id="",this.send_consensus_mana_node_id="",this.sending=!1,this.query_error=""},this.updateQueryError=e=>{this.sending=!1,this.query_error=e},this.routerStore=e}}Cn([ye.observable,Dn("design:type",String)],_n.prototype,"send_addr",void 0),Cn([ye.observable,Dn("design:type",String)],_n.prototype,"send_access_mana_node_id",void 0),Cn([ye.observable,Dn("design:type",String)],_n.prototype,"send_consensus_mana_node_id",void 0),Cn([ye.observable,Dn("design:type",Boolean)],_n.prototype,"sending",void 0),Cn([ye.observable,Dn("design:type",class{})],_n.prototype,"sendResult",void 0),Cn([ye.observable,Dn("design:type",String)],_n.prototype,"query_error",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSendResult",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSend",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSendAccessManaNodeID",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSendConsensusManaNodeID",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSending",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"reset",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateQueryError",void 0);var Nn=_n,Tn=n(35),Pn=n.n(Tn),Mn=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},Ln=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},An=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};class Bn{}const zn="#b9b7bd",Hn="#6c71c4",Fn="#393e46",Vn="#fad02c",Zn="#cb4b16",Un="#b58900",Wn="#586e75",Jn="#e105f5",Gn="#51e05d",qn="#859900";class Xn{constructor(e){this.vertices=new ye.ObservableMap,this.verticesLimit=1500,this.finalized_count=0,this.tips_count=0,this.verticesIncomingOrder=[],this.draw=!1,this.selected_via_click=!1,this.selected_origin_color=0,this.search="",this.paused=!1,this.fetchHistory=()=>An(this,void 0,void 0,(function*(){try{let e=yield fetch("/api/visualizer/history");(yield e.json()).vertices.forEach(e=>{this.addVertex(e)})}catch(e){console.log("Fail to fetch history in visualizer",e)}})),this.updateSearch=e=>{this.search=e.trim()},this.searchAndHighlight=()=>{if(this.clearSelected(),!this.search)return;let e=this.vertices.keys(),t=null;for(const n of e)if(n.indexOf(this.search)>=0){t=n;break}t&&this.updateSelected(this.vertices.get(t),!1)},this.pauseResume=()=>{if(this.paused)return this.renderer.resume(),void(this.paused=!1);this.renderer.pause(),this.paused=!0},this.updateVerticesLimit=e=>{this.verticesLimit=e},this.updateTxStatus=e=>{let t=this.vertices.get(e.id);t&&(t.is_tx_accepted=e.is_tx_accepted,this.vertices.set(e.id,t),this.draw&&this.drawVertex(t))},this.addVertex=e=>{let t=this.vertices.get(e.id);t?!t.is_blk_confirmed&&e.is_blk_confirmed&&this.finalized_count++:(e.is_blk_confirmed&&this.finalized_count++,this.verticesIncomingOrder.push(e.id),this.checkLimit()),this.vertices.set(e.id,e),this.draw&&this.drawVertex(e)},this.addTipInfo=e=>An(this,void 0,void 0,(function*(){let t=this.vertices.get(e.id);if(!t){t=new Bn,t.id=e.id;let n=yield fetch("/api/block/"+e.id);if(200===n.status){let e=yield n.json();t.strongParents=e.strongParents,t.weakParents=e.weakParents,t.shallowLikedParents=e.shallowLikedParents,t.is_blk_confirmed=e.acceptance}this.verticesIncomingOrder.push(t.id)}this.tips_count+=e.is_tip?1:t.is_tip?-1:0,t.is_tip=e.is_tip,this.vertices.set(e.id,t),this.draw&&this.drawVertex(t)})),this.checkLimit=()=>{for(;this.verticesIncomingOrder.length>this.verticesLimit;){let e=this.verticesIncomingOrder.shift(),t=this.vertices.get(e);this.selected&&e===this.selected.id&&this.clearSelected(),this.draw&&this.graph.removeNode(e),t&&(t.is_blk_confirmed&&this.finalized_count--,t.is_tip&&this.tips_count--,this.vertices.delete(e))}},this.drawVertex=e=>{let t=this.graph.getNode(e.id);if(t){this.graphics.getNodeUI(e.id).color=$n(this.colorForVertexState(e))}else t=this.graph.addNode(e.id,e);e.strongParents&&this.linkParents(e,t,e.strongParents),e.weakParents&&this.linkParents(e,t,e.weakParents),e.shallowLikedParents&&this.linkParents(e,t,e.shallowLikedParents)},this.linkParents=(e,t,n)=>{n.forEach(n=>{if(n&&(!t.links||!t.links.some(e=>e.fromId===n))){this.graph.getNode(n)?this.graph.addLink(n,e.id):console.log("link not added, parent doesn't exist",n)}})},this.colorForVertexState=e=>e?e.is_blk_confirmed?e.is_tx?e.is_tx_accepted?Vn:Fn:Hn:e.is_tip?Zn:e.is_tx?Fn:zn:Un,this.start=()=>{this.draw=!0,this.graph=Pn.a.Graph.graph();let e=Pn.a.Graph.View.webglGraphics();const t=Pn.a.Graph.Layout.forceDirected(this.graph,{springLength:10,springCoeff:1e-4,stableThreshold:.15,gravity:-2,dragCoeff:.02,timeStep:20,theta:.8});e.node(e=>e.data?Pn.a.Graph.View.webglSquare(20,this.colorForVertexState(e.data)):Pn.a.Graph.View.webglSquare(10,this.colorForVertexState(e.data))),e.link(()=>Pn.a.Graph.View.webglLine(Wn));let n=document.getElementById("visualizer");this.renderer=Pn.a.Graph.View.renderer(this.graph,{container:n,graphics:e,layout:t});let r=Pn.a.Graph.webglInputEvents(e,this.graph);r.mouseEnter(e=>{this.clearSelected(!0),this.updateSelected(e.data)}).mouseLeave(e=>{this.clearSelected(!1)}),r.click(e=>{this.clearSelected(!0),this.updateSelected(e.data,!0)}),this.graphics=e,this.renderer.run(),this.verticesIncomingOrder.forEach(e=>{let t=this.vertices.get(e);t&&this.drawVertex(t)})},this.stop=()=>{this.draw=!1,this.renderer.dispose(),this.graph=null,this.paused=!1,this.selected=null},this.updateSelected=(e,t)=>{if(!e)return;this.selected=e,this.selected_via_click=!!t;let n=this.graphics.getNodeUI(e.id);this.selected_origin_color=n.color,n.color=$n(qn),n.size=30;let r=this.graph.getNode(e.id);Kn(this.graph,r,e=>{},!0,e=>{this.graphics.getLinkUI(e.id).color=$n(Gn)},[]),Kn(this.graph,r,e=>{},!1,e=>{this.graphics.getLinkUI(e.id).color=$n(Jn)},[])},this.resetLinks=()=>{this.graph.forEachLink((function(e){this.graphics.getLinkUI(e.id).color=$n(Wn)}))},this.clearSelected=e=>{if(!this.selected||this.selected_via_click&&!e)return;let t=this.graph.getNode(this.selected.id);if(!t)return void this.resetLinks();let n=this.graphics.getNodeUI(this.selected.id);n.color=this.selected_origin_color,n.size=20;Kn(this.graph,t,e=>{},!0,e=>{this.graphics.getLinkUI(e.id).color=$n(Wn)},[]),Kn(this.graph,t,e=>{},!1,e=>{this.graphics.getLinkUI(e.id).color=$n(Wn)},[]),this.selected=null,this.selected_via_click=!1},this.routerStore=e,ve(fe.Vertex,this.addVertex),ve(fe.TipInfo,this.addTipInfo),ve(fe.TXAccepted,this.updateTxStatus)}}Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"vertices",void 0),Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"verticesLimit",void 0),Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"finalized_count",void 0),Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"tips_count",void 0),Mn([ye.observable,Ln("design:type",Bn)],Xn.prototype,"selected",void 0),Mn([ye.observable,Ln("design:type",String)],Xn.prototype,"search",void 0),Mn([ye.observable,Ln("design:type",Boolean)],Xn.prototype,"paused",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateSearch",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"searchAndHighlight",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"pauseResume",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateVerticesLimit",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateTxStatus",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"addVertex",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"addTipInfo",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"checkLimit",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateSelected",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"clearSelected",void 0);var Qn=Xn;function Kn(e,t,n,r,a=!1,s=[]){s.push(t);let l=0;for(;s.length>l;){const t=s[l++];if(n(t))return!0;if(!t.links)return;for(const n of t.links)r||n.toId!==t.id||s.includes(e.getNode(n.fromId))?r&&n.fromId===t.id&&!s.includes(e.getNode(n.toId))&&(a&&a(n),s.push(e.getNode(n.toId))):(a&&a(n),s.push(e.getNode(n.fromId)))}}function $n(e){let t=10414335;if("number"==typeof e)return e;if("string"==typeof e&&e)if(4===e.length&&(e=e.replace(/([^#])/g,"$1$1")),9===e.length)t=parseInt(e.substr(1),16);else{if(7!==e.length)throw'Color expected in hex format with preceding "#". E.g. #00ff00. Got value: '+e;t=parseInt(e.substr(1),16)<<8|255}return t}var Yn=n(286),er=n.n(Yn),tr=n(287),nr=n.n(tr),rr=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},ar=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class sr{constructor(e,t,n){this.nodeID=e,this.time=t,this.txID=n}}class lr extends sr{constructor(e,t,n,r){super(e,t,n),this.amount=r}}class or extends sr{constructor(e,t,n,r){super(e,t,n),this.amount=r}}const ir=r.createElement("tr",null,r.createElement("td",{key:"emptyRow",colSpan:4},"There are no nodes to view with the current search parameters.")),cr=r.createElement(xt.a,{key:"emptyItem"},"There are no events to view with the current search parameters.");class pr{constructor(){this.manaValues=[],this.prevManaValues=[0,0],this.accessNetworkRichest=[],this.totalAccessNetwork=0,this.accessActiveRichest=[],this.totalAccessActive=0,this.consensusNetworkRichest=[],this.totalConsensusNetwork=0,this.consensusActiveRichest=[],this.totalConsensusActive=0,this.searchNode="",this.searchTxID="",this.accessEvents=[],this.consensusEvents=[],this.initAccessEvents=[],this.initConsensusEvents=[],this.lastRemovedAccessEventTime=null,this.lastRemovedConsensusEventTime=null,this.lastInitRemovedAccessEventTime=null,this.lastInitRemovedConsensusEventTime=null,this.eventsUpdated=!1,this.displayedAccessEvents=[],this.displayedConsensusEvents=[],this.nodeNotSyncedListItem=r.createElement(xt.a,null,"Wait for node to be synced to display mana events."),this.addNewManaValue=e=>{this.ownID=this.ownID?this.ownID:e.nodeID,100===this.manaValues.length&&this.manaValues.shift();let t=[new Date(1e3*e.time),e.access,e.consensus];this.manaValues.length>0&&(this.prevManaValues=[this.manaValues[this.manaValues.length-1][1],this.manaValues[this.manaValues.length-1][2]]),this.manaValues.push(t)},this.updateNetworkRichest=e=>{switch(e.manaType){case"Access":this.totalAccessNetwork=e.totalMana,this.accessNetworkRichest=e.nodes;break;case"Consensus":this.totalConsensusNetwork=e.totalMana,this.consensusNetworkRichest=e.nodes}},this.updateActiveRichest=e=>{switch(e.manaType){case"Access":this.totalAccessActive=e.totalMana,this.accessActiveRichest=e.nodes;break;case"Consensus":this.totalConsensusActive=e.totalMana,this.consensusActiveRichest=e.nodes}},this.updateAllowedPledgeIDs=e=>{this.allowedPledgeIDs=e},this.addNewInitPledge=e=>{let t=[];switch(e.manaType){case"Access":if(t=this.initAccessEvents,t.length>=100){let e=t.shift();this.lastInitRemovedAccessEventTime=e.time}break;case"Consensus":if(t=this.initConsensusEvents,t.length>=100){let e=t.shift();this.lastInitRemovedConsensusEventTime=e.time}break;default:return}let n=new lr(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n)},this.addNewPledge=e=>{let t=[];switch(e.manaType){case"Access":if(t=this.accessEvents,t.length>=100){let e=t.shift();this.lastRemovedAccessEventTime=e.time}break;case"Consensus":if(t=this.consensusEvents,t.length>=100){let e=t.shift();this.lastRemovedConsensusEventTime=e.time}break;default:return}let n=new lr(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n),this.eventsUpdated=!0},this.addNewInitRevoke=e=>{let t=[];switch(e.manaType){case"Consensus":if(t=this.initConsensusEvents,t.length>=100){let e=t.shift();this.lastInitRemovedConsensusEventTime=e.time}break;default:return}let n=new or(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n)},this.addNewRevoke=e=>{let t=[];switch(e.manaType){case"Consensus":if(t=this.consensusEvents,t.length>=100){let e=t.shift();this.lastRemovedConsensusEventTime=e.time}break;default:return}let n=new or(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n),this.eventsUpdated=!0},this.initDone=()=>{this.accessEvents=this.initAccessEvents,this.lastRemovedAccessEventTime=this.lastInitRemovedAccessEventTime,this.consensusEvents=this.initConsensusEvents,this.lastRemovedConsensusEventTime=this.lastInitRemovedConsensusEventTime,this.displayedAccessEvents=[...this.accessEvents],this.displayedConsensusEvents=[...this.consensusEvents],setInterval(()=>{this.eventsUpdated&&(this.displayedAccessEvents=[...this.accessEvents],this.displayedConsensusEvents=[...this.consensusEvents],this.eventsUpdated=!1)},500)},this.nodeList=(e,t)=>{if(null===e||null==e)return[];let n=[],a=(e,a)=>{n.push(r.createElement("tr",{key:e.shortNodeID,style:{backgroundColor:e.shortNodeID===this.ownID?"#e8ffff":"white"}},r.createElement("td",{style:{borderTopLeftRadius:e.shortNodeID===this.ownID?"10px":"0",borderBottomLeftRadius:e.shortNodeID===this.ownID?"10px":"0"}}," ",a+1," "),r.createElement("td",null,e.shortNodeID),r.createElement("td",null,kt(e.mana)),r.createElement("td",{style:{borderTopRightRadius:e.shortNodeID===this.ownID?"10px":"0",borderBottomRightRadius:e.shortNodeID===this.ownID?"10px":"0"}},(e.mana/t*100).toFixed(2),"%")))};return e.forEach((e,t)=>{this.passesNodeFilter(e.shortNodeID)&&a(e,t)}),n},this.computeEventList=e=>{let t=[];if(t.push(r.createElement(xt.a,{style:{textAlign:"center"},key:"header"},r.createElement(d.a,null,r.createElement(u.a,{xs:1,className:"m-auto"}),r.createElement(u.a,null,"NodeID"),r.createElement(u.a,null,"Tx ID"),r.createElement(u.a,{xs:5},"Time")))),null==e)return t;return e.reverse().forEach((e,n)=>{this.passesNodeFilter(e.nodeID)&&this.passesTxFilter(e.txID)&&((e,n)=>{if(e instanceof lr){let a=e=>r.createElement(At.a,{id:e.nodeID+n.toString()},r.createElement(At.a.Title,{as:"h3"},"Mana Pledged"),r.createElement(At.a.Content,null,r.createElement("div",null,"Base Mana: ",r.createElement("strong",null,"+",kt(e.amount))),r.createElement("div",null,"With Transaction: ",r.createElement("strong",null,r.createElement("a",{onClick:()=>navigator.clipboard.writeText(e.txID),href:"/explorer/transaction/"+e.txID},e.txID))),r.createElement("div",null,"To NodeID: ",r.createElement("strong",null,e.nodeID)),r.createElement("div",null,"Time of Pledge: ",r.createElement("strong",null,e.time.toLocaleTimeString()))));t.push(r.createElement(Bt.a,{key:e.nodeID+n.toString(),trigger:"focus",placement:"top",overlay:a(e)},r.createElement(xt.a,{style:{backgroundColor:"#41aea9",color:"white",textAlign:"center"},key:e.nodeID+n.toString(10),as:"button"},r.createElement(d.a,null,r.createElement(u.a,{xs:1,className:"m-auto"},r.createElement("img",{src:er.a,alt:"Plus",width:"20px",className:"d-block mx-auto"})),r.createElement(u.a,null,e.nodeID),r.createElement(u.a,null,e.txID.substring(0,7)+"..."),r.createElement(u.a,{xs:5},e.time.toLocaleString())))))}else if(e instanceof or){let a=e=>r.createElement(At.a,{id:e.nodeID+n.toString()},r.createElement(At.a.Title,{as:"h3"},"Mana Revoked"),r.createElement(At.a.Content,null,r.createElement("div",null,"Base Mana 1: ",r.createElement("strong",null,"-",kt(e.amount))),r.createElement("div",null,"With Transaction: ",r.createElement("strong",null,r.createElement("a",{onClick:()=>navigator.clipboard.writeText(e.txID),href:"/explorer/transaction/"+e.txID},e.txID))),r.createElement("div",null,"From NodeID: ",r.createElement("strong",null,e.nodeID)),r.createElement("div",null,"Time of Revoke: ",r.createElement("strong",null,e.time.toLocaleTimeString()))));t.push(r.createElement(Bt.a,{key:e.nodeID+n.toString(),trigger:"focus",placement:"top",overlay:a(e)},r.createElement(xt.a,{style:{backgroundColor:"#213e3b",color:"white",textAlign:"center"},key:e.nodeID+n.toString(10),as:"button"},r.createElement(d.a,null,r.createElement(u.a,{xs:1},r.createElement("img",{src:nr.a,alt:"Minus",width:"20px",className:""})),r.createElement(u.a,null,e.nodeID),r.createElement(u.a,null,e.txID.substring(0,7)+"..."),r.createElement(u.a,{xs:5},e.time.toLocaleString())))))}})(e,n)}),t},this.passesNodeFilter=e=>0===this.searchNode.trim().length||!!e.toLowerCase().includes(this.searchNode.toLowerCase()),this.passesTxFilter=e=>0===this.searchTxID.trim().length||!!e.toLowerCase().includes(this.searchTxID.toLowerCase()),this.manaValues=[],ve(fe.Mana,this.addNewManaValue),ve(fe.ManaMapOverall,this.updateNetworkRichest),ve(fe.ManaMapOnline,this.updateActiveRichest)}updateNodeSearch(e){this.searchNode=e.trim()}updateTxSearch(e){this.searchTxID=e.trim()}get networkRichestFeedAccess(){let e=this.nodeList(this.accessNetworkRichest,this.totalAccessNetwork);return 0===e.length?[ir]:e}get networkRichestFeedConsensus(){let e=this.nodeList(this.consensusNetworkRichest,this.totalConsensusNetwork);return 0===e.length?[ir]:e}get activeRichestFeedAccess(){let e=this.nodeList(this.accessActiveRichest,this.totalAccessActive);return 0===e.length?[ir]:e}get activeRichestFeedConsensus(){let e=this.nodeList(this.consensusActiveRichest,this.totalConsensusActive);return 0===e.length?[ir]:e}get accessHistogramInput(){if(void 0===this.accessNetworkRichest||null===this.accessNetworkRichest)return[["",0]];let e=new Array;for(let t=0;te.shortNodeID===this.ownID;let n=this.accessNetworkRichest.findIndex(t);switch(n){case-1:break;default:e=(this.accessNetworkRichest.length-(n+1))/this.accessNetworkRichest.length*100}}return e}get consensusPercentile(){let e=0;if(void 0!==this.consensusNetworkRichest&&null!==this.consensusNetworkRichest){const t=e=>e.shortNodeID===this.ownID;let n=this.consensusNetworkRichest.findIndex(t);switch(n){case-1:break;default:e=(this.consensusNetworkRichest.length-(n+1))/this.consensusNetworkRichest.length*100}}return e}get accessEventList(){let e=this.computeEventList(this.displayedAccessEvents);return 1===e.length&&e.push(cr),e}get consensusEventList(){let e=this.computeEventList(this.displayedConsensusEvents);return 1===e.length&&e.push(cr),e}}rr([ye.observable,ar("design:type",Array)],pr.prototype,"manaValues",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"prevManaValues",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"accessNetworkRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalAccessNetwork",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"accessActiveRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalAccessActive",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"consensusNetworkRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalConsensusNetwork",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"consensusActiveRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalConsensusActive",void 0),rr([ye.observable,ar("design:type",Object)],pr.prototype,"searchNode",void 0),rr([ye.observable,ar("design:type",Object)],pr.prototype,"searchTxID",void 0),rr([ye.observable,ar("design:type",class{})],pr.prototype,"allowedPledgeIDs",void 0),rr([ye.observable,ar("design:type",Date)],pr.prototype,"lastRemovedAccessEventTime",void 0),rr([ye.observable,ar("design:type",Date)],pr.prototype,"lastRemovedConsensusEventTime",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"displayedAccessEvents",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"displayedConsensusEvents",void 0),rr([ye.action,ar("design:type",Function),ar("design:paramtypes",[String]),ar("design:returntype",void 0)],pr.prototype,"updateNodeSearch",null),rr([ye.action,ar("design:type",Function),ar("design:paramtypes",[String]),ar("design:returntype",void 0)],pr.prototype,"updateTxSearch",null),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewManaValue",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"updateNetworkRichest",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"updateActiveRichest",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"updateAllowedPledgeIDs",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewInitPledge",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewPledge",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewInitRevoke",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewRevoke",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"initDone",void 0),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"networkRichestFeedAccess",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"networkRichestFeedConsensus",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"activeRichestFeedAccess",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"activeRichestFeedConsensus",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"accessHistogramInput",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"consensusHistogramInput",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"accessPercentile",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"consensusPercentile",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"accessEventList",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"consensusEventList",null);var dr=pr,ur=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},mr=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},hr=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};class fr{constructor(){this.liveFeed=[],this.addLiveFeed=e=>hr(this,void 0,void 0,(function*(){-1===this.liveFeed.findIndex(t=>t.id==e.id)&&(this.liveFeed.length>=100&&this.liveFeed.shift(),this.liveFeed.push(e))})),ve(fe.SlotInfo,this.addLiveFeed)}get slotLiveFeed(){let e=[];for(let t=this.liveFeed.length-1;t>=0;t--){let n=this.liveFeed[t];e.push(r.createElement("tr",{key:n.id},r.createElement("td",null,n.index),r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/slot/commitment/"+n.id},n.id))))}return e}}ur([ye.observable,mr("design:type",Array)],fr.prototype,"liveFeed",void 0),ur([ye.action,mr("design:type",Object)],fr.prototype,"addLiveFeed",void 0),ur([ye.computed,mr("design:type",Object),mr("design:paramtypes",[])],fr.prototype,"slotLiveFeed",null);var br=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},gr=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class yr{constructor(e,t){this.updateConflictSets=e=>{this.conflictSets.set(e.conflictSetID,e)},this.updateConflicts=e=>{this.conflicts.set(e.conflictID,e)},this.routerStore=e,this.nodeStore=t,this.conflictSets=new Map,this.conflicts=new Map,ve(fe.ConflictSet,this.updateConflictSets),ve(fe.Conflict,this.updateConflicts)}get conflictsLiveFeed(){let e=Array.from(this.conflictSets.values());e.sort((e,t)=>t.arrivalTime-e.arrivalTime||e.conflictSetID.localeCompare(t.conflictSetID));let t=[];for(let n of e){if(t.push(r.createElement("tr",{key:n.conflictSetID,onClick:()=>n.shown=!n.shown,style:{cursor:"pointer"}},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/output/"+n.conflictSetID},n.conflictSetID)),r.createElement("td",null,new Date(1e3*n.arrivalTime).toLocaleString()),r.createElement("td",null,n.resolved?"Yes":"No"),r.createElement("td",null,n.timeToResolve/1e6))),!n.shown)continue;let e=Array.from(this.conflicts.values());e.sort((e,t)=>e.issuingTime-t.issuingTime||e.conflictID.localeCompare(t.conflictID));let a=[];for(let t of e)for(let e of t.conflictSetIDs)e===n.conflictSetID&&a.push(r.createElement("tr",{key:t.conflictID,className:t.confirmationState>Qt.Accepted?"table-success":""},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/branch/"+t.conflictID},t.conflictID)),r.createElement("td",null,Kt(t.confirmationState)),r.createElement("td",null," ",new Date(1e3*t.issuingTime).toLocaleString()),r.createElement("td",null,t.issuerNodeID)));t.push(r.createElement("tr",{key:n.conflictSetID+"_branches"},r.createElement("td",{colSpan:4},r.createElement(te.a,{size:"sm"},r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"BranchID"),r.createElement("th",null,"ConfirmationState"),r.createElement("th",null,"IssuingTime"),r.createElement("th",null,"Issuer NodeID"))),r.createElement("tbody",null,a)))))}return t}}br([ye.observable,gr("design:type",Map)],yr.prototype,"conflictSets",void 0),br([ye.observable,gr("design:type",Map)],yr.prototype,"conflicts",void 0),br([ye.action,gr("design:type",Object)],yr.prototype,"updateConflictSets",void 0),br([ye.action,gr("design:type",Object)],yr.prototype,"updateConflicts",void 0),br([ye.computed,gr("design:type",Object),gr("design:paramtypes",[])],yr.prototype,"conflictsLiveFeed",null);var Er=yr;const vr=new pn.RouterStore,Ir=new wn,kr={routerStore:vr,nodeStore:Ir,explorerStore:new Ke(vr),conflictsStore:new Er(vr,Ir),faucetStore:new Nn(vr),visualizerStore:new Qn(vr),manaStore:new dr,slotStore:new fr},xr=Object(l.a)(),Sr=Object(pn.syncHistoryWithStore)(xr,vr);a.render(r.createElement(s.a,Object.assign({},kr),r.createElement(be.e,{history:Sr},r.createElement(cn,{history:Sr}))),document.getElementById("root"))}},[[434,1,2]]]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{286:function(e,t){e.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2N3B4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NyA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48cGF0aCBkPSJNIDMyLjM4IDE4IEwgMzIuMzggNDgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+"},287:function(e,t){e.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NnB4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NiA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+"},298:function(e,t,n){var r={"./af":107,"./af.js":107,"./ar":108,"./ar-dz":109,"./ar-dz.js":109,"./ar-kw":110,"./ar-kw.js":110,"./ar-ly":111,"./ar-ly.js":111,"./ar-ma":112,"./ar-ma.js":112,"./ar-sa":113,"./ar-sa.js":113,"./ar-tn":114,"./ar-tn.js":114,"./ar.js":108,"./az":115,"./az.js":115,"./be":116,"./be.js":116,"./bg":117,"./bg.js":117,"./bm":118,"./bm.js":118,"./bn":119,"./bn-bd":120,"./bn-bd.js":120,"./bn.js":119,"./bo":121,"./bo.js":121,"./br":122,"./br.js":122,"./bs":123,"./bs.js":123,"./ca":124,"./ca.js":124,"./cs":125,"./cs.js":125,"./cv":126,"./cv.js":126,"./cy":127,"./cy.js":127,"./da":128,"./da.js":128,"./de":129,"./de-at":130,"./de-at.js":130,"./de-ch":131,"./de-ch.js":131,"./de.js":129,"./dv":132,"./dv.js":132,"./el":133,"./el.js":133,"./en-au":134,"./en-au.js":134,"./en-ca":135,"./en-ca.js":135,"./en-gb":136,"./en-gb.js":136,"./en-ie":137,"./en-ie.js":137,"./en-il":138,"./en-il.js":138,"./en-in":139,"./en-in.js":139,"./en-nz":140,"./en-nz.js":140,"./en-sg":141,"./en-sg.js":141,"./eo":142,"./eo.js":142,"./es":143,"./es-do":144,"./es-do.js":144,"./es-mx":145,"./es-mx.js":145,"./es-us":146,"./es-us.js":146,"./es.js":143,"./et":147,"./et.js":147,"./eu":148,"./eu.js":148,"./fa":149,"./fa.js":149,"./fi":150,"./fi.js":150,"./fil":151,"./fil.js":151,"./fo":152,"./fo.js":152,"./fr":153,"./fr-ca":154,"./fr-ca.js":154,"./fr-ch":155,"./fr-ch.js":155,"./fr.js":153,"./fy":156,"./fy.js":156,"./ga":157,"./ga.js":157,"./gd":158,"./gd.js":158,"./gl":159,"./gl.js":159,"./gom-deva":160,"./gom-deva.js":160,"./gom-latn":161,"./gom-latn.js":161,"./gu":162,"./gu.js":162,"./he":163,"./he.js":163,"./hi":164,"./hi.js":164,"./hr":165,"./hr.js":165,"./hu":166,"./hu.js":166,"./hy-am":167,"./hy-am.js":167,"./id":168,"./id.js":168,"./is":169,"./is.js":169,"./it":170,"./it-ch":171,"./it-ch.js":171,"./it.js":170,"./ja":172,"./ja.js":172,"./jv":173,"./jv.js":173,"./ka":174,"./ka.js":174,"./kk":175,"./kk.js":175,"./km":176,"./km.js":176,"./kn":177,"./kn.js":177,"./ko":178,"./ko.js":178,"./ku":179,"./ku.js":179,"./ky":180,"./ky.js":180,"./lb":181,"./lb.js":181,"./lo":182,"./lo.js":182,"./lt":183,"./lt.js":183,"./lv":184,"./lv.js":184,"./me":185,"./me.js":185,"./mi":186,"./mi.js":186,"./mk":187,"./mk.js":187,"./ml":188,"./ml.js":188,"./mn":189,"./mn.js":189,"./mr":190,"./mr.js":190,"./ms":191,"./ms-my":192,"./ms-my.js":192,"./ms.js":191,"./mt":193,"./mt.js":193,"./my":194,"./my.js":194,"./nb":195,"./nb.js":195,"./ne":196,"./ne.js":196,"./nl":197,"./nl-be":198,"./nl-be.js":198,"./nl.js":197,"./nn":199,"./nn.js":199,"./oc-lnc":200,"./oc-lnc.js":200,"./pa-in":201,"./pa-in.js":201,"./pl":202,"./pl.js":202,"./pt":203,"./pt-br":204,"./pt-br.js":204,"./pt.js":203,"./ro":205,"./ro.js":205,"./ru":206,"./ru.js":206,"./sd":207,"./sd.js":207,"./se":208,"./se.js":208,"./si":209,"./si.js":209,"./sk":210,"./sk.js":210,"./sl":211,"./sl.js":211,"./sq":212,"./sq.js":212,"./sr":213,"./sr-cyrl":214,"./sr-cyrl.js":214,"./sr.js":213,"./ss":215,"./ss.js":215,"./sv":216,"./sv.js":216,"./sw":217,"./sw.js":217,"./ta":218,"./ta.js":218,"./te":219,"./te.js":219,"./tet":220,"./tet.js":220,"./tg":221,"./tg.js":221,"./th":222,"./th.js":222,"./tk":223,"./tk.js":223,"./tl-ph":224,"./tl-ph.js":224,"./tlh":225,"./tlh.js":225,"./tr":226,"./tr.js":226,"./tzl":227,"./tzl.js":227,"./tzm":228,"./tzm-latn":229,"./tzm-latn.js":229,"./tzm.js":228,"./ug-cn":230,"./ug-cn.js":230,"./uk":231,"./uk.js":231,"./ur":232,"./ur.js":232,"./uz":233,"./uz-latn":234,"./uz-latn.js":234,"./uz.js":233,"./vi":235,"./vi.js":235,"./x-pseudo":236,"./x-pseudo.js":236,"./yo":237,"./yo.js":237,"./zh-cn":238,"./zh-cn.js":238,"./zh-hk":239,"./zh-hk.js":239,"./zh-mo":240,"./zh-mo.js":240,"./zh-tw":241,"./zh-tw.js":241};function a(e){var t=s(e);return n(t)}function s(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=s,e.exports=a,a.id=298},434:function(e,t,n){"use strict";n.r(t);var r=n(1),a=n(24),s=n(6),l=n(25),o=(n(297),n(285)),i=n(56),c=n(39),p=n(12),d=n(11),u=n(9),m=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let h=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Uptime: ",this.props.nodeStore.uptime)}};h=m([Object(s.b)("nodeStore"),s.c],h);var f=h,b=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let g=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Version: ",this.props.nodeStore.status.version)}};g=b([Object(s.b)("nodeStore"),s.c],g);var y=g,E=n(15),v=n(29),I={elements:{line:{tension:0}},animation:{duration:0},hover:{animationDuration:0},responsiveAnimationDuration:0},k=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const x=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return Math.abs(e)},fontSize:10,maxTicksLimit:4,beginAtZero:!0}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${Math.abs(e.value)}`}}}},I);let S=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Blocks Per Second"),r.createElement("small",null,"BPS: ",this.props.nodeStore.last_mps_metric.mps,"."),r.createElement(v.Line,{height:50,data:this.props.nodeStore.mpsSeries,options:x})))}};S=k([Object(s.b)("nodeStore"),s.c],S);var j=S,O=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const w=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return Math.abs(e)},fontSize:10,maxTicksLimit:4,beginAtZero:!0}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${Math.abs(e.value)}`}}}},I);let C=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Current Tips"),r.createElement("small",null,"Tips: ",this.props.nodeStore.last_tips_metric.totaltips,"."),r.createElement(v.Line,{height:50,data:this.props.nodeStore.tipsSeries,options:w})))}};C=O([Object(s.b)("nodeStore"),s.c],C);var D=C,R=n(2),_=n(28),N=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const T=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},showXLabels:10,gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return _(Math.abs(e))},maxTicksLimit:3,fontSize:10}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${_(Math.abs(e.value))}`}}}},I);let P=class extends r.Component{render(){let e=this.props.nodeStore.status.mem;return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Memory Usage"," ",_(e.heap_alloc)),r.createElement("small",null,"GC Cycles: ",e.num_gc," (Last Cycle: ",e.last_pause_gc/1e6,"ms) - "," ","Heap: "," ","[Obj: ",e.heap_objects,", In-Use: ",_(e.heap_sys-e.heap_idle),", Retained: ",_(e.heap_idle-e.heap_released),"]"),r.createElement(v.Line,{height:50,data:this.props.nodeStore.memSeries,options:T})))}};P=N([Object(s.b)("nodeStore"),s.c],P);var M=P,L=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const A=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return Math.abs(e)},fontSize:10,maxTicksLimit:4,beginAtZero:!0}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${Math.abs(e.value)}`}}}},I);let B=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Component Counter Blocks Per Second"),r.createElement("div",{style:{display:"flex",flexDirection:"column"}},r.createElement("small",null,"BPS: ",this.props.nodeStore.last_component_counter_metric.store,"."),r.createElement("small",null,"Rate Setter - Estimate: ",this.props.nodeStore.last_rate_setter_metric.estimate)),r.createElement(v.Line,{height:50,data:this.props.nodeStore.componentSeries,options:A})))}};B=L([Object(s.b)("nodeStore"),s.c],B);var z=B,H=n(14),F=n(20),V=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Z=class extends r.Component{render(){return r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"TangleTime Synced: ",this.props.nodeStore.status.tangleTime.synced?"Yes":"No"),r.createElement("small",null,r.createElement("div",null,r.createElement("hr",null),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Accepted Block: ",r.createElement(H.Link,{to:"/explorer/block/"+this.props.nodeStore.status.tangleTime.acceptedBlockID},this.props.nodeStore.status.tangleTime.acceptedBlockID))),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Confirmed Block: ",r.createElement(H.Link,{to:"/explorer/block/"+this.props.nodeStore.status.tangleTime.confirmedBlockID},this.props.nodeStore.status.tangleTime.confirmedBlockID))),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Confirmed Slot:",this.props.nodeStore.status.tangleTime.confirmedSlot)),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-12"},"Last Committed Slot:",this.props.nodeStore.status.tangleTime.committedSlot)),r.createElement("hr",null),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-3"},"Acceptance Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.ATT/1e6),"dd.mm.yyyy HH:MM:ss")),r.createElement("div",{className:"col-3"},"Confirmation Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.CTT/1e6),"dd.mm.yyyy HH:MM:ss"))),r.createElement("div",{className:"row"},r.createElement("div",{className:"col-3"},"Relative Acceptance Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.RATT/1e6),"dd.mm.yyyy HH:MM:ss")),r.createElement("div",{className:"col-3"},"Relative Confirmation Time:"),r.createElement("div",{className:"col-3"},F(new Date(this.props.nodeStore.status.tangleTime.RCTT/1e6),"dd.mm.yyyy HH:MM:ss")))))))}};Z=V([Object(s.b)("nodeStore"),s.c],Z);var U=Z,W=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let J=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Bootstrapped: ",this.props.nodeStore.status.tangleTime.bootstrapped?"Yes":"No")}};J=W([Object(s.b)("nodeStore"),s.c],J);var G=J,q=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let X=class extends r.Component{render(){return r.createElement(p.a,null,r.createElement("h3",null,"Dashboard"),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Node: ",this.props.nodeStore.status.id),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement(R.a.Item,null,r.createElement(f,null)))),r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement(R.a.Item,null,r.createElement(G,null)))),r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement(R.a.Item,null,r.createElement(y,null))))))))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(U,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(j,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(D,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(z,null))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(M,null))))}};X=q([Object(s.b)("nodeStore"),s.c],X);var Q=n(16),K=n(23),$=n(22),Y=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let ee=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.props.explorerStore.updateSearch(e.target.value)},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.searchAny()}}render(){let{search:e,searching:t}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Address or Block ID","aria-label":"Address or Block ID","aria-describedby":"basic-addon1",value:e,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:t})))))}};ee=Y([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],ee);var te=n(71),ne=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let re=class extends r.Component{render(){let{blksLiveFeed:e}=this.props.explorerStore;return r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,"Live Feed"),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{height:"500px",overflow:"auto"}},r.createElement("h6",null,"Blocks"),r.createElement(te.a,null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("td",null,"Id"),r.createElement("td",null,"Payload Type"))),r.createElement("tbody",null,e))))))))}};re=ne([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],re);var ae=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let se=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.txID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/transaction/"+this.txID)}}render(){let{searching:e}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Transaction ID","aria-label":"Transaction ID","aria-describedby":"basic-addon1",value:this.txID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};se=ae([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],se);var le=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let oe=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.outputID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/output/"+this.outputID)}}render(){let{searching:e}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Output ID","aria-label":"Output ID","aria-describedby":"basic-addon1",value:this.outputID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};oe=le([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],oe);var ie=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let ce=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.conflictID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/conflict/"+this.conflictID)}}render(){let{searching:e}=this.props.explorerStore;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement($.a,{className:"mb-3"},r.createElement(K.a,{placeholder:"Conflict ID","aria-label":"Conflict ID","aria-describedby":"basic-addon1",value:this.conflictID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};ce=ie([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],ce);var pe=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let de=class extends r.Component{render(){return r.createElement(p.a,null,r.createElement("h3",null,"Tangle Explorer"),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("p",null,"Search for addresses, blocks, transactions, outputs and conflicts."))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(ee,null)),r.createElement(u.a,null,r.createElement(se,null))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(oe,null)),r.createElement(u.a,null,r.createElement(ce,null))),r.createElement(re,null),r.createElement("small",null,"This explorer implementation is heavily inspired by ",r.createElement("a",{href:"https://thetangle.org"},"thetangle.org"),"."))}};de=pe([Object(s.b)("nodeStore"),s.c],de);var ue=n(288),me=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let he=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.props.explorerStore.updateSearch(e.target.value)},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.searchAny()}}render(){let{search:e,searching:t}=this.props.explorerStore;return r.createElement(ue.a,{inline:!0,as:"div"},r.createElement(K.a,{type:"text",onChange:this.updateSearch,placeholder:"Search the Tangle...",value:e,className:" mr-sm-2",disabled:t,onKeyUp:this.executeSearch}))}};he=me([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],he);var fe,be=n(17),ge=n(44),ye=n(3);!function(e){e[e.Status=0]="Status",e[e.BPSMetrics=1]="BPSMetrics",e[e.Block=2]="Block",e[e.NeighborStats=3]="NeighborStats",e[e.ComponentCounterMetrics=4]="ComponentCounterMetrics",e[e.TipsMetrics=5]="TipsMetrics",e[e.Vertex=6]="Vertex",e[e.TXAccepted=7]="TXAccepted",e[e.TipInfo=8]="TipInfo",e[e.Mana=9]="Mana",e[e.ManaMapOverall=10]="ManaMapOverall",e[e.ManaMapOnline=11]="ManaMapOnline",e[e.BlkManaDashboardAddress=12]="BlkManaDashboardAddress",e[e.RateSetter=13]="RateSetter",e[e.ConflictSet=14]="ConflictSet",e[e.Conflict=15]="Conflict",e[e.SlotInfo=16]="SlotInfo"}(fe||(fe={}));let Ee={};function ve(e,t){Ee[e]=t}function Ie(e){delete Ee[e]}var ke,xe,Se,je;!function(e){e[e.TaggedData=0]="TaggedData",e[e.Transaction=1]="Transaction",e[e.Faucet=3]="Faucet"}(ke||(ke={}));class Oe{}class we{}function Ce(e){switch(e){case ke.TaggedData:return"TaggedData";case ke.Transaction:return"Transaction";case ke.Faucet:return"Faucet";default:return"Unknown"}}class De extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.token.id},r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",this.props.token.id),r.createElement(R.a.Item,null,"Amount: ",this.props.token.amount)))}}class Re extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.address},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address Type: ",this.props.unlock.address.type)),r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address: ",this.props.unlock.address.pubKeyHash)))}}class _e extends r.Component{render(){return this.props.unlock.unixTime&&r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.unixTime},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Unix Time: ",this.props.unlock.unixTime)))}}class Ne extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.returnAddress},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Return Address: ",this.props.unlock.returnAddress),r.createElement(R.a.Item,null,"Amount: ",this.props.unlock.amount)))}}class Te extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.returnAddress},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Return Address: ",this.props.unlock.returnAddress),r.createElement(R.a.Item,null,"Unix Time: ",this.props.unlock.unixTime)))}}function Pe(e){switch(e.type){case xe.Address:case xe.StateControllerAddress:case xe.GovernorAddress:return r.createElement(Re,{unlock:e});case xe.StorageDepositReturn:return r.createElement(Ne,{unlock:e});case xe.Expiration:return r.createElement(Te,{unlock:e});case xe.Timelock:return r.createElement(_e,{unlock:e})}}!function(e){e[e.Address=0]="Address",e[e.StorageDepositReturn=1]="StorageDepositReturn",e[e.Timelock=2]="Timelock",e[e.Expiration=3]="Expiration",e[e.StateControllerAddress=4]="StateControllerAddress",e[e.GovernorAddress=5]="GovernorAddress",e[e.ImmutableAlias=6]="ImmutableAlias"}(xe||(xe={}));class Me extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.address},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address: ",this.props.feature.address)))}}class Le extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.data},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Data: ",this.props.feature.data)))}}class Ae extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.tag},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Data: ",this.props.feature.tag)))}}function Be(e){switch(e.type){case Se.Sender:case Se.Issuer:return r.createElement(Me,{feature:e.feature});case Se.Metadata:return r.createElement(Le,{feature:e.feature});case Se.Tag:return r.createElement(Ae,{feature:e.feature})}}!function(e){e[e.Sender=0]="Sender",e[e.Issuer=1]="Issuer",e[e.Metadata=2]="Metadata",e[e.Tag=3]="Tag"}(Se||(Se={}));class ze extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: BasicOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}class He extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,{style:{wordBreak:"break-word"}},r.createElement(R.a.Item,null,"Type: AliasOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(R.a.Item,null,"AliasID: ",this.props.output.aliasId),r.createElement(R.a.Item,null,"StateIndex: ",this.props.output.stateIndex),r.createElement(R.a.Item,null,"State Metadata: ",this.props.output.stateMetadata," "),r.createElement(R.a.Item,null,"Foundry Counter: ",this.props.output.foundryCounter),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}class Fe extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: FoundryOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(R.a.Item,null,"Serial Number: ",this.props.output.serialNumber),r.createElement(R.a.Item,null,"Token Scheme: ",this.props.output.tokenScheme),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}class Ve extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: FoundryOutput"),r.createElement(R.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(R.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(R.a.Item,null,"NFT ID: ",this.props.output.nftId),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(De,{token:e})),this.props.output.unlockConditions&&this.props.output.unlockConditions.map((e,t)=>Pe(e)),this.props.output.features&&this.props.output.features.map((e,t)=>Be(e)),r.createElement(R.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(R.a.Item,null,"Output Index: ",this.props.id.outputIndex)))}}function Ze(e){let t=e.outputID;switch(e.type){case je.Basic:return r.createElement(ze,{output:e.output,id:t});case je.Alias:return r.createElement(He,{output:e.output,id:t});case je.Foundry:return r.createElement(Fe,{output:e.output,id:t});case je.NFT:return r.createElement(Ve,{output:e.output,id:t});default:return}}!function(e){e[e.Treasury=2]="Treasury",e[e.Basic=3]="Basic",e[e.Alias=4]="Alias",e[e.Foundry=5]="Foundry",e[e.NFT=6]="NFT"}(je||(je={}));var Ue=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},We=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},Je=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};const Ge="1111111111111111111111111111111111111111111111111111111111111111";class qe{}var Xe;!function(e){e[e.NotFound=1]="NotFound",e[e.BadRequest=2]="BadRequest"}(Xe||(Xe={}));class Qe{constructor(e){this.latest_blocks=[],this.blk=null,this.addr=null,this.tx=null,this.txMetadata=null,this.txAttachments=[],this.output=null,this.outputMetadata=null,this.outputConsumers=null,this.pendingMana=null,this.conflict=null,this.conflictChildren=null,this.conflictConflicts=null,this.conflictVoters=null,this.tips=null,this.slotInfo=new qe,this.query_loading=!1,this.query_err=null,this.search="",this.search_result=null,this.searching=!1,this.searchAny=()=>Je(this,void 0,void 0,(function*(){this.updateSearching(!0);try{let e=yield fetch("/api/search/"+this.search),t=yield e.json();this.updateSearchResult(t)}catch(e){this.updateQueryError(e)}})),this.resetSearch=()=>{this.search_result=null,this.searching=!1},this.updateSearchResult=e=>{this.search_result=e,this.searching=!1;let t=this.search;this.search="",this.search_result.block?this.routerStore.push("/explorer/block/"+t):this.search_result.address?this.routerStore.push("/explorer/address/"+t):this.routerStore.push("/explorer/404/"+t)},this.updateSearch=e=>{this.search=e},this.updateSearching=e=>this.searching=e,this.searchBlock=e=>Je(this,void 0,void 0,(function*(){this.updateQueryLoading(!0);const t=yield this.fetchJson("get","/api/block/"+e);this.updateBlock(t)})),this.searchAddress=e=>Je(this,void 0,void 0,(function*(){this.updateQueryLoading(!0);const t=yield this.fetchJson("get","/api/address/"+e);this.updateAddress(t)})),this.getSlotDetails=e=>Je(this,void 0,void 0,(function*(){yield this.getSlotInfo(e)})),this.getTransaction=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/transaction/"+e);for(let e=0;eJe(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/transaction/${e}/attachments`);this.txAttachments=t})),this.getTransactionMetadata=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/transaction/${e}/metadata`);this.txMetadata=t})),this.getOutput=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/output/"+e);this.output=t})),this.getOutputMetadata=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/output/${e}/metadata`);this.outputMetadata=t})),this.getOutputConsumers=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/output/${e}/consumers`);this.outputConsumers=t})),this.getPendingMana=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/mana/pending?OutputID="+e);this.pendingMana=t})),this.getConflict=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/conflict/"+e);this.conflict=t})),this.getConflictChildren=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/conflict/${e}/children`);this.conflictChildren=t})),this.getConflictConflicts=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/conflict/${e}/conflicts`);this.conflictConflicts=t})),this.getConflictVoters=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/conflict/${e}/voters`);this.conflictVoters=t})),this.getSlotInfo=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/slot/commitment/"+e);this.slotInfo=t})),this.getTips=()=>Je(this,void 0,void 0,(function*(){const e=yield this.fetchJson("get","/api/tips");this.tips=e})),this.reset=()=>{this.blk=null,this.query_err=null,this.tx=null,this.txMetadata=null,this.txAttachments=[],this.output=null,this.outputMetadata=null,this.outputConsumers=null,this.pendingMana=null,this.conflict=null,this.conflictChildren=null,this.conflictConflicts=null,this.tips=null,this.slotInfo=new qe},this.updateAddress=e=>{this.addr=e,this.query_err=null,this.query_loading=!1},this.updateBlock=e=>{switch(this.blk=e,this.blk.conflictIDs=this.blk.conflictIDs?this.blk.conflictIDs:[],this.blk.addedConflictIDs=this.blk.addedConflictIDs?this.blk.addedConflictIDs:[],this.blk.subtractedConflictIDs=this.blk.subtractedConflictIDs?this.blk.subtractedConflictIDs:[],this.blk.strongChildren=this.blk.strongChildren?this.blk.strongChildren:[],this.blk.weakChildren=this.blk.weakChildren?this.blk.weakChildren:[],this.blk.shallowLikeChildren=this.blk.shallowLikeChildren?this.blk.shallowLikeChildren:[],this.blk.strongParents=this.blk.strongParents?this.blk.strongParents:[],this.blk.weakParents=this.blk.weakParents?this.blk.weakParents:[],this.blk.shallowLikedParents=this.blk.shallowLikedParents?this.blk.shallowLikedParents:[],this.query_err=null,this.query_loading=!1,e.payloadType){case ke.Transaction:case ke.TaggedData:this.payload=e.payload;break;case ke.Faucet:this.payload=e.payload;default:this.payload=e.payload}},this.updateQueryLoading=e=>this.query_loading=e,this.updateQueryError=e=>{this.query_err=e,this.query_loading=!1,this.searching=!1},this.addLiveFeedBlock=e=>{-1===this.latest_blocks.findIndex(t=>t.id==e.id)&&(this.latest_blocks.length>=50&&this.latest_blocks.shift(),this.latest_blocks.push(e))},this.routerStore=e,ve(fe.Block,this.addLiveFeedBlock)}get blksLiveFeed(){let e=[];for(let t=this.latest_blocks.length-1;t>=0;t--){let n=this.latest_blocks[t];e.push(r.createElement("tr",{key:n.id},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/block/"+n.id},n.id)),r.createElement("td",null,Ce(n.payload_type))))}return e}get tipsList(){let e=[];if(this.tips)for(let t=0;t=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let et=class extends r.Component{render(){let{payload:e}=this.props.explorerStore;return e&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,e.content_title,": "," ",e.content)))}};et=Ye([Object(s.b)("explorerStore"),s.c],et);var tt,nt=n(0),rt=n(282);!function(e){e[e.Ed25519=0]="Ed25519",e[e.BLS=1]="BLS"}(tt||(tt={}));class at extends r.Component{render(){let e=this.props.signature;return r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Public Key: ",e.publicKey),r.createElement(R.a.Item,null,"Signature: ",e.signature)))))}}class st extends r.Component{renderSignatureComponent(){switch(this.props.block.signatureType){case tt.Ed25519:return r.createElement(at,{signature:this.props.block.signature})}}render(){let e=this.props.block;return r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,"Index: ",r.createElement(Q.a,{variant:"primary"},this.props.key),r.createElement(R.a,null,r.createElement(R.a.Item,null,"Type: ",e.type),e.signatureType&&r.createElement(R.a.Item,null,"Signature Type: ",function(e){switch(e){case tt.Ed25519:return"Ed25519 Signature";case tt.BLS:return"BLS Signature";default:return"Unknown Signature Type"}}(e.signatureType)),this.renderSignatureComponent())))}}const lt={maxHeight:"1000px",overflow:"auto",width:"47%",fontSize:"85%"};class ot extends r.Component{render(){let e=this.props.txID,t=this.props.tx;return t&&e&&r.createElement("div",null,r.createElement("h4",null,"Transaction"),r.createElement("p",null," ",e," "),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("div",{style:{marginTop:"10px",marginBottom:"20px",paddingBottom:"10px",borderBottom:"2px solid #eee"}},r.createElement("h5",null,"Transaction Essence")),r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",r.createElement("a",{href:"/explorer/transaction/"+e}," ",e)),r.createElement(R.a.Item,null,"Network ID: ",t.networkId),r.createElement(R.a.Item,null,"Creation Time: ",t.creationSlot),r.createElement(R.a.Item,null,r.createElement("div",{className:"d-flex justify-content-between align-items-center"},r.createElement("div",{className:"align-self-start input-output-list",style:lt},r.createElement("span",null,"Inputs"),r.createElement("hr",null),t.inputs.map((e,t)=>r.createElement("div",{className:"mb-2",key:t},r.createElement("span",{className:"mb-2"},"Index: ",r.createElement(Q.a,{variant:"primary"},t)),r.createElement("div",{className:"mb-2",key:"input"+t},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Output ID: ",e.referencedOutputID.hex)))))),r.createElement(nt.b.Provider,{value:{color:"#00a0ff",size:"2em"}},r.createElement("div",null,r.createElement(rt.a,null))),r.createElement("div",{style:lt},r.createElement("span",null,"Outputs"),r.createElement("hr",null),t.outputs.map((e,t)=>r.createElement("div",{className:"mb-2",key:t},r.createElement("span",{className:"mb-2"},"Index: ",r.createElement(Q.a,{variant:"primary"},t)),Ze(e)))))),t.payload&&r.createElement(R.a.Item,null,"Data payload: ",t.payload)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("div",{style:{marginBottom:"20px",paddingBottom:"10px",borderBottom:"2px solid #eee"}},r.createElement("h5",null,"Unlock Blocks")),r.createElement(r.Fragment,null,t.unlocks.map((e,t)=>r.createElement(st,{block:e,key:t}))))))}}var it=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let ct=class extends r.Component{render(){let{payload:e,blk:t}=this.props.explorerStore,n=t.txId,a=e;return r.createElement(p.a,null,r.createElement(ot,{txID:n,tx:a}))}};function pt(e){switch(e){case dt:return"MasterConflictID";case ut:return"UndefinedConflictID";case mt:return"LazyBookedConflictsConflictID";case ht:return"InvalidConflictID";default:return e}}ct=it([Object(s.b)("explorerStore"),s.c],ct);const dt="4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM",ut="11111111111111111111111111111111",mt="JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF",ht="JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG";var ft=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let bt=class extends r.Component{render(){let{payload:e}=this.props.explorerStore;return e&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Address: ",e.address),r.createElement(R.a.Item,null,"Access Mana Pledge ID: ",e.accessManaPledgeID),r.createElement(R.a.Item,null,"Consensus Mana Pledge ID: ",e.consensusManaPledgeID),r.createElement(R.a.Item,null,"Nonce: ",e.nonce)))))}};bt=ft([Object(s.b)("explorerStore"),s.c],bt);var gt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let yt=class extends r.Component{render(){let{payload:e}=this.props.explorerStore;return e&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Tag: ",e.tag),r.createElement(R.a.Item,null,"Data: ",e.data)))))}};yt=gt([Object(s.b)("explorerStore"),s.c],yt);var Et=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let vt=class extends r.Component{componentDidMount(){this.props.explorerStore.resetSearch(),this.props.explorerStore.searchBlock(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}getSnapshotBeforeUpdate(e,t){return e.match.params.id!==this.props.match.params.id&&this.props.explorerStore.searchBlock(this.props.match.params.id),null}getPayloadType(){return Ce(this.props.explorerStore.blk.payloadType)}renderPayload(){switch(this.props.explorerStore.blk.payloadType){case ke.Transaction:return this.props.explorerStore.blk.objectivelyInvalid?r.createElement(et,null):r.createElement(ct,null);case ke.TaggedData:return r.createElement(yt,null);case ke.Faucet:return r.createElement(bt,null);default:return r.createElement(et,null)}}render(){let{id:e}=this.props.match.params,{blk:t,query_loading:n,query_err:a}=this.props.explorerStore;return e===Ge?r.createElement(p.a,null,r.createElement("h3",null,"Genesis Block"),r.createElement("p",null,"In the beginning there was the genesis.")):a?r.createElement(p.a,null,r.createElement("h3",null,"Block not available - 404"),r.createElement("p",null,"Block with ID ",e," not found.")):r.createElement(p.a,null,r.createElement("h3",null,"Block"),r.createElement("p",null,e," "," ",t&&r.createElement(r.Fragment,null,r.createElement("br",null),r.createElement("span",null,r.createElement(Q.a,{variant:"light",style:{marginRight:10}},"Issuance Time: ",F(new Date(1e3*t.issuanceTimestamp),"dd.mm.yyyy HH:MM:ss")),r.createElement(Q.a,{variant:"light"},"Solidification Time: ",F(new Date(1e3*t.solidificationTimestamp),"dd.mm.yyyy HH:MM:ss"))))),t&&r.createElement(r.Fragment,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Payload Type: ",this.getPayloadType()),r.createElement(R.a.Item,null,"Sequence Number: ",t.sequenceNumber),r.createElement(R.a.Item,null,"ConflictIDs:",r.createElement(R.a,null,t.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"AddedConflictIDs:",r.createElement(R.a,null,t.addedConflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"AddedConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"SubtractedConflictIDs:",r.createElement(R.a,null,t.subtractedConflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"SubtractedConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"Solid: ",t.solid?"Yes":"No"),r.createElement(R.a.Item,null,"Scheduled: ",t.scheduled?"Yes":"No"),r.createElement(R.a.Item,null,"Booked: ",t.booked?"Yes":"No"),r.createElement(R.a.Item,null,"Orphaned: ",t.orphaned?"Yes":"No"),r.createElement(R.a.Item,null,"Objectively Invalid: ",t.objectivelyInvalid?"Yes":"No"),r.createElement(R.a.Item,null,"Subjectively Invalid: ",t.subjectivelyInvalid?"Yes":"No"),r.createElement(R.a.Item,null,"Acceptance: ",t.acceptance?"Yes":"No"),r.createElement(R.a.Item,null,"Acceptance Time: ",F(new Date(1e3*t.acceptanceTime),"dd.mm.yyyy HH:MM:ss")),r.createElement(R.a.Item,null,"Confirmation: ",t.confirmation?"Yes":"No"),r.createElement(R.a.Item,null,"Confirmation Time: ",F(new Date(1e3*t.confirmationTime),"dd.mm.yyyy HH:MM:ss")),r.createElement(R.a.Item,null,"Confirmation by slot: ",t.confirmationBySlot?"Yes":"No"),r.createElement(R.a.Item,null,"Confirmation by slot time: ",F(new Date(1e3*t.confirmationBySlotTime),"dd.mm.yyyy HH:MM:ss"))))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("h5",null,"Slot Commitment"),r.createElement(R.a,null,r.createElement(R.a.Item,null,"CommitmentID: ",t.commitmentID),r.createElement(R.a.Item,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"Index: ",t.commitment.index),r.createElement(R.a.Item,null,"prevID: ",t.commitment.prevID),r.createElement(R.a.Item,null,"rootsID: ",t.commitment.rootsID),r.createElement(R.a.Item,null,"Cumulative Weight: ",t.commitment.cumulativeWeight))),r.createElement(R.a.Item,null,"LatestConfirmedSlot: ",t.latestConfirmedSlot)))),!!t.rank&&r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("h5",null,"Markers"),r.createElement(R.a,null,r.createElement(R.a.Item,null,"Rank: ",t.rank),r.createElement(R.a.Item,null,"SequenceID: ",t.sequenceID),r.createElement(R.a.Item,null,"PastMarkerGap: ",t.pastMarkerGap),r.createElement(R.a.Item,null,"IsPastMarker: ",t.isPastMarker?"Yes":"No"),r.createElement(R.a.Item,null,"Past markers: ",t.pastMarkers)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,r.createElement(R.a.Item,null,"IssuerID: ",t.issuerID),r.createElement(R.a.Item,{style:{overflow:"auto"}},"Block Signature: ",t.signature)))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.strongParents.map((e,n)=>r.createElement(R.a.Item,{key:"Strong Parent"+n+1,className:"text-break"},"Strong Parents ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.strongParents[n]},t.strongParents[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.weakParents.map((e,n)=>r.createElement(R.a.Item,{key:"Weak Parent"+n+1,className:"text-break"},"Weak Parents ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.weakParents[n]},t.weakParents[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.shallowLikedParents.map((e,n)=>r.createElement(R.a.Item,{key:"Shallow Liked Parent"+n+1,className:"text-break"},"Shallow Liked Parents ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.shallowLikedParents[n]},t.shallowLikedParents[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.strongChildren.map((e,n)=>r.createElement(R.a.Item,{key:"Strong Child"+n+1,className:"text-break"},"Strong Child ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.strongChildren[n]},t.strongChildren[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.weakChildren.map((e,n)=>r.createElement(R.a.Item,{key:"Weak Child"+n+1,className:"text-break"},"Weak Child ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.weakChildren[n]},t.weakChildren[n])))))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(R.a,null,t.shallowLikeChildren.map((e,n)=>r.createElement(R.a.Item,{key:"ShallowLike Child"+n+1,className:"text-break"},"ShallowLike Child ",n+1,": "," ",r.createElement(H.Link,{to:"/explorer/block/"+t.shallowLikeChildren[n]},t.shallowLikeChildren[n])))))),r.createElement(d.a,{className:"mb-3",style:{marginTop:"20px",marginBottom:"20px"}},r.createElement(u.a,null,r.createElement("h3",null,"Payload"))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,this.renderPayload()))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,n&&r.createElement($e.a,{animation:"border"}))))}};vt=Et([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],vt);var It=n(289);function kt(e){let t="",n=Math.round(e);return t=n<1e3?n.toString(10)+" m":n<1e6?(n/1e3).toFixed(3)+" Km":n<1e9?(n/1e6).toFixed(3)+" Mm":n<1e12?(n/1e9).toFixed(3)+" Gm":n<1e15?(n/1e12).toFixed(3)+" Tm":(n/1e15).toFixed(3)+" Pm",t}var xt=n(281),St=n(99),jt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Ot=class extends r.Component{componentDidMount(){this.props.explorerStore.resetSearch(),this.props.explorerStore.searchAddress(this.props.match.params.id)}getSnapshotBeforeUpdate(e,t){return e.match.params.id!==this.props.match.params.id&&this.props.explorerStore.searchAddress(this.props.match.params.id),null}render(){let{id:e}=this.props.match.params,{addr:t,query_loading:n,query_err:a}=this.props.explorerStore,s=[],l=[],o=[];if(a)return r.createElement(p.a,null,r.createElement("h3",null,"Address not available - 404"),r.createElement("p",null,"Address ",e," not found."));if(t){t.explorerOutputs.forEach(e=>{e.metadata.consumerCount>0?s.push(e):l.push(e)});let e=(e,t)=>t.txTimestamp===e.txTimestamp?t.id.transactionID==e.id.transactionID?t.id.outputIndex-e.id.outputIndex:t.id.transactionID.localeCompare(e.id.transactionID):t.txTimestamp-e.txTimestamp;l.sort(e),s.sort(e)}return r.createElement(p.a,null,r.createElement("h3",{style:{marginBottom:"40px"}},"Address ",r.createElement("strong",null,e)," ",null!==t&&r.createElement("span",null,"(",t.explorerOutputs.length," Outputs)")),null!==t?r.createElement(r.Fragment,null,null!==t.explorerOutputs&&100===t.explorerOutputs.length&&r.createElement(It.a,{variant:"warning"},"Max. 100 outputs are shown."),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:7},r.createElement(R.a,null,r.createElement("h4",null,"Available Balances"),0===o.length?"There are no balances currently available.":r.createElement("div",null,r.createElement(xt.a,{style:{textAlign:"center"},key:"header"},r.createElement(d.a,null,r.createElement(u.a,{xs:9},r.createElement("strong",null,"Color")),r.createElement(u.a,null,r.createElement("strong",null,"Balance")))),o)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement("h4",null,"Unspent Outputs"),0===l.length?"There are no unspent outputs currently available.":r.createElement("div",null,l.map(e=>r.createElement(wt,{output:e})))))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,{variant:"flush"},r.createElement("h4",null,"Spent Outputs"),0===s.length?"There are no spent outputs currently available.":r.createElement("div",null,s.map(e=>r.createElement(wt,{output:e}))))))):r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,n&&r.createElement($e.a,{animation:"border"}))))}};Ot=jt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Ot);class wt extends r.Component{constructor(e){super(e),this.state={enabled:!1}}render(){return r.createElement(R.a.Item,null,r.createElement(St.a,{variant:Dt(this.props.output.output.type),onClick:()=>{this.setState({enabled:!this.state.enabled})},block:!0},r.createElement(d.a,null,r.createElement(u.a,{xs:6,style:{textAlign:"left"}},this.props.output.id.base58," "),r.createElement(u.a,{style:{textAlign:"left"}},function(e){switch(e){case je.Basic:return"Basic Output";case je.Alias:return"Alias Output";case je.Foundry:return"Foundry Output";case je.NFT:return"NFT Output";default:return}}(this.props.output.output.type)," "),r.createElement(u.a,{style:{textAlign:"left"}},new Date(1e3*this.props.output.txTimestamp).toLocaleString()))),r.createElement(d.a,{style:{fontSize:"90%"}},r.createElement(u.a,null,this.state.enabled?Ze(this.props.output.output):null),r.createElement(u.a,null,this.state.enabled?r.createElement(Ct,{metadata:this.props.output.metadata,timestamp:this.props.output.txTimestamp,pendingMana:this.props.output.pendingMana}):null)))}}class Ct extends r.Component{render(){let e=this.props.metadata,t=this.props.timestamp,n=this.props.pendingMana;return r.createElement(R.a,null,"ConflictIDs:",r.createElement(R.a,null,e.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e))))),r.createElement(R.a.Item,null,"Pending mana: ",kt(n)),r.createElement(R.a.Item,null,"Timestamp: ",new Date(1e3*t).toLocaleString()),r.createElement(R.a.Item,null,"Consumer Count: ",e.consumerCount),e.confirmedConsumer&&r.createElement(R.a.Item,null,"Confirmed Consumer: ",r.createElement("a",{href:"/explorer/transaction/"+e.confirmedConsumer},e.confirmedConsumer)," "))}}let Dt=e=>{switch(e){case je.Basic:case je.Alias:return"light";case je.Foundry:return"success";case je.NFT:return"info";default:return"danger"}};var Rt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let _t=class extends r.Component{render(){let{search:e}=this.props.match.params;return r.createElement(p.a,null,r.createElement("h3",null,"Tangle Explorer 404"),r.createElement("p",null,"The search via '",e,"' did not yield any results."))}};_t=Rt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],_t);var Nt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};const Tt=Object.assign({scales:{xAxes:[{ticks:{autoSkip:!0,maxTicksLimit:8,fontSize:8,minRotation:0,maxRotation:0},showXLabels:10,gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1},ticks:{callback:function(e,t,n){return _(Math.abs(e))},maxTicksLimit:3,fontSize:10}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${_(Math.abs(e.value))}`}}}},I);let Pt=class extends r.Component{render(){let e=this.props.nodeStore.neighbor_metrics.get(this.props.identity),t=e.current;return r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(E.a.Title,null,r.createElement("h5",null,t.id)),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,{variant:"flush",as:"small"},r.createElement(R.a.Item,null,"Origin:"," ",t.connection_origin))),r.createElement(u.a,null,r.createElement(R.a,{variant:"flush",as:"small"},r.createElement(R.a.Item,null,"Address: ",t.address)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement("h6",null,"Network (Tx/Rx)"),r.createElement(Q.a,{pill:!0,variant:"light"},"Total: ",t.packets_written," / ",t.packets_read)," ",r.createElement(Q.a,{pill:!0,variant:"light"},"Current: ",_(e.currentNetIO&&e.currentNetIO.tx)," / ",_(e.currentNetIO&&e.currentNetIO.rx)),r.createElement(v.Line,{height:30,data:e.netIOSeries,options:Tt})))))))}};Pt=Nt([Object(s.b)("nodeStore"),s.c],Pt);var Mt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Lt=class extends r.Component{render(){let e=[];return this.props.nodeStore.neighbor_metrics.forEach((t,n)=>{e.push(r.createElement(Pt,{key:n,identity:n}))}),r.createElement(p.a,null,r.createElement("h3",null,"Neighbors ",e.length>0&&r.createElement("span",null,"(",e.length,")")),r.createElement("p",null,"Currently connected neighbors."),e)}};Lt=Mt([Object(s.b)("nodeStore"),s.c],Lt);var At=n(57),Bt=n(103),zt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Ht=class extends r.Component{constructor(){super(...arguments),this.updateVerticesLimit=e=>{this.props.visualizerStore.updateVerticesLimit(e.target.value)},this.pauseResumeVisualizer=e=>{this.props.visualizerStore.pauseResume()},this.updateSearch=e=>{this.props.visualizerStore.updateSearch(e.target.value)},this.searchAndHighlight=e=>{"Enter"===e.key&&this.props.visualizerStore.searchAndHighlight()},this.toggleBackgroundDataCollection=()=>{this.props.nodeStore.collecting?this.props.nodeStore.unregisterHandlers():this.props.nodeStore.registerHandlers()}}componentDidMount(){this.props.visualizerStore.start()}componentWillUnmount(){this.props.visualizerStore.stop(),this.props.nodeStore.registerHandlers()}render(){let{vertices:e,finalized_count:t,selected:n,verticesLimit:a,tips_count:s,paused:l,search:o}=this.props.visualizerStore,{last_mps_metric:i,collecting:c}=this.props.nodeStore;return r.createElement(p.a,null,r.createElement("h3",null,"Visualizer"),r.createElement(d.a,{className:"mb-1"},r.createElement(u.a,{xs:5},r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement($.a.Prepend,null,r.createElement($.a.Text,{id:"vertices-limit"},"Vertices Limit")),r.createElement(K.a,{placeholder:"limit",type:"number",value:a.toString(),onChange:this.updateVerticesLimit,"aria-label":"vertices-limit","aria-describedby":"vertices-limit"})),r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement($.a.Prepend,null,r.createElement($.a.Text,{id:"vertices-limit"},"Search Vertex")),r.createElement(K.a,{placeholder:"search",type:"text",value:o,onChange:this.updateSearch,"aria-label":"vertices-search",onKeyUp:this.searchAndHighlight,"aria-describedby":"vertices-search"})),r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement(Bt.a,{trigger:["hover","focus"],placement:"right",overlay:r.createElement(At.a,{id:"popover-basic"},r.createElement(At.a.Content,null,"Ensures that only data needed for the visualizer is collected."))},r.createElement(St.a,{variant:"outline-secondary",onClick:this.toggleBackgroundDataCollection,size:"sm"},c?"Stop Background Data Collection":"Collect Background data")),r.createElement("br",null)),r.createElement($.a,{className:"mb-1",size:"sm"},r.createElement(Bt.a,{trigger:["hover","focus"],placement:"right",overlay:r.createElement(At.a,{id:"popover-basic"},r.createElement(At.a.Content,null,"Pauses/resumes rendering the graph."))},r.createElement(St.a,{onClick:this.pauseResumeVisualizer,size:"sm",variant:"outline-secondary"},l?"Resume Rendering":"Pause Rendering")))),r.createElement(u.a,{xs:{span:5,offset:2}},r.createElement("p",null,r.createElement(Q.a,{pill:!0,style:{background:"#b9b7bd",color:"white"}},"BLK Pending")," ",r.createElement(Q.a,{pill:!0,style:{background:"#6c71c4",color:"white"}},"BLK Confirmed")," ",r.createElement(Q.a,{pill:!0,style:{background:"#393e46",color:"white"}},"TX Pending")," ",r.createElement(Q.a,{pill:!0,style:{background:"#fad02c",color:"white"}},"TX Confirmed")," ",r.createElement(Q.a,{pill:!0,style:{background:"#cb4b16",color:"white"}},"Tip")," ",r.createElement(Q.a,{pill:!0,style:{background:"#b58900",color:"white"}},"Unknown"),r.createElement("br",null),"Vertices: ",e.size,", Tips: ",s,", Confirmed/UnConfirmed: ",t,"/",e.size-t,","," ","BPS: ",i.mps,r.createElement("br",null),"Selected: ",n?r.createElement(H.Link,{to:"/explorer/block/"+n.id},n.id.substr(0,10)):"-",r.createElement("br",null),n?n.strongParents&&r.createElement("span",null," Strong:"," ",n.strongParents.map(e=>r.createElement(H.Link,{to:"/explorer/block/"+e},e.substr(0,10)+" "))):"",r.createElement("br",null),n?n.weakParents&&r.createElement("span",null," Weak:"," ",n.weakParents.map(e=>r.createElement(H.Link,{to:"/explorer/block/"+e},e.substr(0,10)+" "))):"",r.createElement("br",null),n?n.shallowLikedParents&&r.createElement("span",null," Shallow Liked:"," ",n.shallowLikedParents.map(e=>r.createElement(H.Link,{to:"/explorer/block/"+e},e.substr(0,10)+" "))):""))),r.createElement("div",{className:"visualizer",style:{zIndex:-1,position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"#ededed"},id:"visualizer"}))}};Ht=zt([Object(s.b)("visualizerStore"),Object(s.b)("nodeStore"),s.c],Ht);var Ft=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Vt=class extends r.Component{componentDidMount(){this.props.explorerStore.getTips()}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{tipsList:e}=this.props.explorerStore;return r.createElement(p.a,null,r.createElement("h3",null,"Tips"),r.createElement(te.a,{bordered:!0},r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"BlockID"))),r.createElement("tbody",null,e)))}};Vt=Ft([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Vt);var Zt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Ut=class extends r.Component{componentDidMount(){this.props.explorerStore.getTransaction(this.props.txId)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{txId:e}=this.props,{query_err:t,tx:n}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Transaction not available - 404"),r.createElement("p",null,"Transaction with ID ",e," not found.")):r.createElement(ot,{txID:e,tx:n})}};Ut=Zt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Ut);var Wt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Jt=class extends r.Component{componentDidMount(){this.props.explorerStore.getTransactionMetadata(this.props.txId)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{txId:e}=this.props,{query_err:t,txMetadata:n}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Metadata"),r.createElement("p",null," Metadata for transaction ID ",e," not found.")):r.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},r.createElement("h4",null,"Metadata"),n&&r.createElement(R.a,null,r.createElement(R.a.Item,null,"ConflictIDs:",r.createElement(R.a,null,n.conflictIDs&&n.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement("a",{href:"/explorer/transaction/"+e},e))))),r.createElement(R.a.Item,null,"Booked: ",n.booked.toString()),r.createElement(R.a.Item,null,"Confirmation State: ",n.confirmationState)))}};Jt=Wt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Jt);var Gt=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let qt=class extends r.Component{componentDidMount(){this.props.explorerStore.getTransactionAttachments(this.props.txId)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{txAttachments:e}=this.props.explorerStore;return r.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},r.createElement("h4",null,"Attachments"),e&&e.blockIDs&&r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(R.a,null,e.blockIDs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/block/"+e},e)))))))}};qt=Gt([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],qt);class Xt extends r.Component{render(){let{id:e}=this.props.match.params;return r.createElement(p.a,null,r.createElement(Ut,{txId:e}),r.createElement(Jt,{txId:e}),r.createElement(qt,{txId:e}))}}var Qt;function Kt(e){switch(e){case Qt.Undefined:return"Undefined";case Qt.Rejected:return"Rejected";case Qt.Pending:return"Pending";case Qt.Accepted:return"Accepted";case Qt.Confirmed:return"Confirmed";default:return"Undefined Confirmation State"}}!function(e){e[e.Undefined=0]="Undefined",e[e.Rejected=1]="Rejected",e[e.Pending=2]="Pending",e[e.Accepted=3]="Accepted",e[e.Confirmed=4]="Confirmed"}(Qt||(Qt={}));var $t=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let Yt=class extends r.Component{componentDidMount(){this.props.explorerStore.getOutput(this.props.match.params.id),this.props.explorerStore.getPendingMana(this.props.match.params.id),this.props.explorerStore.getOutputMetadata(this.props.match.params.id),this.props.explorerStore.getOutputConsumers(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{id:e}=this.props.match.params,{query_err:t,output:n,pendingMana:a,outputMetadata:s,outputConsumers:l}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Output not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Output"),n&&r.createElement("div",{className:"mb-2"},Ze(n),r.createElement(R.a,null,a&&r.createElement(R.a.Item,null,"Pending Mana",r.createElement("hr",null),r.createElement("div",null,"Value: ",kt(a.mana)),r.createElement("div",null,"Timestamp: ",new Date(1e3*a.timestamp).toLocaleString())))),r.createElement("h4",null,"Metadata"),s&&r.createElement("div",{className:"mb-2"},r.createElement(R.a,null,r.createElement(R.a.Item,null,"Transaction ID: ",r.createElement("a",{href:"/explorer/transaction/"+s.outputID.transactionID},s.outputID.transactionID)," "),"ConflictIDs:",r.createElement(R.a,null,s.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:"ConflictID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/conflict/"+e},pt(e))))),r.createElement(R.a.Item,null,"Consumer Count: ",s.consumerCount),r.createElement(R.a.Item,null,"Confirmed Consumer: ",r.createElement("a",{href:"/explorer/transaction/"+s.confirmedConsumer},s.confirmedConsumer)," "),r.createElement(R.a.Item,null,"Confirmation State: ",Kt(s.confirmationState)),r.createElement(R.a.Item,null,"Confirmation State Time: ",new Date(1e3*s.confirmationStateTime).toLocaleString()))),r.createElement("h4",null,"Consumers"),l&&r.createElement("div",null,r.createElement(R.a,null,l.consumers.map((e,t)=>{return r.createElement(R.a.Item,{key:t},r.createElement("div",null,"Transaction ID: ",r.createElement("a",{href:"/explorer/transaction/"+e.transactionID},e.transactionID)),r.createElement("div",null,"Valid: ","true"===(n=e.valid)?r.createElement(Q.a,{variant:"success"},"True"):"false"===n?r.createElement(Q.a,{variant:"danger"},"False"):r.createElement(Q.a,{variant:"warning"},"Maybe")," "));var n}))))}};Yt=$t([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],Yt);var en=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let tn=class extends r.Component{componentDidMount(){this.props.explorerStore.getConflict(this.props.match.params.id),this.props.explorerStore.getConflictChildren(this.props.match.params.id),this.props.explorerStore.getConflictConflicts(this.props.match.params.id),this.props.explorerStore.getConflictVoters(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{id:e}=this.props.match.params,{query_err:t,conflict:n,conflictChildren:a,conflictConflicts:s,conflictVoters:l}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Conflict not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Conflict"),n&&r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",pt(n.id)),r.createElement(R.a.Item,null,"Parents:",r.createElement(R.a,null,n.parents.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/conflict/"+e},pt(e)))))),r.createElement(R.a.Item,null,"Conflicts:",n.conflictIDs&&r.createElement(R.a,null,n.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e))))),r.createElement(R.a.Item,null,"ConfirmationState: ",Kt(n.confirmationState)),r.createElement(R.a.Item,null," Children:",a&&r.createElement(R.a,null,a.childConflicts.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/conflict/"+e.conflictID},pt(e.conflictID)))))),r.createElement(R.a.Item,null," Conflicts:",s&&r.createElement(R.a,null,s.conflicts.map((e,t)=>r.createElement("div",{key:t},"OutputID: ",r.createElement("a",{href:"/explorer/output/"+e.outputID.base58},e.outputID.base58),r.createElement(R.a,{className:"mb-2"},e.conflictIDs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/conflict/"+e},pt(e))))))))),r.createElement(R.a.Item,null," Voters:",l&&r.createElement(R.a,null,l.voters.map((e,t)=>r.createElement(R.a.Item,{key:e+t},e))))))}};tn=en([Object(s.b)("nodeStore"),Object(s.b)("explorerStore"),s.c],tn);var nn=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let rn=class extends r.Component{render(){let{slotLiveFeed:e}=this.props.slotStore;return r.createElement(p.a,null,r.createElement("h3",null,"Slots"),r.createElement(te.a,{bordered:!0},r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"Index"),r.createElement("th",null,"Commitment ID"))),r.createElement("tbody",null,e)))}};rn=nn([Object(s.b)("nodeStore"),Object(s.b)("slotStore"),s.c],rn);var an=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let sn=class extends r.Component{componentDidMount(){const e=this.props.match.params.commitment;this.props.explorerStore.getSlotDetails(e)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{commitment:e}=this.props.match.params,{query_err:t,slotInfo:n}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Slot not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Slot"),n&&r.createElement(R.a,null,r.createElement(R.a.Item,null,"ID: ",e),r.createElement(R.a.Item,null,"Index: ",n.index),r.createElement(R.a.Item,null,"RootsID: ",n.rootsID),r.createElement(R.a.Item,null,"PrevEC: ",n.prevID),r.createElement(R.a.Item,null,"Cumulative Weight: ",n.cumulativeWeight),r.createElement(R.a.Item,null,"Blocks:",n.blocks&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.blocks.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/block/"+e},e)))))))))),r.createElement(R.a.Item,null,"Transactions:",n.transactions&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.transactions.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/transaction/"+e},e)))))))))),r.createElement(R.a.Item,null," Created outputs:",n.createdOutputs&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.createdOutputs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e)))))))))),r.createElement(R.a.Item,null," Spent outputs:",n.spentOutputs&&r.createElement(E.a,null,r.createElement(E.a.Body,null,r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,{xs:12,style:{"max-height":"300px",overflow:"auto"}},r.createElement(te.a,null,r.createElement("tbody",null,n.spentOutputs.map((e,t)=>r.createElement(R.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e))))))))))))}};sn=an([Object(s.b)("explorerStore"),s.c],sn);var ln=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l};let on=class extends r.Component{renderDevTool(){0}componentDidMount(){this.props.nodeStore.connect()}render(){return r.createElement("div",{className:"container"},r.createElement(i.a,{expand:"lg",bg:"light",variant:"light",className:"mb-4"},r.createElement(i.a.Brand,null,"iota-core"),r.createElement(c.a,{className:"mr-auto"},r.createElement(ge.LinkContainer,{to:"/dashboard"},r.createElement(c.a.Link,null,"Dashboard")),r.createElement(ge.LinkContainer,{to:"/neighbors"},r.createElement(c.a.Link,null,"Neighbors")),r.createElement(ge.LinkContainer,{to:"/explorer"},r.createElement(c.a.Link,null,"Explorer")),r.createElement(ge.LinkContainer,{to:"/visualizer"},r.createElement(c.a.Link,null,"Visualizer")),r.createElement(ge.LinkContainer,{to:"/slots"},r.createElement(c.a.Link,null,"Slot")),r.createElement(ge.LinkContainer,{to:"/tips"},r.createElement(c.a.Link,null,"Tips"))),r.createElement(i.a.Collapse,{className:"justify-content-end"},r.createElement(he,null),r.createElement(i.a.Text,null,!this.props.nodeStore.websocketConnected&&r.createElement(Q.a,{variant:"danger"},"WS not connected!")))),r.createElement(be.g,null,r.createElement(be.d,{exact:!0,path:"/dashboard",component:X}),r.createElement(be.d,{exact:!0,path:"/neighbors",component:Lt}),r.createElement(be.d,{exact:!0,path:"/explorer/block/:id",component:vt}),r.createElement(be.d,{exact:!0,path:"/explorer/address/:id",component:Ot}),r.createElement(be.d,{exact:!0,path:"/explorer/transaction/:id",component:Xt}),r.createElement(be.d,{exact:!0,path:"/explorer/output/:id",component:Yt}),r.createElement(be.d,{exact:!0,path:"/explorer/conflict/:id",component:tn}),r.createElement(be.d,{exact:!0,path:"/explorer/slot/commitment/:commitment",component:sn}),r.createElement(be.d,{exact:!0,path:"/explorer/404/:search",component:_t}),r.createElement(be.d,{exact:!0,path:"/slots",component:rn}),r.createElement(be.d,{exact:!0,path:"/tips",component:Vt}),r.createElement(be.d,{exact:!0,path:"/explorer",component:de}),r.createElement(be.d,{exact:!0,path:"/visualizer",component:Ht}),r.createElement(be.d,{exact:!0,path:"/visualizer/history",component:Ht}),r.createElement(be.c,{to:"/dashboard"})),this.props.children,this.renderDevTool())}};on=ln([Object(s.b)("nodeStore"),Object(s.b)("routerStore"),s.c],on);const cn=Object(o.hot)(({history:e})=>r.createElement(on,{history:e}));var pn=n(102),dn=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},un=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class mn{}class hn{constructor(){this.mem=new bn,this.scheduler=new En}}class fn{}class bn{}class gn{}class yn{}class En{}class vn{constructor(){this.collected=[],this.network_io=[]}addMetric(e){e.ts=F(Date.now(),"HH:MM:ss"),this.collected.push(e),this.collected.length>Sn&&this.collected.shift();let t=this.currentNetIO;t&&(this.network_io.length>Sn&&this.network_io.shift(),this.network_io.push(t))}get current(){return this.collected[this.collected.length-1]}get secondLast(){let e=this.collected.length-2;if(!(e<0))return this.collected[e]}get currentNetIO(){return this.current&&this.secondLast?{tx:this.current.packets_written-this.secondLast.packets_written,rx:this.current.packets_read-this.secondLast.packets_read,ts:F(new Date,"HH:MM:ss")}:null}get netIOSeries(){let e=Object.assign({},kn,xn("Tx","rgba(53, 180, 219,1)","rgba(53, 180, 219,0.4)")),t=Object.assign({},kn,xn("Rx","rgba(235, 134, 52)","rgba(235, 134, 52,0.4)")),n=[];for(let r=0;r{ve(fe.Status,this.updateStatus),ve(fe.BPSMetrics,e=>{this.addBPSMetric(this.updateLastBPSMetric(e))}),ve(fe.NeighborStats,this.updateNeighborMetrics),ve(fe.TipsMetrics,this.updateLastTipsMetric),ve(fe.ComponentCounterMetrics,this.updateLastComponentMetric),ve(fe.RateSetter,this.updateLastRateSetterMetric),this.updateCollecting(!0)},this.unregisterHandlers=()=>{Ie(fe.Status),Ie(fe.BPSMetrics),Ie(fe.NeighborStats),Ie(fe.TipsMetrics),Ie(fe.ComponentCounterMetrics),Ie(fe.RateSetter),this.updateCollecting(!1)},this.updateCollecting=e=>{this.collecting=e},this.updateWebSocketConnected=e=>this.websocketConnected=e,this.updateStatus=e=>{e.mem.ts=F(Date.now(),"HH:MM:ss"),this.collected_mem_metrics.length>Sn&&this.collected_mem_metrics.shift(),this.collected_mem_metrics.push(e.mem),this.status=e,e.scheduler.ts=F(Date.now(),"HH:MM:ss"),this.collected_scheduler_metrics.length>Sn&&this.collected_scheduler_metrics.shift(),this.collected_scheduler_metrics.push(e.scheduler)},this.updateNeighborMetrics=e=>{if(!e)return;let t=[];for(let n=0;n{e.ts=F(Date.now(),"HH:MM:ss"),this.last_rate_setter_metric=e,this.collected_rate_setter_metrics.length>Sn&&this.collected_rate_setter_metrics.shift(),this.collected_rate_setter_metrics.push(e)},this.updateLastBPSMetric=e=>{let t=new mn;return t.mps=e,t.ts=F(Date.now(),"HH:MM:ss"),this.last_mps_metric=t,t},this.addBPSMetric=e=>{this.collected_mps_metrics.length>Sn&&this.collected_mps_metrics.shift(),this.collected_mps_metrics.push(e)},this.updateLastTipsMetric=e=>{e.ts=F(Date.now(),"HH:MM:ss"),this.last_tips_metric=e,this.collected_tips_metrics.length>Sn&&this.collected_tips_metrics.shift(),this.collected_tips_metrics.push(e)},this.updateLastComponentMetric=e=>{e.ts=F(Date.now(),"HH:MM:ss"),this.last_component_counter_metric=e,this.collected_component_counter_metrics.length>Sn&&this.collected_component_counter_metrics.shift(),this.collected_component_counter_metrics.push(e)},this.status.tangleTime=new fn,this.status.tangleTime.ATT=0,this.status.tangleTime.RATT=0,this.status.tangleTime.CTT=0,this.status.tangleTime.RCTT=0,this.registerHandlers()}reset(){this.collected_mps_metrics=[],this.collected_mem_metrics=[],this.collected_scheduler_metrics=[],this.neighbor_metrics=new ye.ObservableMap,this.collected_tips_metrics=[],this.collected_component_counter_metrics=[]}reconnect(){this.updateWebSocketConnected(!1),setTimeout(()=>{this.connect()},5e3)}connect(){!function(e,t,n,r){let a=window.location,s="ws:";"https:"===a.protocol&&(s="wss:"),s+="//"+a.host+e;let l=new WebSocket(s);l.onopen=t,l.onclose=n,l.onerror=r,l.onmessage=e=>{let t=JSON.parse(e.data),n=Ee[t.type];n&&n(t.data)}}("/ws",()=>this.updateWebSocketConnected(!0),()=>this.reconnect(),()=>this.updateWebSocketConnected(!1))}get mpsSeries(){let e=Object.assign({},kn,xn("BPS","rgba(67, 196, 99,1)","rgba(67, 196, 99,0.4)")),t=[];for(let n=0;n1&&(a+=e+" Days, "),t>=0&&(a+=t<10?"0"+t+":":t+":"),n>=0&&(a+=n<10?"0"+n+":":n+":"),r>=0&&(a+=r<10?"0"+r:r),a}get memSeries(){let e=Object.assign({},kn,xn("Heap Sys","rgba(168, 50, 76,1)","rgba(168, 50, 76,0.4)")),t=Object.assign({},kn,xn("Heap Alloc","rgba(222, 49, 87,1)","rgba(222, 49, 87,0.4)")),n=Object.assign({},kn,xn("Heap Idle","rgba(222, 49, 182,1)","rgba(222, 49, 182,0.4)")),r=Object.assign({},kn,xn("Heap Released","rgba(250, 76, 252,1)","rgba(250, 76, 252,0.4)")),a=[];for(let s=0;s=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},Dn=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},Rn=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};!function(e){e[e.NotFound=0]="NotFound"}(On||(On={}));class _n{constructor(e){this.send_addr="",this.send_access_mana_node_id="",this.send_consensus_mana_node_id="",this.sending=!1,this.sendResult=null,this.query_error="",this.sendReq=()=>Rn(this,void 0,void 0,(function*(){this.updateSending(!0);try{let e=yield fetch(`/api/faucet/${this.send_addr}?accessMana=${this.send_access_mana_node_id}&consensusMana=${this.send_consensus_mana_node_id}`);if(200!==e.status)return void this.updateQueryError(On.NotFound);let t=yield e.json();setTimeout(()=>{this.updateSendResult(t)},2e3)}catch(e){this.updateQueryError(e)}})),this.updateSendResult=e=>{this.sending=!1,this.sendResult=e,this.routerStore.history.push("/explorer/address/"+this.send_addr)},this.updateSend=e=>{this.send_addr=e},this.updateSendAccessManaNodeID=e=>{this.send_access_mana_node_id=e},this.updateSendConsensusManaNodeID=e=>{this.send_consensus_mana_node_id=e},this.updateSending=e=>{this.sending=e,this.query_error=""},this.reset=()=>{this.send_addr=null,this.send_access_mana_node_id="",this.send_consensus_mana_node_id="",this.sending=!1,this.query_error=""},this.updateQueryError=e=>{this.sending=!1,this.query_error=e},this.routerStore=e}}Cn([ye.observable,Dn("design:type",String)],_n.prototype,"send_addr",void 0),Cn([ye.observable,Dn("design:type",String)],_n.prototype,"send_access_mana_node_id",void 0),Cn([ye.observable,Dn("design:type",String)],_n.prototype,"send_consensus_mana_node_id",void 0),Cn([ye.observable,Dn("design:type",Boolean)],_n.prototype,"sending",void 0),Cn([ye.observable,Dn("design:type",class{})],_n.prototype,"sendResult",void 0),Cn([ye.observable,Dn("design:type",String)],_n.prototype,"query_error",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSendResult",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSend",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSendAccessManaNodeID",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSendConsensusManaNodeID",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateSending",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"reset",void 0),Cn([ye.action,Dn("design:type",Object)],_n.prototype,"updateQueryError",void 0);var Nn=_n,Tn=n(35),Pn=n.n(Tn),Mn=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},Ln=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},An=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};class Bn{}const zn="#b9b7bd",Hn="#6c71c4",Fn="#393e46",Vn="#fad02c",Zn="#cb4b16",Un="#b58900",Wn="#586e75",Jn="#e105f5",Gn="#51e05d",qn="#859900";class Xn{constructor(e){this.vertices=new ye.ObservableMap,this.verticesLimit=1500,this.finalized_count=0,this.tips_count=0,this.verticesIncomingOrder=[],this.draw=!1,this.selected_via_click=!1,this.selected_origin_color=0,this.search="",this.paused=!1,this.fetchHistory=()=>An(this,void 0,void 0,(function*(){try{let e=yield fetch("/api/visualizer/history");(yield e.json()).vertices.forEach(e=>{this.addVertex(e)})}catch(e){console.log("Fail to fetch history in visualizer",e)}})),this.updateSearch=e=>{this.search=e.trim()},this.searchAndHighlight=()=>{if(this.clearSelected(),!this.search)return;let e=this.vertices.keys(),t=null;for(const n of e)if(n.indexOf(this.search)>=0){t=n;break}t&&this.updateSelected(this.vertices.get(t),!1)},this.pauseResume=()=>{if(this.paused)return this.renderer.resume(),void(this.paused=!1);this.renderer.pause(),this.paused=!0},this.updateVerticesLimit=e=>{this.verticesLimit=e},this.updateTxStatus=e=>{let t=this.vertices.get(e.id);t&&(t.is_tx_accepted=e.is_tx_accepted,this.vertices.set(e.id,t),this.draw&&this.drawVertex(t))},this.addVertex=e=>{let t=this.vertices.get(e.id);t?!t.is_blk_confirmed&&e.is_blk_confirmed&&this.finalized_count++:(e.is_blk_confirmed&&this.finalized_count++,this.verticesIncomingOrder.push(e.id),this.checkLimit()),this.vertices.set(e.id,e),this.draw&&this.drawVertex(e)},this.addTipInfo=e=>An(this,void 0,void 0,(function*(){let t=this.vertices.get(e.id);if(!t){t=new Bn,t.id=e.id;let n=yield fetch("/api/block/"+e.id);if(200===n.status){let e=yield n.json();t.strongParents=e.strongParents,t.weakParents=e.weakParents,t.shallowLikedParents=e.shallowLikedParents,t.is_blk_confirmed=e.acceptance}this.verticesIncomingOrder.push(t.id)}this.tips_count+=e.is_tip?1:t.is_tip?-1:0,t.is_tip=e.is_tip,this.vertices.set(e.id,t),this.draw&&this.drawVertex(t)})),this.checkLimit=()=>{for(;this.verticesIncomingOrder.length>this.verticesLimit;){let e=this.verticesIncomingOrder.shift(),t=this.vertices.get(e);this.selected&&e===this.selected.id&&this.clearSelected(),this.draw&&this.graph.removeNode(e),t&&(t.is_blk_confirmed&&this.finalized_count--,t.is_tip&&this.tips_count--,this.vertices.delete(e))}},this.drawVertex=e=>{let t=this.graph.getNode(e.id);if(t){this.graphics.getNodeUI(e.id).color=$n(this.colorForVertexState(e))}else t=this.graph.addNode(e.id,e);e.strongParents&&this.linkParents(e,t,e.strongParents),e.weakParents&&this.linkParents(e,t,e.weakParents),e.shallowLikedParents&&this.linkParents(e,t,e.shallowLikedParents)},this.linkParents=(e,t,n)=>{n.forEach(n=>{if(n&&(!t.links||!t.links.some(e=>e.fromId===n))){this.graph.getNode(n)?this.graph.addLink(n,e.id):console.log("link not added, parent doesn't exist",n)}})},this.colorForVertexState=e=>e?e.is_blk_confirmed?e.is_tx?e.is_tx_accepted?Vn:Fn:Hn:e.is_tip?Zn:e.is_tx?Fn:zn:Un,this.start=()=>{this.draw=!0,this.graph=Pn.a.Graph.graph();let e=Pn.a.Graph.View.webglGraphics();const t=Pn.a.Graph.Layout.forceDirected(this.graph,{springLength:10,springCoeff:1e-4,stableThreshold:.15,gravity:-2,dragCoeff:.02,timeStep:20,theta:.8});e.node(e=>e.data?Pn.a.Graph.View.webglSquare(20,this.colorForVertexState(e.data)):Pn.a.Graph.View.webglSquare(10,this.colorForVertexState(e.data))),e.link(()=>Pn.a.Graph.View.webglLine(Wn));let n=document.getElementById("visualizer");this.renderer=Pn.a.Graph.View.renderer(this.graph,{container:n,graphics:e,layout:t});let r=Pn.a.Graph.webglInputEvents(e,this.graph);r.mouseEnter(e=>{this.clearSelected(!0),this.updateSelected(e.data)}).mouseLeave(e=>{this.clearSelected(!1)}),r.click(e=>{this.clearSelected(!0),this.updateSelected(e.data,!0)}),this.graphics=e,this.renderer.run(),this.verticesIncomingOrder.forEach(e=>{let t=this.vertices.get(e);t&&this.drawVertex(t)})},this.stop=()=>{this.draw=!1,this.renderer.dispose(),this.graph=null,this.paused=!1,this.selected=null},this.updateSelected=(e,t)=>{if(!e)return;this.selected=e,this.selected_via_click=!!t;let n=this.graphics.getNodeUI(e.id);this.selected_origin_color=n.color,n.color=$n(qn),n.size=30;let r=this.graph.getNode(e.id);Kn(this.graph,r,e=>{},!0,e=>{this.graphics.getLinkUI(e.id).color=$n(Gn)},[]),Kn(this.graph,r,e=>{},!1,e=>{this.graphics.getLinkUI(e.id).color=$n(Jn)},[])},this.resetLinks=()=>{this.graph.forEachLink((function(e){this.graphics.getLinkUI(e.id).color=$n(Wn)}))},this.clearSelected=e=>{if(!this.selected||this.selected_via_click&&!e)return;let t=this.graph.getNode(this.selected.id);if(!t)return void this.resetLinks();let n=this.graphics.getNodeUI(this.selected.id);n.color=this.selected_origin_color,n.size=20;Kn(this.graph,t,e=>{},!0,e=>{this.graphics.getLinkUI(e.id).color=$n(Wn)},[]),Kn(this.graph,t,e=>{},!1,e=>{this.graphics.getLinkUI(e.id).color=$n(Wn)},[]),this.selected=null,this.selected_via_click=!1},this.routerStore=e,ve(fe.Vertex,this.addVertex),ve(fe.TipInfo,this.addTipInfo),ve(fe.TXAccepted,this.updateTxStatus)}}Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"vertices",void 0),Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"verticesLimit",void 0),Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"finalized_count",void 0),Mn([ye.observable,Ln("design:type",Object)],Xn.prototype,"tips_count",void 0),Mn([ye.observable,Ln("design:type",Bn)],Xn.prototype,"selected",void 0),Mn([ye.observable,Ln("design:type",String)],Xn.prototype,"search",void 0),Mn([ye.observable,Ln("design:type",Boolean)],Xn.prototype,"paused",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateSearch",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"searchAndHighlight",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"pauseResume",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateVerticesLimit",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateTxStatus",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"addVertex",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"addTipInfo",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"checkLimit",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"updateSelected",void 0),Mn([ye.action,Ln("design:type",Object)],Xn.prototype,"clearSelected",void 0);var Qn=Xn;function Kn(e,t,n,r,a=!1,s=[]){s.push(t);let l=0;for(;s.length>l;){const t=s[l++];if(n(t))return!0;if(!t.links)return;for(const n of t.links)r||n.toId!==t.id||s.includes(e.getNode(n.fromId))?r&&n.fromId===t.id&&!s.includes(e.getNode(n.toId))&&(a&&a(n),s.push(e.getNode(n.toId))):(a&&a(n),s.push(e.getNode(n.fromId)))}}function $n(e){let t=10414335;if("number"==typeof e)return e;if("string"==typeof e&&e)if(4===e.length&&(e=e.replace(/([^#])/g,"$1$1")),9===e.length)t=parseInt(e.substr(1),16);else{if(7!==e.length)throw'Color expected in hex format with preceding "#". E.g. #00ff00. Got value: '+e;t=parseInt(e.substr(1),16)<<8|255}return t}var Yn=n(286),er=n.n(Yn),tr=n(287),nr=n.n(tr),rr=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},ar=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class sr{constructor(e,t,n){this.nodeID=e,this.time=t,this.txID=n}}class lr extends sr{constructor(e,t,n,r){super(e,t,n),this.amount=r}}class or extends sr{constructor(e,t,n,r){super(e,t,n),this.amount=r}}const ir=r.createElement("tr",null,r.createElement("td",{key:"emptyRow",colSpan:4},"There are no nodes to view with the current search parameters.")),cr=r.createElement(xt.a,{key:"emptyItem"},"There are no events to view with the current search parameters.");class pr{constructor(){this.manaValues=[],this.prevManaValues=[0,0],this.accessNetworkRichest=[],this.totalAccessNetwork=0,this.accessActiveRichest=[],this.totalAccessActive=0,this.consensusNetworkRichest=[],this.totalConsensusNetwork=0,this.consensusActiveRichest=[],this.totalConsensusActive=0,this.searchNode="",this.searchTxID="",this.accessEvents=[],this.consensusEvents=[],this.initAccessEvents=[],this.initConsensusEvents=[],this.lastRemovedAccessEventTime=null,this.lastRemovedConsensusEventTime=null,this.lastInitRemovedAccessEventTime=null,this.lastInitRemovedConsensusEventTime=null,this.eventsUpdated=!1,this.displayedAccessEvents=[],this.displayedConsensusEvents=[],this.nodeNotSyncedListItem=r.createElement(xt.a,null,"Wait for node to be synced to display mana events."),this.addNewManaValue=e=>{this.ownID=this.ownID?this.ownID:e.nodeID,100===this.manaValues.length&&this.manaValues.shift();let t=[new Date(1e3*e.time),e.access,e.consensus];this.manaValues.length>0&&(this.prevManaValues=[this.manaValues[this.manaValues.length-1][1],this.manaValues[this.manaValues.length-1][2]]),this.manaValues.push(t)},this.updateNetworkRichest=e=>{switch(e.manaType){case"Access":this.totalAccessNetwork=e.totalMana,this.accessNetworkRichest=e.nodes;break;case"Consensus":this.totalConsensusNetwork=e.totalMana,this.consensusNetworkRichest=e.nodes}},this.updateActiveRichest=e=>{switch(e.manaType){case"Access":this.totalAccessActive=e.totalMana,this.accessActiveRichest=e.nodes;break;case"Consensus":this.totalConsensusActive=e.totalMana,this.consensusActiveRichest=e.nodes}},this.updateAllowedPledgeIDs=e=>{this.allowedPledgeIDs=e},this.addNewInitPledge=e=>{let t=[];switch(e.manaType){case"Access":if(t=this.initAccessEvents,t.length>=100){let e=t.shift();this.lastInitRemovedAccessEventTime=e.time}break;case"Consensus":if(t=this.initConsensusEvents,t.length>=100){let e=t.shift();this.lastInitRemovedConsensusEventTime=e.time}break;default:return}let n=new lr(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n)},this.addNewPledge=e=>{let t=[];switch(e.manaType){case"Access":if(t=this.accessEvents,t.length>=100){let e=t.shift();this.lastRemovedAccessEventTime=e.time}break;case"Consensus":if(t=this.consensusEvents,t.length>=100){let e=t.shift();this.lastRemovedConsensusEventTime=e.time}break;default:return}let n=new lr(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n),this.eventsUpdated=!0},this.addNewInitRevoke=e=>{let t=[];switch(e.manaType){case"Consensus":if(t=this.initConsensusEvents,t.length>=100){let e=t.shift();this.lastInitRemovedConsensusEventTime=e.time}break;default:return}let n=new or(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n)},this.addNewRevoke=e=>{let t=[];switch(e.manaType){case"Consensus":if(t=this.consensusEvents,t.length>=100){let e=t.shift();this.lastRemovedConsensusEventTime=e.time}break;default:return}let n=new or(e.nodeID,new Date(1e3*e.time),e.txID,e.amount);t.push(n),this.eventsUpdated=!0},this.initDone=()=>{this.accessEvents=this.initAccessEvents,this.lastRemovedAccessEventTime=this.lastInitRemovedAccessEventTime,this.consensusEvents=this.initConsensusEvents,this.lastRemovedConsensusEventTime=this.lastInitRemovedConsensusEventTime,this.displayedAccessEvents=[...this.accessEvents],this.displayedConsensusEvents=[...this.consensusEvents],setInterval(()=>{this.eventsUpdated&&(this.displayedAccessEvents=[...this.accessEvents],this.displayedConsensusEvents=[...this.consensusEvents],this.eventsUpdated=!1)},500)},this.nodeList=(e,t)=>{if(null===e||null==e)return[];let n=[],a=(e,a)=>{n.push(r.createElement("tr",{key:e.shortNodeID,style:{backgroundColor:e.shortNodeID===this.ownID?"#e8ffff":"white"}},r.createElement("td",{style:{borderTopLeftRadius:e.shortNodeID===this.ownID?"10px":"0",borderBottomLeftRadius:e.shortNodeID===this.ownID?"10px":"0"}}," ",a+1," "),r.createElement("td",null,e.shortNodeID),r.createElement("td",null,kt(e.mana)),r.createElement("td",{style:{borderTopRightRadius:e.shortNodeID===this.ownID?"10px":"0",borderBottomRightRadius:e.shortNodeID===this.ownID?"10px":"0"}},(e.mana/t*100).toFixed(2),"%")))};return e.forEach((e,t)=>{this.passesNodeFilter(e.shortNodeID)&&a(e,t)}),n},this.computeEventList=e=>{let t=[];if(t.push(r.createElement(xt.a,{style:{textAlign:"center"},key:"header"},r.createElement(d.a,null,r.createElement(u.a,{xs:1,className:"m-auto"}),r.createElement(u.a,null,"NodeID"),r.createElement(u.a,null,"Tx ID"),r.createElement(u.a,{xs:5},"Time")))),null==e)return t;return e.reverse().forEach((e,n)=>{this.passesNodeFilter(e.nodeID)&&this.passesTxFilter(e.txID)&&((e,n)=>{if(e instanceof lr){let a=e=>r.createElement(At.a,{id:e.nodeID+n.toString()},r.createElement(At.a.Title,{as:"h3"},"Mana Pledged"),r.createElement(At.a.Content,null,r.createElement("div",null,"Base Mana: ",r.createElement("strong",null,"+",kt(e.amount))),r.createElement("div",null,"With Transaction: ",r.createElement("strong",null,r.createElement("a",{onClick:()=>navigator.clipboard.writeText(e.txID),href:"/explorer/transaction/"+e.txID},e.txID))),r.createElement("div",null,"To NodeID: ",r.createElement("strong",null,e.nodeID)),r.createElement("div",null,"Time of Pledge: ",r.createElement("strong",null,e.time.toLocaleTimeString()))));t.push(r.createElement(Bt.a,{key:e.nodeID+n.toString(),trigger:"focus",placement:"top",overlay:a(e)},r.createElement(xt.a,{style:{backgroundColor:"#41aea9",color:"white",textAlign:"center"},key:e.nodeID+n.toString(10),as:"button"},r.createElement(d.a,null,r.createElement(u.a,{xs:1,className:"m-auto"},r.createElement("img",{src:er.a,alt:"Plus",width:"20px",className:"d-block mx-auto"})),r.createElement(u.a,null,e.nodeID),r.createElement(u.a,null,e.txID.substring(0,7)+"..."),r.createElement(u.a,{xs:5},e.time.toLocaleString())))))}else if(e instanceof or){let a=e=>r.createElement(At.a,{id:e.nodeID+n.toString()},r.createElement(At.a.Title,{as:"h3"},"Mana Revoked"),r.createElement(At.a.Content,null,r.createElement("div",null,"Base Mana 1: ",r.createElement("strong",null,"-",kt(e.amount))),r.createElement("div",null,"With Transaction: ",r.createElement("strong",null,r.createElement("a",{onClick:()=>navigator.clipboard.writeText(e.txID),href:"/explorer/transaction/"+e.txID},e.txID))),r.createElement("div",null,"From NodeID: ",r.createElement("strong",null,e.nodeID)),r.createElement("div",null,"Time of Revoke: ",r.createElement("strong",null,e.time.toLocaleTimeString()))));t.push(r.createElement(Bt.a,{key:e.nodeID+n.toString(),trigger:"focus",placement:"top",overlay:a(e)},r.createElement(xt.a,{style:{backgroundColor:"#213e3b",color:"white",textAlign:"center"},key:e.nodeID+n.toString(10),as:"button"},r.createElement(d.a,null,r.createElement(u.a,{xs:1},r.createElement("img",{src:nr.a,alt:"Minus",width:"20px",className:""})),r.createElement(u.a,null,e.nodeID),r.createElement(u.a,null,e.txID.substring(0,7)+"..."),r.createElement(u.a,{xs:5},e.time.toLocaleString())))))}})(e,n)}),t},this.passesNodeFilter=e=>0===this.searchNode.trim().length||!!e.toLowerCase().includes(this.searchNode.toLowerCase()),this.passesTxFilter=e=>0===this.searchTxID.trim().length||!!e.toLowerCase().includes(this.searchTxID.toLowerCase()),this.manaValues=[],ve(fe.Mana,this.addNewManaValue),ve(fe.ManaMapOverall,this.updateNetworkRichest),ve(fe.ManaMapOnline,this.updateActiveRichest)}updateNodeSearch(e){this.searchNode=e.trim()}updateTxSearch(e){this.searchTxID=e.trim()}get networkRichestFeedAccess(){let e=this.nodeList(this.accessNetworkRichest,this.totalAccessNetwork);return 0===e.length?[ir]:e}get networkRichestFeedConsensus(){let e=this.nodeList(this.consensusNetworkRichest,this.totalConsensusNetwork);return 0===e.length?[ir]:e}get activeRichestFeedAccess(){let e=this.nodeList(this.accessActiveRichest,this.totalAccessActive);return 0===e.length?[ir]:e}get activeRichestFeedConsensus(){let e=this.nodeList(this.consensusActiveRichest,this.totalConsensusActive);return 0===e.length?[ir]:e}get accessHistogramInput(){if(void 0===this.accessNetworkRichest||null===this.accessNetworkRichest)return[["",0]];let e=new Array;for(let t=0;te.shortNodeID===this.ownID;let n=this.accessNetworkRichest.findIndex(t);switch(n){case-1:break;default:e=(this.accessNetworkRichest.length-(n+1))/this.accessNetworkRichest.length*100}}return e}get consensusPercentile(){let e=0;if(void 0!==this.consensusNetworkRichest&&null!==this.consensusNetworkRichest){const t=e=>e.shortNodeID===this.ownID;let n=this.consensusNetworkRichest.findIndex(t);switch(n){case-1:break;default:e=(this.consensusNetworkRichest.length-(n+1))/this.consensusNetworkRichest.length*100}}return e}get accessEventList(){let e=this.computeEventList(this.displayedAccessEvents);return 1===e.length&&e.push(cr),e}get consensusEventList(){let e=this.computeEventList(this.displayedConsensusEvents);return 1===e.length&&e.push(cr),e}}rr([ye.observable,ar("design:type",Array)],pr.prototype,"manaValues",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"prevManaValues",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"accessNetworkRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalAccessNetwork",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"accessActiveRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalAccessActive",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"consensusNetworkRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalConsensusNetwork",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"consensusActiveRichest",void 0),rr([ye.observable,ar("design:type",Number)],pr.prototype,"totalConsensusActive",void 0),rr([ye.observable,ar("design:type",Object)],pr.prototype,"searchNode",void 0),rr([ye.observable,ar("design:type",Object)],pr.prototype,"searchTxID",void 0),rr([ye.observable,ar("design:type",class{})],pr.prototype,"allowedPledgeIDs",void 0),rr([ye.observable,ar("design:type",Date)],pr.prototype,"lastRemovedAccessEventTime",void 0),rr([ye.observable,ar("design:type",Date)],pr.prototype,"lastRemovedConsensusEventTime",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"displayedAccessEvents",void 0),rr([ye.observable,ar("design:type",Array)],pr.prototype,"displayedConsensusEvents",void 0),rr([ye.action,ar("design:type",Function),ar("design:paramtypes",[String]),ar("design:returntype",void 0)],pr.prototype,"updateNodeSearch",null),rr([ye.action,ar("design:type",Function),ar("design:paramtypes",[String]),ar("design:returntype",void 0)],pr.prototype,"updateTxSearch",null),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewManaValue",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"updateNetworkRichest",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"updateActiveRichest",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"updateAllowedPledgeIDs",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewInitPledge",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewPledge",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewInitRevoke",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"addNewRevoke",void 0),rr([ye.action,ar("design:type",Object)],pr.prototype,"initDone",void 0),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"networkRichestFeedAccess",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"networkRichestFeedConsensus",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"activeRichestFeedAccess",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"activeRichestFeedConsensus",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"accessHistogramInput",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"consensusHistogramInput",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"accessPercentile",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"consensusPercentile",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"accessEventList",null),rr([ye.computed,ar("design:type",Object),ar("design:paramtypes",[])],pr.prototype,"consensusEventList",null);var dr=pr,ur=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},mr=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},hr=function(e,t,n,r){return new(n||(n=Promise))((function(a,s){function l(e){try{i(r.next(e))}catch(e){s(e)}}function o(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,o)}i((r=r.apply(e,t||[])).next())}))};class fr{constructor(){this.liveFeed=[],this.addLiveFeed=e=>hr(this,void 0,void 0,(function*(){-1===this.liveFeed.findIndex(t=>t.id==e.id)&&(this.liveFeed.length>=100&&this.liveFeed.shift(),this.liveFeed.push(e))})),ve(fe.SlotInfo,this.addLiveFeed)}get slotLiveFeed(){let e=[];for(let t=this.liveFeed.length-1;t>=0;t--){let n=this.liveFeed[t];e.push(r.createElement("tr",{key:n.id},r.createElement("td",null,n.index),r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/slot/commitment/"+n.id},n.id))))}return e}}ur([ye.observable,mr("design:type",Array)],fr.prototype,"liveFeed",void 0),ur([ye.action,mr("design:type",Object)],fr.prototype,"addLiveFeed",void 0),ur([ye.computed,mr("design:type",Object),mr("design:paramtypes",[])],fr.prototype,"slotLiveFeed",null);var br=function(e,t,n,r){var a,s=arguments.length,l=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(l=(s<3?a(l):s>3?a(t,n,l):a(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l},gr=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class yr{constructor(e,t){this.updateConflictSets=e=>{this.conflictSets.set(e.conflictSetID,e)},this.updateConflicts=e=>{this.conflicts.set(e.conflictID,e)},this.routerStore=e,this.nodeStore=t,this.conflictSets=new Map,this.conflicts=new Map,ve(fe.ConflictSet,this.updateConflictSets),ve(fe.Conflict,this.updateConflicts)}get conflictsLiveFeed(){let e=Array.from(this.conflictSets.values());e.sort((e,t)=>t.arrivalTime-e.arrivalTime||e.conflictSetID.localeCompare(t.conflictSetID));let t=[];for(let n of e){if(t.push(r.createElement("tr",{key:n.conflictSetID,onClick:()=>n.shown=!n.shown,style:{cursor:"pointer"}},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/output/"+n.conflictSetID},n.conflictSetID)),r.createElement("td",null,new Date(1e3*n.arrivalTime).toLocaleString()),r.createElement("td",null,n.resolved?"Yes":"No"),r.createElement("td",null,n.timeToResolve/1e6))),!n.shown)continue;let e=Array.from(this.conflicts.values());e.sort((e,t)=>e.issuingTime-t.issuingTime||e.conflictID.localeCompare(t.conflictID));let a=[];for(let t of e)for(let e of t.conflictSetIDs)e===n.conflictSetID&&a.push(r.createElement("tr",{key:t.conflictID,className:t.confirmationState>Qt.Accepted?"table-success":""},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/branch/"+t.conflictID},t.conflictID)),r.createElement("td",null,Kt(t.confirmationState)),r.createElement("td",null," ",new Date(1e3*t.issuingTime).toLocaleString()),r.createElement("td",null,t.issuerNodeID)));t.push(r.createElement("tr",{key:n.conflictSetID+"_branches"},r.createElement("td",{colSpan:4},r.createElement(te.a,{size:"sm"},r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"BranchID"),r.createElement("th",null,"ConfirmationState"),r.createElement("th",null,"IssuingTime"),r.createElement("th",null,"Issuer NodeID"))),r.createElement("tbody",null,a)))))}return t}}br([ye.observable,gr("design:type",Map)],yr.prototype,"conflictSets",void 0),br([ye.observable,gr("design:type",Map)],yr.prototype,"conflicts",void 0),br([ye.action,gr("design:type",Object)],yr.prototype,"updateConflictSets",void 0),br([ye.action,gr("design:type",Object)],yr.prototype,"updateConflicts",void 0),br([ye.computed,gr("design:type",Object),gr("design:paramtypes",[])],yr.prototype,"conflictsLiveFeed",null);var Er=yr;const vr=new pn.RouterStore,Ir=new wn,kr={routerStore:vr,nodeStore:Ir,explorerStore:new Ke(vr),conflictsStore:new Er(vr,Ir),faucetStore:new Nn(vr),visualizerStore:new Qn(vr),manaStore:new dr,slotStore:new fr},xr=Object(l.a)(),Sr=Object(pn.syncHistoryWithStore)(xr,vr);a.render(r.createElement(s.a,Object.assign({},kr),r.createElement(be.e,{history:Sr},r.createElement(cn,{history:Sr}))),document.getElementById("root"))}},[[434,1,2]]]); \ No newline at end of file diff --git a/components/dashboard/frontend/build/app.9e5b91b17efd1cc0a4d0.js.map b/components/dashboard/frontend/build/app.991aa07a823b10139416.js.map similarity index 99% rename from components/dashboard/frontend/build/app.9e5b91b17efd1cc0a4d0.js.map rename to components/dashboard/frontend/build/app.991aa07a823b10139416.js.map index f61e3cc15..88dc0f024 100644 --- a/components/dashboard/frontend/build/app.9e5b91b17efd1cc0a4d0.js.map +++ b/components/dashboard/frontend/build/app.991aa07a823b10139416.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./assets/plus.svg","webpack:///./assets/minus.svg","webpack:///../node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/components/Uptime.tsx","webpack:///./app/components/Version.tsx","webpack:///./app/misc/Chart.ts","webpack:///./app/components/BPSChart.tsx","webpack:///./app/components/TipsChart.tsx","webpack:///./app/components/MemChart.tsx","webpack:///./app/components/ComponentCounterChart.tsx","webpack:///./app/components/TangleTime.tsx","webpack:///./app/components/Bootstrapped.tsx","webpack:///./app/components/Dashboard.tsx","webpack:///./app/components/ExplorerSearchbar.tsx","webpack:///./app/components/ExplorerLiveFeed.tsx","webpack:///./app/components/ExplorerTransactionSearchbar.tsx","webpack:///./app/components/ExplorerOutputSearchbar.tsx","webpack:///./app/components/ExplorerConflictSearchbar.tsx","webpack:///./app/components/Explorer.tsx","webpack:///./app/components/NavExplorerSearchbar.tsx","webpack:///./app/misc/WS.ts","webpack:///./app/misc/Payload.ts","webpack:///./app/utils/condition.tsx","webpack:///./app/utils/feature.tsx","webpack:///./app/utils/output.tsx","webpack:///./app/components/NativeToken.tsx","webpack:///./app/components/Condition.tsx","webpack:///./app/components/Feature.tsx","webpack:///./app/components/BasicOutput.tsx","webpack:///./app/components/AliasOutput.tsx","webpack:///./app/components/FoundryOutput.tsx","webpack:///./app/components/NFTOutput.tsx","webpack:///./app/stores/ExplorerStore.tsx","webpack:///./app/components/BasicPayload.tsx","webpack:///./app/utils/unlock_block.ts","webpack:///./app/components/Ed25519Signature.tsx","webpack:///./app/components/UnlockBlock.tsx","webpack:///./app/components/Transaction.tsx","webpack:///./app/components/TransactionPayload.tsx","webpack:///./app/utils/conflict.ts","webpack:///./app/components/FaucetPayload.tsx","webpack:///./app/components/TaggedDataPayload.tsx","webpack:///./app/components/ExplorerBlockQueryResult.tsx","webpack:///./app/utils/index.ts","webpack:///./app/components/ExplorerAddressResult.tsx","webpack:///./app/components/Explorer404.tsx","webpack:///./app/components/Neighbor.tsx","webpack:///./app/components/Neighbors.tsx","webpack:///./app/components/Visualizer.tsx","webpack:///./app/components/Tips.tsx","webpack:///./app/components/ExplorerTransaction.tsx","webpack:///./app/components/ExplorerTransactionMetadata.tsx","webpack:///./app/components/ExplorerTransactionAttachments.tsx","webpack:///./app/components/ExplorerTransactionQueryResult.tsx","webpack:///./app/utils/confirmation_state.ts","webpack:///./app/components/ExplorerOutputQueryResult.tsx","webpack:///./app/components/ExplorerConflictQueryResult.tsx","webpack:///./app/components/SlotLiveFeed.tsx","webpack:///./app/components/ExplorerSlotQueryResult.tsx","webpack:///./app/components/Root.tsx","webpack:///./app/App.tsx","webpack:///./app/stores/NodeStore.ts","webpack:///./app/stores/FaucetStore.ts","webpack:///./app/stores/VisualizerStore.ts","webpack:///./app/stores/ManaStore.tsx","webpack:///./app/stores/SlotStore.tsx","webpack:///./app/stores/ConflictsStore.tsx","webpack:///./main.tsx"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","this","props","nodeStore","uptime","status","version","defaultChartOptions","elements","line","tension","animation","duration","hover","animationDuration","responsiveAnimationDuration","lineChartOptions","assign","scales","xAxes","ticks","autoSkip","maxTicksLimit","fontSize","minRotation","maxRotation","gridLines","display","yAxes","callback","value","index","values","Math","abs","beginAtZero","tooltips","callbacks","label","tooltipItem","data","datasets","datasetIndex","Card","Body","Title","last_mps_metric","mps","height","mpsSeries","options","last_tips_metric","totaltips","tipsSeries","showXLabels","prettysize","mem","heap_alloc","num_gc","last_pause_gc","heap_objects","heap_sys","heap_idle","heap_released","memSeries","style","flexDirection","last_component_counter_metric","store","last_rate_setter_metric","estimate","componentSeries","tangleTime","synced","className","to","acceptedBlockID","confirmedBlockID","confirmedSlot","committedSlot","dateformat","Date","ATT","CTT","RATT","RCTT","bootstrapped","Container","Row","Col","ListGroup","variant","Item","ComponentCounterChart","updateSearch","explorerStore","target","executeSearch","key","searchAny","search","searching","InputGroup","FormControl","placeholder","onChange","onKeyUp","disabled","blksLiveFeed","xs","Table","txID","routerStore","push","outputID","conflictID","href","Form","inline","as","type","WSMsgType","handlers","registerHandler","blkTypeID","handler","unregisterHandler","PayloadType","ConditionType","FeatureType","OutputType","Output","getPayloadType","p","TaggedData","Transaction","Faucet","token","amount","unlock","address","pubKeyHash","unixTime","returnAddress","conditionToComponent","cond","Address","StateControllerAddress","GovernorAddress","StorageDepositReturn","Expiration","Timelock","feature","tag","featureToComponent","feat","Sender","Issuer","Metadata","Tag","hex","output","nativeTokens","n","_","unlockConditions","c","features","f","transactionID","outputIndex","wordBreak","aliasId","stateIndex","stateMetadata","foundryCounter","serialNumber","tokenScheme","nftId","outputToComponent","Basic","Alias","Foundry","NFT","GenesisBlockID","SlotInfo","QueryError","latest_blocks","blk","addr","tx","txMetadata","txAttachments","outputMetadata","outputConsumers","pendingMana","conflict","conflictChildren","conflictConflicts","conflictVoters","tips","slotInfo","query_loading","query_err","search_result","updateSearching","res","fetch","result","json","updateSearchResult","err","updateQueryError","resetSearch","block","searchBlock","updateQueryLoading","fetchJson","updateBlock","searchAddress","updateAddress","getSlotDetails","getSlotInfo","getTransaction","i","inputs","length","inputID","referencedOutputID","referencedOutputRes","genOutput","getTransactionAttachments","attachments","getTransactionMetadata","getOutput","getOutputMetadata","getOutputConsumers","getPendingMana","getConflict","getConflictChildren","getConflictConflicts","getConflictVoters","getTips","reset","conflictIDs","addedConflictIDs","subtractedConflictIDs","strongChildren","weakChildren","shallowLikeChildren","strongParents","weakParents","shallowLikedParents","payloadType","payload","loading","addLiveFeedBlock","findIndex","t","shift","Block","feed","payload_type","list","blkId","method","route","requestData","body","JSON","stringify","v","Uint8Array","Array","from","undefined","response","headers","ok","NotFound","BadRequest","content_title","content","SignatureType","signature","publicKey","signatureType","Ed25519","Badge","sigType","BLS","renderSignatureComponent","maxHeight","overflow","width","marginTop","marginBottom","paddingBottom","borderBottom","networkId","creationSlot","input","Provider","color","size","outputs","unlocks","txId","resolveBase58ConflictID","base58Conflict","MasterConflictInBase58","UndefinedConflictInBase58","LazyBookedConflictsConflictInBase58","InvalidConflictInBase58","accessManaPledgeID","consensusManaPledgeID","nonce","match","params","prevProps","prevState","objectivelyInvalid","marginRight","issuanceTimestamp","solidificationTimestamp","sequenceNumber","solid","scheduled","booked","orphaned","subjectivelyInvalid","acceptance","acceptanceTime","confirmation","confirmationTime","confirmationBySlot","confirmationBySlotTime","commitmentID","commitment","prevID","rootsID","cumulativeWeight","latestConfirmedSlot","rank","sequenceID","pastMarkerGap","isPastMarker","pastMarkers","issuerID","renderPayload","Spinner","displayManaUnit","mana","roundedMana","round","toString","toFixed","spent","unspent","available_balances","explorerOutputs","forEach","metadata","consumerCount","timestampCompareFn","a","b","txTimestamp","localeCompare","sort","Alert","ListGroupItem","textAlign","super","state","enabled","Button","getVariant","onClick","setState","base58","outputTypeToName","toLocaleString","timestamp","confirmedConsumer","outputType","neighborMetrics","neighbor_metrics","get","identity","last","current","connection_origin","pill","packets_written","packets_read","currentNetIO","rx","netIOSeries","neighborsEle","k","updateVerticesLimit","visualizerStore","pauseResumeVisualizer","pauseResume","searchAndHighlight","toggleBackgroundDataCollection","collecting","unregisterHandlers","registerHandlers","start","stop","vertices","finalized_count","selected","verticesLimit","tips_count","paused","Prepend","Text","OverlayTrigger","trigger","placement","overlay","Popover","Content","span","offset","background","substr","parent","zIndex","position","top","left","tipsList","bordered","confirmationState","blockIDs","ConfirmationState","resolveConfirmationState","Undefined","Rejected","Pending","Accepted","Confirmed","confirmationStateTime","consumers","val","valid","parents","childConflicts","conflicts","j","voters","s","slotLiveFeed","slotStore","blocks","transactions","createdOutputs","spentOutputs","connect","Navbar","expand","bg","Brand","Nav","Link","Collapse","websocketConnected","exact","path","component","children","renderDevTool","App","history","BPSMetric","Status","MemoryMetrics","scheduler","SchedulerMetric","TipsMetric","RateSetterMetric","collected","network_io","metric","ts","now","maxMetricsDataPoints","netIO","secondLast","chartSeriesOpts","series","labels","ComponentCounterMetric","fill","lineTension","backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","pointHoverRadius","name","bgColor","collected_mps_metrics","collected_rate_setter_metrics","collected_scheduler_metrics","collected_mem_metrics","collected_tips_metrics","collected_component_counter_metrics","updateStatus","BPSMetrics","addBPSMetric","updateLastBPSMetric","NeighborStats","updateNeighborMetrics","TipsMetrics","updateLastTipsMetric","ComponentCounterMetrics","updateLastComponentMetric","RateSetter","updateLastRateSetterMetric","updateCollecting","updateWebSocketConnected","connected","updated","neighbMetrics","addMetric","set","includes","delete","mpsMetric","tipsMetric","componentCounterMetric","setTimeout","onOpen","onClose","onError","loc","window","location","uri","protocol","host","ws","WebSocket","onopen","onclose","onerror","onmessage","parse","connectWebSocket","reconnect","stored","solidified","solidifier","booker","bufferSize","currentBufferSize","deficit","day","hour","minute","seconds","floor","str","heapSys","heapAlloc","heapIdle","heapReleased","FaucetStore","send_addr","send_access_mana_node_id","send_consensus_mana_node_id","sending","sendResult","query_error","sendReq","updateSending","updateSendResult","updateSend","updateSendAccessManaNodeID","access_mana","updateSendConsensusManaNodeID","consensus_mana","Vertex","COLOR","verticesIncomingOrder","draw","selected_via_click","selected_origin_color","fetchHistory","addVertex","console","log","trim","clearSelected","iter","found","indexOf","updateSelected","renderer","resume","pause","num","updateTxStatus","vert","existing","is_tx_accepted","drawVertex","is_blk_confirmed","checkLimit","addTipInfo","tipInfo","is_tip","deleteId","graph","removeNode","node","getNode","graphics","getNodeUI","parseColor","colorForVertexState","addNode","linkParents","links","some","link","fromId","addLink","is_tx","Graph","View","webglGraphics","layout","Layout","forceDirected","springLength","springCoeff","stableThreshold","gravity","dragCoeff","timeStep","theta","webglSquare","webglLine","ele","document","getElementById","container","events","webglInputEvents","mouseEnter","mouseLeave","click","run","dispose","viaClick","nodeUI","vertexSize","dfsIterator","getLinkUI","resetLinks","forEachLink","force_clear","TipInfo","TXAccepted","cb","up","cbLinks","seenNodes","pointer","toId","parsedColor","replace","parseInt","ManaEvent","nodeID","time","PledgeEvent","RevokeEvent","emptyRow","colSpan","emptyListItem","manaValues","prevManaValues","accessNetworkRichest","totalAccessNetwork","accessActiveRichest","totalAccessActive","consensusNetworkRichest","totalConsensusNetwork","consensusActiveRichest","totalConsensusActive","searchNode","searchTxID","accessEvents","consensusEvents","initAccessEvents","initConsensusEvents","lastRemovedAccessEventTime","lastRemovedConsensusEventTime","lastInitRemovedAccessEventTime","lastInitRemovedConsensusEventTime","eventsUpdated","displayedAccessEvents","displayedConsensusEvents","nodeNotSyncedListItem","addNewManaValue","manaBlk","ownID","newManaData","access","consensus","updateNetworkRichest","manaType","totalMana","nodes","updateActiveRichest","updateAllowedPledgeIDs","allowedPledgeIDs","addNewInitPledge","lastRemoved","newData","addNewPledge","addNewInitRevoke","addNewRevoke","initDone","setInterval","nodeList","leaderBoard","manaSum","pushToFeed","shortNodeID","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","passesNodeFilter","computeEventList","evArr","reverse","event","passesTxFilter","element","popover","ev","navigator","clipboard","writeText","toLocaleTimeString","src","alt","substring","pushToEventFeed","toLowerCase","Mana","ManaMapOverall","ManaMapOnline","histInput","log10","per","isOwnID","liveFeed","addLiveFeed","info","updateConflictSets","conflictSets","conflictSetID","updateConflicts","Map","ConflictSet","Conflict","conflictsArr","x","y","arrivalTime","shown","cursor","resolved","timeToResolve","branchesArr","issuingTime","branches","branch","conflictSetIDs","issuerNodeID","stores","browserHistory"],"mappings":"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","file":"app.9e5b91b17efd1cc0a4d0.js","sourcesContent":["module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2N3B4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NyA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48cGF0aCBkPSJNIDMyLjM4IDE4IEwgMzIuMzggNDgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NnB4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NiA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+\"","var map = {\n\t\"./af\": 107,\n\t\"./af.js\": 107,\n\t\"./ar\": 108,\n\t\"./ar-dz\": 109,\n\t\"./ar-dz.js\": 109,\n\t\"./ar-kw\": 110,\n\t\"./ar-kw.js\": 110,\n\t\"./ar-ly\": 111,\n\t\"./ar-ly.js\": 111,\n\t\"./ar-ma\": 112,\n\t\"./ar-ma.js\": 112,\n\t\"./ar-sa\": 113,\n\t\"./ar-sa.js\": 113,\n\t\"./ar-tn\": 114,\n\t\"./ar-tn.js\": 114,\n\t\"./ar.js\": 108,\n\t\"./az\": 115,\n\t\"./az.js\": 115,\n\t\"./be\": 116,\n\t\"./be.js\": 116,\n\t\"./bg\": 117,\n\t\"./bg.js\": 117,\n\t\"./bm\": 118,\n\t\"./bm.js\": 118,\n\t\"./bn\": 119,\n\t\"./bn-bd\": 120,\n\t\"./bn-bd.js\": 120,\n\t\"./bn.js\": 119,\n\t\"./bo\": 121,\n\t\"./bo.js\": 121,\n\t\"./br\": 122,\n\t\"./br.js\": 122,\n\t\"./bs\": 123,\n\t\"./bs.js\": 123,\n\t\"./ca\": 124,\n\t\"./ca.js\": 124,\n\t\"./cs\": 125,\n\t\"./cs.js\": 125,\n\t\"./cv\": 126,\n\t\"./cv.js\": 126,\n\t\"./cy\": 127,\n\t\"./cy.js\": 127,\n\t\"./da\": 128,\n\t\"./da.js\": 128,\n\t\"./de\": 129,\n\t\"./de-at\": 130,\n\t\"./de-at.js\": 130,\n\t\"./de-ch\": 131,\n\t\"./de-ch.js\": 131,\n\t\"./de.js\": 129,\n\t\"./dv\": 132,\n\t\"./dv.js\": 132,\n\t\"./el\": 133,\n\t\"./el.js\": 133,\n\t\"./en-au\": 134,\n\t\"./en-au.js\": 134,\n\t\"./en-ca\": 135,\n\t\"./en-ca.js\": 135,\n\t\"./en-gb\": 136,\n\t\"./en-gb.js\": 136,\n\t\"./en-ie\": 137,\n\t\"./en-ie.js\": 137,\n\t\"./en-il\": 138,\n\t\"./en-il.js\": 138,\n\t\"./en-in\": 139,\n\t\"./en-in.js\": 139,\n\t\"./en-nz\": 140,\n\t\"./en-nz.js\": 140,\n\t\"./en-sg\": 141,\n\t\"./en-sg.js\": 141,\n\t\"./eo\": 142,\n\t\"./eo.js\": 142,\n\t\"./es\": 143,\n\t\"./es-do\": 144,\n\t\"./es-do.js\": 144,\n\t\"./es-mx\": 145,\n\t\"./es-mx.js\": 145,\n\t\"./es-us\": 146,\n\t\"./es-us.js\": 146,\n\t\"./es.js\": 143,\n\t\"./et\": 147,\n\t\"./et.js\": 147,\n\t\"./eu\": 148,\n\t\"./eu.js\": 148,\n\t\"./fa\": 149,\n\t\"./fa.js\": 149,\n\t\"./fi\": 150,\n\t\"./fi.js\": 150,\n\t\"./fil\": 151,\n\t\"./fil.js\": 151,\n\t\"./fo\": 152,\n\t\"./fo.js\": 152,\n\t\"./fr\": 153,\n\t\"./fr-ca\": 154,\n\t\"./fr-ca.js\": 154,\n\t\"./fr-ch\": 155,\n\t\"./fr-ch.js\": 155,\n\t\"./fr.js\": 153,\n\t\"./fy\": 156,\n\t\"./fy.js\": 156,\n\t\"./ga\": 157,\n\t\"./ga.js\": 157,\n\t\"./gd\": 158,\n\t\"./gd.js\": 158,\n\t\"./gl\": 159,\n\t\"./gl.js\": 159,\n\t\"./gom-deva\": 160,\n\t\"./gom-deva.js\": 160,\n\t\"./gom-latn\": 161,\n\t\"./gom-latn.js\": 161,\n\t\"./gu\": 162,\n\t\"./gu.js\": 162,\n\t\"./he\": 163,\n\t\"./he.js\": 163,\n\t\"./hi\": 164,\n\t\"./hi.js\": 164,\n\t\"./hr\": 165,\n\t\"./hr.js\": 165,\n\t\"./hu\": 166,\n\t\"./hu.js\": 166,\n\t\"./hy-am\": 167,\n\t\"./hy-am.js\": 167,\n\t\"./id\": 168,\n\t\"./id.js\": 168,\n\t\"./is\": 169,\n\t\"./is.js\": 169,\n\t\"./it\": 170,\n\t\"./it-ch\": 171,\n\t\"./it-ch.js\": 171,\n\t\"./it.js\": 170,\n\t\"./ja\": 172,\n\t\"./ja.js\": 172,\n\t\"./jv\": 173,\n\t\"./jv.js\": 173,\n\t\"./ka\": 174,\n\t\"./ka.js\": 174,\n\t\"./kk\": 175,\n\t\"./kk.js\": 175,\n\t\"./km\": 176,\n\t\"./km.js\": 176,\n\t\"./kn\": 177,\n\t\"./kn.js\": 177,\n\t\"./ko\": 178,\n\t\"./ko.js\": 178,\n\t\"./ku\": 179,\n\t\"./ku.js\": 179,\n\t\"./ky\": 180,\n\t\"./ky.js\": 180,\n\t\"./lb\": 181,\n\t\"./lb.js\": 181,\n\t\"./lo\": 182,\n\t\"./lo.js\": 182,\n\t\"./lt\": 183,\n\t\"./lt.js\": 183,\n\t\"./lv\": 184,\n\t\"./lv.js\": 184,\n\t\"./me\": 185,\n\t\"./me.js\": 185,\n\t\"./mi\": 186,\n\t\"./mi.js\": 186,\n\t\"./mk\": 187,\n\t\"./mk.js\": 187,\n\t\"./ml\": 188,\n\t\"./ml.js\": 188,\n\t\"./mn\": 189,\n\t\"./mn.js\": 189,\n\t\"./mr\": 190,\n\t\"./mr.js\": 190,\n\t\"./ms\": 191,\n\t\"./ms-my\": 192,\n\t\"./ms-my.js\": 192,\n\t\"./ms.js\": 191,\n\t\"./mt\": 193,\n\t\"./mt.js\": 193,\n\t\"./my\": 194,\n\t\"./my.js\": 194,\n\t\"./nb\": 195,\n\t\"./nb.js\": 195,\n\t\"./ne\": 196,\n\t\"./ne.js\": 196,\n\t\"./nl\": 197,\n\t\"./nl-be\": 198,\n\t\"./nl-be.js\": 198,\n\t\"./nl.js\": 197,\n\t\"./nn\": 199,\n\t\"./nn.js\": 199,\n\t\"./oc-lnc\": 200,\n\t\"./oc-lnc.js\": 200,\n\t\"./pa-in\": 201,\n\t\"./pa-in.js\": 201,\n\t\"./pl\": 202,\n\t\"./pl.js\": 202,\n\t\"./pt\": 203,\n\t\"./pt-br\": 204,\n\t\"./pt-br.js\": 204,\n\t\"./pt.js\": 203,\n\t\"./ro\": 205,\n\t\"./ro.js\": 205,\n\t\"./ru\": 206,\n\t\"./ru.js\": 206,\n\t\"./sd\": 207,\n\t\"./sd.js\": 207,\n\t\"./se\": 208,\n\t\"./se.js\": 208,\n\t\"./si\": 209,\n\t\"./si.js\": 209,\n\t\"./sk\": 210,\n\t\"./sk.js\": 210,\n\t\"./sl\": 211,\n\t\"./sl.js\": 211,\n\t\"./sq\": 212,\n\t\"./sq.js\": 212,\n\t\"./sr\": 213,\n\t\"./sr-cyrl\": 214,\n\t\"./sr-cyrl.js\": 214,\n\t\"./sr.js\": 213,\n\t\"./ss\": 215,\n\t\"./ss.js\": 215,\n\t\"./sv\": 216,\n\t\"./sv.js\": 216,\n\t\"./sw\": 217,\n\t\"./sw.js\": 217,\n\t\"./ta\": 218,\n\t\"./ta.js\": 218,\n\t\"./te\": 219,\n\t\"./te.js\": 219,\n\t\"./tet\": 220,\n\t\"./tet.js\": 220,\n\t\"./tg\": 221,\n\t\"./tg.js\": 221,\n\t\"./th\": 222,\n\t\"./th.js\": 222,\n\t\"./tk\": 223,\n\t\"./tk.js\": 223,\n\t\"./tl-ph\": 224,\n\t\"./tl-ph.js\": 224,\n\t\"./tlh\": 225,\n\t\"./tlh.js\": 225,\n\t\"./tr\": 226,\n\t\"./tr.js\": 226,\n\t\"./tzl\": 227,\n\t\"./tzl.js\": 227,\n\t\"./tzm\": 228,\n\t\"./tzm-latn\": 229,\n\t\"./tzm-latn.js\": 229,\n\t\"./tzm.js\": 228,\n\t\"./ug-cn\": 230,\n\t\"./ug-cn.js\": 230,\n\t\"./uk\": 231,\n\t\"./uk.js\": 231,\n\t\"./ur\": 232,\n\t\"./ur.js\": 232,\n\t\"./uz\": 233,\n\t\"./uz-latn\": 234,\n\t\"./uz-latn.js\": 234,\n\t\"./uz.js\": 233,\n\t\"./vi\": 235,\n\t\"./vi.js\": 235,\n\t\"./x-pseudo\": 236,\n\t\"./x-pseudo.js\": 236,\n\t\"./yo\": 237,\n\t\"./yo.js\": 237,\n\t\"./zh-cn\": 238,\n\t\"./zh-cn.js\": 238,\n\t\"./zh-hk\": 239,\n\t\"./zh-hk.js\": 239,\n\t\"./zh-mo\": 240,\n\t\"./zh-mo.js\": 240,\n\t\"./zh-tw\": 241,\n\t\"./zh-tw.js\": 241\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 298;","import * as React from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class Uptime extends React.Component {\r\n render() {\r\n return (\r\n \r\n Uptime: {this.props.nodeStore.uptime}\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class Version extends React.Component {\r\n render() {\r\n return (\r\n \r\n Version: {this.props.nodeStore.status.version}\r\n \r\n );\r\n }\r\n}\r\n","\r\n// includes chart options to increase performance, by disabling chart animations\r\nexport var defaultChartOptions = {\r\n elements: {\r\n line: {\r\n tension: 0\r\n }\r\n },\r\n animation: {\r\n duration: 0\r\n },\r\n hover: {\r\n animationDuration: 0\r\n },\r\n responsiveAnimationDuration: 0\r\n};","import * as React from 'react';\r\nimport Card from \"react-bootstrap/Card\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Line} from \"react-chartjs-2\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return Math.abs(value);\r\n },\r\n fontSize: 10,\r\n maxTicksLimit: 4,\r\n beginAtZero: true,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${Math.abs(tooltipItem.value)}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class BPSChart extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n Blocks Per Second\r\n \r\n BPS: {this.props.nodeStore.last_mps_metric.mps}.\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Card from \"react-bootstrap/Card\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Line} from \"react-chartjs-2\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return Math.abs(value);\r\n },\r\n fontSize: 10,\r\n maxTicksLimit: 4,\r\n beginAtZero: true,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${Math.abs(tooltipItem.value)}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class TipsChart extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n Current Tips\r\n \r\n Tips: {this.props.nodeStore.last_tips_metric.totaltips}.\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Card from \"react-bootstrap/Card\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Line} from \"react-chartjs-2\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\nimport * as prettysize from 'prettysize';\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n showXLabels: 10,\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return prettysize(Math.abs(value));\r\n },\r\n maxTicksLimit: 3,\r\n fontSize: 10,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${prettysize(Math.abs(tooltipItem.value))}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class MemChart extends React.Component {\r\n render() {\r\n let mem = this.props.nodeStore.status.mem;\r\n return (\r\n \r\n \r\n \r\n Memory Usage{' '}\r\n {prettysize(mem.heap_alloc)}\r\n \r\n \r\n GC Cycles: {mem.num_gc} (Last Cycle: {mem.last_pause_gc / 1000000}ms) - {' '}\r\n Heap: {' '}\r\n [Obj: {mem.heap_objects}, In-Use: {prettysize(mem.heap_sys-mem.heap_idle)},\r\n Retained: {prettysize(mem.heap_idle - mem.heap_released)}]\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport Card from \"react-bootstrap/Card\";\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport {Line} from \"react-chartjs-2\";\nimport {defaultChartOptions} from \"../misc/Chart\";\n\ninterface Props {\n nodeStore?: NodeStore;\n}\n\nconst lineChartOptions = Object.assign({\n scales: {\n xAxes: [{\n ticks: {\n autoSkip: true,\n maxTicksLimit: 8,\n fontSize: 8,\n minRotation: 0,\n maxRotation: 0,\n },\n gridLines: {\n display: false\n }\n }],\n yAxes: [{\n gridLines: {\n display: false\n },\n ticks: {\n callback: function (value, index, values) {\n return Math.abs(value);\n },\n fontSize: 10,\n maxTicksLimit: 4,\n beginAtZero: true,\n },\n }],\n },\n tooltips: {\n callbacks: {\n label: function (tooltipItem, data) {\n let label = data.datasets[tooltipItem.datasetIndex].label;\n return `${label} ${Math.abs(tooltipItem.value)}`;\n }\n }\n }\n}, defaultChartOptions);\n\n@inject(\"nodeStore\")\n@observer\nexport default class StoreChart extends React.Component {\n render() {\n const infoStyle = {\n display: \"flex\",\n flexDirection: \"column\"\n };\n return (\n \n \n Component Counter Blocks Per Second\n
\n \n BPS: {this.props.nodeStore.last_component_counter_metric.store}.\n \n \n Rate Setter - Estimate: {this.props.nodeStore.last_rate_setter_metric.estimate}\n \n
\n\n \n
\n
\n );\n }\n}\n","import * as React from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport Card from \"react-bootstrap/Card\";\nimport {Link} from 'react-router-dom';\nimport {inject, observer} from \"mobx-react\";\nimport * as dateformat from 'dateformat';\n\ninterface Props {\n nodeStore?: NodeStore;\n}\n\n@inject(\"nodeStore\")\n@observer\nexport default class TangleTime extends React.Component {\n render() {\n return (\n \n \n TangleTime\n Synced: {this.props.nodeStore.status.tangleTime.synced ? \"Yes\" : \"No\"}\n \n
\n
\n
\n
Last Accepted Block: \n {this.props.nodeStore.status.tangleTime.acceptedBlockID}\n
\n
\n
\n
Last Confirmed Block: \n {this.props.nodeStore.status.tangleTime.confirmedBlockID}\n
\n
\n
\n
Last Confirmed Slot:\n {this.props.nodeStore.status.tangleTime.confirmedSlot}\n
\n
\n
\n
Last Committed Slot:\n {this.props.nodeStore.status.tangleTime.committedSlot}\n
\n
\n
\n
\n
\n Acceptance Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.ATT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n Confirmation Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.CTT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n
\n
\n Relative Acceptance Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.RATT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n Relative Confirmation Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.RCTT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n
\n
\n
\n
\n )\n ;\n }\n}\n","import * as React from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\n\ninterface Props {\n nodeStore?: NodeStore;\n}\n\n@inject(\"nodeStore\")\n@observer\nexport default class Bootstrapped extends React.Component {\n render() {\n return (\n \n Bootstrapped: {this.props.nodeStore.status.tangleTime.bootstrapped ? \"Yes\" : \"No\"}\n \n );\n }\n}\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Uptime from \"./Uptime\";\r\nimport Version from \"./Version\";\r\nimport BPSChart from \"./BPSChart\";\r\nimport TipsChart from \"./TipsChart\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport MemChart from \"./MemChart\";\r\nimport ComponentCounterChart from \"./ComponentCounterChart\";\r\nimport TangleTime from \"./TangleTime\";\r\nimport Bootstrapped from \"./Bootstrapped\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Dashboard extends React.Component {\r\n render() {\r\n return (\r\n \r\n

Dashboard

\r\n \r\n \r\n \r\n \r\n Node: {this.props.nodeStore.status.id}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport {KeyboardEvent} from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport InputGroup from \"react-bootstrap/InputGroup\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerSearchbar extends React.Component {\r\n\r\n updateSearch = (e) => {\r\n this.props.explorerStore.updateSearch(e.target.value);\r\n };\r\n\r\n executeSearch = (e: KeyboardEvent) => {\r\n if (e.key !== 'Enter') return;\r\n this.props.explorerStore.searchAny();\r\n };\r\n\r\n render() {\r\n let {search, searching} = this.props.explorerStore;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\nimport Table from \"react-bootstrap/Table\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerLiveFeed extends React.Component {\r\n render() {\r\n let {blksLiveFeed} = this.props.explorerStore;\r\n return (\r\n \r\n \r\n \r\n \r\n Live Feed\r\n \r\n \r\n
Blocks
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {blksLiveFeed}\r\n \r\n
IdPayload Type
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport {KeyboardEvent} from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransactionSearchbar extends React.Component {\n txID: string;\n\n updateSearch = (e) => {\n this.txID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/transaction/${this.txID}`);\n };\n\n render() {\n let {searching} = this.props.explorerStore;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\nimport {KeyboardEvent} from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerOutputSearchbar extends React.Component {\n outputID: string;\n\n updateSearch = (e) => {\n this.outputID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/output/${this.outputID}`);\n };\n\n render() {\n let {searching} = this.props.explorerStore;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\nimport {KeyboardEvent} from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerConflictSearchbar extends React.Component {\n conflictID: string;\n\n updateSearch = (e) => {\n this.conflictID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/conflict/${this.conflictID}`);\n };\n\n render() {\n let {searching} = this.props.explorerStore;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {ExplorerSearchbar} from \"./ExplorerSearchbar\";\r\nimport {ExplorerLiveFeed} from \"./ExplorerLiveFeed\";\r\nimport {ExplorerTransactionSearchbar} from \"./ExplorerTransactionSearchbar\";\r\nimport {ExplorerOutputSearchbar} from \"./ExplorerOutputSearchbar\";\r\nimport {ExplorerConflictSearchbar} from \"./ExplorerConflictSearchbar\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Explorer extends React.Component {\r\n render() {\r\n return (\r\n \r\n

Tangle Explorer

\r\n \r\n \r\n

\r\n Search for addresses, blocks, transactions, outputs and conflicts.\r\n

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n This explorer implementation is heavily inspired by thetangle.org.\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport {KeyboardEvent} from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport Form from \"react-bootstrap/Form\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class NavExplorerSearchbar extends React.Component {\r\n\r\n updateSearch = (e) => {\r\n this.props.explorerStore.updateSearch(e.target.value);\r\n };\r\n\r\n executeSearch = (e: KeyboardEvent) => {\r\n if (e.key !== 'Enter') return;\r\n this.props.explorerStore.searchAny();\r\n };\r\n\r\n render() {\r\n let {search, searching} = this.props.explorerStore;\r\n return (\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","export enum WSMsgType {\r\n Status,\r\n BPSMetrics,\r\n Block,\r\n NeighborStats,\r\n ComponentCounterMetrics,\r\n TipsMetrics,\r\n Vertex,\r\n TXAccepted,\r\n TipInfo,\r\n Mana,\r\n ManaMapOverall,\r\n ManaMapOnline,\r\n BlkManaDashboardAddress,\r\n RateSetter,\r\n ConflictSet,\r\n Conflict,\r\n SlotInfo,\r\n}\r\n\r\nexport interface WSBlock {\r\n type: number;\r\n data: any;\r\n}\r\n\r\ntype DataHandler = (data: any) => void;\r\n\r\nlet handlers = {};\r\n\r\nexport function registerHandler(blkTypeID: number, handler: DataHandler) {\r\n handlers[blkTypeID] = handler;\r\n}\r\n\r\nexport function unregisterHandler(blkTypeID: number) {\r\n delete handlers[blkTypeID];\r\n}\r\n\r\nexport function connectWebSocket(path: string, onOpen, onClose, onError) {\r\n let loc = window.location;\r\n let uri = 'ws:';\r\n\r\n if (loc.protocol === 'https:') {\r\n uri = 'wss:';\r\n }\r\n uri += '//' + loc.host + path;\r\n\r\n let ws = new WebSocket(uri);\r\n\r\n ws.onopen = onOpen;\r\n ws.onclose = onClose;\r\n ws.onerror = onError;\r\n\r\n ws.onmessage = (e) => {\r\n let blk: WSBlock = JSON.parse(e.data);\r\n let handler = handlers[blk.type];\r\n if (!handler) {\r\n return;\r\n }\r\n handler(blk.data);\r\n };\r\n}\r\n","export enum PayloadType {\r\n TaggedData = 5,\r\n Transaction = 6,\r\n Faucet = 3,\r\n}\r\n\r\n// BasicPayload\r\nexport class BasicPayload {\r\n content_title: string;\r\n content: string;\r\n}\r\n\r\nexport class TaggedDataPayload {\r\n tag: string;\r\n data: string;\r\n}\r\n\r\nexport class FaucetPayload {\r\n address: string;\r\n accessManaPledgeID: string;\r\n consensusManaPledgeID: string;\r\n nonce: number;\r\n}\r\n\r\nexport class TransactionPayload {\r\n networkId: number;\r\n creationSlot: number;\r\n inputs: Array;\r\n outputs: Array;\r\n payload: any;\r\n unlocks: Array;\r\n}\r\n\r\nexport class Input {\r\n type: string;\r\n referencedOutputID: OutputID;\r\n output: Output;\r\n}\r\n\r\nexport class Output {\r\n outputID: OutputID;\r\n type: number;\r\n output: \r\n BasicOutput|\r\n AliasOutput|\r\n FoundryOutput|\r\n NFTOutput;\r\n}\r\n\r\nexport class OutputID {\r\n hex: string;\r\n transactionID: string;\r\n outputIndex: number;\r\n}\r\n\r\nexport class UnlockBlock {\r\n type: string;\r\n referencedIndex: number;\r\n signatureType: number;\r\n signature: SignatureEd25519;\r\n}\r\n\r\nexport class SignatureEd25519 {\r\n publicKey: string;\r\n signature: string;\r\n}\r\n\r\nexport class BasicOutput {\r\n amount: number\r\n nativeTokens?: Array;\r\n unlockConditions?: Array;\r\n features?: Array;\r\n}\r\n\r\nexport class AliasOutput {\r\n amount: number;\r\n nativeTokens?: Array;\r\n aliasId: string;\r\n stateIndex: number;\r\n stateMetadata?: string;\r\n foundryCounter: number;\r\n unlockConditions?: Array;\r\n features?: Array;\r\n immutableFeatures?: Array;\r\n}\r\n\r\nexport class FoundryOutput {\r\n amount: number;\r\n nativeTokens?: Array;\r\n serialNumber: number;\r\n tokenScheme: number; \r\n unlockConditions?: Array;\r\n features?: Array;\r\n immutableFeatures?: Array;\r\n}\r\n\r\nexport class NFTOutput {\r\n amount: number;\r\n nativeTokens?: Array;\r\n nftId: string; \r\n unlockConditions?: Array;\r\n features?: Array;\r\n immutableFeatures?: Array;\r\n}\r\n\r\nexport class Balance {\r\n value: number;\r\n color: string;\r\n}\r\n\r\nexport class Conflict {\r\n tx_id: string;\r\n opinion: Opinion;\r\n}\r\n\r\nexport class Timestamp {\r\n blk_id: string;\r\n opinion: Opinion;\r\n}\r\n\r\n// @ts-ignore\r\nexport class Opinion {\r\n value: string;\r\n round: number;\r\n}\r\n\r\nexport class NativeToken {\r\n id: string;\r\n amount: number;\r\n}\r\n\r\n// address, stateController, Governor share the same struct\r\nexport class AddressUnlockCondition {\r\n type: number;\r\n address: Address;\r\n}\r\n\r\nexport class Address {\r\n type: number;\r\n pubKeyHash: string;\r\n}\r\nexport class StorageDepositReturnUnlockCondition {\r\n type: number;\r\n returnAddress: string;\r\n amount: number;\r\n}\r\n\r\nexport class TimelockUnlockCondition {\r\n type: number;\r\n unixTime?: number;\r\n}\r\n\r\nexport class ExpirationUnlockCondition {\r\n type: number;\r\n returnAddress: string;\r\n unixTime: number;\r\n}\r\n\r\nexport class Feature {\r\n type: number;\r\n feature:\r\n IssuerFeature |\r\n MetadataFeature |\r\n TagFeature;\r\n}\r\n\r\n// Issuer and sender share a struct\r\nexport class IssuerFeature {\r\n address: string\r\n}\r\n\r\nexport class MetadataFeature {\r\n data: string;\r\n}\r\n\r\nexport class TagFeature {\r\n tag: string;\r\n}\r\n\r\nexport function getPayloadType(p: number){\r\n switch (p) {\r\n case PayloadType.TaggedData:\r\n return \"TaggedData\"\r\n case PayloadType.Transaction:\r\n return \"Transaction\"\r\n case PayloadType.Faucet:\r\n return \"Faucet\"\r\n default:\r\n return \"Unknown\"\r\n }\r\n}\r\n","import { UnlockConditionAddress, UnlockConditionExpiration, UnlockConditionStorageDepositReturn, UnlockConditionTimelock } from \"app/components/Condition\";\nimport { AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition } from \"app/misc/Payload\";\nimport * as React from 'react';\n\nexport enum ConditionType {\n Address = 0,\n StorageDepositReturn,\n Timelock,\n Expiration,\n StateControllerAddress,\n GovernorAddress,\n ImmutableAlias,\n}\n\nexport function resolveConditionType(condType: number) {\n switch (condType) {\n case ConditionType.Address:\n return \"Address Condition\";\n case ConditionType.StorageDepositReturn:\n return \"StorageDepositReturn Condition\";\n case ConditionType.Timelock:\n return \"Timelock Condition\";\n case ConditionType.Expiration:\n return \"Expiration Condition\";\n case ConditionType.StateControllerAddress:\n return \"StateControllerAddress Condition\";\n case ConditionType.GovernorAddress:\n return \"GovernorAddress Condition\";\n case ConditionType.ImmutableAlias:\n return \"ImmutableAlias Condition\";\n default:\n return \"Unknown Condition Type\";\n }\n}\n\nexport function conditionToComponent(cond: \n AddressUnlockCondition |\n StorageDepositReturnUnlockCondition |\n TimelockUnlockCondition |\n ExpirationUnlockCondition) {\n switch (cond.type) {\n case ConditionType.Address:\n case ConditionType.StateControllerAddress:\n case ConditionType.GovernorAddress:\n return ;\n case ConditionType.StorageDepositReturn:\n return ;\n case ConditionType.Expiration:\n return ;\n case ConditionType.Timelock:\n return ;\n }\n}","import { FeatureIssuer, FeatureMetadata, FeatureTag } from \"app/components/Feature\";\nimport { Feature, IssuerFeature, MetadataFeature, TagFeature } from \"app/misc/Payload\";\nimport * as React from 'react';\n\nexport enum FeatureType {\n Sender = 0,\n Issuer,\n Metadata,\n Tag,\n}\n\nexport function resolveSignatureType(sigType: number) {\n switch (sigType) {\n case FeatureType.Sender:\n return \"Sender Feature\";\n case FeatureType.Issuer:\n return \"Issuer Feature\";\n case FeatureType.Metadata:\n return \"Metadata Feature\";\n case FeatureType.Tag:\n return \"Tag Feature\";\n default:\n return \"Unknown Feature Type\";\n }\n}\n\n\nexport function featureToComponent(feat: Feature) {\n switch (feat.type) {\n case FeatureType.Sender:\n case FeatureType.Issuer:\n return ;\n case FeatureType.Metadata:\n return ;\n case FeatureType.Tag:\n return ;\n }\n}","import {\n BasicOutput as BasicJSON,\n AliasOutput as AliasJSON,\n FoundryOutput as FoundryJSON,\n NFTOutput as NFTJSON,\n Output,\n} from \"../misc/Payload\";\nimport * as React from \"react\";\nimport { BasicOutput } from \"app/components/BasicOutput\";\nimport { AliasOutput } from \"app/components/AliasOutput\";\nimport { FoundryOutput } from \"app/components/FoundryOutput\";\nimport { NFTOutput } from \"app/components/NFTOutput\";\n\nexport enum OutputType {\n Treasury = 2,\n Basic,\n Alias,\n Foundry,\n NFT,\n}\n\nexport function outputToComponent(output: Output) {\n let id = output.outputID\n switch (output.type) {\n case OutputType.Basic:\n return ;\n case OutputType.Alias:\n return ;\n case OutputType.Foundry:\n return ;\n case OutputType.NFT:\n return ;\n default:\n return;\n }\n}\n\n\nexport function outputTypeToName(type: number) {\n switch (type) {\n case OutputType.Basic:\n return \"Basic Output\";\n case OutputType.Alias:\n return \"Alias Output\";\n case OutputType.Foundry:\n return \"Foundry Output\";\n case OutputType.NFT:\n return \"NFT Output\";\n default:\n return;\n }\n}\n","import * as React from 'react';\nimport { NativeToken as NativeTokenJSON} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\n\ninterface Props {\n token: NativeTokenJSON;\n}\n\nexport class NativeToken extends React.Component {\n render() {\n return (\n
\n \n ID: {this.props.token.id}\n Amount: {this.props.token.amount}\n \n
\n );\n }\n}\n\n\n\n","import * as React from 'react';\nimport { \n TimelockUnlockCondition, \n AddressUnlockCondition,\n StorageDepositReturnUnlockCondition,\nExpirationUnlockCondition} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface AddressProps { \n unlock: AddressUnlockCondition;\n}\n\nexport class UnlockConditionAddress extends React.Component {\n render() {\n return (\n
\n \n Address Type: {this.props.unlock.address.type}\n \n \n Address: {this.props.unlock.address.pubKeyHash}\n \n
\n );\n }\n}\n\ninterface TimelockProps { \n unlock: TimelockUnlockCondition;\n}\n\nexport class UnlockConditionTimelock extends React.Component {\n render() {\n\n return (\n this.props.unlock.unixTime &&\n
\n \n Unix Time: {this.props.unlock.unixTime}\n \n
\n );\n }\n}\n\ninterface StorageDepositReturnProps { \n unlock: StorageDepositReturnUnlockCondition;\n}\n\nexport class UnlockConditionStorageDepositReturn extends React.Component {\n render() {\n\n return (\n
\n \n Return Address: {this.props.unlock.returnAddress}\n Amount: {this.props.unlock.amount}\n \n
\n );\n }\n}\n\ninterface ExpirationProps { \n unlock: ExpirationUnlockCondition;\n}\n\nexport class UnlockConditionExpiration extends React.Component {\n render() {\n\n return (\n
\n \n Return Address: {this.props.unlock.returnAddress}\n Unix Time: {this.props.unlock.unixTime}\n \n
\n );\n }\n}","import * as React from 'react';\nimport { \nIssuerFeature, MetadataFeature, TagFeature} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface IssuerProps { \n feature: IssuerFeature;\n}\n\nexport class FeatureIssuer extends React.Component {\n render() {\n return (\n
\n \n Address: {this.props.feature.address}\n \n
\n );\n }\n}\n\n\ninterface MetadataProps { \n feature: MetadataFeature;\n}\n\nexport class FeatureMetadata extends React.Component {\n render() {\n return (\n
\n \n Data: {this.props.feature.data}\n \n
\n );\n }\n}\n\ninterface TagProps { \n feature: TagFeature;\n}\n\nexport class FeatureTag extends React.Component {\n render() {\n return (\n
\n \n Data: {this.props.feature.tag}\n \n
\n );\n }\n}","import * as React from 'react';\nimport {OutputID, BasicOutput as BasicOutputJSON} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { NativeToken } from './NativeToken';\nimport { conditionToComponent } from 'app/utils/condition';\nimport { featureToComponent } from 'app/utils/feature';\n\ninterface Props {\n output: BasicOutputJSON\n id: OutputID;\n}\n\nexport class BasicOutput extends React.Component {\n render() {\n return (\n
\n \n Type: BasicOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}","import * as React from 'react';\nimport {AliasOutput as AliasOutputJSON, OutputID} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { NativeToken } from './NativeToken';\nimport { conditionToComponent } from 'app/utils/condition';\nimport { featureToComponent } from 'app/utils/feature';\n\ninterface Props {\n output: AliasOutputJSON\n id: OutputID;\n}\n\nexport class AliasOutput extends React.Component {\n render() {\n return (\n
\n \n Type: AliasOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n AliasID: {this.props.output.aliasId}\n StateIndex: {this.props.output.stateIndex}\n State Metadata: {this.props.output.stateMetadata} \n Foundry Counter: {this.props.output.foundryCounter}\n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}\n","import * as React from 'react';\nimport {OutputID, FoundryOutput as FoundryOutputJSON} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { NativeToken } from './NativeToken';\nimport { conditionToComponent } from 'app/utils/condition';\nimport { featureToComponent } from 'app/utils/feature';\n\ninterface Props {\n output: FoundryOutputJSON\n id: OutputID;\n}\n\nexport class FoundryOutput extends React.Component {\n render() {\n return (\n
\n \n Type: FoundryOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n Serial Number: {this.props.output.serialNumber}\n Token Scheme: {this.props.output.tokenScheme} \n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}\n\n\n\n","import * as React from 'react';\nimport {OutputID, NFTOutput as NFTOutputJSON} from \"../misc/Payload\";\nimport {conditionToComponent} from \"../utils/condition\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { featureToComponent } from 'app/utils/feature';\nimport { NativeToken } from './NativeToken';\n\ninterface Props {\n output: NFTOutputJSON\n id: OutputID;\n}\n\nexport class NFTOutput extends React.Component {\n render() {\n return (\n
\n \n Type: FoundryOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n NFT ID: {this.props.output.nftId}\n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}\n\n\n\n","import { action, computed, observable } from 'mobx';\r\nimport { registerHandler, WSMsgType } from \"../misc/WS\";\r\nimport {\r\n BasicPayload,\r\n getPayloadType,\r\n Output,\r\n PayloadType,\r\n FaucetPayload,\r\n TransactionPayload,\r\n TaggedDataPayload,\r\n BasicOutput\r\n} from \"../misc/Payload\";\r\nimport * as React from \"react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { RouterStore } from \"mobx-react-router\";\r\nimport { OutputType } from 'app/utils/output';\r\n\r\nexport const GenesisBlockID = \"1111111111111111111111111111111111111111111111111111111111111111\";\r\nexport const GenesisTransactionID = \"11111111111111111111111111111111\";\r\n\r\nexport class Block {\r\n id: string;\r\n networkID: number;\r\n protocolVersion: number;\r\n solidificationTimestamp: number;\r\n issuanceTimestamp: number;\r\n sequenceNumber: number;\r\n issuerID: string;\r\n signature: string;\r\n strongParents: Array;\r\n weakParents: Array;\r\n shallowLikedParents: Array;\r\n strongChildren: Array;\r\n weakChildren: Array;\r\n shallowLikeChildren: Array;\r\n solid: boolean;\r\n conflictIDs: Array;\r\n addedConflictIDs: Array;\r\n subtractedConflictIDs: Array;\r\n scheduled: boolean;\r\n booked: boolean;\r\n orphaned: boolean;\r\n objectivelyInvalid: boolean;\r\n subjectivelyInvalid: boolean;\r\n acceptance: boolean;\r\n acceptanceTime: number;\r\n confirmation: boolean;\r\n confirmationTime: number;\r\n confirmationBySlot: boolean;\r\n confirmationBySlotTime: number;\r\n payloadType: number;\r\n payload: any;\r\n txId: string;\r\n rank: number;\r\n sequenceID: number;\r\n isPastMarker: boolean;\r\n pastMarkerGap: number;\r\n pastMarkers: string;\r\n commitmentID: string\r\n commitment: Commitment;\r\n latestConfirmedSlot: number;\r\n}\r\n\r\nexport class Commitment {\r\n index: number;\r\n prevID: string;\r\n rootsID: string;\r\n cumulativeWeight: number;\r\n}\r\nexport class AddressResult {\r\n address: string;\r\n explorerOutputs: Array;\r\n}\r\n\r\nexport class ExplorerOutput {\r\n id: OutputID;\r\n output: Output;\r\n metadata: OutputMetadata\r\n txTimestamp: number;\r\n pendingMana: number;\r\n}\r\n\r\nclass OutputID {\r\n base58: string;\r\n transactionID: string;\r\n outputIndex: number;\r\n}\r\n\r\nexport class OutputMetadata {\r\n outputID: OutputID;\r\n conflictIDs: Array;\r\n consumerCount: number;\r\n confirmedConsumer: string // tx id of confirmed consumer\r\n confirmationState: number\r\n confirmationStateTime: number\r\n}\r\n\r\nclass OutputConsumer {\r\n transactionID: string;\r\n valid: string;\r\n}\r\n\r\nclass OutputConsumers {\r\n outputID: OutputID;\r\n consumers: Array\r\n}\r\n\r\nclass TransactionMetadata {\r\n transactionID: string;\r\n conflictIDs: string[];\r\n booked: boolean;\r\n bookedTime: number;\r\n confirmationState: string;\r\n confirmationStateTime: number;\r\n}\r\n\r\nclass PendingMana {\r\n mana: number;\r\n outputID: string;\r\n error: string;\r\n timestamp: number;\r\n}\r\n\r\nclass Conflict {\r\n id: string;\r\n parents: Array;\r\n conflictIDs: Array;\r\n confirmationState: number;\r\n}\r\n\r\nclass ConflictChildren {\r\n conflictID: string;\r\n childConflicts: Array\r\n}\r\n\r\nclass ConflictChild {\r\n conflictID: string;\r\n type: string;\r\n}\r\n\r\nclass ConflictConflict {\r\n outputID: OutputID;\r\n conflictIDs: Array;\r\n}\r\n\r\nclass ConflictConflicts {\r\n conflictID: string;\r\n conflicts: Array\r\n}\r\n\r\nclass ConflictVoters {\r\n conflictID: string;\r\n voters: Array\r\n}\r\n\r\nclass SlotInfo {\r\n id: string;\r\n index: number;\r\n rootsID: string;\r\n prevID: string;\r\n cumulativeWeight: number;\r\n blocks: Array;\r\n transactions: Array;\r\n createdOutputs: Array;\r\n spentOutputs: Array;\r\n}\r\n\r\nclass SearchResult {\r\n block: BlockRef;\r\n address: AddressResult;\r\n}\r\n\r\nclass BlockRef {\r\n id: string;\r\n payload_type: number;\r\n}\r\n\r\nclass Tips {\r\n tips: Array\r\n}\r\n\r\nconst liveFeedSize = 50;\r\n\r\nenum QueryError {\r\n NotFound = 1,\r\n BadRequest = 2\r\n}\r\n\r\nexport class ExplorerStore {\r\n // live feed\r\n @observable latest_blocks: Array = [];\r\n\r\n // queries\r\n @observable blk: Block = null;\r\n @observable addr: AddressResult = null;\r\n @observable tx: any = null;\r\n @observable txMetadata: any = null;\r\n @observable txAttachments: any = [];\r\n @observable output: any = null;\r\n @observable outputMetadata: OutputMetadata = null;\r\n @observable outputConsumers: OutputConsumers = null;\r\n @observable pendingMana: PendingMana = null;\r\n @observable conflict: Conflict = null;\r\n @observable conflictChildren: ConflictChildren = null;\r\n @observable conflictConflicts: ConflictConflicts = null;\r\n @observable conflictVoters: ConflictVoters = null;\r\n @observable tips: Tips = null;\r\n @observable slotInfo: SlotInfo = new SlotInfo;\r\n\r\n // loading\r\n @observable query_loading: boolean = false;\r\n @observable query_err: any = null;\r\n\r\n // search\r\n @observable search: string = \"\";\r\n @observable search_result: SearchResult = null;\r\n @observable searching: boolean = false;\r\n @observable payload: any;\r\n @observable subpayload: any;\r\n\r\n routerStore: RouterStore;\r\n\r\n constructor(routerStore: RouterStore) {\r\n this.routerStore = routerStore;\r\n registerHandler(WSMsgType.Block, this.addLiveFeedBlock);\r\n }\r\n\r\n searchAny = async () => {\r\n this.updateSearching(true);\r\n try {\r\n let res = await fetch(`/api/search/${this.search}`);\r\n let result: SearchResult = await res.json();\r\n this.updateSearchResult(result);\r\n } catch (err) {\r\n this.updateQueryError(err);\r\n }\r\n };\r\n\r\n @action\r\n resetSearch = () => {\r\n this.search_result = null;\r\n this.searching = false;\r\n };\r\n\r\n @action\r\n updateSearchResult = (result: SearchResult) => {\r\n this.search_result = result;\r\n this.searching = false;\r\n let search = this.search;\r\n this.search = '';\r\n if (this.search_result.block) {\r\n this.routerStore.push(`/explorer/block/${search}`);\r\n return;\r\n }\r\n if (this.search_result.address) {\r\n this.routerStore.push(`/explorer/address/${search}`);\r\n return;\r\n }\r\n this.routerStore.push(`/explorer/404/${search}`);\r\n };\r\n\r\n @action\r\n updateSearch = (search: string) => {\r\n this.search = search;\r\n };\r\n\r\n @action\r\n updateSearching = (searching: boolean) => this.searching = searching;\r\n\r\n searchBlock = async (id: string) => {\r\n this.updateQueryLoading(true);\r\n const res = await this.fetchJson(\"get\", `/api/block/${id}`)\r\n\r\n this.updateBlock(res);\r\n };\r\n\r\n searchAddress = async (id: string) => {\r\n this.updateQueryLoading(true);\r\n const res = await this.fetchJson(\"get\", `/api/address/${id}`)\r\n this.updateAddress(res);\r\n };\r\n\r\n getSlotDetails = async (id: string) => {\r\n await this.getSlotInfo(id);\r\n }\r\n\r\n @action\r\n getTransaction = async (id: string) => {\r\n const tx = await this.fetchJson(\"get\", `/api/transaction/${id}`)\r\n \r\n for (let i = 0; i < tx.inputs.length; i++) {\r\n let inputID = tx.inputs[i] ? tx.inputs[i].referencedOutputID.hex : GenesisBlockID\r\n try {\r\n let referencedOutputRes = await fetch(`/api/output/${inputID}`)\r\n if (referencedOutputRes.status === 404) {\r\n let genOutput = new Output();\r\n genOutput.output = new BasicOutput();\r\n genOutput.output.amount = 0;\r\n genOutput.type = OutputType.Basic;\r\n genOutput.outputID = tx.inputs[i].referencedOutputID;\r\n tx.inputs[i].output = genOutput;\r\n }\r\n if (referencedOutputRes.status === 200) {\r\n tx.inputs[i].output = await referencedOutputRes.json()\r\n }\r\n } catch (err) {\r\n // ignore\r\n }\r\n this.tx = tx;\r\n }\r\n }\r\n\r\n @action\r\n getTransactionAttachments = async (id: string) => {\r\n const attachments = await this.fetchJson(\"get\", `/api/transaction/${id}/attachments`)\r\n this.txAttachments = attachments;\r\n }\r\n\r\n @action\r\n getTransactionMetadata = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/transaction/${id}/metadata`)\r\n this.txMetadata = res;\r\n }\r\n\r\n @action\r\n getOutput = async (id: string) => {\r\n const output = await this.fetchJson(\"get\", `/api/output/${id}`)\r\n this.output = output;\r\n }\r\n\r\n @action\r\n getOutputMetadata = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/output/${id}/metadata`)\r\n this.outputMetadata = res;\r\n }\r\n\r\n @action\r\n getOutputConsumers = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/output/${id}/consumers`)\r\n this.outputConsumers = res;\r\n }\r\n\r\n @action\r\n getPendingMana = async (outputID: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/mana/pending?OutputID=${outputID}`)\r\n this.pendingMana = res;\r\n }\r\n\r\n @action\r\n getConflict = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}`)\r\n this.conflict = res;\r\n }\r\n\r\n @action\r\n getConflictChildren = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}/children`)\r\n this.conflictChildren = res;\r\n }\r\n\r\n @action\r\n getConflictConflicts = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}/conflicts`)\r\n this.conflictConflicts = res;\r\n }\r\n\r\n @action\r\n getConflictVoters = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}/voters`)\r\n this.conflictVoters = res;\r\n }\r\n\r\n @action\r\n getSlotInfo = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/slot/commitment/${id}`)\r\n this.slotInfo = res;\r\n }\r\n\r\n @action\r\n getTips = async () => {\r\n const res = await this.fetchJson(\"get\", \"/api/tips\")\r\n this.tips = res;\r\n }\r\n\r\n @action\r\n reset = () => {\r\n this.blk = null;\r\n this.query_err = null;\r\n // reset all variables\r\n this.tx = null;\r\n this.txMetadata = null;\r\n this.txAttachments = [];\r\n this.output = null;\r\n this.outputMetadata = null;\r\n this.outputConsumers = null;\r\n this.pendingMana = null;\r\n this.conflict = null;\r\n this.conflictChildren = null;\r\n this.conflictConflicts = null;\r\n this.tips = null;\r\n this.slotInfo = new SlotInfo;\r\n };\r\n\r\n @action\r\n updateAddress = (addr: AddressResult) => {\r\n this.addr = addr;\r\n this.query_err = null;\r\n this.query_loading = false;\r\n };\r\n\r\n @action\r\n updateBlock = (blk: Block) => {\r\n this.blk = blk;\r\n this.blk.conflictIDs = this.blk.conflictIDs ? this.blk.conflictIDs : []\r\n this.blk.addedConflictIDs = this.blk.addedConflictIDs ? this.blk.addedConflictIDs : []\r\n this.blk.subtractedConflictIDs = this.blk.subtractedConflictIDs ? this.blk.subtractedConflictIDs : []\r\n this.blk.strongChildren = this.blk.strongChildren ? this.blk.strongChildren : []\r\n this.blk.weakChildren = this.blk.weakChildren ? this.blk.weakChildren : []\r\n this.blk.shallowLikeChildren = this.blk.shallowLikeChildren ? this.blk.shallowLikeChildren : []\r\n this.blk.strongParents = this.blk.strongParents ? this.blk.strongParents : []\r\n this.blk.weakParents = this.blk.weakParents ? this.blk.weakParents : []\r\n this.blk.shallowLikedParents = this.blk.shallowLikedParents ? this.blk.shallowLikedParents : []\r\n\r\n this.query_err = null;\r\n this.query_loading = false;\r\n switch (blk.payloadType) {\r\n case PayloadType.Transaction:\r\n this.payload = blk.payload as TransactionPayload\r\n break;\r\n case PayloadType.TaggedData:\r\n this.payload = blk.payload as TaggedDataPayload\r\n break;\r\n case PayloadType.Faucet:\r\n this.payload = blk.payload as FaucetPayload\r\n default:\r\n this.payload = blk.payload as BasicPayload\r\n break;\r\n }\r\n };\r\n\r\n @action\r\n updateQueryLoading = (loading: boolean) => this.query_loading = loading;\r\n\r\n @action\r\n updateQueryError = (err: any) => {\r\n this.query_err = err;\r\n this.query_loading = false;\r\n this.searching = false;\r\n };\r\n\r\n @action\r\n addLiveFeedBlock = (blk: BlockRef) => {\r\n // prevent duplicates (should be fast with only size 10)\r\n if (this.latest_blocks.findIndex((t) => t.id == blk.id) === -1) {\r\n if (this.latest_blocks.length >= liveFeedSize) {\r\n this.latest_blocks.shift();\r\n }\r\n this.latest_blocks.push(blk);\r\n }\r\n };\r\n\r\n @computed\r\n get blksLiveFeed() {\r\n let feed = [];\r\n for (let i = this.latest_blocks.length - 1; i >= 0; i--) {\r\n let blk = this.latest_blocks[i];\r\n feed.push(\r\n \r\n \r\n \r\n {blk.id}\r\n \r\n \r\n \r\n {getPayloadType(blk.payload_type)}\r\n \r\n \r\n );\r\n }\r\n return feed;\r\n }\r\n\r\n @computed\r\n get tipsList() {\r\n let list = [];\r\n if (this.tips) {\r\n for (let i = 0; i < this.tips.tips.length; i++) {\r\n let blkId = this.tips.tips[i];\r\n list.push(\r\n \r\n \r\n \r\n {blkId}\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n return list;\r\n }\r\n\r\n async fetchJson(\r\n method: 'get' | 'delete',\r\n route: string,\r\n requestData?: T\r\n ): Promise {\r\n\r\n const body = requestData ? JSON.stringify(requestData, function (_, v) {\r\n // keep Uint8Array as it is\r\n if (v instanceof Uint8Array) {\r\n return Array.from(v);\r\n }\r\n return v;\r\n })\r\n : undefined;\r\n\r\n const response = await fetch(`${route}`, {\r\n method,\r\n headers: { 'Content-Type': 'application/json' },\r\n body\r\n });\r\n\r\n if (response.ok) {\r\n const responseData: U = await response.json();\r\n return responseData;\r\n }\r\n\r\n switch (response.status) {\r\n case 404:\r\n this.updateQueryError(QueryError.NotFound);\r\n break;\r\n case 400:\r\n this.updateQueryError(QueryError.BadRequest);\r\n break;\r\n default:\r\n this.updateQueryError('unexpected error')\r\n break;\r\n }\r\n return {} as U;\r\n }\r\n}\r\n\r\nexport default ExplorerStore;\r\n","import * as React from 'react';\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\n\r\ninterface Props {\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class BasicPayload extends React.Component {\r\n\r\n render() {\r\n let {payload} = this.props.explorerStore;\r\n return (\r\n payload &&\r\n \r\n \r\n \r\n {payload.content_title}: {' '} \r\n {payload.content}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","export enum SignatureType {\n Ed25519 = 0,\n BLS = 1,\n}\n\nexport function resolveSignatureType(sigType: number) {\n switch (sigType) {\n case SignatureType.Ed25519:\n return \"Ed25519 Signature\";\n case SignatureType.BLS:\n return \"BLS Signature\";\n default:\n return \"Unknown Signature Type\";\n }\n}","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport { Col, ListGroup } from 'react-bootstrap';\nimport { SignatureEd25519 } from 'app/misc/Payload';\n\ninterface Props {\n signature?: SignatureEd25519;\n}\n\nexport class Ed25519Signature extends React.Component {\n\n render() {\n let signature = this.props.signature;\n return (\n \n \n \n \n Public Key: {signature.publicKey}\n Signature: {signature.signature}\n \n \n \n \n );\n }\n}\n","import {UnlockBlock as unlockBlockJSON} from \"../misc/Payload\";\nimport * as React from \"react\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Badge from \"react-bootstrap/Badge\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport {SignatureType, resolveSignatureType} from \"../utils/unlock_block\";\nimport { Ed25519Signature } from \"./Ed25519Signature\";\n\ninterface UnlockProps {\n block: unlockBlockJSON;\n key: number;\n}\n\nexport class UnlockBlock extends React.Component {\n renderSignatureComponent() {\n switch (this.props.block.signatureType) {\n case SignatureType.Ed25519:\n return \n }\n }\n\n render() {\n let block = this.props.block;\n return (\n \n \n Index: {this.props.key}\n \n Type: {block.type}\n {\n block.signatureType && Signature Type: {resolveSignatureType(block.signatureType)}\n } \n {\n this.renderSignatureComponent()\n } \n \n \n \n );\n }\n}","import * as React from \"react\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport Badge from \"react-bootstrap/Badge\";\nimport {outputToComponent} from \"../utils/output\";\nimport {IconContext} from \"react-icons\";\nimport {FaChevronCircleRight} from \"react-icons/fa\";\nimport {UnlockBlock} from \"./UnlockBlock\";\nimport {TransactionPayload} from \"../misc/Payload\";\n\nconst style = {\n maxHeight: \"1000px\",\n overflow: \"auto\",\n width: \"47%\",\n fontSize: \"85%\",\n}\n\ninterface Props {\n txID?: string;\n tx?: TransactionPayload;\n}\n\nexport class Transaction extends React.Component {\n render() {\n let txID = this.props.txID;\n let tx = this.props.tx;\n return (\n tx && txID &&\n
\n

Transaction

\n

{txID}

\n \n \n
Transaction Essence
\n \n ID: {txID}\n Network ID: {tx.networkId}\n Creation Time: {tx.creationSlot}\n \n
\n
\n Inputs\n
\n {tx.inputs.map((input, i) => {\n return (\n
\n Index: {i}\n
\n \n Output ID: {input.referencedOutputID.hex}\n \n
\n
\n )\n })}\n
\n \n
\n \n
\n
\n
\n Outputs\n
\n {tx.outputs.map((output, i) => {\n return (\n
\n Index: {i}\n {outputToComponent(output)}\n
\n )\n })}\n
\n
\n
\n { tx.payload && Data payload: {tx.payload}}\n
\n \n
\n \n \n
Unlock Blocks
\n \n {\n tx.unlocks.map((block,index) => (\n \n ))}\n \n \n
\n
\n );\n }\n}","import * as React from 'react';\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {ExplorerStore} from \"../stores/ExplorerStore\";\r\nimport {Transaction} from \"./Transaction\";\r\n// import {ExplorerTransactionMetadata} from \"./ExplorerTransactionMetadata\";\r\nimport Container from \"react-bootstrap/Container\";\r\n\r\ninterface Props {\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class TransactionPayload extends React.Component {\r\n render() {\r\n let {payload, blk} = this.props.explorerStore;\r\n let txID = blk.txId;\r\n let tx = payload;\r\n\r\n return (\r\n \r\n {/* */}\r\n \r\n \r\n );\r\n }\r\n}\r\n","export function resolveBase58ConflictID(base58Conflict: string): string {\n switch (base58Conflict) {\n case MasterConflictInBase58:\n return \"MasterConflictID\";\n case UndefinedConflictInBase58:\n return \"UndefinedConflictID\";\n case LazyBookedConflictsConflictInBase58:\n return \"LazyBookedConflictsConflictID\";\n case InvalidConflictInBase58:\n return \"InvalidConflictID\";\n default:\n // otherwise it is a \"regular\" conflictID that doesn't have a distinct name\n return base58Conflict\n }\n}\n\n// base58 conflictIDs that have distinct names\nconst MasterConflictInBase58 = \"4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM\"\nconst UndefinedConflictInBase58 = \"11111111111111111111111111111111\"\nconst LazyBookedConflictsConflictInBase58 = \"JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF\"\nconst InvalidConflictInBase58 = \"JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG\"","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport {inject, observer} from \"mobx-react\";\nimport {ExplorerStore} from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface Props {\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"explorerStore\")\n@observer\nexport class FaucetPayload extends React.Component {\n\n render() {\n let {payload} = this.props.explorerStore;\n return (\n payload &&\n \n \n \n \n \n Address: {payload.address}\n \n \n Access Mana Pledge ID: {payload.accessManaPledgeID}\n \n \n Consensus Mana Pledge ID: {payload.consensusManaPledgeID}\n \n \n Nonce: {payload.nonce}\n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport {inject, observer} from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport { Col, ListGroup } from 'react-bootstrap';\n\ninterface Props {\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"explorerStore\")\n@observer\nexport class TaggedDataPayload extends React.Component {\n\n render() {\n let {payload} = this.props.explorerStore;\n \n return (\n payload &&\n \n \n \n \n Tag: {payload.tag}\n Data: {payload.data}\n \n \n \n \n );\n }\n}\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport ExplorerStore, { GenesisBlockID } from \"../stores/ExplorerStore\";\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Badge from \"react-bootstrap/Badge\";\r\nimport * as dateformat from 'dateformat';\r\nimport { Link } from 'react-router-dom';\r\nimport { BasicPayload } from './BasicPayload'\r\nimport { TransactionPayload } from './TransactionPayload'\r\nimport { getPayloadType, PayloadType } from '../misc/Payload'\r\nimport { resolveBase58ConflictID } from \"../utils/conflict\";\r\nimport { FaucetPayload } from './FaucetPayload';\r\nimport { TaggedDataPayload } from './TaggedDataPayload';\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n match?: {\r\n params: {\r\n id: string,\r\n }\r\n }\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerBlockQueryResult extends React.Component {\r\n\r\n componentDidMount() {\r\n this.props.explorerStore.resetSearch();\r\n this.props.explorerStore.searchBlock(this.props.match.params.id);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.explorerStore.reset();\r\n }\r\n\r\n getSnapshotBeforeUpdate(prevProps: Props, prevState) {\r\n if (prevProps.match.params.id !== this.props.match.params.id) {\r\n this.props.explorerStore.searchBlock(this.props.match.params.id);\r\n }\r\n return null;\r\n }\r\n\r\n getPayloadType() {\r\n return getPayloadType(this.props.explorerStore.blk.payloadType)\r\n }\r\n\r\n renderPayload() {\r\n switch (this.props.explorerStore.blk.payloadType) {\r\n case PayloadType.Transaction:\r\n if (!this.props.explorerStore.blk.objectivelyInvalid) {\r\n return \r\n }\r\n return \r\n case PayloadType.TaggedData:\r\n return \r\n case PayloadType.Faucet:\r\n return \r\n default:\r\n return \r\n }\r\n }\r\n\r\n render() {\r\n let { id } = this.props.match.params;\r\n let { blk, query_loading, query_err } = this.props.explorerStore;\r\n\r\n if (id === GenesisBlockID) {\r\n return (\r\n \r\n

Genesis Block

\r\n

In the beginning there was the genesis.

\r\n
\r\n );\r\n }\r\n\r\n if (query_err) {\r\n return (\r\n \r\n

Block not available - 404

\r\n

\r\n Block with ID {id} not found.\r\n

\r\n
\r\n );\r\n }\r\n return (\r\n \r\n

Block

\r\n

\r\n {id} {' '}\r\n {\r\n blk &&\r\n \r\n
\r\n \r\n \r\n Issuance Time: {dateformat(new Date(blk.issuanceTimestamp * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n Solidification Time: {dateformat(new Date(blk.solidificationTimestamp * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n
\r\n }\r\n

\r\n {\r\n blk &&\r\n \r\n \r\n \r\n \r\n \r\n Payload Type: {this.getPayloadType()}\r\n \r\n \r\n Sequence Number: {blk.sequenceNumber}\r\n \r\n \r\n ConflictIDs:\r\n \r\n {\r\n blk.conflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n AddedConflictIDs:\r\n \r\n {\r\n blk.addedConflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n SubtractedConflictIDs:\r\n \r\n {\r\n blk.subtractedConflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n Solid: {blk.solid ? 'Yes' : 'No'}\r\n \r\n \r\n Scheduled: {blk.scheduled ? 'Yes' : 'No'}\r\n \r\n \r\n Booked: {blk.booked ? 'Yes' : 'No'}\r\n \r\n \r\n Orphaned: {blk.orphaned ? 'Yes' : 'No'}\r\n \r\n \r\n Objectively Invalid: {blk.objectivelyInvalid ? 'Yes' : 'No'}\r\n \r\n \r\n Subjectively Invalid: {blk.subjectivelyInvalid ? 'Yes' : 'No'}\r\n \r\n \r\n Acceptance: {blk.acceptance ? 'Yes' : 'No'}\r\n \r\n \r\n Acceptance\r\n Time: {dateformat(new Date(blk.acceptanceTime * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n Confirmation: {blk.confirmation ? 'Yes' : 'No'}\r\n \r\n \r\n Confirmation\r\n Time: {dateformat(new Date(blk.confirmationTime * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n Confirmation by slot: {blk.confirmationBySlot ? 'Yes' : 'No'}\r\n \r\n \r\n Confirmation by slot\r\n time: {dateformat(new Date(blk.confirmationBySlotTime * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n \r\n \r\n\r\n {\r\n \r\n \r\n
Slot Commitment
\r\n \r\n \r\n CommitmentID: {blk.commitmentID}\r\n \r\n \r\n \r\n \r\n Index: {blk.commitment.index}\r\n \r\n \r\n prevID: {blk.commitment.prevID}\r\n \r\n \r\n rootsID: {blk.commitment.rootsID}\r\n \r\n \r\n Cumulative Weight: {blk.commitment.cumulativeWeight}\r\n \r\n \r\n \r\n \r\n LatestConfirmedSlot: {blk.latestConfirmedSlot}\r\n \r\n \r\n \r\n
\r\n }\r\n\r\n {\r\n !!blk.rank &&\r\n \r\n \r\n
Markers
\r\n \r\n \r\n Rank: {blk.rank}\r\n \r\n \r\n SequenceID: {blk.sequenceID}\r\n \r\n \r\n PastMarkerGap: {blk.pastMarkerGap}\r\n \r\n \r\n IsPastMarker: {blk.isPastMarker ? 'Yes' : 'No'}\r\n \r\n \r\n Past markers: {blk.pastMarkers}\r\n \r\n \r\n \r\n
\r\n }\r\n\r\n\r\n \r\n \r\n \r\n \r\n IssuerID: {blk.issuerID}\r\n \r\n \r\n Block Signature: {blk.signature}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.strongParents.map((value, index) => {\r\n return (\r\n \r\n Strong Parents {index + 1}: {' '}\r\n \r\n {blk.strongParents[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.weakParents.map((value, index) => {\r\n return (\r\n \r\n Weak Parents {index + 1}: {' '}\r\n \r\n {blk.weakParents[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.shallowLikedParents.map((value, index) => {\r\n return (\r\n \r\n Shallow Liked Parents {index + 1}: {' '}\r\n \r\n {blk.shallowLikedParents[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.strongChildren.map((value, index) => {\r\n return (\r\n \r\n Strong Child {index + 1}: {' '}\r\n \r\n {blk.strongChildren[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n blk.weakChildren.map((value, index) => {\r\n return (\r\n \r\n Weak Child {index + 1}: {' '}\r\n \r\n {blk.weakChildren[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n blk.shallowLikeChildren.map((value, index) => {\r\n return (\r\n \r\n ShallowLike Child {index + 1}: {' '}\r\n \r\n {blk.shallowLikeChildren[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n

Payload

\r\n \r\n
\r\n \r\n \r\n {this.renderPayload()}\r\n \r\n \r\n
\r\n }\r\n \r\n \r\n {query_loading && }\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","export function displayManaUnit(mana: number): string {\n let result = \"\"\n // round to nearest integer\n let roundedMana = Math.round(mana);\n if (roundedMana < 1000) {\n result = roundedMana.toString(10) + \" m\"; // mana\n } else if (roundedMana < 1000000) {\n result = (roundedMana / 1000).toFixed(3) + \" Km\"; // kilomana\n }\n else if (roundedMana < 1000000000) {\n result = (roundedMana / 1000000).toFixed(3) + \" Mm\"; // megamana\n }\n else if (roundedMana < 1000000000000) {\n result = (roundedMana / 1000000000).toFixed(3) + \" Gm\"; // gigamana\n }\n else if (roundedMana < 1000000000000000) {\n result = (roundedMana / 1000000000000).toFixed(3) + \" Tm\"; // terramana\n } else {\n result = (roundedMana / 1000000000000000).toFixed(3) + \" Pm\"; // petamana\n }\n return result\n}","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {ExplorerStore, ExplorerOutput, OutputMetadata} from \"../stores/ExplorerStore\";\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Alert from \"react-bootstrap/Alert\";\r\nimport {Link} from 'react-router-dom';\r\nimport {displayManaUnit} from \"../utils\";\r\nimport {OutputType, outputToComponent, outputTypeToName} from \"../utils/output\";\r\nimport {Button, ListGroupItem} from \"react-bootstrap\";\r\nimport {resolveBase58ConflictID} from \"../utils/conflict\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n match?: {\r\n params: {\r\n id: string,\r\n }\r\n }\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerAddressQueryResult extends React.Component {\r\n\r\n componentDidMount() {\r\n this.props.explorerStore.resetSearch();\r\n this.props.explorerStore.searchAddress(this.props.match.params.id);\r\n }\r\n\r\n getSnapshotBeforeUpdate(prevProps: Props, prevState) {\r\n if (prevProps.match.params.id !== this.props.match.params.id) {\r\n this.props.explorerStore.searchAddress(this.props.match.params.id);\r\n }\r\n return null;\r\n }\r\n\r\n render() {\r\n let {id} = this.props.match.params;\r\n let {addr, query_loading, query_err} = this.props.explorerStore;\r\n // spent outputs\r\n let spent: Array = [];\r\n // unspent outputs\r\n let unspent: Array = [];\r\n let available_balances = [];\r\n\r\n if (query_err) {\r\n return (\r\n \r\n

Address not available - 404

\r\n

\r\n Address {id} not found.\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (addr) {\r\n // separate spent from unspent\r\n addr.explorerOutputs.forEach((o) => {\r\n if (o.metadata.consumerCount > 0) {\r\n spent.push(o);\r\n } else {\r\n unspent.push(o);\r\n }\r\n })\r\n\r\n let timestampCompareFn = (a: ExplorerOutput, b: ExplorerOutput) => {\r\n if (b.txTimestamp === a.txTimestamp) {\r\n // outputs have the same timestamp\r\n if (b.id.transactionID == a.id.transactionID) {\r\n // outputs belong to the same tx, sort based on index\r\n return b.id.outputIndex - a.id.outputIndex;\r\n }\r\n // same timestamp, but different tx\r\n return b.id.transactionID.localeCompare(a.id.transactionID);\r\n }\r\n return b.txTimestamp - a.txTimestamp;\r\n }\r\n\r\n // sort outputs\r\n unspent.sort(timestampCompareFn)\r\n spent.sort(timestampCompareFn)\r\n }\r\n return (\r\n \r\n

Address {id} {addr !== null && ({addr.explorerOutputs.length} Outputs)}

\r\n {\r\n addr !== null ?\r\n \r\n {\r\n addr.explorerOutputs !== null && addr.explorerOutputs.length === 100 &&\r\n \r\n Max. 100 outputs are shown.\r\n \r\n }\r\n \r\n \r\n \r\n

Available Balances

\r\n {available_balances.length === 0? \"There are no balances currently available.\" :
\r\n \r\n \r\n \r\n Color\r\n \r\n \r\n Balance\r\n \r\n \r\n \r\n {available_balances}\r\n
}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n

Unspent Outputs

\r\n {unspent.length === 0? \"There are no unspent outputs currently available.\" :
\r\n {unspent.map((o) => {\r\n return \r\n })}\r\n
\r\n }\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n

Spent Outputs

\r\n {spent.length === 0? \"There are no spent outputs currently available.\" :
\r\n {spent.map((o) => {\r\n return \r\n })}\r\n
\r\n }\r\n
\r\n \r\n
\r\n
\r\n :\r\n \r\n \r\n {query_loading && }\r\n \r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\ninterface oProps {\r\n output: ExplorerOutput;\r\n}\r\n\r\nclass OutputButton extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n enabled: false\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n { this.setState({enabled: !this.state.enabled})}}\r\n block\r\n >\r\n \r\n {this.props.output.id.base58} \r\n {outputTypeToName(this.props.output.output.type)} \r\n {new Date(this.props.output.txTimestamp * 1000).toLocaleString()}\r\n \r\n \r\n \r\n \r\n {\r\n this.state.enabled? outputToComponent(this.props.output.output): null\r\n }\r\n \r\n \r\n {\r\n this.state.enabled? : null\r\n }\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\ninterface omProps {\r\n metadata: OutputMetadata;\r\n timestamp: number;\r\n pendingMana: number;\r\n}\r\n\r\nclass OutputMeta extends React.Component {\r\n render() {\r\n let metadata = this.props.metadata;\r\n let timestamp = this.props.timestamp;\r\n let pendingMana = this.props.pendingMana;\r\n return (\r\n \r\n ConflictIDs: \r\n \r\n {\r\n metadata.conflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n Pending mana: {displayManaUnit(pendingMana)}\r\n Timestamp: {new Date(timestamp * 1000).toLocaleString()}\r\n Consumer Count: {metadata.consumerCount}\r\n { metadata.confirmedConsumer && Confirmed Consumer: {metadata.confirmedConsumer} }\r\n \r\n );\r\n }\r\n}\r\n\r\nlet getVariant = (outputType: number) => {\r\n switch (outputType) {\r\n case OutputType.Basic:\r\n return \"light\";\r\n case OutputType.Alias:\r\n return \"light\";\r\n case OutputType.Foundry:\r\n return \"success\";\r\n case OutputType.NFT:\r\n return \"info\";\r\n default:\r\n return \"danger\";\r\n }\r\n}","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n match?: {\r\n params: {\r\n search: string,\r\n }\r\n }\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class Explorer404 extends React.Component {\r\n\r\n render() {\r\n let {search} = this.props.match.params;\r\n return (\r\n \r\n

Tangle Explorer 404

\r\n

\r\n The search via '{search}' did not yield any results.\r\n

\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport * as prettysize from 'prettysize';\r\nimport Badge from \"react-bootstrap/Badge\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\nimport {Line} from \"react-chartjs-2\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n identity: string;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n showXLabels: 10,\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return prettysize(Math.abs(value));\r\n },\r\n maxTicksLimit: 3,\r\n fontSize: 10,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${prettysize(Math.abs(tooltipItem.value))}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Neighbor extends React.Component {\r\n render() {\r\n let neighborMetrics = this.props.nodeStore.neighbor_metrics.get(this.props.identity);\r\n let last = neighborMetrics.current;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {last.id}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Origin:\r\n {' '}\r\n {last.connection_origin}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Address: {last.address}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Network (Tx/Rx)
\r\n \r\n {'Total: '}\r\n {last.packets_written}\r\n {' / '}\r\n {last.packets_read}\r\n \r\n {' '}\r\n \r\n {'Current: '}\r\n {prettysize(neighborMetrics.currentNetIO && neighborMetrics.currentNetIO.tx)}\r\n {' / '}\r\n {prettysize(neighborMetrics.currentNetIO && neighborMetrics.currentNetIO.rx)}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Neighbor} from \"./Neighbor\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Neighbors extends React.Component {\r\n render() {\r\n let neighborsEle = [];\r\n this.props.nodeStore.neighbor_metrics.forEach((v, k) => {\r\n neighborsEle.push();\r\n });\r\n return (\r\n \r\n

Neighbors {neighborsEle.length > 0 && ({neighborsEle.length})}

\r\n

\r\n Currently connected neighbors.\r\n

\r\n {neighborsEle}\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { KeyboardEvent } from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport VisualizerStore from \"../stores/VisualizerStore\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport Badge from \"react-bootstrap/Badge\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport InputGroup from \"react-bootstrap/InputGroup\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport Popover from \"react-bootstrap/Popover\";\r\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\";\r\n\r\ninterface Props {\r\n visualizerStore?: VisualizerStore;\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"visualizerStore\")\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Visualizer extends React.Component {\r\n\r\n componentDidMount(): void {\r\n this.props.visualizerStore.start();\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.props.visualizerStore.stop();\r\n this.props.nodeStore.registerHandlers();\r\n }\r\n\r\n updateVerticesLimit = (e) => {\r\n this.props.visualizerStore.updateVerticesLimit(e.target.value);\r\n }\r\n\r\n pauseResumeVisualizer = (e) => {\r\n this.props.visualizerStore.pauseResume();\r\n }\r\n\r\n updateSearch = (e) => {\r\n this.props.visualizerStore.updateSearch(e.target.value);\r\n }\r\n\r\n searchAndHighlight = (e: KeyboardEvent) => {\r\n if (e.key !== 'Enter') return;\r\n this.props.visualizerStore.searchAndHighlight();\r\n }\r\n\r\n toggleBackgroundDataCollection = () => {\r\n if (this.props.nodeStore.collecting) {\r\n this.props.nodeStore.unregisterHandlers();\r\n return;\r\n }\r\n this.props.nodeStore.registerHandlers();\r\n }\r\n\r\n render() {\r\n let {\r\n vertices, finalized_count, selected,\r\n verticesLimit, tips_count, paused, search\r\n } = this.props.visualizerStore;\r\n let { last_mps_metric, collecting } = this.props.nodeStore;\r\n\r\n return (\r\n \r\n

Visualizer

\r\n \r\n \r\n \r\n \r\n Vertices Limit\r\n \r\n \r\n \r\n \r\n \r\n \r\n Search Vertex\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Ensures that only data needed for the visualizer is collected.\r\n \r\n }\r\n >\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Pauses/resumes rendering the graph.\r\n \r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n

\r\n \r\n BLK Pending\r\n \r\n {' '}\r\n \r\n BLK Confirmed\r\n \r\n {' '}\r\n \r\n TX Pending\r\n \r\n {' '}\r\n \r\n TX Confirmed\r\n \r\n {' '}\r\n \r\n Tip\r\n \r\n {' '}\r\n \r\n Unknown\r\n \r\n
\r\n Vertices: {vertices.size}, Tips: {tips_count},\r\n Confirmed/UnConfirmed: {finalized_count}/{vertices.size - finalized_count},{' '}\r\n BPS: {last_mps_metric.mps}\r\n
\r\n Selected: {selected ?\r\n \r\n {selected.id.substr(0, 10)}\r\n \r\n : \"-\"}\r\n
\r\n {\r\n selected ? selected.strongParents &&\r\n Strong:{' '}\r\n {selected.strongParents.map((parent) => {\r\n return (\r\n \r\n {parent.substr(0, 10) + \" \"}\r\n \r\n )\r\n\r\n })}\r\n \r\n : \"\"\r\n }\r\n
\r\n {\r\n selected ? selected.weakParents &&\r\n Weak:{' '}\r\n {selected.weakParents.map((parent) => {\r\n return (\r\n \r\n {parent.substr(0, 10) + \" \"}\r\n \r\n )\r\n\r\n })}\r\n \r\n : \"\"\r\n }\r\n
\r\n {\r\n selected ? selected.shallowLikedParents &&\r\n Shallow Liked:{' '}\r\n {selected.shallowLikedParents.map((parent) => {\r\n return (\r\n \r\n {parent.substr(0, 10) + \" \"}\r\n \r\n )\r\n\r\n })}\r\n \r\n : \"\"\r\n }\r\n

\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Table from \"react-bootstrap/Table\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class Tips extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTips();\n }\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let {tipsList} = this.props.explorerStore;\n return (\n \n

Tips

\n \n \n \n \n \n \n \n {tipsList}\n \n
BlockID
\n
\n );\n }\n}","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport {Transaction} from \"./Transaction\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n txId: string\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransaction extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTransaction(this.props.txId);\n }\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let { txId } = this.props;\n let { query_err, tx } = this.props.explorerStore;\n if (query_err) {\n return (\n \n

Transaction not available - 404

\n

\n Transaction with ID {txId} not found.\n

\n
\n );\n }\n return \n }\n}","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n// import {resolveBase58ConflictID} from \"../utils/conflict\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n txId: string;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransactionMetadata extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTransactionMetadata(this.props.txId);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let { txId } = this.props;\n let { query_err, txMetadata } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Metadata

\n

Metadata for transaction ID {txId} not found.

\n
\n );\n }\n return (\n
\n

Metadata

\n {txMetadata && \n \n ConflictIDs: \n \n { \n txMetadata.conflictIDs && txMetadata.conflictIDs.map((value, index) => {\n return (\n \n {value}\n \n )\n })\n }\n \n \n Booked: {txMetadata.booked.toString()}\n {/* Booked time: {new Date(txMetadata.bookedTime * 1000).toLocaleString()} */}\n Confirmation State: {txMetadata.confirmationState}\n {/* Confirmation State Time: {new Date(txMetadata.confirmationStateTime * 1000).toLocaleString()} */}\n }\n
\n )\n }\n}\n","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n txId: string\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransactionAttachments extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTransactionAttachments(this.props.txId);\n }\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let { txAttachments } = this.props.explorerStore;\n return (\n
\n

Attachments

\n {txAttachments && txAttachments.blockIDs && \n \n \n {txAttachments.blockIDs.map((blkId, i) => {\n return {blkId}\n })}\n \n \n }\n
\n )\n }\n}","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport { ExplorerTransaction } from \"./ExplorerTransaction\"\nimport { ExplorerTransactionMetadata } from \"./ExplorerTransactionMetadata\"\nimport { ExplorerTransactionAttachments } from \"./ExplorerTransactionAttachments\"\n\n\ninterface Props {\n match?: {\n params: {\n id: string,\n }\n }\n}\n\nexport class ExplorerTransactionQueryResult extends React.Component {\n render() {\n let { id } = this.props.match.params;\n return (\n \n \n \n \n \n )\n }\n}","export enum ConfirmationState {\n Undefined = 0,\n Rejected,\n Pending,\n Accepted,\n Confirmed,\n}\n\nexport function resolveConfirmationState(sigType: number) {\n switch (sigType) {\n case ConfirmationState.Undefined:\n return \"Undefined\";\n case ConfirmationState.Rejected:\n return \"Rejected\";\n case ConfirmationState.Pending:\n return \"Pending\";\n case ConfirmationState.Accepted:\n return \"Accepted\";\n case ConfirmationState.Confirmed:\n return \"Confirmed\";\n default:\n return \"Undefined Confirmation State\";\n }\n}\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Badge from \"react-bootstrap/Badge\";\nimport {Link} from 'react-router-dom';\nimport {displayManaUnit} from \"../utils\";\nimport {resolveBase58ConflictID} from \"../utils/conflict\";\nimport {outputToComponent} from \"../utils/output\";\nimport {resolveConfirmationState} from \"../utils/confirmation_state\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n match?: {\n params: {\n id: string,\n }\n }\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerOutputQueryResult extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getOutput(this.props.match.params.id);\n this.props.explorerStore.getPendingMana(this.props.match.params.id);\n this.props.explorerStore.getOutputMetadata(this.props.match.params.id);\n this.props.explorerStore.getOutputConsumers(this.props.match.params.id);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let {id} = this.props.match.params;\n let { query_err, output, pendingMana, outputMetadata, outputConsumers } = this.props.explorerStore;\n\n let renderTriBool = (val: string) => {\n if (val === \"true\"){\n return True\n }\n if (val === \"false\"){\n return False\n }\n return Maybe\n }\n\n if (query_err) {\n return (\n \n

Output not found - 404

\n {id}\n
\n );\n }\n return (\n \n

Output

\n {output &&
\n {outputToComponent(output)}\n \n {pendingMana && \n Pending Mana\n
\n
Value: {displayManaUnit(pendingMana.mana)}
\n
Timestamp: {new Date(pendingMana.timestamp * 1000).toLocaleString()}
\n
}\n
\n
}\n\n

Metadata

\n {outputMetadata &&
\n \n Transaction ID: {outputMetadata.outputID.transactionID} \n ConflictIDs: \n \n {\n outputMetadata.conflictIDs.map((value, index) => {\n return (\n \n \n {resolveBase58ConflictID(value)}\n \n \n )\n })\n }\n \n Consumer Count: {outputMetadata.consumerCount}\n Confirmed Consumer: {outputMetadata.confirmedConsumer} \n Confirmation State: {resolveConfirmationState(outputMetadata.confirmationState)}\n Confirmation State Time: {new Date(outputMetadata.confirmationStateTime * 1000).toLocaleString()}\n \n
}\n\n

Consumers

\n {outputConsumers &&
\n \n {outputConsumers.consumers.map((c,i) => \n
Transaction ID: {c.transactionID}
\n
Valid: {renderTriBool(c.valid)}
\n
)}\n
\n
}\n
\n )\n }\n}\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport {resolveBase58ConflictID} from \"../utils/conflict\";\nimport {resolveConfirmationState} from \"../utils/confirmation_state\";\n\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n match?: {\n params: {\n id: string,\n }\n }\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerConflictQueryResult extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getConflict(this.props.match.params.id);\n this.props.explorerStore.getConflictChildren(this.props.match.params.id);\n this.props.explorerStore.getConflictConflicts(this.props.match.params.id);\n this.props.explorerStore.getConflictVoters(this.props.match.params.id);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let {id} = this.props.match.params;\n let { query_err, conflict, conflictChildren, conflictConflicts, conflictVoters } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Conflict not found - 404

\n {id}\n
\n );\n }\n return (\n \n

Conflict

\n {conflict && \n ID: {resolveBase58ConflictID(conflict.id)}\n Parents:\n \n {conflict.parents.map((p,i) => {resolveBase58ConflictID(p)})}\n \n \n {Conflicts:\n {conflict.conflictIDs && \n {conflict.conflictIDs.map((c,i) => {c})}\n }\n }\n ConfirmationState: {resolveConfirmationState(conflict.confirmationState)}\n Children:\n {conflictChildren && \n {conflictChildren.childConflicts.map((c,i) => {resolveBase58ConflictID(c.conflictID)})}\n }\n \n { Conflicts:\n {conflictConflicts && \n {conflictConflicts.conflicts.map((c,i) =>
\n OutputID: {c.outputID.base58}\n \n {c.conflictIDs.map((b,j) => \n {resolveBase58ConflictID(b)}\n )}\n \n
)}\n
}\n
}\n Voters:\n {conflictVoters && \n {conflictVoters.voters.map((s,i) => {s})}\n }\n \n
}\n
\n )\n }\n}\n","import { SlotStore } from '../stores/SlotStore';\nimport {inject, observer} from \"mobx-react\";\nimport NodeStore from '../stores/NodeStore';\nimport * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport { Table } from 'react-bootstrap';\n\ninterface Props {\n history: any;\n nodeStore?: NodeStore;\n slotStore?: SlotStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"slotStore\")\n@observer\nexport class SlotLiveFeed extends React.Component {\n render() {\n let {slotLiveFeed} = this.props.slotStore;\n return (\n \n

Slots

\n \n \n \n \n \n \n \n \n {slotLiveFeed}\n \n
IndexCommitment ID
\n
\n );\n }\n}\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { Card, Col, Row, Table } from 'react-bootstrap';\n\n\ninterface Props {\n explorerStore?: ExplorerStore;\n match?: {\n params: {\n commitment: string,\n }\n }\n}\n\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerSlotQueryResult extends React.Component {\n componentDidMount() {\n const id = this.props.match.params.commitment;\n this.props.explorerStore.getSlotDetails(id);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n\n render() {\n let {commitment} = this.props.match.params;\n let { query_err, slotInfo } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Slot not found - 404

\n {commitment}\n
\n );\n }\n return (\n \n

Slot

\n {slotInfo && \n ID: {commitment}\n Index: {slotInfo.index}\n RootsID: {slotInfo.rootsID}\n PrevEC: {slotInfo.prevID}\n Cumulative Weight: {slotInfo.cumulativeWeight}\n Blocks:\n {slotInfo.blocks && \n \n \n \n \n \n {slotInfo.blocks.map((b,i) => {b})}\n \n
\n \n
\n
\n
}\n
\n Transactions:\n {slotInfo.transactions && \n \n \n \n \n \n {slotInfo.transactions.map((t,i) => {t})}\n \n
\n \n
\n
\n
}\n
\n Created outputs:\n {slotInfo.createdOutputs && \n \n \n \n \n \n {slotInfo.createdOutputs.map((c,i) => {c})}\n \n
\n \n
\n
\n
}\n
\n Spent outputs:\n {slotInfo.spentOutputs && \n \n \n \n \n \n {slotInfo.spentOutputs.map((s,i) => {s})}\n \n
\n \n
\n
\n
}\n
\n
}\n
\n )\n }\n}\n","import * as React from 'react';\nimport {inject, observer} from \"mobx-react\";\nimport NodeStore from \"../stores/NodeStore\";\nimport Navbar from \"react-bootstrap/Navbar\";\nimport Nav from \"react-bootstrap/Nav\";\nimport {Dashboard} from \"./Dashboard\";\nimport Badge from \"react-bootstrap/Badge\";\nimport {RouterStore} from 'mobx-react-router';\nimport {Explorer} from \"./Explorer\";\nimport {NavExplorerSearchbar} from \"./NavExplorerSearchbar\";\nimport {Redirect, Route, Switch} from 'react-router-dom';\nimport {LinkContainer} from 'react-router-bootstrap';\nimport {ExplorerBlockQueryResult} from \"./ExplorerBlockQueryResult\";\nimport {ExplorerAddressQueryResult} from \"./ExplorerAddressResult\";\nimport {Explorer404} from \"./Explorer404\";\nimport {Neighbors} from \"./Neighbors\";\nimport {Visualizer} from \"./Visualizer\";\nimport {Tips} from \"./Tips\";\nimport {ExplorerTransactionQueryResult} from \"./ExplorerTransactionQueryResult\";\nimport {ExplorerOutputQueryResult} from \"./ExplorerOutputQueryResult\";\nimport {ExplorerConflictQueryResult} from \"./ExplorerConflictQueryResult\";\nimport { SlotLiveFeed } from './SlotLiveFeed';\nimport { ExplorerSlotQueryResult } from './ExplorerSlotQueryResult';\n\ninterface Props {\n history: any;\n routerStore?: RouterStore;\n nodeStore?: NodeStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"routerStore\")\n@observer\nexport class Root extends React.Component {\n renderDevTool() {\n if (process.env.NODE_ENV !== 'production') {\n const DevTools = require('mobx-react-devtools').default;\n return ;\n }\n }\n\n componentDidMount(): void {\n this.props.nodeStore.connect();\n }\n\n render() {\n return (\n
\n \n iota-core\n \n \n \n \n {!this.props.nodeStore.websocketConnected &&\n WS not connected!\n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.props.children}\n {this.renderDevTool()}\n
\n );\n }\n}\n","import * as React from 'react';\nimport {hot} from 'react-hot-loader/root';\nimport {Root} from './components/Root';\n\n// render react DOM\nexport const App = hot(({history}) => );\n","import {action, computed, observable, ObservableMap} from 'mobx';\r\nimport * as dateformat from 'dateformat';\r\nimport {connectWebSocket, registerHandler, unregisterHandler, WSMsgType} from \"../misc/WS\";\r\n\r\nclass BPSMetric {\r\n mps: number;\r\n ts: string;\r\n}\r\n\r\nclass Status {\r\n id: string;\r\n version: string;\r\n uptime: number;\r\n mem: MemoryMetrics = new MemoryMetrics();\r\n tangleTime: TangleTime;\r\n scheduler: SchedulerMetric = new SchedulerMetric();\r\n}\r\n\r\nclass TangleTime {\r\n synced: boolean;\r\n bootstrapped: boolean;\r\n ATT: number;\r\n RATT: number;\r\n CTT: number;\r\n RCTT: number;\r\n acceptedBlockID: string;\r\n confirmedBlockID: string;\r\n confirmedSlot: number;\r\n committedSlot: number;\r\n}\r\n\r\nclass MemoryMetrics {\r\n heap_sys: number;\r\n heap_alloc: number;\r\n heap_idle: number;\r\n heap_released: number;\r\n heap_objects: number;\r\n last_pause_gc: number;\r\n num_gc: number;\r\n ts: string;\r\n}\r\n\r\nclass TipsMetric {\r\n totaltips: number;\r\n ts: string;\r\n}\r\n\r\nclass NetworkIO {\r\n tx: number;\r\n rx: number;\r\n ts: string;\r\n}\r\n\r\nclass RateSetterMetric {\r\n size: number;\r\n estimate: string;\r\n rate: number;\r\n ts: string;\r\n}\r\n\r\nclass SchedulerMetric {\r\n running: number;\r\n rate: string;\r\n maxBufferSize: number;\r\n currentBufferSize: number;\r\n deficit: number;\r\n ts: string;\r\n\r\n}\r\n\r\nclass NeighborMetrics {\r\n @observable collected: Array = [];\r\n @observable network_io: Array = [];\r\n\r\n addMetric(metric: NeighborMetric) {\r\n metric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.collected.push(metric);\r\n if (this.collected.length > maxMetricsDataPoints) {\r\n this.collected.shift();\r\n }\r\n let netIO = this.currentNetIO;\r\n if (netIO) {\r\n if (this.network_io.length > maxMetricsDataPoints) {\r\n this.network_io.shift();\r\n }\r\n this.network_io.push(netIO);\r\n }\r\n }\r\n\r\n get current() {\r\n return this.collected[this.collected.length - 1];\r\n }\r\n\r\n get secondLast() {\r\n let index = this.collected.length - 2;\r\n if (index < 0) {\r\n return\r\n }\r\n return this.collected[index];\r\n }\r\n\r\n get currentNetIO(): NetworkIO {\r\n if (this.current && this.secondLast) {\r\n return {\r\n tx: this.current.packets_written - this.secondLast.packets_written,\r\n rx: this.current.packets_read - this.secondLast.packets_read,\r\n ts: dateformat(new Date(), \"HH:MM:ss\"),\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n @computed\r\n get netIOSeries() {\r\n let tx = Object.assign({}, chartSeriesOpts,\r\n series(\"Tx\", 'rgba(53, 180, 219,1)', 'rgba(53, 180, 219,0.4)')\r\n );\r\n let rx = Object.assign({}, chartSeriesOpts,\r\n series(\"Rx\", 'rgba(235, 134, 52)', 'rgba(235, 134, 52,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.network_io.length; i++) {\r\n let metric: NetworkIO = this.network_io[i];\r\n labels.push(metric.ts);\r\n tx.data.push(metric.tx);\r\n rx.data.push(-metric.rx);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [tx, rx],\r\n };\r\n }\r\n}\r\n\r\nclass NeighborMetric {\r\n id: string;\r\n address: string;\r\n connection_origin: number;\r\n packets_read: number;\r\n packets_written: number;\r\n ts: number;\r\n}\r\n\r\nclass ComponentCounterMetric {\r\n store: number;\r\n solidifier: number;\r\n scheduler: number;\r\n booker: number;\r\n ts: number;\r\n}\r\n\r\nconst chartSeriesOpts = {\r\n label: \"Incoming\", data: [],\r\n fill: true,\r\n lineTension: 0,\r\n backgroundColor: 'rgba(58, 60, 171,0.4)',\r\n borderWidth: 1,\r\n borderColor: 'rgba(58, 60, 171,1)',\r\n borderCapStyle: 'butt',\r\n borderDash: [],\r\n borderDashOffset: 0.0,\r\n borderJoinStyle: 'miter',\r\n pointBorderColor: 'rgba(58, 60, 171,1)',\r\n pointBackgroundColor: '#fff',\r\n pointBorderWidth: 1,\r\n pointHoverBackgroundColor: 'rgba(58, 60, 171,1)',\r\n pointHoverBorderColor: 'rgba(220,220,220,1)',\r\n pointHoverBorderWidth: 2,\r\n pointRadius: 0,\r\n pointHitRadius: 20,\r\n pointHoverRadius: 5,\r\n};\r\n\r\nfunction series(name: string, color: string, bgColor: string) {\r\n return {\r\n label: name, data: [],\r\n backgroundColor: bgColor,\r\n borderColor: color,\r\n pointBorderColor: color,\r\n pointHoverBackgroundColor: color,\r\n pointHoverBorderColor: 'rgba(220,220,220,1)',\r\n }\r\n}\r\n\r\nconst statusWebSocketPath = \"/ws\";\r\n\r\nconst maxMetricsDataPoints = 900;\r\n\r\nexport class NodeStore {\r\n @observable status: Status = new Status();\r\n @observable websocketConnected: boolean = false;\r\n @observable last_mps_metric: BPSMetric = new BPSMetric();\r\n @observable collected_mps_metrics: Array = [];\r\n @observable collected_rate_setter_metrics: Array = [];\r\n @observable last_rate_setter_metric: RateSetterMetric = new RateSetterMetric();\r\n @observable collected_scheduler_metrics: Array = [];\r\n @observable collected_mem_metrics: Array = [];\r\n @observable neighbor_metrics = new ObservableMap();\r\n @observable last_tips_metric: TipsMetric = new TipsMetric();\r\n @observable collected_tips_metrics: Array = [];\r\n @observable last_component_counter_metric: ComponentCounterMetric = new ComponentCounterMetric();\r\n @observable collected_component_counter_metrics: Array = [];\r\n @observable collecting: boolean = true;\r\n\r\n constructor() {\r\n this.status.tangleTime = new TangleTime;\r\n this.status.tangleTime.ATT = 0;\r\n this.status.tangleTime.RATT = 0;\r\n this.status.tangleTime.CTT = 0;\r\n this.status.tangleTime.RCTT = 0;\r\n this.registerHandlers();\r\n }\r\n\r\n registerHandlers = () => {\r\n registerHandler(WSMsgType.Status, this.updateStatus);\r\n registerHandler(WSMsgType.BPSMetrics, (mps: number) => {\r\n this.addBPSMetric(this.updateLastBPSMetric(mps));\r\n });\r\n registerHandler(WSMsgType.NeighborStats, this.updateNeighborMetrics);\r\n registerHandler(WSMsgType.TipsMetrics, this.updateLastTipsMetric);\r\n registerHandler(WSMsgType.ComponentCounterMetrics, this.updateLastComponentMetric);\r\n registerHandler(WSMsgType.RateSetter, this.updateLastRateSetterMetric)\r\n\r\n this.updateCollecting(true);\r\n }\r\n\r\n unregisterHandlers = () => {\r\n unregisterHandler(WSMsgType.Status);\r\n unregisterHandler(WSMsgType.BPSMetrics);\r\n unregisterHandler(WSMsgType.NeighborStats);\r\n unregisterHandler(WSMsgType.TipsMetrics);\r\n unregisterHandler(WSMsgType.ComponentCounterMetrics);\r\n unregisterHandler(WSMsgType.RateSetter);\r\n this.updateCollecting(false);\r\n }\r\n\r\n @action\r\n updateCollecting = (collecting: boolean) => {\r\n this.collecting = collecting;\r\n }\r\n\r\n @action\r\n reset() {\r\n this.collected_mps_metrics = [];\r\n this.collected_mem_metrics = [];\r\n this.collected_scheduler_metrics = [];\r\n this.neighbor_metrics = new ObservableMap();\r\n this.collected_tips_metrics = [];\r\n this.collected_component_counter_metrics = [];\r\n }\r\n\r\n reconnect() {\r\n this.updateWebSocketConnected(false);\r\n setTimeout(() => {\r\n this.connect();\r\n }, 5000);\r\n }\r\n\r\n connect() {\r\n connectWebSocket(statusWebSocketPath,\r\n () => this.updateWebSocketConnected(true),\r\n () => this.reconnect(),\r\n () => this.updateWebSocketConnected(false))\r\n }\r\n\r\n @action\r\n updateWebSocketConnected = (connected: boolean) => this.websocketConnected = connected;\r\n\r\n @action\r\n updateStatus = (status: Status) => {\r\n status.mem.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n if (this.collected_mem_metrics.length > maxMetricsDataPoints) {\r\n this.collected_mem_metrics.shift();\r\n }\r\n this.collected_mem_metrics.push(status.mem);\r\n this.status = status;\r\n\r\n status.scheduler.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n if (this.collected_scheduler_metrics.length > maxMetricsDataPoints) {\r\n this.collected_scheduler_metrics.shift();\r\n }\r\n this.collected_scheduler_metrics.push(status.scheduler);\r\n };\r\n\r\n\r\n @action\r\n updateNeighborMetrics = (neighborMetrics: Array) => {\r\n if (!neighborMetrics) {\r\n return;\r\n }\r\n let updated = [];\r\n for (let i = 0; i < neighborMetrics.length; i++) {\r\n let metric = neighborMetrics[i];\r\n let neighbMetrics: NeighborMetrics = this.neighbor_metrics.get(metric.id);\r\n if (!neighbMetrics) {\r\n neighbMetrics = new NeighborMetrics();\r\n }\r\n neighbMetrics.addMetric(metric);\r\n this.neighbor_metrics.set(metric.id, neighbMetrics);\r\n updated.push(metric.id);\r\n }\r\n // remove duplicates\r\n for (const k of this.neighbor_metrics.keys()) {\r\n if (!updated.includes(k)) {\r\n this.neighbor_metrics.delete(k);\r\n }\r\n }\r\n };\r\n\r\n @action\r\n updateLastRateSetterMetric = (metric: RateSetterMetric) => {\r\n metric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_rate_setter_metric = metric;\r\n if (this.collected_rate_setter_metrics.length > maxMetricsDataPoints) {\r\n this.collected_rate_setter_metrics.shift();\r\n }\r\n this.collected_rate_setter_metrics.push(metric);\r\n };\r\n\r\n @action\r\n updateLastBPSMetric = (mps: number) => {\r\n let mpsMetric = new BPSMetric();\r\n mpsMetric.mps = mps;\r\n mpsMetric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_mps_metric = mpsMetric;\r\n return mpsMetric;\r\n };\r\n\r\n @action\r\n addBPSMetric = (metric: BPSMetric) => {\r\n if (this.collected_mps_metrics.length > maxMetricsDataPoints) {\r\n this.collected_mps_metrics.shift();\r\n }\r\n this.collected_mps_metrics.push(metric);\r\n }\r\n\r\n @action\r\n updateLastTipsMetric = (tipsMetric: TipsMetric) => {\r\n tipsMetric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_tips_metric = tipsMetric;\r\n if (this.collected_tips_metrics.length > maxMetricsDataPoints) {\r\n this.collected_tips_metrics.shift();\r\n }\r\n this.collected_tips_metrics.push(tipsMetric);\r\n };\r\n\r\n @action\r\n updateLastComponentMetric = (componentCounterMetric: ComponentCounterMetric) => {\r\n componentCounterMetric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_component_counter_metric = componentCounterMetric;\r\n if (this.collected_component_counter_metrics.length > maxMetricsDataPoints) {\r\n this.collected_component_counter_metrics.shift()\r\n }\r\n this.collected_component_counter_metrics.push(componentCounterMetric);\r\n };\r\n\r\n @computed\r\n get mpsSeries() {\r\n let mps = Object.assign({}, chartSeriesOpts,\r\n series(\"BPS\", 'rgba(67, 196, 99,1)', 'rgba(67, 196, 99,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_mps_metrics.length; i++) {\r\n let metric: BPSMetric = this.collected_mps_metrics[i];\r\n labels.push(metric.ts);\r\n mps.data.push(metric.mps);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [mps],\r\n };\r\n }\r\n\r\n @computed\r\n get tipsSeries() {\r\n let totaltips = Object.assign({}, chartSeriesOpts,\r\n series(\"All tips\", 'rgba(67, 196, 99,1)', 'rgba(67, 196, 99,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_tips_metrics.length; i++) {\r\n let metric: TipsMetric = this.collected_tips_metrics[i];\r\n labels.push(metric.ts);\r\n totaltips.data.push(metric.totaltips);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [totaltips],\r\n };\r\n }\r\n\r\n @computed\r\n get componentSeries() {\r\n let stored = Object.assign({}, chartSeriesOpts,\r\n series(\"stored\", 'rgba(209,165,253,1)', 'rgba(209,165,253,0.4)')\r\n );\r\n let solidified = Object.assign({}, chartSeriesOpts,\r\n series(\"solidified\", 'rgba(165,209,253,1)', 'rgba(165,209,253,0.4)')\r\n );\r\n let scheduled = Object.assign({}, chartSeriesOpts,\r\n series(\"scheduled\", 'rgba(182, 141, 64,1)', 'rgba(182, 141, 64,0.4)')\r\n );\r\n let booked = Object.assign({}, chartSeriesOpts,\r\n series(\"booked\", 'rgba(5, 68, 94,1)', 'rgba(5, 68, 94,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_component_counter_metrics.length; i++) {\r\n let metric: ComponentCounterMetric = this.collected_component_counter_metrics[i];\r\n labels.push(metric.ts);\r\n stored.data.push(metric.store);\r\n solidified.data.push(metric.solidifier);\r\n scheduled.data.push(metric.scheduler);\r\n booked.data.push(metric.booker);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [stored, solidified, scheduled, booked],\r\n };\r\n }\r\n\r\n @computed\r\n get bufferSizeSeries() {\r\n let bufferSize = Object.assign({}, chartSeriesOpts,\r\n series(\"buffer size\", 'rgba(209,165,253,1)', 'rgba(209,165,253,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_scheduler_metrics.length; i++) {\r\n let metric: SchedulerMetric = this.collected_scheduler_metrics[i];\r\n labels.push(metric.ts);\r\n bufferSize.data.push(metric.currentBufferSize);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [bufferSize],\r\n };\r\n }\r\n\r\n @computed\r\n get deficitSeries() {\r\n let deficit = Object.assign({}, chartSeriesOpts,\r\n series(\"deficit\", 'rgba(182, 141, 64,1)', 'rgba(182, 141, 64,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_scheduler_metrics.length; i++) {\r\n let metric: SchedulerMetric = this.collected_scheduler_metrics[i];\r\n labels.push(metric.ts);\r\n deficit.data.push(metric.deficit);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [deficit],\r\n };\r\n }\r\n\r\n @computed\r\n get neighborsSeries() {\r\n return {};\r\n }\r\n\r\n @computed\r\n get uptime() {\r\n let day, hour, minute, seconds;\r\n seconds = Math.floor(this.status.uptime / 1000);\r\n minute = Math.floor(seconds / 60);\r\n seconds = seconds % 60;\r\n hour = Math.floor(minute / 60);\r\n minute = minute % 60;\r\n day = Math.floor(hour / 24);\r\n hour = hour % 24;\r\n let str = \"\";\r\n if (day == 1) {\r\n str += day + \" Day, \";\r\n }\r\n if (day > 1) {\r\n str += day + \" Days, \";\r\n }\r\n if (hour >= 0) {\r\n if (hour < 10) {\r\n str += \"0\" + hour + \":\";\r\n } else {\r\n str += hour + \":\";\r\n }\r\n }\r\n if (minute >= 0) {\r\n if (minute < 10) {\r\n str += \"0\" + minute + \":\";\r\n } else {\r\n str += minute + \":\";\r\n }\r\n }\r\n if (seconds >= 0) {\r\n if (seconds < 10) {\r\n str += \"0\" + seconds;\r\n } else {\r\n str += seconds;\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n @computed\r\n get memSeries() {\r\n let heapSys = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Sys\", 'rgba(168, 50, 76,1)', 'rgba(168, 50, 76,0.4)')\r\n );\r\n let heapAlloc = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Alloc\", 'rgba(222, 49, 87,1)', 'rgba(222, 49, 87,0.4)')\r\n );\r\n let heapIdle = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Idle\", 'rgba(222, 49, 182,1)', 'rgba(222, 49, 182,0.4)')\r\n );\r\n let heapReleased = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Released\", 'rgba(250, 76, 252,1)', 'rgba(250, 76, 252,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_mem_metrics.length; i++) {\r\n let metric = this.collected_mem_metrics[i];\r\n labels.push(metric.ts);\r\n heapSys.data.push(metric.heap_sys);\r\n heapAlloc.data.push(metric.heap_alloc);\r\n heapIdle.data.push(metric.heap_idle);\r\n heapReleased.data.push(metric.heap_released);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [heapSys, heapAlloc, heapIdle, heapReleased],\r\n };\r\n }\r\n}\r\n\r\nexport default NodeStore;\r\n","import {action, observable} from 'mobx';\r\nimport {RouterStore} from \"mobx-react-router\";\r\n\r\nclass SendResult {\r\n BlkId: string;\r\n}\r\n\r\nenum QueryError {\r\n NotFound\r\n}\r\n\r\nexport class FaucetStore {\r\n // send request to faucet\r\n @observable send_addr: string = \"\";\r\n @observable send_access_mana_node_id: string = \"\";\r\n @observable send_consensus_mana_node_id: string = \"\";\r\n @observable sending: boolean = false;\r\n @observable sendResult: SendResult = null;\r\n @observable query_error: string = \"\";\r\n\r\n routerStore: RouterStore;\r\n\r\n constructor(routerStore: RouterStore) {\r\n this.routerStore = routerStore;\r\n }\r\n\r\n sendReq = async () => {\r\n this.updateSending(true);\r\n try {\r\n // send request\r\n let res = await fetch(`/api/faucet/${this.send_addr}?accessMana=${this.send_access_mana_node_id}&consensusMana=${this.send_consensus_mana_node_id}`);\r\n if (res.status !== 200) {\r\n this.updateQueryError(QueryError.NotFound);\r\n return;\r\n }\r\n let result: SendResult = await res.json();\r\n setTimeout(() => {\r\n this.updateSendResult(result);\r\n }, 2000);\r\n } catch (err) {\r\n this.updateQueryError(err);\r\n }\r\n };\r\n\r\n @action\r\n updateSendResult = (result: SendResult) => {\r\n this.sending = false;\r\n this.sendResult = result;\r\n this.routerStore.history.push(`/explorer/address/${this.send_addr}`);\r\n };\r\n\r\n @action\r\n updateSend = (send_addr: string) => {\r\n this.send_addr = send_addr;\r\n };\r\n\r\n @action\r\n updateSendAccessManaNodeID = (access_mana: string) => {\r\n this.send_access_mana_node_id = access_mana;\r\n }\r\n\r\n @action\r\n updateSendConsensusManaNodeID = (consensus_mana: string) => {\r\n this.send_consensus_mana_node_id = consensus_mana;\r\n }\r\n\r\n @action\r\n updateSending = (sending: boolean) => {\r\n this.sending = sending;\r\n this.query_error = \"\";\r\n };\r\n\r\n @action\r\n reset = () => {\r\n this.send_addr = null;\r\n this.send_access_mana_node_id = \"\";\r\n this.send_consensus_mana_node_id = \"\";\r\n this.sending = false;\r\n this.query_error = \"\";\r\n };\r\n\r\n @action\r\n updateQueryError = (err: any) => {\r\n this.sending = false;\r\n this.query_error = err;\r\n };\r\n}\r\n\r\nexport default FaucetStore;\r\n","import { action, observable, ObservableMap } from 'mobx';\r\nimport { registerHandler, WSMsgType } from \"../misc/WS\";\r\nimport { RouterStore } from \"mobx-react-router\";\r\nimport { default as Viva } from 'vivagraphjs';\r\nimport { Block } from './ExplorerStore';\r\n\r\nexport class Vertex {\r\n id: string;\r\n strongParents: Array;\r\n weakParents: Array;\r\n shallowLikedParents: Array;\r\n is_tip: boolean;\r\n is_blk_confirmed: boolean;\r\n is_tx_accepted: boolean;\r\n is_tx: boolean;\r\n}\r\n\r\nexport class TipInfo {\r\n id: string;\r\n is_tip: boolean;\r\n}\r\n\r\nclass history {\r\n vertices: Array;\r\n}\r\n\r\nconst COLOR = {\r\n BlockPending: \"#b9b7bd\",\r\n BlockConfirmed: \"#6c71c4\",\r\n TransactionPending: \"#393e46\",\r\n TransactionConfirmed: \"#fad02c\",\r\n Tip: \"#cb4b16\",\r\n Unknown: \"#b58900\",\r\n Line: \"#586e75\",\r\n SelectedPastConeLine: \"#e105f5\",\r\n SelectedFutureConeLine: \"#51e05d\",\r\n Selected: \"#859900\"\r\n}\r\n\r\nconst vertexSize = 20;\r\n\r\nexport class VisualizerStore {\r\n @observable vertices = new ObservableMap();\r\n @observable verticesLimit = 1500;\r\n @observable finalized_count = 0;\r\n @observable tips_count = 0;\r\n verticesIncomingOrder = [];\r\n draw: boolean = false;\r\n routerStore: RouterStore;\r\n\r\n // the currently selected vertex via hover\r\n @observable selected: Vertex;\r\n selected_via_click: boolean = false;\r\n selected_origin_color: number = 0;\r\n\r\n // search\r\n @observable search: string = \"\";\r\n\r\n // viva graph objs\r\n graph;\r\n graphics;\r\n renderer;\r\n @observable paused: boolean = false;\r\n\r\n constructor(routerStore: RouterStore) {\r\n this.routerStore = routerStore;\r\n registerHandler(WSMsgType.Vertex, this.addVertex);\r\n registerHandler(WSMsgType.TipInfo, this.addTipInfo);\r\n registerHandler(WSMsgType.TXAccepted, this.updateTxStatus);\r\n // this.fetchHistory();\r\n }\r\n\r\n fetchHistory = async () => {\r\n try {\r\n let res = await fetch(`/api/visualizer/history`);\r\n let history: history = await res.json();\r\n history.vertices.forEach(v => {\r\n this.addVertex(v);\r\n });\r\n } catch (err) {\r\n console.log(\"Fail to fetch history in visualizer\", err);\r\n }\r\n return\r\n }\r\n\r\n @action\r\n updateSearch = (search: string) => {\r\n this.search = search.trim();\r\n }\r\n\r\n @action\r\n searchAndHighlight = () => {\r\n this.clearSelected();\r\n if (!this.search) return;\r\n let iter: IterableIterator = this.vertices.keys();\r\n let found = null;\r\n for (const key of iter) {\r\n if (key.indexOf(this.search) >= 0) {\r\n found = key;\r\n break;\r\n }\r\n }\r\n if (!found) return;\r\n this.updateSelected(this.vertices.get(found), false);\r\n }\r\n\r\n @action\r\n pauseResume = () => {\r\n if (this.paused) {\r\n this.renderer.resume();\r\n this.paused = false;\r\n return;\r\n }\r\n this.renderer.pause();\r\n this.paused = true;\r\n }\r\n\r\n @action\r\n updateVerticesLimit = (num: number) => {\r\n this.verticesLimit = num;\r\n }\r\n\r\n @action\r\n updateTxStatus = (vert: Vertex) => { \r\n let existing = this.vertices.get(vert.id);\r\n if (!existing) {\r\n return\r\n }\r\n\r\n existing.is_tx_accepted = vert.is_tx_accepted;\r\n this.vertices.set(vert.id, existing);\r\n\r\n if (this.draw) {\r\n this.drawVertex(existing);\r\n }\r\n }\r\n\r\n @action\r\n addVertex = (vert: Vertex) => {\r\n let existing = this.vertices.get(vert.id);\r\n if (existing) {\r\n if (!existing.is_blk_confirmed && vert.is_blk_confirmed) {\r\n this.finalized_count++;\r\n }\r\n } else {\r\n if (vert.is_blk_confirmed) {\r\n this.finalized_count++;\r\n }\r\n this.verticesIncomingOrder.push(vert.id);\r\n this.checkLimit();\r\n }\r\n\r\n this.vertices.set(vert.id, vert);\r\n\r\n if (this.draw) {\r\n this.drawVertex(vert);\r\n }\r\n };\r\n\r\n @action\r\n addTipInfo = async (tipInfo: TipInfo) => {\r\n let v = this.vertices.get(tipInfo.id);\r\n if (!v) {\r\n v = new Vertex();\r\n v.id = tipInfo.id;\r\n\r\n // first seen as tip, get parents info\r\n let res = await fetch(`/api/block/${tipInfo.id}`);\r\n if (res.status === 200) {\r\n let blk: Block = await res.json();\r\n v.strongParents = blk.strongParents;\r\n v.weakParents = blk.weakParents;\r\n v.shallowLikedParents = blk.shallowLikedParents;\r\n v.is_blk_confirmed = blk.acceptance;\r\n }\r\n this.verticesIncomingOrder.push(v.id);\r\n }\r\n\r\n this.tips_count += tipInfo.is_tip ? 1 : v.is_tip ? -1 : 0;\r\n v.is_tip = tipInfo.is_tip;\r\n this.vertices.set(tipInfo.id, v);\r\n\r\n if (this.draw) {\r\n this.drawVertex(v);\r\n }\r\n };\r\n\r\n @action\r\n checkLimit = () => {\r\n while (this.verticesIncomingOrder.length > this.verticesLimit) {\r\n let deleteId = this.verticesIncomingOrder.shift();\r\n let vert = this.vertices.get(deleteId);\r\n // make sure we remove any markings if the vertex gets deleted\r\n if (this.selected && deleteId === this.selected.id) {\r\n this.clearSelected();\r\n }\r\n if (this.draw) {\r\n this.graph.removeNode(deleteId);\r\n }\r\n if (!vert) {\r\n continue;\r\n }\r\n if (vert.is_blk_confirmed) {\r\n this.finalized_count--;\r\n }\r\n if (vert.is_tip) {\r\n this.tips_count--;\r\n }\r\n this.vertices.delete(deleteId);\r\n }\r\n }\r\n\r\n drawVertex = (vert: Vertex) => {\r\n let node = this.graph.getNode(vert.id);\r\n if (node) {\r\n // update coloring\r\n let nodeUI = this.graphics.getNodeUI(vert.id);\r\n nodeUI.color = parseColor(this.colorForVertexState(vert));\r\n } else {\r\n node = this.graph.addNode(vert.id, vert);\r\n }\r\n\r\n if (vert.strongParents) {\r\n this.linkParents(vert, node, vert.strongParents)\r\n }\r\n\r\n if (vert.weakParents) {\r\n this.linkParents(vert, node, vert.weakParents)\r\n }\r\n\r\n if (vert.shallowLikedParents) {\r\n this.linkParents(vert, node, vert.shallowLikedParents)\r\n }\r\n }\r\n\r\n linkParents = (vert: Vertex, node: any, parents: Array) => {\r\n parents.forEach((value) => {\r\n // if value is valid AND (links is empty OR there is no between parent and children)\r\n if (value && ((!node.links || !node.links.some(link => link.fromId === value)))) {\r\n // draw the link only when the parent exists\r\n let parent = this.graph.getNode(value);\r\n if (parent) {\r\n this.graph.addLink(value, vert.id);\r\n } else {\r\n console.log(\"link not added, parent doesn't exist\", value);\r\n }\r\n }\r\n })\r\n }\r\n\r\n colorForVertexState = (vert: Vertex) => {\r\n if (!vert) {\r\n return COLOR.Unknown;\r\n }\r\n\r\n // finalized\r\n if (vert.is_blk_confirmed) {\r\n if (vert.is_tx) {\r\n if (vert.is_tx_accepted) {\r\n return COLOR.TransactionConfirmed;\r\n } else {\r\n return COLOR.TransactionPending;\r\n } \r\n }\r\n return COLOR.BlockConfirmed;\r\n }\r\n\r\n if (vert.is_tip) {\r\n return COLOR.Tip;\r\n }\r\n\r\n // pending\r\n if (vert.is_tx) {\r\n return COLOR.TransactionPending\r\n }\r\n return COLOR.BlockPending;\r\n }\r\n\r\n start = () => {\r\n this.draw = true;\r\n this.graph = Viva.Graph.graph();\r\n\r\n let graphics: any = Viva.Graph.View.webglGraphics();\r\n\r\n const layout = Viva.Graph.Layout.forceDirected(this.graph, {\r\n springLength: 10,\r\n springCoeff: 0.0001,\r\n stableThreshold: 0.15,\r\n gravity: -2,\r\n dragCoeff: 0.02,\r\n timeStep: 20,\r\n theta: 0.8,\r\n });\r\n\r\n graphics.node((node) => {\r\n if (!node.data) {\r\n return Viva.Graph.View.webglSquare(10, this.colorForVertexState(node.data));\r\n }\r\n return Viva.Graph.View.webglSquare(vertexSize, this.colorForVertexState(node.data));\r\n })\r\n graphics.link(() => Viva.Graph.View.webglLine(COLOR.Line));\r\n let ele = document.getElementById('visualizer');\r\n this.renderer = Viva.Graph.View.renderer(this.graph, {\r\n container: ele, graphics, layout,\r\n });\r\n\r\n let events = Viva.Graph.webglInputEvents(graphics, this.graph);\r\n\r\n events.mouseEnter((node) => {\r\n this.clearSelected(true);\r\n this.updateSelected(node.data);\r\n }).mouseLeave((node) => {\r\n this.clearSelected(false);\r\n });\r\n\r\n events.click((node) => {\r\n this.clearSelected(true);\r\n this.updateSelected(node.data, true);\r\n });\r\n\r\n this.graphics = graphics;\r\n this.renderer.run();\r\n\r\n // draw vertices by order\r\n this.verticesIncomingOrder.forEach((id) => {\r\n let v = this.vertices.get(id);\r\n if (v) {\r\n this.drawVertex(v);\r\n }\r\n })\r\n }\r\n\r\n stop = () => {\r\n this.draw = false;\r\n this.renderer.dispose();\r\n this.graph = null;\r\n this.paused = false;\r\n this.selected = null;\r\n }\r\n\r\n @action\r\n updateSelected = (vert: Vertex, viaClick?: boolean) => {\r\n if (!vert) return;\r\n\r\n this.selected = vert;\r\n this.selected_via_click = !!viaClick;\r\n\r\n // mutate links\r\n let nodeUI = this.graphics.getNodeUI(vert.id);\r\n this.selected_origin_color = nodeUI.color\r\n nodeUI.color = parseColor(COLOR.Selected);\r\n nodeUI.size = vertexSize * 1.5;\r\n\r\n let node = this.graph.getNode(vert.id);\r\n const seenForward = [];\r\n const seenBackwards = [];\r\n dfsIterator(this.graph, node, node => {\r\n }, true,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.SelectedFutureConeLine);\r\n },\r\n seenBackwards\r\n );\r\n dfsIterator(this.graph, node, node => {\r\n }, false,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.SelectedPastConeLine);\r\n },\r\n seenForward\r\n );\r\n }\r\n\r\n resetLinks = () => {\r\n this.graph.forEachLink(function (link) {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.Line);\r\n });\r\n }\r\n\r\n @action\r\n clearSelected = (force_clear?: boolean) => {\r\n if (!this.selected || (this.selected_via_click && !force_clear)) {\r\n return;\r\n }\r\n\r\n // clear link highlight\r\n let node = this.graph.getNode(this.selected.id);\r\n if (!node) {\r\n // clear links\r\n this.resetLinks();\r\n return;\r\n }\r\n\r\n let nodeUI = this.graphics.getNodeUI(this.selected.id);\r\n nodeUI.color = this.selected_origin_color;\r\n nodeUI.size = vertexSize;\r\n\r\n const seenForward = [];\r\n const seenBackwards = [];\r\n dfsIterator(this.graph, node, node => {\r\n }, true,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.Line);\r\n },\r\n seenBackwards\r\n );\r\n dfsIterator(this.graph, node, node => {\r\n }, false,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.Line);\r\n },\r\n seenForward\r\n );\r\n\r\n this.selected = null;\r\n this.selected_via_click = false;\r\n }\r\n\r\n}\r\n\r\nexport default VisualizerStore;\r\n\r\n// copied over and refactored from https://github.com/glumb/IOTAtangle\r\nfunction dfsIterator(graph, node, cb, up, cbLinks: any = false, seenNodes = []) {\r\n seenNodes.push(node);\r\n let pointer = 0;\r\n\r\n while (seenNodes.length > pointer) {\r\n const node = seenNodes[pointer++];\r\n\r\n if (cb(node)) return true;\r\n\r\n if (!node.links) {\r\n return\r\n }\r\n\r\n for (const link of node.links) {\r\n // parents\r\n if (!up && link.toId === node.id && !seenNodes.includes(graph.getNode(link.fromId))) {\r\n if (cbLinks) cbLinks(link);\r\n seenNodes.push(graph.getNode(link.fromId));\r\n continue;\r\n }\r\n\r\n // children\r\n if (up && link.fromId === node.id && !seenNodes.includes(graph.getNode(link.toId))) {\r\n if (cbLinks) cbLinks(link);\r\n seenNodes.push(graph.getNode(link.toId));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction parseColor(color): any {\r\n let parsedColor = 0x009ee8ff;\r\n\r\n if (typeof color === 'number') {\r\n return color;\r\n }\r\n\r\n if (typeof color === 'string' && color) {\r\n if (color.length === 4) {\r\n // #rgb, duplicate each letter except first #.\r\n color = color.replace(/([^#])/g, '$1$1');\r\n }\r\n if (color.length === 9) {\r\n // #rrggbbaa\r\n parsedColor = parseInt(color.substr(1), 16);\r\n } else if (color.length === 7) {\r\n // or #rrggbb.\r\n parsedColor = (parseInt(color.substr(1), 16) << 8) | 0xff;\r\n } else {\r\n throw 'Color expected in hex format with preceding \"#\". E.g. #00ff00. Got value: ' + color;\r\n }\r\n }\r\n\r\n return parsedColor;\r\n}\r\n","import {action, computed, observable} from 'mobx';\nimport {registerHandler, WSMsgType} from \"../misc/WS\";\nimport * as React from \"react\";\nimport {Col, ListGroupItem, OverlayTrigger, Popover, Row} from \"react-bootstrap\";\nimport Plus from \"../../assets/plus.svg\";\nimport Minus from \"../../assets/minus.svg\";\nimport {displayManaUnit} from \"../utils\";\n\nclass ManaBlk {\n nodeID: string;\n access: number;\n consensus: number;\n // in s?\n time: number;\n}\n\nexport class Node {\n shortNodeID: string;\n nodeID: string;\n mana: number;\n}\n\nclass NetworkManaBlk {\n manaType: string;\n totalMana: number;\n nodes: Array;\n}\n\nexport class AllowedPledgeIDsBlk {\n accessFilter: PledgeIDFilter;\n consensusFilter: PledgeIDFilter;\n}\n\nexport class PledgeIDFilter {\n enabled: boolean;\n allowedNodeIDs: Array;\n}\n\nexport class AllowedNodeStr {\n shortID: string;\n fullID: string;\n}\n\nclass PledgeBlk {\n manaType: string;\n nodeID: string;\n time: number;\n txID: string;\n amount: number;\n}\n\nclass RevokeBlk {\n manaType: string;\n nodeID: string;\n time: number;\n txID: string;\n amount: number;\n}\n\nclass ManaEvent {\n nodeID: string;\n time: Date;\n txID: string;\n\n constructor(nodeID: string, time: Date, txID: string) {\n this.nodeID = nodeID;\n this.time = time;\n this.txID = txID;\n }\n}\n\nclass PledgeEvent extends ManaEvent{\n amount: number;\n\n constructor(nodeID: string, time: Date, txID: string, amount: number) {\n super(nodeID, time, txID);\n this.amount = amount;\n }\n}\n\nclass RevokeEvent extends ManaEvent {\n amount: number;\n\n constructor(nodeID: string, time: Date, txID: string, amount: number) {\n super(nodeID, time, txID);\n this.amount = amount;\n }\n}\n\nconst emptyRow = (\n There are no nodes to view with the current search parameters.\n)\nconst emptyListItem = (\n There are no events to view with the current search parameters.)\n\n// every 10 seconds, a new value arrives, so this is roughly 17 mins\nconst maxStoredManaValues = 100;\n// number of previous pledge/revoke events we keep track of. (/2 of plugins/dashboard/maxManaEventsBufferSize)\nconst maxEventsStored = 100;\n\nexport class ManaStore {\n // mana values\n @observable manaValues: Array = [];\n // first is accessm second consensus\n @observable prevManaValues: Array = [0,0];\n // list of richest access mana nodes in network, sorted in descending order\n @observable accessNetworkRichest: Array = [];\n @observable totalAccessNetwork: number = 0.0;\n // list of richest active access mana nodes in the network, sorted in descending order\n @observable accessActiveRichest: Array = [];\n @observable totalAccessActive: number = 0.0;\n // list of richest consensus mana nodes in their network, sorted in descending order\n @observable consensusNetworkRichest: Array = [];\n @observable totalConsensusNetwork: number = 0.0;\n // list of richest active consensus mana nodes in their network, sorted in descending order\n @observable consensusActiveRichest: Array = [];\n @observable totalConsensusActive: number = 0.0;\n\n @observable public searchNode = \"\";\n @observable public searchTxID = \"\";\n\n @observable public allowedPledgeIDs: AllowedPledgeIDsBlk;\n\n // internal arrays to store mana events\n accessEvents: Array = [];\n consensusEvents: Array = [];\n\n // internal arrays to store initial mana events\n initAccessEvents: Array = [];\n initConsensusEvents: Array = [];\n\n // info on latest removed events\n @observable lastRemovedAccessEventTime: Date = null;\n @observable lastRemovedConsensusEventTime: Date = null;\n\n lastInitRemovedAccessEventTime: Date = null;\n lastInitRemovedConsensusEventTime: Date = null;\n\n // only update displayed events when initial arrays were modified\n eventsUpdated: boolean = false;\n\n // mana events displayed in frontend\n @observable displayedAccessEvents: Array = [];\n @observable displayedConsensusEvents: Array = [];\n\n ownID: string;\n\n nodeNotSyncedListItem = (Wait for node to be synced to display mana events.);\n\n constructor() {\n this.manaValues = [];\n\n registerHandler(WSMsgType.Mana, this.addNewManaValue);\n registerHandler(WSMsgType.ManaMapOverall, this.updateNetworkRichest);\n registerHandler(WSMsgType.ManaMapOnline, this.updateActiveRichest);\n // registerHandler(WSMsgType.ManaAllowedPledge, this.updateAllowedPledgeIDs);\n // registerHandler(WSMsgType.ManaInitPledge, this.addNewInitPledge);\n // registerHandler(WSMsgType.ManaInitRevoke, this.addNewInitRevoke);\n // registerHandler(WSMsgType.ManaInitDone, this.initDone);\n // registerHandler(WSMsgType.ManaPledge, this.addNewPledge);\n // registerHandler(WSMsgType.ManaRevoke, this.addNewRevoke);\n };\n\n @action\n updateNodeSearch(searchNode: string): void {\n this.searchNode = searchNode.trim();\n }\n\n @action\n updateTxSearch(searchTxID: string): void {\n this.searchTxID = searchTxID.trim();\n }\n\n @action\n addNewManaValue = (manaBlk: ManaBlk) => {\n this.ownID = this.ownID? this.ownID : manaBlk.nodeID;\n if (this.manaValues.length === maxStoredManaValues) {\n // shift if we already have enough values\n this.manaValues.shift();\n }\n let newManaData = [new Date(manaBlk.time*1000), manaBlk.access, manaBlk.consensus];\n if (this.manaValues.length > 0){\n this.prevManaValues = [this.manaValues[this.manaValues.length -1][1] , this.manaValues[this.manaValues.length -1][2]]\n }\n this.manaValues.push(newManaData);\n }\n\n @action\n updateNetworkRichest = (blk: NetworkManaBlk) => {\n switch (blk.manaType) {\n case \"Access\":\n this.totalAccessNetwork = blk.totalMana;\n this.accessNetworkRichest = blk.nodes;\n break;\n case \"Consensus\":\n this.totalConsensusNetwork = blk.totalMana;\n this.consensusNetworkRichest = blk.nodes;\n break;\n }\n }\n\n @action\n updateActiveRichest = (blk: NetworkManaBlk) => {\n switch (blk.manaType) {\n case \"Access\":\n this.totalAccessActive = blk.totalMana;\n this.accessActiveRichest = blk.nodes;\n break;\n case \"Consensus\":\n this.totalConsensusActive = blk.totalMana;\n this.consensusActiveRichest = blk.nodes;\n break;\n }\n };\n\n @action\n updateAllowedPledgeIDs = (blk: AllowedPledgeIDsBlk) => {\n this.allowedPledgeIDs = blk;\n }\n\n @action\n addNewInitPledge = (blk: PledgeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Access\":\n store = this.initAccessEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastInitRemovedAccessEventTime = lastRemoved.time;\n }\n break;\n case \"Consensus\":\n store = this.initConsensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastInitRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return\n }\n let newData = new PledgeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount,\n );\n store.push(newData);\n }\n\n @action\n addNewPledge = (blk: PledgeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Access\":\n store = this.accessEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastRemovedAccessEventTime = lastRemoved.time;\n }\n break;\n case \"Consensus\":\n store = this.consensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return\n }\n let newData = new PledgeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount,\n );\n store.push(newData);\n this.eventsUpdated = true;\n }\n\n @action\n addNewInitRevoke = (blk: RevokeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Consensus\":\n store = this.initConsensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastInitRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return;\n }\n let newData = new RevokeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount\n );\n store.push(newData);\n }\n\n @action\n addNewRevoke = (blk: RevokeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Consensus\":\n store = this.consensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return;\n }\n let newData = new RevokeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount\n );\n store.push(newData);\n this.eventsUpdated = true;\n }\n\n @action\n initDone = () => {\n this.accessEvents = this.initAccessEvents;\n this.lastRemovedAccessEventTime = this.lastInitRemovedAccessEventTime;\n this.consensusEvents= this.initConsensusEvents;\n this.lastRemovedConsensusEventTime = this.lastInitRemovedConsensusEventTime;\n\n this.displayedAccessEvents = [...this.accessEvents]\n this.displayedConsensusEvents = [...this.consensusEvents]\n\n setInterval(() => {\n if (this.eventsUpdated) {\n this.displayedAccessEvents = [...this.accessEvents];\n this.displayedConsensusEvents = [...this.consensusEvents];\n this.eventsUpdated = false;\n }\n }, 500)\n }\n\n nodeList = (leaderBoard: Array, manaSum: number) => {\n if (leaderBoard === null || leaderBoard == undefined) {\n return []\n }\n let feed = [];\n let pushToFeed = (node: Node, i: number) => {\n feed.push(\n \n {i + 1} \n {node.shortNodeID}\n {displayManaUnit(node.mana)}\n {((node.mana / manaSum)*100.0).toFixed(2)}%\n \n );\n };\n let callback = (node: Node, i: number) => {\n if (this.passesNodeFilter(node.shortNodeID)){\n pushToFeed(node, i);\n }\n };\n leaderBoard.forEach(callback);\n return feed\n }\n\n @computed\n get networkRichestFeedAccess() {\n let result = this.nodeList(this.accessNetworkRichest, this.totalAccessNetwork);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get networkRichestFeedConsensus() {\n let result = this.nodeList(this.consensusNetworkRichest, this.totalConsensusNetwork);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get activeRichestFeedAccess() {\n let result = this.nodeList(this.accessActiveRichest, this.totalAccessActive);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get activeRichestFeedConsensus() {\n let result = this.nodeList(this.consensusActiveRichest, this.totalConsensusActive);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get accessHistogramInput() {\n if (this.accessNetworkRichest === undefined || this.accessNetworkRichest === null) {\n return [[\"\", 0]]\n }\n let histInput = new Array()\n for (let i = 0; i < this.accessNetworkRichest.length; i++) {\n histInput.push(\n [this.accessNetworkRichest[i].shortNodeID, Math.log10(this.accessNetworkRichest[i].mana)]\n )\n }\n return histInput\n }\n\n @computed\n get consensusHistogramInput() {\n if (this.consensusNetworkRichest === undefined || this.consensusNetworkRichest === null) {\n return [[\"\", 0]]\n }\n let histInput = new Array()\n for (let i = 0; i < this.consensusNetworkRichest.length; i++) {\n histInput.push(\n [this.consensusNetworkRichest[i].shortNodeID, Math.log10(this.consensusNetworkRichest[i].mana)]\n )\n }\n return histInput\n }\n\n @computed\n get accessPercentile() {\n let per = 0.0;\n // find id\n if (this.accessNetworkRichest !== undefined && this.accessNetworkRichest !== null) {\n const isOwnID = (element) => element.shortNodeID === this.ownID;\n let index = this.accessNetworkRichest.findIndex(isOwnID);\n switch (index) {\n case -1:\n break;\n default:\n per = ((this.accessNetworkRichest.length - (index + 1)) / this.accessNetworkRichest.length) * 100;\n break;\n }\n }\n return per\n }\n\n @computed\n get consensusPercentile() {\n let per = 0.0;\n // find id\n if ( this.consensusNetworkRichest !== undefined && this.consensusNetworkRichest !== null) {\n const isOwnID = (element) => element.shortNodeID === this.ownID;\n let index = this.consensusNetworkRichest.findIndex(isOwnID);\n switch (index) {\n case -1:\n break;\n default:\n per = ((this.consensusNetworkRichest.length - (index +1)) / this.consensusNetworkRichest.length) * 100;\n }\n }\n return per\n }\n\n computeEventList = (evArr: Array) => {\n let result = [];\n result.push(\n \n \n \n \n \n NodeID\n \n \n Tx ID\n \n \n Time\n \n \n \n )\n if (evArr === undefined || evArr === null) {\n return result\n }\n let pushToEventFeed = (element: ManaEvent, index) => {\n if (element instanceof PledgeEvent) {\n let popover = (ev: PledgeEvent) => {\n return (\n \n Mana Pledged\n \n
Base Mana: +{displayManaUnit(ev.amount)}
\n
With Transaction: navigator.clipboard.writeText(ev.txID)}\n href={`/explorer/transaction/${ev.txID}`}\n >{ev.txID}
\n
To NodeID: {ev.nodeID}
\n
Time of Pledge: {ev.time.toLocaleTimeString()}
\n
\n
\n )\n }\n result.push(\n \n do something on click}>\n as={'button'}\n >\n \n \n \"Plus\"\n \n \n {element.nodeID}\n \n \n {element.txID.substring(0, 7) + '...'}\n \n \n {element.time.toLocaleString()}\n \n \n \n \n )\n } else if (element instanceof RevokeEvent){\n let popover = (ev: RevokeEvent) => {\n return (\n \n Mana Revoked\n \n
Base Mana 1: -{displayManaUnit(ev.amount)}
\n
With Transaction: navigator.clipboard.writeText(ev.txID)}\n href={`/explorer/transaction/${ev.txID}`}\n >{ev.txID}
\n
From NodeID: {ev.nodeID}
\n
Time of Revoke: {ev.time.toLocaleTimeString()}
\n
\n
\n )\n }\n // it's a revoke event then\n result.push(\n \n do something on click}>\n as={'button'}\n >\n \n \n \"Minus\"\n \n \n {element.nodeID}\n \n \n {element.txID.substring(0, 7) + '...'}\n \n \n {element.time.toLocaleString()}\n \n \n \n \n )\n }\n };\n // && this.passesTimeFilter(event.time) {\n let callback = (event: ManaEvent, i: number) => {\n if (this.passesNodeFilter(event.nodeID) && this.passesTxFilter(event.txID)){\n pushToEventFeed(event, i);\n }\n };\n // reverse traverse bc oldest event is the first\n evArr.reverse().forEach(callback)\n return result;\n }\n\n @computed\n get accessEventList() {\n let result = this.computeEventList(this.displayedAccessEvents);\n if (result.length === 1) {\n result.push(emptyListItem);\n }\n return result;\n }\n\n @computed\n get consensusEventList() {\n let result = this.computeEventList(this.displayedConsensusEvents);\n if (result.length === 1) {\n result.push(emptyListItem);\n }\n return result;\n }\n\n passesNodeFilter = (nodeID: string) : boolean => {\n if (this.searchNode.trim().length === 0) {\n // node filter is disabled, anything passes the filter\n return true;\n } else if (nodeID.toLowerCase().includes(this.searchNode.toLowerCase())){\n // node filter is enabled, nodeID contains search term\n return true;\n }\n // filter enabled but nodeID doesn't pass\n return false;\n }\n\n passesTxFilter = (txID: string) : boolean => {\n if (this.searchTxID.trim().length === 0) {\n // txID filter is disabled, anything passes the filter\n return true;\n } else if (txID.toLowerCase().includes(this.searchTxID.toLowerCase())){\n // txID filter is enabled, txID contains search term\n return true;\n }\n // filter enabled but txID doesn't pass\n return false;\n }\n}\n\nexport default ManaStore;\n","import {computed, action, observable} from \"mobx\";\nimport { registerHandler, WSMsgType } from \"../misc/WS\";\nimport * as React from \"react\";\nimport {Link} from 'react-router-dom';\n\nconst liveFeedSize = 100;\n\nexport class SlotInfo {\n index: number;\n id: string;\n}\n\nexport class SlotStore {\n @observable liveFeed: Array = [];\n\n constructor() {\n registerHandler(WSMsgType.SlotInfo, this.addLiveFeed);\n }\n\n @action addLiveFeed = async (info: SlotInfo) => {\n if (this.liveFeed.findIndex((t) => t.id == info.id) === -1) {\n if (this.liveFeed.length >= liveFeedSize) {\n this.liveFeed.shift();\n }\n this.liveFeed.push(info);\n }\n }\n\n @computed\n get slotLiveFeed() {\n let feed = [];\n for (let i = this.liveFeed.length - 1; i >= 0; i--) {\n let info = this.liveFeed[i];\n feed.push(\n \n \n {info.index}\n \n \n \n {info.id}\n \n \n \n );\n }\n return feed;\n }\n}","import {action, computed, observable} from 'mobx';\r\nimport {registerHandler, WSMsgType} from \"../misc/WS\";\r\nimport * as React from \"react\";\r\nimport {RouterStore,} from \"mobx-react-router\";\r\nimport {Link} from \"react-router-dom\";\r\nimport NodeStore from './NodeStore';\r\nimport {Table} from \"react-bootstrap\";\r\nimport {ConfirmationState, resolveConfirmationState} from \"../utils/confirmation_state\";\r\n\r\nexport class ConflictSet {\r\n conflictSetID: string;\r\n arrivalTime: number;\r\n resolved: boolean;\r\n timeToResolve: number;\r\n shown: boolean;\r\n}\r\n\r\nexport class Conflict {\r\n conflictID: string;\r\n conflictSetIDs: Array;\r\n confirmationState: number;\r\n issuingTime: number;\r\n issuerNodeID: string;\r\n}\r\n\r\n// const liveFeedSize = 10;\r\n\r\nexport class ConflictsStore {\r\n // live feed\r\n @observable conflictSets: Map;\r\n @observable conflicts: Map;\r\n \r\n routerStore: RouterStore;\r\n nodeStore: NodeStore;\r\n\r\n constructor(routerStore: RouterStore, nodeStore: NodeStore) {\r\n this.routerStore = routerStore;\r\n this.nodeStore = nodeStore;\r\n this.conflictSets = new Map;\r\n this.conflicts = new Map;\r\n registerHandler(WSMsgType.ConflictSet, this.updateConflictSets);\r\n registerHandler(WSMsgType.Conflict, this.updateConflicts);\r\n }\r\n\r\n @action\r\n updateConflictSets = (blk: ConflictSet) => {\r\n this.conflictSets.set(blk.conflictSetID, blk);\r\n };\r\n\r\n @action\r\n updateConflicts = (blk: Conflict) => {\r\n this.conflicts.set(blk.conflictID, blk);\r\n };\r\n \r\n @computed\r\n get conflictsLiveFeed() {\r\n // sort branches by time and ID to prevent \"jumping\"\r\n let conflictsArr = Array.from(this.conflictSets.values());\r\n conflictsArr.sort((x: ConflictSet, y: ConflictSet): number => {\r\n return y.arrivalTime - x.arrivalTime || x.conflictSetID.localeCompare(y.conflictSetID);\r\n }\r\n )\r\n\r\n let feed = [];\r\n for (let conflict of conflictsArr) {\r\n feed.push(\r\n conflict.shown = !conflict.shown} style={{cursor:\"pointer\"}}>\r\n \r\n \r\n {conflict.conflictSetID}\r\n \r\n \r\n \r\n {new Date(conflict.arrivalTime * 1000).toLocaleString()}\r\n \r\n \r\n {conflict.resolved ? 'Yes' : 'No'}\r\n \r\n \r\n {conflict.timeToResolve/1000000}\r\n \r\n \r\n );\r\n\r\n // only render and show branches if it has been clicked\r\n if (!conflict.shown) {\r\n continue\r\n }\r\n\r\n // sort branches by time and ID to prevent \"jumping\"\r\n let branchesArr = Array.from(this.conflicts.values());\r\n branchesArr.sort((x: Conflict, y: Conflict): number => {\r\n return x.issuingTime - y.issuingTime || x.conflictID.localeCompare(y.conflictID)\r\n }\r\n )\r\n\r\n let branches = [];\r\n for (let branch of branchesArr) {\r\n for(let conflictID of branch.conflictSetIDs){\r\n if (conflictID === conflict.conflictSetID) {\r\n branches.push(\r\n ConfirmationState.Accepted ? \"table-success\" : \"\"}>\r\n \r\n \r\n {branch.conflictID}\r\n \r\n \r\n {resolveConfirmationState(branch.confirmationState)}\r\n {new Date(branch.issuingTime * 1000).toLocaleString()}\r\n {branch.issuerNodeID}\r\n \r\n );\r\n }\r\n }\r\n }\r\n feed.push(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {branches}\r\n \r\n
BranchIDConfirmationStateIssuingTimeIssuer NodeID
\r\n \r\n \r\n );\r\n }\r\n\r\n return feed;\r\n }\r\n\r\n}\r\n\r\nexport default ConflictsStore;\r\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport {Provider} from 'mobx-react';\nimport {createBrowserHistory} from 'history';\nimport 'chartjs-plugin-streaming';\nimport {App} from './app/App';\nimport {RouterStore, syncHistoryWithStore} from 'mobx-react-router';\nimport {Router} from 'react-router-dom';\nimport NodeStore from \"./app/stores/NodeStore\";\nimport ExplorerStore from \"./app/stores/ExplorerStore\";\nimport FaucetStore from \"./app/stores/FaucetStore\";\nimport VisualizerStore from \"./app/stores/VisualizerStore\";\nimport ManaStore from \"./app/stores/ManaStore\";\nimport {SlotStore} from \"./app/stores/SlotStore\";\nimport ConflictsStore from \"./app/stores/ConflictsStore\";\n\n// prepare MobX stores\nconst routerStore = new RouterStore();\nconst nodeStore = new NodeStore();\nconst explorerStore = new ExplorerStore(routerStore);\nconst conflictsStore = new ConflictsStore(routerStore, nodeStore);\nconst faucetStore = new FaucetStore(routerStore);\nconst visualizerStore = new VisualizerStore(routerStore);\nconst manaStore = new ManaStore();\nconst slotStore = new SlotStore();\nconst stores = {\n \"routerStore\": routerStore,\n \"nodeStore\": nodeStore,\n \"explorerStore\": explorerStore,\n \"conflictsStore\": conflictsStore,\n \"faucetStore\": faucetStore,\n \"visualizerStore\": visualizerStore,\n \"manaStore\": manaStore,\n \"slotStore\": slotStore\n};\n\nconst browserHistory = createBrowserHistory();\nconst history = syncHistoryWithStore(browserHistory, routerStore);\n\n// render react DOM\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./assets/plus.svg","webpack:///./assets/minus.svg","webpack:///../node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/components/Uptime.tsx","webpack:///./app/components/Version.tsx","webpack:///./app/misc/Chart.ts","webpack:///./app/components/BPSChart.tsx","webpack:///./app/components/TipsChart.tsx","webpack:///./app/components/MemChart.tsx","webpack:///./app/components/ComponentCounterChart.tsx","webpack:///./app/components/TangleTime.tsx","webpack:///./app/components/Bootstrapped.tsx","webpack:///./app/components/Dashboard.tsx","webpack:///./app/components/ExplorerSearchbar.tsx","webpack:///./app/components/ExplorerLiveFeed.tsx","webpack:///./app/components/ExplorerTransactionSearchbar.tsx","webpack:///./app/components/ExplorerOutputSearchbar.tsx","webpack:///./app/components/ExplorerConflictSearchbar.tsx","webpack:///./app/components/Explorer.tsx","webpack:///./app/components/NavExplorerSearchbar.tsx","webpack:///./app/misc/WS.ts","webpack:///./app/misc/Payload.ts","webpack:///./app/utils/condition.tsx","webpack:///./app/utils/feature.tsx","webpack:///./app/utils/output.tsx","webpack:///./app/components/NativeToken.tsx","webpack:///./app/components/Condition.tsx","webpack:///./app/components/Feature.tsx","webpack:///./app/components/BasicOutput.tsx","webpack:///./app/components/AliasOutput.tsx","webpack:///./app/components/FoundryOutput.tsx","webpack:///./app/components/NFTOutput.tsx","webpack:///./app/stores/ExplorerStore.tsx","webpack:///./app/components/BasicPayload.tsx","webpack:///./app/utils/unlock_block.ts","webpack:///./app/components/Ed25519Signature.tsx","webpack:///./app/components/UnlockBlock.tsx","webpack:///./app/components/Transaction.tsx","webpack:///./app/components/TransactionPayload.tsx","webpack:///./app/utils/conflict.ts","webpack:///./app/components/FaucetPayload.tsx","webpack:///./app/components/TaggedDataPayload.tsx","webpack:///./app/components/ExplorerBlockQueryResult.tsx","webpack:///./app/utils/index.ts","webpack:///./app/components/ExplorerAddressResult.tsx","webpack:///./app/components/Explorer404.tsx","webpack:///./app/components/Neighbor.tsx","webpack:///./app/components/Neighbors.tsx","webpack:///./app/components/Visualizer.tsx","webpack:///./app/components/Tips.tsx","webpack:///./app/components/ExplorerTransaction.tsx","webpack:///./app/components/ExplorerTransactionMetadata.tsx","webpack:///./app/components/ExplorerTransactionAttachments.tsx","webpack:///./app/components/ExplorerTransactionQueryResult.tsx","webpack:///./app/utils/confirmation_state.ts","webpack:///./app/components/ExplorerOutputQueryResult.tsx","webpack:///./app/components/ExplorerConflictQueryResult.tsx","webpack:///./app/components/SlotLiveFeed.tsx","webpack:///./app/components/ExplorerSlotQueryResult.tsx","webpack:///./app/components/Root.tsx","webpack:///./app/App.tsx","webpack:///./app/stores/NodeStore.ts","webpack:///./app/stores/FaucetStore.ts","webpack:///./app/stores/VisualizerStore.ts","webpack:///./app/stores/ManaStore.tsx","webpack:///./app/stores/SlotStore.tsx","webpack:///./app/stores/ConflictsStore.tsx","webpack:///./main.tsx"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","this","props","nodeStore","uptime","status","version","defaultChartOptions","elements","line","tension","animation","duration","hover","animationDuration","responsiveAnimationDuration","lineChartOptions","assign","scales","xAxes","ticks","autoSkip","maxTicksLimit","fontSize","minRotation","maxRotation","gridLines","display","yAxes","callback","value","index","values","Math","abs","beginAtZero","tooltips","callbacks","label","tooltipItem","data","datasets","datasetIndex","Card","Body","Title","last_mps_metric","mps","height","mpsSeries","options","last_tips_metric","totaltips","tipsSeries","showXLabels","prettysize","mem","heap_alloc","num_gc","last_pause_gc","heap_objects","heap_sys","heap_idle","heap_released","memSeries","style","flexDirection","last_component_counter_metric","store","last_rate_setter_metric","estimate","componentSeries","tangleTime","synced","className","to","acceptedBlockID","confirmedBlockID","confirmedSlot","committedSlot","dateformat","Date","ATT","CTT","RATT","RCTT","bootstrapped","Container","Row","Col","ListGroup","variant","Item","ComponentCounterChart","updateSearch","explorerStore","target","executeSearch","key","searchAny","search","searching","InputGroup","FormControl","placeholder","onChange","onKeyUp","disabled","blksLiveFeed","xs","Table","txID","routerStore","push","outputID","conflictID","href","Form","inline","as","type","WSMsgType","handlers","registerHandler","blkTypeID","handler","unregisterHandler","PayloadType","ConditionType","FeatureType","OutputType","Output","getPayloadType","p","TaggedData","Transaction","Faucet","token","amount","unlock","address","pubKeyHash","unixTime","returnAddress","conditionToComponent","cond","Address","StateControllerAddress","GovernorAddress","StorageDepositReturn","Expiration","Timelock","feature","tag","featureToComponent","feat","Sender","Issuer","Metadata","Tag","hex","output","nativeTokens","n","_","unlockConditions","c","features","f","transactionID","outputIndex","wordBreak","aliasId","stateIndex","stateMetadata","foundryCounter","serialNumber","tokenScheme","nftId","outputToComponent","Basic","Alias","Foundry","NFT","GenesisBlockID","SlotInfo","QueryError","latest_blocks","blk","addr","tx","txMetadata","txAttachments","outputMetadata","outputConsumers","pendingMana","conflict","conflictChildren","conflictConflicts","conflictVoters","tips","slotInfo","query_loading","query_err","search_result","updateSearching","res","fetch","result","json","updateSearchResult","err","updateQueryError","resetSearch","block","searchBlock","updateQueryLoading","fetchJson","updateBlock","searchAddress","updateAddress","getSlotDetails","getSlotInfo","getTransaction","i","inputs","length","inputID","referencedOutputID","referencedOutputRes","genOutput","getTransactionAttachments","attachments","getTransactionMetadata","getOutput","getOutputMetadata","getOutputConsumers","getPendingMana","getConflict","getConflictChildren","getConflictConflicts","getConflictVoters","getTips","reset","conflictIDs","addedConflictIDs","subtractedConflictIDs","strongChildren","weakChildren","shallowLikeChildren","strongParents","weakParents","shallowLikedParents","payloadType","payload","loading","addLiveFeedBlock","findIndex","t","shift","Block","feed","payload_type","list","blkId","method","route","requestData","body","JSON","stringify","v","Uint8Array","Array","from","undefined","response","headers","ok","NotFound","BadRequest","content_title","content","SignatureType","signature","publicKey","signatureType","Ed25519","Badge","sigType","BLS","renderSignatureComponent","maxHeight","overflow","width","marginTop","marginBottom","paddingBottom","borderBottom","networkId","creationSlot","input","Provider","color","size","outputs","unlocks","txId","resolveBase58ConflictID","base58Conflict","MasterConflictInBase58","UndefinedConflictInBase58","LazyBookedConflictsConflictInBase58","InvalidConflictInBase58","accessManaPledgeID","consensusManaPledgeID","nonce","match","params","prevProps","prevState","objectivelyInvalid","marginRight","issuanceTimestamp","solidificationTimestamp","sequenceNumber","solid","scheduled","booked","orphaned","subjectivelyInvalid","acceptance","acceptanceTime","confirmation","confirmationTime","confirmationBySlot","confirmationBySlotTime","commitmentID","commitment","prevID","rootsID","cumulativeWeight","latestConfirmedSlot","rank","sequenceID","pastMarkerGap","isPastMarker","pastMarkers","issuerID","renderPayload","Spinner","displayManaUnit","mana","roundedMana","round","toString","toFixed","spent","unspent","available_balances","explorerOutputs","forEach","metadata","consumerCount","timestampCompareFn","a","b","txTimestamp","localeCompare","sort","Alert","ListGroupItem","textAlign","super","state","enabled","Button","getVariant","onClick","setState","base58","outputTypeToName","toLocaleString","timestamp","confirmedConsumer","outputType","neighborMetrics","neighbor_metrics","get","identity","last","current","connection_origin","pill","packets_written","packets_read","currentNetIO","rx","netIOSeries","neighborsEle","k","updateVerticesLimit","visualizerStore","pauseResumeVisualizer","pauseResume","searchAndHighlight","toggleBackgroundDataCollection","collecting","unregisterHandlers","registerHandlers","start","stop","vertices","finalized_count","selected","verticesLimit","tips_count","paused","Prepend","Text","OverlayTrigger","trigger","placement","overlay","Popover","Content","span","offset","background","substr","parent","zIndex","position","top","left","tipsList","bordered","confirmationState","blockIDs","ConfirmationState","resolveConfirmationState","Undefined","Rejected","Pending","Accepted","Confirmed","confirmationStateTime","consumers","val","valid","parents","childConflicts","conflicts","j","voters","s","slotLiveFeed","slotStore","blocks","transactions","createdOutputs","spentOutputs","connect","Navbar","expand","bg","Brand","Nav","Link","Collapse","websocketConnected","exact","path","component","children","renderDevTool","App","history","BPSMetric","Status","MemoryMetrics","scheduler","SchedulerMetric","TipsMetric","RateSetterMetric","collected","network_io","metric","ts","now","maxMetricsDataPoints","netIO","secondLast","chartSeriesOpts","series","labels","ComponentCounterMetric","fill","lineTension","backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","pointHoverRadius","name","bgColor","collected_mps_metrics","collected_rate_setter_metrics","collected_scheduler_metrics","collected_mem_metrics","collected_tips_metrics","collected_component_counter_metrics","updateStatus","BPSMetrics","addBPSMetric","updateLastBPSMetric","NeighborStats","updateNeighborMetrics","TipsMetrics","updateLastTipsMetric","ComponentCounterMetrics","updateLastComponentMetric","RateSetter","updateLastRateSetterMetric","updateCollecting","updateWebSocketConnected","connected","updated","neighbMetrics","addMetric","set","includes","delete","mpsMetric","tipsMetric","componentCounterMetric","setTimeout","onOpen","onClose","onError","loc","window","location","uri","protocol","host","ws","WebSocket","onopen","onclose","onerror","onmessage","parse","connectWebSocket","reconnect","stored","solidified","solidifier","booker","bufferSize","currentBufferSize","deficit","day","hour","minute","seconds","floor","str","heapSys","heapAlloc","heapIdle","heapReleased","FaucetStore","send_addr","send_access_mana_node_id","send_consensus_mana_node_id","sending","sendResult","query_error","sendReq","updateSending","updateSendResult","updateSend","updateSendAccessManaNodeID","access_mana","updateSendConsensusManaNodeID","consensus_mana","Vertex","COLOR","verticesIncomingOrder","draw","selected_via_click","selected_origin_color","fetchHistory","addVertex","console","log","trim","clearSelected","iter","found","indexOf","updateSelected","renderer","resume","pause","num","updateTxStatus","vert","existing","is_tx_accepted","drawVertex","is_blk_confirmed","checkLimit","addTipInfo","tipInfo","is_tip","deleteId","graph","removeNode","node","getNode","graphics","getNodeUI","parseColor","colorForVertexState","addNode","linkParents","links","some","link","fromId","addLink","is_tx","Graph","View","webglGraphics","layout","Layout","forceDirected","springLength","springCoeff","stableThreshold","gravity","dragCoeff","timeStep","theta","webglSquare","webglLine","ele","document","getElementById","container","events","webglInputEvents","mouseEnter","mouseLeave","click","run","dispose","viaClick","nodeUI","vertexSize","dfsIterator","getLinkUI","resetLinks","forEachLink","force_clear","TipInfo","TXAccepted","cb","up","cbLinks","seenNodes","pointer","toId","parsedColor","replace","parseInt","ManaEvent","nodeID","time","PledgeEvent","RevokeEvent","emptyRow","colSpan","emptyListItem","manaValues","prevManaValues","accessNetworkRichest","totalAccessNetwork","accessActiveRichest","totalAccessActive","consensusNetworkRichest","totalConsensusNetwork","consensusActiveRichest","totalConsensusActive","searchNode","searchTxID","accessEvents","consensusEvents","initAccessEvents","initConsensusEvents","lastRemovedAccessEventTime","lastRemovedConsensusEventTime","lastInitRemovedAccessEventTime","lastInitRemovedConsensusEventTime","eventsUpdated","displayedAccessEvents","displayedConsensusEvents","nodeNotSyncedListItem","addNewManaValue","manaBlk","ownID","newManaData","access","consensus","updateNetworkRichest","manaType","totalMana","nodes","updateActiveRichest","updateAllowedPledgeIDs","allowedPledgeIDs","addNewInitPledge","lastRemoved","newData","addNewPledge","addNewInitRevoke","addNewRevoke","initDone","setInterval","nodeList","leaderBoard","manaSum","pushToFeed","shortNodeID","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","passesNodeFilter","computeEventList","evArr","reverse","event","passesTxFilter","element","popover","ev","navigator","clipboard","writeText","toLocaleTimeString","src","alt","substring","pushToEventFeed","toLowerCase","Mana","ManaMapOverall","ManaMapOnline","histInput","log10","per","isOwnID","liveFeed","addLiveFeed","info","updateConflictSets","conflictSets","conflictSetID","updateConflicts","Map","ConflictSet","Conflict","conflictsArr","x","y","arrivalTime","shown","cursor","resolved","timeToResolve","branchesArr","issuingTime","branches","branch","conflictSetIDs","issuerNodeID","stores","browserHistory"],"mappings":"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","file":"app.991aa07a823b10139416.js","sourcesContent":["module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2N3B4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NyA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48cGF0aCBkPSJNIDMyLjM4IDE4IEwgMzIuMzggNDgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NnB4IiBoZWlnaHQ9IjY2cHgiIHZpZXdCb3g9Ii0wLjUgLTAuNSA2NiA2NiI+PGRlZnMvPjxnPjxlbGxpcHNlIGN4PSIzMi41IiBjeT0iMzMiIHJ4PSIzMS41IiByeT0iMzEuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE3IDMyLjg4IEwgNDcgMzIuODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiLz48L2c+PC9zdmc+\"","var map = {\n\t\"./af\": 107,\n\t\"./af.js\": 107,\n\t\"./ar\": 108,\n\t\"./ar-dz\": 109,\n\t\"./ar-dz.js\": 109,\n\t\"./ar-kw\": 110,\n\t\"./ar-kw.js\": 110,\n\t\"./ar-ly\": 111,\n\t\"./ar-ly.js\": 111,\n\t\"./ar-ma\": 112,\n\t\"./ar-ma.js\": 112,\n\t\"./ar-sa\": 113,\n\t\"./ar-sa.js\": 113,\n\t\"./ar-tn\": 114,\n\t\"./ar-tn.js\": 114,\n\t\"./ar.js\": 108,\n\t\"./az\": 115,\n\t\"./az.js\": 115,\n\t\"./be\": 116,\n\t\"./be.js\": 116,\n\t\"./bg\": 117,\n\t\"./bg.js\": 117,\n\t\"./bm\": 118,\n\t\"./bm.js\": 118,\n\t\"./bn\": 119,\n\t\"./bn-bd\": 120,\n\t\"./bn-bd.js\": 120,\n\t\"./bn.js\": 119,\n\t\"./bo\": 121,\n\t\"./bo.js\": 121,\n\t\"./br\": 122,\n\t\"./br.js\": 122,\n\t\"./bs\": 123,\n\t\"./bs.js\": 123,\n\t\"./ca\": 124,\n\t\"./ca.js\": 124,\n\t\"./cs\": 125,\n\t\"./cs.js\": 125,\n\t\"./cv\": 126,\n\t\"./cv.js\": 126,\n\t\"./cy\": 127,\n\t\"./cy.js\": 127,\n\t\"./da\": 128,\n\t\"./da.js\": 128,\n\t\"./de\": 129,\n\t\"./de-at\": 130,\n\t\"./de-at.js\": 130,\n\t\"./de-ch\": 131,\n\t\"./de-ch.js\": 131,\n\t\"./de.js\": 129,\n\t\"./dv\": 132,\n\t\"./dv.js\": 132,\n\t\"./el\": 133,\n\t\"./el.js\": 133,\n\t\"./en-au\": 134,\n\t\"./en-au.js\": 134,\n\t\"./en-ca\": 135,\n\t\"./en-ca.js\": 135,\n\t\"./en-gb\": 136,\n\t\"./en-gb.js\": 136,\n\t\"./en-ie\": 137,\n\t\"./en-ie.js\": 137,\n\t\"./en-il\": 138,\n\t\"./en-il.js\": 138,\n\t\"./en-in\": 139,\n\t\"./en-in.js\": 139,\n\t\"./en-nz\": 140,\n\t\"./en-nz.js\": 140,\n\t\"./en-sg\": 141,\n\t\"./en-sg.js\": 141,\n\t\"./eo\": 142,\n\t\"./eo.js\": 142,\n\t\"./es\": 143,\n\t\"./es-do\": 144,\n\t\"./es-do.js\": 144,\n\t\"./es-mx\": 145,\n\t\"./es-mx.js\": 145,\n\t\"./es-us\": 146,\n\t\"./es-us.js\": 146,\n\t\"./es.js\": 143,\n\t\"./et\": 147,\n\t\"./et.js\": 147,\n\t\"./eu\": 148,\n\t\"./eu.js\": 148,\n\t\"./fa\": 149,\n\t\"./fa.js\": 149,\n\t\"./fi\": 150,\n\t\"./fi.js\": 150,\n\t\"./fil\": 151,\n\t\"./fil.js\": 151,\n\t\"./fo\": 152,\n\t\"./fo.js\": 152,\n\t\"./fr\": 153,\n\t\"./fr-ca\": 154,\n\t\"./fr-ca.js\": 154,\n\t\"./fr-ch\": 155,\n\t\"./fr-ch.js\": 155,\n\t\"./fr.js\": 153,\n\t\"./fy\": 156,\n\t\"./fy.js\": 156,\n\t\"./ga\": 157,\n\t\"./ga.js\": 157,\n\t\"./gd\": 158,\n\t\"./gd.js\": 158,\n\t\"./gl\": 159,\n\t\"./gl.js\": 159,\n\t\"./gom-deva\": 160,\n\t\"./gom-deva.js\": 160,\n\t\"./gom-latn\": 161,\n\t\"./gom-latn.js\": 161,\n\t\"./gu\": 162,\n\t\"./gu.js\": 162,\n\t\"./he\": 163,\n\t\"./he.js\": 163,\n\t\"./hi\": 164,\n\t\"./hi.js\": 164,\n\t\"./hr\": 165,\n\t\"./hr.js\": 165,\n\t\"./hu\": 166,\n\t\"./hu.js\": 166,\n\t\"./hy-am\": 167,\n\t\"./hy-am.js\": 167,\n\t\"./id\": 168,\n\t\"./id.js\": 168,\n\t\"./is\": 169,\n\t\"./is.js\": 169,\n\t\"./it\": 170,\n\t\"./it-ch\": 171,\n\t\"./it-ch.js\": 171,\n\t\"./it.js\": 170,\n\t\"./ja\": 172,\n\t\"./ja.js\": 172,\n\t\"./jv\": 173,\n\t\"./jv.js\": 173,\n\t\"./ka\": 174,\n\t\"./ka.js\": 174,\n\t\"./kk\": 175,\n\t\"./kk.js\": 175,\n\t\"./km\": 176,\n\t\"./km.js\": 176,\n\t\"./kn\": 177,\n\t\"./kn.js\": 177,\n\t\"./ko\": 178,\n\t\"./ko.js\": 178,\n\t\"./ku\": 179,\n\t\"./ku.js\": 179,\n\t\"./ky\": 180,\n\t\"./ky.js\": 180,\n\t\"./lb\": 181,\n\t\"./lb.js\": 181,\n\t\"./lo\": 182,\n\t\"./lo.js\": 182,\n\t\"./lt\": 183,\n\t\"./lt.js\": 183,\n\t\"./lv\": 184,\n\t\"./lv.js\": 184,\n\t\"./me\": 185,\n\t\"./me.js\": 185,\n\t\"./mi\": 186,\n\t\"./mi.js\": 186,\n\t\"./mk\": 187,\n\t\"./mk.js\": 187,\n\t\"./ml\": 188,\n\t\"./ml.js\": 188,\n\t\"./mn\": 189,\n\t\"./mn.js\": 189,\n\t\"./mr\": 190,\n\t\"./mr.js\": 190,\n\t\"./ms\": 191,\n\t\"./ms-my\": 192,\n\t\"./ms-my.js\": 192,\n\t\"./ms.js\": 191,\n\t\"./mt\": 193,\n\t\"./mt.js\": 193,\n\t\"./my\": 194,\n\t\"./my.js\": 194,\n\t\"./nb\": 195,\n\t\"./nb.js\": 195,\n\t\"./ne\": 196,\n\t\"./ne.js\": 196,\n\t\"./nl\": 197,\n\t\"./nl-be\": 198,\n\t\"./nl-be.js\": 198,\n\t\"./nl.js\": 197,\n\t\"./nn\": 199,\n\t\"./nn.js\": 199,\n\t\"./oc-lnc\": 200,\n\t\"./oc-lnc.js\": 200,\n\t\"./pa-in\": 201,\n\t\"./pa-in.js\": 201,\n\t\"./pl\": 202,\n\t\"./pl.js\": 202,\n\t\"./pt\": 203,\n\t\"./pt-br\": 204,\n\t\"./pt-br.js\": 204,\n\t\"./pt.js\": 203,\n\t\"./ro\": 205,\n\t\"./ro.js\": 205,\n\t\"./ru\": 206,\n\t\"./ru.js\": 206,\n\t\"./sd\": 207,\n\t\"./sd.js\": 207,\n\t\"./se\": 208,\n\t\"./se.js\": 208,\n\t\"./si\": 209,\n\t\"./si.js\": 209,\n\t\"./sk\": 210,\n\t\"./sk.js\": 210,\n\t\"./sl\": 211,\n\t\"./sl.js\": 211,\n\t\"./sq\": 212,\n\t\"./sq.js\": 212,\n\t\"./sr\": 213,\n\t\"./sr-cyrl\": 214,\n\t\"./sr-cyrl.js\": 214,\n\t\"./sr.js\": 213,\n\t\"./ss\": 215,\n\t\"./ss.js\": 215,\n\t\"./sv\": 216,\n\t\"./sv.js\": 216,\n\t\"./sw\": 217,\n\t\"./sw.js\": 217,\n\t\"./ta\": 218,\n\t\"./ta.js\": 218,\n\t\"./te\": 219,\n\t\"./te.js\": 219,\n\t\"./tet\": 220,\n\t\"./tet.js\": 220,\n\t\"./tg\": 221,\n\t\"./tg.js\": 221,\n\t\"./th\": 222,\n\t\"./th.js\": 222,\n\t\"./tk\": 223,\n\t\"./tk.js\": 223,\n\t\"./tl-ph\": 224,\n\t\"./tl-ph.js\": 224,\n\t\"./tlh\": 225,\n\t\"./tlh.js\": 225,\n\t\"./tr\": 226,\n\t\"./tr.js\": 226,\n\t\"./tzl\": 227,\n\t\"./tzl.js\": 227,\n\t\"./tzm\": 228,\n\t\"./tzm-latn\": 229,\n\t\"./tzm-latn.js\": 229,\n\t\"./tzm.js\": 228,\n\t\"./ug-cn\": 230,\n\t\"./ug-cn.js\": 230,\n\t\"./uk\": 231,\n\t\"./uk.js\": 231,\n\t\"./ur\": 232,\n\t\"./ur.js\": 232,\n\t\"./uz\": 233,\n\t\"./uz-latn\": 234,\n\t\"./uz-latn.js\": 234,\n\t\"./uz.js\": 233,\n\t\"./vi\": 235,\n\t\"./vi.js\": 235,\n\t\"./x-pseudo\": 236,\n\t\"./x-pseudo.js\": 236,\n\t\"./yo\": 237,\n\t\"./yo.js\": 237,\n\t\"./zh-cn\": 238,\n\t\"./zh-cn.js\": 238,\n\t\"./zh-hk\": 239,\n\t\"./zh-hk.js\": 239,\n\t\"./zh-mo\": 240,\n\t\"./zh-mo.js\": 240,\n\t\"./zh-tw\": 241,\n\t\"./zh-tw.js\": 241\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 298;","import * as React from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class Uptime extends React.Component {\r\n render() {\r\n return (\r\n \r\n Uptime: {this.props.nodeStore.uptime}\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class Version extends React.Component {\r\n render() {\r\n return (\r\n \r\n Version: {this.props.nodeStore.status.version}\r\n \r\n );\r\n }\r\n}\r\n","\r\n// includes chart options to increase performance, by disabling chart animations\r\nexport var defaultChartOptions = {\r\n elements: {\r\n line: {\r\n tension: 0\r\n }\r\n },\r\n animation: {\r\n duration: 0\r\n },\r\n hover: {\r\n animationDuration: 0\r\n },\r\n responsiveAnimationDuration: 0\r\n};","import * as React from 'react';\r\nimport Card from \"react-bootstrap/Card\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Line} from \"react-chartjs-2\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return Math.abs(value);\r\n },\r\n fontSize: 10,\r\n maxTicksLimit: 4,\r\n beginAtZero: true,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${Math.abs(tooltipItem.value)}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class BPSChart extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n Blocks Per Second\r\n \r\n BPS: {this.props.nodeStore.last_mps_metric.mps}.\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Card from \"react-bootstrap/Card\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Line} from \"react-chartjs-2\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return Math.abs(value);\r\n },\r\n fontSize: 10,\r\n maxTicksLimit: 4,\r\n beginAtZero: true,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${Math.abs(tooltipItem.value)}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class TipsChart extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n Current Tips\r\n \r\n Tips: {this.props.nodeStore.last_tips_metric.totaltips}.\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Card from \"react-bootstrap/Card\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Line} from \"react-chartjs-2\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\nimport * as prettysize from 'prettysize';\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n showXLabels: 10,\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return prettysize(Math.abs(value));\r\n },\r\n maxTicksLimit: 3,\r\n fontSize: 10,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${prettysize(Math.abs(tooltipItem.value))}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport default class MemChart extends React.Component {\r\n render() {\r\n let mem = this.props.nodeStore.status.mem;\r\n return (\r\n \r\n \r\n \r\n Memory Usage{' '}\r\n {prettysize(mem.heap_alloc)}\r\n \r\n \r\n GC Cycles: {mem.num_gc} (Last Cycle: {mem.last_pause_gc / 1000000}ms) - {' '}\r\n Heap: {' '}\r\n [Obj: {mem.heap_objects}, In-Use: {prettysize(mem.heap_sys-mem.heap_idle)},\r\n Retained: {prettysize(mem.heap_idle - mem.heap_released)}]\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport Card from \"react-bootstrap/Card\";\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport {Line} from \"react-chartjs-2\";\nimport {defaultChartOptions} from \"../misc/Chart\";\n\ninterface Props {\n nodeStore?: NodeStore;\n}\n\nconst lineChartOptions = Object.assign({\n scales: {\n xAxes: [{\n ticks: {\n autoSkip: true,\n maxTicksLimit: 8,\n fontSize: 8,\n minRotation: 0,\n maxRotation: 0,\n },\n gridLines: {\n display: false\n }\n }],\n yAxes: [{\n gridLines: {\n display: false\n },\n ticks: {\n callback: function (value, index, values) {\n return Math.abs(value);\n },\n fontSize: 10,\n maxTicksLimit: 4,\n beginAtZero: true,\n },\n }],\n },\n tooltips: {\n callbacks: {\n label: function (tooltipItem, data) {\n let label = data.datasets[tooltipItem.datasetIndex].label;\n return `${label} ${Math.abs(tooltipItem.value)}`;\n }\n }\n }\n}, defaultChartOptions);\n\n@inject(\"nodeStore\")\n@observer\nexport default class StoreChart extends React.Component {\n render() {\n const infoStyle = {\n display: \"flex\",\n flexDirection: \"column\"\n };\n return (\n \n \n Component Counter Blocks Per Second\n
\n \n BPS: {this.props.nodeStore.last_component_counter_metric.store}.\n \n \n Rate Setter - Estimate: {this.props.nodeStore.last_rate_setter_metric.estimate}\n \n
\n\n \n
\n
\n );\n }\n}\n","import * as React from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport Card from \"react-bootstrap/Card\";\nimport {Link} from 'react-router-dom';\nimport {inject, observer} from \"mobx-react\";\nimport * as dateformat from 'dateformat';\n\ninterface Props {\n nodeStore?: NodeStore;\n}\n\n@inject(\"nodeStore\")\n@observer\nexport default class TangleTime extends React.Component {\n render() {\n return (\n \n \n TangleTime\n Synced: {this.props.nodeStore.status.tangleTime.synced ? \"Yes\" : \"No\"}\n \n
\n
\n
\n
Last Accepted Block: \n {this.props.nodeStore.status.tangleTime.acceptedBlockID}\n
\n
\n
\n
Last Confirmed Block: \n {this.props.nodeStore.status.tangleTime.confirmedBlockID}\n
\n
\n
\n
Last Confirmed Slot:\n {this.props.nodeStore.status.tangleTime.confirmedSlot}\n
\n
\n
\n
Last Committed Slot:\n {this.props.nodeStore.status.tangleTime.committedSlot}\n
\n
\n
\n
\n
\n Acceptance Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.ATT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n Confirmation Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.CTT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n
\n
\n Relative Acceptance Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.RATT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n Relative Confirmation Time:\n
\n
\n {dateformat(new Date(this.props.nodeStore.status.tangleTime.RCTT / 1000000), \"dd.mm.yyyy HH:MM:ss\")}\n
\n
\n
\n
\n
\n
\n )\n ;\n }\n}\n","import * as React from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\n\ninterface Props {\n nodeStore?: NodeStore;\n}\n\n@inject(\"nodeStore\")\n@observer\nexport default class Bootstrapped extends React.Component {\n render() {\n return (\n \n Bootstrapped: {this.props.nodeStore.status.tangleTime.bootstrapped ? \"Yes\" : \"No\"}\n \n );\n }\n}\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Uptime from \"./Uptime\";\r\nimport Version from \"./Version\";\r\nimport BPSChart from \"./BPSChart\";\r\nimport TipsChart from \"./TipsChart\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport MemChart from \"./MemChart\";\r\nimport ComponentCounterChart from \"./ComponentCounterChart\";\r\nimport TangleTime from \"./TangleTime\";\r\nimport Bootstrapped from \"./Bootstrapped\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Dashboard extends React.Component {\r\n render() {\r\n return (\r\n \r\n

Dashboard

\r\n \r\n \r\n \r\n \r\n Node: {this.props.nodeStore.status.id}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport {KeyboardEvent} from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport InputGroup from \"react-bootstrap/InputGroup\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerSearchbar extends React.Component {\r\n\r\n updateSearch = (e) => {\r\n this.props.explorerStore.updateSearch(e.target.value);\r\n };\r\n\r\n executeSearch = (e: KeyboardEvent) => {\r\n if (e.key !== 'Enter') return;\r\n this.props.explorerStore.searchAny();\r\n };\r\n\r\n render() {\r\n let {search, searching} = this.props.explorerStore;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\nimport Table from \"react-bootstrap/Table\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerLiveFeed extends React.Component {\r\n render() {\r\n let {blksLiveFeed} = this.props.explorerStore;\r\n return (\r\n \r\n \r\n \r\n \r\n Live Feed\r\n \r\n \r\n
Blocks
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {blksLiveFeed}\r\n \r\n
IdPayload Type
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport {KeyboardEvent} from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransactionSearchbar extends React.Component {\n txID: string;\n\n updateSearch = (e) => {\n this.txID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/transaction/${this.txID}`);\n };\n\n render() {\n let {searching} = this.props.explorerStore;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\nimport {KeyboardEvent} from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerOutputSearchbar extends React.Component {\n outputID: string;\n\n updateSearch = (e) => {\n this.outputID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/output/${this.outputID}`);\n };\n\n render() {\n let {searching} = this.props.explorerStore;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\nimport {KeyboardEvent} from 'react';\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerConflictSearchbar extends React.Component {\n conflictID: string;\n\n updateSearch = (e) => {\n this.conflictID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/conflict/${this.conflictID}`);\n };\n\n render() {\n let {searching} = this.props.explorerStore;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {ExplorerSearchbar} from \"./ExplorerSearchbar\";\r\nimport {ExplorerLiveFeed} from \"./ExplorerLiveFeed\";\r\nimport {ExplorerTransactionSearchbar} from \"./ExplorerTransactionSearchbar\";\r\nimport {ExplorerOutputSearchbar} from \"./ExplorerOutputSearchbar\";\r\nimport {ExplorerConflictSearchbar} from \"./ExplorerConflictSearchbar\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Explorer extends React.Component {\r\n render() {\r\n return (\r\n \r\n

Tangle Explorer

\r\n \r\n \r\n

\r\n Search for addresses, blocks, transactions, outputs and conflicts.\r\n

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n This explorer implementation is heavily inspired by thetangle.org.\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport {KeyboardEvent} from 'react';\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport Form from \"react-bootstrap/Form\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class NavExplorerSearchbar extends React.Component {\r\n\r\n updateSearch = (e) => {\r\n this.props.explorerStore.updateSearch(e.target.value);\r\n };\r\n\r\n executeSearch = (e: KeyboardEvent) => {\r\n if (e.key !== 'Enter') return;\r\n this.props.explorerStore.searchAny();\r\n };\r\n\r\n render() {\r\n let {search, searching} = this.props.explorerStore;\r\n return (\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","export enum WSMsgType {\r\n Status,\r\n BPSMetrics,\r\n Block,\r\n NeighborStats,\r\n ComponentCounterMetrics,\r\n TipsMetrics,\r\n Vertex,\r\n TXAccepted,\r\n TipInfo,\r\n Mana,\r\n ManaMapOverall,\r\n ManaMapOnline,\r\n BlkManaDashboardAddress,\r\n RateSetter,\r\n ConflictSet,\r\n Conflict,\r\n SlotInfo,\r\n}\r\n\r\nexport interface WSBlock {\r\n type: number;\r\n data: any;\r\n}\r\n\r\ntype DataHandler = (data: any) => void;\r\n\r\nlet handlers = {};\r\n\r\nexport function registerHandler(blkTypeID: number, handler: DataHandler) {\r\n handlers[blkTypeID] = handler;\r\n}\r\n\r\nexport function unregisterHandler(blkTypeID: number) {\r\n delete handlers[blkTypeID];\r\n}\r\n\r\nexport function connectWebSocket(path: string, onOpen, onClose, onError) {\r\n let loc = window.location;\r\n let uri = 'ws:';\r\n\r\n if (loc.protocol === 'https:') {\r\n uri = 'wss:';\r\n }\r\n uri += '//' + loc.host + path;\r\n\r\n let ws = new WebSocket(uri);\r\n\r\n ws.onopen = onOpen;\r\n ws.onclose = onClose;\r\n ws.onerror = onError;\r\n\r\n ws.onmessage = (e) => {\r\n let blk: WSBlock = JSON.parse(e.data);\r\n let handler = handlers[blk.type];\r\n if (!handler) {\r\n return;\r\n }\r\n handler(blk.data);\r\n };\r\n}\r\n","export enum PayloadType {\r\n TaggedData = 0,\r\n Transaction = 1,\r\n Faucet = 3,\r\n}\r\n\r\n// BasicPayload\r\nexport class BasicPayload {\r\n content_title: string;\r\n content: string;\r\n}\r\n\r\nexport class TaggedDataPayload {\r\n tag: string;\r\n data: string;\r\n}\r\n\r\nexport class FaucetPayload {\r\n address: string;\r\n accessManaPledgeID: string;\r\n consensusManaPledgeID: string;\r\n nonce: number;\r\n}\r\n\r\nexport class TransactionPayload {\r\n networkId: number;\r\n creationSlot: number;\r\n inputs: Array;\r\n outputs: Array;\r\n payload: any;\r\n unlocks: Array;\r\n}\r\n\r\nexport class Input {\r\n type: string;\r\n referencedOutputID: OutputID;\r\n output: Output;\r\n}\r\n\r\nexport class Output {\r\n outputID: OutputID;\r\n type: number;\r\n output: \r\n BasicOutput|\r\n AliasOutput|\r\n FoundryOutput|\r\n NFTOutput;\r\n}\r\n\r\nexport class OutputID {\r\n hex: string;\r\n transactionID: string;\r\n outputIndex: number;\r\n}\r\n\r\nexport class UnlockBlock {\r\n type: string;\r\n referencedIndex: number;\r\n signatureType: number;\r\n signature: SignatureEd25519;\r\n}\r\n\r\nexport class SignatureEd25519 {\r\n publicKey: string;\r\n signature: string;\r\n}\r\n\r\nexport class BasicOutput {\r\n amount: number\r\n nativeTokens?: Array;\r\n unlockConditions?: Array;\r\n features?: Array;\r\n}\r\n\r\nexport class AliasOutput {\r\n amount: number;\r\n nativeTokens?: Array;\r\n aliasId: string;\r\n stateIndex: number;\r\n stateMetadata?: string;\r\n foundryCounter: number;\r\n unlockConditions?: Array;\r\n features?: Array;\r\n immutableFeatures?: Array;\r\n}\r\n\r\nexport class FoundryOutput {\r\n amount: number;\r\n nativeTokens?: Array;\r\n serialNumber: number;\r\n tokenScheme: number; \r\n unlockConditions?: Array;\r\n features?: Array;\r\n immutableFeatures?: Array;\r\n}\r\n\r\nexport class NFTOutput {\r\n amount: number;\r\n nativeTokens?: Array;\r\n nftId: string; \r\n unlockConditions?: Array;\r\n features?: Array;\r\n immutableFeatures?: Array;\r\n}\r\n\r\nexport class Balance {\r\n value: number;\r\n color: string;\r\n}\r\n\r\nexport class Conflict {\r\n tx_id: string;\r\n opinion: Opinion;\r\n}\r\n\r\nexport class Timestamp {\r\n blk_id: string;\r\n opinion: Opinion;\r\n}\r\n\r\n// @ts-ignore\r\nexport class Opinion {\r\n value: string;\r\n round: number;\r\n}\r\n\r\nexport class NativeToken {\r\n id: string;\r\n amount: number;\r\n}\r\n\r\n// address, stateController, Governor share the same struct\r\nexport class AddressUnlockCondition {\r\n type: number;\r\n address: Address;\r\n}\r\n\r\nexport class Address {\r\n type: number;\r\n pubKeyHash: string;\r\n}\r\nexport class StorageDepositReturnUnlockCondition {\r\n type: number;\r\n returnAddress: string;\r\n amount: number;\r\n}\r\n\r\nexport class TimelockUnlockCondition {\r\n type: number;\r\n unixTime?: number;\r\n}\r\n\r\nexport class ExpirationUnlockCondition {\r\n type: number;\r\n returnAddress: string;\r\n unixTime: number;\r\n}\r\n\r\nexport class Feature {\r\n type: number;\r\n feature:\r\n IssuerFeature |\r\n MetadataFeature |\r\n TagFeature;\r\n}\r\n\r\n// Issuer and sender share a struct\r\nexport class IssuerFeature {\r\n address: string\r\n}\r\n\r\nexport class MetadataFeature {\r\n data: string;\r\n}\r\n\r\nexport class TagFeature {\r\n tag: string;\r\n}\r\n\r\nexport function getPayloadType(p: number){\r\n switch (p) {\r\n case PayloadType.TaggedData:\r\n return \"TaggedData\"\r\n case PayloadType.Transaction:\r\n return \"Transaction\"\r\n case PayloadType.Faucet:\r\n return \"Faucet\"\r\n default:\r\n return \"Unknown\"\r\n }\r\n}\r\n","import { UnlockConditionAddress, UnlockConditionExpiration, UnlockConditionStorageDepositReturn, UnlockConditionTimelock } from \"app/components/Condition\";\nimport { AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition } from \"app/misc/Payload\";\nimport * as React from 'react';\n\nexport enum ConditionType {\n Address = 0,\n StorageDepositReturn,\n Timelock,\n Expiration,\n StateControllerAddress,\n GovernorAddress,\n ImmutableAlias,\n}\n\nexport function resolveConditionType(condType: number) {\n switch (condType) {\n case ConditionType.Address:\n return \"Address Condition\";\n case ConditionType.StorageDepositReturn:\n return \"StorageDepositReturn Condition\";\n case ConditionType.Timelock:\n return \"Timelock Condition\";\n case ConditionType.Expiration:\n return \"Expiration Condition\";\n case ConditionType.StateControllerAddress:\n return \"StateControllerAddress Condition\";\n case ConditionType.GovernorAddress:\n return \"GovernorAddress Condition\";\n case ConditionType.ImmutableAlias:\n return \"ImmutableAlias Condition\";\n default:\n return \"Unknown Condition Type\";\n }\n}\n\nexport function conditionToComponent(cond: \n AddressUnlockCondition |\n StorageDepositReturnUnlockCondition |\n TimelockUnlockCondition |\n ExpirationUnlockCondition) {\n switch (cond.type) {\n case ConditionType.Address:\n case ConditionType.StateControllerAddress:\n case ConditionType.GovernorAddress:\n return ;\n case ConditionType.StorageDepositReturn:\n return ;\n case ConditionType.Expiration:\n return ;\n case ConditionType.Timelock:\n return ;\n }\n}","import { FeatureIssuer, FeatureMetadata, FeatureTag } from \"app/components/Feature\";\nimport { Feature, IssuerFeature, MetadataFeature, TagFeature } from \"app/misc/Payload\";\nimport * as React from 'react';\n\nexport enum FeatureType {\n Sender = 0,\n Issuer,\n Metadata,\n Tag,\n}\n\nexport function resolveSignatureType(sigType: number) {\n switch (sigType) {\n case FeatureType.Sender:\n return \"Sender Feature\";\n case FeatureType.Issuer:\n return \"Issuer Feature\";\n case FeatureType.Metadata:\n return \"Metadata Feature\";\n case FeatureType.Tag:\n return \"Tag Feature\";\n default:\n return \"Unknown Feature Type\";\n }\n}\n\n\nexport function featureToComponent(feat: Feature) {\n switch (feat.type) {\n case FeatureType.Sender:\n case FeatureType.Issuer:\n return ;\n case FeatureType.Metadata:\n return ;\n case FeatureType.Tag:\n return ;\n }\n}","import {\n BasicOutput as BasicJSON,\n AliasOutput as AliasJSON,\n FoundryOutput as FoundryJSON,\n NFTOutput as NFTJSON,\n Output,\n} from \"../misc/Payload\";\nimport * as React from \"react\";\nimport { BasicOutput } from \"app/components/BasicOutput\";\nimport { AliasOutput } from \"app/components/AliasOutput\";\nimport { FoundryOutput } from \"app/components/FoundryOutput\";\nimport { NFTOutput } from \"app/components/NFTOutput\";\n\nexport enum OutputType {\n Treasury = 2,\n Basic,\n Alias,\n Foundry,\n NFT,\n}\n\nexport function outputToComponent(output: Output) {\n let id = output.outputID\n switch (output.type) {\n case OutputType.Basic:\n return ;\n case OutputType.Alias:\n return ;\n case OutputType.Foundry:\n return ;\n case OutputType.NFT:\n return ;\n default:\n return;\n }\n}\n\n\nexport function outputTypeToName(type: number) {\n switch (type) {\n case OutputType.Basic:\n return \"Basic Output\";\n case OutputType.Alias:\n return \"Alias Output\";\n case OutputType.Foundry:\n return \"Foundry Output\";\n case OutputType.NFT:\n return \"NFT Output\";\n default:\n return;\n }\n}\n","import * as React from 'react';\nimport { NativeToken as NativeTokenJSON} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\n\ninterface Props {\n token: NativeTokenJSON;\n}\n\nexport class NativeToken extends React.Component {\n render() {\n return (\n
\n \n ID: {this.props.token.id}\n Amount: {this.props.token.amount}\n \n
\n );\n }\n}\n\n\n\n","import * as React from 'react';\nimport { \n TimelockUnlockCondition, \n AddressUnlockCondition,\n StorageDepositReturnUnlockCondition,\nExpirationUnlockCondition} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface AddressProps { \n unlock: AddressUnlockCondition;\n}\n\nexport class UnlockConditionAddress extends React.Component {\n render() {\n return (\n
\n \n Address Type: {this.props.unlock.address.type}\n \n \n Address: {this.props.unlock.address.pubKeyHash}\n \n
\n );\n }\n}\n\ninterface TimelockProps { \n unlock: TimelockUnlockCondition;\n}\n\nexport class UnlockConditionTimelock extends React.Component {\n render() {\n\n return (\n this.props.unlock.unixTime &&\n
\n \n Unix Time: {this.props.unlock.unixTime}\n \n
\n );\n }\n}\n\ninterface StorageDepositReturnProps { \n unlock: StorageDepositReturnUnlockCondition;\n}\n\nexport class UnlockConditionStorageDepositReturn extends React.Component {\n render() {\n\n return (\n
\n \n Return Address: {this.props.unlock.returnAddress}\n Amount: {this.props.unlock.amount}\n \n
\n );\n }\n}\n\ninterface ExpirationProps { \n unlock: ExpirationUnlockCondition;\n}\n\nexport class UnlockConditionExpiration extends React.Component {\n render() {\n\n return (\n
\n \n Return Address: {this.props.unlock.returnAddress}\n Unix Time: {this.props.unlock.unixTime}\n \n
\n );\n }\n}","import * as React from 'react';\nimport { \nIssuerFeature, MetadataFeature, TagFeature} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface IssuerProps { \n feature: IssuerFeature;\n}\n\nexport class FeatureIssuer extends React.Component {\n render() {\n return (\n
\n \n Address: {this.props.feature.address}\n \n
\n );\n }\n}\n\n\ninterface MetadataProps { \n feature: MetadataFeature;\n}\n\nexport class FeatureMetadata extends React.Component {\n render() {\n return (\n
\n \n Data: {this.props.feature.data}\n \n
\n );\n }\n}\n\ninterface TagProps { \n feature: TagFeature;\n}\n\nexport class FeatureTag extends React.Component {\n render() {\n return (\n
\n \n Data: {this.props.feature.tag}\n \n
\n );\n }\n}","import * as React from 'react';\nimport {OutputID, BasicOutput as BasicOutputJSON} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { NativeToken } from './NativeToken';\nimport { conditionToComponent } from 'app/utils/condition';\nimport { featureToComponent } from 'app/utils/feature';\n\ninterface Props {\n output: BasicOutputJSON\n id: OutputID;\n}\n\nexport class BasicOutput extends React.Component {\n render() {\n return (\n
\n \n Type: BasicOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}","import * as React from 'react';\nimport {AliasOutput as AliasOutputJSON, OutputID} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { NativeToken } from './NativeToken';\nimport { conditionToComponent } from 'app/utils/condition';\nimport { featureToComponent } from 'app/utils/feature';\n\ninterface Props {\n output: AliasOutputJSON\n id: OutputID;\n}\n\nexport class AliasOutput extends React.Component {\n render() {\n return (\n
\n \n Type: AliasOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n AliasID: {this.props.output.aliasId}\n StateIndex: {this.props.output.stateIndex}\n State Metadata: {this.props.output.stateMetadata} \n Foundry Counter: {this.props.output.foundryCounter}\n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}\n","import * as React from 'react';\nimport {OutputID, FoundryOutput as FoundryOutputJSON} from \"../misc/Payload\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { NativeToken } from './NativeToken';\nimport { conditionToComponent } from 'app/utils/condition';\nimport { featureToComponent } from 'app/utils/feature';\n\ninterface Props {\n output: FoundryOutputJSON\n id: OutputID;\n}\n\nexport class FoundryOutput extends React.Component {\n render() {\n return (\n
\n \n Type: FoundryOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n Serial Number: {this.props.output.serialNumber}\n Token Scheme: {this.props.output.tokenScheme} \n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}\n\n\n\n","import * as React from 'react';\nimport {OutputID, NFTOutput as NFTOutputJSON} from \"../misc/Payload\";\nimport {conditionToComponent} from \"../utils/condition\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { featureToComponent } from 'app/utils/feature';\nimport { NativeToken } from './NativeToken';\n\ninterface Props {\n output: NFTOutputJSON\n id: OutputID;\n}\n\nexport class NFTOutput extends React.Component {\n render() {\n return (\n
\n \n Type: FoundryOutput\n Amount: {this.props.output.amount}\n OutputID: {this.props.id.hex}\n NFT ID: {this.props.output.nftId}\n {\n this.props.output.nativeTokens && this.props.output.nativeTokens.map((n, _) => )\n }\n {\n this.props.output.unlockConditions && this.props.output.unlockConditions.map((c, _) => conditionToComponent(c))\n }\n {\n this.props.output.features && this.props.output.features.map((f, _) => featureToComponent(f))\n }\n Transaction: {this.props.id.transactionID}\n Output Index: {this.props.id.outputIndex}\n \n
\n );\n }\n}\n\n\n\n","import { action, computed, observable } from 'mobx';\r\nimport { registerHandler, WSMsgType } from \"../misc/WS\";\r\nimport {\r\n BasicPayload,\r\n getPayloadType,\r\n Output,\r\n PayloadType,\r\n FaucetPayload,\r\n TransactionPayload,\r\n TaggedDataPayload,\r\n BasicOutput\r\n} from \"../misc/Payload\";\r\nimport * as React from \"react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { RouterStore } from \"mobx-react-router\";\r\nimport { OutputType } from 'app/utils/output';\r\n\r\nexport const GenesisBlockID = \"1111111111111111111111111111111111111111111111111111111111111111\";\r\nexport const GenesisTransactionID = \"11111111111111111111111111111111\";\r\n\r\nexport class Block {\r\n id: string;\r\n networkID: number;\r\n protocolVersion: number;\r\n solidificationTimestamp: number;\r\n issuanceTimestamp: number;\r\n sequenceNumber: number;\r\n issuerID: string;\r\n signature: string;\r\n strongParents: Array;\r\n weakParents: Array;\r\n shallowLikedParents: Array;\r\n strongChildren: Array;\r\n weakChildren: Array;\r\n shallowLikeChildren: Array;\r\n solid: boolean;\r\n conflictIDs: Array;\r\n addedConflictIDs: Array;\r\n subtractedConflictIDs: Array;\r\n scheduled: boolean;\r\n booked: boolean;\r\n orphaned: boolean;\r\n objectivelyInvalid: boolean;\r\n subjectivelyInvalid: boolean;\r\n acceptance: boolean;\r\n acceptanceTime: number;\r\n confirmation: boolean;\r\n confirmationTime: number;\r\n confirmationBySlot: boolean;\r\n confirmationBySlotTime: number;\r\n payloadType: number;\r\n payload: any;\r\n txId: string;\r\n rank: number;\r\n sequenceID: number;\r\n isPastMarker: boolean;\r\n pastMarkerGap: number;\r\n pastMarkers: string;\r\n commitmentID: string\r\n commitment: Commitment;\r\n latestConfirmedSlot: number;\r\n}\r\n\r\nexport class Commitment {\r\n index: number;\r\n prevID: string;\r\n rootsID: string;\r\n cumulativeWeight: number;\r\n}\r\nexport class AddressResult {\r\n address: string;\r\n explorerOutputs: Array;\r\n}\r\n\r\nexport class ExplorerOutput {\r\n id: OutputID;\r\n output: Output;\r\n metadata: OutputMetadata\r\n txTimestamp: number;\r\n pendingMana: number;\r\n}\r\n\r\nclass OutputID {\r\n base58: string;\r\n transactionID: string;\r\n outputIndex: number;\r\n}\r\n\r\nexport class OutputMetadata {\r\n outputID: OutputID;\r\n conflictIDs: Array;\r\n consumerCount: number;\r\n confirmedConsumer: string // tx id of confirmed consumer\r\n confirmationState: number\r\n confirmationStateTime: number\r\n}\r\n\r\nclass OutputConsumer {\r\n transactionID: string;\r\n valid: string;\r\n}\r\n\r\nclass OutputConsumers {\r\n outputID: OutputID;\r\n consumers: Array\r\n}\r\n\r\nclass TransactionMetadata {\r\n transactionID: string;\r\n conflictIDs: string[];\r\n booked: boolean;\r\n bookedTime: number;\r\n confirmationState: string;\r\n confirmationStateTime: number;\r\n}\r\n\r\nclass PendingMana {\r\n mana: number;\r\n outputID: string;\r\n error: string;\r\n timestamp: number;\r\n}\r\n\r\nclass Conflict {\r\n id: string;\r\n parents: Array;\r\n conflictIDs: Array;\r\n confirmationState: number;\r\n}\r\n\r\nclass ConflictChildren {\r\n conflictID: string;\r\n childConflicts: Array\r\n}\r\n\r\nclass ConflictChild {\r\n conflictID: string;\r\n type: string;\r\n}\r\n\r\nclass ConflictConflict {\r\n outputID: OutputID;\r\n conflictIDs: Array;\r\n}\r\n\r\nclass ConflictConflicts {\r\n conflictID: string;\r\n conflicts: Array\r\n}\r\n\r\nclass ConflictVoters {\r\n conflictID: string;\r\n voters: Array\r\n}\r\n\r\nclass SlotInfo {\r\n id: string;\r\n index: number;\r\n rootsID: string;\r\n prevID: string;\r\n cumulativeWeight: number;\r\n blocks: Array;\r\n transactions: Array;\r\n createdOutputs: Array;\r\n spentOutputs: Array;\r\n}\r\n\r\nclass SearchResult {\r\n block: BlockRef;\r\n address: AddressResult;\r\n}\r\n\r\nclass BlockRef {\r\n id: string;\r\n payload_type: number;\r\n}\r\n\r\nclass Tips {\r\n tips: Array\r\n}\r\n\r\nconst liveFeedSize = 50;\r\n\r\nenum QueryError {\r\n NotFound = 1,\r\n BadRequest = 2\r\n}\r\n\r\nexport class ExplorerStore {\r\n // live feed\r\n @observable latest_blocks: Array = [];\r\n\r\n // queries\r\n @observable blk: Block = null;\r\n @observable addr: AddressResult = null;\r\n @observable tx: any = null;\r\n @observable txMetadata: any = null;\r\n @observable txAttachments: any = [];\r\n @observable output: any = null;\r\n @observable outputMetadata: OutputMetadata = null;\r\n @observable outputConsumers: OutputConsumers = null;\r\n @observable pendingMana: PendingMana = null;\r\n @observable conflict: Conflict = null;\r\n @observable conflictChildren: ConflictChildren = null;\r\n @observable conflictConflicts: ConflictConflicts = null;\r\n @observable conflictVoters: ConflictVoters = null;\r\n @observable tips: Tips = null;\r\n @observable slotInfo: SlotInfo = new SlotInfo;\r\n\r\n // loading\r\n @observable query_loading: boolean = false;\r\n @observable query_err: any = null;\r\n\r\n // search\r\n @observable search: string = \"\";\r\n @observable search_result: SearchResult = null;\r\n @observable searching: boolean = false;\r\n @observable payload: any;\r\n @observable subpayload: any;\r\n\r\n routerStore: RouterStore;\r\n\r\n constructor(routerStore: RouterStore) {\r\n this.routerStore = routerStore;\r\n registerHandler(WSMsgType.Block, this.addLiveFeedBlock);\r\n }\r\n\r\n searchAny = async () => {\r\n this.updateSearching(true);\r\n try {\r\n let res = await fetch(`/api/search/${this.search}`);\r\n let result: SearchResult = await res.json();\r\n this.updateSearchResult(result);\r\n } catch (err) {\r\n this.updateQueryError(err);\r\n }\r\n };\r\n\r\n @action\r\n resetSearch = () => {\r\n this.search_result = null;\r\n this.searching = false;\r\n };\r\n\r\n @action\r\n updateSearchResult = (result: SearchResult) => {\r\n this.search_result = result;\r\n this.searching = false;\r\n let search = this.search;\r\n this.search = '';\r\n if (this.search_result.block) {\r\n this.routerStore.push(`/explorer/block/${search}`);\r\n return;\r\n }\r\n if (this.search_result.address) {\r\n this.routerStore.push(`/explorer/address/${search}`);\r\n return;\r\n }\r\n this.routerStore.push(`/explorer/404/${search}`);\r\n };\r\n\r\n @action\r\n updateSearch = (search: string) => {\r\n this.search = search;\r\n };\r\n\r\n @action\r\n updateSearching = (searching: boolean) => this.searching = searching;\r\n\r\n searchBlock = async (id: string) => {\r\n this.updateQueryLoading(true);\r\n const res = await this.fetchJson(\"get\", `/api/block/${id}`)\r\n\r\n this.updateBlock(res);\r\n };\r\n\r\n searchAddress = async (id: string) => {\r\n this.updateQueryLoading(true);\r\n const res = await this.fetchJson(\"get\", `/api/address/${id}`)\r\n this.updateAddress(res);\r\n };\r\n\r\n getSlotDetails = async (id: string) => {\r\n await this.getSlotInfo(id);\r\n }\r\n\r\n @action\r\n getTransaction = async (id: string) => {\r\n const tx = await this.fetchJson(\"get\", `/api/transaction/${id}`)\r\n \r\n for (let i = 0; i < tx.inputs.length; i++) {\r\n let inputID = tx.inputs[i] ? tx.inputs[i].referencedOutputID.hex : GenesisBlockID\r\n try {\r\n let referencedOutputRes = await fetch(`/api/output/${inputID}`)\r\n if (referencedOutputRes.status === 404) {\r\n let genOutput = new Output();\r\n genOutput.output = new BasicOutput();\r\n genOutput.output.amount = 0;\r\n genOutput.type = OutputType.Basic;\r\n genOutput.outputID = tx.inputs[i].referencedOutputID;\r\n tx.inputs[i].output = genOutput;\r\n }\r\n if (referencedOutputRes.status === 200) {\r\n tx.inputs[i].output = await referencedOutputRes.json()\r\n }\r\n } catch (err) {\r\n // ignore\r\n }\r\n this.tx = tx;\r\n }\r\n }\r\n\r\n @action\r\n getTransactionAttachments = async (id: string) => {\r\n const attachments = await this.fetchJson(\"get\", `/api/transaction/${id}/attachments`)\r\n this.txAttachments = attachments;\r\n }\r\n\r\n @action\r\n getTransactionMetadata = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/transaction/${id}/metadata`)\r\n this.txMetadata = res;\r\n }\r\n\r\n @action\r\n getOutput = async (id: string) => {\r\n const output = await this.fetchJson(\"get\", `/api/output/${id}`)\r\n this.output = output;\r\n }\r\n\r\n @action\r\n getOutputMetadata = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/output/${id}/metadata`)\r\n this.outputMetadata = res;\r\n }\r\n\r\n @action\r\n getOutputConsumers = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/output/${id}/consumers`)\r\n this.outputConsumers = res;\r\n }\r\n\r\n @action\r\n getPendingMana = async (outputID: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/mana/pending?OutputID=${outputID}`)\r\n this.pendingMana = res;\r\n }\r\n\r\n @action\r\n getConflict = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}`)\r\n this.conflict = res;\r\n }\r\n\r\n @action\r\n getConflictChildren = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}/children`)\r\n this.conflictChildren = res;\r\n }\r\n\r\n @action\r\n getConflictConflicts = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}/conflicts`)\r\n this.conflictConflicts = res;\r\n }\r\n\r\n @action\r\n getConflictVoters = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/conflict/${id}/voters`)\r\n this.conflictVoters = res;\r\n }\r\n\r\n @action\r\n getSlotInfo = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/slot/commitment/${id}`)\r\n this.slotInfo = res;\r\n }\r\n\r\n @action\r\n getTips = async () => {\r\n const res = await this.fetchJson(\"get\", \"/api/tips\")\r\n this.tips = res;\r\n }\r\n\r\n @action\r\n reset = () => {\r\n this.blk = null;\r\n this.query_err = null;\r\n // reset all variables\r\n this.tx = null;\r\n this.txMetadata = null;\r\n this.txAttachments = [];\r\n this.output = null;\r\n this.outputMetadata = null;\r\n this.outputConsumers = null;\r\n this.pendingMana = null;\r\n this.conflict = null;\r\n this.conflictChildren = null;\r\n this.conflictConflicts = null;\r\n this.tips = null;\r\n this.slotInfo = new SlotInfo;\r\n };\r\n\r\n @action\r\n updateAddress = (addr: AddressResult) => {\r\n this.addr = addr;\r\n this.query_err = null;\r\n this.query_loading = false;\r\n };\r\n\r\n @action\r\n updateBlock = (blk: Block) => {\r\n this.blk = blk;\r\n this.blk.conflictIDs = this.blk.conflictIDs ? this.blk.conflictIDs : []\r\n this.blk.addedConflictIDs = this.blk.addedConflictIDs ? this.blk.addedConflictIDs : []\r\n this.blk.subtractedConflictIDs = this.blk.subtractedConflictIDs ? this.blk.subtractedConflictIDs : []\r\n this.blk.strongChildren = this.blk.strongChildren ? this.blk.strongChildren : []\r\n this.blk.weakChildren = this.blk.weakChildren ? this.blk.weakChildren : []\r\n this.blk.shallowLikeChildren = this.blk.shallowLikeChildren ? this.blk.shallowLikeChildren : []\r\n this.blk.strongParents = this.blk.strongParents ? this.blk.strongParents : []\r\n this.blk.weakParents = this.blk.weakParents ? this.blk.weakParents : []\r\n this.blk.shallowLikedParents = this.blk.shallowLikedParents ? this.blk.shallowLikedParents : []\r\n\r\n this.query_err = null;\r\n this.query_loading = false;\r\n switch (blk.payloadType) {\r\n case PayloadType.Transaction:\r\n this.payload = blk.payload as TransactionPayload\r\n break;\r\n case PayloadType.TaggedData:\r\n this.payload = blk.payload as TaggedDataPayload\r\n break;\r\n case PayloadType.Faucet:\r\n this.payload = blk.payload as FaucetPayload\r\n default:\r\n this.payload = blk.payload as BasicPayload\r\n break;\r\n }\r\n };\r\n\r\n @action\r\n updateQueryLoading = (loading: boolean) => this.query_loading = loading;\r\n\r\n @action\r\n updateQueryError = (err: any) => {\r\n this.query_err = err;\r\n this.query_loading = false;\r\n this.searching = false;\r\n };\r\n\r\n @action\r\n addLiveFeedBlock = (blk: BlockRef) => {\r\n // prevent duplicates (should be fast with only size 10)\r\n if (this.latest_blocks.findIndex((t) => t.id == blk.id) === -1) {\r\n if (this.latest_blocks.length >= liveFeedSize) {\r\n this.latest_blocks.shift();\r\n }\r\n this.latest_blocks.push(blk);\r\n }\r\n };\r\n\r\n @computed\r\n get blksLiveFeed() {\r\n let feed = [];\r\n for (let i = this.latest_blocks.length - 1; i >= 0; i--) {\r\n let blk = this.latest_blocks[i];\r\n feed.push(\r\n \r\n \r\n \r\n {blk.id}\r\n \r\n \r\n \r\n {getPayloadType(blk.payload_type)}\r\n \r\n \r\n );\r\n }\r\n return feed;\r\n }\r\n\r\n @computed\r\n get tipsList() {\r\n let list = [];\r\n if (this.tips) {\r\n for (let i = 0; i < this.tips.tips.length; i++) {\r\n let blkId = this.tips.tips[i];\r\n list.push(\r\n \r\n \r\n \r\n {blkId}\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n return list;\r\n }\r\n\r\n async fetchJson(\r\n method: 'get' | 'delete',\r\n route: string,\r\n requestData?: T\r\n ): Promise {\r\n\r\n const body = requestData ? JSON.stringify(requestData, function (_, v) {\r\n // keep Uint8Array as it is\r\n if (v instanceof Uint8Array) {\r\n return Array.from(v);\r\n }\r\n return v;\r\n })\r\n : undefined;\r\n\r\n const response = await fetch(`${route}`, {\r\n method,\r\n headers: { 'Content-Type': 'application/json' },\r\n body\r\n });\r\n\r\n if (response.ok) {\r\n const responseData: U = await response.json();\r\n return responseData;\r\n }\r\n\r\n switch (response.status) {\r\n case 404:\r\n this.updateQueryError(QueryError.NotFound);\r\n break;\r\n case 400:\r\n this.updateQueryError(QueryError.BadRequest);\r\n break;\r\n default:\r\n this.updateQueryError('unexpected error')\r\n break;\r\n }\r\n return {} as U;\r\n }\r\n}\r\n\r\nexport default ExplorerStore;\r\n","import * as React from 'react';\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\n\r\ninterface Props {\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class BasicPayload extends React.Component {\r\n\r\n render() {\r\n let {payload} = this.props.explorerStore;\r\n return (\r\n payload &&\r\n \r\n \r\n \r\n {payload.content_title}: {' '} \r\n {payload.content}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","export enum SignatureType {\n Ed25519 = 0,\n BLS = 1,\n}\n\nexport function resolveSignatureType(sigType: number) {\n switch (sigType) {\n case SignatureType.Ed25519:\n return \"Ed25519 Signature\";\n case SignatureType.BLS:\n return \"BLS Signature\";\n default:\n return \"Unknown Signature Type\";\n }\n}","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport { Col, ListGroup } from 'react-bootstrap';\nimport { SignatureEd25519 } from 'app/misc/Payload';\n\ninterface Props {\n signature?: SignatureEd25519;\n}\n\nexport class Ed25519Signature extends React.Component {\n\n render() {\n let signature = this.props.signature;\n return (\n \n \n \n \n Public Key: {signature.publicKey}\n Signature: {signature.signature}\n \n \n \n \n );\n }\n}\n","import {UnlockBlock as unlockBlockJSON} from \"../misc/Payload\";\nimport * as React from \"react\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Badge from \"react-bootstrap/Badge\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport {SignatureType, resolveSignatureType} from \"../utils/unlock_block\";\nimport { Ed25519Signature } from \"./Ed25519Signature\";\n\ninterface UnlockProps {\n block: unlockBlockJSON;\n key: number;\n}\n\nexport class UnlockBlock extends React.Component {\n renderSignatureComponent() {\n switch (this.props.block.signatureType) {\n case SignatureType.Ed25519:\n return \n }\n }\n\n render() {\n let block = this.props.block;\n return (\n \n \n Index: {this.props.key}\n \n Type: {block.type}\n {\n block.signatureType && Signature Type: {resolveSignatureType(block.signatureType)}\n } \n {\n this.renderSignatureComponent()\n } \n \n \n \n );\n }\n}","import * as React from \"react\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport Badge from \"react-bootstrap/Badge\";\nimport {outputToComponent} from \"../utils/output\";\nimport {IconContext} from \"react-icons\";\nimport {FaChevronCircleRight} from \"react-icons/fa\";\nimport {UnlockBlock} from \"./UnlockBlock\";\nimport {TransactionPayload} from \"../misc/Payload\";\n\nconst style = {\n maxHeight: \"1000px\",\n overflow: \"auto\",\n width: \"47%\",\n fontSize: \"85%\",\n}\n\ninterface Props {\n txID?: string;\n tx?: TransactionPayload;\n}\n\nexport class Transaction extends React.Component {\n render() {\n let txID = this.props.txID;\n let tx = this.props.tx;\n return (\n tx && txID &&\n
\n

Transaction

\n

{txID}

\n \n \n
Transaction Essence
\n \n ID: {txID}\n Network ID: {tx.networkId}\n Creation Time: {tx.creationSlot}\n \n
\n
\n Inputs\n
\n {tx.inputs.map((input, i) => {\n return (\n
\n Index: {i}\n
\n \n Output ID: {input.referencedOutputID.hex}\n \n
\n
\n )\n })}\n
\n \n
\n \n
\n
\n
\n Outputs\n
\n {tx.outputs.map((output, i) => {\n return (\n
\n Index: {i}\n {outputToComponent(output)}\n
\n )\n })}\n
\n
\n
\n { tx.payload && Data payload: {tx.payload}}\n
\n \n
\n \n \n
Unlock Blocks
\n \n {\n tx.unlocks.map((block,index) => (\n \n ))}\n \n \n
\n
\n );\n }\n}","import * as React from 'react';\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {ExplorerStore} from \"../stores/ExplorerStore\";\r\nimport {Transaction} from \"./Transaction\";\r\n// import {ExplorerTransactionMetadata} from \"./ExplorerTransactionMetadata\";\r\nimport Container from \"react-bootstrap/Container\";\r\n\r\ninterface Props {\r\n explorerStore?: ExplorerStore;\r\n}\r\n\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class TransactionPayload extends React.Component {\r\n render() {\r\n let {payload, blk} = this.props.explorerStore;\r\n let txID = blk.txId;\r\n let tx = payload;\r\n\r\n return (\r\n \r\n {/* */}\r\n \r\n \r\n );\r\n }\r\n}\r\n","export function resolveBase58ConflictID(base58Conflict: string): string {\n switch (base58Conflict) {\n case MasterConflictInBase58:\n return \"MasterConflictID\";\n case UndefinedConflictInBase58:\n return \"UndefinedConflictID\";\n case LazyBookedConflictsConflictInBase58:\n return \"LazyBookedConflictsConflictID\";\n case InvalidConflictInBase58:\n return \"InvalidConflictID\";\n default:\n // otherwise it is a \"regular\" conflictID that doesn't have a distinct name\n return base58Conflict\n }\n}\n\n// base58 conflictIDs that have distinct names\nconst MasterConflictInBase58 = \"4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM\"\nconst UndefinedConflictInBase58 = \"11111111111111111111111111111111\"\nconst LazyBookedConflictsConflictInBase58 = \"JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF\"\nconst InvalidConflictInBase58 = \"JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG\"","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport {inject, observer} from \"mobx-react\";\nimport {ExplorerStore} from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface Props {\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"explorerStore\")\n@observer\nexport class FaucetPayload extends React.Component {\n\n render() {\n let {payload} = this.props.explorerStore;\n return (\n payload &&\n \n \n \n \n \n Address: {payload.address}\n \n \n Access Mana Pledge ID: {payload.accessManaPledgeID}\n \n \n Consensus Mana Pledge ID: {payload.consensusManaPledgeID}\n \n \n Nonce: {payload.nonce}\n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport {inject, observer} from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport { Col, ListGroup } from 'react-bootstrap';\n\ninterface Props {\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"explorerStore\")\n@observer\nexport class TaggedDataPayload extends React.Component {\n\n render() {\n let {payload} = this.props.explorerStore;\n \n return (\n payload &&\n \n \n \n \n Tag: {payload.tag}\n Data: {payload.data}\n \n \n \n \n );\n }\n}\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport ExplorerStore, { GenesisBlockID } from \"../stores/ExplorerStore\";\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Badge from \"react-bootstrap/Badge\";\r\nimport * as dateformat from 'dateformat';\r\nimport { Link } from 'react-router-dom';\r\nimport { BasicPayload } from './BasicPayload'\r\nimport { TransactionPayload } from './TransactionPayload'\r\nimport { getPayloadType, PayloadType } from '../misc/Payload'\r\nimport { resolveBase58ConflictID } from \"../utils/conflict\";\r\nimport { FaucetPayload } from './FaucetPayload';\r\nimport { TaggedDataPayload } from './TaggedDataPayload';\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n match?: {\r\n params: {\r\n id: string,\r\n }\r\n }\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerBlockQueryResult extends React.Component {\r\n\r\n componentDidMount() {\r\n this.props.explorerStore.resetSearch();\r\n this.props.explorerStore.searchBlock(this.props.match.params.id);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.explorerStore.reset();\r\n }\r\n\r\n getSnapshotBeforeUpdate(prevProps: Props, prevState) {\r\n if (prevProps.match.params.id !== this.props.match.params.id) {\r\n this.props.explorerStore.searchBlock(this.props.match.params.id);\r\n }\r\n return null;\r\n }\r\n\r\n getPayloadType() {\r\n return getPayloadType(this.props.explorerStore.blk.payloadType)\r\n }\r\n\r\n renderPayload() {\r\n switch (this.props.explorerStore.blk.payloadType) {\r\n case PayloadType.Transaction:\r\n if (!this.props.explorerStore.blk.objectivelyInvalid) {\r\n return \r\n }\r\n return \r\n case PayloadType.TaggedData:\r\n return \r\n case PayloadType.Faucet:\r\n return \r\n default:\r\n return \r\n }\r\n }\r\n\r\n render() {\r\n let { id } = this.props.match.params;\r\n let { blk, query_loading, query_err } = this.props.explorerStore;\r\n\r\n if (id === GenesisBlockID) {\r\n return (\r\n \r\n

Genesis Block

\r\n

In the beginning there was the genesis.

\r\n
\r\n );\r\n }\r\n\r\n if (query_err) {\r\n return (\r\n \r\n

Block not available - 404

\r\n

\r\n Block with ID {id} not found.\r\n

\r\n
\r\n );\r\n }\r\n return (\r\n \r\n

Block

\r\n

\r\n {id} {' '}\r\n {\r\n blk &&\r\n \r\n
\r\n \r\n \r\n Issuance Time: {dateformat(new Date(blk.issuanceTimestamp * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n Solidification Time: {dateformat(new Date(blk.solidificationTimestamp * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n
\r\n }\r\n

\r\n {\r\n blk &&\r\n \r\n \r\n \r\n \r\n \r\n Payload Type: {this.getPayloadType()}\r\n \r\n \r\n Sequence Number: {blk.sequenceNumber}\r\n \r\n \r\n ConflictIDs:\r\n \r\n {\r\n blk.conflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n AddedConflictIDs:\r\n \r\n {\r\n blk.addedConflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n SubtractedConflictIDs:\r\n \r\n {\r\n blk.subtractedConflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n Solid: {blk.solid ? 'Yes' : 'No'}\r\n \r\n \r\n Scheduled: {blk.scheduled ? 'Yes' : 'No'}\r\n \r\n \r\n Booked: {blk.booked ? 'Yes' : 'No'}\r\n \r\n \r\n Orphaned: {blk.orphaned ? 'Yes' : 'No'}\r\n \r\n \r\n Objectively Invalid: {blk.objectivelyInvalid ? 'Yes' : 'No'}\r\n \r\n \r\n Subjectively Invalid: {blk.subjectivelyInvalid ? 'Yes' : 'No'}\r\n \r\n \r\n Acceptance: {blk.acceptance ? 'Yes' : 'No'}\r\n \r\n \r\n Acceptance\r\n Time: {dateformat(new Date(blk.acceptanceTime * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n Confirmation: {blk.confirmation ? 'Yes' : 'No'}\r\n \r\n \r\n Confirmation\r\n Time: {dateformat(new Date(blk.confirmationTime * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n Confirmation by slot: {blk.confirmationBySlot ? 'Yes' : 'No'}\r\n \r\n \r\n Confirmation by slot\r\n time: {dateformat(new Date(blk.confirmationBySlotTime * 1000), \"dd.mm.yyyy HH:MM:ss\")}\r\n \r\n \r\n \r\n \r\n\r\n {\r\n \r\n \r\n
Slot Commitment
\r\n \r\n \r\n CommitmentID: {blk.commitmentID}\r\n \r\n \r\n \r\n \r\n Index: {blk.commitment.index}\r\n \r\n \r\n prevID: {blk.commitment.prevID}\r\n \r\n \r\n rootsID: {blk.commitment.rootsID}\r\n \r\n \r\n Cumulative Weight: {blk.commitment.cumulativeWeight}\r\n \r\n \r\n \r\n \r\n LatestConfirmedSlot: {blk.latestConfirmedSlot}\r\n \r\n \r\n \r\n
\r\n }\r\n\r\n {\r\n !!blk.rank &&\r\n \r\n \r\n
Markers
\r\n \r\n \r\n Rank: {blk.rank}\r\n \r\n \r\n SequenceID: {blk.sequenceID}\r\n \r\n \r\n PastMarkerGap: {blk.pastMarkerGap}\r\n \r\n \r\n IsPastMarker: {blk.isPastMarker ? 'Yes' : 'No'}\r\n \r\n \r\n Past markers: {blk.pastMarkers}\r\n \r\n \r\n \r\n
\r\n }\r\n\r\n\r\n \r\n \r\n \r\n \r\n IssuerID: {blk.issuerID}\r\n \r\n \r\n Block Signature: {blk.signature}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.strongParents.map((value, index) => {\r\n return (\r\n \r\n Strong Parents {index + 1}: {' '}\r\n \r\n {blk.strongParents[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.weakParents.map((value, index) => {\r\n return (\r\n \r\n Weak Parents {index + 1}: {' '}\r\n \r\n {blk.weakParents[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.shallowLikedParents.map((value, index) => {\r\n return (\r\n \r\n Shallow Liked Parents {index + 1}: {' '}\r\n \r\n {blk.shallowLikedParents[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n blk.strongChildren.map((value, index) => {\r\n return (\r\n \r\n Strong Child {index + 1}: {' '}\r\n \r\n {blk.strongChildren[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n blk.weakChildren.map((value, index) => {\r\n return (\r\n \r\n Weak Child {index + 1}: {' '}\r\n \r\n {blk.weakChildren[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n blk.shallowLikeChildren.map((value, index) => {\r\n return (\r\n \r\n ShallowLike Child {index + 1}: {' '}\r\n \r\n {blk.shallowLikeChildren[index]}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n

Payload

\r\n \r\n
\r\n \r\n \r\n {this.renderPayload()}\r\n \r\n \r\n
\r\n }\r\n \r\n \r\n {query_loading && }\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","export function displayManaUnit(mana: number): string {\n let result = \"\"\n // round to nearest integer\n let roundedMana = Math.round(mana);\n if (roundedMana < 1000) {\n result = roundedMana.toString(10) + \" m\"; // mana\n } else if (roundedMana < 1000000) {\n result = (roundedMana / 1000).toFixed(3) + \" Km\"; // kilomana\n }\n else if (roundedMana < 1000000000) {\n result = (roundedMana / 1000000).toFixed(3) + \" Mm\"; // megamana\n }\n else if (roundedMana < 1000000000000) {\n result = (roundedMana / 1000000000).toFixed(3) + \" Gm\"; // gigamana\n }\n else if (roundedMana < 1000000000000000) {\n result = (roundedMana / 1000000000000).toFixed(3) + \" Tm\"; // terramana\n } else {\n result = (roundedMana / 1000000000000000).toFixed(3) + \" Pm\"; // petamana\n }\n return result\n}","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {ExplorerStore, ExplorerOutput, OutputMetadata} from \"../stores/ExplorerStore\";\r\nimport Spinner from \"react-bootstrap/Spinner\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Alert from \"react-bootstrap/Alert\";\r\nimport {Link} from 'react-router-dom';\r\nimport {displayManaUnit} from \"../utils\";\r\nimport {OutputType, outputToComponent, outputTypeToName} from \"../utils/output\";\r\nimport {Button, ListGroupItem} from \"react-bootstrap\";\r\nimport {resolveBase58ConflictID} from \"../utils/conflict\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n match?: {\r\n params: {\r\n id: string,\r\n }\r\n }\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class ExplorerAddressQueryResult extends React.Component {\r\n\r\n componentDidMount() {\r\n this.props.explorerStore.resetSearch();\r\n this.props.explorerStore.searchAddress(this.props.match.params.id);\r\n }\r\n\r\n getSnapshotBeforeUpdate(prevProps: Props, prevState) {\r\n if (prevProps.match.params.id !== this.props.match.params.id) {\r\n this.props.explorerStore.searchAddress(this.props.match.params.id);\r\n }\r\n return null;\r\n }\r\n\r\n render() {\r\n let {id} = this.props.match.params;\r\n let {addr, query_loading, query_err} = this.props.explorerStore;\r\n // spent outputs\r\n let spent: Array = [];\r\n // unspent outputs\r\n let unspent: Array = [];\r\n let available_balances = [];\r\n\r\n if (query_err) {\r\n return (\r\n \r\n

Address not available - 404

\r\n

\r\n Address {id} not found.\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (addr) {\r\n // separate spent from unspent\r\n addr.explorerOutputs.forEach((o) => {\r\n if (o.metadata.consumerCount > 0) {\r\n spent.push(o);\r\n } else {\r\n unspent.push(o);\r\n }\r\n })\r\n\r\n let timestampCompareFn = (a: ExplorerOutput, b: ExplorerOutput) => {\r\n if (b.txTimestamp === a.txTimestamp) {\r\n // outputs have the same timestamp\r\n if (b.id.transactionID == a.id.transactionID) {\r\n // outputs belong to the same tx, sort based on index\r\n return b.id.outputIndex - a.id.outputIndex;\r\n }\r\n // same timestamp, but different tx\r\n return b.id.transactionID.localeCompare(a.id.transactionID);\r\n }\r\n return b.txTimestamp - a.txTimestamp;\r\n }\r\n\r\n // sort outputs\r\n unspent.sort(timestampCompareFn)\r\n spent.sort(timestampCompareFn)\r\n }\r\n return (\r\n \r\n

Address {id} {addr !== null && ({addr.explorerOutputs.length} Outputs)}

\r\n {\r\n addr !== null ?\r\n \r\n {\r\n addr.explorerOutputs !== null && addr.explorerOutputs.length === 100 &&\r\n \r\n Max. 100 outputs are shown.\r\n \r\n }\r\n \r\n \r\n \r\n

Available Balances

\r\n {available_balances.length === 0? \"There are no balances currently available.\" :
\r\n \r\n \r\n \r\n Color\r\n \r\n \r\n Balance\r\n \r\n \r\n \r\n {available_balances}\r\n
}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n

Unspent Outputs

\r\n {unspent.length === 0? \"There are no unspent outputs currently available.\" :
\r\n {unspent.map((o) => {\r\n return \r\n })}\r\n
\r\n }\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n

Spent Outputs

\r\n {spent.length === 0? \"There are no spent outputs currently available.\" :
\r\n {spent.map((o) => {\r\n return \r\n })}\r\n
\r\n }\r\n
\r\n \r\n
\r\n
\r\n :\r\n \r\n \r\n {query_loading && }\r\n \r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\ninterface oProps {\r\n output: ExplorerOutput;\r\n}\r\n\r\nclass OutputButton extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n enabled: false\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n { this.setState({enabled: !this.state.enabled})}}\r\n block\r\n >\r\n \r\n {this.props.output.id.base58} \r\n {outputTypeToName(this.props.output.output.type)} \r\n {new Date(this.props.output.txTimestamp * 1000).toLocaleString()}\r\n \r\n \r\n \r\n \r\n {\r\n this.state.enabled? outputToComponent(this.props.output.output): null\r\n }\r\n \r\n \r\n {\r\n this.state.enabled? : null\r\n }\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\ninterface omProps {\r\n metadata: OutputMetadata;\r\n timestamp: number;\r\n pendingMana: number;\r\n}\r\n\r\nclass OutputMeta extends React.Component {\r\n render() {\r\n let metadata = this.props.metadata;\r\n let timestamp = this.props.timestamp;\r\n let pendingMana = this.props.pendingMana;\r\n return (\r\n \r\n ConflictIDs: \r\n \r\n {\r\n metadata.conflictIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58ConflictID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n Pending mana: {displayManaUnit(pendingMana)}\r\n Timestamp: {new Date(timestamp * 1000).toLocaleString()}\r\n Consumer Count: {metadata.consumerCount}\r\n { metadata.confirmedConsumer && Confirmed Consumer: {metadata.confirmedConsumer} }\r\n \r\n );\r\n }\r\n}\r\n\r\nlet getVariant = (outputType: number) => {\r\n switch (outputType) {\r\n case OutputType.Basic:\r\n return \"light\";\r\n case OutputType.Alias:\r\n return \"light\";\r\n case OutputType.Foundry:\r\n return \"success\";\r\n case OutputType.NFT:\r\n return \"info\";\r\n default:\r\n return \"danger\";\r\n }\r\n}","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ExplorerStore from \"../stores/ExplorerStore\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n explorerStore?: ExplorerStore;\r\n match?: {\r\n params: {\r\n search: string,\r\n }\r\n }\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@inject(\"explorerStore\")\r\n@observer\r\nexport class Explorer404 extends React.Component {\r\n\r\n render() {\r\n let {search} = this.props.match.params;\r\n return (\r\n \r\n

Tangle Explorer 404

\r\n

\r\n The search via '{search}' did not yield any results.\r\n

\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport ListGroup from \"react-bootstrap/ListGroup\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport * as prettysize from 'prettysize';\r\nimport Badge from \"react-bootstrap/Badge\";\r\nimport {defaultChartOptions} from \"../misc/Chart\";\r\nimport {Line} from \"react-chartjs-2\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n identity: string;\r\n}\r\n\r\nconst lineChartOptions = Object.assign({\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 8,\r\n fontSize: 8,\r\n minRotation: 0,\r\n maxRotation: 0,\r\n },\r\n showXLabels: 10,\r\n gridLines: {\r\n display: false\r\n }\r\n }],\r\n yAxes: [{\r\n gridLines: {\r\n display: false\r\n },\r\n ticks: {\r\n callback: function (value, index, values) {\r\n return prettysize(Math.abs(value));\r\n },\r\n maxTicksLimit: 3,\r\n fontSize: 10,\r\n },\r\n }],\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function (tooltipItem, data) {\r\n let label = data.datasets[tooltipItem.datasetIndex].label;\r\n return `${label} ${prettysize(Math.abs(tooltipItem.value))}`;\r\n }\r\n }\r\n }\r\n}, defaultChartOptions);\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Neighbor extends React.Component {\r\n render() {\r\n let neighborMetrics = this.props.nodeStore.neighbor_metrics.get(this.props.identity);\r\n let last = neighborMetrics.current;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {last.id}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Origin:\r\n {' '}\r\n {last.connection_origin}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Address: {last.address}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Network (Tx/Rx)
\r\n \r\n {'Total: '}\r\n {last.packets_written}\r\n {' / '}\r\n {last.packets_read}\r\n \r\n {' '}\r\n \r\n {'Current: '}\r\n {prettysize(neighborMetrics.currentNetIO && neighborMetrics.currentNetIO.tx)}\r\n {' / '}\r\n {prettysize(neighborMetrics.currentNetIO && neighborMetrics.currentNetIO.rx)}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport {inject, observer} from \"mobx-react\";\r\nimport {Neighbor} from \"./Neighbor\";\r\n\r\ninterface Props {\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Neighbors extends React.Component {\r\n render() {\r\n let neighborsEle = [];\r\n this.props.nodeStore.neighbor_metrics.forEach((v, k) => {\r\n neighborsEle.push();\r\n });\r\n return (\r\n \r\n

Neighbors {neighborsEle.length > 0 && ({neighborsEle.length})}

\r\n

\r\n Currently connected neighbors.\r\n

\r\n {neighborsEle}\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { KeyboardEvent } from 'react';\r\nimport Container from \"react-bootstrap/Container\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport VisualizerStore from \"../stores/VisualizerStore\";\r\nimport NodeStore from \"../stores/NodeStore\";\r\nimport Badge from \"react-bootstrap/Badge\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport InputGroup from \"react-bootstrap/InputGroup\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport Popover from \"react-bootstrap/Popover\";\r\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\";\r\n\r\ninterface Props {\r\n visualizerStore?: VisualizerStore;\r\n nodeStore?: NodeStore;\r\n}\r\n\r\n@inject(\"visualizerStore\")\r\n@inject(\"nodeStore\")\r\n@observer\r\nexport class Visualizer extends React.Component {\r\n\r\n componentDidMount(): void {\r\n this.props.visualizerStore.start();\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.props.visualizerStore.stop();\r\n this.props.nodeStore.registerHandlers();\r\n }\r\n\r\n updateVerticesLimit = (e) => {\r\n this.props.visualizerStore.updateVerticesLimit(e.target.value);\r\n }\r\n\r\n pauseResumeVisualizer = (e) => {\r\n this.props.visualizerStore.pauseResume();\r\n }\r\n\r\n updateSearch = (e) => {\r\n this.props.visualizerStore.updateSearch(e.target.value);\r\n }\r\n\r\n searchAndHighlight = (e: KeyboardEvent) => {\r\n if (e.key !== 'Enter') return;\r\n this.props.visualizerStore.searchAndHighlight();\r\n }\r\n\r\n toggleBackgroundDataCollection = () => {\r\n if (this.props.nodeStore.collecting) {\r\n this.props.nodeStore.unregisterHandlers();\r\n return;\r\n }\r\n this.props.nodeStore.registerHandlers();\r\n }\r\n\r\n render() {\r\n let {\r\n vertices, finalized_count, selected,\r\n verticesLimit, tips_count, paused, search\r\n } = this.props.visualizerStore;\r\n let { last_mps_metric, collecting } = this.props.nodeStore;\r\n\r\n return (\r\n \r\n

Visualizer

\r\n \r\n \r\n \r\n \r\n Vertices Limit\r\n \r\n \r\n \r\n \r\n \r\n \r\n Search Vertex\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Ensures that only data needed for the visualizer is collected.\r\n \r\n }\r\n >\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Pauses/resumes rendering the graph.\r\n \r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n

\r\n \r\n BLK Pending\r\n \r\n {' '}\r\n \r\n BLK Confirmed\r\n \r\n {' '}\r\n \r\n TX Pending\r\n \r\n {' '}\r\n \r\n TX Confirmed\r\n \r\n {' '}\r\n \r\n Tip\r\n \r\n {' '}\r\n \r\n Unknown\r\n \r\n
\r\n Vertices: {vertices.size}, Tips: {tips_count},\r\n Confirmed/UnConfirmed: {finalized_count}/{vertices.size - finalized_count},{' '}\r\n BPS: {last_mps_metric.mps}\r\n
\r\n Selected: {selected ?\r\n \r\n {selected.id.substr(0, 10)}\r\n \r\n : \"-\"}\r\n
\r\n {\r\n selected ? selected.strongParents &&\r\n Strong:{' '}\r\n {selected.strongParents.map((parent) => {\r\n return (\r\n \r\n {parent.substr(0, 10) + \" \"}\r\n \r\n )\r\n\r\n })}\r\n \r\n : \"\"\r\n }\r\n
\r\n {\r\n selected ? selected.weakParents &&\r\n Weak:{' '}\r\n {selected.weakParents.map((parent) => {\r\n return (\r\n \r\n {parent.substr(0, 10) + \" \"}\r\n \r\n )\r\n\r\n })}\r\n \r\n : \"\"\r\n }\r\n
\r\n {\r\n selected ? selected.shallowLikedParents &&\r\n Shallow Liked:{' '}\r\n {selected.shallowLikedParents.map((parent) => {\r\n return (\r\n \r\n {parent.substr(0, 10) + \" \"}\r\n \r\n )\r\n\r\n })}\r\n \r\n : \"\"\r\n }\r\n

\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport {inject, observer} from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Table from \"react-bootstrap/Table\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class Tips extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTips();\n }\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let {tipsList} = this.props.explorerStore;\n return (\n \n

Tips

\n \n \n \n \n \n \n \n {tipsList}\n \n
BlockID
\n
\n );\n }\n}","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport {Transaction} from \"./Transaction\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n txId: string\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransaction extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTransaction(this.props.txId);\n }\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let { txId } = this.props;\n let { query_err, tx } = this.props.explorerStore;\n if (query_err) {\n return (\n \n

Transaction not available - 404

\n

\n Transaction with ID {txId} not found.\n

\n
\n );\n }\n return \n }\n}","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n// import {resolveBase58ConflictID} from \"../utils/conflict\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n txId: string;\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransactionMetadata extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTransactionMetadata(this.props.txId);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let { txId } = this.props;\n let { query_err, txMetadata } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Metadata

\n

Metadata for transaction ID {txId} not found.

\n
\n );\n }\n return (\n
\n

Metadata

\n {txMetadata && \n \n ConflictIDs: \n \n { \n txMetadata.conflictIDs && txMetadata.conflictIDs.map((value, index) => {\n return (\n \n {value}\n \n )\n })\n }\n \n \n Booked: {txMetadata.booked.toString()}\n {/* Booked time: {new Date(txMetadata.bookedTime * 1000).toLocaleString()} */}\n Confirmation State: {txMetadata.confirmationState}\n {/* Confirmation State Time: {new Date(txMetadata.confirmationStateTime * 1000).toLocaleString()} */}\n }\n
\n )\n }\n}\n","import * as React from 'react';\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n txId: string\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerTransactionAttachments extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getTransactionAttachments(this.props.txId);\n }\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let { txAttachments } = this.props.explorerStore;\n return (\n
\n

Attachments

\n {txAttachments && txAttachments.blockIDs && \n \n \n {txAttachments.blockIDs.map((blkId, i) => {\n return {blkId}\n })}\n \n \n }\n
\n )\n }\n}","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport { ExplorerTransaction } from \"./ExplorerTransaction\"\nimport { ExplorerTransactionMetadata } from \"./ExplorerTransactionMetadata\"\nimport { ExplorerTransactionAttachments } from \"./ExplorerTransactionAttachments\"\n\n\ninterface Props {\n match?: {\n params: {\n id: string,\n }\n }\n}\n\nexport class ExplorerTransactionQueryResult extends React.Component {\n render() {\n let { id } = this.props.match.params;\n return (\n \n \n \n \n \n )\n }\n}","export enum ConfirmationState {\n Undefined = 0,\n Rejected,\n Pending,\n Accepted,\n Confirmed,\n}\n\nexport function resolveConfirmationState(sigType: number) {\n switch (sigType) {\n case ConfirmationState.Undefined:\n return \"Undefined\";\n case ConfirmationState.Rejected:\n return \"Rejected\";\n case ConfirmationState.Pending:\n return \"Pending\";\n case ConfirmationState.Accepted:\n return \"Accepted\";\n case ConfirmationState.Confirmed:\n return \"Confirmed\";\n default:\n return \"Undefined Confirmation State\";\n }\n}\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport Badge from \"react-bootstrap/Badge\";\nimport {Link} from 'react-router-dom';\nimport {displayManaUnit} from \"../utils\";\nimport {resolveBase58ConflictID} from \"../utils/conflict\";\nimport {outputToComponent} from \"../utils/output\";\nimport {resolveConfirmationState} from \"../utils/confirmation_state\";\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n match?: {\n params: {\n id: string,\n }\n }\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerOutputQueryResult extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getOutput(this.props.match.params.id);\n this.props.explorerStore.getPendingMana(this.props.match.params.id);\n this.props.explorerStore.getOutputMetadata(this.props.match.params.id);\n this.props.explorerStore.getOutputConsumers(this.props.match.params.id);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let {id} = this.props.match.params;\n let { query_err, output, pendingMana, outputMetadata, outputConsumers } = this.props.explorerStore;\n\n let renderTriBool = (val: string) => {\n if (val === \"true\"){\n return True\n }\n if (val === \"false\"){\n return False\n }\n return Maybe\n }\n\n if (query_err) {\n return (\n \n

Output not found - 404

\n {id}\n
\n );\n }\n return (\n \n

Output

\n {output &&
\n {outputToComponent(output)}\n \n {pendingMana && \n Pending Mana\n
\n
Value: {displayManaUnit(pendingMana.mana)}
\n
Timestamp: {new Date(pendingMana.timestamp * 1000).toLocaleString()}
\n
}\n
\n
}\n\n

Metadata

\n {outputMetadata &&
\n \n Transaction ID: {outputMetadata.outputID.transactionID} \n ConflictIDs: \n \n {\n outputMetadata.conflictIDs.map((value, index) => {\n return (\n \n \n {resolveBase58ConflictID(value)}\n \n \n )\n })\n }\n \n Consumer Count: {outputMetadata.consumerCount}\n Confirmed Consumer: {outputMetadata.confirmedConsumer} \n Confirmation State: {resolveConfirmationState(outputMetadata.confirmationState)}\n Confirmation State Time: {new Date(outputMetadata.confirmationStateTime * 1000).toLocaleString()}\n \n
}\n\n

Consumers

\n {outputConsumers &&
\n \n {outputConsumers.consumers.map((c,i) => \n
Transaction ID: {c.transactionID}
\n
Valid: {renderTriBool(c.valid)}
\n
)}\n
\n
}\n
\n )\n }\n}\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport NodeStore from \"../stores/NodeStore\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport {resolveBase58ConflictID} from \"../utils/conflict\";\nimport {resolveConfirmationState} from \"../utils/confirmation_state\";\n\n\ninterface Props {\n nodeStore?: NodeStore;\n explorerStore?: ExplorerStore;\n match?: {\n params: {\n id: string,\n }\n }\n}\n\n@inject(\"nodeStore\")\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerConflictQueryResult extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getConflict(this.props.match.params.id);\n this.props.explorerStore.getConflictChildren(this.props.match.params.id);\n this.props.explorerStore.getConflictConflicts(this.props.match.params.id);\n this.props.explorerStore.getConflictVoters(this.props.match.params.id);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n render() {\n let {id} = this.props.match.params;\n let { query_err, conflict, conflictChildren, conflictConflicts, conflictVoters } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Conflict not found - 404

\n {id}\n
\n );\n }\n return (\n \n

Conflict

\n {conflict && \n ID: {resolveBase58ConflictID(conflict.id)}\n Parents:\n \n {conflict.parents.map((p,i) => {resolveBase58ConflictID(p)})}\n \n \n {Conflicts:\n {conflict.conflictIDs && \n {conflict.conflictIDs.map((c,i) => {c})}\n }\n }\n ConfirmationState: {resolveConfirmationState(conflict.confirmationState)}\n Children:\n {conflictChildren && \n {conflictChildren.childConflicts.map((c,i) => {resolveBase58ConflictID(c.conflictID)})}\n }\n \n { Conflicts:\n {conflictConflicts && \n {conflictConflicts.conflicts.map((c,i) =>
\n OutputID: {c.outputID.base58}\n \n {c.conflictIDs.map((b,j) => \n {resolveBase58ConflictID(b)}\n )}\n \n
)}\n
}\n
}\n Voters:\n {conflictVoters && \n {conflictVoters.voters.map((s,i) => {s})}\n }\n \n
}\n
\n )\n }\n}\n","import { SlotStore } from '../stores/SlotStore';\nimport {inject, observer} from \"mobx-react\";\nimport NodeStore from '../stores/NodeStore';\nimport * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport { Table } from 'react-bootstrap';\n\ninterface Props {\n history: any;\n nodeStore?: NodeStore;\n slotStore?: SlotStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"slotStore\")\n@observer\nexport class SlotLiveFeed extends React.Component {\n render() {\n let {slotLiveFeed} = this.props.slotStore;\n return (\n \n

Slots

\n \n \n \n \n \n \n \n \n {slotLiveFeed}\n \n
IndexCommitment ID
\n
\n );\n }\n}\n","import * as React from 'react';\nimport Container from \"react-bootstrap/Container\";\nimport { inject, observer } from \"mobx-react\";\nimport ExplorerStore from \"../stores/ExplorerStore\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport { Card, Col, Row, Table } from 'react-bootstrap';\n\n\ninterface Props {\n explorerStore?: ExplorerStore;\n match?: {\n params: {\n commitment: string,\n }\n }\n}\n\n@inject(\"explorerStore\")\n@observer\nexport class ExplorerSlotQueryResult extends React.Component {\n componentDidMount() {\n const id = this.props.match.params.commitment;\n this.props.explorerStore.getSlotDetails(id);\n }\n\n componentWillUnmount() {\n this.props.explorerStore.reset();\n }\n\n render() {\n let {commitment} = this.props.match.params;\n let { query_err, slotInfo } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Slot not found - 404

\n {commitment}\n
\n );\n }\n return (\n \n

Slot

\n {slotInfo && \n ID: {commitment}\n Index: {slotInfo.index}\n RootsID: {slotInfo.rootsID}\n PrevEC: {slotInfo.prevID}\n Cumulative Weight: {slotInfo.cumulativeWeight}\n Blocks:\n {slotInfo.blocks && \n \n \n \n \n \n {slotInfo.blocks.map((b,i) => {b})}\n \n
\n \n
\n
\n
}\n
\n Transactions:\n {slotInfo.transactions && \n \n \n \n \n \n {slotInfo.transactions.map((t,i) => {t})}\n \n
\n \n
\n
\n
}\n
\n Created outputs:\n {slotInfo.createdOutputs && \n \n \n \n \n \n {slotInfo.createdOutputs.map((c,i) => {c})}\n \n
\n \n
\n
\n
}\n
\n Spent outputs:\n {slotInfo.spentOutputs && \n \n \n \n \n \n {slotInfo.spentOutputs.map((s,i) => {s})}\n \n
\n \n
\n
\n
}\n
\n
}\n
\n )\n }\n}\n","import * as React from 'react';\nimport {inject, observer} from \"mobx-react\";\nimport NodeStore from \"../stores/NodeStore\";\nimport Navbar from \"react-bootstrap/Navbar\";\nimport Nav from \"react-bootstrap/Nav\";\nimport {Dashboard} from \"./Dashboard\";\nimport Badge from \"react-bootstrap/Badge\";\nimport {RouterStore} from 'mobx-react-router';\nimport {Explorer} from \"./Explorer\";\nimport {NavExplorerSearchbar} from \"./NavExplorerSearchbar\";\nimport {Redirect, Route, Switch} from 'react-router-dom';\nimport {LinkContainer} from 'react-router-bootstrap';\nimport {ExplorerBlockQueryResult} from \"./ExplorerBlockQueryResult\";\nimport {ExplorerAddressQueryResult} from \"./ExplorerAddressResult\";\nimport {Explorer404} from \"./Explorer404\";\nimport {Neighbors} from \"./Neighbors\";\nimport {Visualizer} from \"./Visualizer\";\nimport {Tips} from \"./Tips\";\nimport {ExplorerTransactionQueryResult} from \"./ExplorerTransactionQueryResult\";\nimport {ExplorerOutputQueryResult} from \"./ExplorerOutputQueryResult\";\nimport {ExplorerConflictQueryResult} from \"./ExplorerConflictQueryResult\";\nimport { SlotLiveFeed } from './SlotLiveFeed';\nimport { ExplorerSlotQueryResult } from './ExplorerSlotQueryResult';\n\ninterface Props {\n history: any;\n routerStore?: RouterStore;\n nodeStore?: NodeStore;\n}\n\n@inject(\"nodeStore\")\n@inject(\"routerStore\")\n@observer\nexport class Root extends React.Component {\n renderDevTool() {\n if (process.env.NODE_ENV !== 'production') {\n const DevTools = require('mobx-react-devtools').default;\n return ;\n }\n }\n\n componentDidMount(): void {\n this.props.nodeStore.connect();\n }\n\n render() {\n return (\n
\n \n iota-core\n \n \n \n \n {!this.props.nodeStore.websocketConnected &&\n WS not connected!\n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.props.children}\n {this.renderDevTool()}\n
\n );\n }\n}\n","import * as React from 'react';\nimport {hot} from 'react-hot-loader/root';\nimport {Root} from './components/Root';\n\n// render react DOM\nexport const App = hot(({history}) => );\n","import {action, computed, observable, ObservableMap} from 'mobx';\r\nimport * as dateformat from 'dateformat';\r\nimport {connectWebSocket, registerHandler, unregisterHandler, WSMsgType} from \"../misc/WS\";\r\n\r\nclass BPSMetric {\r\n mps: number;\r\n ts: string;\r\n}\r\n\r\nclass Status {\r\n id: string;\r\n version: string;\r\n uptime: number;\r\n mem: MemoryMetrics = new MemoryMetrics();\r\n tangleTime: TangleTime;\r\n scheduler: SchedulerMetric = new SchedulerMetric();\r\n}\r\n\r\nclass TangleTime {\r\n synced: boolean;\r\n bootstrapped: boolean;\r\n ATT: number;\r\n RATT: number;\r\n CTT: number;\r\n RCTT: number;\r\n acceptedBlockID: string;\r\n confirmedBlockID: string;\r\n confirmedSlot: number;\r\n committedSlot: number;\r\n}\r\n\r\nclass MemoryMetrics {\r\n heap_sys: number;\r\n heap_alloc: number;\r\n heap_idle: number;\r\n heap_released: number;\r\n heap_objects: number;\r\n last_pause_gc: number;\r\n num_gc: number;\r\n ts: string;\r\n}\r\n\r\nclass TipsMetric {\r\n totaltips: number;\r\n ts: string;\r\n}\r\n\r\nclass NetworkIO {\r\n tx: number;\r\n rx: number;\r\n ts: string;\r\n}\r\n\r\nclass RateSetterMetric {\r\n size: number;\r\n estimate: string;\r\n rate: number;\r\n ts: string;\r\n}\r\n\r\nclass SchedulerMetric {\r\n running: number;\r\n rate: string;\r\n maxBufferSize: number;\r\n currentBufferSize: number;\r\n deficit: number;\r\n ts: string;\r\n\r\n}\r\n\r\nclass NeighborMetrics {\r\n @observable collected: Array = [];\r\n @observable network_io: Array = [];\r\n\r\n addMetric(metric: NeighborMetric) {\r\n metric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.collected.push(metric);\r\n if (this.collected.length > maxMetricsDataPoints) {\r\n this.collected.shift();\r\n }\r\n let netIO = this.currentNetIO;\r\n if (netIO) {\r\n if (this.network_io.length > maxMetricsDataPoints) {\r\n this.network_io.shift();\r\n }\r\n this.network_io.push(netIO);\r\n }\r\n }\r\n\r\n get current() {\r\n return this.collected[this.collected.length - 1];\r\n }\r\n\r\n get secondLast() {\r\n let index = this.collected.length - 2;\r\n if (index < 0) {\r\n return\r\n }\r\n return this.collected[index];\r\n }\r\n\r\n get currentNetIO(): NetworkIO {\r\n if (this.current && this.secondLast) {\r\n return {\r\n tx: this.current.packets_written - this.secondLast.packets_written,\r\n rx: this.current.packets_read - this.secondLast.packets_read,\r\n ts: dateformat(new Date(), \"HH:MM:ss\"),\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n @computed\r\n get netIOSeries() {\r\n let tx = Object.assign({}, chartSeriesOpts,\r\n series(\"Tx\", 'rgba(53, 180, 219,1)', 'rgba(53, 180, 219,0.4)')\r\n );\r\n let rx = Object.assign({}, chartSeriesOpts,\r\n series(\"Rx\", 'rgba(235, 134, 52)', 'rgba(235, 134, 52,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.network_io.length; i++) {\r\n let metric: NetworkIO = this.network_io[i];\r\n labels.push(metric.ts);\r\n tx.data.push(metric.tx);\r\n rx.data.push(-metric.rx);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [tx, rx],\r\n };\r\n }\r\n}\r\n\r\nclass NeighborMetric {\r\n id: string;\r\n address: string;\r\n connection_origin: number;\r\n packets_read: number;\r\n packets_written: number;\r\n ts: number;\r\n}\r\n\r\nclass ComponentCounterMetric {\r\n store: number;\r\n solidifier: number;\r\n scheduler: number;\r\n booker: number;\r\n ts: number;\r\n}\r\n\r\nconst chartSeriesOpts = {\r\n label: \"Incoming\", data: [],\r\n fill: true,\r\n lineTension: 0,\r\n backgroundColor: 'rgba(58, 60, 171,0.4)',\r\n borderWidth: 1,\r\n borderColor: 'rgba(58, 60, 171,1)',\r\n borderCapStyle: 'butt',\r\n borderDash: [],\r\n borderDashOffset: 0.0,\r\n borderJoinStyle: 'miter',\r\n pointBorderColor: 'rgba(58, 60, 171,1)',\r\n pointBackgroundColor: '#fff',\r\n pointBorderWidth: 1,\r\n pointHoverBackgroundColor: 'rgba(58, 60, 171,1)',\r\n pointHoverBorderColor: 'rgba(220,220,220,1)',\r\n pointHoverBorderWidth: 2,\r\n pointRadius: 0,\r\n pointHitRadius: 20,\r\n pointHoverRadius: 5,\r\n};\r\n\r\nfunction series(name: string, color: string, bgColor: string) {\r\n return {\r\n label: name, data: [],\r\n backgroundColor: bgColor,\r\n borderColor: color,\r\n pointBorderColor: color,\r\n pointHoverBackgroundColor: color,\r\n pointHoverBorderColor: 'rgba(220,220,220,1)',\r\n }\r\n}\r\n\r\nconst statusWebSocketPath = \"/ws\";\r\n\r\nconst maxMetricsDataPoints = 900;\r\n\r\nexport class NodeStore {\r\n @observable status: Status = new Status();\r\n @observable websocketConnected: boolean = false;\r\n @observable last_mps_metric: BPSMetric = new BPSMetric();\r\n @observable collected_mps_metrics: Array = [];\r\n @observable collected_rate_setter_metrics: Array = [];\r\n @observable last_rate_setter_metric: RateSetterMetric = new RateSetterMetric();\r\n @observable collected_scheduler_metrics: Array = [];\r\n @observable collected_mem_metrics: Array = [];\r\n @observable neighbor_metrics = new ObservableMap();\r\n @observable last_tips_metric: TipsMetric = new TipsMetric();\r\n @observable collected_tips_metrics: Array = [];\r\n @observable last_component_counter_metric: ComponentCounterMetric = new ComponentCounterMetric();\r\n @observable collected_component_counter_metrics: Array = [];\r\n @observable collecting: boolean = true;\r\n\r\n constructor() {\r\n this.status.tangleTime = new TangleTime;\r\n this.status.tangleTime.ATT = 0;\r\n this.status.tangleTime.RATT = 0;\r\n this.status.tangleTime.CTT = 0;\r\n this.status.tangleTime.RCTT = 0;\r\n this.registerHandlers();\r\n }\r\n\r\n registerHandlers = () => {\r\n registerHandler(WSMsgType.Status, this.updateStatus);\r\n registerHandler(WSMsgType.BPSMetrics, (mps: number) => {\r\n this.addBPSMetric(this.updateLastBPSMetric(mps));\r\n });\r\n registerHandler(WSMsgType.NeighborStats, this.updateNeighborMetrics);\r\n registerHandler(WSMsgType.TipsMetrics, this.updateLastTipsMetric);\r\n registerHandler(WSMsgType.ComponentCounterMetrics, this.updateLastComponentMetric);\r\n registerHandler(WSMsgType.RateSetter, this.updateLastRateSetterMetric)\r\n\r\n this.updateCollecting(true);\r\n }\r\n\r\n unregisterHandlers = () => {\r\n unregisterHandler(WSMsgType.Status);\r\n unregisterHandler(WSMsgType.BPSMetrics);\r\n unregisterHandler(WSMsgType.NeighborStats);\r\n unregisterHandler(WSMsgType.TipsMetrics);\r\n unregisterHandler(WSMsgType.ComponentCounterMetrics);\r\n unregisterHandler(WSMsgType.RateSetter);\r\n this.updateCollecting(false);\r\n }\r\n\r\n @action\r\n updateCollecting = (collecting: boolean) => {\r\n this.collecting = collecting;\r\n }\r\n\r\n @action\r\n reset() {\r\n this.collected_mps_metrics = [];\r\n this.collected_mem_metrics = [];\r\n this.collected_scheduler_metrics = [];\r\n this.neighbor_metrics = new ObservableMap();\r\n this.collected_tips_metrics = [];\r\n this.collected_component_counter_metrics = [];\r\n }\r\n\r\n reconnect() {\r\n this.updateWebSocketConnected(false);\r\n setTimeout(() => {\r\n this.connect();\r\n }, 5000);\r\n }\r\n\r\n connect() {\r\n connectWebSocket(statusWebSocketPath,\r\n () => this.updateWebSocketConnected(true),\r\n () => this.reconnect(),\r\n () => this.updateWebSocketConnected(false))\r\n }\r\n\r\n @action\r\n updateWebSocketConnected = (connected: boolean) => this.websocketConnected = connected;\r\n\r\n @action\r\n updateStatus = (status: Status) => {\r\n status.mem.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n if (this.collected_mem_metrics.length > maxMetricsDataPoints) {\r\n this.collected_mem_metrics.shift();\r\n }\r\n this.collected_mem_metrics.push(status.mem);\r\n this.status = status;\r\n\r\n status.scheduler.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n if (this.collected_scheduler_metrics.length > maxMetricsDataPoints) {\r\n this.collected_scheduler_metrics.shift();\r\n }\r\n this.collected_scheduler_metrics.push(status.scheduler);\r\n };\r\n\r\n\r\n @action\r\n updateNeighborMetrics = (neighborMetrics: Array) => {\r\n if (!neighborMetrics) {\r\n return;\r\n }\r\n let updated = [];\r\n for (let i = 0; i < neighborMetrics.length; i++) {\r\n let metric = neighborMetrics[i];\r\n let neighbMetrics: NeighborMetrics = this.neighbor_metrics.get(metric.id);\r\n if (!neighbMetrics) {\r\n neighbMetrics = new NeighborMetrics();\r\n }\r\n neighbMetrics.addMetric(metric);\r\n this.neighbor_metrics.set(metric.id, neighbMetrics);\r\n updated.push(metric.id);\r\n }\r\n // remove duplicates\r\n for (const k of this.neighbor_metrics.keys()) {\r\n if (!updated.includes(k)) {\r\n this.neighbor_metrics.delete(k);\r\n }\r\n }\r\n };\r\n\r\n @action\r\n updateLastRateSetterMetric = (metric: RateSetterMetric) => {\r\n metric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_rate_setter_metric = metric;\r\n if (this.collected_rate_setter_metrics.length > maxMetricsDataPoints) {\r\n this.collected_rate_setter_metrics.shift();\r\n }\r\n this.collected_rate_setter_metrics.push(metric);\r\n };\r\n\r\n @action\r\n updateLastBPSMetric = (mps: number) => {\r\n let mpsMetric = new BPSMetric();\r\n mpsMetric.mps = mps;\r\n mpsMetric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_mps_metric = mpsMetric;\r\n return mpsMetric;\r\n };\r\n\r\n @action\r\n addBPSMetric = (metric: BPSMetric) => {\r\n if (this.collected_mps_metrics.length > maxMetricsDataPoints) {\r\n this.collected_mps_metrics.shift();\r\n }\r\n this.collected_mps_metrics.push(metric);\r\n }\r\n\r\n @action\r\n updateLastTipsMetric = (tipsMetric: TipsMetric) => {\r\n tipsMetric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_tips_metric = tipsMetric;\r\n if (this.collected_tips_metrics.length > maxMetricsDataPoints) {\r\n this.collected_tips_metrics.shift();\r\n }\r\n this.collected_tips_metrics.push(tipsMetric);\r\n };\r\n\r\n @action\r\n updateLastComponentMetric = (componentCounterMetric: ComponentCounterMetric) => {\r\n componentCounterMetric.ts = dateformat(Date.now(), \"HH:MM:ss\");\r\n this.last_component_counter_metric = componentCounterMetric;\r\n if (this.collected_component_counter_metrics.length > maxMetricsDataPoints) {\r\n this.collected_component_counter_metrics.shift()\r\n }\r\n this.collected_component_counter_metrics.push(componentCounterMetric);\r\n };\r\n\r\n @computed\r\n get mpsSeries() {\r\n let mps = Object.assign({}, chartSeriesOpts,\r\n series(\"BPS\", 'rgba(67, 196, 99,1)', 'rgba(67, 196, 99,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_mps_metrics.length; i++) {\r\n let metric: BPSMetric = this.collected_mps_metrics[i];\r\n labels.push(metric.ts);\r\n mps.data.push(metric.mps);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [mps],\r\n };\r\n }\r\n\r\n @computed\r\n get tipsSeries() {\r\n let totaltips = Object.assign({}, chartSeriesOpts,\r\n series(\"All tips\", 'rgba(67, 196, 99,1)', 'rgba(67, 196, 99,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_tips_metrics.length; i++) {\r\n let metric: TipsMetric = this.collected_tips_metrics[i];\r\n labels.push(metric.ts);\r\n totaltips.data.push(metric.totaltips);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [totaltips],\r\n };\r\n }\r\n\r\n @computed\r\n get componentSeries() {\r\n let stored = Object.assign({}, chartSeriesOpts,\r\n series(\"stored\", 'rgba(209,165,253,1)', 'rgba(209,165,253,0.4)')\r\n );\r\n let solidified = Object.assign({}, chartSeriesOpts,\r\n series(\"solidified\", 'rgba(165,209,253,1)', 'rgba(165,209,253,0.4)')\r\n );\r\n let scheduled = Object.assign({}, chartSeriesOpts,\r\n series(\"scheduled\", 'rgba(182, 141, 64,1)', 'rgba(182, 141, 64,0.4)')\r\n );\r\n let booked = Object.assign({}, chartSeriesOpts,\r\n series(\"booked\", 'rgba(5, 68, 94,1)', 'rgba(5, 68, 94,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_component_counter_metrics.length; i++) {\r\n let metric: ComponentCounterMetric = this.collected_component_counter_metrics[i];\r\n labels.push(metric.ts);\r\n stored.data.push(metric.store);\r\n solidified.data.push(metric.solidifier);\r\n scheduled.data.push(metric.scheduler);\r\n booked.data.push(metric.booker);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [stored, solidified, scheduled, booked],\r\n };\r\n }\r\n\r\n @computed\r\n get bufferSizeSeries() {\r\n let bufferSize = Object.assign({}, chartSeriesOpts,\r\n series(\"buffer size\", 'rgba(209,165,253,1)', 'rgba(209,165,253,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_scheduler_metrics.length; i++) {\r\n let metric: SchedulerMetric = this.collected_scheduler_metrics[i];\r\n labels.push(metric.ts);\r\n bufferSize.data.push(metric.currentBufferSize);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [bufferSize],\r\n };\r\n }\r\n\r\n @computed\r\n get deficitSeries() {\r\n let deficit = Object.assign({}, chartSeriesOpts,\r\n series(\"deficit\", 'rgba(182, 141, 64,1)', 'rgba(182, 141, 64,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_scheduler_metrics.length; i++) {\r\n let metric: SchedulerMetric = this.collected_scheduler_metrics[i];\r\n labels.push(metric.ts);\r\n deficit.data.push(metric.deficit);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [deficit],\r\n };\r\n }\r\n\r\n @computed\r\n get neighborsSeries() {\r\n return {};\r\n }\r\n\r\n @computed\r\n get uptime() {\r\n let day, hour, minute, seconds;\r\n seconds = Math.floor(this.status.uptime / 1000);\r\n minute = Math.floor(seconds / 60);\r\n seconds = seconds % 60;\r\n hour = Math.floor(minute / 60);\r\n minute = minute % 60;\r\n day = Math.floor(hour / 24);\r\n hour = hour % 24;\r\n let str = \"\";\r\n if (day == 1) {\r\n str += day + \" Day, \";\r\n }\r\n if (day > 1) {\r\n str += day + \" Days, \";\r\n }\r\n if (hour >= 0) {\r\n if (hour < 10) {\r\n str += \"0\" + hour + \":\";\r\n } else {\r\n str += hour + \":\";\r\n }\r\n }\r\n if (minute >= 0) {\r\n if (minute < 10) {\r\n str += \"0\" + minute + \":\";\r\n } else {\r\n str += minute + \":\";\r\n }\r\n }\r\n if (seconds >= 0) {\r\n if (seconds < 10) {\r\n str += \"0\" + seconds;\r\n } else {\r\n str += seconds;\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n @computed\r\n get memSeries() {\r\n let heapSys = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Sys\", 'rgba(168, 50, 76,1)', 'rgba(168, 50, 76,0.4)')\r\n );\r\n let heapAlloc = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Alloc\", 'rgba(222, 49, 87,1)', 'rgba(222, 49, 87,0.4)')\r\n );\r\n let heapIdle = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Idle\", 'rgba(222, 49, 182,1)', 'rgba(222, 49, 182,0.4)')\r\n );\r\n let heapReleased = Object.assign({}, chartSeriesOpts,\r\n series(\"Heap Released\", 'rgba(250, 76, 252,1)', 'rgba(250, 76, 252,0.4)')\r\n );\r\n\r\n let labels = [];\r\n for (let i = 0; i < this.collected_mem_metrics.length; i++) {\r\n let metric = this.collected_mem_metrics[i];\r\n labels.push(metric.ts);\r\n heapSys.data.push(metric.heap_sys);\r\n heapAlloc.data.push(metric.heap_alloc);\r\n heapIdle.data.push(metric.heap_idle);\r\n heapReleased.data.push(metric.heap_released);\r\n }\r\n\r\n return {\r\n labels: labels,\r\n datasets: [heapSys, heapAlloc, heapIdle, heapReleased],\r\n };\r\n }\r\n}\r\n\r\nexport default NodeStore;\r\n","import {action, observable} from 'mobx';\r\nimport {RouterStore} from \"mobx-react-router\";\r\n\r\nclass SendResult {\r\n BlkId: string;\r\n}\r\n\r\nenum QueryError {\r\n NotFound\r\n}\r\n\r\nexport class FaucetStore {\r\n // send request to faucet\r\n @observable send_addr: string = \"\";\r\n @observable send_access_mana_node_id: string = \"\";\r\n @observable send_consensus_mana_node_id: string = \"\";\r\n @observable sending: boolean = false;\r\n @observable sendResult: SendResult = null;\r\n @observable query_error: string = \"\";\r\n\r\n routerStore: RouterStore;\r\n\r\n constructor(routerStore: RouterStore) {\r\n this.routerStore = routerStore;\r\n }\r\n\r\n sendReq = async () => {\r\n this.updateSending(true);\r\n try {\r\n // send request\r\n let res = await fetch(`/api/faucet/${this.send_addr}?accessMana=${this.send_access_mana_node_id}&consensusMana=${this.send_consensus_mana_node_id}`);\r\n if (res.status !== 200) {\r\n this.updateQueryError(QueryError.NotFound);\r\n return;\r\n }\r\n let result: SendResult = await res.json();\r\n setTimeout(() => {\r\n this.updateSendResult(result);\r\n }, 2000);\r\n } catch (err) {\r\n this.updateQueryError(err);\r\n }\r\n };\r\n\r\n @action\r\n updateSendResult = (result: SendResult) => {\r\n this.sending = false;\r\n this.sendResult = result;\r\n this.routerStore.history.push(`/explorer/address/${this.send_addr}`);\r\n };\r\n\r\n @action\r\n updateSend = (send_addr: string) => {\r\n this.send_addr = send_addr;\r\n };\r\n\r\n @action\r\n updateSendAccessManaNodeID = (access_mana: string) => {\r\n this.send_access_mana_node_id = access_mana;\r\n }\r\n\r\n @action\r\n updateSendConsensusManaNodeID = (consensus_mana: string) => {\r\n this.send_consensus_mana_node_id = consensus_mana;\r\n }\r\n\r\n @action\r\n updateSending = (sending: boolean) => {\r\n this.sending = sending;\r\n this.query_error = \"\";\r\n };\r\n\r\n @action\r\n reset = () => {\r\n this.send_addr = null;\r\n this.send_access_mana_node_id = \"\";\r\n this.send_consensus_mana_node_id = \"\";\r\n this.sending = false;\r\n this.query_error = \"\";\r\n };\r\n\r\n @action\r\n updateQueryError = (err: any) => {\r\n this.sending = false;\r\n this.query_error = err;\r\n };\r\n}\r\n\r\nexport default FaucetStore;\r\n","import { action, observable, ObservableMap } from 'mobx';\r\nimport { registerHandler, WSMsgType } from \"../misc/WS\";\r\nimport { RouterStore } from \"mobx-react-router\";\r\nimport { default as Viva } from 'vivagraphjs';\r\nimport { Block } from './ExplorerStore';\r\n\r\nexport class Vertex {\r\n id: string;\r\n strongParents: Array;\r\n weakParents: Array;\r\n shallowLikedParents: Array;\r\n is_tip: boolean;\r\n is_blk_confirmed: boolean;\r\n is_tx_accepted: boolean;\r\n is_tx: boolean;\r\n}\r\n\r\nexport class TipInfo {\r\n id: string;\r\n is_tip: boolean;\r\n}\r\n\r\nclass history {\r\n vertices: Array;\r\n}\r\n\r\nconst COLOR = {\r\n BlockPending: \"#b9b7bd\",\r\n BlockConfirmed: \"#6c71c4\",\r\n TransactionPending: \"#393e46\",\r\n TransactionConfirmed: \"#fad02c\",\r\n Tip: \"#cb4b16\",\r\n Unknown: \"#b58900\",\r\n Line: \"#586e75\",\r\n SelectedPastConeLine: \"#e105f5\",\r\n SelectedFutureConeLine: \"#51e05d\",\r\n Selected: \"#859900\"\r\n}\r\n\r\nconst vertexSize = 20;\r\n\r\nexport class VisualizerStore {\r\n @observable vertices = new ObservableMap();\r\n @observable verticesLimit = 1500;\r\n @observable finalized_count = 0;\r\n @observable tips_count = 0;\r\n verticesIncomingOrder = [];\r\n draw: boolean = false;\r\n routerStore: RouterStore;\r\n\r\n // the currently selected vertex via hover\r\n @observable selected: Vertex;\r\n selected_via_click: boolean = false;\r\n selected_origin_color: number = 0;\r\n\r\n // search\r\n @observable search: string = \"\";\r\n\r\n // viva graph objs\r\n graph;\r\n graphics;\r\n renderer;\r\n @observable paused: boolean = false;\r\n\r\n constructor(routerStore: RouterStore) {\r\n this.routerStore = routerStore;\r\n registerHandler(WSMsgType.Vertex, this.addVertex);\r\n registerHandler(WSMsgType.TipInfo, this.addTipInfo);\r\n registerHandler(WSMsgType.TXAccepted, this.updateTxStatus);\r\n // this.fetchHistory();\r\n }\r\n\r\n fetchHistory = async () => {\r\n try {\r\n let res = await fetch(`/api/visualizer/history`);\r\n let history: history = await res.json();\r\n history.vertices.forEach(v => {\r\n this.addVertex(v);\r\n });\r\n } catch (err) {\r\n console.log(\"Fail to fetch history in visualizer\", err);\r\n }\r\n return\r\n }\r\n\r\n @action\r\n updateSearch = (search: string) => {\r\n this.search = search.trim();\r\n }\r\n\r\n @action\r\n searchAndHighlight = () => {\r\n this.clearSelected();\r\n if (!this.search) return;\r\n let iter: IterableIterator = this.vertices.keys();\r\n let found = null;\r\n for (const key of iter) {\r\n if (key.indexOf(this.search) >= 0) {\r\n found = key;\r\n break;\r\n }\r\n }\r\n if (!found) return;\r\n this.updateSelected(this.vertices.get(found), false);\r\n }\r\n\r\n @action\r\n pauseResume = () => {\r\n if (this.paused) {\r\n this.renderer.resume();\r\n this.paused = false;\r\n return;\r\n }\r\n this.renderer.pause();\r\n this.paused = true;\r\n }\r\n\r\n @action\r\n updateVerticesLimit = (num: number) => {\r\n this.verticesLimit = num;\r\n }\r\n\r\n @action\r\n updateTxStatus = (vert: Vertex) => { \r\n let existing = this.vertices.get(vert.id);\r\n if (!existing) {\r\n return\r\n }\r\n\r\n existing.is_tx_accepted = vert.is_tx_accepted;\r\n this.vertices.set(vert.id, existing);\r\n\r\n if (this.draw) {\r\n this.drawVertex(existing);\r\n }\r\n }\r\n\r\n @action\r\n addVertex = (vert: Vertex) => {\r\n let existing = this.vertices.get(vert.id);\r\n if (existing) {\r\n if (!existing.is_blk_confirmed && vert.is_blk_confirmed) {\r\n this.finalized_count++;\r\n }\r\n } else {\r\n if (vert.is_blk_confirmed) {\r\n this.finalized_count++;\r\n }\r\n this.verticesIncomingOrder.push(vert.id);\r\n this.checkLimit();\r\n }\r\n\r\n this.vertices.set(vert.id, vert);\r\n\r\n if (this.draw) {\r\n this.drawVertex(vert);\r\n }\r\n };\r\n\r\n @action\r\n addTipInfo = async (tipInfo: TipInfo) => {\r\n let v = this.vertices.get(tipInfo.id);\r\n if (!v) {\r\n v = new Vertex();\r\n v.id = tipInfo.id;\r\n\r\n // first seen as tip, get parents info\r\n let res = await fetch(`/api/block/${tipInfo.id}`);\r\n if (res.status === 200) {\r\n let blk: Block = await res.json();\r\n v.strongParents = blk.strongParents;\r\n v.weakParents = blk.weakParents;\r\n v.shallowLikedParents = blk.shallowLikedParents;\r\n v.is_blk_confirmed = blk.acceptance;\r\n }\r\n this.verticesIncomingOrder.push(v.id);\r\n }\r\n\r\n this.tips_count += tipInfo.is_tip ? 1 : v.is_tip ? -1 : 0;\r\n v.is_tip = tipInfo.is_tip;\r\n this.vertices.set(tipInfo.id, v);\r\n\r\n if (this.draw) {\r\n this.drawVertex(v);\r\n }\r\n };\r\n\r\n @action\r\n checkLimit = () => {\r\n while (this.verticesIncomingOrder.length > this.verticesLimit) {\r\n let deleteId = this.verticesIncomingOrder.shift();\r\n let vert = this.vertices.get(deleteId);\r\n // make sure we remove any markings if the vertex gets deleted\r\n if (this.selected && deleteId === this.selected.id) {\r\n this.clearSelected();\r\n }\r\n if (this.draw) {\r\n this.graph.removeNode(deleteId);\r\n }\r\n if (!vert) {\r\n continue;\r\n }\r\n if (vert.is_blk_confirmed) {\r\n this.finalized_count--;\r\n }\r\n if (vert.is_tip) {\r\n this.tips_count--;\r\n }\r\n this.vertices.delete(deleteId);\r\n }\r\n }\r\n\r\n drawVertex = (vert: Vertex) => {\r\n let node = this.graph.getNode(vert.id);\r\n if (node) {\r\n // update coloring\r\n let nodeUI = this.graphics.getNodeUI(vert.id);\r\n nodeUI.color = parseColor(this.colorForVertexState(vert));\r\n } else {\r\n node = this.graph.addNode(vert.id, vert);\r\n }\r\n\r\n if (vert.strongParents) {\r\n this.linkParents(vert, node, vert.strongParents)\r\n }\r\n\r\n if (vert.weakParents) {\r\n this.linkParents(vert, node, vert.weakParents)\r\n }\r\n\r\n if (vert.shallowLikedParents) {\r\n this.linkParents(vert, node, vert.shallowLikedParents)\r\n }\r\n }\r\n\r\n linkParents = (vert: Vertex, node: any, parents: Array) => {\r\n parents.forEach((value) => {\r\n // if value is valid AND (links is empty OR there is no between parent and children)\r\n if (value && ((!node.links || !node.links.some(link => link.fromId === value)))) {\r\n // draw the link only when the parent exists\r\n let parent = this.graph.getNode(value);\r\n if (parent) {\r\n this.graph.addLink(value, vert.id);\r\n } else {\r\n console.log(\"link not added, parent doesn't exist\", value);\r\n }\r\n }\r\n })\r\n }\r\n\r\n colorForVertexState = (vert: Vertex) => {\r\n if (!vert) {\r\n return COLOR.Unknown;\r\n }\r\n\r\n // finalized\r\n if (vert.is_blk_confirmed) {\r\n if (vert.is_tx) {\r\n if (vert.is_tx_accepted) {\r\n return COLOR.TransactionConfirmed;\r\n } else {\r\n return COLOR.TransactionPending;\r\n } \r\n }\r\n return COLOR.BlockConfirmed;\r\n }\r\n\r\n if (vert.is_tip) {\r\n return COLOR.Tip;\r\n }\r\n\r\n // pending\r\n if (vert.is_tx) {\r\n return COLOR.TransactionPending\r\n }\r\n return COLOR.BlockPending;\r\n }\r\n\r\n start = () => {\r\n this.draw = true;\r\n this.graph = Viva.Graph.graph();\r\n\r\n let graphics: any = Viva.Graph.View.webglGraphics();\r\n\r\n const layout = Viva.Graph.Layout.forceDirected(this.graph, {\r\n springLength: 10,\r\n springCoeff: 0.0001,\r\n stableThreshold: 0.15,\r\n gravity: -2,\r\n dragCoeff: 0.02,\r\n timeStep: 20,\r\n theta: 0.8,\r\n });\r\n\r\n graphics.node((node) => {\r\n if (!node.data) {\r\n return Viva.Graph.View.webglSquare(10, this.colorForVertexState(node.data));\r\n }\r\n return Viva.Graph.View.webglSquare(vertexSize, this.colorForVertexState(node.data));\r\n })\r\n graphics.link(() => Viva.Graph.View.webglLine(COLOR.Line));\r\n let ele = document.getElementById('visualizer');\r\n this.renderer = Viva.Graph.View.renderer(this.graph, {\r\n container: ele, graphics, layout,\r\n });\r\n\r\n let events = Viva.Graph.webglInputEvents(graphics, this.graph);\r\n\r\n events.mouseEnter((node) => {\r\n this.clearSelected(true);\r\n this.updateSelected(node.data);\r\n }).mouseLeave((node) => {\r\n this.clearSelected(false);\r\n });\r\n\r\n events.click((node) => {\r\n this.clearSelected(true);\r\n this.updateSelected(node.data, true);\r\n });\r\n\r\n this.graphics = graphics;\r\n this.renderer.run();\r\n\r\n // draw vertices by order\r\n this.verticesIncomingOrder.forEach((id) => {\r\n let v = this.vertices.get(id);\r\n if (v) {\r\n this.drawVertex(v);\r\n }\r\n })\r\n }\r\n\r\n stop = () => {\r\n this.draw = false;\r\n this.renderer.dispose();\r\n this.graph = null;\r\n this.paused = false;\r\n this.selected = null;\r\n }\r\n\r\n @action\r\n updateSelected = (vert: Vertex, viaClick?: boolean) => {\r\n if (!vert) return;\r\n\r\n this.selected = vert;\r\n this.selected_via_click = !!viaClick;\r\n\r\n // mutate links\r\n let nodeUI = this.graphics.getNodeUI(vert.id);\r\n this.selected_origin_color = nodeUI.color\r\n nodeUI.color = parseColor(COLOR.Selected);\r\n nodeUI.size = vertexSize * 1.5;\r\n\r\n let node = this.graph.getNode(vert.id);\r\n const seenForward = [];\r\n const seenBackwards = [];\r\n dfsIterator(this.graph, node, node => {\r\n }, true,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.SelectedFutureConeLine);\r\n },\r\n seenBackwards\r\n );\r\n dfsIterator(this.graph, node, node => {\r\n }, false,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.SelectedPastConeLine);\r\n },\r\n seenForward\r\n );\r\n }\r\n\r\n resetLinks = () => {\r\n this.graph.forEachLink(function (link) {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.Line);\r\n });\r\n }\r\n\r\n @action\r\n clearSelected = (force_clear?: boolean) => {\r\n if (!this.selected || (this.selected_via_click && !force_clear)) {\r\n return;\r\n }\r\n\r\n // clear link highlight\r\n let node = this.graph.getNode(this.selected.id);\r\n if (!node) {\r\n // clear links\r\n this.resetLinks();\r\n return;\r\n }\r\n\r\n let nodeUI = this.graphics.getNodeUI(this.selected.id);\r\n nodeUI.color = this.selected_origin_color;\r\n nodeUI.size = vertexSize;\r\n\r\n const seenForward = [];\r\n const seenBackwards = [];\r\n dfsIterator(this.graph, node, node => {\r\n }, true,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.Line);\r\n },\r\n seenBackwards\r\n );\r\n dfsIterator(this.graph, node, node => {\r\n }, false,\r\n link => {\r\n const linkUI = this.graphics.getLinkUI(link.id);\r\n linkUI.color = parseColor(COLOR.Line);\r\n },\r\n seenForward\r\n );\r\n\r\n this.selected = null;\r\n this.selected_via_click = false;\r\n }\r\n\r\n}\r\n\r\nexport default VisualizerStore;\r\n\r\n// copied over and refactored from https://github.com/glumb/IOTAtangle\r\nfunction dfsIterator(graph, node, cb, up, cbLinks: any = false, seenNodes = []) {\r\n seenNodes.push(node);\r\n let pointer = 0;\r\n\r\n while (seenNodes.length > pointer) {\r\n const node = seenNodes[pointer++];\r\n\r\n if (cb(node)) return true;\r\n\r\n if (!node.links) {\r\n return\r\n }\r\n\r\n for (const link of node.links) {\r\n // parents\r\n if (!up && link.toId === node.id && !seenNodes.includes(graph.getNode(link.fromId))) {\r\n if (cbLinks) cbLinks(link);\r\n seenNodes.push(graph.getNode(link.fromId));\r\n continue;\r\n }\r\n\r\n // children\r\n if (up && link.fromId === node.id && !seenNodes.includes(graph.getNode(link.toId))) {\r\n if (cbLinks) cbLinks(link);\r\n seenNodes.push(graph.getNode(link.toId));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction parseColor(color): any {\r\n let parsedColor = 0x009ee8ff;\r\n\r\n if (typeof color === 'number') {\r\n return color;\r\n }\r\n\r\n if (typeof color === 'string' && color) {\r\n if (color.length === 4) {\r\n // #rgb, duplicate each letter except first #.\r\n color = color.replace(/([^#])/g, '$1$1');\r\n }\r\n if (color.length === 9) {\r\n // #rrggbbaa\r\n parsedColor = parseInt(color.substr(1), 16);\r\n } else if (color.length === 7) {\r\n // or #rrggbb.\r\n parsedColor = (parseInt(color.substr(1), 16) << 8) | 0xff;\r\n } else {\r\n throw 'Color expected in hex format with preceding \"#\". E.g. #00ff00. Got value: ' + color;\r\n }\r\n }\r\n\r\n return parsedColor;\r\n}\r\n","import {action, computed, observable} from 'mobx';\nimport {registerHandler, WSMsgType} from \"../misc/WS\";\nimport * as React from \"react\";\nimport {Col, ListGroupItem, OverlayTrigger, Popover, Row} from \"react-bootstrap\";\nimport Plus from \"../../assets/plus.svg\";\nimport Minus from \"../../assets/minus.svg\";\nimport {displayManaUnit} from \"../utils\";\n\nclass ManaBlk {\n nodeID: string;\n access: number;\n consensus: number;\n // in s?\n time: number;\n}\n\nexport class Node {\n shortNodeID: string;\n nodeID: string;\n mana: number;\n}\n\nclass NetworkManaBlk {\n manaType: string;\n totalMana: number;\n nodes: Array;\n}\n\nexport class AllowedPledgeIDsBlk {\n accessFilter: PledgeIDFilter;\n consensusFilter: PledgeIDFilter;\n}\n\nexport class PledgeIDFilter {\n enabled: boolean;\n allowedNodeIDs: Array;\n}\n\nexport class AllowedNodeStr {\n shortID: string;\n fullID: string;\n}\n\nclass PledgeBlk {\n manaType: string;\n nodeID: string;\n time: number;\n txID: string;\n amount: number;\n}\n\nclass RevokeBlk {\n manaType: string;\n nodeID: string;\n time: number;\n txID: string;\n amount: number;\n}\n\nclass ManaEvent {\n nodeID: string;\n time: Date;\n txID: string;\n\n constructor(nodeID: string, time: Date, txID: string) {\n this.nodeID = nodeID;\n this.time = time;\n this.txID = txID;\n }\n}\n\nclass PledgeEvent extends ManaEvent{\n amount: number;\n\n constructor(nodeID: string, time: Date, txID: string, amount: number) {\n super(nodeID, time, txID);\n this.amount = amount;\n }\n}\n\nclass RevokeEvent extends ManaEvent {\n amount: number;\n\n constructor(nodeID: string, time: Date, txID: string, amount: number) {\n super(nodeID, time, txID);\n this.amount = amount;\n }\n}\n\nconst emptyRow = (\n There are no nodes to view with the current search parameters.\n)\nconst emptyListItem = (\n There are no events to view with the current search parameters.)\n\n// every 10 seconds, a new value arrives, so this is roughly 17 mins\nconst maxStoredManaValues = 100;\n// number of previous pledge/revoke events we keep track of. (/2 of plugins/dashboard/maxManaEventsBufferSize)\nconst maxEventsStored = 100;\n\nexport class ManaStore {\n // mana values\n @observable manaValues: Array = [];\n // first is accessm second consensus\n @observable prevManaValues: Array = [0,0];\n // list of richest access mana nodes in network, sorted in descending order\n @observable accessNetworkRichest: Array = [];\n @observable totalAccessNetwork: number = 0.0;\n // list of richest active access mana nodes in the network, sorted in descending order\n @observable accessActiveRichest: Array = [];\n @observable totalAccessActive: number = 0.0;\n // list of richest consensus mana nodes in their network, sorted in descending order\n @observable consensusNetworkRichest: Array = [];\n @observable totalConsensusNetwork: number = 0.0;\n // list of richest active consensus mana nodes in their network, sorted in descending order\n @observable consensusActiveRichest: Array = [];\n @observable totalConsensusActive: number = 0.0;\n\n @observable public searchNode = \"\";\n @observable public searchTxID = \"\";\n\n @observable public allowedPledgeIDs: AllowedPledgeIDsBlk;\n\n // internal arrays to store mana events\n accessEvents: Array = [];\n consensusEvents: Array = [];\n\n // internal arrays to store initial mana events\n initAccessEvents: Array = [];\n initConsensusEvents: Array = [];\n\n // info on latest removed events\n @observable lastRemovedAccessEventTime: Date = null;\n @observable lastRemovedConsensusEventTime: Date = null;\n\n lastInitRemovedAccessEventTime: Date = null;\n lastInitRemovedConsensusEventTime: Date = null;\n\n // only update displayed events when initial arrays were modified\n eventsUpdated: boolean = false;\n\n // mana events displayed in frontend\n @observable displayedAccessEvents: Array = [];\n @observable displayedConsensusEvents: Array = [];\n\n ownID: string;\n\n nodeNotSyncedListItem = (Wait for node to be synced to display mana events.);\n\n constructor() {\n this.manaValues = [];\n\n registerHandler(WSMsgType.Mana, this.addNewManaValue);\n registerHandler(WSMsgType.ManaMapOverall, this.updateNetworkRichest);\n registerHandler(WSMsgType.ManaMapOnline, this.updateActiveRichest);\n // registerHandler(WSMsgType.ManaAllowedPledge, this.updateAllowedPledgeIDs);\n // registerHandler(WSMsgType.ManaInitPledge, this.addNewInitPledge);\n // registerHandler(WSMsgType.ManaInitRevoke, this.addNewInitRevoke);\n // registerHandler(WSMsgType.ManaInitDone, this.initDone);\n // registerHandler(WSMsgType.ManaPledge, this.addNewPledge);\n // registerHandler(WSMsgType.ManaRevoke, this.addNewRevoke);\n };\n\n @action\n updateNodeSearch(searchNode: string): void {\n this.searchNode = searchNode.trim();\n }\n\n @action\n updateTxSearch(searchTxID: string): void {\n this.searchTxID = searchTxID.trim();\n }\n\n @action\n addNewManaValue = (manaBlk: ManaBlk) => {\n this.ownID = this.ownID? this.ownID : manaBlk.nodeID;\n if (this.manaValues.length === maxStoredManaValues) {\n // shift if we already have enough values\n this.manaValues.shift();\n }\n let newManaData = [new Date(manaBlk.time*1000), manaBlk.access, manaBlk.consensus];\n if (this.manaValues.length > 0){\n this.prevManaValues = [this.manaValues[this.manaValues.length -1][1] , this.manaValues[this.manaValues.length -1][2]]\n }\n this.manaValues.push(newManaData);\n }\n\n @action\n updateNetworkRichest = (blk: NetworkManaBlk) => {\n switch (blk.manaType) {\n case \"Access\":\n this.totalAccessNetwork = blk.totalMana;\n this.accessNetworkRichest = blk.nodes;\n break;\n case \"Consensus\":\n this.totalConsensusNetwork = blk.totalMana;\n this.consensusNetworkRichest = blk.nodes;\n break;\n }\n }\n\n @action\n updateActiveRichest = (blk: NetworkManaBlk) => {\n switch (blk.manaType) {\n case \"Access\":\n this.totalAccessActive = blk.totalMana;\n this.accessActiveRichest = blk.nodes;\n break;\n case \"Consensus\":\n this.totalConsensusActive = blk.totalMana;\n this.consensusActiveRichest = blk.nodes;\n break;\n }\n };\n\n @action\n updateAllowedPledgeIDs = (blk: AllowedPledgeIDsBlk) => {\n this.allowedPledgeIDs = blk;\n }\n\n @action\n addNewInitPledge = (blk: PledgeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Access\":\n store = this.initAccessEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastInitRemovedAccessEventTime = lastRemoved.time;\n }\n break;\n case \"Consensus\":\n store = this.initConsensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastInitRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return\n }\n let newData = new PledgeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount,\n );\n store.push(newData);\n }\n\n @action\n addNewPledge = (blk: PledgeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Access\":\n store = this.accessEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastRemovedAccessEventTime = lastRemoved.time;\n }\n break;\n case \"Consensus\":\n store = this.consensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return\n }\n let newData = new PledgeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount,\n );\n store.push(newData);\n this.eventsUpdated = true;\n }\n\n @action\n addNewInitRevoke = (blk: RevokeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Consensus\":\n store = this.initConsensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastInitRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return;\n }\n let newData = new RevokeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount\n );\n store.push(newData);\n }\n\n @action\n addNewRevoke = (blk: RevokeBlk) => {\n let store: Array = [];\n switch (blk.manaType) {\n case \"Consensus\":\n store = this.consensusEvents;\n if (store.length >= maxEventsStored) {\n let lastRemoved = store.shift();\n this.lastRemovedConsensusEventTime = lastRemoved.time;\n }\n break;\n default:\n return;\n }\n let newData = new RevokeEvent(\n blk.nodeID,\n new Date(blk.time*1000),\n blk.txID,\n blk.amount\n );\n store.push(newData);\n this.eventsUpdated = true;\n }\n\n @action\n initDone = () => {\n this.accessEvents = this.initAccessEvents;\n this.lastRemovedAccessEventTime = this.lastInitRemovedAccessEventTime;\n this.consensusEvents= this.initConsensusEvents;\n this.lastRemovedConsensusEventTime = this.lastInitRemovedConsensusEventTime;\n\n this.displayedAccessEvents = [...this.accessEvents]\n this.displayedConsensusEvents = [...this.consensusEvents]\n\n setInterval(() => {\n if (this.eventsUpdated) {\n this.displayedAccessEvents = [...this.accessEvents];\n this.displayedConsensusEvents = [...this.consensusEvents];\n this.eventsUpdated = false;\n }\n }, 500)\n }\n\n nodeList = (leaderBoard: Array, manaSum: number) => {\n if (leaderBoard === null || leaderBoard == undefined) {\n return []\n }\n let feed = [];\n let pushToFeed = (node: Node, i: number) => {\n feed.push(\n \n {i + 1} \n {node.shortNodeID}\n {displayManaUnit(node.mana)}\n {((node.mana / manaSum)*100.0).toFixed(2)}%\n \n );\n };\n let callback = (node: Node, i: number) => {\n if (this.passesNodeFilter(node.shortNodeID)){\n pushToFeed(node, i);\n }\n };\n leaderBoard.forEach(callback);\n return feed\n }\n\n @computed\n get networkRichestFeedAccess() {\n let result = this.nodeList(this.accessNetworkRichest, this.totalAccessNetwork);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get networkRichestFeedConsensus() {\n let result = this.nodeList(this.consensusNetworkRichest, this.totalConsensusNetwork);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get activeRichestFeedAccess() {\n let result = this.nodeList(this.accessActiveRichest, this.totalAccessActive);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get activeRichestFeedConsensus() {\n let result = this.nodeList(this.consensusActiveRichest, this.totalConsensusActive);\n if (result.length === 0) {\n return [emptyRow];\n } else {\n return result;\n }\n }\n\n @computed\n get accessHistogramInput() {\n if (this.accessNetworkRichest === undefined || this.accessNetworkRichest === null) {\n return [[\"\", 0]]\n }\n let histInput = new Array()\n for (let i = 0; i < this.accessNetworkRichest.length; i++) {\n histInput.push(\n [this.accessNetworkRichest[i].shortNodeID, Math.log10(this.accessNetworkRichest[i].mana)]\n )\n }\n return histInput\n }\n\n @computed\n get consensusHistogramInput() {\n if (this.consensusNetworkRichest === undefined || this.consensusNetworkRichest === null) {\n return [[\"\", 0]]\n }\n let histInput = new Array()\n for (let i = 0; i < this.consensusNetworkRichest.length; i++) {\n histInput.push(\n [this.consensusNetworkRichest[i].shortNodeID, Math.log10(this.consensusNetworkRichest[i].mana)]\n )\n }\n return histInput\n }\n\n @computed\n get accessPercentile() {\n let per = 0.0;\n // find id\n if (this.accessNetworkRichest !== undefined && this.accessNetworkRichest !== null) {\n const isOwnID = (element) => element.shortNodeID === this.ownID;\n let index = this.accessNetworkRichest.findIndex(isOwnID);\n switch (index) {\n case -1:\n break;\n default:\n per = ((this.accessNetworkRichest.length - (index + 1)) / this.accessNetworkRichest.length) * 100;\n break;\n }\n }\n return per\n }\n\n @computed\n get consensusPercentile() {\n let per = 0.0;\n // find id\n if ( this.consensusNetworkRichest !== undefined && this.consensusNetworkRichest !== null) {\n const isOwnID = (element) => element.shortNodeID === this.ownID;\n let index = this.consensusNetworkRichest.findIndex(isOwnID);\n switch (index) {\n case -1:\n break;\n default:\n per = ((this.consensusNetworkRichest.length - (index +1)) / this.consensusNetworkRichest.length) * 100;\n }\n }\n return per\n }\n\n computeEventList = (evArr: Array) => {\n let result = [];\n result.push(\n \n \n \n \n \n NodeID\n \n \n Tx ID\n \n \n Time\n \n \n \n )\n if (evArr === undefined || evArr === null) {\n return result\n }\n let pushToEventFeed = (element: ManaEvent, index) => {\n if (element instanceof PledgeEvent) {\n let popover = (ev: PledgeEvent) => {\n return (\n \n Mana Pledged\n \n
Base Mana: +{displayManaUnit(ev.amount)}
\n
With Transaction: navigator.clipboard.writeText(ev.txID)}\n href={`/explorer/transaction/${ev.txID}`}\n >{ev.txID}
\n
To NodeID: {ev.nodeID}
\n
Time of Pledge: {ev.time.toLocaleTimeString()}
\n
\n
\n )\n }\n result.push(\n \n do something on click}>\n as={'button'}\n >\n \n \n \"Plus\"\n \n \n {element.nodeID}\n \n \n {element.txID.substring(0, 7) + '...'}\n \n \n {element.time.toLocaleString()}\n \n \n \n \n )\n } else if (element instanceof RevokeEvent){\n let popover = (ev: RevokeEvent) => {\n return (\n \n Mana Revoked\n \n
Base Mana 1: -{displayManaUnit(ev.amount)}
\n
With Transaction: navigator.clipboard.writeText(ev.txID)}\n href={`/explorer/transaction/${ev.txID}`}\n >{ev.txID}
\n
From NodeID: {ev.nodeID}
\n
Time of Revoke: {ev.time.toLocaleTimeString()}
\n
\n
\n )\n }\n // it's a revoke event then\n result.push(\n \n do something on click}>\n as={'button'}\n >\n \n \n \"Minus\"\n \n \n {element.nodeID}\n \n \n {element.txID.substring(0, 7) + '...'}\n \n \n {element.time.toLocaleString()}\n \n \n \n \n )\n }\n };\n // && this.passesTimeFilter(event.time) {\n let callback = (event: ManaEvent, i: number) => {\n if (this.passesNodeFilter(event.nodeID) && this.passesTxFilter(event.txID)){\n pushToEventFeed(event, i);\n }\n };\n // reverse traverse bc oldest event is the first\n evArr.reverse().forEach(callback)\n return result;\n }\n\n @computed\n get accessEventList() {\n let result = this.computeEventList(this.displayedAccessEvents);\n if (result.length === 1) {\n result.push(emptyListItem);\n }\n return result;\n }\n\n @computed\n get consensusEventList() {\n let result = this.computeEventList(this.displayedConsensusEvents);\n if (result.length === 1) {\n result.push(emptyListItem);\n }\n return result;\n }\n\n passesNodeFilter = (nodeID: string) : boolean => {\n if (this.searchNode.trim().length === 0) {\n // node filter is disabled, anything passes the filter\n return true;\n } else if (nodeID.toLowerCase().includes(this.searchNode.toLowerCase())){\n // node filter is enabled, nodeID contains search term\n return true;\n }\n // filter enabled but nodeID doesn't pass\n return false;\n }\n\n passesTxFilter = (txID: string) : boolean => {\n if (this.searchTxID.trim().length === 0) {\n // txID filter is disabled, anything passes the filter\n return true;\n } else if (txID.toLowerCase().includes(this.searchTxID.toLowerCase())){\n // txID filter is enabled, txID contains search term\n return true;\n }\n // filter enabled but txID doesn't pass\n return false;\n }\n}\n\nexport default ManaStore;\n","import {computed, action, observable} from \"mobx\";\nimport { registerHandler, WSMsgType } from \"../misc/WS\";\nimport * as React from \"react\";\nimport {Link} from 'react-router-dom';\n\nconst liveFeedSize = 100;\n\nexport class SlotInfo {\n index: number;\n id: string;\n}\n\nexport class SlotStore {\n @observable liveFeed: Array = [];\n\n constructor() {\n registerHandler(WSMsgType.SlotInfo, this.addLiveFeed);\n }\n\n @action addLiveFeed = async (info: SlotInfo) => {\n if (this.liveFeed.findIndex((t) => t.id == info.id) === -1) {\n if (this.liveFeed.length >= liveFeedSize) {\n this.liveFeed.shift();\n }\n this.liveFeed.push(info);\n }\n }\n\n @computed\n get slotLiveFeed() {\n let feed = [];\n for (let i = this.liveFeed.length - 1; i >= 0; i--) {\n let info = this.liveFeed[i];\n feed.push(\n \n \n {info.index}\n \n \n \n {info.id}\n \n \n \n );\n }\n return feed;\n }\n}","import {action, computed, observable} from 'mobx';\r\nimport {registerHandler, WSMsgType} from \"../misc/WS\";\r\nimport * as React from \"react\";\r\nimport {RouterStore,} from \"mobx-react-router\";\r\nimport {Link} from \"react-router-dom\";\r\nimport NodeStore from './NodeStore';\r\nimport {Table} from \"react-bootstrap\";\r\nimport {ConfirmationState, resolveConfirmationState} from \"../utils/confirmation_state\";\r\n\r\nexport class ConflictSet {\r\n conflictSetID: string;\r\n arrivalTime: number;\r\n resolved: boolean;\r\n timeToResolve: number;\r\n shown: boolean;\r\n}\r\n\r\nexport class Conflict {\r\n conflictID: string;\r\n conflictSetIDs: Array;\r\n confirmationState: number;\r\n issuingTime: number;\r\n issuerNodeID: string;\r\n}\r\n\r\n// const liveFeedSize = 10;\r\n\r\nexport class ConflictsStore {\r\n // live feed\r\n @observable conflictSets: Map;\r\n @observable conflicts: Map;\r\n \r\n routerStore: RouterStore;\r\n nodeStore: NodeStore;\r\n\r\n constructor(routerStore: RouterStore, nodeStore: NodeStore) {\r\n this.routerStore = routerStore;\r\n this.nodeStore = nodeStore;\r\n this.conflictSets = new Map;\r\n this.conflicts = new Map;\r\n registerHandler(WSMsgType.ConflictSet, this.updateConflictSets);\r\n registerHandler(WSMsgType.Conflict, this.updateConflicts);\r\n }\r\n\r\n @action\r\n updateConflictSets = (blk: ConflictSet) => {\r\n this.conflictSets.set(blk.conflictSetID, blk);\r\n };\r\n\r\n @action\r\n updateConflicts = (blk: Conflict) => {\r\n this.conflicts.set(blk.conflictID, blk);\r\n };\r\n \r\n @computed\r\n get conflictsLiveFeed() {\r\n // sort branches by time and ID to prevent \"jumping\"\r\n let conflictsArr = Array.from(this.conflictSets.values());\r\n conflictsArr.sort((x: ConflictSet, y: ConflictSet): number => {\r\n return y.arrivalTime - x.arrivalTime || x.conflictSetID.localeCompare(y.conflictSetID);\r\n }\r\n )\r\n\r\n let feed = [];\r\n for (let conflict of conflictsArr) {\r\n feed.push(\r\n conflict.shown = !conflict.shown} style={{cursor:\"pointer\"}}>\r\n \r\n \r\n {conflict.conflictSetID}\r\n \r\n \r\n \r\n {new Date(conflict.arrivalTime * 1000).toLocaleString()}\r\n \r\n \r\n {conflict.resolved ? 'Yes' : 'No'}\r\n \r\n \r\n {conflict.timeToResolve/1000000}\r\n \r\n \r\n );\r\n\r\n // only render and show branches if it has been clicked\r\n if (!conflict.shown) {\r\n continue\r\n }\r\n\r\n // sort branches by time and ID to prevent \"jumping\"\r\n let branchesArr = Array.from(this.conflicts.values());\r\n branchesArr.sort((x: Conflict, y: Conflict): number => {\r\n return x.issuingTime - y.issuingTime || x.conflictID.localeCompare(y.conflictID)\r\n }\r\n )\r\n\r\n let branches = [];\r\n for (let branch of branchesArr) {\r\n for(let conflictID of branch.conflictSetIDs){\r\n if (conflictID === conflict.conflictSetID) {\r\n branches.push(\r\n ConfirmationState.Accepted ? \"table-success\" : \"\"}>\r\n \r\n \r\n {branch.conflictID}\r\n \r\n \r\n {resolveConfirmationState(branch.confirmationState)}\r\n {new Date(branch.issuingTime * 1000).toLocaleString()}\r\n {branch.issuerNodeID}\r\n \r\n );\r\n }\r\n }\r\n }\r\n feed.push(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {branches}\r\n \r\n
BranchIDConfirmationStateIssuingTimeIssuer NodeID
\r\n \r\n \r\n );\r\n }\r\n\r\n return feed;\r\n }\r\n\r\n}\r\n\r\nexport default ConflictsStore;\r\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport {Provider} from 'mobx-react';\nimport {createBrowserHistory} from 'history';\nimport 'chartjs-plugin-streaming';\nimport {App} from './app/App';\nimport {RouterStore, syncHistoryWithStore} from 'mobx-react-router';\nimport {Router} from 'react-router-dom';\nimport NodeStore from \"./app/stores/NodeStore\";\nimport ExplorerStore from \"./app/stores/ExplorerStore\";\nimport FaucetStore from \"./app/stores/FaucetStore\";\nimport VisualizerStore from \"./app/stores/VisualizerStore\";\nimport ManaStore from \"./app/stores/ManaStore\";\nimport {SlotStore} from \"./app/stores/SlotStore\";\nimport ConflictsStore from \"./app/stores/ConflictsStore\";\n\n// prepare MobX stores\nconst routerStore = new RouterStore();\nconst nodeStore = new NodeStore();\nconst explorerStore = new ExplorerStore(routerStore);\nconst conflictsStore = new ConflictsStore(routerStore, nodeStore);\nconst faucetStore = new FaucetStore(routerStore);\nconst visualizerStore = new VisualizerStore(routerStore);\nconst manaStore = new ManaStore();\nconst slotStore = new SlotStore();\nconst stores = {\n \"routerStore\": routerStore,\n \"nodeStore\": nodeStore,\n \"explorerStore\": explorerStore,\n \"conflictsStore\": conflictsStore,\n \"faucetStore\": faucetStore,\n \"visualizerStore\": visualizerStore,\n \"manaStore\": manaStore,\n \"slotStore\": slotStore\n};\n\nconst browserHistory = createBrowserHistory();\nconst history = syncHistoryWithStore(browserHistory, routerStore);\n\n// render react DOM\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/components/dashboard/frontend/build/index.html b/components/dashboard/frontend/build/index.html index 5985986c0..e745619e5 100644 --- a/components/dashboard/frontend/build/index.html +++ b/components/dashboard/frontend/build/index.html @@ -1 +1 @@ - iota-core Dashboard
\ No newline at end of file + iota-core Dashboard
\ No newline at end of file diff --git a/components/dashboard/frontend/src/app/misc/Payload.ts b/components/dashboard/frontend/src/app/misc/Payload.ts index 7de0f81de..35f39c365 100644 --- a/components/dashboard/frontend/src/app/misc/Payload.ts +++ b/components/dashboard/frontend/src/app/misc/Payload.ts @@ -1,6 +1,6 @@ export enum PayloadType { - TaggedData = 5, - Transaction = 6, + TaggedData = 0, + Transaction = 1, Faucet = 3, } diff --git a/components/dashboard/visualizer.go b/components/dashboard/visualizer.go index 1475721af..5d1ccbbcb 100644 --- a/components/dashboard/visualizer.go +++ b/components/dashboard/visualizer.go @@ -10,6 +10,7 @@ import ( "github.com/iotaledger/iota-core/pkg/daemon" "github.com/iotaledger/iota-core/pkg/model" "github.com/iotaledger/iota-core/pkg/protocol/engine/blocks" + "github.com/iotaledger/iota-core/pkg/protocol/engine/mempool" "github.com/iotaledger/iota-core/pkg/protocol/engine/tipmanager" iotago "github.com/iotaledger/iota.go/v4" ) @@ -81,22 +82,20 @@ func sendTipInfo(block *blocks.Block, isTip bool) { func runVisualizer(component *app.Component) { if err := component.Daemon().BackgroundWorker("Dashboard[Visualizer]", func(ctx context.Context) { + + deps.Protocol.MainEngineInstance().Ledger.MemPool().OnSignedTransactionAttached(func(signedTransactionMetadata mempool.SignedTransactionMetadata) { + signedTransactionMetadata.OnSignaturesValid(func() { + transactionMetadata := signedTransactionMetadata.TransactionMetadata() + transactionMetadata.OnAccepted(func() { + attachmentID := transactionMetadata.EarliestIncludedAttachment() + sendTxAccepted(attachmentID, true) + }) + }) + }) + unhook := lo.Batch( deps.Protocol.Events.Engine.BlockDAG.BlockAttached.Hook(func(block *blocks.Block) { sendVertex(block, false) - - signedTransaction, hasTx := block.SignedTransaction() - if hasTx { - txMetadata, exists := deps.Protocol.MainEngineInstance().Ledger.MemPool().TransactionMetadata(lo.PanicOnErr(signedTransaction.Transaction.ID())) - if exists { - txMetadata.OnAccepted(func() { - sendTxAccepted(block.ID(), true) - }) - } - } - // if block.ID().Slot() > slot.Index(currentSlot.Load()) { - // currentSlot.Store(int64(block.ID().Slot())) - // } }, event.WithWorkerPool(component.WorkerPool)).Unhook, deps.Protocol.Events.Engine.BlockGadget.BlockConfirmed.Hook(func(block *blocks.Block) { sendVertex(block, block.IsConfirmed()) From 063122aeee71b460a7523bb0dc9039554f9fdb46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Wed, 18 Oct 2023 12:27:56 +0200 Subject: [PATCH 03/13] RMC uses slot index of the block commitment --- .../accountsfilter/commitmentfilter.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go index 952f3d2e3..81fb82d28 100644 --- a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go +++ b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go @@ -1,7 +1,6 @@ package accountsfilter import ( - "github.com/iotaledger/hive.go/core/safemath" hiveEd25519 "github.com/iotaledger/hive.go/crypto/ed25519" "github.com/iotaledger/hive.go/ierrors" "github.com/iotaledger/hive.go/runtime/module" @@ -98,12 +97,9 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { Reason: ierrors.Wrapf(err, "could not retrieve API for block version %d", block.ProtocolBlock().BlockHeader.ProtocolVersion), }) } - // check that the block burns sufficient Mana - blockSlot := blockAPI.TimeProvider().SlotFromTime(block.ProtocolBlock().IssuingTime) - rmcSlot, err := safemath.SafeSub(blockSlot, blockAPI.ProtocolParameters().MaxCommittableAge()) - if err != nil { - rmcSlot = 0 - } + // check that the block burns sufficient Mana, use slot index of the commitment + rmcSlot := block.ProtocolBlock().SlotCommitmentID.Slot() + rmc, err := c.rmcRetrieveFunc(rmcSlot) if err != nil { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ From 43c375ad5823623c46c217acbad9902f03abc3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Wed, 18 Oct 2023 12:33:33 +0200 Subject: [PATCH 04/13] Fix RMC slot in the API: use latestCommitment slot RMC --- components/restapi/core/accounts.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/components/restapi/core/accounts.go b/components/restapi/core/accounts.go index 7d1e33fb4..73e069593 100644 --- a/components/restapi/core/accounts.go +++ b/components/restapi/core/accounts.go @@ -6,7 +6,6 @@ import ( "github.com/labstack/echo/v4" - "github.com/iotaledger/hive.go/core/safemath" "github.com/iotaledger/hive.go/ierrors" "github.com/iotaledger/hive.go/lo" "github.com/iotaledger/inx-app/pkg/httpserver" @@ -23,26 +22,23 @@ func congestionForAccountID(c echo.Context) (*apimodels.CongestionResponse, erro return nil, err } - slot := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment().Slot() + commitmentSlot := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment().Slot() - acc, exists, err := deps.Protocol.MainEngineInstance().Ledger.Account(accountID, slot) + acc, exists, err := deps.Protocol.MainEngineInstance().Ledger.Account(accountID, commitmentSlot) if err != nil { return nil, ierrors.Wrapf(err, "failed to get account: %s form the Ledger", accountID.ToHex()) } if !exists { return nil, ierrors.Errorf("account not found: %s", accountID.ToHex()) } - rmcSlot, err := safemath.SafeSub(slot, deps.Protocol.APIForSlot(slot).ProtocolParameters().MaxCommittableAge()) - if err != nil { - rmcSlot = 0 - } - rmc, err := deps.Protocol.MainEngineInstance().Ledger.RMCManager().RMC(rmcSlot) + + rmc, err := deps.Protocol.MainEngineInstance().Ledger.RMCManager().RMC(commitmentSlot) if err != nil { - return nil, ierrors.Wrapf(err, "failed to get RMC for slot: %d", rmcSlot) + return nil, ierrors.Wrapf(err, "failed to get RMC for slot: %d", commitmentSlot) } return &apimodels.CongestionResponse{ - Slot: slot, + Slot: commitmentSlot, Ready: deps.Protocol.MainEngineInstance().Scheduler.IsBlockIssuerReady(accountID), ReferenceManaCost: rmc, BlockIssuanceCredits: acc.Credits.Value, From 6c14e96f60527342be7fb1f44fbe32f8171946c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Wed, 18 Oct 2023 14:14:50 +0200 Subject: [PATCH 05/13] Add optional slotIndex query param for blockIssuance api endpoint --- components/restapi/core/blocks.go | 15 +++++++++++++-- components/restapi/core/component.go | 4 +++- tools/evil-spammer/accountwallet/faucet.go | 2 +- tools/evil-spammer/models/connector.go | 11 +++-------- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/components/restapi/core/blocks.go b/components/restapi/core/blocks.go index 67b041b16..1c95e6976 100644 --- a/components/restapi/core/blocks.go +++ b/components/restapi/core/blocks.go @@ -47,9 +47,20 @@ func blockMetadataByID(c echo.Context) (*apimodels.BlockMetadataResponse, error) return blockMetadataByBlockID(blockID) } -func blockIssuance(_ echo.Context) (*apimodels.IssuanceBlockHeaderResponse, error) { +func blockIssuanceBySlot(slotIndex iotago.SlotIndex) (*apimodels.IssuanceBlockHeaderResponse, error) { references := deps.Protocol.MainEngineInstance().TipSelection.SelectTips(iotago.BlockMaxParents) - slotCommitment := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment() + + var slotCommitment *model.Commitment + var err error + // by default we use latest commitment + if slotIndex == 0 { + slotCommitment = deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment() + } else { + slotCommitment, err = deps.Protocol.MainEngineInstance().Storage.Commitments().Load(slotIndex) + if err != nil { + return nil, ierrors.Wrapf(err, "failed to load commitment for requested slot %d", slotIndex) + } + } if len(references[iotago.StrongParentType]) == 0 { return nil, ierrors.Wrap(echo.ErrServiceUnavailable, "get references failed") diff --git a/components/restapi/core/component.go b/components/restapi/core/component.go index 9d4d6a8c6..44102a12f 100644 --- a/components/restapi/core/component.go +++ b/components/restapi/core/component.go @@ -208,7 +208,9 @@ func configure() error { }, checkNodeSynced()) routeGroup.GET(RouteBlockIssuance, func(c echo.Context) error { - resp, err := blockIssuance(c) + index, _ := httpserver.ParseSlotQueryParam(c, restapipkg.ParameterSlotIndex) + + resp, err := blockIssuanceBySlot(index) if err != nil { return err } diff --git a/tools/evil-spammer/accountwallet/faucet.go b/tools/evil-spammer/accountwallet/faucet.go index 713f9049c..a4031710b 100644 --- a/tools/evil-spammer/accountwallet/faucet.go +++ b/tools/evil-spammer/accountwallet/faucet.go @@ -30,7 +30,7 @@ func (a *AccountWallet) RequestBlockBuiltData(clt *nodeclient.Client, issuerID i return nil, nil, 0, ierrors.Wrapf(err, "failed to get congestion data for issuer %s", issuerID.ToHex()) } - issuerResp, err := clt.BlockIssuance(context.Background()) + issuerResp, err := clt.BlockIssuance(context.Background(), congestionResp.Slot) if err != nil { return nil, nil, 0, ierrors.Wrap(err, "failed to get block issuance data") } diff --git a/tools/evil-spammer/models/connector.go b/tools/evil-spammer/models/connector.go index c15462ca0..a367dc66c 100644 --- a/tools/evil-spammer/models/connector.go +++ b/tools/evil-spammer/models/connector.go @@ -176,7 +176,7 @@ type Client interface { // GetTransaction gets the transaction. GetTransaction(txID iotago.TransactionID) (resp *iotago.SignedTransaction, err error) // GetBlockIssuance returns the latest commitment and data needed to create a new block. - GetBlockIssuance() (resp *apimodels.IssuanceBlockHeaderResponse, err error) + GetBlockIssuance(...iotago.SlotIndex) (resp *apimodels.IssuanceBlockHeaderResponse, err error) // GetCongestion returns congestion data such as rmc or issuing readiness. GetCongestion(id iotago.AccountID) (resp *apimodels.CongestionResponse, err error) @@ -301,13 +301,8 @@ func (c *WebClient) GetTransaction(txID iotago.TransactionID) (tx *iotago.Signed return tx, nil } -func (c *WebClient) GetBlockIssuance() (resp *apimodels.IssuanceBlockHeaderResponse, err error) { - resp, err = c.client.BlockIssuance(context.Background()) - if err != nil { - return - } - - return +func (c *WebClient) GetBlockIssuance(slotIndex ...iotago.SlotIndex) (resp *apimodels.IssuanceBlockHeaderResponse, err error) { + return c.client.BlockIssuance(context.Background(), slotIndex...) } func (c *WebClient) GetCongestion(accountID iotago.AccountID) (resp *apimodels.CongestionResponse, err error) { From bac4b0cb56fa41c1058baa52d293db44811e4b5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Wed, 18 Oct 2023 14:36:24 +0200 Subject: [PATCH 06/13] Update go mod --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 76a675061..6b32b5c36 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231010133617-cdbd5387e2af github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad - github.com/iotaledger/iota.go/v4 v4.0.0-20231013092100-ad2a52b5ac9a + github.com/iotaledger/iota.go/v4 v4.0.0-20231018123011-14794e5ed0b8 github.com/labstack/echo/v4 v4.11.2 github.com/labstack/gommon v0.4.0 github.com/libp2p/go-libp2p v0.30.0 diff --git a/go.sum b/go.sum index 42d166a1e..b7b4dbf0a 100644 --- a/go.sum +++ b/go.sum @@ -313,6 +313,8 @@ github.com/iotaledger/iota.go/v4 v4.0.0-20231011161154-7004432004e1 h1:mz5E00q1U github.com/iotaledger/iota.go/v4 v4.0.0-20231011161154-7004432004e1/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/iotaledger/iota.go/v4 v4.0.0-20231013092100-ad2a52b5ac9a h1:S/n3ZTjnnl0IIMCx+S0pu5CZNArO6Z+omiXt6dDmPK4= github.com/iotaledger/iota.go/v4 v4.0.0-20231013092100-ad2a52b5ac9a/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231018123011-14794e5ed0b8 h1:HJBvMCSuxvnTfMM7WyHbcB2HI+gzmOTECsKkOMyl+VM= +github.com/iotaledger/iota.go/v4 v4.0.0-20231018123011-14794e5ed0b8/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= From 932b505585a505471ad649be111f8bdd332eb680 Mon Sep 17 00:00:00 2001 From: jkrvivian Date: Thu, 19 Oct 2023 10:37:04 +0800 Subject: [PATCH 07/13] Update go.mod --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a93c6869c..b5cdf9147 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad - github.com/iotaledger/iota.go/v4 v4.0.0-20231018143050-5701a12ce477 + github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 github.com/labstack/echo/v4 v4.11.2 github.com/labstack/gommon v0.4.0 github.com/libp2p/go-libp2p v0.30.0 diff --git a/go.sum b/go.sum index 0446947b0..185c50e6d 100644 --- a/go.sum +++ b/go.sum @@ -309,8 +309,8 @@ github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 h1:nR8uT github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811/go.mod h1:rmclNpXw5sKJDHU0e51Ar/9zL00P7Uu9hkfaM7vAAiE= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad h1:TRM9EkAole9fYY1vHEVQ6zCEOGuvCWq/bczZ98Al5Ec= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad/go.mod h1:plZ0+8yLdDWHedj3SfHUwQtIETD+lcS6M1iEAxcjzJ4= -github.com/iotaledger/iota.go/v4 v4.0.0-20231018143050-5701a12ce477 h1:Mi+Oyj4HNaZeP4iKSjA7FFCU5ixTyloK92am06Dpfgo= -github.com/iotaledger/iota.go/v4 v4.0.0-20231018143050-5701a12ce477/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 h1:1gYYpNn0okDmMLQUr3FITo1Eeqid6Ukhq0ppf8KXhFo= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= From 36fb9d1847b889296107cdecf0509feb3cb46323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Thu, 19 Oct 2023 09:47:36 +0200 Subject: [PATCH 08/13] Update unit tests after RMC changes in commitment filter --- .../accountsfilter/commitmentfilter_test.go | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter_test.go b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter_test.go index 134fa19af..6d97b514a 100644 --- a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter_test.go +++ b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter_test.go @@ -140,7 +140,7 @@ func TestCommitmentFilter_NoAccount(t *testing.T) { require.NotEqual(t, "withImplicitAccount", event.Block.ID().Alias()) }) - keyPair := ed25519.GenerateKeyPair() + keyPairAccount := ed25519.GenerateKeyPair() currentSlot := iotago.SlotIndex(100) currentAPI := tf.apiProvider.CurrentAPI() @@ -151,7 +151,7 @@ func TestCommitmentFilter_NoAccount(t *testing.T) { require.NoError(t, err) tf.AddCommitment(commitment.Slot, modelCommitment) - addr := iotago.Ed25519AddressFromPubKey(keyPair.PublicKey[:]) + addr := iotago.Ed25519AddressFromPubKey(keyPairAccount.PublicKey[:]) accountID := iotago.AccountID(addr[:]) // register the accounts in the proxy account manager @@ -160,7 +160,7 @@ func TestCommitmentFilter_NoAccount(t *testing.T) { accounts.NewAccountData( accountID, accounts.WithExpirySlot(iotago.MaxSlotIndex), - accounts.WithBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(keyPair.PublicKey)), + accounts.WithBlockIssuerKeys(iotago.Ed25519PublicKeyBlockIssuerKeyFromPublicKey(keyPairAccount.PublicKey)), ), ) keyPairImplicitAccount := ed25519.GenerateKeyPair() @@ -175,9 +175,10 @@ func TestCommitmentFilter_NoAccount(t *testing.T) { ), ) - tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MaxCommittableAge(), iotago.Mana(0)) + // RMC needs to be from tha same slot as commitment index + tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MinCommittableAge(), iotago.Mana(0)) - tf.IssueSignedBlockAtSlot("withAccount", currentSlot, commitmentID, keyPair) + tf.IssueSignedBlockAtSlot("withAccount", currentSlot, commitmentID, keyPairAccount) keyPairNoAccount := ed25519.GenerateKeyPair() tf.IssueSignedBlockAtSlot("noAccount", currentSlot, commitmentID, keyPairNoAccount) @@ -224,7 +225,8 @@ func TestCommitmentFilter_BurnedMana(t *testing.T) { ), ) - tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MaxCommittableAge(), iotago.Mana(10)) + // RMC needs to be from tha same slot as commitment index + tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MinCommittableAge(), iotago.Mana(10)) tf.IssueSignedBlockAtSlotWithBurnedMana("sufficientBurnedMana", currentSlot, commitmentID, keyPair, iotago.Mana(10)) tf.IssueSignedBlockAtSlotWithBurnedMana("sufficientBurnedMana", currentSlot, commitmentID, keyPair, iotago.Mana(11)) @@ -271,7 +273,7 @@ func TestCommitmentFilter_Expiry(t *testing.T) { require.NoError(t, err) // add the commitment and 0 RMC to the proxy state tf.AddCommitment(commitment.Slot, modelCommitment) - tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MaxCommittableAge(), iotago.Mana(0)) + tf.AddRMCData(commitmentSlot, iotago.Mana(0)) tf.IssueSignedBlockAtSlot("correct", currentSlot, commitmentID, keyPair) @@ -284,7 +286,7 @@ func TestCommitmentFilter_Expiry(t *testing.T) { require.NoError(t, err) // add the commitment and 0 RMC to the proxy state tf.AddCommitment(commitment.Slot, modelCommitment) - tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MaxCommittableAge(), iotago.Mana(0)) + tf.AddRMCData(commitmentSlot, iotago.Mana(0)) tf.IssueSignedBlockAtSlot("almostExpired", currentSlot, commitmentID, keyPair) @@ -297,7 +299,7 @@ func TestCommitmentFilter_Expiry(t *testing.T) { require.NoError(t, err) // add the commitment and 0 RMC to the proxy state tf.AddCommitment(commitment.Slot, modelCommitment) - tf.AddRMCData(currentSlot-currentAPI.ProtocolParameters().MaxCommittableAge(), iotago.Mana(0)) + tf.AddRMCData(commitmentSlot, iotago.Mana(0)) tf.IssueSignedBlockAtSlot("expired", currentSlot, commitmentID, keyPair) } From 0294e79ffa34e7a1164f11357d8cbc86db7c4e7e Mon Sep 17 00:00:00 2001 From: jkrvivian Date: Thu, 19 Oct 2023 15:53:07 +0800 Subject: [PATCH 09/13] Retain errors from BlockFiltered event --- go.mod | 2 +- go.sum | 4 +-- .../accountsfilter/commitmentfilter.go | 30 ++++++++----------- pkg/retainer/retainer/errors.go | 21 +++++++++++++ pkg/retainer/retainer/retainer.go | 5 ++++ tools/evil-spammer/go.mod | 2 +- tools/evil-spammer/go.sum | 4 +-- tools/gendoc/go.mod | 2 +- tools/gendoc/go.sum | 4 +-- tools/genesis-snapshot/go.mod | 2 +- tools/genesis-snapshot/go.sum | 4 +-- 11 files changed, 50 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index b5cdf9147..928cfdaf4 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad - github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 + github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 github.com/labstack/echo/v4 v4.11.2 github.com/labstack/gommon v0.4.0 github.com/libp2p/go-libp2p v0.30.0 diff --git a/go.sum b/go.sum index 185c50e6d..0ea29c242 100644 --- a/go.sum +++ b/go.sum @@ -309,8 +309,8 @@ github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 h1:nR8uT github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811/go.mod h1:rmclNpXw5sKJDHU0e51Ar/9zL00P7Uu9hkfaM7vAAiE= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad h1:TRM9EkAole9fYY1vHEVQ6zCEOGuvCWq/bczZ98Al5Ec= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad/go.mod h1:plZ0+8yLdDWHedj3SfHUwQtIETD+lcS6M1iEAxcjzJ4= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 h1:1gYYpNn0okDmMLQUr3FITo1Eeqid6Ukhq0ppf8KXhFo= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 h1:g+0LnBBv9yu1Z1Y4d7anVgwikRcLPw1WW9K6OVTTRak= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= diff --git a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go index 696034ef6..2b0f878c9 100644 --- a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go +++ b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go @@ -13,12 +13,6 @@ import ( iotago "github.com/iotaledger/iota.go/v4" ) -var ( - ErrInvalidSignature = ierrors.New("invalid signature") - ErrNegativeBIC = ierrors.New("negative BIC") - ErrAccountExpired = ierrors.New("account expired") -) - type CommitmentFilter struct { // Events contains the Events of the CommitmentFilter events *commitmentfilter.Events @@ -75,7 +69,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if err != nil { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(err, "could not retrieve account information for block issuer %s", block.ProtocolBlock().IssuerID), + Reason: ierrors.Join(iotago.ErrIssuerAccountNotFound, ierrors.Wrapf(err, "could not retrieve account information for block issuer %s", block.ProtocolBlock().IssuerID)), }) return @@ -83,7 +77,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if !exists { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Errorf("block issuer account %s does not exist in slot commitment %s", block.ProtocolBlock().IssuerID, block.ProtocolBlock().SlotCommitmentID.Slot()), + Reason: ierrors.Join(iotago.ErrIssuerAccountNotFound, ierrors.Errorf("block issuer account %s does not exist in slot commitment %s", block.ProtocolBlock().IssuerID, block.ProtocolBlock().SlotCommitmentID.Slot())), }) return @@ -94,7 +88,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if err != nil { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(err, "could not retrieve API for block version %d", block.ProtocolBlock().BlockHeader.ProtocolVersion), + Reason: ierrors.Join(iotago.ErrBlockVersionInvalid, ierrors.Wrapf(err, "could not retrieve API for block version %d", block.ProtocolBlock().BlockHeader.ProtocolVersion)), }) } // check that the block burns sufficient Mana, use slot index of the commitment @@ -104,7 +98,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if err != nil { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(err, "could not retrieve RMC for slot commitment %s", rmcSlot), + Reason: ierrors.Join(iotago.ErrRMCNotFound, ierrors.Wrapf(err, "could not retrieve RMC for slot commitment %s", rmcSlot)), }) return @@ -114,13 +108,13 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if err != nil { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(err, "could not calculate Mana cost for block"), + Reason: ierrors.Join(iotago.ErrFailedToCalculateManaCost, ierrors.Wrapf(err, "could not calculate Mana cost for block")), }) } if basicBlock.MaxBurnedMana < manaCost { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Errorf("block issuer account %s burned insufficient Mana, required %d, burned %d", block.ProtocolBlock().IssuerID, manaCost, basicBlock.MaxBurnedMana), + Reason: ierrors.Join(iotago.ErrBurnedInsufficientMana, ierrors.Errorf("block issuer account %s burned insufficient Mana, required %d, burned %d", block.ProtocolBlock().IssuerID, manaCost, basicBlock.MaxBurnedMana)), }) return @@ -131,7 +125,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if accountData.Credits.Value < 0 { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(ErrNegativeBIC, "block issuer account %s is locked due to negative BIC", block.ProtocolBlock().IssuerID), + Reason: ierrors.Wrapf(iotago.ErrNegativeBIC, "block issuer account %s is locked due to negative BIC", block.ProtocolBlock().IssuerID), }) return @@ -141,7 +135,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if accountData.ExpirySlot < block.ProtocolBlock().SlotCommitmentID.Slot() { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(ErrAccountExpired, "block issuer account %s is expired, expiry slot %d in commitment %d", block.ProtocolBlock().IssuerID, accountData.ExpirySlot, block.ProtocolBlock().SlotCommitmentID.Slot()), + Reason: ierrors.Wrapf(iotago.ErrAccountExpired, "block issuer account %s is expired, expiry slot %d in commitment %d", block.ProtocolBlock().IssuerID, accountData.ExpirySlot, block.ProtocolBlock().SlotCommitmentID.Slot()), }) return @@ -161,7 +155,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if !isBikPubKeyHash || bikPubKeyHash.PublicKeyHash != iotago.Ed25519PublicKeyHashBlockIssuerKeyFromPublicKey(signature.PublicKey[:]).PublicKeyHash { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(ErrInvalidSignature, "block issuer account %s does not have block issuer key corresponding to public key %s in slot %d", block.ProtocolBlock().IssuerID, signature.PublicKey, block.ProtocolBlock().SlotCommitmentID.Index()), + Reason: ierrors.Wrapf(iotago.ErrInvalidSignature, "block issuer account %s does not have block issuer key corresponding to public key %s in slot %d", block.ProtocolBlock().IssuerID, signature.PublicKey, block.ProtocolBlock().SlotCommitmentID.Index()), }) return @@ -171,7 +165,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if err != nil { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(ErrInvalidSignature, "error: %s", err.Error()), + Reason: ierrors.Wrapf(iotago.ErrInvalidSignature, "error: %s", err.Error()), }) return @@ -179,7 +173,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { if !hiveEd25519.Verify(signature.PublicKey[:], signingMessage, signature.Signature[:]) { c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ErrInvalidSignature, + Reason: iotago.ErrInvalidSignature, }) return @@ -187,7 +181,7 @@ func (c *CommitmentFilter) evaluateBlock(block *blocks.Block) { default: c.events.BlockFiltered.Trigger(&commitmentfilter.BlockFilteredEvent{ Block: block, - Reason: ierrors.Wrapf(ErrInvalidSignature, "only ed25519 signatures supported, got %s", block.ProtocolBlock().Signature.Type()), + Reason: ierrors.Wrapf(iotago.ErrInvalidSignature, "only ed25519 signatures supported, got %s", block.ProtocolBlock().Signature.Type()), }) return diff --git a/pkg/retainer/retainer/errors.go b/pkg/retainer/retainer/errors.go index 92d2654dd..4d465c247 100644 --- a/pkg/retainer/retainer/errors.go +++ b/pkg/retainer/retainer/errors.go @@ -6,6 +6,27 @@ import ( "github.com/iotaledger/iota.go/v4/nodeclient/apimodels" ) +var blocksErrorsFailureReasonMap = map[error]apimodels.BlockFailureReason{ + iotago.ErrIssuerAccountNotFound: apimodels.BlockFailureIssuerAccountNotFound, + iotago.ErrBurnedInsufficientMana: apimodels.BlockFailurBurnedInsufficientMana, + iotago.ErrBlockVersionInvalid: apimodels.BlockFailureVersionInvalid, + iotago.ErrRMCNotFound: apimodels.BlockFailureAccountInvalid, + iotago.ErrFailedToCalculateManaCost: apimodels.BlockFailureManaCostCalculationFailed, + iotago.ErrNegativeBIC: apimodels.BlockFailureAccountInvalid, + iotago.ErrAccountExpired: apimodels.BlockFailureAccountInvalid, + iotago.ErrInvalidSignature: apimodels.BlockFailureSignatureInvalid, +} + +func determineBlockFailureReason(err error) apimodels.BlockFailureReason { + for errKey, failureReason := range blocksErrorsFailureReasonMap { + if ierrors.Is(err, errKey) { + return failureReason + } + } + // use most general failure reason + return apimodels.BlockFailureInvalid +} + var txErrorsFailureReasonMap = map[error]apimodels.TransactionFailureReason{ // unknown type / type casting errors iotago.ErrTxTypeInvalid: apimodels.TxFailureTxTypeInvalid, diff --git a/pkg/retainer/retainer/retainer.go b/pkg/retainer/retainer/retainer.go index 02303485d..2a4ae8778 100644 --- a/pkg/retainer/retainer/retainer.go +++ b/pkg/retainer/retainer/retainer.go @@ -8,6 +8,7 @@ import ( "github.com/iotaledger/hive.go/runtime/workerpool" "github.com/iotaledger/iota-core/pkg/protocol/engine" "github.com/iotaledger/iota-core/pkg/protocol/engine/blocks" + "github.com/iotaledger/iota-core/pkg/protocol/engine/commitmentfilter" "github.com/iotaledger/iota-core/pkg/protocol/engine/mempool" "github.com/iotaledger/iota-core/pkg/retainer" "github.com/iotaledger/iota-core/pkg/storage/prunable/slotstore" @@ -66,6 +67,10 @@ func NewProvider() module.Provider[*engine.Engine, retainer.Retainer] { } }, asyncOpt) + e.Events.CommitmentFilter.BlockFiltered.Hook(func(e *commitmentfilter.BlockFilteredEvent) { + r.RetainBlockFailure(e.Block.ID(), determineBlockFailureReason(e.Reason)) + }, asyncOpt) + e.Events.BlockGadget.BlockAccepted.Hook(func(b *blocks.Block) { if err := r.onBlockAccepted(b.ID()); err != nil { r.errorHandler(ierrors.Wrap(err, "failed to store on BlockAccepted in retainer")) diff --git a/tools/evil-spammer/go.mod b/tools/evil-spammer/go.mod index 9fc5694ec..6a5347d2a 100644 --- a/tools/evil-spammer/go.mod +++ b/tools/evil-spammer/go.mod @@ -19,7 +19,7 @@ require ( github.com/iotaledger/hive.go/runtime v0.0.0-20231018191940-f36386f4e2fa github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000 github.com/iotaledger/iota-core/tools/genesis-snapshot v0.0.0-00010101000000-000000000000 - github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 + github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 github.com/mr-tron/base58 v1.2.0 go.uber.org/atomic v1.11.0 ) diff --git a/tools/evil-spammer/go.sum b/tools/evil-spammer/go.sum index 2956f2dea..05cf1e814 100644 --- a/tools/evil-spammer/go.sum +++ b/tools/evil-spammer/go.sum @@ -199,8 +199,8 @@ github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231018191940-f36386f github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231018191940-f36386f4e2fa/go.mod h1:IJgaaxbgKCsNat18jlJJEAxCY2oVYR3F30B+M4vJ89I= github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa h1:T4VSaXAPTxQ72QoP/nqaqoIagT3r4A6XJJJbnUIV3yQ= github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 h1:1gYYpNn0okDmMLQUr3FITo1Eeqid6Ukhq0ppf8KXhFo= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 h1:g+0LnBBv9yu1Z1Y4d7anVgwikRcLPw1WW9K6OVTTRak= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= diff --git a/tools/gendoc/go.mod b/tools/gendoc/go.mod index 0feaa70e7..820f978bd 100644 --- a/tools/gendoc/go.mod +++ b/tools/gendoc/go.mod @@ -73,7 +73,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa // indirect github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 // indirect github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad // indirect - github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 // indirect + github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 // indirect github.com/ipfs/boxo v0.10.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect diff --git a/tools/gendoc/go.sum b/tools/gendoc/go.sum index 7600bdeda..dea528c42 100644 --- a/tools/gendoc/go.sum +++ b/tools/gendoc/go.sum @@ -313,8 +313,8 @@ github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 h1:nR8uT github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811/go.mod h1:rmclNpXw5sKJDHU0e51Ar/9zL00P7Uu9hkfaM7vAAiE= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad h1:TRM9EkAole9fYY1vHEVQ6zCEOGuvCWq/bczZ98Al5Ec= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad/go.mod h1:plZ0+8yLdDWHedj3SfHUwQtIETD+lcS6M1iEAxcjzJ4= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 h1:1gYYpNn0okDmMLQUr3FITo1Eeqid6Ukhq0ppf8KXhFo= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 h1:g+0LnBBv9yu1Z1Y4d7anVgwikRcLPw1WW9K6OVTTRak= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= diff --git a/tools/genesis-snapshot/go.mod b/tools/genesis-snapshot/go.mod index daaf453c9..b65dc4f6c 100644 --- a/tools/genesis-snapshot/go.mod +++ b/tools/genesis-snapshot/go.mod @@ -10,7 +10,7 @@ require ( github.com/iotaledger/hive.go/lo v0.0.0-20231018191940-f36386f4e2fa github.com/iotaledger/hive.go/runtime v0.0.0-20231018191940-f36386f4e2fa github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000 - github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 + github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 github.com/mr-tron/base58 v1.2.0 github.com/spf13/pflag v1.0.5 golang.org/x/crypto v0.14.0 diff --git a/tools/genesis-snapshot/go.sum b/tools/genesis-snapshot/go.sum index cd0d25243..80bd47c6e 100644 --- a/tools/genesis-snapshot/go.sum +++ b/tools/genesis-snapshot/go.sum @@ -52,8 +52,8 @@ github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231018191940-f36386f github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231018191940-f36386f4e2fa/go.mod h1:IJgaaxbgKCsNat18jlJJEAxCY2oVYR3F30B+M4vJ89I= github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa h1:T4VSaXAPTxQ72QoP/nqaqoIagT3r4A6XJJJbnUIV3yQ= github.com/iotaledger/hive.go/stringify v0.0.0-20231018191940-f36386f4e2fa/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1 h1:1gYYpNn0okDmMLQUr3FITo1Eeqid6Ukhq0ppf8KXhFo= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019023037-1368dad7a6c1/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601 h1:g+0LnBBv9yu1Z1Y4d7anVgwikRcLPw1WW9K6OVTTRak= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019075014-2efd49449601/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= From f89cb23d28f896ba037527bd4394cf4c7869c69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Thu, 19 Oct 2023 11:19:55 +0200 Subject: [PATCH 10/13] Propagate errors instead of panic when indexer or client it unreachable --- tools/evil-spammer/accountwallet/faucet.go | 4 +++- tools/evil-spammer/accountwallet/wallet.go | 26 ++++++++++++++-------- tools/evil-spammer/main.go | 5 ++++- tools/evil-spammer/models/connector.go | 24 +++++++++++++++----- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/tools/evil-spammer/accountwallet/faucet.go b/tools/evil-spammer/accountwallet/faucet.go index a4031710b..6f67fdb8f 100644 --- a/tools/evil-spammer/accountwallet/faucet.go +++ b/tools/evil-spammer/accountwallet/faucet.go @@ -177,7 +177,9 @@ func newFaucet(clt models.Client, faucetParams *faucetParams) (*faucet, error) { func (f *faucet) getGenesisOutputFromIndexer(clt models.Client, faucetAddr iotago.DirectUnlockableAddress) (iotago.Output, iotago.OutputID, iotago.BaseToken, error) { indexer, err := clt.Indexer() if err != nil { - panic(ierrors.Wrap(err, "failed to get indexer")) + log.Errorf("account wallet failed due to failure in connecting to indexer") + + return nil, iotago.EmptyOutputID, 0, ierrors.Wrapf(err, "failed to get indexer from client") } results, err := indexer.Outputs(context.Background(), &apimodels.BasicOutputsQuery{ diff --git a/tools/evil-spammer/accountwallet/wallet.go b/tools/evil-spammer/accountwallet/wallet.go index eaae1e9b9..af8903e3a 100644 --- a/tools/evil-spammer/accountwallet/wallet.go +++ b/tools/evil-spammer/accountwallet/wallet.go @@ -36,10 +36,13 @@ func Run(config *Configuration) (*AccountWallet, error) { faucetAccountID: config.AccountID, })) - wallet := NewAccountWallet(opts...) + wallet, err := NewAccountWallet(opts...) + if err != nil { + return nil, ierrors.Wrap(err, "failed to create wallet") + } // load wallet - err := wallet.fromAccountStateFile() + err = wallet.fromAccountStateFile() if err != nil { return nil, ierrors.Wrap(err, "failed to load wallet from file") } @@ -69,21 +72,26 @@ type AccountWallet struct { optsRequestTicker time.Duration } -func NewAccountWallet(opts ...options.Option[AccountWallet]) *AccountWallet { +func NewAccountWallet(opts ...options.Option[AccountWallet]) (*AccountWallet, error) { + var initErr error return options.Apply(&AccountWallet{ accountsAliases: make(map[string]*models.AccountData), seed: tpkg.RandEd25519Seed(), optsRequestTimeout: time.Second * 120, optsRequestTicker: time.Second * 5, }, opts, func(w *AccountWallet) { - w.client = models.NewWebClient(w.optsClientBindAddress) + w.client, initErr = models.NewWebClient(w.optsClientBindAddress) + if initErr != nil { + return + } - faucet, err := newFaucet(w.client, w.optsFaucetParams) - if err != nil { - panic(ierrors.Wrap(err, "failed to create faucet")) + var f *faucet + f, initErr = newFaucet(w.client, w.optsFaucetParams) + if initErr != nil { + return } - w.faucet = faucet + w.faucet = f w.accountsAliases[FaucetAccountAlias] = &models.AccountData{ Alias: FaucetAccountAlias, Status: models.AccountReady, @@ -91,7 +99,7 @@ func NewAccountWallet(opts ...options.Option[AccountWallet]) *AccountWallet { Index: 0, Account: w.faucet.account, } - }) + }), initErr } // toAccountStateFile write account states to file. diff --git a/tools/evil-spammer/main.go b/tools/evil-spammer/main.go index 3306fe387..b94687059 100644 --- a/tools/evil-spammer/main.go +++ b/tools/evil-spammer/main.go @@ -36,9 +36,12 @@ func main() { // load wallet accWallet, err = accountwallet.Run(config) if err != nil { - log.Warn(err) + log.Error(err) + log.Errorf("Failed to init account wallet, exitting...") + return } + // save wallet and latest faucet output defer func() { err = accountwallet.SaveState(accWallet) diff --git a/tools/evil-spammer/models/connector.go b/tools/evil-spammer/models/connector.go index a367dc66c..c82d362c4 100644 --- a/tools/evil-spammer/models/connector.go +++ b/tools/evil-spammer/models/connector.go @@ -4,6 +4,8 @@ import ( "context" "time" + "github.com/google/martian/log" + "github.com/iotaledger/hive.go/runtime/options" "github.com/iotaledger/hive.go/runtime/syncutils" "github.com/iotaledger/iota-core/pkg/model" @@ -51,8 +53,14 @@ type WebClients struct { // NewWebClients creates Connector from provided GoShimmerAPI urls. func NewWebClients(urls []string, setters ...options.Option[WebClient]) *WebClients { clients := make([]*WebClient, len(urls)) + var err error for i, url := range urls { - clients[i] = NewWebClient(url, setters...) + clients[i], err = NewWebClient(url, setters...) + if err != nil { + log.Errorf("failed to create client for url %s: %s", url, err) + + return nil + } } return &WebClients{ @@ -134,7 +142,12 @@ func (c *WebClients) AddClient(url string, setters ...options.Option[WebClient]) c.mu.Lock() defer c.mu.Unlock() - clt := NewWebClient(url, setters...) + clt, err := NewWebClient(url, setters...) + if err != nil { + log.Errorf("failed to create client for url %s: %s", url, err) + + return + } c.clients = append(c.clients, clt) c.urls = append(c.urls, url) } @@ -223,12 +236,13 @@ func (c *WebClient) URL() string { } // NewWebClient creates Connector from provided iota-core API urls. -func NewWebClient(url string, opts ...options.Option[WebClient]) *WebClient { +func NewWebClient(url string, opts ...options.Option[WebClient]) (*WebClient, error) { + var initErr error return options.Apply(&WebClient{ url: url, }, opts, func(w *WebClient) { - w.client, _ = nodeclient.New(w.url) - }) + w.client, initErr = nodeclient.New(w.url) + }), initErr } func (c *WebClient) PostBlock(block *iotago.ProtocolBlock) (blockID iotago.BlockID, err error) { From 8c2dcad2cb3d5c684b87848703d6a2608d187acd Mon Sep 17 00:00:00 2001 From: Daria Date: Thu, 19 Oct 2023 12:05:57 +0200 Subject: [PATCH 11/13] Add RMC method for commitment and use it in REST API --- components/restapi/core/accounts.go | 13 ++++--------- pkg/model/commitment.go | 4 ++++ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/components/restapi/core/accounts.go b/components/restapi/core/accounts.go index 73e069593..2c38300d8 100644 --- a/components/restapi/core/accounts.go +++ b/components/restapi/core/accounts.go @@ -22,9 +22,9 @@ func congestionForAccountID(c echo.Context) (*apimodels.CongestionResponse, erro return nil, err } - commitmentSlot := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment().Slot() + commitment := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment() - acc, exists, err := deps.Protocol.MainEngineInstance().Ledger.Account(accountID, commitmentSlot) + acc, exists, err := deps.Protocol.MainEngineInstance().Ledger.Account(accountID, commitment.Slot()) if err != nil { return nil, ierrors.Wrapf(err, "failed to get account: %s form the Ledger", accountID.ToHex()) } @@ -32,15 +32,10 @@ func congestionForAccountID(c echo.Context) (*apimodels.CongestionResponse, erro return nil, ierrors.Errorf("account not found: %s", accountID.ToHex()) } - rmc, err := deps.Protocol.MainEngineInstance().Ledger.RMCManager().RMC(commitmentSlot) - if err != nil { - return nil, ierrors.Wrapf(err, "failed to get RMC for slot: %d", commitmentSlot) - } - return &apimodels.CongestionResponse{ - Slot: commitmentSlot, + Slot: commitment.Slot(), Ready: deps.Protocol.MainEngineInstance().Scheduler.IsBlockIssuerReady(accountID), - ReferenceManaCost: rmc, + ReferenceManaCost: commitment.ReferenceManaCost(), BlockIssuanceCredits: acc.Credits.Value, }, nil } diff --git a/pkg/model/commitment.go b/pkg/model/commitment.go index 924fb7cb4..cf17c8c4f 100644 --- a/pkg/model/commitment.go +++ b/pkg/model/commitment.go @@ -94,6 +94,10 @@ func (c *Commitment) CumulativeWeight() uint64 { return c.Commitment().CumulativeWeight } +func (c *Commitment) ReferenceManaCost() iotago.Mana { + return c.Commitment().ReferenceManaCost +} + func (c *Commitment) Data() []byte { return c.data } From 29ed31df4fea7821728705604621e7ba8e9756a3 Mon Sep 17 00:00:00 2001 From: Daria Date: Thu, 19 Oct 2023 12:37:09 +0200 Subject: [PATCH 12/13] Update go mod for iotago --- tools/evil-spammer/go.mod | 2 +- tools/evil-spammer/go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/evil-spammer/go.mod b/tools/evil-spammer/go.mod index 48eae9a9e..3347ef4e0 100644 --- a/tools/evil-spammer/go.mod +++ b/tools/evil-spammer/go.mod @@ -18,7 +18,7 @@ require ( github.com/iotaledger/hive.go/runtime v0.0.0-20231019082730-54e1c06ab9c2 github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000 github.com/iotaledger/iota-core/tools/genesis-snapshot v0.0.0-00010101000000-000000000000 - github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c + github.com/iotaledger/iota.go/v4 v4.0.0-20231019103309-47202790708b github.com/mr-tron/base58 v1.2.0 go.uber.org/atomic v1.11.0 ) diff --git a/tools/evil-spammer/go.sum b/tools/evil-spammer/go.sum index 323048464..b08454eab 100644 --- a/tools/evil-spammer/go.sum +++ b/tools/evil-spammer/go.sum @@ -201,6 +201,8 @@ github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2 h1:vi github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c h1:hk9NK+JD4WMOCImQmUnwK8PoHsdQwaaZyYcEmkRulNc= github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019103309-47202790708b h1:FB7OpkACWvlSdTGJXK3HndNSYfhsVkAjHS1I/VFoKrA= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019103309-47202790708b/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= From 503b263ce891e9334e6944e53761d52345d7423d Mon Sep 17 00:00:00 2001 From: jkrvivian Date: Thu, 19 Oct 2023 20:33:13 +0800 Subject: [PATCH 13/13] Update iota.go --- go.mod | 2 +- go.sum | 4 ++-- tools/evil-spammer/go.mod | 3 ++- tools/evil-spammer/go.sum | 8 ++++---- tools/gendoc/go.mod | 2 +- tools/gendoc/go.sum | 4 ++-- tools/genesis-snapshot/go.mod | 2 +- tools/genesis-snapshot/go.sum | 4 ++-- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index e818d1e47..fcfb506bd 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2 github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad - github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c + github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 github.com/labstack/echo/v4 v4.11.2 github.com/labstack/gommon v0.4.0 github.com/libp2p/go-libp2p v0.30.0 diff --git a/go.sum b/go.sum index f2192e1e7..837cb6a9d 100644 --- a/go.sum +++ b/go.sum @@ -309,8 +309,8 @@ github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 h1:nR8uT github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811/go.mod h1:rmclNpXw5sKJDHU0e51Ar/9zL00P7Uu9hkfaM7vAAiE= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad h1:TRM9EkAole9fYY1vHEVQ6zCEOGuvCWq/bczZ98Al5Ec= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad/go.mod h1:plZ0+8yLdDWHedj3SfHUwQtIETD+lcS6M1iEAxcjzJ4= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c h1:hk9NK+JD4WMOCImQmUnwK8PoHsdQwaaZyYcEmkRulNc= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 h1:Lhk/aEyFwDflE03kdI6Xeap/awDJbxVsBzKh08U9hTY= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648/go.mod h1:XFwcDfAF0hv6wB/trCsyDmQyPLjEZ60yTrllJ2bprN8= github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= diff --git a/tools/evil-spammer/go.mod b/tools/evil-spammer/go.mod index 3347ef4e0..08e67f735 100644 --- a/tools/evil-spammer/go.mod +++ b/tools/evil-spammer/go.mod @@ -9,6 +9,7 @@ replace github.com/iotaledger/iota-core/tools/genesis-snapshot => ../genesis-sna require ( github.com/AlecAivazis/survey/v2 v2.3.7 github.com/ethereum/go-ethereum v1.13.4 + github.com/google/martian v2.1.0+incompatible github.com/iotaledger/hive.go/app v0.0.0-20231019082730-54e1c06ab9c2 github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231019082730-54e1c06ab9c2 github.com/iotaledger/hive.go/ds v0.0.0-20231019082730-54e1c06ab9c2 @@ -18,7 +19,7 @@ require ( github.com/iotaledger/hive.go/runtime v0.0.0-20231019082730-54e1c06ab9c2 github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000 github.com/iotaledger/iota-core/tools/genesis-snapshot v0.0.0-00010101000000-000000000000 - github.com/iotaledger/iota.go/v4 v4.0.0-20231019103309-47202790708b + github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 github.com/mr-tron/base58 v1.2.0 go.uber.org/atomic v1.11.0 ) diff --git a/tools/evil-spammer/go.sum b/tools/evil-spammer/go.sum index b08454eab..6b3aaff4e 100644 --- a/tools/evil-spammer/go.sum +++ b/tools/evil-spammer/go.sum @@ -118,6 +118,8 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -199,10 +201,8 @@ github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019082730-54e1c06 github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019082730-54e1c06ab9c2/go.mod h1:SdK26z8/VhWtxaqCuQrufm80SELgowQPmu9T/8eUQ8g= github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2 h1:virnPQxZvZ00VqcZBzTvPo5DLUZgIvH06YEhktwW224= github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c h1:hk9NK+JD4WMOCImQmUnwK8PoHsdQwaaZyYcEmkRulNc= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019103309-47202790708b h1:FB7OpkACWvlSdTGJXK3HndNSYfhsVkAjHS1I/VFoKrA= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019103309-47202790708b/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 h1:Lhk/aEyFwDflE03kdI6Xeap/awDJbxVsBzKh08U9hTY= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648/go.mod h1:XFwcDfAF0hv6wB/trCsyDmQyPLjEZ60yTrllJ2bprN8= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= diff --git a/tools/gendoc/go.mod b/tools/gendoc/go.mod index 2bfa5943b..56fbd2aa2 100644 --- a/tools/gendoc/go.mod +++ b/tools/gendoc/go.mod @@ -73,7 +73,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2 // indirect github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 // indirect github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad // indirect - github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c // indirect + github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 // indirect github.com/ipfs/boxo v0.10.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect diff --git a/tools/gendoc/go.sum b/tools/gendoc/go.sum index 2ce9471f5..2f44e3778 100644 --- a/tools/gendoc/go.sum +++ b/tools/gendoc/go.sum @@ -313,8 +313,8 @@ github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811 h1:nR8uT github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231011161248-cf0bd6e08811/go.mod h1:rmclNpXw5sKJDHU0e51Ar/9zL00P7Uu9hkfaM7vAAiE= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad h1:TRM9EkAole9fYY1vHEVQ6zCEOGuvCWq/bczZ98Al5Ec= github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231011154428-257141868dad/go.mod h1:plZ0+8yLdDWHedj3SfHUwQtIETD+lcS6M1iEAxcjzJ4= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c h1:hk9NK+JD4WMOCImQmUnwK8PoHsdQwaaZyYcEmkRulNc= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 h1:Lhk/aEyFwDflE03kdI6Xeap/awDJbxVsBzKh08U9hTY= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648/go.mod h1:XFwcDfAF0hv6wB/trCsyDmQyPLjEZ60yTrllJ2bprN8= github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= diff --git a/tools/genesis-snapshot/go.mod b/tools/genesis-snapshot/go.mod index e00601fac..04606fec3 100644 --- a/tools/genesis-snapshot/go.mod +++ b/tools/genesis-snapshot/go.mod @@ -10,7 +10,7 @@ require ( github.com/iotaledger/hive.go/lo v0.0.0-20231019082730-54e1c06ab9c2 github.com/iotaledger/hive.go/runtime v0.0.0-20231019082730-54e1c06ab9c2 github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000 - github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c + github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 github.com/mr-tron/base58 v1.2.0 github.com/spf13/pflag v1.0.5 golang.org/x/crypto v0.14.0 diff --git a/tools/genesis-snapshot/go.sum b/tools/genesis-snapshot/go.sum index 877e2cb74..4f7a7b50c 100644 --- a/tools/genesis-snapshot/go.sum +++ b/tools/genesis-snapshot/go.sum @@ -52,8 +52,8 @@ github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019082730-54e1c06 github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019082730-54e1c06ab9c2/go.mod h1:SdK26z8/VhWtxaqCuQrufm80SELgowQPmu9T/8eUQ8g= github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2 h1:virnPQxZvZ00VqcZBzTvPo5DLUZgIvH06YEhktwW224= github.com/iotaledger/hive.go/stringify v0.0.0-20231019082730-54e1c06ab9c2/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c h1:hk9NK+JD4WMOCImQmUnwK8PoHsdQwaaZyYcEmkRulNc= -github.com/iotaledger/iota.go/v4 v4.0.0-20231019083312-e415fefc417c/go.mod h1:XmgOVYZ7805zVEYPwhvqBDVa7XieXRgPrCEGZW35W8k= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648 h1:Lhk/aEyFwDflE03kdI6Xeap/awDJbxVsBzKh08U9hTY= +github.com/iotaledger/iota.go/v4 v4.0.0-20231019112751-e9872df31648/go.mod h1:XFwcDfAF0hv6wB/trCsyDmQyPLjEZ60yTrllJ2bprN8= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=