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()) diff --git a/components/restapi/core/accounts.go b/components/restapi/core/accounts.go index cef91cbeb..d5a9661d3 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,28 +22,20 @@ func congestionForAccountID(c echo.Context) (*apimodels.CongestionResponse, erro return nil, err } - slot := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment().Slot() + commitment := deps.Protocol.MainEngineInstance().SyncManager.LatestCommitment() - acc, exists, err := deps.Protocol.MainEngineInstance().Ledger.Account(accountID, slot) + 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()) } 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) - if err != nil { - return nil, ierrors.Wrapf(err, "failed to get RMC for slot: %d", rmcSlot) - } return &apimodels.CongestionResponse{ - Slot: slot, + Slot: commitment.Slot(), Ready: deps.Protocol.MainEngineInstance().Scheduler.IsBlockIssuerReady(accountID), - ReferenceManaCost: rmc, + ReferenceManaCost: commitment.ReferenceManaCost(), BlockIssuanceCredits: acc.Credits.Value, }, nil } diff --git a/components/restapi/core/blocks.go b/components/restapi/core/blocks.go index 35cc8c816..3cebcb8be 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 02424b604..8efdbef70 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/go.mod b/go.mod index c0cdc51d3..8f58c8568 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/iotaledger/hive.go/stringify v0.0.0-20231019113503-7986872a7a38 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 1d10b19bb..1de1123f2 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/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 } diff --git a/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter.go index d79af95b8..2b0f878c9 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" @@ -14,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 @@ -76,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 @@ -84,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 @@ -95,20 +88,17 @@ 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 - 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{ 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 @@ -118,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 @@ -135,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 @@ -145,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 @@ -165,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 @@ -175,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 @@ -183,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 @@ -191,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/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter_test.go b/pkg/protocol/engine/commitmentfilter/accountsfilter/commitmentfilter_test.go index c7e044b48..dfb7c02a6 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.CommittedAPI() @@ -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) } 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 72bcd28e9..47199d30f 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/accountwallet/faucet.go b/tools/evil-spammer/accountwallet/faucet.go index 3a6948142..6f67fdb8f 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" @@ -29,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") } @@ -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() @@ -175,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/go.mod b/tools/evil-spammer/go.mod index 7e0d2631c..89b8bdd05 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-20231019113503-7986872a7a38 github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231019113503-7986872a7a38 github.com/iotaledger/hive.go/ds v0.0.0-20231019113503-7986872a7a38 @@ -18,7 +19,7 @@ require ( github.com/iotaledger/hive.go/runtime v0.0.0-20231019113503-7986872a7a38 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-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 26a03f487..66d6fc334 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,8 +201,8 @@ github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019113503-7986872 github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019113503-7986872a7a38/go.mod h1:SdK26z8/VhWtxaqCuQrufm80SELgowQPmu9T/8eUQ8g= github.com/iotaledger/hive.go/stringify v0.0.0-20231019113503-7986872a7a38 h1:jh0LHzzLqVO+SW9NkvNIgYo1g3CyTBnR8Qv3+PNH+dY= github.com/iotaledger/hive.go/stringify v0.0.0-20231019113503-7986872a7a38/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/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= 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 d408005d5..e09b01da5 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) } @@ -176,7 +189,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) @@ -227,12 +240,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) { @@ -305,13 +319,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) { diff --git a/tools/gendoc/go.mod b/tools/gendoc/go.mod index 48cd59a38..9ffe27b94 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-20231019113503-7986872a7a38 // 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 7ca7150c2..593c433c4 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 cd8957af8..15d39c92a 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-20231019113503-7986872a7a38 github.com/iotaledger/hive.go/runtime v0.0.0-20231019113503-7986872a7a38 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 d89542804..1fe1cefe1 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.20231019113503-7986872 github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231019113503-7986872a7a38/go.mod h1:SdK26z8/VhWtxaqCuQrufm80SELgowQPmu9T/8eUQ8g= github.com/iotaledger/hive.go/stringify v0.0.0-20231019113503-7986872a7a38 h1:jh0LHzzLqVO+SW9NkvNIgYo1g3CyTBnR8Qv3+PNH+dY= github.com/iotaledger/hive.go/stringify v0.0.0-20231019113503-7986872a7a38/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=