From aa045a27e136e1c7990b010559b49e9d86bd040b Mon Sep 17 00:00:00 2001 From: jkrvivian Date: Tue, 21 Nov 2023 19:57:39 +0800 Subject: [PATCH] Rename conflict to spend in dashboard frontend --- .../build/app.48ab2676b5153e0e40b7.js | 1 + .../build/app.48ab2676b5153e0e40b7.js.map | 1 + .../build/app.6eea8010fee08f23aca6.js | 1 - .../build/app.6eea8010fee08f23aca6.js.map | 1 - .../dashboard/frontend/build/index.html | 2 +- .../frontend/src/app/components/Explorer.tsx | 6 +- .../app/components/ExplorerAddressResult.tsx | 8 +- .../components/ExplorerBlockQueryResult.tsx | 20 ++--- .../components/ExplorerOutputQueryResult.tsx | 8 +- ...esult.tsx => ExplorerSpendQueryResult.tsx} | 48 ++++++------ ...archbar.tsx => ExplorerSpendSearchbar.tsx} | 14 ++-- .../ExplorerTransactionMetadata.tsx | 8 +- .../frontend/src/app/components/Root.tsx | 4 +- .../frontend/src/app/misc/Payload.ts | 2 +- .../dashboard/frontend/src/app/misc/WS.ts | 4 +- .../frontend/src/app/stores/ExplorerStore.tsx | 62 +++++++-------- .../{ConflictsStore.tsx => SpendsStore.tsx} | 76 +++++++++---------- .../frontend/src/app/utils/conflict.ts | 21 ----- .../dashboard/frontend/src/app/utils/spend.ts | 21 +++++ components/dashboard/frontend/src/main.tsx | 6 +- 20 files changed, 157 insertions(+), 157 deletions(-) create mode 100644 components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js create mode 100644 components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js.map delete mode 100644 components/dashboard/frontend/build/app.6eea8010fee08f23aca6.js delete mode 100644 components/dashboard/frontend/build/app.6eea8010fee08f23aca6.js.map rename components/dashboard/frontend/src/app/components/{ExplorerConflictQueryResult.tsx => ExplorerSpendQueryResult.tsx} (52%) rename components/dashboard/frontend/src/app/components/{ExplorerConflictSearchbar.tsx => ExplorerSpendSearchbar.tsx} (74%) rename components/dashboard/frontend/src/app/stores/{ConflictsStore.tsx => SpendsStore.tsx} (55%) delete mode 100644 components/dashboard/frontend/src/app/utils/conflict.ts create mode 100644 components/dashboard/frontend/src/app/utils/spend.ts diff --git a/components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js b/components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js new file mode 100644 index 000000000..5094397e7 --- /dev/null +++ b/components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js @@ -0,0 +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 s(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}s.keys=function(){return Object.keys(r)},s.resolve=a,e.exports=s,s.id=298},434:function(e,t,n){"use strict";n.r(t);var r=n(1),s=n(24),a=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 s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),a.c],h);var b=h,g=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let y=class extends r.Component{render(){return r.createElement(r.Fragment,null,"Version: ",this.props.nodeStore.status.version)}};y=g([Object(a.b)("nodeStore"),a.c],y);var f=y,E=n(15),v=n(29),I={elements:{line:{tension:0}},animation:{duration:0},hover:{animationDuration:0},responsiveAnimationDuration:0},S=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};const k=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 x=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:k})))}};x=S([Object(a.b)("nodeStore"),a.c],x);var j=x,O=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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 D=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})))}};D=O([Object(a.b)("nodeStore"),a.c],D);var R=D,_=n(2),C=n(28),N=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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 C(Math.abs(e))},maxTicksLimit:3,fontSize:10}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${C(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"," ",C(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: ",C(e.heap_sys-e.heap_idle),", Retained: ",C(e.heap_idle-e.heap_released),"]"),r.createElement(v.Line,{height:50,data:this.props.nodeStore.memSeries,options:T})))}};P=N([Object(a.b)("nodeStore"),a.c],P);var M=P,L=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),a.c],B);var z=B,H=n(14),F=n(20),V=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),a.c],Z);var U=Z,W=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),a.c],J);var G=J,q=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(_.a,{variant:"flush"},r.createElement(_.a.Item,null,r.createElement(b,null)))),r.createElement(u.a,null,r.createElement(_.a,{variant:"flush"},r.createElement(_.a.Item,null,r.createElement(G,null)))),r.createElement(u.a,null,r.createElement(_.a,{variant:"flush"},r.createElement(_.a.Item,null,r.createElement(f,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(R,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(a.b)("nodeStore"),a.c],X);var Q=n(16),K=n(23),$=n(22),Y=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],ee);var te=n(71),ne=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],re);var se=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let ae=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})))))}};ae=se([Object(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],ae);var le=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],oe);var ie=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let ce=class extends r.Component{constructor(){super(...arguments),this.updateSearch=e=>{this.spendID=e.target.value},this.executeSearch=e=>{"Enter"===e.key&&this.props.explorerStore.routerStore.push("/explorer/spend/"+this.spendID)}}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:"Spend ID","aria-label":"Spend ID","aria-describedby":"basic-addon1",value:this.spendID,onChange:this.updateSearch,onKeyUp:this.executeSearch,disabled:e})))))}};ce=ie([Object(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],ce);var pe=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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 spends."))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(ee,null)),r.createElement(u.a,null,r.createElement(ae,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(a.b)("nodeStore"),a.c],de);var ue=n(288),me=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],he);var be,ge=n(17),ye=n(44),fe=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.SpendSet=14]="SpendSet",e[e.Spend=15]="Spend",e[e.SlotInfo=16]="SlotInfo"}(be||(be={}));let Ee={};function ve(e,t){Ee[e]=t}function Ie(e){delete Ee[e]}var Se,ke,xe,je;!function(e){e[e.TaggedData=0]="TaggedData",e[e.Transaction=1]="Transaction",e[e.Faucet=3]="Faucet"}(Se||(Se={}));class Oe{}class we{}function De(e){switch(e){case Se.TaggedData:return"TaggedData";case Se.Transaction:return"Transaction";case Se.Faucet:return"Faucet";default:return"Unknown"}}class Re extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.token.id},r.createElement(_.a,null,r.createElement(_.a.Item,null,"ID: ",this.props.token.id),r.createElement(_.a.Item,null,"Amount: ",this.props.token.amount)))}}class _e extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.address},r.createElement(_.a,null,r.createElement(_.a.Item,null,"Address Type: ",this.props.unlock.address.type)),r.createElement(_.a,null,r.createElement(_.a.Item,null,"Address: ",this.props.unlock.address.pubKeyHash)))}}class Ce extends r.Component{render(){return this.props.unlock.unixTime&&r.createElement("div",{className:"mb-2",key:"unlockCondition"+this.props.unlock.unixTime},r.createElement(_.a,null,r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"Return Address: ",this.props.unlock.returnAddress),r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"Return Address: ",this.props.unlock.returnAddress),r.createElement(_.a.Item,null,"Unix Time: ",this.props.unlock.unixTime)))}}function Pe(e){switch(e.type){case ke.Address:case ke.StateControllerAddress:case ke.GovernorAddress:return r.createElement(_e,{unlock:e});case ke.StorageDepositReturn:return r.createElement(Ne,{unlock:e});case ke.Expiration:return r.createElement(Te,{unlock:e});case ke.Timelock:return r.createElement(Ce,{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"}(ke||(ke={}));class Me extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:"feature"+this.props.feature.address},r.createElement(_.a,null,r.createElement(_.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(_.a,null,r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"Data: ",this.props.feature.tag)))}}function Be(e){switch(e.type){case xe.Sender:case xe.Issuer:return r.createElement(Me,{feature:e.feature});case xe.Metadata:return r.createElement(Le,{feature:e.feature});case xe.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"}(xe||(xe={}));class ze extends r.Component{render(){return r.createElement("div",{className:"mb-2",key:this.props.id.hex},r.createElement(_.a,null,r.createElement(_.a.Item,null,"Type: BasicOutput"),r.createElement(_.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(_.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(Re,{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(_.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(_.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(_.a,{style:{wordBreak:"break-word"}},r.createElement(_.a.Item,null,"Type: AliasOutput"),r.createElement(_.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(_.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(_.a.Item,null,"AliasID: ",this.props.output.aliasId),r.createElement(_.a.Item,null,"StateIndex: ",this.props.output.stateIndex),r.createElement(_.a.Item,null,"State Metadata: ",this.props.output.stateMetadata," "),r.createElement(_.a.Item,null,"Foundry Counter: ",this.props.output.foundryCounter),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(Re,{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(_.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"Type: FoundryOutput"),r.createElement(_.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(_.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(_.a.Item,null,"Serial Number: ",this.props.output.serialNumber),r.createElement(_.a.Item,null,"Token Scheme: ",this.props.output.tokenScheme),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(Re,{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(_.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"Type: FoundryOutput"),r.createElement(_.a.Item,null,"Amount: ",this.props.output.amount),r.createElement(_.a.Item,null,"OutputID: ",r.createElement("a",{href:"/explorer/output/"+this.props.id.hex},this.props.id.hex)),r.createElement(_.a.Item,null,"NFT ID: ",this.props.output.nftId),this.props.output.nativeTokens&&this.props.output.nativeTokens.map((e,t)=>r.createElement(Re,{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(_.a.Item,null,"Transaction: ",r.createElement("a",{href:"/explorer/transaction/"+this.props.id.transactionID}," ",this.props.id.transactionID)),r.createElement(_.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 s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(s,a){function l(e){try{i(r.next(e))}catch(e){a(e)}}function o(e){try{i(r.throw(e))}catch(e){a(e)}}function i(e){var t;e.done?s(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.spend=null,this.spendChildren=null,this.spendSpends=null,this.spendVoters=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.getSpend=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get","/api/spend/"+e);this.spend=t})),this.getSpendChildren=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/spend/${e}/children`);this.spendChildren=t})),this.getSpendSpends=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/spend/${e}/spends`);this.spendSpends=t})),this.getSpendVoters=e=>Je(this,void 0,void 0,(function*(){const t=yield this.fetchJson("get",`/api/spend/${e}/voters`);this.spendVoters=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.spend=null,this.spendChildren=null,this.spendSpends=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.spendIDs=this.blk.spendIDs?this.blk.spendIDs:[],this.blk.addedSpendIDs=this.blk.addedSpendIDs?this.blk.addedSpendIDs:[],this.blk.subtractedSpendIDs=this.blk.subtractedSpendIDs?this.blk.subtractedSpendIDs:[],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 Se.Transaction:case Se.TaggedData:this.payload=e.payload;break;case Se.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(be.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,De(n.payload_type))))}return e}get tipsList(){let e=[];if(this.tips)for(let t=0;t=0;o--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("explorerStore"),a.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 st 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(_.a,null,r.createElement(_.a.Item,null,"Public Key: ",e.publicKey),r.createElement(_.a.Item,null,"Signature: ",e.signature)))))}}class at extends r.Component{renderSignatureComponent(){switch(this.props.block.signatureType){case tt.Ed25519:return r.createElement(st,{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(_.a,null,r.createElement(_.a.Item,null,"Type: ",e.type),e.signatureType&&r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"ID: ",r.createElement("a",{href:"/explorer/transaction/"+e}," ",e)),r.createElement(_.a.Item,null,"Network ID: ",t.networkId),r.createElement(_.a.Item,null,"Creation Time: ",t.creationSlot),r.createElement(_.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(_.a,null,r.createElement(_.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(_.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(at,{block:e,key:t}))))))}}var it=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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,s=e;return r.createElement(p.a,null,r.createElement(ot,{txID:n,tx:s}))}};function pt(e){switch(e){case dt:return"MasterSpendID";case ut:return"UndefinedSpendID";case mt:return"LazyBookedSpendsSpendID";case ht:return"InvalidSpendID";default:return e}}ct=it([Object(a.b)("explorerStore"),a.c],ct);const dt="4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM",ut="11111111111111111111111111111111",mt="JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF",ht="JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG";var bt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let gt=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(_.a,null,r.createElement(_.a.Item,null,"Address: ",e.address),r.createElement(_.a.Item,null,"Access Mana Pledge ID: ",e.accessManaPledgeID),r.createElement(_.a.Item,null,"Consensus Mana Pledge ID: ",e.consensusManaPledgeID),r.createElement(_.a.Item,null,"Nonce: ",e.nonce)))))}};gt=bt([Object(a.b)("explorerStore"),a.c],gt);var yt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let ft=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(_.a,null,r.createElement(_.a.Item,null,"Tag: ",e.tag),r.createElement(_.a.Item,null,"Data: ",e.data)))))}};ft=yt([Object(a.b)("explorerStore"),a.c],ft);var Et=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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 De(this.props.explorerStore.blk.payloadType)}renderPayload(){switch(this.props.explorerStore.blk.payloadType){case Se.Transaction:return this.props.explorerStore.blk.objectivelyInvalid?r.createElement(et,null):r.createElement(ct,null);case Se.TaggedData:return r.createElement(ft,null);case Se.Faucet:return r.createElement(gt,null);default:return r.createElement(et,null)}}render(){let{id:e}=this.props.match.params,{blk:t,query_loading:n,query_err:s}=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.")):s?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(_.a,null,r.createElement(_.a.Item,null,"Payload Type: ",this.getPayloadType()),r.createElement(_.a.Item,null,"Sequence Number: ",t.sequenceNumber),r.createElement(_.a.Item,null,"spendIDs:",r.createElement(_.a,null,t.spendIDs.map((e,t)=>r.createElement(_.a.Item,{key:"SpendID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/spend/"+e},pt(e)))))),r.createElement(_.a.Item,null,"AddedspendIDs:",r.createElement(_.a,null,t.addedSpendIDs.map((e,t)=>r.createElement(_.a.Item,{key:"AddedSpendID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/spend/"+e},pt(e)))))),r.createElement(_.a.Item,null,"SubtractedspendIDs:",r.createElement(_.a,null,t.subtractedSpendIDs.map((e,t)=>r.createElement(_.a.Item,{key:"SubtractedSpendID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/spend/"+e},pt(e)))))),r.createElement(_.a.Item,null,"Solid: ",t.solid?"Yes":"No"),r.createElement(_.a.Item,null,"Scheduled: ",t.scheduled?"Yes":"No"),r.createElement(_.a.Item,null,"Booked: ",t.booked?"Yes":"No"),r.createElement(_.a.Item,null,"Orphaned: ",t.orphaned?"Yes":"No"),r.createElement(_.a.Item,null,"Objectively Invalid: ",t.objectivelyInvalid?"Yes":"No"),r.createElement(_.a.Item,null,"Subjectively Invalid: ",t.subjectivelyInvalid?"Yes":"No"),r.createElement(_.a.Item,null,"Acceptance: ",t.acceptance?"Yes":"No"),r.createElement(_.a.Item,null,"Acceptance Time: ",F(new Date(1e3*t.acceptanceTime),"dd.mm.yyyy HH:MM:ss")),r.createElement(_.a.Item,null,"Confirmation: ",t.confirmation?"Yes":"No"),r.createElement(_.a.Item,null,"Confirmation Time: ",F(new Date(1e3*t.confirmationTime),"dd.mm.yyyy HH:MM:ss")),r.createElement(_.a.Item,null,"Confirmation by slot: ",t.confirmationBySlot?"Yes":"No"),r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"CommitmentID: ",t.commitmentID),r.createElement(_.a.Item,null,r.createElement(_.a,null,r.createElement(_.a.Item,null,"Index: ",t.commitment.index),r.createElement(_.a.Item,null,"prevID: ",t.commitment.prevID),r.createElement(_.a.Item,null,"rootsID: ",t.commitment.rootsID),r.createElement(_.a.Item,null,"Cumulative Weight: ",t.commitment.cumulativeWeight))),r.createElement(_.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(_.a,null,r.createElement(_.a.Item,null,"Rank: ",t.rank),r.createElement(_.a.Item,null,"SequenceID: ",t.sequenceID),r.createElement(_.a.Item,null,"PastMarkerGap: ",t.pastMarkerGap),r.createElement(_.a.Item,null,"IsPastMarker: ",t.isPastMarker?"Yes":"No"),r.createElement(_.a.Item,null,"Past markers: ",t.pastMarkers)))),r.createElement(d.a,{className:"mb-3"},r.createElement(u.a,null,r.createElement(_.a,null,r.createElement(_.a.Item,null,"IssuerID: ",t.issuerID),r.createElement(_.a.Item,{style:{overflow:"auto"}},"Block Signature: ",t.signature)))),r.createElement(d.a,null,r.createElement(u.a,null,r.createElement(_.a,null,t.strongParents.map((e,n)=>r.createElement(_.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(_.a,null,t.weakParents.map((e,n)=>r.createElement(_.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(_.a,null,t.shallowLikedParents.map((e,n)=>r.createElement(_.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(_.a,null,t.strongChildren.map((e,n)=>r.createElement(_.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(_.a,null,t.weakChildren.map((e,n)=>r.createElement(_.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(_.a,null,t.shallowLikeChildren.map((e,n)=>r.createElement(_.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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],vt);var It=n(289);function St(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 kt=n(281),xt=n(99),jt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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:s}=this.props.explorerStore,a=[],l=[],o=[];if(s)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?a.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),a.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(_.a,null,r.createElement("h4",null,"Available Balances"),0===o.length?"There are no balances currently available.":r.createElement("div",null,r.createElement(kt.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(_.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(_.a,{variant:"flush"},r.createElement("h4",null,"Spent Outputs"),0===a.length?"There are no spent outputs currently available.":r.createElement("div",null,a.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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],Ot);class wt extends r.Component{constructor(e){super(e),this.state={enabled:!1}}render(){return r.createElement(_.a.Item,null,r.createElement(xt.a,{variant:Rt(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(Dt,{metadata:this.props.output.metadata,timestamp:this.props.output.txTimestamp,pendingMana:this.props.output.pendingMana}):null)))}}class Dt extends r.Component{render(){let e=this.props.metadata,t=this.props.timestamp,n=this.props.pendingMana;return r.createElement(_.a,null,"spendIDs:",r.createElement(_.a,null,e.spendIDs.map((e,t)=>r.createElement(_.a.Item,{key:"SpendID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/spend/"+e},pt(e))))),r.createElement(_.a.Item,null,"Pending mana: ",St(n)),r.createElement(_.a.Item,null,"Timestamp: ",new Date(1e3*t).toLocaleString()),r.createElement(_.a.Item,null,"Consumer Count: ",e.consumerCount),e.confirmedConsumer&&r.createElement(_.a.Item,null,"Confirmed Consumer: ",r.createElement("a",{href:"/explorer/transaction/"+e.confirmedConsumer},e.confirmedConsumer)," "))}}let Rt=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 _t=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let Ct=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."))}};Ct=_t([Object(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],Ct);var Nt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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 C(Math.abs(e))},maxTicksLimit:3,fontSize:10}}]},tooltips:{callbacks:{label:function(e,t){return`${t.datasets[e.datasetIndex].label} ${C(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(_.a,{variant:"flush",as:"small"},r.createElement(_.a.Item,null,"Origin:"," ",t.connection_origin))),r.createElement(u.a,null,r.createElement(_.a,{variant:"flush",as:"small"},r.createElement(_.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: ",C(e.currentNetIO&&e.currentNetIO.tx)," / ",C(e.currentNetIO&&e.currentNetIO.rx)),r.createElement(v.Line,{height:30,data:e.netIOSeries,options:Tt})))))))}};Pt=Nt([Object(a.b)("nodeStore"),a.c],Pt);var Mt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),a.c],Lt);var At=n(57),Bt=n(103),zt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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:s,tips_count:a,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:s.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(xt.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(xt.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: ",a,", 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(a.b)("visualizerStore"),Object(a.b)("nodeStore"),a.c],Ht);var Ft=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],Vt);var Zt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],Ut);var Wt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(_.a,null,r.createElement(_.a.Item,null,"SpendIDs:",r.createElement(_.a,null,n.spendIDs&&n.spendIDs.map((e,t)=>r.createElement(_.a.Item,{key:"SpendID"+t+1,className:"text-break"},r.createElement("a",{href:"/explorer/transaction/"+e},e))))),r.createElement(_.a.Item,null,"Booked: ",n.booked.toString()),r.createElement(_.a.Item,null,"Confirmation State: ",n.confirmationState)))}};Jt=Wt([Object(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],Jt);var Gt=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(_.a,null,e.blockIDs.map((e,t)=>r.createElement(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/block/"+e},e)))))))}};qt=Gt([Object(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.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 s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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:s,outputMetadata:a,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(_.a,null,s&&r.createElement(_.a.Item,null,"Pending Mana",r.createElement("hr",null),r.createElement("div",null,"Value: ",St(s.mana)),r.createElement("div",null,"Timestamp: ",new Date(1e3*s.timestamp).toLocaleString())))),r.createElement("h4",null,"Metadata"),a&&r.createElement("div",{className:"mb-2"},r.createElement(_.a,null,r.createElement(_.a.Item,null,"Transaction ID: ",r.createElement("a",{href:"/explorer/transaction/"+a.outputID.transactionID},a.outputID.transactionID)," "),"spendIDs:",r.createElement(_.a,null,a.spendIDs.map((e,t)=>r.createElement(_.a.Item,{key:"SpendID"+t+1,className:"text-break"},r.createElement(H.Link,{to:"/explorer/spend/"+e},pt(e))))),r.createElement(_.a.Item,null,"Consumer Count: ",a.consumerCount),r.createElement(_.a.Item,null,"Confirmed Consumer: ",r.createElement("a",{href:"/explorer/transaction/"+a.confirmedConsumer},a.confirmedConsumer)," "),r.createElement(_.a.Item,null,"Confirmation State: ",Kt(a.confirmationState)),r.createElement(_.a.Item,null,"Confirmation State Time: ",new Date(1e3*a.confirmationStateTime).toLocaleString()))),r.createElement("h4",null,"Consumers"),l&&r.createElement("div",null,r.createElement(_.a,null,l.consumers.map((e,t)=>{return r.createElement(_.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(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],Yt);var en=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let tn=class extends r.Component{componentDidMount(){this.props.explorerStore.getSpend(this.props.match.params.id),this.props.explorerStore.getSpendChildren(this.props.match.params.id),this.props.explorerStore.getSpendSpends(this.props.match.params.id),this.props.explorerStore.getSpendVoters(this.props.match.params.id)}componentWillUnmount(){this.props.explorerStore.reset()}render(){let{id:e}=this.props.match.params,{query_err:t,spend:n,spendChildren:s,spendSpends:a,spendVoters:l}=this.props.explorerStore;return t?r.createElement(p.a,null,r.createElement("h4",null,"Spend not found - 404"),r.createElement("span",null,e)):r.createElement(p.a,null,r.createElement("h4",null,"Spend"),n&&r.createElement(_.a,null,r.createElement(_.a.Item,null,"ID: ",pt(n.id)),r.createElement(_.a.Item,null,"Parents:",r.createElement(_.a,null,n.parents.map((e,t)=>r.createElement(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/spend/"+e},pt(e)))))),r.createElement(_.a.Item,null,"Spends:",n.spendIDs&&r.createElement(_.a,null,n.spendIDs.map((e,t)=>r.createElement(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e))))),r.createElement(_.a.Item,null,"ConfirmationState: ",Kt(n.confirmationState)),r.createElement(_.a.Item,null," Children:",s&&r.createElement(_.a,null,s.childSpends.map((e,t)=>r.createElement(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/spend/"+e.spendID},pt(e.spendID)))))),r.createElement(_.a.Item,null," Spends:",a&&r.createElement(_.a,null,a.spends.map((e,t)=>r.createElement("div",{key:t},"OutputID: ",r.createElement("a",{href:"/explorer/output/"+e.outputID.base58},e.outputID.base58),r.createElement(_.a,{className:"mb-2"},e.spendIDs.map((e,t)=>r.createElement(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/spend/"+e},pt(e))))))))),r.createElement(_.a.Item,null," Voters:",l&&r.createElement(_.a,null,l.voters.map((e,t)=>r.createElement(_.a.Item,{key:e+t},e))))))}};tn=en([Object(a.b)("nodeStore"),Object(a.b)("explorerStore"),a.c],tn);var nn=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(a.b)("nodeStore"),Object(a.b)("slotStore"),a.c],rn);var sn=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l};let an=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(_.a,null,r.createElement(_.a.Item,null,"ID: ",e),r.createElement(_.a.Item,null,"Index: ",n.index),r.createElement(_.a.Item,null,"RootsID: ",n.rootsID),r.createElement(_.a.Item,null,"PrevEC: ",n.prevID),r.createElement(_.a.Item,null,"Cumulative Weight: ",n.cumulativeWeight),r.createElement(_.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(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/block/"+e},e)))))))))),r.createElement(_.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(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/transaction/"+e},e)))))))))),r.createElement(_.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(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e)))))))))),r.createElement(_.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(_.a.Item,{key:t},r.createElement("a",{href:"/explorer/output/"+e},e))))))))))))}};an=sn([Object(a.b)("explorerStore"),a.c],an);var ln=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(ye.LinkContainer,{to:"/dashboard"},r.createElement(c.a.Link,null,"Dashboard")),r.createElement(ye.LinkContainer,{to:"/neighbors"},r.createElement(c.a.Link,null,"Neighbors")),r.createElement(ye.LinkContainer,{to:"/explorer"},r.createElement(c.a.Link,null,"Explorer")),r.createElement(ye.LinkContainer,{to:"/visualizer"},r.createElement(c.a.Link,null,"Visualizer")),r.createElement(ye.LinkContainer,{to:"/slots"},r.createElement(c.a.Link,null,"Slot")),r.createElement(ye.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(ge.g,null,r.createElement(ge.d,{exact:!0,path:"/dashboard",component:X}),r.createElement(ge.d,{exact:!0,path:"/neighbors",component:Lt}),r.createElement(ge.d,{exact:!0,path:"/explorer/block/:id",component:vt}),r.createElement(ge.d,{exact:!0,path:"/explorer/address/:id",component:Ot}),r.createElement(ge.d,{exact:!0,path:"/explorer/transaction/:id",component:Xt}),r.createElement(ge.d,{exact:!0,path:"/explorer/output/:id",component:Yt}),r.createElement(ge.d,{exact:!0,path:"/explorer/spend/:id",component:tn}),r.createElement(ge.d,{exact:!0,path:"/explorer/slot/commitment/:commitment",component:an}),r.createElement(ge.d,{exact:!0,path:"/explorer/404/:search",component:Ct}),r.createElement(ge.d,{exact:!0,path:"/slots",component:rn}),r.createElement(ge.d,{exact:!0,path:"/tips",component:Vt}),r.createElement(ge.d,{exact:!0,path:"/explorer",component:de}),r.createElement(ge.d,{exact:!0,path:"/visualizer",component:Ht}),r.createElement(ge.d,{exact:!0,path:"/visualizer/history",component:Ht}),r.createElement(ge.c,{to:"/dashboard"})),this.props.children,this.renderDevTool())}};on=ln([Object(a.b)("nodeStore"),Object(a.b)("routerStore"),a.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 s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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 gn,this.scheduler=new En}}class bn{}class gn{}class yn{}class fn{}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>xn&&this.collected.shift();let t=this.currentNetIO;t&&(this.network_io.length>xn&&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({},Sn,kn("Tx","rgba(53, 180, 219,1)","rgba(53, 180, 219,0.4)")),t=Object.assign({},Sn,kn("Rx","rgba(235, 134, 52)","rgba(235, 134, 52,0.4)")),n=[];for(let r=0;r{ve(be.Status,this.updateStatus),ve(be.BPSMetrics,e=>{this.addBPSMetric(this.updateLastBPSMetric(e))}),ve(be.NeighborStats,this.updateNeighborMetrics),ve(be.TipsMetrics,this.updateLastTipsMetric),ve(be.ComponentCounterMetrics,this.updateLastComponentMetric),ve(be.RateSetter,this.updateLastRateSetterMetric),this.updateCollecting(!0)},this.unregisterHandlers=()=>{Ie(be.Status),Ie(be.BPSMetrics),Ie(be.NeighborStats),Ie(be.TipsMetrics),Ie(be.ComponentCounterMetrics),Ie(be.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>xn&&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>xn&&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>xn&&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>xn&&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>xn&&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>xn&&this.collected_component_counter_metrics.shift(),this.collected_component_counter_metrics.push(e)},this.status.tangleTime=new bn,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 fe.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 s=window.location,a="ws:";"https:"===s.protocol&&(a="wss:"),a+="//"+s.host+e;let l=new WebSocket(a);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({},Sn,kn("BPS","rgba(67, 196, 99,1)","rgba(67, 196, 99,0.4)")),t=[];for(let n=0;n1&&(s+=e+" Days, "),t>=0&&(s+=t<10?"0"+t+":":t+":"),n>=0&&(s+=n<10?"0"+n+":":n+":"),r>=0&&(s+=r<10?"0"+r:r),s}get memSeries(){let e=Object.assign({},Sn,kn("Heap Sys","rgba(168, 50, 76,1)","rgba(168, 50, 76,0.4)")),t=Object.assign({},Sn,kn("Heap Alloc","rgba(222, 49, 87,1)","rgba(222, 49, 87,0.4)")),n=Object.assign({},Sn,kn("Heap Idle","rgba(222, 49, 182,1)","rgba(222, 49, 182,0.4)")),r=Object.assign({},Sn,kn("Heap Released","rgba(250, 76, 252,1)","rgba(250, 76, 252,0.4)")),s=[];for(let a=0;a=0;o--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l},Rn=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},_n=function(e,t,n,r){return new(n||(n=Promise))((function(s,a){function l(e){try{i(r.next(e))}catch(e){a(e)}}function o(e){try{i(r.throw(e))}catch(e){a(e)}}function i(e){var t;e.done?s(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 Cn{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=()=>_n(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}}Dn([fe.observable,Rn("design:type",String)],Cn.prototype,"send_addr",void 0),Dn([fe.observable,Rn("design:type",String)],Cn.prototype,"send_access_mana_node_id",void 0),Dn([fe.observable,Rn("design:type",String)],Cn.prototype,"send_consensus_mana_node_id",void 0),Dn([fe.observable,Rn("design:type",Boolean)],Cn.prototype,"sending",void 0),Dn([fe.observable,Rn("design:type",class{})],Cn.prototype,"sendResult",void 0),Dn([fe.observable,Rn("design:type",String)],Cn.prototype,"query_error",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"updateSendResult",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"updateSend",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"updateSendAccessManaNodeID",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"updateSendConsensusManaNodeID",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"updateSending",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"reset",void 0),Dn([fe.action,Rn("design:type",Object)],Cn.prototype,"updateQueryError",void 0);var Nn=Cn,Tn=n(35),Pn=n.n(Tn),Mn=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(s,a){function l(e){try{i(r.next(e))}catch(e){a(e)}}function o(e){try{i(r.throw(e))}catch(e){a(e)}}function i(e){var t;e.done?s(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 fe.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(be.Vertex,this.addVertex),ve(be.TipInfo,this.addTipInfo),ve(be.TXAccepted,this.updateTxStatus)}}Mn([fe.observable,Ln("design:type",Object)],Xn.prototype,"vertices",void 0),Mn([fe.observable,Ln("design:type",Object)],Xn.prototype,"verticesLimit",void 0),Mn([fe.observable,Ln("design:type",Object)],Xn.prototype,"finalized_count",void 0),Mn([fe.observable,Ln("design:type",Object)],Xn.prototype,"tips_count",void 0),Mn([fe.observable,Ln("design:type",Bn)],Xn.prototype,"selected",void 0),Mn([fe.observable,Ln("design:type",String)],Xn.prototype,"search",void 0),Mn([fe.observable,Ln("design:type",Boolean)],Xn.prototype,"paused",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"updateSearch",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"searchAndHighlight",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"pauseResume",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"updateVerticesLimit",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"updateTxStatus",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"addVertex",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"addTipInfo",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"checkLimit",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"updateSelected",void 0),Mn([fe.action,Ln("design:type",Object)],Xn.prototype,"clearSelected",void 0);var Qn=Xn;function Kn(e,t,n,r,s=!1,a=[]){a.push(t);let l=0;for(;a.length>l;){const t=a[l++];if(n(t))return!0;if(!t.links)return;for(const n of t.links)r||n.toId!==t.id||a.includes(e.getNode(n.fromId))?r&&n.fromId===t.id&&!a.includes(e.getNode(n.toId))&&(s&&s(n),a.push(e.getNode(n.toId))):(s&&s(n),a.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 s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l},sr=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class ar{constructor(e,t,n){this.nodeID=e,this.time=t,this.txID=n}}class lr extends ar{constructor(e,t,n,r){super(e,t,n),this.amount=r}}class or extends ar{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(kt.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(kt.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=[],s=(e,s)=>{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"}}," ",s+1," "),r.createElement("td",null,e.shortNodeID),r.createElement("td",null,St(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)&&s(e,t)}),n},this.computeEventList=e=>{let t=[];if(t.push(r.createElement(kt.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 s=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,"+",St(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:s(e)},r.createElement(kt.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 s=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,"-",St(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:s(e)},r.createElement(kt.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(be.Mana,this.addNewManaValue),ve(be.ManaMapOverall,this.updateNetworkRichest),ve(be.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([fe.observable,sr("design:type",Array)],pr.prototype,"manaValues",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"prevManaValues",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"accessNetworkRichest",void 0),rr([fe.observable,sr("design:type",Number)],pr.prototype,"totalAccessNetwork",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"accessActiveRichest",void 0),rr([fe.observable,sr("design:type",Number)],pr.prototype,"totalAccessActive",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"consensusNetworkRichest",void 0),rr([fe.observable,sr("design:type",Number)],pr.prototype,"totalConsensusNetwork",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"consensusActiveRichest",void 0),rr([fe.observable,sr("design:type",Number)],pr.prototype,"totalConsensusActive",void 0),rr([fe.observable,sr("design:type",Object)],pr.prototype,"searchNode",void 0),rr([fe.observable,sr("design:type",Object)],pr.prototype,"searchTxID",void 0),rr([fe.observable,sr("design:type",class{})],pr.prototype,"allowedPledgeIDs",void 0),rr([fe.observable,sr("design:type",Date)],pr.prototype,"lastRemovedAccessEventTime",void 0),rr([fe.observable,sr("design:type",Date)],pr.prototype,"lastRemovedConsensusEventTime",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"displayedAccessEvents",void 0),rr([fe.observable,sr("design:type",Array)],pr.prototype,"displayedConsensusEvents",void 0),rr([fe.action,sr("design:type",Function),sr("design:paramtypes",[String]),sr("design:returntype",void 0)],pr.prototype,"updateNodeSearch",null),rr([fe.action,sr("design:type",Function),sr("design:paramtypes",[String]),sr("design:returntype",void 0)],pr.prototype,"updateTxSearch",null),rr([fe.action,sr("design:type",Object)],pr.prototype,"addNewManaValue",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"updateNetworkRichest",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"updateActiveRichest",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"updateAllowedPledgeIDs",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"addNewInitPledge",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"addNewPledge",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"addNewInitRevoke",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"addNewRevoke",void 0),rr([fe.action,sr("design:type",Object)],pr.prototype,"initDone",void 0),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"networkRichestFeedAccess",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"networkRichestFeedConsensus",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"activeRichestFeedAccess",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"activeRichestFeedConsensus",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"accessHistogramInput",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"consensusHistogramInput",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"accessPercentile",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"consensusPercentile",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"accessEventList",null),rr([fe.computed,sr("design:type",Object),sr("design:paramtypes",[])],pr.prototype,"consensusEventList",null);var dr=pr,ur=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>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(s,a){function l(e){try{i(r.next(e))}catch(e){a(e)}}function o(e){try{i(r.throw(e))}catch(e){a(e)}}function i(e){var t;e.done?s(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 br{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(be.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([fe.observable,mr("design:type",Array)],br.prototype,"liveFeed",void 0),ur([fe.action,mr("design:type",Object)],br.prototype,"addLiveFeed",void 0),ur([fe.computed,mr("design:type",Object),mr("design:paramtypes",[])],br.prototype,"slotLiveFeed",null);var gr=function(e,t,n,r){var s,a=arguments.length,l=a<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--)(s=e[o])&&(l=(a<3?s(l):a>3?s(t,n,l):s(t,n))||l);return a>3&&l&&Object.defineProperty(t,n,l),l},yr=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};class fr{constructor(e,t){this.updateSpendSets=e=>{this.spendSets.set(e.spendSetID,e)},this.updateSpends=e=>{this.spends.set(e.spendID,e)},this.routerStore=e,this.nodeStore=t,this.spendSets=new Map,this.spends=new Map,ve(be.SpendSet,this.updateSpendSets),ve(be.Spend,this.updateSpends)}get spendsLiveFeed(){let e=Array.from(this.spendSets.values());e.sort((e,t)=>t.arrivalTime-e.arrivalTime||e.spendSetID.localeCompare(t.spendSetID));let t=[];for(let n of e){if(t.push(r.createElement("tr",{key:n.spendSetID,onClick:()=>n.shown=!n.shown,style:{cursor:"pointer"}},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/output/"+n.spendSetID},n.spendSetID)),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.spends.values());e.sort((e,t)=>e.issuingTime-t.issuingTime||e.spendID.localeCompare(t.spendID));let s=[];for(let t of e)for(let e of t.spendSetIDs)e===n.spendSetID&&s.push(r.createElement("tr",{key:t.spendID,className:t.confirmationState>Qt.Accepted?"table-success":""},r.createElement("td",null,r.createElement(H.Link,{to:"/explorer/branch/"+t.spendID},t.spendID)),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.spendSetID+"_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,s)))))}return t}}gr([fe.observable,yr("design:type",Map)],fr.prototype,"spendSets",void 0),gr([fe.observable,yr("design:type",Map)],fr.prototype,"spends",void 0),gr([fe.action,yr("design:type",Object)],fr.prototype,"updateSpendSets",void 0),gr([fe.action,yr("design:type",Object)],fr.prototype,"updateSpends",void 0),gr([fe.computed,yr("design:type",Object),yr("design:paramtypes",[])],fr.prototype,"spendsLiveFeed",null);var Er=fr;const vr=new pn.RouterStore,Ir=new wn,Sr={routerStore:vr,nodeStore:Ir,explorerStore:new Ke(vr),spendsStore:new Er(vr,Ir),faucetStore:new Nn(vr),visualizerStore:new Qn(vr),manaStore:new dr,slotStore:new br},kr=Object(l.a)(),xr=Object(pn.syncHistoryWithStore)(kr,vr);s.render(r.createElement(a.a,Object.assign({},Sr),r.createElement(ge.e,{history:xr},r.createElement(cn,{history:xr}))),document.getElementById("root"))}},[[434,1,2]]]); \ No newline at end of file diff --git a/components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js.map b/components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js.map new file mode 100644 index 000000000..cb26c36d1 --- /dev/null +++ b/components/dashboard/frontend/build/app.48ab2676b5153e0e40b7.js.map @@ -0,0 +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/ExplorerSpendSearchbar.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/spend.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/ExplorerSpendQueryResult.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/SpendsStore.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","spendID","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","spend","spendChildren","spendSpends","spendVoters","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","getSpend","getSpendChildren","getSpendSpends","getSpendVoters","getTips","reset","spendIDs","addedSpendIDs","subtractedSpendIDs","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","resolveBase58SpendID","base58Spend","MasterSpendInBase58","UndefinedSpendInBase58","LazyBookedSpendsSpendInBase58","InvalidSpendInBase58","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","childSpends","spends","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","updateSpendSets","spendSets","spendSetID","updateSpends","Map","SpendSet","Spend","spendsArr","x","y","arrivalTime","shown","cursor","resolved","timeToResolve","branchesArr","issuingTime","branches","branch","spendSetIDs","issuerNodeID","stores","browserHistory"],"mappings":"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","file":"app.48ab2676b5153e0e40b7.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 ExplorerSpendSearchbar extends React.Component {\n spendID: string;\n\n updateSearch = (e) => {\n this.spendID =e.target.value;\n };\n\n executeSearch = (e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n this.props.explorerStore.routerStore.push(`/explorer/spend/${this.spendID}`);\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 {ExplorerSpendSearchbar} from \"./ExplorerSpendSearchbar\";\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 spends.\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 SpendSet,\r\n Spend,\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 Spend {\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 spendIDs: Array;\r\n addedSpendIDs: Array;\r\n subtractedSpendIDs: 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 spendIDs: 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 spendIDs: 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 Spend {\r\n id: string;\r\n parents: Array;\r\n spendIDs: Array;\r\n confirmationState: number;\r\n}\r\n\r\nclass SpendChildren {\r\n spendID: string;\r\n childSpends: Array\r\n}\r\n\r\nclass SpendChild {\r\n spendID: string;\r\n type: string;\r\n}\r\n\r\nclass SpendSpend {\r\n outputID: OutputID;\r\n spendIDs: Array;\r\n}\r\n\r\nclass SpendSpends {\r\n spendID: string;\r\n spends: Array\r\n}\r\n\r\nclass SpendVoters {\r\n spendID: 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 spend: Spend = null;\r\n @observable spendChildren: SpendChildren = null;\r\n @observable spendSpends: SpendSpends = null;\r\n @observable spendVoters: SpendVoters = 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 getSpend = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/spend/${id}`)\r\n this.spend = res;\r\n }\r\n\r\n @action\r\n getSpendChildren = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/spend/${id}/children`)\r\n this.spendChildren = res;\r\n }\r\n\r\n @action\r\n getSpendSpends = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/spend/${id}/spends`)\r\n this.spendSpends = res;\r\n }\r\n\r\n @action\r\n getSpendVoters = async (id: string) => {\r\n const res = await this.fetchJson(\"get\", `/api/spend/${id}/voters`)\r\n this.spendVoters = 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.spend = null;\r\n this.spendChildren = null;\r\n this.spendSpends = 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.spendIDs = this.blk.spendIDs ? this.blk.spendIDs : []\r\n this.blk.addedSpendIDs = this.blk.addedSpendIDs ? this.blk.addedSpendIDs : []\r\n this.blk.subtractedSpendIDs = this.blk.subtractedSpendIDs ? this.blk.subtractedSpendIDs : []\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 resolveBase58SpendID(base58Spend: string): string {\n switch (base58Spend) {\n case MasterSpendInBase58:\n return \"MasterSpendID\";\n case UndefinedSpendInBase58:\n return \"UndefinedSpendID\";\n case LazyBookedSpendsSpendInBase58:\n return \"LazyBookedSpendsSpendID\";\n case InvalidSpendInBase58:\n return \"InvalidSpendID\";\n default:\n // otherwise it is a \"regular\" spendID that doesn't have a distinct name\n return base58Spend\n }\n}\n\n// base58 spendIDs that have distinct names\nconst MasterSpendInBase58 = \"4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM\"\nconst UndefinedSpendInBase58 = \"11111111111111111111111111111111\"\nconst LazyBookedSpendsSpendInBase58 = \"JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF\"\nconst InvalidSpendInBase58 = \"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 { resolveBase58SpendID } from \"../utils/spend\";\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 spendIDs:\r\n \r\n {\r\n blk.spendIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58SpendID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n AddedspendIDs:\r\n \r\n {\r\n blk.addedSpendIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58SpendID(value)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n SubtractedspendIDs:\r\n \r\n {\r\n blk.subtractedSpendIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58SpendID(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 {resolveBase58SpendID as resolveBase58SpendID} from \"../utils/spend\";\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 spendIDs: \r\n \r\n {\r\n metadata.spendIDs.map((value, index) => {\r\n return (\r\n \r\n \r\n {resolveBase58SpendID(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 {resolveBase58SpendID} from \"../utils/spend\";\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 SpendIDs: \n \n { \n txMetadata.spendIDs && txMetadata.spendIDs.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 {resolveBase58SpendID} from \"../utils/spend\";\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 spendIDs: \n \n {\n outputMetadata.spendIDs.map((value, index) => {\n return (\n \n \n {resolveBase58SpendID(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 {resolveBase58SpendID} from \"../utils/spend\";\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 ExplorerSpendQueryResult extends React.Component {\n componentDidMount() {\n this.props.explorerStore.getSpend(this.props.match.params.id);\n this.props.explorerStore.getSpendChildren(this.props.match.params.id);\n this.props.explorerStore.getSpendSpends(this.props.match.params.id);\n this.props.explorerStore.getSpendVoters(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, spend, spendChildren, spendSpends, spendVoters } = this.props.explorerStore;\n\n if (query_err) {\n return (\n \n

Spend not found - 404

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

Spend

\n {spend && \n ID: {resolveBase58SpendID(spend.id)}\n Parents:\n \n {spend.parents.map((p,i) => {resolveBase58SpendID(p)})}\n \n \n {Spends:\n {spend.spendIDs && \n {spend.spendIDs.map((c,i) => {c})}\n }\n }\n ConfirmationState: {resolveConfirmationState(spend.confirmationState)}\n Children:\n {spendChildren && \n {spendChildren.childSpends.map((c,i) => {resolveBase58SpendID(c.spendID)})}\n }\n \n { Spends:\n {spendSpends && \n {spendSpends.spends.map((c,i) =>
\n OutputID: {c.outputID.base58}\n \n {c.spendIDs.map((b,j) => \n {resolveBase58SpendID(b)}\n )}\n \n
)}\n
}\n
}\n Voters:\n {spendVoters && \n {spendVoters.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 {ExplorerSpendQueryResult} from \"./ExplorerSpendQueryResult\";\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 SpendSet {\r\n spendSetID: string;\r\n arrivalTime: number;\r\n resolved: boolean;\r\n timeToResolve: number;\r\n shown: boolean;\r\n}\r\n\r\nexport class Spend {\r\n spendID: string;\r\n spendSetIDs: 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 SpendsStore {\r\n // live feed\r\n @observable spendSets: Map;\r\n @observable spends: 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.spendSets = new Map;\r\n this.spends = new Map;\r\n registerHandler(WSMsgType.SpendSet, this.updateSpendSets);\r\n registerHandler(WSMsgType.Spend, this.updateSpends);\r\n }\r\n\r\n @action\r\n updateSpendSets = (blk: SpendSet) => {\r\n this.spendSets.set(blk.spendSetID, blk);\r\n };\r\n\r\n @action\r\n updateSpends = (blk: Spend) => {\r\n this.spends.set(blk.spendID, blk);\r\n };\r\n \r\n @computed\r\n get spendsLiveFeed() {\r\n // sort branches by time and ID to prevent \"jumping\"\r\n let spendsArr = Array.from(this.spendSets.values());\r\n spendsArr.sort((x: SpendSet, y: SpendSet): number => {\r\n return y.arrivalTime - x.arrivalTime || x.spendSetID.localeCompare(y.spendSetID);\r\n }\r\n )\r\n\r\n let feed = [];\r\n for (let spend of spendsArr) {\r\n feed.push(\r\n spend.shown = !spend.shown} style={{cursor:\"pointer\"}}>\r\n \r\n \r\n {spend.spendSetID}\r\n \r\n \r\n \r\n {new Date(spend.arrivalTime * 1000).toLocaleString()}\r\n \r\n \r\n {spend.resolved ? 'Yes' : 'No'}\r\n \r\n \r\n {spend.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 (!spend.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.spends.values());\r\n branchesArr.sort((x: Spend, y: Spend): number => {\r\n return x.issuingTime - y.issuingTime || x.spendID.localeCompare(y.spendID)\r\n }\r\n )\r\n\r\n let branches = [];\r\n for (let branch of branchesArr) {\r\n for(let spendID of branch.spendSetIDs){\r\n if (spendID === spend.spendSetID) {\r\n branches.push(\r\n ConfirmationState.Accepted ? \"table-success\" : \"\"}>\r\n \r\n \r\n {branch.spendID}\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 SpendsStore;\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 SpendsStore from \"./app/stores/SpendsStore\";\n\n// prepare MobX stores\nconst routerStore = new RouterStore();\nconst nodeStore = new NodeStore();\nconst explorerStore = new ExplorerStore(routerStore);\nconst spendsStore = new SpendsStore(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 \"spendsStore\": spendsStore,\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/app.6eea8010fee08f23aca6.js b/components/dashboard/frontend/build/app.6eea8010fee08f23aca6.js deleted file mode 100644 index 27ba7b96c..000000000 --- a/components/dashboard/frontend/build/app.6eea8010fee08f23aca6.js +++ /dev/null @@ -1 +0,0 @@ -(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.spendIDs=this.blk.spendIDs?this.blk.spendIDs:[],this.blk.addedSpendIDs=this.blk.addedSpendIDs?this.blk.addedSpendIDs:[],this.blk.subtractedSpendIDs=this.blk.subtractedSpendIDs?this.blk.subtractedSpendIDs:[],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,"spendIDs:",r.createElement(R.a,null,t.spendIDs.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,"AddedspendIDs:",r.createElement(R.a,null,t.addedSpendIDs.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,"SubtractedspendIDs:",r.createElement(R.a,null,t.subtractedSpendIDs.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,"spendIDs:",r.createElement(R.a,null,e.spendIDs.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)," "),"spendIDs:",r.createElement(R.a,null,s.spendIDs.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.spendIDs&&r.createElement(R.a,null,n.spendIDs.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.spendIDs.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.6eea8010fee08f23aca6.js.map b/components/dashboard/frontend/build/app.6eea8010fee08f23aca6.js.map deleted file mode 100644 index 5e7f1f31c..000000000 --- a/components/dashboard/frontend/build/app.6eea8010fee08f23aca6.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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","spendIDs","addedSpendIDs","subtractedSpendIDs","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","conflictIDs","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.6eea8010fee08f23aca6.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 spendIDs: Array;\r\n addedSpendIDs: Array;\r\n subtractedSpendIDs: 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 spendIDs: 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 spendIDs: 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 spendIDs: 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 spendIDs: 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.spendIDs = this.blk.spendIDs ? this.blk.spendIDs : []\r\n this.blk.addedSpendIDs = this.blk.addedSpendIDs ? this.blk.addedSpendIDs : []\r\n this.blk.subtractedSpendIDs = this.blk.subtractedSpendIDs ? this.blk.subtractedSpendIDs : []\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 spendIDs:\r\n \r\n {\r\n blk.spendIDs.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 AddedspendIDs:\r\n \r\n {\r\n blk.addedSpendIDs.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 SubtractedspendIDs:\r\n \r\n {\r\n blk.subtractedSpendIDs.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 spendIDs: \r\n \r\n {\r\n metadata.spendIDs.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 spendIDs: \n \n {\n outputMetadata.spendIDs.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.spendIDs && \n {conflict.spendIDs.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.spendIDs.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 a644c730c..b397f8f8c 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/components/Explorer.tsx b/components/dashboard/frontend/src/app/components/Explorer.tsx index 9a1466c9c..8076090db 100644 --- a/components/dashboard/frontend/src/app/components/Explorer.tsx +++ b/components/dashboard/frontend/src/app/components/Explorer.tsx @@ -8,7 +8,7 @@ import {ExplorerSearchbar} from "./ExplorerSearchbar"; import {ExplorerLiveFeed} from "./ExplorerLiveFeed"; import {ExplorerTransactionSearchbar} from "./ExplorerTransactionSearchbar"; import {ExplorerOutputSearchbar} from "./ExplorerOutputSearchbar"; -import {ExplorerConflictSearchbar} from "./ExplorerConflictSearchbar"; +import {ExplorerSpendSearchbar} from "./ExplorerSpendSearchbar"; interface Props { nodeStore?: NodeStore; @@ -24,7 +24,7 @@ export class Explorer extends React.Component {

- Search for addresses, blocks, transactions, outputs and conflicts. + Search for addresses, blocks, transactions, outputs and spends.

@@ -41,7 +41,7 @@ export class Explorer extends React.Component { - + diff --git a/components/dashboard/frontend/src/app/components/ExplorerAddressResult.tsx b/components/dashboard/frontend/src/app/components/ExplorerAddressResult.tsx index c8ef4d968..3b12c8268 100644 --- a/components/dashboard/frontend/src/app/components/ExplorerAddressResult.tsx +++ b/components/dashboard/frontend/src/app/components/ExplorerAddressResult.tsx @@ -12,7 +12,7 @@ import {Link} from 'react-router-dom'; import {displayManaUnit} from "../utils"; import {OutputType, outputToComponent, outputTypeToName} from "../utils/output"; import {Button, ListGroupItem} from "react-bootstrap"; -import {resolveBase58ConflictID} from "../utils/conflict"; +import {resolveBase58SpendID as resolveBase58SpendID} from "../utils/spend"; interface Props { nodeStore?: NodeStore; @@ -227,9 +227,9 @@ class OutputMeta extends React.Component { { metadata.spendIDs.map((value, index) => { return ( - - - {resolveBase58ConflictID(value)} + + + {resolveBase58SpendID(value)} ) diff --git a/components/dashboard/frontend/src/app/components/ExplorerBlockQueryResult.tsx b/components/dashboard/frontend/src/app/components/ExplorerBlockQueryResult.tsx index a09f118ba..9c34fa2d6 100644 --- a/components/dashboard/frontend/src/app/components/ExplorerBlockQueryResult.tsx +++ b/components/dashboard/frontend/src/app/components/ExplorerBlockQueryResult.tsx @@ -13,7 +13,7 @@ import { Link } from 'react-router-dom'; import { BasicPayload } from './BasicPayload' import { TransactionPayload } from './TransactionPayload' import { getPayloadType, PayloadType } from '../misc/Payload' -import { resolveBase58ConflictID } from "../utils/conflict"; +import { resolveBase58SpendID } from "../utils/spend"; import { FaucetPayload } from './FaucetPayload'; import { TaggedDataPayload } from './TaggedDataPayload'; @@ -129,10 +129,10 @@ export class ExplorerBlockQueryResult extends React.Component { { blk.spendIDs.map((value, index) => { return ( - - - {resolveBase58ConflictID(value)} + + {resolveBase58SpendID(value)} ) @@ -146,10 +146,10 @@ export class ExplorerBlockQueryResult extends React.Component { { blk.addedSpendIDs.map((value, index) => { return ( - - - {resolveBase58ConflictID(value)} + + {resolveBase58SpendID(value)} ) @@ -163,10 +163,10 @@ export class ExplorerBlockQueryResult extends React.Component { { blk.subtractedSpendIDs.map((value, index) => { return ( - - - {resolveBase58ConflictID(value)} + + {resolveBase58SpendID(value)} ) diff --git a/components/dashboard/frontend/src/app/components/ExplorerOutputQueryResult.tsx b/components/dashboard/frontend/src/app/components/ExplorerOutputQueryResult.tsx index 49e0a6e36..d11bd5415 100644 --- a/components/dashboard/frontend/src/app/components/ExplorerOutputQueryResult.tsx +++ b/components/dashboard/frontend/src/app/components/ExplorerOutputQueryResult.tsx @@ -7,7 +7,7 @@ import ExplorerStore from "../stores/ExplorerStore"; import Badge from "react-bootstrap/Badge"; import {Link} from 'react-router-dom'; import {displayManaUnit} from "../utils"; -import {resolveBase58ConflictID} from "../utils/conflict"; +import {resolveBase58SpendID} from "../utils/spend"; import {outputToComponent} from "../utils/output"; import {resolveConfirmationState} from "../utils/confirmation_state"; @@ -81,9 +81,9 @@ export class ExplorerOutputQueryResult extends React.Component { { outputMetadata.spendIDs.map((value, index) => { return ( - - - {resolveBase58ConflictID(value)} + + + {resolveBase58SpendID(value)} ) diff --git a/components/dashboard/frontend/src/app/components/ExplorerConflictQueryResult.tsx b/components/dashboard/frontend/src/app/components/ExplorerSpendQueryResult.tsx similarity index 52% rename from components/dashboard/frontend/src/app/components/ExplorerConflictQueryResult.tsx rename to components/dashboard/frontend/src/app/components/ExplorerSpendQueryResult.tsx index 91ccf469f..d59f7f007 100644 --- a/components/dashboard/frontend/src/app/components/ExplorerConflictQueryResult.tsx +++ b/components/dashboard/frontend/src/app/components/ExplorerSpendQueryResult.tsx @@ -4,7 +4,7 @@ import NodeStore from "../stores/NodeStore"; import { inject, observer } from "mobx-react"; import ExplorerStore from "../stores/ExplorerStore"; import ListGroup from "react-bootstrap/ListGroup"; -import {resolveBase58ConflictID} from "../utils/conflict"; +import {resolveBase58SpendID} from "../utils/spend"; import {resolveConfirmationState} from "../utils/confirmation_state"; @@ -21,12 +21,12 @@ interface Props { @inject("nodeStore") @inject("explorerStore") @observer -export class ExplorerConflictQueryResult extends React.Component { +export class ExplorerSpendQueryResult extends React.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); + this.props.explorerStore.getSpend(this.props.match.params.id); + this.props.explorerStore.getSpendChildren(this.props.match.params.id); + this.props.explorerStore.getSpendSpends(this.props.match.params.id); + this.props.explorerStore.getSpendVoters(this.props.match.params.id); } componentWillUnmount() { @@ -34,52 +34,52 @@ export class ExplorerConflictQueryResult extends React.Component { } render() { let {id} = this.props.match.params; - let { query_err, conflict, conflictChildren, conflictConflicts, conflictVoters } = this.props.explorerStore; + let { query_err, spend, spendChildren, spendSpends, spendVoters } = this.props.explorerStore; if (query_err) { return ( -

Conflict not found - 404

+

Spend not found - 404

{id}
); } return ( -

Conflict

- {conflict && - ID: {resolveBase58ConflictID(conflict.id)} +

Spend

+ {spend && + ID: {resolveBase58SpendID(spend.id)} Parents: - {conflict.parents.map((p,i) => {resolveBase58ConflictID(p)})} + {spend.parents.map((p,i) => {resolveBase58SpendID(p)})} - {Conflicts: - {conflict.spendIDs && - {conflict.spendIDs.map((c,i) => {c})} + {Spends: + {spend.spendIDs && + {spend.spendIDs.map((c,i) => {c})} } } - ConfirmationState: {resolveConfirmationState(conflict.confirmationState)} + ConfirmationState: {resolveConfirmationState(spend.confirmationState)} Children: - {conflictChildren && - {conflictChildren.childConflicts.map((c,i) => {resolveBase58ConflictID(c.conflictID)})} + {spendChildren && + {spendChildren.childSpends.map((c,i) => {resolveBase58SpendID(c.spendID)})} } - { Conflicts: - {conflictConflicts && - {conflictConflicts.conflicts.map((c,i) =>
+ { Spends: + {spendSpends && + {spendSpends.spends.map((c,i) => )} } } Voters: - {conflictVoters && - {conflictVoters.voters.map((s,i) => {s})} + {spendVoters && + {spendVoters.voters.map((s,i) => {s})} } } diff --git a/components/dashboard/frontend/src/app/components/ExplorerConflictSearchbar.tsx b/components/dashboard/frontend/src/app/components/ExplorerSpendSearchbar.tsx similarity index 74% rename from components/dashboard/frontend/src/app/components/ExplorerConflictSearchbar.tsx rename to components/dashboard/frontend/src/app/components/ExplorerSpendSearchbar.tsx index f5fd60e79..311a31305 100644 --- a/components/dashboard/frontend/src/app/components/ExplorerConflictSearchbar.tsx +++ b/components/dashboard/frontend/src/app/components/ExplorerSpendSearchbar.tsx @@ -16,16 +16,16 @@ interface Props { @inject("nodeStore") @inject("explorerStore") @observer -export class ExplorerConflictSearchbar extends React.Component { - conflictID: string; +export class ExplorerSpendSearchbar extends React.Component { + spendID: string; updateSearch = (e) => { - this.conflictID =e.target.value; + this.spendID =e.target.value; }; executeSearch = (e: KeyboardEvent) => { if (e.key !== 'Enter') return; - this.props.explorerStore.routerStore.push(`/explorer/conflict/${this.conflictID}`); + this.props.explorerStore.routerStore.push(`/explorer/spend/${this.spendID}`); }; render() { @@ -37,10 +37,10 @@ export class ExplorerConflictSearchbar extends React.Component { diff --git a/components/dashboard/frontend/src/app/components/ExplorerTransactionMetadata.tsx b/components/dashboard/frontend/src/app/components/ExplorerTransactionMetadata.tsx index 56ec403cb..726482661 100644 --- a/components/dashboard/frontend/src/app/components/ExplorerTransactionMetadata.tsx +++ b/components/dashboard/frontend/src/app/components/ExplorerTransactionMetadata.tsx @@ -4,7 +4,7 @@ import NodeStore from "../stores/NodeStore"; import { inject, observer } from "mobx-react"; import ExplorerStore from "../stores/ExplorerStore"; import ListGroup from "react-bootstrap/ListGroup"; -// import {resolveBase58ConflictID} from "../utils/conflict"; +// import {resolveBase58SpendID} from "../utils/spend"; interface Props { nodeStore?: NodeStore; @@ -40,12 +40,12 @@ export class ExplorerTransactionMetadata extends React.Component {

Metadata

{txMetadata && - ConflictIDs: + SpendIDs: { - txMetadata.conflictIDs && txMetadata.conflictIDs.map((value, index) => { + txMetadata.spendIDs && txMetadata.spendIDs.map((value, index) => { return ( - + {value} ) diff --git a/components/dashboard/frontend/src/app/components/Root.tsx b/components/dashboard/frontend/src/app/components/Root.tsx index 883fa9e83..938d74613 100644 --- a/components/dashboard/frontend/src/app/components/Root.tsx +++ b/components/dashboard/frontend/src/app/components/Root.tsx @@ -18,7 +18,7 @@ import {Visualizer} from "./Visualizer"; import {Tips} from "./Tips"; import {ExplorerTransactionQueryResult} from "./ExplorerTransactionQueryResult"; import {ExplorerOutputQueryResult} from "./ExplorerOutputQueryResult"; -import {ExplorerConflictQueryResult} from "./ExplorerConflictQueryResult"; +import {ExplorerSpendQueryResult} from "./ExplorerSpendQueryResult"; import { SlotLiveFeed } from './SlotLiveFeed'; import { ExplorerSlotQueryResult } from './ExplorerSlotQueryResult'; @@ -92,7 +92,7 @@ export class Root extends React.Component { - + diff --git a/components/dashboard/frontend/src/app/misc/Payload.ts b/components/dashboard/frontend/src/app/misc/Payload.ts index 35f39c365..46a5086bb 100644 --- a/components/dashboard/frontend/src/app/misc/Payload.ts +++ b/components/dashboard/frontend/src/app/misc/Payload.ts @@ -108,7 +108,7 @@ export class Balance { color: string; } -export class Conflict { +export class Spend { tx_id: string; opinion: Opinion; } diff --git a/components/dashboard/frontend/src/app/misc/WS.ts b/components/dashboard/frontend/src/app/misc/WS.ts index 6e2b62e8e..da7ac252c 100644 --- a/components/dashboard/frontend/src/app/misc/WS.ts +++ b/components/dashboard/frontend/src/app/misc/WS.ts @@ -13,8 +13,8 @@ export enum WSMsgType { ManaMapOnline, BlkManaDashboardAddress, RateSetter, - ConflictSet, - Conflict, + SpendSet, + Spend, SlotInfo, } diff --git a/components/dashboard/frontend/src/app/stores/ExplorerStore.tsx b/components/dashboard/frontend/src/app/stores/ExplorerStore.tsx index 0fe2e33f6..53099b5fc 100644 --- a/components/dashboard/frontend/src/app/stores/ExplorerStore.tsx +++ b/components/dashboard/frontend/src/app/stores/ExplorerStore.tsx @@ -121,35 +121,35 @@ class PendingMana { timestamp: number; } -class Conflict { +class Spend { id: string; parents: Array; spendIDs: Array; confirmationState: number; } -class ConflictChildren { - conflictID: string; - childConflicts: Array +class SpendChildren { + spendID: string; + childSpends: Array } -class ConflictChild { - conflictID: string; +class SpendChild { + spendID: string; type: string; } -class ConflictConflict { +class SpendSpend { outputID: OutputID; spendIDs: Array; } -class ConflictConflicts { - conflictID: string; - conflicts: Array +class SpendSpends { + spendID: string; + spends: Array } -class ConflictVoters { - conflictID: string; +class SpendVoters { + spendID: string; voters: Array } @@ -200,10 +200,10 @@ export class ExplorerStore { @observable outputMetadata: OutputMetadata = null; @observable outputConsumers: OutputConsumers = null; @observable pendingMana: PendingMana = null; - @observable conflict: Conflict = null; - @observable conflictChildren: ConflictChildren = null; - @observable conflictConflicts: ConflictConflicts = null; - @observable conflictVoters: ConflictVoters = null; + @observable spend: Spend = null; + @observable spendChildren: SpendChildren = null; + @observable spendSpends: SpendSpends = null; + @observable spendVoters: SpendVoters = null; @observable tips: Tips = null; @observable slotInfo: SlotInfo = new SlotInfo; @@ -347,27 +347,27 @@ export class ExplorerStore { } @action - getConflict = async (id: string) => { - const res = await this.fetchJson("get", `/api/conflict/${id}`) - this.conflict = res; + getSpend = async (id: string) => { + const res = await this.fetchJson("get", `/api/spend/${id}`) + this.spend = res; } @action - getConflictChildren = async (id: string) => { - const res = await this.fetchJson("get", `/api/conflict/${id}/children`) - this.conflictChildren = res; + getSpendChildren = async (id: string) => { + const res = await this.fetchJson("get", `/api/spend/${id}/children`) + this.spendChildren = res; } @action - getConflictConflicts = async (id: string) => { - const res = await this.fetchJson("get", `/api/conflict/${id}/conflicts`) - this.conflictConflicts = res; + getSpendSpends = async (id: string) => { + const res = await this.fetchJson("get", `/api/spend/${id}/spends`) + this.spendSpends = res; } @action - getConflictVoters = async (id: string) => { - const res = await this.fetchJson("get", `/api/conflict/${id}/voters`) - this.conflictVoters = res; + getSpendVoters = async (id: string) => { + const res = await this.fetchJson("get", `/api/spend/${id}/voters`) + this.spendVoters = res; } @action @@ -394,9 +394,9 @@ export class ExplorerStore { this.outputMetadata = null; this.outputConsumers = null; this.pendingMana = null; - this.conflict = null; - this.conflictChildren = null; - this.conflictConflicts = null; + this.spend = null; + this.spendChildren = null; + this.spendSpends = null; this.tips = null; this.slotInfo = new SlotInfo; }; diff --git a/components/dashboard/frontend/src/app/stores/ConflictsStore.tsx b/components/dashboard/frontend/src/app/stores/SpendsStore.tsx similarity index 55% rename from components/dashboard/frontend/src/app/stores/ConflictsStore.tsx rename to components/dashboard/frontend/src/app/stores/SpendsStore.tsx index 1e939cfe2..c22b664dd 100644 --- a/components/dashboard/frontend/src/app/stores/ConflictsStore.tsx +++ b/components/dashboard/frontend/src/app/stores/SpendsStore.tsx @@ -7,17 +7,17 @@ import NodeStore from './NodeStore'; import {Table} from "react-bootstrap"; import {ConfirmationState, resolveConfirmationState} from "../utils/confirmation_state"; -export class ConflictSet { - conflictSetID: string; +export class SpendSet { + spendSetID: string; arrivalTime: number; resolved: boolean; timeToResolve: number; shown: boolean; } -export class Conflict { - conflictID: string; - conflictSetIDs: Array; +export class Spend { + spendID: string; + spendSetIDs: Array; confirmationState: number; issuingTime: number; issuerNodeID: string; @@ -25,10 +25,10 @@ export class Conflict { // const liveFeedSize = 10; -export class ConflictsStore { +export class SpendsStore { // live feed - @observable conflictSets: Map; - @observable conflicts: Map; + @observable spendSets: Map; + @observable spends: Map; routerStore: RouterStore; nodeStore: NodeStore; @@ -36,73 +36,73 @@ export class ConflictsStore { constructor(routerStore: RouterStore, nodeStore: NodeStore) { this.routerStore = routerStore; this.nodeStore = nodeStore; - this.conflictSets = new Map; - this.conflicts = new Map; - registerHandler(WSMsgType.ConflictSet, this.updateConflictSets); - registerHandler(WSMsgType.Conflict, this.updateConflicts); + this.spendSets = new Map; + this.spends = new Map; + registerHandler(WSMsgType.SpendSet, this.updateSpendSets); + registerHandler(WSMsgType.Spend, this.updateSpends); } @action - updateConflictSets = (blk: ConflictSet) => { - this.conflictSets.set(blk.conflictSetID, blk); + updateSpendSets = (blk: SpendSet) => { + this.spendSets.set(blk.spendSetID, blk); }; @action - updateConflicts = (blk: Conflict) => { - this.conflicts.set(blk.conflictID, blk); + updateSpends = (blk: Spend) => { + this.spends.set(blk.spendID, blk); }; @computed - get conflictsLiveFeed() { + get spendsLiveFeed() { // sort branches by time and ID to prevent "jumping" - let conflictsArr = Array.from(this.conflictSets.values()); - conflictsArr.sort((x: ConflictSet, y: ConflictSet): number => { - return y.arrivalTime - x.arrivalTime || x.conflictSetID.localeCompare(y.conflictSetID); + let spendsArr = Array.from(this.spendSets.values()); + spendsArr.sort((x: SpendSet, y: SpendSet): number => { + return y.arrivalTime - x.arrivalTime || x.spendSetID.localeCompare(y.spendSetID); } ) let feed = []; - for (let conflict of conflictsArr) { + for (let spend of spendsArr) { feed.push( - conflict.shown = !conflict.shown} style={{cursor:"pointer"}}> + spend.shown = !spend.shown} style={{cursor:"pointer"}}> - - {conflict.conflictSetID} + + {spend.spendSetID} - {new Date(conflict.arrivalTime * 1000).toLocaleString()} + {new Date(spend.arrivalTime * 1000).toLocaleString()} - {conflict.resolved ? 'Yes' : 'No'} + {spend.resolved ? 'Yes' : 'No'} - {conflict.timeToResolve/1000000} + {spend.timeToResolve/1000000} ); // only render and show branches if it has been clicked - if (!conflict.shown) { + if (!spend.shown) { continue } // sort branches by time and ID to prevent "jumping" - let branchesArr = Array.from(this.conflicts.values()); - branchesArr.sort((x: Conflict, y: Conflict): number => { - return x.issuingTime - y.issuingTime || x.conflictID.localeCompare(y.conflictID) + let branchesArr = Array.from(this.spends.values()); + branchesArr.sort((x: Spend, y: Spend): number => { + return x.issuingTime - y.issuingTime || x.spendID.localeCompare(y.spendID) } ) let branches = []; for (let branch of branchesArr) { - for(let conflictID of branch.conflictSetIDs){ - if (conflictID === conflict.conflictSetID) { + for(let spendID of branch.spendSetIDs){ + if (spendID === spend.spendSetID) { branches.push( - ConfirmationState.Accepted ? "table-success" : ""}> + ConfirmationState.Accepted ? "table-success" : ""}> - - {branch.conflictID} + + {branch.spendID} {resolveConfirmationState(branch.confirmationState)} @@ -114,7 +114,7 @@ export class ConflictsStore { } } feed.push( - + @@ -139,4 +139,4 @@ export class ConflictsStore { } -export default ConflictsStore; +export default SpendsStore; diff --git a/components/dashboard/frontend/src/app/utils/conflict.ts b/components/dashboard/frontend/src/app/utils/conflict.ts deleted file mode 100644 index ce8a606ca..000000000 --- a/components/dashboard/frontend/src/app/utils/conflict.ts +++ /dev/null @@ -1,21 +0,0 @@ -export function resolveBase58ConflictID(base58Conflict: string): string { - switch (base58Conflict) { - case MasterConflictInBase58: - return "MasterConflictID"; - case UndefinedConflictInBase58: - return "UndefinedConflictID"; - case LazyBookedConflictsConflictInBase58: - return "LazyBookedConflictsConflictID"; - case InvalidConflictInBase58: - return "InvalidConflictID"; - default: - // otherwise it is a "regular" conflictID that doesn't have a distinct name - return base58Conflict - } -} - -// base58 conflictIDs that have distinct names -const MasterConflictInBase58 = "4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM" -const UndefinedConflictInBase58 = "11111111111111111111111111111111" -const LazyBookedConflictsConflictInBase58 = "JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF" -const InvalidConflictInBase58 = "JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG" \ No newline at end of file diff --git a/components/dashboard/frontend/src/app/utils/spend.ts b/components/dashboard/frontend/src/app/utils/spend.ts new file mode 100644 index 000000000..8cf945acc --- /dev/null +++ b/components/dashboard/frontend/src/app/utils/spend.ts @@ -0,0 +1,21 @@ +export function resolveBase58SpendID(base58Spend: string): string { + switch (base58Spend) { + case MasterSpendInBase58: + return "MasterSpendID"; + case UndefinedSpendInBase58: + return "UndefinedSpendID"; + case LazyBookedSpendsSpendInBase58: + return "LazyBookedSpendsSpendID"; + case InvalidSpendInBase58: + return "InvalidSpendID"; + default: + // otherwise it is a "regular" spendID that doesn't have a distinct name + return base58Spend + } +} + +// base58 spendIDs that have distinct names +const MasterSpendInBase58 = "4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM" +const UndefinedSpendInBase58 = "11111111111111111111111111111111" +const LazyBookedSpendsSpendInBase58 = "JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF" +const InvalidSpendInBase58 = "JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG" \ No newline at end of file diff --git a/components/dashboard/frontend/src/main.tsx b/components/dashboard/frontend/src/main.tsx index 49866cd7d..3b4fc8346 100644 --- a/components/dashboard/frontend/src/main.tsx +++ b/components/dashboard/frontend/src/main.tsx @@ -12,13 +12,13 @@ import FaucetStore from "./app/stores/FaucetStore"; import VisualizerStore from "./app/stores/VisualizerStore"; import ManaStore from "./app/stores/ManaStore"; import {SlotStore} from "./app/stores/SlotStore"; -import ConflictsStore from "./app/stores/ConflictsStore"; +import SpendsStore from "./app/stores/SpendsStore"; // prepare MobX stores const routerStore = new RouterStore(); const nodeStore = new NodeStore(); const explorerStore = new ExplorerStore(routerStore); -const conflictsStore = new ConflictsStore(routerStore, nodeStore); +const spendsStore = new SpendsStore(routerStore, nodeStore); const faucetStore = new FaucetStore(routerStore); const visualizerStore = new VisualizerStore(routerStore); const manaStore = new ManaStore(); @@ -27,7 +27,7 @@ const stores = { "routerStore": routerStore, "nodeStore": nodeStore, "explorerStore": explorerStore, - "conflictsStore": conflictsStore, + "spendsStore": spendsStore, "faucetStore": faucetStore, "visualizerStore": visualizerStore, "manaStore": manaStore,