diff --git a/asset-manifest.json b/asset-manifest.json index 5655282..6279b05 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,15 +1,15 @@ { "files": { - "main.css": "/augmented-tbc-design/static/css/main.36b8fead.chunk.css", - "main.js": "/augmented-tbc-design/static/js/main.cd9f3e84.chunk.js", - "main.js.map": "/augmented-tbc-design/static/js/main.cd9f3e84.chunk.js.map", + "main.css": "/augmented-tbc-design/static/css/main.67dbc5b1.chunk.css", + "main.js": "/augmented-tbc-design/static/js/main.a20a0fcc.chunk.js", + "main.js.map": "/augmented-tbc-design/static/js/main.a20a0fcc.chunk.js.map", "runtime~main.js": "/augmented-tbc-design/static/js/runtime~main.1a6ed195.js", "runtime~main.js.map": "/augmented-tbc-design/static/js/runtime~main.1a6ed195.js.map", "static/js/2.3791b40c.chunk.js": "/augmented-tbc-design/static/js/2.3791b40c.chunk.js", "static/js/2.3791b40c.chunk.js.map": "/augmented-tbc-design/static/js/2.3791b40c.chunk.js.map", "index.html": "/augmented-tbc-design/index.html", - "precache-manifest.5078e58cb34efa7bc7bf267ff32eebc7.js": "/augmented-tbc-design/precache-manifest.5078e58cb34efa7bc7bf267ff32eebc7.js", + "precache-manifest.1d7dc50fa5dafbead9d0c231759bd791.js": "/augmented-tbc-design/precache-manifest.1d7dc50fa5dafbead9d0c231759bd791.js", "service-worker.js": "/augmented-tbc-design/service-worker.js", - "static/css/main.36b8fead.chunk.css.map": "/augmented-tbc-design/static/css/main.36b8fead.chunk.css.map" + "static/css/main.67dbc5b1.chunk.css.map": "/augmented-tbc-design/static/css/main.67dbc5b1.chunk.css.map" } } \ No newline at end of file diff --git a/index.html b/index.html index 0ea3bb0..77eebbd 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Augmented Bonding Curve Design
\ No newline at end of file +Augmented Bonding Curve Design
\ No newline at end of file diff --git a/precache-manifest.5078e58cb34efa7bc7bf267ff32eebc7.js b/precache-manifest.1d7dc50fa5dafbead9d0c231759bd791.js similarity index 59% rename from precache-manifest.5078e58cb34efa7bc7bf267ff32eebc7.js rename to precache-manifest.1d7dc50fa5dafbead9d0c231759bd791.js index 5604fd8..0e9d1b3 100644 --- a/precache-manifest.5078e58cb34efa7bc7bf267ff32eebc7.js +++ b/precache-manifest.1d7dc50fa5dafbead9d0c231759bd791.js @@ -1,19 +1,19 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "5d0d36a721dd43bb06829be2deb2fca6", + "revision": "6aeebe994a4d443a01daeece7be1ec3e", "url": "/augmented-tbc-design/index.html" }, { - "revision": "a78cd869b23a41c0226f", - "url": "/augmented-tbc-design/static/css/main.36b8fead.chunk.css" + "revision": "d82e58dfc9577a98b22c", + "url": "/augmented-tbc-design/static/css/main.67dbc5b1.chunk.css" }, { "revision": "52b8e05a0cd9d13e2edf", "url": "/augmented-tbc-design/static/js/2.3791b40c.chunk.js" }, { - "revision": "a78cd869b23a41c0226f", - "url": "/augmented-tbc-design/static/js/main.cd9f3e84.chunk.js" + "revision": "d82e58dfc9577a98b22c", + "url": "/augmented-tbc-design/static/js/main.a20a0fcc.chunk.js" }, { "revision": "707b94664485cbbcc81b", diff --git a/service-worker.js b/service-worker.js index c1b88a0..fb7f7ca 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/augmented-tbc-design/precache-manifest.5078e58cb34efa7bc7bf267ff32eebc7.js" + "/augmented-tbc-design/precache-manifest.1d7dc50fa5dafbead9d0c231759bd791.js" ); self.addEventListener('message', (event) => { diff --git a/static/css/main.36b8fead.chunk.css b/static/css/main.36b8fead.chunk.css deleted file mode 100644 index c4fa4be..0000000 --- a/static/css/main.36b8fead.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -#root{background-color:#152128;min-height:100vh} -/*# sourceMappingURL=main.36b8fead.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.36b8fead.chunk.css.map b/static/css/main.36b8fead.chunk.css.map deleted file mode 100644 index d8b5225..0000000 --- a/static/css/main.36b8fead.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["app.css"],"names":[],"mappings":"AAAA,MACE,wBAAyB,CACzB,gBACF","file":"main.36b8fead.chunk.css","sourcesContent":["#root {\n background-color: #152128;\n min-height: 100vh;\n}\n"]} \ No newline at end of file diff --git a/static/css/main.67dbc5b1.chunk.css b/static/css/main.67dbc5b1.chunk.css new file mode 100644 index 0000000..ab555e4 --- /dev/null +++ b/static/css/main.67dbc5b1.chunk.css @@ -0,0 +1,2 @@ +#root{background-color:#152128;min-height:100vh;margin:0} +/*# sourceMappingURL=main.67dbc5b1.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.67dbc5b1.chunk.css.map b/static/css/main.67dbc5b1.chunk.css.map new file mode 100644 index 0000000..d8454fb --- /dev/null +++ b/static/css/main.67dbc5b1.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["app.css"],"names":[],"mappings":"AAAA,MACE,wBAAyB,CACzB,gBAAiB,CACjB,QACF","file":"main.67dbc5b1.chunk.css","sourcesContent":["#root {\n background-color: #152128;\n min-height: 100vh;\n margin: 0;\n}\n"]} \ No newline at end of file diff --git a/static/js/main.a20a0fcc.chunk.js b/static/js/main.a20a0fcc.chunk.js new file mode 100644 index 0000000..11a64d0 --- /dev/null +++ b/static/js/main.a20a0fcc.chunk.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{223:function(e,t,a){e.exports=a(419)},412:function(e,t,a){},419:function(e,t,a){"use strict";a.r(t);var n=a(1),r=a.n(n),i=a(13),o=a.n(i),c=a(459),l=a(458),s=a(63),m=a.n(s),u=a(117),p=a(17),d=a(420),f=a(465),g=a(457),h=a(454),x=a(461),b=a(456),v=a(455),E=a(463),y=Object(d.a)(function(e){return Object(f.a)({title:{},subtitle:{color:e.palette.text.secondary,margin:e.spacing(3,0,0)},lightBulb:{verticalAlign:"middle",marginRight:e.spacing(1)},link:{color:e.palette.primary.main},logoContainer:{display:"flex",alignItems:"center",justifyContent:"center",marginBottom:e.spacing(4)},logo:{width:"25px",marginRight:"4px"},logoText:{display:"inline",fontSize:"1.1rem",fontWeight:500}})});function k(){var e=y();return r.a.createElement(r.a.Fragment,null,r.a.createElement("div",{className:e.logoContainer},r.a.createElement("img",{src:"./favicon.ico",className:e.logo,alt:"logo"}),r.a.createElement(h.a,{className:e.logoText},"Commons Stack")),r.a.createElement(h.a,{className:e.title,variant:"h4"},"Augmented Token Bonding Curve Design"),r.a.createElement(h.a,{className:e.subtitle},"Experiment and test augmented token bonding curves"))}var j=a(191),O=a(7),w=a(464),C=a(460),N=a(174),S=a.n(N),F=Object(O.a)({root:{height:8},thumb:{height:24,width:24,backgroundColor:"#fff",border:"2px solid currentColor",marginTop:-8,marginLeft:-12,"&:focus,&:hover,&$active":{boxShadow:"inherit"}},active:{},valueLabel:{left:"calc(-50% + 4px)"},track:{height:8,borderRadius:4},rail:{height:8,borderRadius:4},markLabel:{top:30}})(w.a),B=Object(d.a)(function(e){return Object(f.a)({root:{margin:e.spacing(6,0,3)},lightBulb:{verticalAlign:"middle",marginRight:e.spacing(1)},leftContainer:{color:e.palette.text.secondary},centerContainer:{},listBoxContainer:{"& > div:not(:last-child)":{paddingBottom:"12px",marginBottom:"12px",borderBottom:"1px solid #313d47"}},listBox:{"& > div":{display:"flex",alignItems:"center","& p":{marginBottom:0}},"& > div:not(:last-child)":{paddingRight:"12px"}},slider:{color:e.palette.primary.main}})});function A(e){var t=e.inputRef,a=e.onChange,n=e.prefix,i=e.suffix,o=Object(j.a)(e,["inputRef","onChange","prefix","suffix"]);return r.a.createElement(S.a,Object.assign({},o,{getInputRef:t,onValueChange:function(e){a({target:{value:e.value}})},thousandSeparator:!0,prefix:n,suffix:i}))}function R(e){e.curveParams;var t=e.setCurveParams,a=Object(n.useState)(1e6),i=Object(p.a)(a,2),o=i[0],c=i[1],l=Object(n.useState)(.35),s=Object(p.a)(l,2),m=s[0],u=s[1],d=Object(n.useState)(.1),f=Object(p.a)(d,2),g=f[0],x=f[1],b=Object(n.useState)(3),E=Object(p.a)(b,2),y=E[0],k=E[1],j=Object(n.useState)(.05),O=Object(p.a)(j,2),w=O[0],N=O[1];function S(){t({d0:o,theta:m,p0:g,returnF:y,wFee:w})}var R=[{label:"Initial raise",value:o,setter:c,min:1e5,max:1e7,step:1e5,unit:"$M",prefix:"$",suffix:"M",format:function(e){return"$".concat(+(1e-6*e).toFixed(1),"M")},toText:function(e){return String(+(1e-6*e).toFixed(1))},toNum:function(e){return Math.floor(1e6*parseFloat(e))}},{label:"Allocation to project",value:m,setter:u,min:0,max:.9,step:.01,unit:"%",suffix:"%",format:function(e){return"".concat(Math.round(100*e),"%")},toText:function(e){return String(+(100*e).toFixed(0))},toNum:function(e){return.01*parseFloat(e)}},{label:"Initial token price",value:g,setter:x,min:.01,max:1,step:.01,unit:"$",prefix:"$",toText:function(e){return String(+e.toFixed(2))},toNum:function(e){return parseFloat(e)},format:function(e){return"$".concat(e)}},{label:"Return factor",value:y,setter:k,min:1,max:10,step:.1,unit:"x",suffix:"x",toText:function(e){return String(+e.toFixed(1))},toNum:function(e){return parseFloat(e)},format:function(e){return"".concat(e,"x")}},{label:"Withdrawl fee",value:w,setter:N,min:0,max:.1,step:.001,unit:"%",suffix:"%",format:function(e){return"".concat(+(100*e).toFixed(1),"%")},toText:function(e){return String(+(100*e).toFixed(1))},toNum:function(e){return.01*parseFloat(e)}}],I=B();return r.a.createElement("div",{className:I.listBoxContainer},R.map(function(e){var t=e.label,a=e.value,n=e.setter,i=e.min,o=e.max,c=e.step,l=e.prefix,s=e.suffix,m=e.format,u=e.toText,p=e.toNum;function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;isNaN(e)&&(e=0),e>o?e=o:e5e8?[1e9,"B"]:d>5e5?[1e6,"M"]:d>500?[1e3,"K"]:[1,""],g=Object(p.a)(f,2),h=g[0],x=g[1],b="Supply (tokens) / Reserve (DAI)",v=[],E=0;E<=m;E+=u){var y;v.push((y={},Object(I.a)(y,"x",E),Object(I.a)(y,b,s(E)),y))}var k=Object(V.a)(),j=function(e){return(+(e/h).toPrecision(2)).toLocaleString()};return r.a.createElement(M.f,{debounce:1},r.a.createElement(M.b,{width:0,height:400,data:v,margin:{top:10,right:30,left:0,bottom:0}},r.a.createElement(M.c,{strokeDasharray:"3 3"}),r.a.createElement(M.h,{interval:"preserveStartEnd",ticks:P(v.map(function(e){return e.x}),4),dataKey:"x",tickFormatter:j,unit:x,tick:{fill:k.palette.text.secondary},stroke:k.palette.text.secondary}),r.a.createElement(M.i,{interval:"preserveStartEnd",ticks:P(v.map(function(e){return e[b]}),3),tickFormatter:j,unit:x,tick:{fill:k.palette.text.secondary},domain:[0,s(m)],stroke:k.palette.text.secondary}),r.a.createElement(M.g,{formatter:function(e){return j(Number(e))}}),r.a.createElement(M.a,{isAnimationActive:!1,type:"monotone",dataKey:b,stroke:k.palette.primary.main,fill:k.palette.primary.main}),r.a.createElement(M.e,{x:c,stroke:"#90a4ae",strokeDasharray:"9 0",label:r.a.createElement(function(e){var t=e.textAnchor,a=e.viewBox;return r.a.createElement("text",{x:a.x+10,y:30,fill:k.palette.text.secondary,textAnchor:t},"Initial value")},null)}),r.a.createElement(M.d,{formatter:function(e){return r.a.createElement("span",{style:{color:k.palette.text.secondary}},e)}})))},z=Object(d.a)(function(e){return Object(f.a)({root:{margin:e.spacing(6,0,3)},lightBulb:{verticalAlign:"middle",marginRight:e.spacing(1)},leftContainer:{color:e.palette.text.secondary},centerContainer:{},listBoxContainer:{"& > div:not(:last-child)":{marginBottom:"12px",borderBottom:"1px solid #313d47"}},listBox:{paddingBottom:"12px","& > div":{display:"flex",alignItems:"center","& p":{marginBottom:0}},"& > div:not(:last-child)":{paddingRight:"12px"}}})});function K(e){var t=e.resultFields,a=z();return r.a.createElement("div",{className:a.listBoxContainer},t.map(function(e){var t=e.label,n=e.value;return r.a.createElement(v.a,{key:t,container:!0,spacing:0,className:a.listBox},r.a.createElement(v.a,{item:!0,xs:8,className:a.leftContainer},r.a.createElement(h.a,{id:t,gutterBottom:!0},t)),r.a.createElement(v.a,{item:!0,xs:4,className:a.centerContainer},r.a.createElement(h.a,{gutterBottom:!0},n)))}))}var W=a(90);var J=function(e){for(var t=e.priceTimeseries,a=e.withdrawFeeTimeseries,n=(e.p0,[]),i=0;i div:not(:last-child)":{paddingBottom:e.spacing(3)},"& > div":{"& > div":{paddingTop:"0 !important"}},paddingBottom:e.spacing(9)},paper:{width:"100%",height:"100%",minHeight:310,backgroundColor:"#293640"},box:{padding:e.spacing(3,3),minHeight:310},boxButton:{padding:e.spacing(3,3)},boxHeader:{padding:e.spacing(3,3),height:e.spacing(10),display:"flex",alignItems:"center",borderBottom:"1px solid #313d47"},boxChart:{width:"100%",height:"100%",minHeight:310,maxHeight:350,padding:e.spacing(3,3),paddingRight:"5px",paddingLeft:"5px"},header:{backgroundColor:"#0b1216",color:"#f8f8f8",textAlign:"center",padding:e.spacing(3,0,16),marginBottom:-e.spacing(10)},button:{background:"linear-gradient(290deg, #2ad179, #4ab47c)",color:"white"}})}));var ae=a(189),ne=a.n(ae),re=a(190),ie=Object(re.a)({palette:{type:"dark",primary:{main:"#2ecd79"},secondary:{main:"#116be0"},error:{main:ne.a.A400},background:{default:"#fff",paper:"#293640"},text:{primary:"#fff",secondary:"#9aa3ad"}},typography:{h6:{fontWeight:400}}});console.log(ie);var oe=ie;o.a.render(r.a.createElement(l.a,{theme:oe},r.a.createElement(c.a,null),r.a.createElement(function(){var e=Object(n.useState)({d0:1e6,theta:.35,p0:.1,returnF:3,wFee:.05}),t=Object(p.a)(e,2),a=t[0],i=t[1],o=a.d0,c=a.theta,l=a.p0,s=a.returnF,d=a.wFee,f=Object(n.useMemo)(function(){return Object(ee.throttle)(i,1e3)},[]),y=function(e){var t=e.d0,a=e.theta,n=e.p0,r=e.returnF/(1-a),i=(1-a)*t,o=t/n;return{k:r,R0:i,S0:o,V0:Math.pow(o,r)/i}}({d0:o,theta:c,p0:l,returnF:s}),j=y.k,O=y.R0,w=(y.S0,y.V0),C=Object(n.useState)([0]),N=Object(p.a)(C,2),S=N[0],F=N[1],B=Object(n.useState)([0]),A=Object(p.a)(B,2),I=A[0],M=A[1],T=Object(n.useState)(O),P=Object(p.a)(T,2),V=P[0],z=P[1],W=Object(n.useState)(0),q=Object(p.a)(W,2),U=q[0],G=q[1],Q=Object(n.useState)(0),ae=Object(p.a)(Q,2),ne=ae[0],re=ae[1],ie=Object(n.useState)(1e4),oe=Object(p.a)(ie,1)[0],ce=Object(n.useState)(!1),le=Object(p.a)(ce,2),se=le[0],me=le[1],ue=Object(n.useState)(!1),pe=Object(p.a)(ue,2),de=pe[0],fe=pe[1];function ge(){return(ge=Object(u.a)(m.a.mark(function e(){return m.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return me(!1),G(0),F([0]),M([0]),re(0),e.next=3,H(0);case 3:me(!0);case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}Object(n.useEffect)(function(){var e=!0;function t(){return(t=Object(u.a)(m.a.mark(function t(){var a,n,r,i,o,c,l,s,u,p,f;return m.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:a=[O],n=[Y({R:O,V0:w,k:j})],r=[0],i=[],c=1,l=_({numSteps:o=100,avgTxSize:oe}),fe(!0),s=0;case 9:if(!(s div:not(:last-child)","paddingBottom","borderBottom","listBox","& > div","& p","paddingRight","slider","NumberFormatCustom","props","inputRef","onChange","prefix","suffix","other","Object","objectWithoutProperties","number_format_default","assign","getInputRef","onValueChange","values","target","value","thousandSeparator","InputParams","_ref","curveParams","setCurveParams","_useState","useState","_useState2","slicedToArray","d0","setD0","_useState3","_useState4","theta","setTheta","_useState5","_useState6","p0","setP0","_useState7","_useState8","returnF","setReturnF","_useState9","_useState10","wFee","setWFee","setParentCurveParams","inputFields","label","setter","min","max","step","unit","format","n","concat","toFixed","toText","String","toNum","Math","floor","parseFloat","round","map","_ref2","sanitizeInput","num","arguments","length","undefined","isNaN","Grid","key","container","item","xs","id","gutterBottom","TextField","e","InputProps","inputComponent","disableUnderline","inputProps","valueLabelDisplay","aria-label","defaultValue","_","newValue","Number","onChangeCommitted","valueLabelFormat","replace","linspace","_ref$from","from","to","steps","arr","x","push","getLinspaceTicks","data","desiredPoints","getLast","getAvg","reduce","t","c","abs","pause","ms","Promise","r","setTimeout","SupplyVsDemandChart","k","R0","S0","f","R","pow","biggest","_ref3","scaling","keyVertical","_data$push","defineProperty","useTheme","formatter","toPrecision","toLocaleString","es6","debounce","right","bottom","strokeDasharray","interval","ticks","d","dataKey","tickFormatter","tick","fill","stroke","domain","isAnimationActive","type","textAnchor","viewBox","y","style","ResultParams","resultFields","PriceSimulationChart","priceTimeseries","withdrawFeeTimeseries","toConsumableArray","yAxisId","apply","orientation","cursor","transition","opacity","&:hover","typography","padding","paper","SimplePopover","_React$useState","React","_React$useState2","anchorEl","setAnchorEl","open","Boolean","HelpOutline_default","onClick","currentTarget","Popover","PaperProps","onClose","anchorOrigin","vertical","horizontal","transformOrigin","getPriceR","V0","getSlippage","deltaR","S","realizedPrice","spotPrice","getRandomDeltas","_ref4","numSteps","avgTxSize","deltaR_t","i","random","sin","PI","deltaR_avg","mainContainer","paddingTop","minHeight","box","boxButton","boxHeader","boxChart","maxHeight","paddingLeft","header","textAlign","button","background","createMuiTheme","error","red","A400","default","h6","console","log","ReactDOM","render","ThemeProvider","CssBaseline","setCurveParamsThrottle","useMemo","throttle","_getInitialParams","getInitialParams","setPriceTimeseries","setWithdrawFeeTimeseries","totalReserve","setTotalReserve","withdrawCount","setWithdrawCount","_useState11","_useState12","avgSlippage","setAvgSlippage","_useState13","_useState15","_useState16","simulationActive","setSimulationActive","_useState17","_useState18","simulationRunning","setSimulationRunning","_startSimulation","asyncToGenerator","regenerator_default","mark","_callee2","wrap","_context2","prev","next","stop","this","useEffect","canContinueSimulation","_simulateRandomDelta","_callee","R_t","p_t","wFee_t","slippage_t","updateEveryNth","R_next","_context","abrupt","simulateRandomDelta","Container","fixed","sm","md","lg","Paper","Box","src_SupplyVsDemandChart","direction","justify","Button","disabled","src_PriceSimulationChart","document","querySelector"],"mappings":"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","file":"static/js/main.a20a0fcc.chunk.js","sourcesContent":["import React from \"react\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Link from \"@material-ui/core/Link\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n title: {\n // color: theme.palette.text.secondary,\n },\n subtitle: {\n color: theme.palette.text.secondary,\n margin: theme.spacing(3, 0, 0)\n },\n lightBulb: {\n verticalAlign: \"middle\",\n marginRight: theme.spacing(1)\n },\n link: {\n color: theme.palette.primary.main\n },\n logoContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: theme.spacing(4)\n },\n logo: {\n width: \"25px\",\n marginRight: \"4px\"\n },\n logoText: {\n display: \"inline\",\n fontSize: \"1.1rem\",\n fontWeight: 500\n }\n })\n);\n\nexport default function Header() {\n const classes = useStyles();\n return (\n <>\n
\n \"logo\"\n Commons Stack\n
\n\n \n Augmented Token Bonding Curve Design\n \n\n \n Experiment and test augmented token bonding curves\n \n \n );\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport {\n createStyles,\n makeStyles,\n withStyles,\n Theme\n} from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport NumberFormat from \"react-number-format\";\nimport { throttle } from \"lodash\";\n\nconst PrettoSlider = withStyles({\n root: {\n height: 8\n },\n thumb: {\n height: 24,\n width: 24,\n backgroundColor: \"#fff\",\n border: \"2px solid currentColor\",\n marginTop: -8,\n marginLeft: -12,\n \"&:focus,&:hover,&$active\": {\n boxShadow: \"inherit\"\n }\n },\n active: {},\n valueLabel: {\n left: \"calc(-50% + 4px)\"\n },\n track: {\n height: 8,\n borderRadius: 4\n },\n rail: {\n height: 8,\n borderRadius: 4\n },\n markLabel: {\n top: 30\n }\n})(Slider);\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(6, 0, 3)\n },\n lightBulb: {\n verticalAlign: \"middle\",\n marginRight: theme.spacing(1)\n },\n leftContainer: {\n color: theme.palette.text.secondary\n },\n centerContainer: {\n // color: blackColor\n },\n listBoxContainer: {\n \"& > div:not(:last-child)\": {\n paddingBottom: \"12px\",\n marginBottom: \"12px\",\n borderBottom: \"1px solid #313d47\"\n }\n },\n listBox: {\n \"& > div\": {\n display: \"flex\",\n alignItems: \"center\",\n \"& p\": {\n marginBottom: 0\n }\n },\n \"& > div:not(:last-child)\": {\n paddingRight: \"12px\"\n }\n },\n slider: {\n color: theme.palette.primary.main\n }\n })\n);\n\nfunction NumberFormatCustom(props: any) {\n const { inputRef, onChange, prefix, suffix, ...other } = props;\n\n return (\n {\n onChange({ target: { value: values.value } });\n }}\n thousandSeparator\n prefix={prefix}\n suffix={suffix}\n />\n );\n}\n\nexport default function InputParams({\n curveParams,\n setCurveParams\n}: {\n curveParams?: {\n d0: number;\n theta: number;\n p0: number;\n returnF: number;\n wFee: number;\n };\n setCurveParams(newCurveParams: any): void;\n}) {\n const [d0, setD0] = useState(1e6); // Initial raise, d0 (DAI)\n const [theta, setTheta] = useState(0.35); // fraction allocated to reserve (.)\n const [p0, setP0] = useState(0.1); // Hatch sale Price p0 (DAI / token)\n const [returnF, setReturnF] = useState(3); // Return factor (.)\n const [wFee, setWFee] = useState(0.05); // friction coefficient (.)\n\n function setParentCurveParams() {\n setCurveParams({ d0, theta, p0, returnF, wFee });\n }\n\n const inputFields: {\n label: string;\n value: number;\n setter(newValue: any): void;\n min: number;\n max: number;\n step: number;\n unit?: string;\n prefix?: string;\n suffix?: string;\n toText?(value: number): string;\n toNum?(value: string): number;\n format(value: number): string;\n }[] = [\n {\n label: \"Initial raise\",\n value: d0,\n setter: setD0,\n min: 0.1e6,\n max: 10e6,\n step: 0.1e6,\n unit: \"$M\",\n prefix: \"$\",\n suffix: \"M\",\n format: (n: number) => `$${+(n * 1e-6).toFixed(1)}M`,\n toText: (n: number) => String(+(n * 1e-6).toFixed(1)),\n toNum: (n: string) => Math.floor(parseFloat(n) * 1e6)\n },\n {\n label: \"Allocation to project\",\n value: theta,\n setter: setTheta,\n min: 0,\n max: 0.9,\n step: 0.01,\n unit: \"%\",\n suffix: \"%\",\n format: (n: number) => `${Math.round(100 * n)}%`,\n toText: (n: number) => String(+(n * 1e2).toFixed(0)),\n toNum: (n: string) => parseFloat(n) * 1e-2\n },\n {\n label: \"Initial token price\",\n value: p0,\n setter: setP0,\n min: 0.01,\n max: 1,\n step: 0.01,\n unit: \"$\",\n prefix: \"$\",\n toText: (n: number) => String(+n.toFixed(2)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `$${n}`\n },\n {\n label: \"Return factor\",\n value: returnF,\n setter: setReturnF,\n min: 1,\n max: 10,\n step: 0.1,\n unit: \"x\",\n suffix: \"x\",\n toText: (n: number) => String(+n.toFixed(1)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `${n}x`\n },\n {\n label: \"Withdrawl fee\",\n value: wFee,\n setter: setWFee,\n min: 0,\n max: 0.1,\n step: 0.001,\n unit: \"%\",\n suffix: \"%\",\n format: (n: number) => `${+(100 * n).toFixed(1)}%`,\n toText: (n: number) => String(+(n * 1e2).toFixed(1)),\n toNum: (n: string) => parseFloat(n) * 1e-2\n }\n ];\n\n const classes = useStyles();\n\n return (\n
\n {inputFields.map(\n ({\n label,\n value,\n setter,\n min,\n max,\n step,\n prefix,\n suffix,\n format,\n toText,\n toNum\n }) => {\n function sanitizeInput(num: number = 0) {\n if (isNaN(num)) num = 0;\n if (num > max) num = max;\n else if (num < min) num = min;\n setter(num);\n }\n\n return (\n \n \n \n {label}\n \n \n\n \n {/* {display(value)} */}\n {\n sanitizeInput(\n toNum ? toNum(e.target.value) : parseFloat(e.target.value)\n );\n setParentCurveParams();\n }}\n InputProps={{\n inputComponent: NumberFormatCustom,\n disableUnderline: true,\n inputProps: {\n prefix,\n suffix\n }\n }}\n value={toText ? toText(value) : value}\n />\n \n\n \n sanitizeInput(Number(newValue))}\n onChangeCommitted={setParentCurveParams}\n value={value}\n min={min}\n max={max}\n step={step}\n valueLabelFormat={value => format(value).replace(\"$\", \"\")}\n // marks={[\n // { value: 0, label: \"0%\" },\n // { value: 50, label: \"50%\" },\n // { value: 100, label: \"100%\" }\n // ]}\n />\n \n \n );\n }\n )}\n
\n );\n}\n","/**\n * Returns an equally spaced array of numbers `from`, `to` with `steps`.\n */\nexport function linspace({\n from = 0,\n to,\n steps\n}: {\n from?: number;\n to: number;\n steps: number;\n}) {\n const arr = [];\n for (let x = from; x <= to; x += (to - from) / steps) arr.push(x);\n return arr;\n}\n\n/**\n * Returns a uniform distribution of `num` ticks\n */\nexport function getLinspaceTicks(data: number[], num: number) {\n const desiredPoints = [];\n const step = (data[data.length - 1] - data[0]) / num;\n for (let x = data[0]; x < data[data.length - 1]; x += step) {\n desiredPoints.push(x);\n }\n if (desiredPoints.length < num + 1) desiredPoints.push(data[data.length - 1]);\n\n return desiredPoints;\n}\n\n/**\n * Returns the last element of an array\n */\nexport function getLast(a: number[]) {\n return a[a.length - 1];\n}\n\n/**\n * Returns the average of an array\n */\nexport function getAvg(a: number[]) {\n return a.reduce((t, c) => t + Math.abs(c), 0) / a.length;\n}\n\n/**\n * Waits `ms` miliseconds and resolves\n */\nexport function pause(ms: number) {\n return new Promise(r => setTimeout(r, ms));\n}\n","import React from \"react\";\nimport {\n AreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Legend,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip\n} from \"recharts\";\nimport { getLinspaceTicks } from \"./utils\";\nimport { useTheme } from \"@material-ui/styles\";\n\nfunction SupplyVsDemandChart({\n returnF,\n theta,\n d0,\n p0\n}: {\n returnF: number;\n theta: number;\n d0: number;\n p0: number;\n}) {\n // d0 - Initial raise, d0 (DAI)\n // theta - fraction allocated to reserve (.)\n // p0 - Hatch sale Price p0 (DAI / token)\n // returnF - Return factor (.)\n // wFee - friction coefficient (.)\n\n // Hatch parameters\n const k = returnF / (1 - theta); // Invariant power kappa (.)\n const R0 = (1 - theta / 100) * d0; // Initial reserve (DAI)\n const S0 = d0 / p0; // initial supply of tokens (token)\n const S_of_R = (R: number) => S0 * (R / R0) ** (1 / k);\n\n // Function setup\n const f = S_of_R;\n const from = 0;\n const to = 4 * R0;\n const steps = 100;\n const step = (to - from) / steps;\n\n /**\n * Prettify the result converting 1000000 to 1M\n */\n const biggest = Math.max(to, f(to));\n const [scaling, unit] =\n // Billion\n biggest > 0.5e9\n ? [1e9, \"B\"]\n : // Million\n biggest > 0.5e6\n ? [1e6, \"M\"]\n : // 1 thousand\n biggest > 0.5e3\n ? [1e3, \"K\"]\n : // No scale\n [1, \"\"];\n\n const keyHorizontal = \"x\";\n const keyVertical = \"Supply (tokens) / Reserve (DAI)\";\n\n const data = [];\n for (let x = from; x <= to; x += step) {\n data.push({\n [keyHorizontal]: x,\n [keyVertical]: f(x)\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n\n const formatter = (n: number) =>\n (+(n / scaling).toPrecision(2)).toLocaleString();\n\n function renderColorfulLegendText(value: string) {\n return {value};\n }\n\n function ReferenceLabel(props: any) {\n const { textAnchor, viewBox } = props;\n return (\n \n Initial value\n \n );\n }\n\n return (\n \n \n \n d[keyHorizontal]), 4)}\n dataKey={keyHorizontal}\n tickFormatter={formatter}\n unit={unit}\n tick={{ fill: theme.palette.text.secondary }}\n stroke={theme.palette.text.secondary}\n />\n d[keyVertical]), 3)}\n tickFormatter={formatter}\n unit={unit}\n tick={{ fill: theme.palette.text.secondary }}\n domain={[0, f(to)]}\n stroke={theme.palette.text.secondary}\n />\n formatter(Number(value))} />\n \n }\n />\n \n \n \n );\n}\n\nexport default SupplyVsDemandChart;\n","import React from \"react\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Grid from \"@material-ui/core/Grid\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(6, 0, 3)\n },\n lightBulb: {\n verticalAlign: \"middle\",\n marginRight: theme.spacing(1)\n },\n leftContainer: {\n color: theme.palette.text.secondary\n },\n centerContainer: {\n // color: blackColor\n },\n listBoxContainer: {\n \"& > div:not(:last-child)\": {\n marginBottom: \"12px\",\n borderBottom: \"1px solid #313d47\"\n }\n },\n listBox: {\n paddingBottom: \"12px\",\n \"& > div\": {\n display: \"flex\",\n alignItems: \"center\",\n \"& p\": {\n marginBottom: 0\n }\n },\n \"& > div:not(:last-child)\": {\n paddingRight: \"12px\"\n }\n }\n })\n);\n\nexport default function ResultParams({\n resultFields\n}: {\n resultFields: {\n label: string;\n value: number | string;\n }[];\n}) {\n const classes = useStyles();\n\n return (\n
\n {resultFields.map(({ label, value }) => (\n \n \n \n {label}\n \n \n\n \n {value}\n \n \n ))}\n
\n );\n}\n","import React from \"react\";\nimport {\n AreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Legend,\n ResponsiveContainer,\n Tooltip\n} from \"recharts\";\nimport { useTheme } from \"@material-ui/styles\";\nimport { linspace } from \"./utils\";\n\nfunction PriceSimulationChart({\n priceTimeseries,\n withdrawFeeTimeseries,\n p0\n}: {\n priceTimeseries: number[];\n withdrawFeeTimeseries: number[];\n p0: number;\n}) {\n // d0 - Initial raise, d0 (DAI)\n // theta - fraction allocated to reserve (.)\n // p0 - Hatch sale Price p0 (DAI / token)\n // returnF - Return factor (.)\n // wFee - friction coefficient (.)\n\n const keyHorizontal = \"x\";\n const keyVerticalLeft = \"Price (DAI / token)\";\n const keyVerticalRight = \"Collected withdraw fee (DAI)\";\n\n const data = [];\n for (let t = 0; t < priceTimeseries.length; t++) {\n data.push({\n [keyHorizontal]: t,\n [keyVerticalLeft]: priceTimeseries[t] || 0,\n [keyVerticalRight]: withdrawFeeTimeseries[t] || 0\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n\n function renderColorfulLegendText(value: string) {\n return {value};\n }\n\n const formatter = (n: number) => (+n.toPrecision(3)).toLocaleString();\n\n return (\n \n \n \n \n \n\n {/* Capital collected from withdraw fees - AXIS */}\n \n\n Number(value)} />\n \n\n {/* Capital collected from withdraw fees - AREA */}\n \n\n {/* }\n /> */}\n \n \n \n );\n}\n\nexport default PriceSimulationChart;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Popover from \"@material-ui/core/Popover\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Fab from \"@material-ui/core/Fab\";\nimport HelpIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: \"flex\",\n marginLeft: \"6px\",\n fontSize: \"0.9rem\",\n cursor: \"pointer\",\n transition: \"opacity ease 150ms\",\n opacity: 0.2,\n \"&:hover\": {\n opacity: 0.85\n }\n },\n typography: {\n padding: theme.spacing(2)\n },\n paper: {\n backgroundColor: \"#384b59\"\n }\n}));\n\nexport default function SimplePopover({ text }: { text: any }) {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n function handleClick(e: any) {\n setAnchorEl(e.currentTarget);\n }\n\n function handleClose() {\n setAnchorEl(null);\n }\n\n const open = Boolean(anchorEl);\n const id = open ? \"simple-popover\" : undefined;\n\n return (\n
\n \n\n \n {text}\n \n
\n );\n}\n","import { getAvg } from \"./utils\";\n\n/**\n * Computes the initial params given the \"user friendly\" params:\n * - Initial raise, `d0` (DAI)\n * - fraction allocated to reserve, `theta`\n * - Hatch sale price, `p0` (DAI / token)\n * - Return factor, `returnF`\n */\nexport function getInitialParams({\n d0,\n theta,\n p0,\n returnF\n}: {\n d0: number;\n theta: number;\n p0: number;\n returnF: number;\n}) {\n const k = returnF / (1 - theta); // Invariant power kappa (.)\n const R0 = (1 - theta) * d0; // Initial reserve (DAI)\n const S0 = d0 / p0; // initial supply of tokens (token)\n const V0 = S0 ** k / R0; // invariant coef\n return { k, R0, S0, V0 };\n}\n\n/**\n * Computes the price at a specific reserve `R`\n */\nexport function getPriceR({ R, V0, k }: { R: number; V0: number; k: number }) {\n return (k * R ** ((k - 1) / k)) / V0 ** (1 / k);\n}\n\n/**\n * Compute slippage at a point `R`, given a `deltaR`\n */\nexport function getSlippage({\n R,\n deltaR,\n V0,\n k\n}: {\n R: number;\n deltaR: number;\n V0: number;\n k: number;\n}) {\n const S = (V0 * R) ** (1 / k);\n const deltaS = (V0 * (R + deltaR)) ** (1 / k) - S;\n const realizedPrice = deltaR / deltaS;\n const spotPrice = getPriceR({ R, V0, k });\n return Math.abs(realizedPrice - spotPrice) / spotPrice;\n}\n\n/**\n * Generate a random delta given three components:\n * 1. Climbing sin\n * 2. Oscilating sin\n * 3. Random component\n */\nexport function getRandomDeltas({\n numSteps,\n avgTxSize\n}: {\n numSteps: number;\n avgTxSize: number;\n}) {\n const deltaR_t: number[] = [];\n for (let i = 0; i < numSteps; i++) {\n const rand = 1 - 2 * Math.random();\n const sin = Math.sin((1 / 20) * (i / numSteps));\n const ascending = Math.sin((Math.PI / 1) * (i / numSteps));\n const deltaR = 1e5 * rand + 1e5 * sin + 2e4 * ascending;\n deltaR_t.push(deltaR);\n }\n\n // Normalize random deltas with the average transaction size\n const deltaR_avg = getAvg(deltaR_t);\n return deltaR_t.map((deltaR: number) => (avgTxSize * deltaR) / deltaR_avg);\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\n// Material UI\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport Fade from \"@material-ui/core/Fade\";\n// Components\nimport Header from \"./Header\";\nimport InputParams from \"./InputParams\";\nimport SupplyVsDemandChart from \"./SupplyVsDemandChart\";\nimport ResultParams from \"./ResultParams\";\nimport PriceSimulationChart from \"./PriceSimulationChart\";\nimport HelpText from \"./HelpText\";\n// Utils\nimport { getLast, getAvg, pause } from \"./utils\";\nimport {\n getInitialParams,\n getPriceR,\n getRandomDeltas,\n getSlippage\n} from \"./math\";\nimport { throttle } from \"lodash\";\n// General styles\nimport \"./app.css\";\n\nconst headerOffset = 10;\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n mainContainer: {\n \"& > div:not(:last-child)\": {\n paddingBottom: theme.spacing(3)\n },\n \"& > div\": {\n \"& > div\": {\n paddingTop: \"0 !important\"\n }\n },\n paddingBottom: theme.spacing(9)\n },\n paper: {\n width: \"100%\",\n height: \"100%\",\n minHeight: 310,\n backgroundColor: \"#293640\"\n },\n box: {\n padding: theme.spacing(3, 3),\n minHeight: 310\n },\n boxButton: {\n padding: theme.spacing(3, 3)\n },\n boxHeader: {\n padding: theme.spacing(3, 3),\n height: theme.spacing(headerOffset),\n display: \"flex\",\n alignItems: \"center\",\n borderBottom: \"1px solid #313d47\"\n },\n boxChart: {\n width: \"100%\",\n height: \"100%\",\n minHeight: 310,\n maxHeight: 350,\n padding: theme.spacing(3, 3),\n // Correct the chart excessive margins\n paddingRight: \"5px\",\n paddingLeft: \"5px\"\n },\n header: {\n backgroundColor: \"#0b1216\",\n color: \"#f8f8f8\",\n textAlign: \"center\",\n padding: theme.spacing(3, 0, 6 + headerOffset),\n marginBottom: -theme.spacing(headerOffset)\n },\n button: {\n background: \"linear-gradient(290deg, #2ad179, #4ab47c)\",\n color: \"white\"\n }\n })\n);\n\nexport default function App() {\n const [curveParams, setCurveParams] = useState({\n d0: 1e6, // Initial raise, d0 (DAI)\n theta: 0.35, // fraction allocated to reserve (.)\n p0: 0.1, // Hatch sale price p0 (DAI / token)\n returnF: 3, // Return factor (.)\n wFee: 0.05 // friction coefficient (.)\n });\n\n const { d0, theta, p0, returnF, wFee } = curveParams;\n\n /**\n * Throttle the curve update to prevent the expensive chart\n * to re-render too often\n */\n const setCurveParamsThrottle = useMemo(\n () => throttle(setCurveParams, 1000),\n []\n );\n\n // Simulation results\n const {\n k, // Invariant power kappa (.)\n R0, // Initial reserve (DAI)\n S0, // initial supply of tokens (token)\n V0 // invariant coef\n } = getInitialParams({\n d0,\n theta,\n p0,\n returnF\n });\n\n const [priceTimeseries, setPriceTimeseries] = useState([0]);\n const [withdrawFeeTimeseries, setWithdrawFeeTimeseries] = useState([0]);\n const [totalReserve, setTotalReserve] = useState(R0);\n const [withdrawCount, setWithdrawCount] = useState(0);\n const [avgSlippage, setAvgSlippage] = useState(0);\n const [avgTxSize] = useState(10000);\n // Simulation state variables\n const [simulationActive, setSimulationActive] = useState(false);\n const [simulationRunning, setSimulationRunning] = useState(false);\n\n // #### TEST: Immediate simulation\n\n async function startSimulation() {\n // If there's a simulation already active, clear it\n clearSimulation();\n await pause(0);\n\n // Start simulation by setting it to active\n setSimulationActive(true);\n }\n\n function clearSimulation() {\n // Stop simulation\n setSimulationActive(false);\n // Clear simulation variables\n setWithdrawCount(0);\n setPriceTimeseries([0]);\n setWithdrawFeeTimeseries([0]);\n setAvgSlippage(0);\n }\n\n useEffect(() => {\n let canContinueSimulation = true;\n async function simulateRandomDelta() {\n const R_t: number[] = [R0];\n const p_t: number[] = [getPriceR({ R: R0, V0, k })];\n const wFee_t: number[] = [0];\n const slippage_t: number[] = [];\n\n // Random walk\n const numSteps = 100;\n const updateEveryNth = 1;\n\n // Compute the random deltas\n const deltaR_t = getRandomDeltas({ numSteps, avgTxSize });\n\n setSimulationRunning(true);\n for (let i = 0; i < numSteps; i++) {\n const deltaR = deltaR_t[i];\n\n const R = getLast(R_t);\n\n const R_next = R + deltaR;\n\n R_t.push(R_next);\n p_t.push(getPriceR({ R: R_next, V0, k }));\n slippage_t.push(getSlippage({ R, deltaR, V0, k }));\n\n // Consider withdraw fees on sales only\n if (deltaR < 0) {\n wFee_t.push(getLast(wFee_t) - deltaR * wFee);\n setWithdrawCount(c => c + 1);\n } else {\n wFee_t.push(getLast(wFee_t));\n }\n\n // Stop the simulation if it's no longer active\n if (!simulationActive || !canContinueSimulation) break;\n\n if (i % updateEveryNth === 0) {\n setPriceTimeseries(p_t);\n setWithdrawFeeTimeseries(wFee_t);\n setAvgSlippage(getAvg(slippage_t));\n setTotalReserve(R_next);\n\n // Make this run non-UI blocking\n await pause(5);\n }\n }\n setSimulationRunning(false);\n }\n\n if (simulationActive) simulateRandomDelta();\n // Return an \"unsubscribe\" function that halts the run\n return () => {\n canContinueSimulation = false;\n };\n }, [simulationActive]);\n\n const resultFields = [\n {\n label: `Average slippage (avg tx size ${avgTxSize} DAI)`,\n value: +(100 * avgSlippage).toFixed(3) + \"%\"\n },\n {\n label: `Capital collected from withdraw fees (${withdrawCount} txs)`,\n value:\n (+getLast(withdrawFeeTimeseries).toPrecision(3)).toLocaleString() +\n \" DAI\"\n },\n {\n label: `Total reserve`,\n value: (+totalReserve.toPrecision(3)).toLocaleString() + \" DAI\"\n }\n ];\n\n const classes = useStyles();\n return (\n <>\n
\n \n
\n \n
\n\n \n \n \n \n \n Curve Design\n \n Description of the different parameters
\n Initial raise: Lorem ipsum
\n Allocation to project: Lorem ipsum
\n Initial token price: Lorem ipsum
\n Return factor: Lorem ipsum
\n Withdrawl fee: Lorem ipsum\n \n }\n />\n
\n\n \n \n \n
\n
\n\n \n \n \n Preview\n Preview of the token bonding curve}\n />\n \n\n \n \n \n \n \n
\n\n \n \n \n \n \n \n Run simulation\n \n \n \n \n \n \n\n {simulationActive && (\n \n \n \n \n Simulation\n Some context about this simulation}\n />\n \n\n \n \n \n \n \n\n \n \n \n Results\n Explanation of what do this results mean}\n />\n \n\n \n \n \n \n \n \n )}\n
\n \n );\n}\n","import red from \"@material-ui/core/colors/red\";\nimport { createMuiTheme } from \"@material-ui/core/styles\";\n\n// A custom theme for this app\nconst theme = createMuiTheme({\n palette: {\n type: \"dark\",\n primary: {\n main: \"#2ecd79\"\n },\n secondary: {\n main: \"#116be0\"\n },\n error: {\n main: red.A400\n },\n background: {\n default: \"#fff\",\n paper: \"#293640\"\n },\n text: {\n primary: \"#fff\",\n secondary: \"#9aa3ad\"\n }\n },\n typography: {\n h6: {\n fontWeight: 400\n }\n }\n});\n\nconsole.log(theme);\n\nexport default theme;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { ThemeProvider } from '@material-ui/styles';\nimport App from './App';\nimport theme from './theme';\n\nReactDOM.render(\n \n {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}\n \n \n ,\n document.querySelector('#root'),\n);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.cd9f3e84.chunk.js b/static/js/main.cd9f3e84.chunk.js deleted file mode 100644 index 95c6e15..0000000 --- a/static/js/main.cd9f3e84.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{223:function(e,t,a){e.exports=a(419)},412:function(e,t,a){},419:function(e,t,a){"use strict";a.r(t);var n=a(1),r=a.n(n),i=a(13),o=a.n(i),c=a(459),l=a(458),s=a(63),m=a.n(s),u=a(117),p=a(17),d=a(420),f=a(465),g=a(457),h=a(454),x=a(461),b=a(456),v=a(455),E=a(463),y=Object(d.a)(function(e){return Object(f.a)({title:{},subtitle:{color:e.palette.text.secondary,margin:e.spacing(3,0,0)},lightBulb:{verticalAlign:"middle",marginRight:e.spacing(1)},link:{color:e.palette.primary.main},logoContainer:{display:"flex",alignItems:"center",justifyContent:"center",marginBottom:e.spacing(4)},logo:{width:"25px",marginRight:"4px"},logoText:{display:"inline",fontSize:"1.1rem",fontWeight:500}})});function j(){var e=y();return r.a.createElement(r.a.Fragment,null,r.a.createElement("div",{className:e.logoContainer},r.a.createElement("img",{src:"./favicon.ico",className:e.logo,alt:"logo"}),r.a.createElement(h.a,{className:e.logoText},"Commons Stack")),r.a.createElement(h.a,{className:e.title,variant:"h4"},"Augmented Token Bonding Curve Design"),r.a.createElement(h.a,{className:e.subtitle},"Experiment and test augmented token bonding curves"))}var O=a(191),k=a(7),C=a(464),N=a(460),w=a(174),S=a.n(w),B=Object(k.a)({root:{height:8},thumb:{height:24,width:24,backgroundColor:"#fff",border:"2px solid currentColor",marginTop:-8,marginLeft:-12,"&:focus,&:hover,&$active":{boxShadow:"inherit"}},active:{},valueLabel:{left:"calc(-50% + 4px)"},track:{height:8,borderRadius:4},rail:{height:8,borderRadius:4},markLabel:{top:30}})(C.a),F=Object(d.a)(function(e){return Object(f.a)({root:{margin:e.spacing(6,0,3)},lightBulb:{verticalAlign:"middle",marginRight:e.spacing(1)},leftContainer:{color:e.palette.text.secondary},centerContainer:{},listBoxContainer:{"& > div:not(:last-child)":{paddingBottom:"12px",marginBottom:"12px",borderBottom:"1px solid #313d47"}},listBox:{"& > div":{display:"flex",alignItems:"center","& p":{marginBottom:0}},"& > div:not(:last-child)":{paddingRight:"12px"}},slider:{color:e.palette.primary.main}})});function A(e){var t=e.inputRef,a=e.onChange,n=e.prefix,i=e.suffix,o=Object(O.a)(e,["inputRef","onChange","prefix","suffix"]);return r.a.createElement(S.a,Object.assign({},o,{getInputRef:t,onValueChange:function(e){a({target:{value:e.value}})},thousandSeparator:!0,prefix:n,suffix:i}))}function I(e){e.curveParams;var t=e.setCurveParams,a=Object(n.useState)(1e6),i=Object(p.a)(a,2),o=i[0],c=i[1],l=Object(n.useState)(.35),s=Object(p.a)(l,2),m=s[0],u=s[1],d=Object(n.useState)(.1),f=Object(p.a)(d,2),g=f[0],x=f[1],b=Object(n.useState)(3),E=Object(p.a)(b,2),y=E[0],j=E[1],O=Object(n.useState)(.05),k=Object(p.a)(O,2),C=k[0],w=k[1];function S(){t({d0:o,theta:m,p0:g,returnF:y,wFee:C})}var I=[{label:"Initial raise",value:o,setter:c,min:1e5,max:1e7,step:1e5,unit:"$M",prefix:"$",suffix:"M",format:function(e){return"$".concat(+(1e-6*e).toFixed(1),"M")},toText:function(e){return String(+(1e-6*e).toFixed(1))},toNum:function(e){return Math.floor(1e6*parseFloat(e))}},{label:"Allocation to project",value:m,setter:u,min:0,max:.9,step:.01,unit:"%",suffix:"%",format:function(e){return"".concat(Math.round(100*e),"%")},toText:function(e){return String(+(100*e).toFixed(0))},toNum:function(e){return.01*parseFloat(e)}},{label:"Initial token price",value:g,setter:x,min:.01,max:1,step:.01,unit:"$",prefix:"$",toText:function(e){return String(+e.toFixed(2))},toNum:function(e){return parseFloat(e)},format:function(e){return"$".concat(e)}},{label:"Return factor",value:y,setter:j,min:1,max:10,step:.1,unit:"x",suffix:"x",toText:function(e){return String(+e.toFixed(1))},toNum:function(e){return parseFloat(e)},format:function(e){return"".concat(e,"x")}},{label:"Withdrawl fee",value:C,setter:w,min:0,max:.1,step:.001,unit:"%",suffix:"%",format:function(e){return"".concat(+(100*e).toFixed(1),"%")},toText:function(e){return String(+(100*e).toFixed(1))},toNum:function(e){return.01*parseFloat(e)}}],M=F();return r.a.createElement("div",{className:M.listBoxContainer},I.map(function(e){var t=e.label,a=e.value,n=e.setter,i=e.min,o=e.max,c=e.step,l=e.prefix,s=e.suffix,m=e.format,u=e.toText,p=e.toNum;function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;isNaN(e)&&(e=0),e>o?e=o:e5e8?[1e9,"B"]:d>5e5?[1e6,"M"]:d>500?[1e3,"K"]:[1,""],g=Object(p.a)(f,2),h=g[0],x=g[1],b="Supply (tokens) / Reserve (DAI)",v=[],E=0;E<=m;E+=u){var y;v.push((y={},Object(M.a)(y,"x",E),Object(M.a)(y,b,s(E)),y))}var j=Object($.a)(),O=function(e){return(+(e/h).toPrecision(2)).toLocaleString()};return r.a.createElement(T.f,{debounce:1},r.a.createElement(T.b,{width:0,height:400,data:v,margin:{top:10,right:30,left:0,bottom:0}},r.a.createElement(T.c,{strokeDasharray:"3 3"}),r.a.createElement(T.h,{interval:"preserveStartEnd",ticks:R(v.map(function(e){return e.x}),4),dataKey:"x",tickFormatter:O,unit:x,tick:{fill:j.palette.text.secondary},stroke:j.palette.text.secondary}),r.a.createElement(T.i,{interval:"preserveStartEnd",ticks:R(v.map(function(e){return e[b]}),3),tickFormatter:O,unit:x,tick:{fill:j.palette.text.secondary},domain:[0,s(m)],stroke:j.palette.text.secondary}),r.a.createElement(T.g,{formatter:function(e){return O(Number(e))}}),r.a.createElement(T.a,{isAnimationActive:!1,type:"monotone",dataKey:b,stroke:j.palette.primary.main,fill:j.palette.primary.main}),r.a.createElement(T.e,{x:c,stroke:"#90a4ae",strokeDasharray:"9 0",label:r.a.createElement(function(e){var t=e.textAnchor,a=e.viewBox;return r.a.createElement("text",{x:a.x+10,y:30,fill:j.palette.text.secondary,textAnchor:t},"Initial value")},null)}),r.a.createElement(T.d,{formatter:function(e){return r.a.createElement("span",{style:{color:j.palette.text.secondary}},e)}})))},z=Object(d.a)(function(e){return Object(f.a)({root:{margin:e.spacing(6,0,3)},lightBulb:{verticalAlign:"middle",marginRight:e.spacing(1)},leftContainer:{color:e.palette.text.secondary},centerContainer:{},listBoxContainer:{"& > div:not(:last-child)":{marginBottom:"12px",borderBottom:"1px solid #313d47"}},listBox:{paddingBottom:"12px","& > div":{display:"flex",alignItems:"center","& p":{marginBottom:0}},"& > div:not(:last-child)":{paddingRight:"12px"}}})});function W(e){var t=e.resultFields,a=z();return r.a.createElement("div",{className:a.listBoxContainer},t.map(function(e){var t=e.label,n=e.value;return r.a.createElement(v.a,{key:t,container:!0,spacing:0,className:a.listBox},r.a.createElement(v.a,{item:!0,xs:8,className:a.leftContainer},r.a.createElement(h.a,{id:t,gutterBottom:!0},t)),r.a.createElement(v.a,{item:!0,xs:4,className:a.centerContainer},r.a.createElement(h.a,{gutterBottom:!0},n)))}))}var J=a(90);var V=function(e){for(var t=e.priceTimeseries,a=e.withdrawFeeTimeseries,n=(e.p0,[]),i=0;i div:not(:last-child)":{paddingBottom:e.spacing(3)},"& > div":{"& > div":{paddingTop:"0 !important"}},paddingBottom:e.spacing(9)},paper:{width:"100%",height:"100%",minHeight:310,backgroundColor:"#293640"},box:{padding:e.spacing(3,3),minHeight:310},boxButton:{padding:e.spacing(3,3)},boxHeader:{padding:e.spacing(3,3),height:e.spacing(10),display:"flex",alignItems:"center",borderBottom:"1px solid #313d47"},boxChart:{width:"100%",height:"100%",minHeight:310,maxHeight:350,padding:e.spacing(3,3),paddingRight:"5px",paddingLeft:"5px"},header:{backgroundColor:"#0b1216",color:"#f8f8f8",textAlign:"center",padding:e.spacing(3,0,16),marginBottom:-e.spacing(10)},button:{background:"linear-gradient(290deg, #2ad179, #4ab47c)",color:"white"}})}));var _=a(189),ee=a.n(_),te=a(190),ae=Object(te.a)({palette:{type:"dark",primary:{main:"#2ecd79"},secondary:{main:"#116be0"},error:{main:ee.a.A400},background:{default:"#fff",paper:"#293640"},text:{primary:"#fff",secondary:"#9aa3ad"}},typography:{h6:{fontWeight:400}}});console.log(ae);var ne=ae;o.a.render(r.a.createElement(l.a,{theme:ne},r.a.createElement(c.a,null),r.a.createElement(function(){var e=Object(n.useState)({d0:1e6,theta:.35,p0:.1,returnF:3,wFee:.05}),t=Object(p.a)(e,2),a=t[0],i=t[1],o=a.d0,c=a.theta,l=a.p0,s=a.returnF,d=a.wFee,f=Object(n.useMemo)(function(){return Object(Y.throttle)(i,1e3)},[]),y=s/(1-c),O=(1-c/100)*o,k=o/l,C=Math.pow(k,y)/O,N=Object(n.useState)([0]),w=Object(p.a)(N,2),S=w[0],B=w[1],F=Object(n.useState)([0]),A=Object(p.a)(F,2),M=A[0],T=A[1],P=Object(n.useState)(O),R=Object(p.a)(P,2),$=R[0],z=R[1],J=Object(n.useState)(0),q=Object(p.a)(J,2),U=q[0],G=q[1],Q=Object(n.useState)(0),_=Object(p.a)(Q,2),ee=_[0],te=_[1],ae=Object(n.useState)(1e4),ne=Object(p.a)(ae,1)[0],re=Object(n.useState)(!1),ie=Object(p.a)(re,2),oe=ie[0],ce=ie[1],le=Object(n.useState)(!1),se=Object(p.a)(le,2),me=se[0],ue=se[1];function pe(){return(pe=Object(u.a)(m.a.mark(function e(){return m.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return ce(!1),G(0),B([0]),T([0]),te(0),e.next=3,H(0);case 3:ce(!0);case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}Object(n.useEffect)(function(){var e=!0;function t(){return(t=Object(u.a)(m.a.mark(function t(){var a,n,r,i,o,c,l,s,u,p,f,g,h,x,b,v,E,j,N,w,S,F,A,I,M,P;return m.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:for(a=[O],n=[k],r=[O/k],i=[0],o=[],c=100,l=1,s=[],u=0;u div:not(:last-child)","paddingBottom","borderBottom","listBox","& > div","& p","paddingRight","slider","NumberFormatCustom","props","inputRef","onChange","prefix","suffix","other","Object","objectWithoutProperties","number_format_default","assign","getInputRef","onValueChange","values","target","value","thousandSeparator","InputParams","_ref","curveParams","setCurveParams","_useState","useState","_useState2","slicedToArray","d0","setD0","_useState3","_useState4","theta","setTheta","_useState5","_useState6","p0","setP0","_useState7","_useState8","returnF","setReturnF","_useState9","_useState10","wFee","setWFee","setParentCurveParams","inputFields","label","setter","min","max","step","unit","format","n","concat","toFixed","toText","String","toNum","Math","floor","parseFloat","round","map","_ref2","sanitizeInput","num","arguments","length","undefined","isNaN","Grid","key","container","item","xs","id","gutterBottom","TextField","e","InputProps","inputComponent","disableUnderline","inputProps","valueLabelDisplay","aria-label","defaultValue","_","newValue","Number","onChangeCommitted","valueLabelFormat","replace","linspace","_ref$from","from","to","steps","arr","x","push","getLinspaceTicks","data","desiredPoints","getLast","getAvg","reduce","t","c","abs","pause","ms","Promise","r","setTimeout","SupplyVsDemandChart","k","R0","S0","f","R","pow","biggest","_ref3","scaling","keyVertical","_data$push","defineProperty","useTheme","formatter","toPrecision","toLocaleString","es6","debounce","right","bottom","strokeDasharray","interval","ticks","d","dataKey","tickFormatter","tick","fill","stroke","domain","isAnimationActive","type","textAnchor","viewBox","y","style","ResultParams","resultFields","PriceSimulationChart","priceTimeseries","withdrawFeeTimeseries","toConsumableArray","yAxisId","apply","orientation","cursor","transition","opacity","&:hover","typography","padding","paper","SimplePopover","_React$useState","React","_React$useState2","anchorEl","setAnchorEl","open","Boolean","HelpOutline_default","onClick","currentTarget","Popover","PaperProps","onClose","anchorOrigin","vertical","horizontal","transformOrigin","mainContainer","paddingTop","minHeight","box","boxButton","boxHeader","boxChart","maxHeight","paddingLeft","header","textAlign","button","background","createMuiTheme","error","red","A400","default","h6","console","log","ReactDOM","render","ThemeProvider","CssBaseline","setCurveParamsThrottle","useMemo","throttle","V0","setPriceTimeseries","setWithdrawFeeTimeseries","totalReserve","setTotalReserve","withdrawCount","setWithdrawCount","_useState11","_useState12","avgSlippage","setAvgSlippage","_useState13","avgTxSize","_useState15","_useState16","simulationActive","setSimulationActive","_useState17","_useState18","simulationRunning","setSimulationRunning","_startSimulation","asyncToGenerator","regenerator_default","mark","_callee2","wrap","_context2","prev","next","stop","this","useEffect","canContinueSimulation","_simulateRandomDelta","_callee","R_t","S_t","p_t","wFee_t","slippage_t","numSteps","updateEveryNth","deltaR_t","i","rand","sin","ascending","deltaR","deltaR_avg","deltaR_t_normalized","_i","_deltaR","S","p","R_next","deltaS","S_next","p_next","spotPrice","slippage","_context","random","PI","abrupt","simulateRandomDelta","Container","fixed","sm","md","lg","Paper","Box","src_SupplyVsDemandChart","direction","justify","Button","disabled","src_PriceSimulationChart","document","querySelector"],"mappings":"8TAKMA,EAAYC,YAAW,SAACC,GAAD,OAC3BC,YAAa,CACXC,MAAO,GAGPC,SAAU,CACRC,MAAOJ,EAAMK,QAAQC,KAAKC,UAC1BC,OAAQR,EAAMS,QAAQ,EAAG,EAAG,IAE9BC,UAAW,CACTC,cAAe,SACfC,YAAaZ,EAAMS,QAAQ,IAE7BI,KAAM,CACJT,MAAOJ,EAAMK,QAAQS,QAAQC,MAE/BC,cAAe,CACbC,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBC,aAAcpB,EAAMS,QAAQ,IAE9BY,KAAM,CACJC,MAAO,OACPV,YAAa,OAEfW,SAAU,CACRN,QAAS,SACTO,SAAU,SACVC,WAAY,SAKH,SAASC,IACtB,IAAMC,EAAU7B,IAChB,OACE8B,EAAAC,EAAAC,cAAAF,EAAAC,EAAAE,SAAA,KACEH,EAAAC,EAAAC,cAAA,OAAKE,UAAWL,EAAQX,eACtBY,EAAAC,EAAAC,cAAA,OAAKG,IAAI,gBAAgBD,UAAWL,EAAQN,KAAMa,IAAI,SACtDN,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYH,UAAWL,EAAQJ,UAA/B,kBAGFK,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYH,UAAWL,EAAQzB,MAAOkC,QAAQ,MAA9C,wCAIAR,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYH,UAAWL,EAAQxB,UAA/B,+GCpCAkC,EAAeC,YAAW,CAC9BC,KAAM,CACJC,OAAQ,GAEVC,MAAO,CACLD,OAAQ,GACRlB,MAAO,GACPoB,gBAAiB,OACjBC,OAAQ,yBACRC,WAAY,EACZC,YAAa,GACbC,2BAA4B,CAC1BC,UAAW,YAGfC,OAAQ,GACRC,WAAY,CACVC,KAAM,oBAERC,MAAO,CACLX,OAAQ,EACRY,aAAc,GAEhBC,KAAM,CACJb,OAAQ,EACRY,aAAc,GAEhBE,UAAW,CACTC,IAAK,KA5BYjB,CA8BlBkB,KAEG1D,EAAYC,YAAW,SAACC,GAAD,OAC3BC,YAAa,CACXsC,KAAM,CACJ/B,OAAQR,EAAMS,QAAQ,EAAG,EAAG,IAE9BC,UAAW,CACTC,cAAe,SACfC,YAAaZ,EAAMS,QAAQ,IAE7BgD,cAAe,CACbrD,MAAOJ,EAAMK,QAAQC,KAAKC,WAE5BmD,gBAAiB,GAGjBC,iBAAkB,CAChBC,2BAA4B,CAC1BC,cAAe,OACfzC,aAAc,OACd0C,aAAc,sBAGlBC,QAAS,CACPC,UAAW,CACT/C,QAAS,OACTC,WAAY,SACZ+C,MAAO,CACL7C,aAAc,IAGlBwC,2BAA4B,CAC1BM,aAAc,SAGlBC,OAAQ,CACN/D,MAAOJ,EAAMK,QAAQS,QAAQC,UAKnC,SAASqD,EAAmBC,GAAY,IAC9BC,EAAiDD,EAAjDC,SAAUC,EAAuCF,EAAvCE,SAAUC,EAA6BH,EAA7BG,OAAQC,EAAqBJ,EAArBI,OAAWC,EADTC,OAAAC,EAAA,EAAAD,CACmBN,EADnB,2CAGtC,OACEzC,EAAAC,EAAAC,cAAC+C,EAAAhD,EAAD8C,OAAAG,OAAA,GACMJ,EADN,CAEEK,YAAaT,EACbU,cAAe,SAAAC,GACbV,EAAS,CAAEW,OAAQ,CAAEC,MAAOF,EAAOE,UAErCC,mBAAiB,EACjBZ,OAAQA,EACRC,OAAQA,KAKC,SAASY,EAATC,GAYZA,EAXDC,YAWC,IAVDC,EAUCF,EAVDE,eAUCC,EACmBC,mBAAS,KAD5BC,EAAAhB,OAAAiB,EAAA,EAAAjB,CAAAc,EAAA,GACMI,EADNF,EAAA,GACUG,EADVH,EAAA,GAAAI,EAEyBL,mBAAS,KAFlCM,EAAArB,OAAAiB,EAAA,EAAAjB,CAAAoB,EAAA,GAEME,EAFND,EAAA,GAEaE,EAFbF,EAAA,GAAAG,EAGmBT,mBAAS,IAH5BU,EAAAzB,OAAAiB,EAAA,EAAAjB,CAAAwB,EAAA,GAGME,EAHND,EAAA,GAGUE,EAHVF,EAAA,GAAAG,EAI6Bb,mBAAS,GAJtCc,EAAA7B,OAAAiB,EAAA,EAAAjB,CAAA4B,EAAA,GAIME,EAJND,EAAA,GAIeE,EAJfF,EAAA,GAAAG,EAKuBjB,mBAAS,KALhCkB,EAAAjC,OAAAiB,EAAA,EAAAjB,CAAAgC,EAAA,GAKME,EALND,EAAA,GAKYE,EALZF,EAAA,GAOD,SAASG,IACPvB,EAAe,CAAEK,KAAII,QAAOI,KAAII,UAASI,SAG3C,IAAMG,EAaA,CACJ,CACEC,MAAO,gBACP9B,MAAOU,EACPqB,OAAQpB,EACRqB,IAAK,IACLC,IAAK,IACLC,KAAM,IACNC,KAAM,KACN9C,OAAQ,IACRC,OAAQ,IACR8C,OAAQ,SAACC,GAAD,UAAAC,SAAyB,KAAJD,GAAUE,QAAQ,GAAvC,MACRC,OAAQ,SAACH,GAAD,OAAeI,SAAa,KAAJJ,GAAUE,QAAQ,KAClDG,MAAO,SAACL,GAAD,OAAeM,KAAKC,MAAsB,IAAhBC,WAAWR,MAE9C,CACEP,MAAO,wBACP9B,MAAOc,EACPiB,OAAQhB,EACRiB,IAAK,EACLC,IAAK,GACLC,KAAM,IACNC,KAAM,IACN7C,OAAQ,IACR8C,OAAQ,SAACC,GAAD,SAAAC,OAAkBK,KAAKG,MAAM,IAAMT,GAAnC,MACRG,OAAQ,SAACH,GAAD,OAAeI,SAAa,IAAJJ,GAASE,QAAQ,KACjDG,MAAO,SAACL,GAAD,MAA+B,IAAhBQ,WAAWR,KAEnC,CACEP,MAAO,sBACP9B,MAAOkB,EACPa,OAAQZ,EACRa,IAAK,IACLC,IAAK,EACLC,KAAM,IACNC,KAAM,IACN9C,OAAQ,IACRmD,OAAQ,SAACH,GAAD,OAAeI,QAAQJ,EAAEE,QAAQ,KACzCG,MAAO,SAACL,GAAD,OAAeQ,WAAWR,IACjCD,OAAQ,SAACC,GAAD,UAAAC,OAAmBD,KAE7B,CACEP,MAAO,gBACP9B,MAAOsB,EACPS,OAAQR,EACRS,IAAK,EACLC,IAAK,GACLC,KAAM,GACNC,KAAM,IACN7C,OAAQ,IACRkD,OAAQ,SAACH,GAAD,OAAeI,QAAQJ,EAAEE,QAAQ,KACzCG,MAAO,SAACL,GAAD,OAAeQ,WAAWR,IACjCD,OAAQ,SAACC,GAAD,SAAAC,OAAkBD,EAAlB,OAEV,CACEP,MAAO,gBACP9B,MAAO0B,EACPK,OAAQJ,EACRK,IAAK,EACLC,IAAK,GACLC,KAAM,KACNC,KAAM,IACN7C,OAAQ,IACR8C,OAAQ,SAACC,GAAD,SAAAC,SAAoB,IAAMD,GAAGE,QAAQ,GAArC,MACRC,OAAQ,SAACH,GAAD,OAAeI,SAAa,IAAJJ,GAASE,QAAQ,KACjDG,MAAO,SAACL,GAAD,MAA+B,IAAhBQ,WAAWR,MAI/B7F,EAAU7B,IAEhB,OACE8B,EAAAC,EAAAC,cAAA,OAAKE,UAAWL,EAAQgC,kBACrBqD,EAAYkB,IACX,SAAAC,GAYM,IAXJlB,EAWIkB,EAXJlB,MACA9B,EAUIgD,EAVJhD,MACA+B,EASIiB,EATJjB,OACAC,EAQIgB,EARJhB,IACAC,EAOIe,EAPJf,IACAC,EAMIc,EANJd,KACA7C,EAKI2D,EALJ3D,OACAC,EAII0D,EAJJ1D,OACA8C,EAGIY,EAHJZ,OACAI,EAEIQ,EAFJR,OACAE,EACIM,EADJN,MAEA,SAASO,IAA+B,IAAjBC,EAAiBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAH,EAC/BG,MAAMJ,KAAMA,EAAM,GAClBA,EAAMjB,EAAKiB,EAAMjB,EACZiB,EAAMlB,IAAKkB,EAAMlB,GAC1BD,EAAOmB,GAGT,OACEzG,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMC,IAAK1B,EAAO2B,WAAS,EAACnI,QAAS,EAAGuB,UAAWL,EAAQoC,SACzDnC,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,EAAG9G,UAAWL,EAAQ8B,eACnC7B,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAY4G,GAAI9B,EAAO+B,cAAY,GAChC/B,IAILrF,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,EAAG9G,UAAWL,EAAQ+B,iBAEnC9B,EAAAC,EAAAC,cAACmH,EAAA,EAAD,CACE1E,SAAU,SAAA2E,GACRd,EACEP,EAAQA,EAAMqB,EAAEhE,OAAOC,OAAS6C,WAAWkB,EAAEhE,OAAOC,QAEtD4B,KAEFoC,WAAY,CACVC,eAAgBhF,EAChBiF,kBAAkB,EAClBC,WAAY,CACV9E,SACAC,WAGJU,MAAOwC,EAASA,EAAOxC,GAASA,KAIpCvD,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,GACblH,EAAAC,EAAAC,cAACO,EAAD,CACEL,UAAWL,EAAQwC,OACnBoF,kBAAkB,OAClBC,aAAYvC,EACZwC,aAActE,EACdZ,SAAU,SAACmF,EAAGC,GAAJ,OAAiBvB,EAAcwB,OAAOD,KAChDE,kBAAmB9C,EACnB5B,MAAOA,EACPgC,IAAKA,EACLC,IAAKA,EACLC,KAAMA,EACNyC,iBAAkB,SAAA3E,GAAK,OAAIoC,EAAOpC,GAAO4E,QAAQ,IAAK,gCCjRjE,SAASC,EAAT1E,GAUL,IAFC,IAAA2E,EAAA3E,EAPD4E,YAOC,IAAAD,EAPM,EAONA,EANDE,EAMC7E,EAND6E,GACAC,EAKC9E,EALD8E,MAMMC,EAAM,GACHC,EAAIJ,EAAMI,GAAKH,EAAIG,IAAMH,EAAKD,GAAQE,EAAOC,EAAIE,KAAKD,GAC/D,OAAOD,EAMF,SAASG,EAAiBC,EAAgBpC,GAG/C,IAFA,IAAMqC,EAAgB,GAChBrD,GAAQoD,EAAKA,EAAKlC,OAAS,GAAKkC,EAAK,IAAMpC,EACxCiC,EAAIG,EAAK,GAAIH,EAAIG,EAAKA,EAAKlC,OAAS,GAAI+B,GAAKjD,EACpDqD,EAAcH,KAAKD,GAIrB,OAFII,EAAcnC,OAASF,EAAM,GAAGqC,EAAcH,KAAKE,EAAKA,EAAKlC,OAAS,IAEnEmC,EAMF,SAASC,EAAQ9I,GACtB,OAAOA,EAAEA,EAAE0G,OAAS,GAMf,SAASqC,EAAO/I,GACrB,OAAOA,EAAEgJ,OAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIhD,KAAKkD,IAAID,IAAI,GAAKlJ,EAAE0G,OAM7C,SAAS0C,EAAMC,GACpB,OAAO,IAAIC,QAAQ,SAAAC,GAAC,OAAIC,WAAWD,EAAGF,kBCqGzBI,MAvIf,SAAAhG,GAmDE,IAzCC,IATDmB,EASCnB,EATDmB,QACAR,EAQCX,EARDW,MACAJ,EAOCP,EAPDO,GACAQ,EAMCf,EANDe,GAcMkF,EAAI9E,GAAW,EAAIR,GACnBuF,GAAM,EAAIvF,EAAQ,KAAOJ,EACzB4F,EAAK5F,EAAKQ,EAIVqF,EAHS,SAACC,GAAD,OAAeF,EAAE3D,KAAA8D,IAAID,EAAIH,EAAQ,EAAID,IAK9CpB,EAAK,EAAIqB,EAETnE,GAAQ8C,EAHD,GAEC,IAMR0B,EAAU/D,KAAKV,IAAI+C,EAAIuB,EAAEvB,IAvB9BhC,EA0BC0D,EAAU,IACN,CAAC,IAAK,KAERA,EAAU,IACR,CAAC,IAAK,KAERA,EAAU,IACR,CAAC,IAAK,KAEN,CAAC,EAAG,IAnCTC,EAAAnH,OAAAiB,EAAA,EAAAjB,CAAAwD,EAAA,GAwBM4D,EAxBND,EAAA,GAwBexE,EAxBfwE,EAAA,GAsCKE,EAAc,kCAEdvB,EAAO,GACJH,EA1BI,EA0BMA,GAAKH,EAAIG,GAAKjD,EAAM,KAAA4E,EACrCxB,EAAKF,MAAL0B,EAAA,GAAAtH,OAAAuH,EAAA,EAAAvH,CAAAsH,EALoB,IAMD3B,GADnB3F,OAAAuH,EAAA,EAAAvH,CAAAsH,EAEGD,EAAcN,EAAEpB,IAFnB2B,IAQF,IAAMjM,EAAamM,cAEbC,EAAY,SAAC5E,GAAD,SACbA,EAAIuE,GAASM,YAAY,IAAIC,kBAoBlC,OACE1K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAAqBC,SAAU,GAC7B5K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEjL,MAAO,EACPkB,OAAQ,IACRiI,KAAMA,EACNjK,OAAQ,CACN+C,IAAK,GACLkJ,MAAO,GACPvJ,KAAM,EACNwJ,OAAQ,IAGV9K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAAeI,gBAAgB,QAC/B/K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEK,SAAU,mBACVC,MAAOrC,EAAiBC,EAAKvC,IAAI,SAAA4E,GAAC,OAAIA,EAAC,IAAkB,GACzDC,QArDc,IAsDdC,cAAeZ,EACf9E,KAAMA,EACN2F,KAAM,CAAEC,KAAMlN,EAAMK,QAAQC,KAAKC,WACjC4M,OAAQnN,EAAMK,QAAQC,KAAKC,YAE7BqB,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEK,SAAU,mBACVC,MAAOrC,EAAiBC,EAAKvC,IAAI,SAAA4E,GAAC,OAAIA,EAAEd,KAAe,GACvDgB,cAAeZ,EACf9E,KAAMA,EACN2F,KAAM,CAAEC,KAAMlN,EAAMK,QAAQC,KAAKC,WACjC6M,OAAQ,CAAC,EAAG1B,EAAEvB,IACdgD,OAAQnN,EAAMK,QAAQC,KAAKC,YAE7BqB,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAASH,UAAW,SAAAjH,GAAK,OAAIiH,EAAUxC,OAAOzE,OAC9CvD,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEc,mBAAmB,EACnBC,KAAK,WACLP,QAASf,EACTmB,OAAQnN,EAAMK,QAAQS,QAAQC,KAC9BmM,KAAMlN,EAAMK,QAAQS,QAAQC,OAE9Ba,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEjC,EAAGkB,EACH2B,OAAO,UACPR,gBAAgB,MAChB1F,MAAOrF,EAAAC,EAAAC,cA1Df,SAAwBuC,GAAY,IAC1BkJ,EAAwBlJ,EAAxBkJ,WAAYC,EAAYnJ,EAAZmJ,QACpB,OACE5L,EAAAC,EAAAC,cAAA,QACEwI,EAAGkD,EAAQlD,EAAI,GACfmD,EAAG,GACHP,KAAMlN,EAAMK,QAAQC,KAAKC,UACzBgN,WAAYA,GAJd,kBAuDW,QAET3L,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAAQH,UAhEd,SAAkCjH,GAChC,OAAOvD,EAAAC,EAAAC,cAAA,QAAM4L,MAAO,CAAEtN,MAAOJ,EAAMK,QAAQC,KAAKC,YAAc4E,SC5E5DrF,EAAYC,YAAW,SAACC,GAAD,OAC3BC,YAAa,CACXsC,KAAM,CACJ/B,OAAQR,EAAMS,QAAQ,EAAG,EAAG,IAE9BC,UAAW,CACTC,cAAe,SACfC,YAAaZ,EAAMS,QAAQ,IAE7BgD,cAAe,CACbrD,MAAOJ,EAAMK,QAAQC,KAAKC,WAE5BmD,gBAAiB,GAGjBC,iBAAkB,CAChBC,2BAA4B,CAC1BxC,aAAc,OACd0C,aAAc,sBAGlBC,QAAS,CACPF,cAAe,OACfG,UAAW,CACT/C,QAAS,OACTC,WAAY,SACZ+C,MAAO,CACL7C,aAAc,IAGlBwC,2BAA4B,CAC1BM,aAAc,aAMP,SAASyJ,EAATrI,GAOZ,IANDsI,EAMCtI,EANDsI,aAOMjM,EAAU7B,IAEhB,OACE8B,EAAAC,EAAAC,cAAA,OAAKE,UAAWL,EAAQgC,kBACrBiK,EAAa1F,IAAI,SAAAC,GAAA,IAAGlB,EAAHkB,EAAGlB,MAAO9B,EAAVgD,EAAUhD,MAAV,OAChBvD,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMC,IAAK1B,EAAO2B,WAAS,EAACnI,QAAS,EAAGuB,UAAWL,EAAQoC,SACzDnC,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,EAAG9G,UAAWL,EAAQ8B,eACnC7B,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAY4G,GAAI9B,EAAO+B,cAAY,GAChC/B,IAILrF,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,EAAG9G,UAAWL,EAAQ+B,iBACnC9B,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAY6G,cAAY,GAAE7D,oBCmEvB0I,MApHf,SAAAvI,GAoBE,IAZC,IAPDwI,EAOCxI,EAPDwI,gBACAC,EAMCzI,EANDyI,sBAiBMtD,GAXLnF,EALDe,GAgBa,IACJyE,EAAI,EAAGA,EAAIgD,EAAgBvF,OAAQuC,IAAK,KAAAmB,EAC/CxB,EAAKF,MAAL0B,EAAA,GAAAtH,OAAAuH,EAAA,EAAAvH,CAAAsH,EANoB,IAODnB,GADnBnG,OAAAuH,EAAA,EAAAvH,CAAAsH,EALsB,sBAOD6B,EAAgBhD,IAAM,GAF3CnG,OAAAuH,EAAA,EAAAvH,CAAAsH,EAJuB,+BAOD8B,EAAsBjD,IAAM,GAHlDmB,IASF,IAAMjM,EAAamM,cAQnB,OACEvK,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAAqBC,SAAU,GAC7B5K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEjL,MAAO,EACPkB,OAAQ,IACRiI,KAAMA,EACNjK,OAAQ,CACN+C,IAAK,GACLkJ,MAAO,GACPvJ,KAAM,EACNwJ,OAAQ,IAGV9K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAAeI,gBAAgB,QAC/B/K,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEQ,QAtCc,IAuCdE,KAAM,CAAEC,KAAMlN,EAAMK,QAAQC,KAAKC,WACjC4M,OAAQnN,EAAMK,QAAQC,KAAKC,UAC3BsM,MAAK,GAAApF,OAAA9C,OAAAqJ,EAAA,EAAArJ,CACAqF,EAAS,CACVG,GAAI2D,EAAgBvF,OACpB6B,MAAO,IACNlC,IAAIJ,KAAKC,QAJT,CAKH+F,EAAgBvF,OAAS,MAG7B3G,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACE0B,QAAQ,OACRb,OAAQ,CAACtF,KAAKX,IAAL+G,MAAApG,KAAInD,OAAAqJ,EAAA,EAAArJ,CAAQmJ,IAAkBhG,KAAKV,IAAL8G,MAAApG,KAAInD,OAAAqJ,EAAA,EAAArJ,CAAQmJ,KACnDd,cA/BU,SAACxF,GAAD,QAAiBA,EAAE6E,YAAY,IAAIC,kBAgC7CW,KAAM,CAAEC,KAAMlN,EAAMK,QAAQC,KAAKC,WACjC4M,OAAQnN,EAAMK,QAAQC,KAAKC,YAI7BqB,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACE0B,QAAQ,QAKRE,YAAY,QACZlB,KAAM,CAAEC,KAAMlN,EAAMK,QAAQC,KAAKC,WACjC4M,OAAQnN,EAAMK,QAAQC,KAAKC,YAG7BqB,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAASH,UAAW,SAAAjH,GAAK,OAAIyE,OAAOzE,MACpCvD,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEc,mBAAmB,EACnBY,QAAQ,OACRX,KAAK,WACLP,QAzEgB,sBA0EhBI,OAAQnN,EAAMK,QAAQS,QAAQC,KAC9BmM,KAAMlN,EAAMK,QAAQS,QAAQC,OAI9Ba,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CACEc,mBAAmB,EACnBY,QAAQ,QACRX,KAAK,WACLP,QAlFiB,+BAmFjBI,OAAQnN,EAAMK,QAAQE,UAAUQ,KAChCmM,KAAMlN,EAAMK,QAAQE,UAAUQ,OAShCa,EAAAC,EAAAC,cAACyK,EAAA,EAAD,CAAQH,UA9Ed,SAAkCjH,GAChC,OAAOvD,EAAAC,EAAAC,cAAA,QAAM4L,MAAO,CAAEtN,MAAOJ,EAAMK,QAAQC,KAAKC,YAAc4E,oCCxC5DrF,EAAYC,YAAW,SAAAC,GAAK,MAAK,CACrC4I,UAAW,CACT3H,QAAS,OACT4B,WAAY,MACZrB,SAAU,SACV4M,OAAQ,UACRC,WAAY,qBACZC,QAAS,GACTC,UAAW,CACTD,QAAS,MAGbE,WAAY,CACVC,QAASzO,EAAMS,QAAQ,IAEzBiO,MAAO,CACLhM,gBAAiB,cAIN,SAASiM,EAATrJ,GAAgD,IAAvBhF,EAAuBgF,EAAvBhF,KAChCqB,EAAU7B,IAD6C8O,EAE7BC,IAAMnJ,SAAS,MAFcoJ,EAAAnK,OAAAiB,EAAA,EAAAjB,CAAAiK,EAAA,GAEtDG,EAFsDD,EAAA,GAE5CE,EAF4CF,EAAA,GAY7D,IAAMG,EAAOC,QAAQH,GACfhG,EAAKkG,EAAO,sBAAmBzG,EAErC,OACE5G,EAAAC,EAAAC,cAAA,OAAKE,UAAWL,EAAQiH,WACtBhH,EAAAC,EAAAC,cAACqN,EAAAtN,EAAD,CAAUuN,QAbd,SAAqBlG,GACnB8F,EAAY9F,EAAEmG,kBAcZzN,EAAAC,EAAAC,cAACwN,EAAA,EAAD,CACEC,WAAY,CACVvN,UAAWL,EAAQ+M,OAErB3F,GAAIA,EACJkG,KAAMA,EACNF,SAAUA,EACVS,QAlBN,WACER,EAAY,OAkBRS,aAAc,CACZC,SAAU,SACVC,WAAY,UAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,WAGd/N,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYH,UAAWL,EAAQ6M,YAAalO,kBCtC9CR,UAAYC,YAAW,SAACC,GAAD,OAC3BC,YAAa,CACX4P,cAAe,CACbjM,2BAA4B,CAC1BC,cAAe7D,EAAMS,QAAQ,IAE/BuD,UAAW,CACTA,UAAW,CACT8L,WAAY,iBAGhBjM,cAAe7D,EAAMS,QAAQ,IAE/BiO,MAAO,CACLpN,MAAO,OACPkB,OAAQ,OACRuN,UAAW,IACXrN,gBAAiB,WAEnBsN,IAAK,CACHvB,QAASzO,EAAMS,QAAQ,EAAG,GAC1BsP,UAAW,KAEbE,UAAW,CACTxB,QAASzO,EAAMS,QAAQ,EAAG,IAE5ByP,UAAW,CACTzB,QAASzO,EAAMS,QAAQ,EAAG,GAC1B+B,OAAQxC,EAAMS,QA9BC,IA+BfQ,QAAS,OACTC,WAAY,SACZ4C,aAAc,qBAEhBqM,SAAU,CACR7O,MAAO,OACPkB,OAAQ,OACRuN,UAAW,IACXK,UAAW,IACX3B,QAASzO,EAAMS,QAAQ,EAAG,GAE1ByD,aAAc,MACdmM,YAAa,OAEfC,OAAQ,CACN5N,gBAAiB,UACjBtC,MAAO,UACPmQ,UAAW,SACX9B,QAASzO,EAAMS,QAAQ,EAAG,EAAG,IAC7BW,cAAepB,EAAMS,QAlDN,KAoDjB+P,OAAQ,CACNC,WAAY,4CACZrQ,MAAO,+CCzEPJ,GAAQ0Q,aAAe,CAC3BrQ,QAAS,CACPiN,KAAM,OACNxM,QAAS,CACPC,KAAM,WAERR,UAAW,CACTQ,KAAM,WAER4P,MAAO,CACL5P,KAAM6P,KAAIC,MAEZJ,WAAY,CACVK,QAAS,OACTpC,MAAO,WAETpO,KAAM,CACJQ,QAAS,OACTP,UAAW,YAGfiO,WAAY,CACVuC,GAAI,CACFtP,WAAY,QAKlBuP,QAAQC,IAAIjR,IAEGA,UC3BfkR,IAASC,OACPvP,EAAAC,EAAAC,cAACsP,EAAA,EAAD,CAAepR,MAAOA,IAEpB4B,EAAAC,EAAAC,cAACuP,EAAA,EAAD,MACAzP,EAAAC,EAAAC,cFuEW,WAAe,IAAA2D,EACUC,mBAAS,CAC7CG,GAAI,IACJI,MAAO,IACPI,GAAI,GACJI,QAAS,EACTI,KAAM,MANoBlB,EAAAhB,OAAAiB,EAAA,EAAAjB,CAAAc,EAAA,GACrBF,EADqBI,EAAA,GACRH,EADQG,EAAA,GASpBE,EAAiCN,EAAjCM,GAAII,EAA6BV,EAA7BU,MAAOI,EAAsBd,EAAtBc,GAAII,EAAkBlB,EAAlBkB,QAASI,EAAStB,EAATsB,KAM1ByK,EAAyBC,kBAC7B,kBAAMC,mBAAShM,EAAgB,MAC/B,IAII+F,EAAI9E,GAAW,EAAIR,GACnBuF,GAAM,EAAIvF,EAAQ,KAAOJ,EACzB4F,EAAK5F,EAAKQ,EACVoL,EAAK3J,KAAA8D,IAAAH,EAAMF,GAAIC,EAxBOzF,EA0BkBL,mBAAS,CAAC,IA1B5BM,EAAArB,OAAAiB,EAAA,EAAAjB,CAAAoB,EAAA,GA0BrB+H,EA1BqB9H,EAAA,GA0BJ0L,EA1BI1L,EAAA,GAAAG,EA2B8BT,mBAAS,CAAC,IA3BxCU,EAAAzB,OAAAiB,EAAA,EAAAjB,CAAAwB,EAAA,GA2BrB4H,EA3BqB3H,EAAA,GA2BEuL,EA3BFvL,EAAA,GAAAG,EA4BYb,mBAAS8F,GA5BrBhF,EAAA7B,OAAAiB,EAAA,EAAAjB,CAAA4B,EAAA,GA4BrBqL,EA5BqBpL,EAAA,GA4BPqL,EA5BOrL,EAAA,GAAAG,EA6BcjB,mBAAS,GA7BvBkB,EAAAjC,OAAAiB,EAAA,EAAAjB,CAAAgC,EAAA,GA6BrBmL,EA7BqBlL,EAAA,GA6BNmL,EA7BMnL,EAAA,GAAAoL,EA8BUtM,mBAAS,GA9BnBuM,EAAAtN,OAAAiB,EAAA,EAAAjB,CAAAqN,EAAA,GA8BrBE,GA9BqBD,EAAA,GA8BRE,GA9BQF,EAAA,GAAAG,GA+BR1M,mBAAS,KAAtB2M,GA/BqB1N,OAAAiB,EAAA,EAAAjB,CAAAyN,GAAA,MAAAE,GAiCoB5M,oBAAS,GAjC7B6M,GAAA5N,OAAAiB,EAAA,EAAAjB,CAAA2N,GAAA,GAiCrBE,GAjCqBD,GAAA,GAiCHE,GAjCGF,GAAA,GAAAG,GAkCsBhN,oBAAS,GAlC/BiN,GAAAhO,OAAAiB,EAAA,EAAAjB,CAAA+N,GAAA,GAkCrBE,GAlCqBD,GAAA,GAkCFE,GAlCEF,GAAA,YAAAG,KAAA,OAAAA,GAAAnO,OAAAoO,EAAA,EAAApO,CAAAqO,EAAAnR,EAAAoR,KAsC5B,SAAAC,IAAA,OAAAF,EAAAnR,EAAAsR,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAWEb,IAAoB,GAEpBV,EAAiB,GACjBL,EAAmB,CAAC,IACpBC,EAAyB,CAAC,IAC1BQ,GAAe,GAhBjBiB,EAAAE,KAAA,EAGQrI,EAAM,GAHd,OAMEwH,IAAoB,GANtB,wBAAAW,EAAAG,SAAAL,OAtC4BhF,MAAAsF,KAAAlL,WAyD5BmL,oBAAU,WACR,IAAIC,GAAwB,EADd,SAAAC,IAAA,OAAAA,EAAAhP,OAAAoO,EAAA,EAAApO,CAAAqO,EAAAnR,EAAAoR,KAEd,SAAAW,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAlJ,EAAAmJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAArC,EAAAnR,EAAAsR,KAAA,SAAAmC,GAAA,cAAAA,EAAAjC,KAAAiC,EAAAhC,MAAA,OAaE,IAZMO,EAAgB,CAACrI,GACjBsI,EAAgB,CAACrI,GACjBsI,EAAgB,CAACvI,EAAKC,GACtBuI,EAAmB,CAAC,GACpBC,EAAuB,GAGvBC,EAAW,IACXC,EAAiB,EAGjBC,EAAqB,GAClBC,EAAI,EAAGA,EAAIH,EAAUG,IACtBC,EAAO,EAAI,EAAIxM,KAAKyN,SACpBhB,EAAMzM,KAAKyM,IAAgBF,EAAIH,EAAf,KAChBM,EAAY1M,KAAKyM,IAAKzM,KAAK0N,GAAK,GAAMnB,EAAIH,IAC1CO,EAAS,IAAMH,EAAO,IAAMC,EAAM,IAAMC,EAC9CJ,EAAS7J,KAAKkK,GAIVC,EAAa9J,EAAOwJ,GACpBO,EAAsBP,EAASlM,IACnC,SAACuM,GAAD,OAAqBpC,GAAYoC,EAAUC,IAG7C7B,IAAqB,GACZwB,EAAI,EA5Bf,aA4BkBA,EAAIH,GA5BtB,CAAAoB,EAAAhC,KAAA,YA6BUmB,EAASE,EAAoBN,GAG7B1I,EAAIhB,EAAQkJ,GACZiB,EAAInK,EAAQmJ,GACZiB,EAAIpK,EAAQoJ,GAEZiB,EAASrJ,EAAI8I,EACbQ,EAASnN,KAAA8D,IAAC6F,GAAM9F,EAAI8I,GAAa,EAAIlJ,GAAKuJ,EAC1CI,EAASJ,EAAIG,EAEnBpB,EAAItJ,KAAKyK,GACTlB,EAAIvJ,KAAK2K,GACTnB,EAAIxJ,KAAKyK,EAASE,GAEdT,EAAS,GACXT,EAAOzJ,KAAKI,EAAQqJ,GAAUS,EAAS5N,GACvCkL,EAAiB,SAAAhH,GAAC,OAAIA,EAAI,KAE1BiJ,EAAOzJ,KAAKI,EAAQqJ,IAGhBmB,EAASxK,EAAQoJ,GAEjBqB,EAAYL,EACZM,EAAWvN,KAAKkD,IAAImK,EAASC,GAAaA,EAAY,EAC5DnB,EAAW1J,KAAK8K,GAGX7C,IAAqBkB,EA1D9B,CAAA4B,EAAAhC,KAAA,gBAAAgC,EAAAG,OAAA,uBA4DQpB,EAAIF,IAAmB,EA5D/B,CAAAmB,EAAAhC,KAAA,gBA6DM5B,EAAmBqC,GACnBpC,EAAyBqC,GACzB7B,GAAevH,EAAOqJ,IACtBpC,EAAgBmD,GAhEtBM,EAAAhC,KAAA,GAmEYrI,EAAM,GAnElB,QA4BgCoJ,IA5BhCiB,EAAAhC,KAAA,iBAsEET,IAAqB,GAtEvB,yBAAAyC,EAAA/B,SAAAK,OAFc1F,MAAAsF,KAAAlL,WA6Ed,OAFIkK,IA3EU,WAAAmB,EAAAzF,MAAAsF,KAAAlL,WA2EQoN,GAEf,WACLhC,GAAwB,IAEzB,CAAClB,KAEJ,IAAM5E,GAAe,CACnB,CACE3G,MAAK,iCAAAQ,OAAmC4K,GAAnC,SACLlN,QAAS,IAAM+M,IAAaxK,QAAQ,GAAK,KAE3C,CACET,MAAK,yCAAAQ,OAA2CqK,EAA3C,SACL3M,QACIwF,EAAQoD,GAAuB1B,YAAY,IAAIC,iBACjD,QAEJ,CACErF,MAAK,gBACL9B,QAASyM,EAAavF,YAAY,IAAIC,iBAAmB,SAIvD3K,GAAU7B,IAChB,OACE8B,EAAAC,EAAAC,cAAAF,EAAAC,EAAAE,SAAA,KACEH,EAAAC,EAAAC,cAAA,UAAQE,UAAWL,GAAQ2O,QACzB1O,EAAAC,EAAAC,cAAC6T,EAAA,EAAD,CAAWC,OAAK,GACdhU,EAAAC,EAAAC,cAACJ,EAAD,QAIJE,EAAAC,EAAAC,cAAC6T,EAAA,EAAD,CAAWC,OAAK,EAAC5T,UAAWL,GAAQkO,eAClCjO,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAME,WAAS,EAACnI,QAAS,GACvBmB,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,GAAI+M,GAAI,GAAIC,GAAI,EAAGC,GAAI,GACpCnU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAOhU,UAAWL,GAAQ+M,OACxB9M,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQuO,WACtBtO,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYC,QAAQ,MAApB,gBACAR,EAAAC,EAAAC,cAAC6M,EAAD,CACErO,KACEsB,EAAAC,EAAAC,cAAA,uDAC0CF,EAAAC,EAAAC,cAAA,WAD1C,8BAE6BF,EAAAC,EAAAC,cAAA,WAF7B,sCAGqCF,EAAAC,EAAAC,cAAA,WAHrC,oCAImCF,EAAAC,EAAAC,cAAA,WAJnC,8BAK6BF,EAAAC,EAAAC,cAAA,WAL7B,iCAYNF,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQqO,KACtBpO,EAAAC,EAAAC,cAACuD,EAAD,CAAaG,eAAgB8L,OAKnC1P,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,GAAI+M,GAAI,GAAIC,GAAI,EAAGC,GAAI,GACpCnU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAOhU,UAAWL,GAAQ+M,OACxB9M,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQuO,WACtBtO,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYC,QAAQ,MAApB,WACAR,EAAAC,EAAAC,cAAC6M,EAAD,CACErO,KAAMsB,EAAAC,EAAAC,cAAA,qDAIVF,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQwO,UACtBvO,EAAAC,EAAAC,cAACoU,EAAD,CACEzP,QAASA,EACTR,MAAOA,EACPJ,GAAIA,EACJQ,GAAIA,QAOdzE,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAME,WAAS,EAACnI,QAAS,GACvBmB,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,GAAIgN,GAAI,IACrBlU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,KACEpU,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQuO,WACtBtO,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CACEE,WAAS,EACTuN,UAAU,MACVC,QAAQ,SACRlV,WAAW,UAEXU,EAAAC,EAAAC,cAACuU,EAAA,EAAD,CACEjU,QAAQ,YACRJ,UAAWL,GAAQ6O,OACnBpB,QAjOU,kBAAA0D,GAAA5E,MAAAsF,KAAAlL,YAkOVgO,SAAU1D,IAJZ,uBAcTJ,IACC5Q,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAME,WAAS,EAACnI,QAAS,GACvBmB,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,GAAI+M,GAAI,GAAIC,GAAI,EAAGC,GAAI,GACpCnU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAOhU,UAAWL,GAAQ+M,OACxB9M,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQuO,WACtBtO,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYC,QAAQ,MAApB,cACAR,EAAAC,EAAAC,cAAC6M,EAAD,CACErO,KAAMsB,EAAAC,EAAAC,cAAA,qDAIVF,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQwO,UACtBvO,EAAAC,EAAAC,cAACyU,EAAD,CACEzI,gBAAiBA,EACjBC,sBAAuBA,EACvB1H,GAAIA,OAMZzE,EAAAC,EAAAC,cAAC4G,EAAA,EAAD,CAAMG,MAAI,EAACC,GAAI,GAAI+M,GAAI,GAAIC,GAAI,EAAGC,GAAI,GACpCnU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAOhU,UAAWL,GAAQ+M,OACxB9M,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQuO,WACtBtO,EAAAC,EAAAC,cAACK,EAAA,EAAD,CAAYC,QAAQ,MAApB,WACAR,EAAAC,EAAAC,cAAC6M,EAAD,CACErO,KAAMsB,EAAAC,EAAAC,cAAA,2DAIVF,EAAAC,EAAAC,cAACmU,EAAA,EAAD,CAAKjU,UAAWL,GAAQqO,KACtBpO,EAAAC,EAAAC,cAAC6L,EAAD,CAAcC,aAAcA,YElV1C,OAEF4I,SAASC,cAAc","file":"static/js/main.cd9f3e84.chunk.js","sourcesContent":["import React from \"react\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Link from \"@material-ui/core/Link\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n title: {\n // color: theme.palette.text.secondary,\n },\n subtitle: {\n color: theme.palette.text.secondary,\n margin: theme.spacing(3, 0, 0)\n },\n lightBulb: {\n verticalAlign: \"middle\",\n marginRight: theme.spacing(1)\n },\n link: {\n color: theme.palette.primary.main\n },\n logoContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: theme.spacing(4)\n },\n logo: {\n width: \"25px\",\n marginRight: \"4px\"\n },\n logoText: {\n display: \"inline\",\n fontSize: \"1.1rem\",\n fontWeight: 500\n }\n })\n);\n\nexport default function Header() {\n const classes = useStyles();\n return (\n <>\n
\n \"logo\"\n Commons Stack\n
\n\n \n Augmented Token Bonding Curve Design\n \n\n \n Experiment and test augmented token bonding curves\n \n \n );\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport {\n createStyles,\n makeStyles,\n withStyles,\n Theme\n} from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport NumberFormat from \"react-number-format\";\nimport { throttle } from \"lodash\";\n\nconst PrettoSlider = withStyles({\n root: {\n height: 8\n },\n thumb: {\n height: 24,\n width: 24,\n backgroundColor: \"#fff\",\n border: \"2px solid currentColor\",\n marginTop: -8,\n marginLeft: -12,\n \"&:focus,&:hover,&$active\": {\n boxShadow: \"inherit\"\n }\n },\n active: {},\n valueLabel: {\n left: \"calc(-50% + 4px)\"\n },\n track: {\n height: 8,\n borderRadius: 4\n },\n rail: {\n height: 8,\n borderRadius: 4\n },\n markLabel: {\n top: 30\n }\n})(Slider);\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(6, 0, 3)\n },\n lightBulb: {\n verticalAlign: \"middle\",\n marginRight: theme.spacing(1)\n },\n leftContainer: {\n color: theme.palette.text.secondary\n },\n centerContainer: {\n // color: blackColor\n },\n listBoxContainer: {\n \"& > div:not(:last-child)\": {\n paddingBottom: \"12px\",\n marginBottom: \"12px\",\n borderBottom: \"1px solid #313d47\"\n }\n },\n listBox: {\n \"& > div\": {\n display: \"flex\",\n alignItems: \"center\",\n \"& p\": {\n marginBottom: 0\n }\n },\n \"& > div:not(:last-child)\": {\n paddingRight: \"12px\"\n }\n },\n slider: {\n color: theme.palette.primary.main\n }\n })\n);\n\nfunction NumberFormatCustom(props: any) {\n const { inputRef, onChange, prefix, suffix, ...other } = props;\n\n return (\n {\n onChange({ target: { value: values.value } });\n }}\n thousandSeparator\n prefix={prefix}\n suffix={suffix}\n />\n );\n}\n\nexport default function InputParams({\n curveParams,\n setCurveParams\n}: {\n curveParams?: {\n d0: number;\n theta: number;\n p0: number;\n returnF: number;\n wFee: number;\n };\n setCurveParams(newCurveParams: any): void;\n}) {\n const [d0, setD0] = useState(1e6); // Initial raise, d0 (DAI)\n const [theta, setTheta] = useState(0.35); // fraction allocated to reserve (.)\n const [p0, setP0] = useState(0.1); // Hatch sale Price p0 (DAI / token)\n const [returnF, setReturnF] = useState(3); // Return factor (.)\n const [wFee, setWFee] = useState(0.05); // friction coefficient (.)\n\n function setParentCurveParams() {\n setCurveParams({ d0, theta, p0, returnF, wFee });\n }\n\n const inputFields: {\n label: string;\n value: number;\n setter(newValue: any): void;\n min: number;\n max: number;\n step: number;\n unit?: string;\n prefix?: string;\n suffix?: string;\n toText?(value: number): string;\n toNum?(value: string): number;\n format(value: number): string;\n }[] = [\n {\n label: \"Initial raise\",\n value: d0,\n setter: setD0,\n min: 0.1e6,\n max: 10e6,\n step: 0.1e6,\n unit: \"$M\",\n prefix: \"$\",\n suffix: \"M\",\n format: (n: number) => `$${+(n * 1e-6).toFixed(1)}M`,\n toText: (n: number) => String(+(n * 1e-6).toFixed(1)),\n toNum: (n: string) => Math.floor(parseFloat(n) * 1e6)\n },\n {\n label: \"Allocation to project\",\n value: theta,\n setter: setTheta,\n min: 0,\n max: 0.9,\n step: 0.01,\n unit: \"%\",\n suffix: \"%\",\n format: (n: number) => `${Math.round(100 * n)}%`,\n toText: (n: number) => String(+(n * 1e2).toFixed(0)),\n toNum: (n: string) => parseFloat(n) * 1e-2\n },\n {\n label: \"Initial token price\",\n value: p0,\n setter: setP0,\n min: 0.01,\n max: 1,\n step: 0.01,\n unit: \"$\",\n prefix: \"$\",\n toText: (n: number) => String(+n.toFixed(2)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `$${n}`\n },\n {\n label: \"Return factor\",\n value: returnF,\n setter: setReturnF,\n min: 1,\n max: 10,\n step: 0.1,\n unit: \"x\",\n suffix: \"x\",\n toText: (n: number) => String(+n.toFixed(1)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `${n}x`\n },\n {\n label: \"Withdrawl fee\",\n value: wFee,\n setter: setWFee,\n min: 0,\n max: 0.1,\n step: 0.001,\n unit: \"%\",\n suffix: \"%\",\n format: (n: number) => `${+(100 * n).toFixed(1)}%`,\n toText: (n: number) => String(+(n * 1e2).toFixed(1)),\n toNum: (n: string) => parseFloat(n) * 1e-2\n }\n ];\n\n const classes = useStyles();\n\n return (\n
\n {inputFields.map(\n ({\n label,\n value,\n setter,\n min,\n max,\n step,\n prefix,\n suffix,\n format,\n toText,\n toNum\n }) => {\n function sanitizeInput(num: number = 0) {\n if (isNaN(num)) num = 0;\n if (num > max) num = max;\n else if (num < min) num = min;\n setter(num);\n }\n\n return (\n \n \n \n {label}\n \n \n\n \n {/* {display(value)} */}\n {\n sanitizeInput(\n toNum ? toNum(e.target.value) : parseFloat(e.target.value)\n );\n setParentCurveParams();\n }}\n InputProps={{\n inputComponent: NumberFormatCustom,\n disableUnderline: true,\n inputProps: {\n prefix,\n suffix\n }\n }}\n value={toText ? toText(value) : value}\n />\n \n\n \n sanitizeInput(Number(newValue))}\n onChangeCommitted={setParentCurveParams}\n value={value}\n min={min}\n max={max}\n step={step}\n valueLabelFormat={value => format(value).replace(\"$\", \"\")}\n // marks={[\n // { value: 0, label: \"0%\" },\n // { value: 50, label: \"50%\" },\n // { value: 100, label: \"100%\" }\n // ]}\n />\n \n \n );\n }\n )}\n
\n );\n}\n","/**\n * Returns an equally spaced array of numbers `from`, `to` with `steps`.\n */\nexport function linspace({\n from = 0,\n to,\n steps\n}: {\n from?: number;\n to: number;\n steps: number;\n}) {\n const arr = [];\n for (let x = from; x <= to; x += (to - from) / steps) arr.push(x);\n return arr;\n}\n\n/**\n * Returns a uniform distribution of `num` ticks\n */\nexport function getLinspaceTicks(data: number[], num: number) {\n const desiredPoints = [];\n const step = (data[data.length - 1] - data[0]) / num;\n for (let x = data[0]; x < data[data.length - 1]; x += step) {\n desiredPoints.push(x);\n }\n if (desiredPoints.length < num + 1) desiredPoints.push(data[data.length - 1]);\n\n return desiredPoints;\n}\n\n/**\n * Returns the last element of an array\n */\nexport function getLast(a: number[]) {\n return a[a.length - 1];\n}\n\n/**\n * Returns the average of an array\n */\nexport function getAvg(a: number[]) {\n return a.reduce((t, c) => t + Math.abs(c), 0) / a.length;\n}\n\n/**\n * Waits `ms` miliseconds and resolves\n */\nexport function pause(ms: number) {\n return new Promise(r => setTimeout(r, ms));\n}\n","import React from \"react\";\nimport {\n AreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Legend,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip\n} from \"recharts\";\nimport { getLinspaceTicks } from \"./utils\";\nimport { useTheme } from \"@material-ui/styles\";\n\nfunction SupplyVsDemandChart({\n returnF,\n theta,\n d0,\n p0\n}: {\n returnF: number;\n theta: number;\n d0: number;\n p0: number;\n}) {\n // d0 - Initial raise, d0 (DAI)\n // theta - fraction allocated to reserve (.)\n // p0 - Hatch sale Price p0 (DAI / token)\n // returnF - Return factor (.)\n // wFee - friction coefficient (.)\n\n // Hatch parameters\n const k = returnF / (1 - theta); // Invariant power kappa (.)\n const R0 = (1 - theta / 100) * d0; // Initial reserve (DAI)\n const S0 = d0 / p0; // initial supply of tokens (token)\n const S_of_R = (R: number) => S0 * (R / R0) ** (1 / k);\n\n // Function setup\n const f = S_of_R;\n const from = 0;\n const to = 4 * R0;\n const steps = 100;\n const step = (to - from) / steps;\n\n /**\n * Prettify the result converting 1000000 to 1M\n */\n const biggest = Math.max(to, f(to));\n const [scaling, unit] =\n // Billion\n biggest > 0.5e9\n ? [1e9, \"B\"]\n : // Million\n biggest > 0.5e6\n ? [1e6, \"M\"]\n : // 1 thousand\n biggest > 0.5e3\n ? [1e3, \"K\"]\n : // No scale\n [1, \"\"];\n\n const keyHorizontal = \"x\";\n const keyVertical = \"Supply (tokens) / Reserve (DAI)\";\n\n const data = [];\n for (let x = from; x <= to; x += step) {\n data.push({\n [keyHorizontal]: x,\n [keyVertical]: f(x)\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n\n const formatter = (n: number) =>\n (+(n / scaling).toPrecision(2)).toLocaleString();\n\n function renderColorfulLegendText(value: string) {\n return {value};\n }\n\n function ReferenceLabel(props: any) {\n const { textAnchor, viewBox } = props;\n return (\n \n Initial value\n \n );\n }\n\n return (\n \n \n \n d[keyHorizontal]), 4)}\n dataKey={keyHorizontal}\n tickFormatter={formatter}\n unit={unit}\n tick={{ fill: theme.palette.text.secondary }}\n stroke={theme.palette.text.secondary}\n />\n d[keyVertical]), 3)}\n tickFormatter={formatter}\n unit={unit}\n tick={{ fill: theme.palette.text.secondary }}\n domain={[0, f(to)]}\n stroke={theme.palette.text.secondary}\n />\n formatter(Number(value))} />\n \n }\n />\n \n \n \n );\n}\n\nexport default SupplyVsDemandChart;\n","import React from \"react\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Grid from \"@material-ui/core/Grid\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(6, 0, 3)\n },\n lightBulb: {\n verticalAlign: \"middle\",\n marginRight: theme.spacing(1)\n },\n leftContainer: {\n color: theme.palette.text.secondary\n },\n centerContainer: {\n // color: blackColor\n },\n listBoxContainer: {\n \"& > div:not(:last-child)\": {\n marginBottom: \"12px\",\n borderBottom: \"1px solid #313d47\"\n }\n },\n listBox: {\n paddingBottom: \"12px\",\n \"& > div\": {\n display: \"flex\",\n alignItems: \"center\",\n \"& p\": {\n marginBottom: 0\n }\n },\n \"& > div:not(:last-child)\": {\n paddingRight: \"12px\"\n }\n }\n })\n);\n\nexport default function ResultParams({\n resultFields\n}: {\n resultFields: {\n label: string;\n value: number | string;\n }[];\n}) {\n const classes = useStyles();\n\n return (\n
\n {resultFields.map(({ label, value }) => (\n \n \n \n {label}\n \n \n\n \n {value}\n \n \n ))}\n
\n );\n}\n","import React from \"react\";\nimport {\n AreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Legend,\n ResponsiveContainer,\n Tooltip\n} from \"recharts\";\nimport { useTheme } from \"@material-ui/styles\";\nimport { linspace } from \"./utils\";\n\nfunction PriceSimulationChart({\n priceTimeseries,\n withdrawFeeTimeseries,\n p0\n}: {\n priceTimeseries: number[];\n withdrawFeeTimeseries: number[];\n p0: number;\n}) {\n // d0 - Initial raise, d0 (DAI)\n // theta - fraction allocated to reserve (.)\n // p0 - Hatch sale Price p0 (DAI / token)\n // returnF - Return factor (.)\n // wFee - friction coefficient (.)\n\n const keyHorizontal = \"x\";\n const keyVerticalLeft = \"Price (DAI / token)\";\n const keyVerticalRight = \"Collected withdraw fee (DAI)\";\n\n const data = [];\n for (let t = 0; t < priceTimeseries.length; t++) {\n data.push({\n [keyHorizontal]: t,\n [keyVerticalLeft]: priceTimeseries[t] || 0,\n [keyVerticalRight]: withdrawFeeTimeseries[t] || 0\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n\n function renderColorfulLegendText(value: string) {\n return {value};\n }\n\n const formatter = (n: number) => (+n.toPrecision(3)).toLocaleString();\n\n return (\n \n \n \n \n \n\n {/* Capital collected from withdraw fees - AXIS */}\n \n\n Number(value)} />\n \n\n {/* Capital collected from withdraw fees - AREA */}\n \n\n {/* }\n /> */}\n \n \n \n );\n}\n\nexport default PriceSimulationChart;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Popover from \"@material-ui/core/Popover\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Fab from \"@material-ui/core/Fab\";\nimport HelpIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: \"flex\",\n marginLeft: \"6px\",\n fontSize: \"0.9rem\",\n cursor: \"pointer\",\n transition: \"opacity ease 150ms\",\n opacity: 0.2,\n \"&:hover\": {\n opacity: 0.85\n }\n },\n typography: {\n padding: theme.spacing(2)\n },\n paper: {\n backgroundColor: \"#384b59\"\n }\n}));\n\nexport default function SimplePopover({ text }: { text: any }) {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n function handleClick(e: any) {\n setAnchorEl(e.currentTarget);\n }\n\n function handleClose() {\n setAnchorEl(null);\n }\n\n const open = Boolean(anchorEl);\n const id = open ? \"simple-popover\" : undefined;\n\n return (\n
\n \n\n \n {text}\n \n
\n );\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\n// Material UI\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport Fade from \"@material-ui/core/Fade\";\n// Components\nimport Header from \"./Header\";\nimport InputParams from \"./InputParams\";\nimport SupplyVsDemandChart from \"./SupplyVsDemandChart\";\nimport ResultParams from \"./ResultParams\";\nimport PriceSimulationChart from \"./PriceSimulationChart\";\nimport HelpText from \"./HelpText\";\n// Utils\nimport { getLast, getAvg, pause } from \"./utils\";\nimport { throttle } from \"lodash\";\n// General styles\nimport \"./app.css\";\n\nconst headerOffset = 10;\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n mainContainer: {\n \"& > div:not(:last-child)\": {\n paddingBottom: theme.spacing(3)\n },\n \"& > div\": {\n \"& > div\": {\n paddingTop: \"0 !important\"\n }\n },\n paddingBottom: theme.spacing(9)\n },\n paper: {\n width: \"100%\",\n height: \"100%\",\n minHeight: 310,\n backgroundColor: \"#293640\"\n },\n box: {\n padding: theme.spacing(3, 3),\n minHeight: 310\n },\n boxButton: {\n padding: theme.spacing(3, 3)\n },\n boxHeader: {\n padding: theme.spacing(3, 3),\n height: theme.spacing(headerOffset),\n display: \"flex\",\n alignItems: \"center\",\n borderBottom: \"1px solid #313d47\"\n },\n boxChart: {\n width: \"100%\",\n height: \"100%\",\n minHeight: 310,\n maxHeight: 350,\n padding: theme.spacing(3, 3),\n // Correct the chart excessive margins\n paddingRight: \"5px\",\n paddingLeft: \"5px\"\n },\n header: {\n backgroundColor: \"#0b1216\",\n color: \"#f8f8f8\",\n textAlign: \"center\",\n padding: theme.spacing(3, 0, 6 + headerOffset),\n marginBottom: -theme.spacing(headerOffset)\n },\n button: {\n background: \"linear-gradient(290deg, #2ad179, #4ab47c)\",\n color: \"white\"\n }\n })\n);\n\nexport default function App() {\n const [curveParams, setCurveParams] = useState({\n d0: 1e6, // Initial raise, d0 (DAI)\n theta: 0.35, // fraction allocated to reserve (.)\n p0: 0.1, // Hatch sale Price p0 (DAI / token)\n returnF: 3, // Return factor (.)\n wFee: 0.05 // friction coefficient (.)\n });\n\n const { d0, theta, p0, returnF, wFee } = curveParams;\n\n /**\n * Throttle the curve update to prevent the expensive chart\n * to re-render too often\n */\n const setCurveParamsThrottle = useMemo(\n () => throttle(setCurveParams, 1000),\n []\n );\n\n // Simulation results\n const k = returnF / (1 - theta); // Invariant power kappa (.)\n const R0 = (1 - theta / 100) * d0; // Initial reserve (DAI)\n const S0 = d0 / p0; // initial supply of tokens (token)\n const V0 = S0 ** k / R0; // invariant coef\n\n const [priceTimeseries, setPriceTimeseries] = useState([0]);\n const [withdrawFeeTimeseries, setWithdrawFeeTimeseries] = useState([0]);\n const [totalReserve, setTotalReserve] = useState(R0);\n const [withdrawCount, setWithdrawCount] = useState(0);\n const [avgSlippage, setAvgSlippage] = useState(0);\n const [avgTxSize] = useState(10000);\n // Simulation state variables\n const [simulationActive, setSimulationActive] = useState(false);\n const [simulationRunning, setSimulationRunning] = useState(false);\n\n // #### TEST: Immediate simulation\n\n async function startSimulation() {\n // If there's a simulation already active, clear it\n clearSimulation();\n await pause(0);\n\n // Start simulation by setting it to active\n setSimulationActive(true);\n }\n\n function clearSimulation() {\n // Stop simulation\n setSimulationActive(false);\n // Clear simulation variables\n setWithdrawCount(0);\n setPriceTimeseries([0]);\n setWithdrawFeeTimeseries([0]);\n setAvgSlippage(0);\n }\n\n useEffect(() => {\n let canContinueSimulation = true;\n async function simulateRandomDelta() {\n const R_t: number[] = [R0];\n const S_t: number[] = [S0];\n const p_t: number[] = [R0 / S0];\n const wFee_t: number[] = [0];\n const slippage_t: number[] = [];\n\n // Random walk\n const numSteps = 100;\n const updateEveryNth = 1;\n\n // Compute the random deltas\n const deltaR_t: number[] = [];\n for (let i = 0; i < numSteps; i++) {\n const rand = 1 - 2 * Math.random();\n const sin = Math.sin((1 / 20) * (i / numSteps));\n const ascending = Math.sin((Math.PI / 1) * (i / numSteps));\n const deltaR = 1e5 * rand + 1e5 * sin + 2e4 * ascending;\n deltaR_t.push(deltaR);\n }\n\n // Normalize random deltas with the average transaction size\n const deltaR_avg = getAvg(deltaR_t);\n const deltaR_t_normalized = deltaR_t.map(\n (deltaR: number) => (avgTxSize * deltaR) / deltaR_avg\n );\n\n setSimulationRunning(true);\n for (let i = 0; i < numSteps; i++) {\n const deltaR = deltaR_t_normalized[i];\n\n // Protect against too strong negative deltas\n const R = getLast(R_t);\n const S = getLast(S_t);\n const p = getLast(p_t);\n\n const R_next = R + deltaR;\n const deltaS = (V0 * (R + deltaR)) ** (1 / k) - S;\n const S_next = S + deltaS;\n\n R_t.push(R_next);\n S_t.push(S_next);\n p_t.push(R_next / S_next);\n // Consider withdraw fees on sales only\n if (deltaR < 0) {\n wFee_t.push(getLast(wFee_t) - deltaR * wFee);\n setWithdrawCount(c => c + 1);\n } else {\n wFee_t.push(getLast(wFee_t));\n }\n\n const p_next = getLast(p_t);\n // const realizedPrice = deltaR / deltaS;\n const spotPrice = p;\n const slippage = Math.abs(p_next - spotPrice) / spotPrice / 2;\n slippage_t.push(slippage);\n\n // Stop the simulation if it's no longer active\n if (!simulationActive || !canContinueSimulation) break;\n\n if (i % updateEveryNth === 0) {\n setPriceTimeseries(p_t);\n setWithdrawFeeTimeseries(wFee_t);\n setAvgSlippage(getAvg(slippage_t));\n setTotalReserve(R_next);\n\n // Make this run non-UI blocking\n await pause(5);\n }\n }\n setSimulationRunning(false);\n }\n\n if (simulationActive) simulateRandomDelta();\n // Return an \"unsubscribe\" function that halts the run\n return () => {\n canContinueSimulation = false;\n };\n }, [simulationActive]);\n\n const resultFields = [\n {\n label: `Average slippage (avg tx size ${avgTxSize} DAI)`,\n value: +(100 * avgSlippage).toFixed(3) + \"%\"\n },\n {\n label: `Capital collected from withdraw fees (${withdrawCount} txs)`,\n value:\n (+getLast(withdrawFeeTimeseries).toPrecision(3)).toLocaleString() +\n \" DAI\"\n },\n {\n label: `Total reserve`,\n value: (+totalReserve.toPrecision(3)).toLocaleString() + \" DAI\"\n }\n ];\n\n const classes = useStyles();\n return (\n <>\n
\n \n
\n \n
\n\n \n \n \n \n \n Curve Design\n \n Description of the different parameters
\n Initial raise: Lorem ipsum
\n Allocation to project: Lorem ipsum
\n Initial token price: Lorem ipsum
\n Return factor: Lorem ipsum
\n Withdrawl fee: Lorem ipsum\n \n }\n />\n
\n\n \n \n \n
\n
\n\n \n \n \n Preview\n Preview of the token bonding curve}\n />\n \n\n \n \n \n \n \n
\n\n \n \n \n \n \n \n Run simulation\n \n \n \n \n \n \n\n {simulationActive && (\n \n \n \n \n Simulation\n Some context about this simulation}\n />\n \n\n \n \n \n \n \n\n \n \n \n Results\n Explanation of what do this results mean}\n />\n \n\n \n \n \n \n \n \n )}\n
\n \n );\n}\n","import red from \"@material-ui/core/colors/red\";\nimport { createMuiTheme } from \"@material-ui/core/styles\";\n\n// A custom theme for this app\nconst theme = createMuiTheme({\n palette: {\n type: \"dark\",\n primary: {\n main: \"#2ecd79\"\n },\n secondary: {\n main: \"#116be0\"\n },\n error: {\n main: red.A400\n },\n background: {\n default: \"#fff\",\n paper: \"#293640\"\n },\n text: {\n primary: \"#fff\",\n secondary: \"#9aa3ad\"\n }\n },\n typography: {\n h6: {\n fontWeight: 400\n }\n }\n});\n\nconsole.log(theme);\n\nexport default theme;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { ThemeProvider } from '@material-ui/styles';\nimport App from './App';\nimport theme from './theme';\n\nReactDOM.render(\n \n {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}\n \n \n ,\n document.querySelector('#root'),\n);\n"],"sourceRoot":""} \ No newline at end of file