diff --git a/asset-manifest.json b/asset-manifest.json index b1499e7..1ff69ff 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,14 +1,14 @@ { "files": { "main.css": "/augmented-tbc-design/static/css/main.837772ec.chunk.css", - "main.js": "/augmented-tbc-design/static/js/main.a231de29.chunk.js", - "main.js.map": "/augmented-tbc-design/static/js/main.a231de29.chunk.js.map", + "main.js": "/augmented-tbc-design/static/js/main.d4e37a2e.chunk.js", + "main.js.map": "/augmented-tbc-design/static/js/main.d4e37a2e.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.0fdd9091.chunk.js": "/augmented-tbc-design/static/js/2.0fdd9091.chunk.js", "static/js/2.0fdd9091.chunk.js.map": "/augmented-tbc-design/static/js/2.0fdd9091.chunk.js.map", "index.html": "/augmented-tbc-design/index.html", - "precache-manifest.c5bfa49bcdc6fc609c076e042673467f.js": "/augmented-tbc-design/precache-manifest.c5bfa49bcdc6fc609c076e042673467f.js", + "precache-manifest.05f633914364a97576954fc0114896b9.js": "/augmented-tbc-design/precache-manifest.05f633914364a97576954fc0114896b9.js", "service-worker.js": "/augmented-tbc-design/service-worker.js", "static/css/main.837772ec.chunk.css.map": "/augmented-tbc-design/static/css/main.837772ec.chunk.css.map" } diff --git a/index.html b/index.html index 0651ca9..7eff5a9 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.c5bfa49bcdc6fc609c076e042673467f.js b/precache-manifest.05f633914364a97576954fc0114896b9.js similarity index 69% rename from precache-manifest.c5bfa49bcdc6fc609c076e042673467f.js rename to precache-manifest.05f633914364a97576954fc0114896b9.js index 309987b..11c1481 100644 --- a/precache-manifest.c5bfa49bcdc6fc609c076e042673467f.js +++ b/precache-manifest.05f633914364a97576954fc0114896b9.js @@ -1,10 +1,10 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "c23ee6043cd2cdb7c8dc9bdab95ec0a5", + "revision": "8bfbad76a11d15c29d63946be81cf166", "url": "/augmented-tbc-design/index.html" }, { - "revision": "380aba54ea5014f09126", + "revision": "0d280b2e41572c5f9579", "url": "/augmented-tbc-design/static/css/main.837772ec.chunk.css" }, { @@ -12,8 +12,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/augmented-tbc-design/static/js/2.0fdd9091.chunk.js" }, { - "revision": "380aba54ea5014f09126", - "url": "/augmented-tbc-design/static/js/main.a231de29.chunk.js" + "revision": "0d280b2e41572c5f9579", + "url": "/augmented-tbc-design/static/js/main.d4e37a2e.chunk.js" }, { "revision": "707b94664485cbbcc81b", diff --git a/service-worker.js b/service-worker.js index f75c6fd..4c293f1 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.c5bfa49bcdc6fc609c076e042673467f.js" + "/augmented-tbc-design/precache-manifest.05f633914364a97576954fc0114896b9.js" ); self.addEventListener('message', (event) => { diff --git a/static/js/main.a231de29.chunk.js b/static/js/main.a231de29.chunk.js deleted file mode 100644 index 8020b6b..0000000 --- a/static/js/main.a231de29.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{225:function(e,t,a){e.exports=a(421)},420:function(e,t,a){},421: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(462),l=a(461),s=a(65),m=a.n(s),u=a(118),d=a(14),p=a(422),f=a(467),h=a(460),g=a(423),b=a(464),x=a(459),v=a(458),E=a(466),y=a(457),k="https://medium.com/block-science/cadcad-filling-a-critical-gap-in-open-source-data-science-fcd0d3faa8ed",j=Object(p.a)(function(e){return Object(f.a)({title:{},subtitle:{color:e.palette.text.secondary,margin:e.spacing(3,0,0)},subsubtitle:{color:e.palette.text.secondary,opacity:.6},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 O(){var e=j();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(g.a,{className:e.logoText},"Commons Stack")),r.a.createElement(g.a,{className:e.title,variant:"h4"},"Augmented Token Bonding Curve Design"),r.a.createElement(g.a,{className:e.subtitle},"Experiment and test augmented token bonding curves"),r.a.createElement(g.a,{className:e.subsubtitle},"A narrative showcase of ",r.a.createElement(y.a,{href:k},"cadCAD"),"'s capabilities"))}var C=a(84),w=a(192),N=a(463),A=a(175),S=a.n(A),B=a(7),F=a(468),R=Object(B.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}})(F.a),M=Object(p.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},secondaryColor:{color:e.palette.secondary.light}})});function I(e){var t=e.inputRef,a=e.onChange,n=e.prefix,i=e.suffix,o=Object(w.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 T(e){var t=e.inputFields,a=e.onChangeCommited,n=M();return r.a.createElement("div",{className:n.listBoxContainer},t.map(function(e){var t=e.label,i=e.value,o=e.setter,c=e.min,l=e.max,s=e.step,m=e.prefix,u=e.suffix,d=e.secondaryColor,p=e.format,f=e.toText,h=e.toNum;function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;isNaN(e)&&(e=0),e>l?e=l:ee*k&&b(e*k)},min:.01,max:1,step:.01,toText:function(e){return String(+e.toFixed(2))},toNum:function(e){return parseFloat(e)},format:function(e){return"$".concat(e)}},{label:"Post-hatch price (DAI/token)",value:g,setter:b,min:u||.1,max:Number((k*u).toFixed(2)),step:.01,toText:function(e){return String(+e.toFixed(2))},toNum:function(e){return parseFloat(e)},format:function(e){return"$".concat(e)}},{label:"Exit tribute",value:E,setter:y,min:0,max:.1,step:.001,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)}}];return r.a.createElement(T,{inputFields:j,onChangeCommited:function(){a(function(e){return Object(C.a)({},e,{theta:c,p0:u,p1:g,wFee:E})})}})}function D(e){var t=e.curveParams,a=e.setCurveParams,i=Object(n.useState)(3e6),o=Object(d.a)(i,2),c=o[0],l=o[1];Object(n.useEffect)(function(){l(t.d0)},[t]);var s=[{label:"Initial raise (DAI)",value:c,setter:l,min:1e5,max:1e7,step:1e5,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))},secondaryColor:!0}];return r.a.createElement(T,{inputFields:s,onChangeCommited:function(){a(function(e){return Object(C.a)({},e,{d0:c})})}})}var V=a(23),H=a(15);function L(e){for(var t=e.from,a=void 0===t?0:t,n=e.to,r=e.steps,i=[],o=a;o<=n;o+=(n-a)/r)i.push(o);return i}function W(e,t){for(var a=[],n=(e[e.length-1]-e[0])/t,r=e[0];r1||r<0)&&(r=ne(e,t)),r*=t-e,r+=e}function re(e){var t=Math.floor(e.length/2),a=Object(q.a)(e).sort(function(e,t){return e-t});return e.length%2!==0?a[t]:(a[t-1]+a[t])/2}var ie=a(193),oe="x",ce="Supply (tokens) / Reserve (DAI)",le=Object(p.a)(function(e){return Object(f.a)({tooltip:{border:"1px solid #313d47",backgroundColor:"#384b59",padding:e.spacing(1),color:"#c7ccd2"}})});var se=function(e){for(var t=e.theta,a=G({d0:e.d0,theta:t,p0:e.p0,p1:e.p1}),n=a.k,i=a.R0,o=a.S0,c=a.V0,l=Math.round(i),s=function(e){return o*Math.pow(e/l,1/n)},m=4*l,u=Math.round((m-0)/100),p=Math.max(m,s(m)),f=p>5e8?[1e9,"B"]:p>5e5?[1e6,"M"]:p>500?[1e3,"K"]:[1,""],h=Object(d.a)(f,2),g=h[0],b=h[1],x=[],v=0;v<101;v++){var E,y=Math.round(0+u*v);x.push((E={},Object(V.a)(E,oe,y),Object(V.a)(E,ce,s(y)),E))}var k=Object(ie.a)(),j=le(),O=function(e){return(+(e/g).toPrecision(2)).toLocaleString()};return r.a.createElement(H.f,{debounce:1},r.a.createElement(H.b,{width:0,height:400,data:x,margin:{top:10,right:30,left:0,bottom:0}},r.a.createElement(H.c,{strokeDasharray:"3 3"}),r.a.createElement(H.h,{interval:24,dataKey:oe,tickFormatter:O,unit:b,tick:{fill:k.palette.text.secondary},stroke:k.palette.text.secondary}),r.a.createElement(H.i,{interval:"preserveStartEnd",ticks:W(x.map(function(e){return e[ce]}),3),tickFormatter:O,unit:b,tick:{fill:k.palette.text.secondary},domain:[0,s(m)],stroke:k.palette.text.secondary}),r.a.createElement(H.g,{content:r.a.createElement(function(e){var t=e.active,a=e.payload,i=e.label;if(t){var o=a[0].value,l=i,s=Y({R:l,V0:c,k:n}),m=[["Supply",O(o)+b,"tokens"],["Reserve",O(l)+b,"DAI"],["Price",s.toFixed(2),"DAI/token"]];return r.a.createElement("div",{className:j.tooltip},r.a.createElement("table",null,r.a.createElement("tbody",null,m.map(function(e){var t=Object(d.a)(e,3),a=t[0],n=t[1],i=t[2];return r.a.createElement("tr",{key:a},r.a.createElement("td",null,a),r.a.createElement("td",null,n),r.a.createElement("td",null,i))}))))}return null},null)}),r.a.createElement(H.a,{isAnimationActive:!1,type:"monotone",dataKey:ce,stroke:k.palette.primary.main,fill:k.palette.primary.main,fillOpacity:.3,strokeWidth:2}),r.a.createElement(H.e,{x:l,stroke:k.palette.primary.main,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(H.d,{formatter:function(e){return r.a.createElement("span",{style:{color:k.palette.text.secondary}},e)}})))},me=Object(p.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 ue(e){var t=e.resultFields,a=me();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(g.a,{id:t,gutterBottom:!0},t)),r.a.createElement(v.a,{item:!0,xs:4,className:a.centerContainer},r.a.createElement(g.a,{gutterBottom:!0},n)))}))}var de="x",pe="Price (DAI/token)",fe="Total exit tributes (DAI)",he="Floor price (DAI/token)",ge=Object(p.a)(function(e){return Object(f.a)({tooltip:{border:"1px solid #313d47",backgroundColor:"#384b59",padding:e.spacing(1),color:"#c7ccd2"}})});var be=function(e){for(var t=e.priceTimeseries,a=e.withdrawFeeTimeseries,n=e.floorpriceTimeseries,i=e.p0,o=e.p1,c=[],l=0;l div:not(:last-child)":{paddingBottom:e.spacing(3)},"& > div":{"& > div":{paddingTop:"0 !important"}},paddingBottom:e.spacing(9)},simulationContainer:{minHeight:"442px"},paper:{width:"100%",height:"100%",minHeight:310,backgroundColor:"#293640"},box:{padding:e.spacing(3,3)},boxButton:{padding:e.spacing(3,3)},boxHeader:{padding:e.spacing(3,3),height:e.spacing(10),display:"flex",alignItems:"center",borderBottom:"1px solid #313d47"},boxBorderBottom:{borderBottom:"1px solid #313d47"},initialRaise:{justifyContent:"space-between"},boxChart:{width:"100%",height:"100%",minHeight:310,maxHeight:350,padding:e.spacing(3,3),paddingRight:"5px",paddingLeft:"5px"},boxPlaceholder:{padding:e.spacing(3,3),display:"flex",height:"100%",alignItems:"center",justifyContent:"center",color:e.palette.text.secondary,opacity:.4},header:{backgroundColor:"#0b1216",color:"#f8f8f8",textAlign:"center",padding:e.spacing(3,0,16),marginBottom:-e.spacing(10)},button:{background:"linear-gradient(290deg, #1880e0, #3873d8)",color:"white"},descriptionContainer:{"& > div:not(:last-child)":{paddingBottom:e.spacing(1),marginBottom:e.spacing(1),borderBottom:"1px solid #3f5463"},"& td":{verticalAlign:"top",padding:e.spacing(.5)}},descriptionTitle:{fontWeight:e.typography.fontWeightBold,padding:e.spacing(.5)},descriptionName:{fontWeight:e.typography.fontWeightBold}})})),Ce=[{name:"Initial raise",text:"Total funds raised in the hatch period of the ABC launch"},{name:"Allocation to funding pool",text:"The percentage of the funds raised in the Hatch sale that go directly into the project funding pool to compensate future work done in the project"},{name:"Hatch price",text:"The price paid per 'ABC token' by community members involved in hatching the project"},{name:"Post-hatch price",text:"The price of the 'ABC token' when the curve enters the open phase and is live for public participation"},{name:"Exit tribute",text:"The percentage of funds that are diverted to the project funding pool from community members who exit funds from the project by burning 'ABC tokens' in exchange for collateral"}],we=[{name:"Total reserve",text:"Total DAI in the smart contract reserve at the end of the simulated period"},{name:"Funds generated from initial hatch",text:"Fraction of the funds (theta) raised during the hatch that go directly to the cause"},{name:"Funds generated from exit tributes",text:"Cumulative amount of exit tributes collected from only exit /sell transactions"},{name:"Average slippage",text:"Average of the slippage of each transaction occured during the simulation period"}];var Ne=a(190),Ae=a.n(Ne),Se=a(191),Be=Object(Se.a)({palette:{type:"dark",primary:{main:"#2ecd79"},secondary:{main:"#116be0",light:"#0f8bff",dark:"#116be0"},error:{main:Ae.a.A400},background:{default:"#fff",paper:"#293640"},text:{primary:"#fff",secondary:"#9aa3ad"}},typography:{h6:{fontWeight:400}}});console.log(Be);var Fe=Be;o.a.render(r.a.createElement(l.a,{theme:Fe},r.a.createElement(c.a,null),r.a.createElement(function(){var e=Object(n.useState)({theta:.35,p0:.1,p1:.3,wFee:.05,d0:3e6}),t=Object(d.a)(e,2),a=t[0],i=t[1],o=a.d0,c=a.theta,l=a.p0,s=a.p1,p=a.wFee,f=Object(n.useMemo)(function(){return Object(je.throttle)(i,250)},[]),y=G({d0:o,theta:c,p0:l,p1:s}),k=y.k,j=y.R0,C=y.S0,w=y.V0,N=Object(n.useState)([0]),A=Object(d.a)(N,2),S=A[0],B=A[1],F=Object(n.useState)([0]),R=Object(d.a)(F,2),M=R[0],I=R[1],T=Object(n.useState)([0]),V=Object(d.a)(T,2),H=V[0],L=V[1],W=Object(n.useState)(j),q=Object(d.a)(W,2),J=q[0],ne=q[1],ie=Object(n.useState)(0),oe=Object(d.a)(ie,2),ce=oe[0],le=oe[1],me=Object(n.useState)(0),de=Object(d.a)(me,2),pe=de[0],fe=de[1],he=Object(n.useState)(0),ge=Object(d.a)(he,2),xe=ge[0],ve=ge[1],Ee=Object(n.useState)(!1),ye=Object(d.a)(Ee,2),Ne=ye[0],Ae=ye[1],Se=Object(n.useState)(!1),Be=Object(d.a)(Se,2),Fe=Be[0],Re=Be[1];function Me(){return(Me=Object(u.a)(m.a.mark(function e(){return m.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return Ae(!1),le(0),B([0]),I([0]),fe(0),e.next=3,$(0);case 3:Ae(!0);case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}Object(n.useEffect)(function(){Ae(!1)},[a]),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,d,f;return m.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:a=[j],n=[C],r=[Y({R:j,V0:w,k:k})],i=[0],o=[],c=[],l=[C],s=[],u=52,Re(!0),d=function(t){var m=ae(5,2*t+5),u=z(a),d=z(n),f=z(l),h=void 0;if(f===d)h=1;else{var g=Q({S:d,H:f,V0:w,k:k})/u;h=Math.max(1-g,.97)}var b=ae(h,1.04),x=_({R:u,k:k,priceGrowth:b}),v=u+x,E=ee({sum:x,num:m,spread:10}),y=re(E.map(function(e){return Z({R:u,deltaR:e,V0:w,k:k})})),j=E.filter(function(e){return e<0}),O=-p*j.reduce(function(e,t){return e+t},0),N=f-te({week:t,H:f,halflife:52,cliff:8}),A=X({S:U({R:u,V0:w,k:k}),H:C-N,V0:w,k:k}),S=re(j);if(a.push(v),r.push(Y({R:v,V0:w,k:k})),o.push(y),c.push(S),i.push(z(i)+O),l.push(N),s.push(A),le(function(e){return e+j.length}),!Ne||!e)return"break"},f=0;case 17:if(!(f div:not(:last-child)","paddingBottom","borderBottom","listBox","& > div","& p","paddingRight","slider","secondaryColor","light","NumberFormatCustom","props","inputRef","onChange","prefix","suffix","other","Object","objectWithoutProperties","number_format_default","assign","getInputRef","onValueChange","values","target","value","thousandSeparator","InputParams","_ref","inputFields","onChangeCommited","map","_ref2","label","setter","min","max","step","format","toText","toNum","sanitizeInput","num","arguments","length","undefined","isNaN","Grid","key","container","item","xs","id","gutterBottom","TextField","e","parseFloat","InputProps","inputComponent","disableUnderline","inputProps","PrettoSlider","concat","valueLabelDisplay","aria-label","defaultValue","_","newValue","Number","onChangeCommitted","valueLabelFormat","replace","CurveDesignInputParams","curveParams","setCurveParams","_useState","useState","_useState2","slicedToArray","theta","setTheta","_useState3","_useState4","p0","setP0","_useState5","_useState6","p1","setP1","_useState7","_useState8","wFee","setWFee","useEffect","maxReturnRate","n","Math","round","String","toFixed","newP0","params","objectSpread","d0","setD0","floor","linspace","_ref$from","from","to","steps","arr","x","push","getLinspaceTicks","data","desiredPoints","getLast","getAvg","reduce","t","c","abs","pause","ms","Promise","r","setTimeout","getInitialParams","k","R0","S0","V0","pow","getR","S","getS","_ref3","R","getMinR","_ref4","H","getMinPrice","_ref5","myP","getPriceR","_ref6","getSlippage","_ref7","deltaR","realizedPrice","spotPrice","getDeltaR_priceGrowth","_ref8","priceGrowth","getTxDistribution","_ref9","sum","mean","off","spread","i","randn_bm","vest_tokens","_ref10","week","halflife","cliff","rv_U","random","u","v","sqrt","log","cos","PI","getMedian","mid","nums","toConsumableArray","sort","b","keyHorizontal","keyVertical","tooltip","padding","SupplyVsDemandChart","_getInitialParams","R0_round","f","biggest","scaling","unit","_data$push","defineProperty","useTheme","formatter","toPrecision","toLocaleString","es6","debounce","right","bottom","strokeDasharray","interval","dataKey","tickFormatter","tick","fill","stroke","ticks","d","domain","content","payload","supply","reserve","price","toolTipData","name","isAnimationActive","type","fillOpacity","strokeWidth","textAnchor","viewBox","y","style","ResultParams","resultFields","keyVerticalLeft","keyVerticalRight","keyVerticalLeft2","PriceSimulationChart","priceTimeseries","withdrawFeeTimeseries","floorpriceTimeseries","ReferenceLabel","yAxisId","apply","slice","orientation","exit","weekNum","dark","cursor","transition","&:hover","popoverContainer","paper","maxWidth","breakpoints","md","SimplePopover","_React$useState","React","_React$useState2","anchorEl","setAnchorEl","handleClose","open","Boolean","HelpOutline_default","onClick","currentTarget","Popover","PaperProps","onClose","anchorOrigin","vertical","horizontal","transformOrigin","Box","mainContainer","paddingTop","simulationContainer","minHeight","box","boxButton","boxHeader","boxBorderBottom","initialRaise","boxChart","maxHeight","paddingLeft","boxPlaceholder","header","textAlign","button","background","descriptionContainer","& td","descriptionTitle","typography","fontWeightBold","descriptionName","parameterDescriptions","resultParameterDescriptions","createMuiTheme","error","red","A400","default","h6","console","ReactDOM","render","ThemeProvider","CssBaseline","setCurveParamsThrottle","useMemo","throttle","setPriceTimeseries","setWithdrawFeeTimeseries","setFloorpriceTimeseries","_useState9","_useState10","totalReserve","setTotalReserve","_useState11","_useState12","withdrawCount","setWithdrawCount","_useState13","_useState14","avgSlippage","setAvgSlippage","_useState15","_useState16","avgTxSize","setAvgTxSize","_useState17","_useState18","simulationActive","setSimulationActive","_useState19","_useState20","simulationRunning","setSimulationRunning","_startSimulation","asyncToGenerator","regenerator_default","mark","_callee2","wrap","_context2","prev","next","stop","this","canContinueSimulation","_simulateRandomDelta","_callee","R_t","S_t","p_t","wFee_t","slippage_t","avgTxSize_t","H_t","floorprice_t","numSteps","_loop","_context","txsWeek","u_lower","R_ratio","R_next","txs","slippage","txR","txsWithdraw","filter","tx","wFees","H_next","floorprice_next","_avgTxSize","abrupt","simulateRandomDelta","Container","fixed","sm","lg","Paper","SimulationInputParams_CurveDesignInputParams","src_SupplyVsDemandChart","direction","justify","Button","disabled","src_PriceSimulationChart","document","querySelector"],"mappings":"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","file":"static/js/main.a231de29.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 cadCadLink =\n \"https://medium.com/block-science/cadcad-filling-a-critical-gap-in-open-source-data-science-fcd0d3faa8ed\";\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 subsubtitle: {\n color: theme.palette.text.secondary,\n opacity: 0.6\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 A narrative showcase of cadCAD\n 's capabilities\n \n \n );\n}\n","import { withStyles } from \"@material-ui/core/styles\";\nimport Slider from \"@material-ui/core/Slider\";\n\nexport default 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","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\";\nimport TextField from \"@material-ui/core/TextField\";\nimport NumberFormat from \"react-number-format\";\nimport { InputFieldInterface } from \"./types\";\nimport PrettoSlider from \"./PrettoSlider\";\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 secondaryColor: {\n color: theme.palette.secondary.light\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 inputFields,\n onChangeCommited\n}: {\n inputFields: InputFieldInterface[];\n onChangeCommited(): void;\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 secondaryColor,\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 onChangeCommited();\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={onChangeCommited}\n value={value}\n min={min}\n max={max}\n step={step}\n valueLabelFormat={value => format(value).replace(\"$\", \"\")}\n />\n \n \n );\n }\n )}\n
\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { InputFieldInterface, CurveParamsInterface } from \"./types\";\nimport InputParams from \"./InputParams\";\n\nexport default function CurveDesignInputParams({\n curveParams,\n setCurveParams\n}: {\n curveParams: CurveParamsInterface;\n setCurveParams(newCurveParams: any): void;\n}) {\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 [p1, setP1] = useState(0.3); // Return factor (.)\n const [wFee, setWFee] = useState(0.05); // friction coefficient (.)\n\n useEffect(() => {\n setTheta(curveParams.theta);\n setP0(curveParams.p0);\n setP1(curveParams.p1);\n setWFee(curveParams.wFee);\n }, [curveParams]);\n\n function _setP0(newP0: number) {\n setP0(newP0);\n if (p1 < newP0) setP1(newP0);\n else if (p1 > newP0 * maxReturnRate) setP1(newP0 * maxReturnRate);\n }\n\n function setParentCurveParams() {\n setCurveParams((params: CurveParamsInterface) => ({\n ...params,\n theta,\n p0,\n p1,\n wFee\n }));\n }\n\n const maxReturnRate = 10;\n\n const inputFields: InputFieldInterface[] = [\n {\n label: \"Allocation to funding pool\",\n value: theta,\n setter: setTheta,\n min: 0,\n max: 0.9,\n step: 0.01,\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: \"Hatch price (DAI/token)\",\n value: p0,\n setter: _setP0,\n min: 0.01,\n max: 1,\n step: 0.01,\n toText: (n: number) => String(+n.toFixed(2)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `$${n}`\n },\n {\n label: \"Post-hatch price (DAI/token)\",\n value: p1,\n setter: setP1,\n min: p0 || 0.1,\n max: Number((maxReturnRate * p0).toFixed(2)),\n step: 0.01,\n toText: (n: number) => String(+n.toFixed(2)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `$${n}`\n },\n {\n label: \"Exit tribute\",\n value: wFee,\n setter: setWFee,\n min: 0,\n max: 0.1,\n step: 0.001,\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 return (\n \n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { InputFieldInterface, CurveParamsInterface } from \"./types\";\nimport InputParams from \"./InputParams\";\n\nexport default function CurveDesignInputParams({\n curveParams,\n setCurveParams\n}: {\n curveParams: CurveParamsInterface;\n setCurveParams(newCurveParams: any): void;\n}) {\n const [d0, setD0] = useState(3e6); // Initial raise, d0 (DAI)\n\n useEffect(() => {\n setD0(curveParams.d0);\n }, [curveParams]);\n\n function setParentCurveParams() {\n setCurveParams((params: CurveParamsInterface) => ({\n ...params,\n d0\n }));\n }\n\n const inputFields: InputFieldInterface[] = [\n {\n label: \"Initial raise (DAI)\",\n value: d0,\n setter: setD0,\n min: 0.1e6,\n max: 10e6,\n step: 0.1e6,\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 secondaryColor: true\n }\n ];\n\n return (\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","/**\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 p1\n}: {\n d0: number;\n theta: number;\n p0: number;\n p1: number;\n}) {\n const k = p1 / p0 / (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\nfunction getR({ S, V0, k }: { S: number; V0: number; k: number }) {\n return S ** k / V0;\n}\n\nexport function getS({ R, V0, k }: { R: number; V0: number; k: number }) {\n return (V0 * R) ** (1 / k);\n}\n\n// compute the reserve if all that supply is burned\nexport function getMinR({\n S,\n H,\n V0,\n k\n}: {\n S: number;\n H: number;\n V0: number;\n k: number;\n}) {\n return getR({ S: S - H, V0, k });\n}\n\n// compute the price if all that supply is burned\nexport function getMinPrice({\n S,\n H,\n V0,\n k\n}: {\n S: number;\n H: number;\n V0: number;\n k: number;\n}) {\n if (S === H) {\n const myR = getR({ S, V0, k });\n const myP = getPriceR({ R: myR, V0, k }); // numerical precision make complex numbers just suppress it\n return Math.abs(myP);\n } else {\n const minR = getMinR({ S, H, V0, k });\n return getPriceR({ R: minR, V0, k });\n }\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// Price walk utils\n\n/**\n * Get deltaR for a given price growth factor\n */\nexport function getDeltaR_priceGrowth({\n R,\n k,\n priceGrowth\n}: {\n R: number;\n k: number;\n priceGrowth: number;\n}) {\n return -R + (priceGrowth * R ** (1 - 1 / k)) ** (k / (-1 + k));\n}\n\n/**\n * Computes a tx distribution using a normal distribution,\n * Given a sum of tx value and a number of transactions\n *\n * Demo: https://codepen.io/anon/pen/mNqJjv?editors=0010#0\n * Very quick: < 10ms for 10000 txs\n */\nexport function getTxDistribution({\n sum,\n num,\n spread\n}: {\n sum: number;\n num: number;\n spread: number;\n}) {\n const mean = sum / num;\n const off = mean * spread;\n const x: number[] = [];\n for (let i = 0; i < num; i++) {\n x.push(randn_bm(mean - off, mean + off));\n }\n return x;\n}\n\nexport function vest_tokens({\n week,\n H, // unvested_hatch_tokens\n halflife,\n cliff\n}: {\n week: number;\n H: number;\n halflife: number;\n cliff: number;\n}) {\n // check cliff\n if (week < cliff) {\n return 0;\n } else {\n // rate of release given half - life\n const vest_fraction = 0.5 ** (1 / halflife);\n // number of tokens that vest in this week\n return H * (1 - vest_fraction);\n }\n}\n\n// Statistics utils\n\n/**\n * Random variable uniformly distributed\n */\nexport function rv_U(min: number, max: number) {\n return Math.random() * (max - min) + min;\n}\n\n/**\n * Standard Normal variate using Box-Muller transform.\n * by https://stackoverflow.com/questions/25582882/javascript-math-random-normal-distribution-gaussian-bell-curve/36481059#36481059\n */\nfunction randn_bm(min: number, max: number) {\n var u = 0,\n v = 0;\n while (u === 0) u = Math.random(); //Converting [0,1) to (0,1)\n while (v === 0) v = Math.random();\n let num = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);\n\n num = num / 10.0 + 0.5; // Translate to 0 -> 1\n if (num > 1 || num < 0) num = randn_bm(min, max); // resample between 0 and 1 if out of range\n num *= max - min; // Stretch to fill range\n num += min; // offset to min\n return num;\n}\n\n// Array utils\n\nexport function getMedian(arr: number[]) {\n const mid = Math.floor(arr.length / 2);\n const nums = [...arr].sort((a, b) => a - b);\n return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n}\n\nexport function getSum(arr: number[]) {\n return arr.reduce((a, b) => a + b, 0);\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 { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { getLinspaceTicks } from \"./utils\";\nimport { getInitialParams, getPriceR } from \"./math\";\nimport { useTheme } from \"@material-ui/styles\";\n\nconst keyHorizontal = \"x\";\nconst keyVertical = \"Supply (tokens) / Reserve (DAI)\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n tooltip: {\n border: \"1px solid #313d47\",\n backgroundColor: \"#384b59\",\n padding: theme.spacing(1),\n color: \"#c7ccd2\"\n }\n })\n);\n\nfunction SupplyVsDemandChart({\n theta,\n d0,\n p0,\n p1\n}: {\n theta: number;\n d0: number;\n p0: number;\n p1: 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 {\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 p1\n });\n const R0_round = Math.round(R0);\n const S_of_R = (R: number) => S0 * (R / R0_round) ** (1 / k);\n\n // Function setup\n const f = S_of_R;\n const from = 0;\n const to = 4 * R0_round;\n const steps = 100 + 1; // Add 1 for the ticks to match\n const step = Math.round((to - from) / (steps - 1));\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 data = [];\n for (let i = 0; i < steps; i++) {\n const x = Math.round(from + step * i);\n data.push({\n [keyHorizontal]: x,\n [keyVertical]: f(x)\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n const classes = useStyles();\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 function CustomTooltip({ active, payload, label }: any) {\n if (active) {\n const supply = payload[0].value;\n const reserve = label;\n const price = getPriceR({ R: reserve, V0, k });\n const toolTipData: string[][] = [\n [\"Supply\", formatter(supply) + unit, \"tokens\"],\n [\"Reserve\", formatter(reserve) + unit, \"DAI\"],\n [\"Price\", price.toFixed(2), \"DAI/token\"]\n ];\n return (\n
\n \n \n {toolTipData.map(([name, value, unit]) => (\n \n \n \n \n \n ))}\n \n
{name}{value}{unit}
\n
\n );\n } else return null;\n }\n\n return (\n \n \n \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 } />\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 ReferenceLine,\n ResponsiveContainer,\n Tooltip\n} from \"recharts\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { useTheme } from \"@material-ui/styles\";\nimport { linspace } from \"./utils\";\n\nconst keyHorizontal = \"x\";\nconst keyVerticalLeft = \"Price (DAI/token)\";\nconst keyVerticalRight = \"Total exit tributes (DAI)\";\nconst keyVerticalLeft2 = \"Floor price (DAI/token)\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n tooltip: {\n border: \"1px solid #313d47\",\n backgroundColor: \"#384b59\",\n padding: theme.spacing(1),\n color: \"#c7ccd2\"\n }\n })\n);\n\nfunction PriceSimulationChart({\n priceTimeseries,\n withdrawFeeTimeseries,\n floorpriceTimeseries,\n p0,\n p1\n}: {\n priceTimeseries: number[];\n withdrawFeeTimeseries: number[];\n floorpriceTimeseries: number[];\n p0: number;\n p1: 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 data = [];\n for (let t = 0; t < priceTimeseries.length; t++) {\n data.push({\n [keyHorizontal]: t,\n [keyVerticalLeft]: priceTimeseries[t] || 0,\n [keyVerticalLeft2]: floorpriceTimeseries[t] || 0,\n [keyVerticalRight]: withdrawFeeTimeseries[t] || 0\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n const classes = useStyles();\n\n function renderColorfulLegendText(value: string) {\n return {value};\n }\n\n const formatter = (n: number) => (+n.toPrecision(3)).toLocaleString();\n\n function ReferenceLabel(props: any) {\n const { textAnchor, viewBox, text } = props;\n return (\n \n {text}\n \n );\n }\n\n function CustomTooltip({ active, payload, label }: any) {\n if (active) {\n const price = payload[0].value;\n const floor = payload[1].value;\n const exit = payload[2].value;\n const weekNum = label;\n const toolTipData: string[][] = [\n [\"Price\", price.toFixed(2), \"DAI/tk\"],\n [\"Floor\", floor.toFixed(2), \"DAI/tk\"],\n [\"Exit t.\", formatter(exit), \"DAI\"],\n [\"Week\", weekNum, \"\"]\n ];\n\n return (\n
\n \n \n {toolTipData.map(([name, value, unit]) => (\n \n \n \n \n \n ))}\n \n
{name}{value}{unit}
\n
\n );\n } else return null;\n }\n\n return (\n \n \n \n \n\n {/* Price time evolution */}\n \n\n {/* Capital collected from withdraw fees - AXIS */}\n \n\n } />\n\n \n \n\n }\n />\n }\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 Box from \"@material-ui/core/Box\";\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 popoverContainer: {\n padding: theme.spacing(2)\n },\n paper: {\n backgroundColor: \"#384b59\",\n maxWidth: theme.breakpoints.values.md * 0.9,\n [`@media screen and (max-width: ${theme.breakpoints.values.md}px)`]: {\n maxWidth: \"90vw\"\n }\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\";\n// Components\nimport Header from \"./Header\";\nimport CurveDesignInputParams from \"./CurveDesignInputParams\";\nimport SimulationInputParams from \"./SimulationInputParams\";\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 getMinPrice,\n getS,\n vest_tokens,\n getMinR,\n getSlippage,\n getTxDistribution,\n getDeltaR_priceGrowth,\n rv_U,\n getMedian,\n getSum\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 simulationContainer: {\n minHeight: \"442px\"\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 },\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 boxBorderBottom: {\n borderBottom: \"1px solid #313d47\"\n },\n initialRaise: {\n justifyContent: \"space-between\"\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 boxPlaceholder: {\n padding: theme.spacing(3, 3),\n display: \"flex\",\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: theme.palette.text.secondary,\n opacity: 0.4\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)\", // Green gradient\n background: \"linear-gradient(290deg, #1880e0, #3873d8)\", // blue gradient\n color: \"white\"\n },\n // Descriptions\n descriptionContainer: {\n \"& > div:not(:last-child)\": {\n paddingBottom: theme.spacing(1),\n marginBottom: theme.spacing(1),\n borderBottom: \"1px solid #3f5463\"\n },\n \"& td\": {\n verticalAlign: \"top\",\n padding: theme.spacing(0.5)\n }\n },\n descriptionTitle: {\n fontWeight: theme.typography.fontWeightBold,\n padding: theme.spacing(0.5)\n },\n descriptionName: {\n fontWeight: theme.typography.fontWeightBold\n }\n })\n);\n\nconst parameterDescriptions = [\n {\n name: \"Initial raise\",\n text: \"Total funds raised in the hatch period of the ABC launch\"\n },\n {\n name: \"Allocation to funding pool\",\n text:\n \"The percentage of the funds raised in the Hatch sale that go directly into the project funding pool to compensate future work done in the project\"\n },\n {\n name: \"Hatch price\",\n text:\n \"The price paid per 'ABC token' by community members involved in hatching the project\"\n },\n {\n name: \"Post-hatch price\",\n text:\n \"The price of the 'ABC token' when the curve enters the open phase and is live for public participation\"\n },\n {\n name: \"Exit tribute\",\n text:\n \"The percentage of funds that are diverted to the project funding pool from community members who exit funds from the project by burning 'ABC tokens' in exchange for collateral\"\n }\n];\n\nconst resultParameterDescriptions = [\n {\n name: \"Total reserve\",\n text:\n \"Total DAI in the smart contract reserve at the end of the simulated period\"\n },\n {\n name: \"Funds generated from initial hatch\",\n text:\n \"Fraction of the funds (theta) raised during the hatch that go directly to the cause\"\n },\n {\n name: \"Funds generated from exit tributes\",\n text:\n \"Cumulative amount of exit tributes collected from only exit /sell transactions\"\n },\n {\n name: \"Average slippage\",\n text:\n \"Average of the slippage of each transaction occured during the simulation period\"\n }\n];\n\nexport default function App() {\n const [curveParams, setCurveParams] = useState({\n theta: 0.35, // fraction allocated to reserve (.)\n p0: 0.1, // Hatch sale price p0 (DAI / token)\n p1: 0.3, // Return factor (.)\n wFee: 0.05, // friction coefficient (.)\n d0: 3e6 // Initial raise, d0 (DAI)\n });\n\n const { d0, theta, p0, p1, 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, 250),\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 p1\n });\n\n const [priceTimeseries, setPriceTimeseries] = useState([0]);\n const [withdrawFeeTimeseries, setWithdrawFeeTimeseries] = useState([0]);\n const [floorpriceTimeseries, setFloorpriceTimeseries] = useState([0]);\n const [totalReserve, setTotalReserve] = useState(R0);\n const [withdrawCount, setWithdrawCount] = useState(0);\n const [avgSlippage, setAvgSlippage] = useState(0);\n const [avgTxSize, setAvgTxSize] = useState(0);\n // Simulation state variables\n const [simulationActive, setSimulationActive] = useState(false);\n const [simulationRunning, setSimulationRunning] = useState(false);\n\n useEffect(() => {\n setSimulationActive(false);\n }, [curveParams]);\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\n async function simulateRandomDelta() {\n const R_t: number[] = [R0];\n const S_t: number[] = [S0];\n const p_t: number[] = [getPriceR({ R: R0, V0, k })];\n const wFee_t: number[] = [0];\n const slippage_t: number[] = [];\n const avgTxSize_t: number[] = [];\n\n // hatchers tokens = S0[section added by Z]\n const H_t: number[] = [S0]; // total hatcher tokens not vested\n const floorprice_t: number[] = []; // initially the price is the floor as all tokens are hatcher tokens\n\n // Random walk\n const numSteps = 52;\n const u_min = 0.97;\n const u_max = 1.04;\n const tx_spread = 10;\n // vesting(should this be exposed in the app ?)\n const cliff = 8; // weeks before vesting starts ~2 months\n const halflife = 52; // 26 weeks, half life is ~6 months\n // percentage of the hatch tokens which vest per week(since that is our timescale in the sim)\n\n // numSteps = 52 take 8ms to run\n setSimulationRunning(true);\n for (let t = 0; t < numSteps; t++) {\n const txsWeek = rv_U(5, 2 * t + 5);\n\n const R = getLast(R_t);\n const S = getLast(S_t);\n const H = getLast(H_t);\n\n // enforce the effects of the unvested tokens not being burnable\n let u_lower;\n if (H === S) {\n u_lower = 1;\n } else {\n const R_ratio = getMinR({ S, H, V0, k }) / R;\n u_lower = Math.max(1 - R_ratio, u_min);\n }\n const priceGrowth = rv_U(u_lower, u_max);\n\n const deltaR = getDeltaR_priceGrowth({ R, k, priceGrowth });\n const R_next = R + deltaR;\n\n const txs = getTxDistribution({\n sum: deltaR,\n num: txsWeek,\n spread: tx_spread\n });\n // Compute slippage\n const slippage_txs = txs.map(txR =>\n getSlippage({ R, deltaR: txR, V0, k })\n );\n const slippage = getMedian(slippage_txs);\n\n const txsWithdraw = txs.filter(tx => tx < 0);\n const wFees = -wFee * getSum(txsWithdraw);\n // txsWithdraw.reduce((t, c) => t + c, 0);\n\n // Vest\n const delta_H = vest_tokens({ week: t, H, halflife, cliff });\n const H_next = H - delta_H;\n\n // find floor price\n const S_next = getS({ R, V0, k });\n const floorprice_next = getMinPrice({\n S: S_next,\n H: S0 - H_next,\n V0,\n k\n });\n\n const _avgTxSize = getMedian(txsWithdraw);\n\n R_t.push(R_next);\n p_t.push(getPriceR({ R: R_next, V0, k }));\n slippage_t.push(slippage);\n avgTxSize_t.push(_avgTxSize);\n wFee_t.push(getLast(wFee_t) + wFees);\n H_t.push(H_next);\n floorprice_t.push(floorprice_next);\n setWithdrawCount(c => c + txsWithdraw.length);\n\n // Stop the simulation if it's no longer active\n if (!simulationActive || !canContinueSimulation) break;\n }\n\n // floorprice_t is missing one data point\n floorprice_t[floorprice_t.length] = floorprice_t[floorprice_t.length - 1];\n\n setPriceTimeseries(p_t);\n setWithdrawFeeTimeseries(wFee_t);\n setFloorpriceTimeseries(floorprice_t);\n setAvgSlippage(getAvg(slippage_t));\n setAvgTxSize(getAvg(avgTxSize_t));\n setTotalReserve(getLast(R_t));\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: `Total reserve`,\n value: (+totalReserve.toPrecision(3)).toLocaleString() + \" DAI\"\n },\n {\n label: `Funds generated from initial hatch`,\n value: Math.round(d0 * theta).toLocaleString() + \" DAI\"\n },\n {\n label: `Funds generated from exit tributes (${withdrawCount} txs)`,\n value:\n (+getLast(withdrawFeeTimeseries).toPrecision(3)).toLocaleString() +\n \" DAI\"\n },\n {\n label: `Average slippage (avg tx size ${Math.round(\n avgTxSize\n ).toLocaleString()} DAI)`,\n value: +(100 * avgSlippage).toFixed(3) + \"%\"\n }\n ];\n\n const classes = useStyles();\n\n return (\n <>\n
\n \n
\n \n
\n\n \n \n \n \n \n Curve Design\n \n
\n \n Parameters description:\n \n
\n \n \n {parameterDescriptions.map(({ name, text }) => (\n \n \n \n \n ))}\n \n
\n \n {name}\n \n \n {text}\n
\n \n }\n />\n
\n\n \n \n \n\n \n Run parameters\n \n\n \n \n \n
\n
\n\n \n \n \n Preview\n \n Visualization of the token bonding curve analytic function\n on a specific range of reserve [0, 4 * R0]. This result is\n deterministic given the current set of parameters and will\n never change regardes of the campaign performance, it only\n shows how the price will react to reserve changes.\n \n }\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 \n {simulationActive ? (\n <>\n \n \n \n Simulation\n \n This chart shows a 52 week simulation of discrete\n transactions interacting with the token bonding curve.\n Each transaction adds or substract reserve to the\n system, modifying the price over time. The frequency,\n size and direction of each transaction is computed\n from a set of bounded random functions.\n \n }\n />\n \n\n \n \n \n \n \n\n \n \n \n Results\n \n
\n \n Result parameters description:\n \n
\n \n \n {resultParameterDescriptions.map(\n ({ name, text }) => (\n \n \n \n \n )\n )}\n \n
\n \n {name}\n \n \n {text}\n
\n \n }\n />\n
\n\n \n \n \n
\n
\n \n ) : (\n \n \n \n \n Run a simulation to see results\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 light: \"#0f8bff\",\n dark: \"#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.d4e37a2e.chunk.js b/static/js/main.d4e37a2e.chunk.js new file mode 100644 index 0000000..9d50e67 --- /dev/null +++ b/static/js/main.d4e37a2e.chunk.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{225:function(e,t,a){e.exports=a(421)},420:function(e,t,a){},421: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(462),l=a(461),s=a(65),m=a.n(s),u=a(118),d=a(14),p=a(422),f=a(467),h=a(460),g=a(423),b=a(464),x=a(459),v=a(458),E=a(466),y=a(457),k="https://medium.com/block-science/cadcad-filling-a-critical-gap-in-open-source-data-science-fcd0d3faa8ed",j=Object(p.a)(function(e){return Object(f.a)({title:{},subtitle:{color:e.palette.text.secondary,margin:e.spacing(3,0,0)},subsubtitle:{color:e.palette.text.secondary,opacity:.6},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 O(){var e=j();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(g.a,{className:e.logoText},"Commons Stack")),r.a.createElement(g.a,{className:e.title,variant:"h4"},"Augmented Token Bonding Curve Design"),r.a.createElement(g.a,{className:e.subtitle},"Experiment and test augmented token bonding curves"),r.a.createElement(g.a,{className:e.subsubtitle},"A narrative showcase of ",r.a.createElement(y.a,{href:k},"cadCAD"),"'s capabilities"))}var C=a(84),N=a(192),w=a(463),A=a(175),B=a.n(A),S=a(7),F=a(468),R=Object(S.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}})(F.a),M=Object(p.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},secondaryColor:{color:e.palette.secondary.light}})});function I(e){var t=e.inputRef,a=e.onChange,n=e.prefix,i=e.suffix,o=Object(N.a)(e,["inputRef","onChange","prefix","suffix"]);return r.a.createElement(B.a,Object.assign({},o,{getInputRef:t,onValueChange:function(e){a({target:{value:e.value}})},thousandSeparator:!0,prefix:n,suffix:i}))}function T(e){var t=e.inputFields,a=e.onChangeCommited,n=M();return r.a.createElement("div",{className:n.listBoxContainer},t.map(function(e){var t=e.label,i=e.value,o=e.setter,c=e.min,l=e.max,s=e.step,m=e.prefix,u=e.suffix,d=e.secondaryColor,p=e.format,f=e.toText,h=e.toNum;function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;isNaN(e)&&(e=0),e>l?e=l:ee*k&&b(e*k)},min:.01,max:1,step:.01,toText:function(e){return String(+e.toFixed(2))},toNum:function(e){return parseFloat(e)},format:function(e){return"$".concat(e)}},{label:"Post-hatch price (DAI/token)",value:g,setter:b,min:u||.1,max:Number((k*u).toFixed(2)),step:.01,toText:function(e){return String(+e.toFixed(2))},toNum:function(e){return parseFloat(e)},format:function(e){return"$".concat(e)}},{label:"Exit tribute",value:E,setter:y,min:0,max:.1,step:.001,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)}}];return r.a.createElement(T,{inputFields:j,onChangeCommited:function(){a(function(e){return Object(C.a)({},e,{theta:c,p0:u,p1:g,wFee:E})})}})}function D(e){var t=e.curveParams,a=e.setCurveParams,i=Object(n.useState)(3e6),o=Object(d.a)(i,2),c=o[0],l=o[1];Object(n.useEffect)(function(){l(t.d0)},[t]);var s=[{label:"Initial raise (DAI)",value:c,setter:l,min:1e5,max:1e7,step:1e5,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))},secondaryColor:!0}];return r.a.createElement(T,{inputFields:s,onChangeCommited:function(){a(function(e){return Object(C.a)({},e,{d0:c})})}})}var V=a(23),H=a(15);function L(e){for(var t=e.from,a=void 0===t?0:t,n=e.to,r=e.steps,i=[],o=a;o<=n;o+=(n-a)/r)i.push(o);return i}function W(e,t){for(var a=[],n=(e[e.length-1]-e[0])/t,r=e[0];r1||r<0)&&(r=ae(e,t)),r*=t-e,r+=e}function ne(e){var t=Math.floor(e.length/2),a=Object(q.a)(e).sort(function(e,t){return e-t});return e.length%2!==0?a[t]:(a[t-1]+a[t])/2}var re=a(193),ie="x",oe="Supply (tokens) / Reserve (DAI)",ce=Object(p.a)(function(e){return Object(f.a)({tooltip:{border:"1px solid #313d47",backgroundColor:"#384b59",padding:e.spacing(1),color:"#c7ccd2"}})});var le=function(e){for(var t=e.theta,a=G({d0:e.d0,theta:t,p0:e.p0,p1:e.p1}),n=a.k,i=a.R0,o=a.S0,c=a.V0,l=Math.round(i),s=function(e){return o*Math.pow(e/l,1/n)},m=4*l,u=Math.round((m-0)/100),p=Math.max(m,s(m)),f=p>5e8?[1e9,"B"]:p>5e5?[1e6,"M"]:p>500?[1e3,"K"]:[1,""],h=Object(d.a)(f,2),g=h[0],b=h[1],x=[],v=0;v<101;v++){var E,y=Math.round(0+u*v);x.push((E={},Object(V.a)(E,ie,y),Object(V.a)(E,oe,s(y)),E))}var k=Object(re.a)(),j=ce(),O=function(e){return(+(e/g).toPrecision(2)).toLocaleString()};return r.a.createElement(H.f,{debounce:1},r.a.createElement(H.b,{width:0,height:400,data:x,margin:{top:10,right:30,left:0,bottom:0}},r.a.createElement(H.c,{strokeDasharray:"3 3"}),r.a.createElement(H.h,{interval:24,dataKey:ie,tickFormatter:O,unit:b,tick:{fill:k.palette.text.secondary},stroke:k.palette.text.secondary}),r.a.createElement(H.i,{interval:"preserveStartEnd",ticks:W(x.map(function(e){return e[oe]}),3),tickFormatter:O,unit:b,tick:{fill:k.palette.text.secondary},domain:[0,s(m)],stroke:k.palette.text.secondary}),r.a.createElement(H.g,{content:r.a.createElement(function(e){var t=e.active,a=e.payload,i=e.label;if(t){var o=a[0].value,l=i,s=X({R:l,V0:c,k:n}),m=[["Supply",O(o)+b,"tokens"],["Reserve",O(l)+b,"DAI"],["Price",s.toFixed(2),"DAI/token"]];return r.a.createElement("div",{className:j.tooltip},r.a.createElement("table",null,r.a.createElement("tbody",null,m.map(function(e){var t=Object(d.a)(e,3),a=t[0],n=t[1],i=t[2];return r.a.createElement("tr",{key:a},r.a.createElement("td",null,a),r.a.createElement("td",null,n),r.a.createElement("td",null,i))}))))}return null},null)}),r.a.createElement(H.a,{isAnimationActive:!1,type:"monotone",dataKey:oe,stroke:k.palette.primary.main,fill:k.palette.primary.main,fillOpacity:.3,strokeWidth:2}),r.a.createElement(H.e,{x:l,stroke:k.palette.primary.main,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(H.d,{formatter:function(e){return r.a.createElement("span",{style:{color:k.palette.text.secondary}},e)}})))},se=Object(p.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 me(e){var t=e.resultFields,a=se();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(g.a,{id:t,gutterBottom:!0},t)),r.a.createElement(v.a,{item:!0,xs:4,className:a.centerContainer},r.a.createElement(g.a,{gutterBottom:!0},n)))}))}var ue="x",de="Price (DAI/token)",pe="Total exit tributes (DAI)",fe="Floor price (DAI/token)",he=Object(p.a)(function(e){return Object(f.a)({tooltip:{border:"1px solid #313d47",backgroundColor:"#384b59",padding:e.spacing(1),color:"#c7ccd2"}})});var ge=function(e){for(var t=e.priceTimeseries,a=e.withdrawFeeTimeseries,n=e.floorpriceTimeseries,i=e.p0,o=e.p1,c=[],l=0;l div:not(:last-child)":{paddingBottom:e.spacing(3)},"& > div":{"& > div":{paddingTop:"0 !important"}},paddingBottom:e.spacing(9)},simulationContainer:{minHeight:"442px"},paper:{width:"100%",height:"100%",minHeight:310,backgroundColor:"#293640"},box:{padding:e.spacing(3,3)},boxButton:{padding:e.spacing(3,3)},boxHeader:{padding:e.spacing(3,3),height:e.spacing(10),display:"flex",alignItems:"center",borderBottom:"1px solid #313d47"},boxBorderBottom:{borderBottom:"1px solid #313d47"},initialRaise:{justifyContent:"space-between"},boxChart:{width:"100%",height:"100%",minHeight:310,maxHeight:350,padding:e.spacing(3,3),paddingRight:"5px",paddingLeft:"5px"},boxPlaceholder:{padding:e.spacing(3,3),display:"flex",height:"100%",alignItems:"center",justifyContent:"center",color:e.palette.text.secondary,opacity:.4},header:{backgroundColor:"#0b1216",color:"#f8f8f8",textAlign:"center",padding:e.spacing(3,0,16),marginBottom:-e.spacing(10)},button:{background:"linear-gradient(290deg, #1880e0, #3873d8)",color:"white"},descriptionContainer:{"& > div:not(:last-child)":{paddingBottom:e.spacing(1),marginBottom:e.spacing(1),borderBottom:"1px solid #3f5463"},"& td":{verticalAlign:"top",padding:e.spacing(.5)}},descriptionTitle:{fontWeight:e.typography.fontWeightBold,padding:e.spacing(.5)},descriptionName:{fontWeight:e.typography.fontWeightBold},descriptionPadding:{padding:e.spacing(.5)}})})),Oe=[{name:"Initial raise",text:"Total funds raised in the hatch period of the ABC launch"},{name:"Allocation to funding pool",text:"The percentage of the funds raised in the Hatch sale that go directly into the project funding pool to compensate future work done in the project"},{name:"Hatch price",text:"The price paid per 'ABC token' by community members involved in hatching the project"},{name:"Post-hatch price",text:"The price of the 'ABC token' when the curve enters the open phase and is live for public participation"},{name:"Exit tribute",text:"The percentage of funds that are diverted to the project funding pool from community members who exit funds from the project by burning 'ABC tokens' in exchange for collateral"}],Ce=[{name:"Price",text:"Price of the token over time."},{name:"Floor price",text:"Lower bound of the price guaranteed by the vesting of hatch tokens. It decreases over time as more hatch tokens are allowed to be traded"},{name:"Total exit tributes",text:"Cumulative sum of exit tributes collected from only exit /sell transactions"}],Ne=[{name:"Total reserve",text:"Total DAI in the smart contract reserve at the end of the simulated period"},{name:"Funds generated from initial hatch",text:"Fraction of the funds (theta) raised during the hatch that go directly to the cause (analytic result)"},{name:"Funds generated from exit tributes",text:"Cumulative sum of exit tributes collected from only exit /sell transactions"},{name:"Average slippage",text:"Average of the slippage of each transaction occured during the simulation period"}];var we=a(190),Ae=a.n(we),Be=a(191),Se=Object(Be.a)({palette:{type:"dark",primary:{main:"#2ecd79"},secondary:{main:"#116be0",light:"#0f8bff",dark:"#116be0"},error:{main:Ae.a.A400},background:{default:"#fff",paper:"#293640"},text:{primary:"#fff",secondary:"#9aa3ad"}},typography:{h6:{fontWeight:400}}});console.log(Se);var Fe=Se;o.a.render(r.a.createElement(l.a,{theme:Fe},r.a.createElement(c.a,null),r.a.createElement(function(){var e=Object(n.useState)({theta:.35,p0:.1,p1:.3,wFee:.05,d0:3e6}),t=Object(d.a)(e,2),a=t[0],i=t[1],o=a.d0,c=a.theta,l=a.p0,s=a.p1,p=a.wFee,f=Object(n.useMemo)(function(){return Object(ke.throttle)(i,250)},[]),y=G({d0:o,theta:c,p0:l,p1:s}),k=y.k,j=y.R0,C=y.S0,N=y.V0,w=Object(n.useState)([0]),A=Object(d.a)(w,2),B=A[0],S=A[1],F=Object(n.useState)([0]),R=Object(d.a)(F,2),M=R[0],I=R[1],T=Object(n.useState)([0]),V=Object(d.a)(T,2),H=V[0],L=V[1],W=Object(n.useState)(j),q=Object(d.a)(W,2),ae=q[0],re=q[1],ie=Object(n.useState)(0),oe=Object(d.a)(ie,2),ce=oe[0],se=oe[1],ue=Object(n.useState)(0),de=Object(d.a)(ue,2),pe=de[0],fe=de[1],he=Object(n.useState)(0),be=Object(d.a)(he,2),xe=be[0],ve=be[1],Ee=Object(n.useState)(!1),we=Object(d.a)(Ee,2),Ae=we[0],Be=we[1],Se=Object(n.useState)(!1),Fe=Object(d.a)(Se,2),Re=Fe[0],Me=Fe[1];function Ie(){return(Ie=Object(u.a)(m.a.mark(function e(){return m.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return Be(!1),se(0),S([0]),I([0]),fe(0),e.next=3,$(0);case 3:Be(!0);case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}Object(n.useEffect)(function(){Be(!1)},[a]),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,d,f;return m.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:a=[j],n=[C],r=[X({R:j,V0:N,k:k})],i=[0],o=[],c=[],l=[C],s=[],u=52,Me(!0),d=function(t){var m=te(5,2*t+5),u=z(a),d=z(n),f=z(l),h=void 0;if(f>d)h=1;else{var g=J({S:d-f,V0:N,k:k})/u;h=Math.max(1-g,.97)}var b=te(h,1.04),x=Z({R:u,k:k,priceGrowth:b}),v=u+x,E=_({sum:x,num:m,spread:10}),y=ne(E.map(function(e){return Y({R:u,deltaR:e,V0:N,k:k})})),j=E.filter(function(e){return e<0}),O=-p*j.reduce(function(e,t){return e+t},0),w=f-ee({week:t,H:f,halflife:52,cliff:8}),A=U({R:u,V0:N,k:k}),B=Q({S:A,H:C-w,V0:N,k:k}),S=ne(j);if(a.push(v),n.push(A),l.push(w),r.push(X({R:v,V0:N,k:k})),o.push(y),c.push(S),i.push(z(i)+O),s.push(B),se(function(e){return e+j.length}),!Ae||!e)return"break"},f=0;case 17:if(!(f div:not(:last-child)","paddingBottom","borderBottom","listBox","& > div","& p","paddingRight","slider","secondaryColor","light","NumberFormatCustom","props","inputRef","onChange","prefix","suffix","other","Object","objectWithoutProperties","number_format_default","assign","getInputRef","onValueChange","values","target","value","thousandSeparator","InputParams","_ref","inputFields","onChangeCommited","map","_ref2","label","setter","min","max","step","format","toText","toNum","sanitizeInput","num","arguments","length","undefined","isNaN","Grid","key","container","item","xs","id","gutterBottom","TextField","e","parseFloat","InputProps","inputComponent","disableUnderline","inputProps","PrettoSlider","concat","valueLabelDisplay","aria-label","defaultValue","_","newValue","Number","onChangeCommitted","valueLabelFormat","replace","CurveDesignInputParams","curveParams","setCurveParams","_useState","useState","_useState2","slicedToArray","theta","setTheta","_useState3","_useState4","p0","setP0","_useState5","_useState6","p1","setP1","_useState7","_useState8","wFee","setWFee","useEffect","maxReturnRate","n","Math","round","String","toFixed","newP0","params","objectSpread","d0","setD0","floor","linspace","_ref$from","from","to","steps","arr","x","push","getLinspaceTicks","data","desiredPoints","getLast","getAvg","reduce","t","c","abs","pause","ms","Promise","r","setTimeout","getInitialParams","k","R0","S0","V0","pow","getR","S","getS","_ref3","R","getMinPrice","_ref4","H","myP","getPriceR","_ref5","getSlippage","_ref6","deltaR","realizedPrice","spotPrice","getDeltaR_priceGrowth","_ref7","priceGrowth","getTxDistribution","_ref8","sum","mean","off","spread","i","randn_bm","vest_tokens","_ref9","week","halflife","cliff","rv_U","random","u","v","sqrt","log","cos","PI","getMedian","mid","nums","toConsumableArray","sort","b","keyHorizontal","keyVertical","tooltip","padding","SupplyVsDemandChart","_getInitialParams","R0_round","f","biggest","scaling","unit","_data$push","defineProperty","useTheme","formatter","toPrecision","toLocaleString","es6","debounce","right","bottom","strokeDasharray","interval","dataKey","tickFormatter","tick","fill","stroke","ticks","d","domain","content","payload","supply","reserve","price","toolTipData","name","isAnimationActive","type","fillOpacity","strokeWidth","textAnchor","viewBox","y","style","ResultParams","resultFields","keyVerticalLeft","keyVerticalRight","keyVerticalLeft2","PriceSimulationChart","priceTimeseries","withdrawFeeTimeseries","floorpriceTimeseries","ReferenceLabel","yAxisId","apply","slice","orientation","exit","weekNum","dark","cursor","transition","&:hover","popoverContainer","paper","maxWidth","breakpoints","md","SimplePopover","_React$useState","React","_React$useState2","anchorEl","setAnchorEl","handleClose","open","Boolean","HelpOutline_default","onClick","currentTarget","Popover","PaperProps","onClose","anchorOrigin","vertical","horizontal","transformOrigin","Box","mainContainer","paddingTop","simulationContainer","minHeight","box","boxButton","boxHeader","boxBorderBottom","initialRaise","boxChart","maxHeight","paddingLeft","boxPlaceholder","header","textAlign","button","background","descriptionContainer","& td","descriptionTitle","typography","fontWeightBold","descriptionName","descriptionPadding","parameterDescriptions","simulationParameterDescriptions","resultParameterDescriptions","createMuiTheme","error","red","A400","default","h6","console","ReactDOM","render","ThemeProvider","CssBaseline","setCurveParamsThrottle","useMemo","throttle","setPriceTimeseries","setWithdrawFeeTimeseries","setFloorpriceTimeseries","_useState9","_useState10","totalReserve","setTotalReserve","_useState11","_useState12","withdrawCount","setWithdrawCount","_useState13","_useState14","avgSlippage","setAvgSlippage","_useState15","_useState16","avgTxSize","setAvgTxSize","_useState17","_useState18","simulationActive","setSimulationActive","_useState19","_useState20","simulationRunning","setSimulationRunning","_startSimulation","asyncToGenerator","regenerator_default","mark","_callee2","wrap","_context2","prev","next","stop","this","canContinueSimulation","_simulateRandomDelta","_callee","R_t","S_t","p_t","wFee_t","slippage_t","avgTxSize_t","H_t","floorprice_t","numSteps","_loop","_context","txsWeek","u_lower","R_ratio","R_next","txs","slippage","txR","txsWithdraw","filter","tx","wFees","H_next","S_next","floorprice_next","_avgTxSize","abrupt","simulateRandomDelta","Container","fixed","sm","lg","Paper","SimulationInputParams_CurveDesignInputParams","src_SupplyVsDemandChart","direction","justify","Button","disabled","src_PriceSimulationChart","document","querySelector"],"mappings":"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","file":"static/js/main.d4e37a2e.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 cadCadLink =\n \"https://medium.com/block-science/cadcad-filling-a-critical-gap-in-open-source-data-science-fcd0d3faa8ed\";\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 subsubtitle: {\n color: theme.palette.text.secondary,\n opacity: 0.6\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 A narrative showcase of cadCAD\n 's capabilities\n \n \n );\n}\n","import { withStyles } from \"@material-ui/core/styles\";\nimport Slider from \"@material-ui/core/Slider\";\n\nexport default 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","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\";\nimport TextField from \"@material-ui/core/TextField\";\nimport NumberFormat from \"react-number-format\";\nimport { InputFieldInterface } from \"./types\";\nimport PrettoSlider from \"./PrettoSlider\";\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 secondaryColor: {\n color: theme.palette.secondary.light\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 inputFields,\n onChangeCommited\n}: {\n inputFields: InputFieldInterface[];\n onChangeCommited(): void;\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 secondaryColor,\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 onChangeCommited();\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={onChangeCommited}\n value={value}\n min={min}\n max={max}\n step={step}\n valueLabelFormat={value => format(value).replace(\"$\", \"\")}\n />\n \n \n );\n }\n )}\n
\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { InputFieldInterface, CurveParamsInterface } from \"./types\";\nimport InputParams from \"./InputParams\";\n\nexport default function CurveDesignInputParams({\n curveParams,\n setCurveParams\n}: {\n curveParams: CurveParamsInterface;\n setCurveParams(newCurveParams: any): void;\n}) {\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 [p1, setP1] = useState(0.3); // Return factor (.)\n const [wFee, setWFee] = useState(0.05); // friction coefficient (.)\n\n useEffect(() => {\n setTheta(curveParams.theta);\n setP0(curveParams.p0);\n setP1(curveParams.p1);\n setWFee(curveParams.wFee);\n }, [curveParams]);\n\n function _setP0(newP0: number) {\n setP0(newP0);\n if (p1 < newP0) setP1(newP0);\n else if (p1 > newP0 * maxReturnRate) setP1(newP0 * maxReturnRate);\n }\n\n function setParentCurveParams() {\n setCurveParams((params: CurveParamsInterface) => ({\n ...params,\n theta,\n p0,\n p1,\n wFee\n }));\n }\n\n const maxReturnRate = 10;\n\n const inputFields: InputFieldInterface[] = [\n {\n label: \"Allocation to funding pool\",\n value: theta,\n setter: setTheta,\n min: 0,\n max: 0.9,\n step: 0.01,\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: \"Hatch price (DAI/token)\",\n value: p0,\n setter: _setP0,\n min: 0.01,\n max: 1,\n step: 0.01,\n toText: (n: number) => String(+n.toFixed(2)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `$${n}`\n },\n {\n label: \"Post-hatch price (DAI/token)\",\n value: p1,\n setter: setP1,\n min: p0 || 0.1,\n max: Number((maxReturnRate * p0).toFixed(2)),\n step: 0.01,\n toText: (n: number) => String(+n.toFixed(2)),\n toNum: (n: string) => parseFloat(n),\n format: (n: number) => `$${n}`\n },\n {\n label: \"Exit tribute\",\n value: wFee,\n setter: setWFee,\n min: 0,\n max: 0.1,\n step: 0.001,\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 return (\n \n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { InputFieldInterface, CurveParamsInterface } from \"./types\";\nimport InputParams from \"./InputParams\";\n\nexport default function CurveDesignInputParams({\n curveParams,\n setCurveParams\n}: {\n curveParams: CurveParamsInterface;\n setCurveParams(newCurveParams: any): void;\n}) {\n const [d0, setD0] = useState(3e6); // Initial raise, d0 (DAI)\n\n useEffect(() => {\n setD0(curveParams.d0);\n }, [curveParams]);\n\n function setParentCurveParams() {\n setCurveParams((params: CurveParamsInterface) => ({\n ...params,\n d0\n }));\n }\n\n const inputFields: InputFieldInterface[] = [\n {\n label: \"Initial raise (DAI)\",\n value: d0,\n setter: setD0,\n min: 0.1e6,\n max: 10e6,\n step: 0.1e6,\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 secondaryColor: true\n }\n ];\n\n return (\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","/**\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 p1\n}: {\n d0: number;\n theta: number;\n p0: number;\n p1: number;\n}) {\n const k = p1 / p0 / (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\nexport function getR({ S, V0, k }: { S: number; V0: number; k: number }) {\n return S ** k / V0;\n}\n\nexport function getS({ R, V0, k }: { R: number; V0: number; k: number }) {\n return (V0 * R) ** (1 / k);\n}\n\n// compute the price if all that supply is burned\nexport function getMinPrice({\n S,\n H,\n V0,\n k\n}: {\n S: number;\n H: number;\n V0: number;\n k: number;\n}) {\n if (S === H) {\n const myR = getR({ S, V0, k });\n const myP = getPriceR({ R: myR, V0, k }); // numerical precision make complex numbers just suppress it\n return Math.abs(myP);\n } else {\n // compute the reserve if all that supply is burned\n const minR = getR({ S: S - H, V0, k });\n return getPriceR({ R: minR, V0, k });\n }\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// Price walk utils\n\n/**\n * Get deltaR for a given price growth factor\n */\nexport function getDeltaR_priceGrowth({\n R,\n k,\n priceGrowth\n}: {\n R: number;\n k: number;\n priceGrowth: number;\n}) {\n return -R + (priceGrowth * R ** (1 - 1 / k)) ** (k / (-1 + k));\n}\n\n/**\n * Computes a tx distribution using a normal distribution,\n * Given a sum of tx value and a number of transactions\n *\n * Demo: https://codepen.io/anon/pen/mNqJjv?editors=0010#0\n * Very quick: < 10ms for 10000 txs\n */\nexport function getTxDistribution({\n sum,\n num,\n spread\n}: {\n sum: number;\n num: number;\n spread: number;\n}) {\n const mean = sum / num;\n const off = mean * spread;\n const x: number[] = [];\n for (let i = 0; i < num; i++) {\n x.push(randn_bm(mean - off, mean + off));\n }\n return x;\n}\n\nexport function vest_tokens({\n week,\n H, // unvested_hatch_tokens\n halflife,\n cliff\n}: {\n week: number;\n H: number;\n halflife: number;\n cliff: number;\n}) {\n // check cliff\n if (week < cliff) {\n return 0;\n } else {\n // rate of release given half - life\n const vest_fraction = 0.5 ** (1 / halflife);\n // number of tokens that vest in this week\n return H * (1 - vest_fraction);\n }\n}\n\n// Statistics utils\n\n/**\n * Random variable uniformly distributed\n */\nexport function rv_U(min: number, max: number) {\n return Math.random() * (max - min) + min;\n}\n\n/**\n * Standard Normal variate using Box-Muller transform.\n * by https://stackoverflow.com/questions/25582882/javascript-math-random-normal-distribution-gaussian-bell-curve/36481059#36481059\n */\nfunction randn_bm(min: number, max: number) {\n var u = 0,\n v = 0;\n while (u === 0) u = Math.random(); //Converting [0,1) to (0,1)\n while (v === 0) v = Math.random();\n let num = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);\n\n num = num / 10.0 + 0.5; // Translate to 0 -> 1\n if (num > 1 || num < 0) num = randn_bm(min, max); // resample between 0 and 1 if out of range\n num *= max - min; // Stretch to fill range\n num += min; // offset to min\n return num;\n}\n\n// Array utils\n\nexport function getMedian(arr: number[]) {\n const mid = Math.floor(arr.length / 2);\n const nums = [...arr].sort((a, b) => a - b);\n return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n}\n\nexport function getSum(arr: number[]) {\n return arr.reduce((a, b) => a + b, 0);\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 { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { getLinspaceTicks } from \"./utils\";\nimport { getInitialParams, getPriceR } from \"./math\";\nimport { useTheme } from \"@material-ui/styles\";\n\nconst keyHorizontal = \"x\";\nconst keyVertical = \"Supply (tokens) / Reserve (DAI)\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n tooltip: {\n border: \"1px solid #313d47\",\n backgroundColor: \"#384b59\",\n padding: theme.spacing(1),\n color: \"#c7ccd2\"\n }\n })\n);\n\nfunction SupplyVsDemandChart({\n theta,\n d0,\n p0,\n p1\n}: {\n theta: number;\n d0: number;\n p0: number;\n p1: 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 {\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 p1\n });\n const R0_round = Math.round(R0);\n const S_of_R = (R: number) => S0 * (R / R0_round) ** (1 / k);\n\n // Function setup\n const f = S_of_R;\n const from = 0;\n const to = 4 * R0_round;\n const steps = 100 + 1; // Add 1 for the ticks to match\n const step = Math.round((to - from) / (steps - 1));\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 data = [];\n for (let i = 0; i < steps; i++) {\n const x = Math.round(from + step * i);\n data.push({\n [keyHorizontal]: x,\n [keyVertical]: f(x)\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n const classes = useStyles();\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 function CustomTooltip({ active, payload, label }: any) {\n if (active) {\n const supply = payload[0].value;\n const reserve = label;\n const price = getPriceR({ R: reserve, V0, k });\n const toolTipData: string[][] = [\n [\"Supply\", formatter(supply) + unit, \"tokens\"],\n [\"Reserve\", formatter(reserve) + unit, \"DAI\"],\n [\"Price\", price.toFixed(2), \"DAI/token\"]\n ];\n return (\n
\n \n \n {toolTipData.map(([name, value, unit]) => (\n \n \n \n \n \n ))}\n \n
{name}{value}{unit}
\n
\n );\n } else return null;\n }\n\n return (\n \n \n \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 } />\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 ReferenceLine,\n ResponsiveContainer,\n Tooltip\n} from \"recharts\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { useTheme } from \"@material-ui/styles\";\nimport { linspace } from \"./utils\";\n\nconst keyHorizontal = \"x\";\nconst keyVerticalLeft = \"Price (DAI/token)\";\nconst keyVerticalRight = \"Total exit tributes (DAI)\";\nconst keyVerticalLeft2 = \"Floor price (DAI/token)\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n tooltip: {\n border: \"1px solid #313d47\",\n backgroundColor: \"#384b59\",\n padding: theme.spacing(1),\n color: \"#c7ccd2\"\n }\n })\n);\n\nfunction PriceSimulationChart({\n priceTimeseries,\n withdrawFeeTimeseries,\n floorpriceTimeseries,\n p0,\n p1\n}: {\n priceTimeseries: number[];\n withdrawFeeTimeseries: number[];\n floorpriceTimeseries: number[];\n p0: number;\n p1: 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 data = [];\n for (let t = 0; t < priceTimeseries.length; t++) {\n data.push({\n [keyHorizontal]: t,\n [keyVerticalLeft]: priceTimeseries[t] || 0,\n [keyVerticalLeft2]: floorpriceTimeseries[t] || 0,\n [keyVerticalRight]: withdrawFeeTimeseries[t] || 0\n });\n }\n\n // Chart components\n\n const theme: any = useTheme();\n const classes = useStyles();\n\n function renderColorfulLegendText(value: string) {\n return {value};\n }\n\n const formatter = (n: number) => (+n.toPrecision(3)).toLocaleString();\n\n function ReferenceLabel(props: any) {\n const { textAnchor, viewBox, text } = props;\n return (\n \n {text}\n \n );\n }\n\n function CustomTooltip({ active, payload, label }: any) {\n if (active) {\n const price = payload[0].value;\n const floor = payload[1].value;\n const exit = payload[2].value;\n const weekNum = label;\n const toolTipData: string[][] = [\n [\"Price\", price.toFixed(2), \"DAI/tk\"],\n [\"Floor\", floor.toFixed(2), \"DAI/tk\"],\n [\"Exit t.\", formatter(exit), \"DAI\"],\n [\"Week\", weekNum, \"\"]\n ];\n\n return (\n
\n \n \n {toolTipData.map(([name, value, unit]) => (\n \n \n \n \n \n ))}\n \n
{name}{value}{unit}
\n
\n );\n } else return null;\n }\n\n return (\n \n \n \n \n\n {/* Price time evolution */}\n \n\n {/* Capital collected from withdraw fees - AXIS */}\n \n\n } />\n\n \n \n\n }\n />\n }\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 Box from \"@material-ui/core/Box\";\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 popoverContainer: {\n padding: theme.spacing(2)\n },\n paper: {\n backgroundColor: \"#384b59\",\n maxWidth: theme.breakpoints.values.md * 0.9,\n [`@media screen and (max-width: ${theme.breakpoints.values.md}px)`]: {\n maxWidth: \"90vw\"\n }\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\";\n// Components\nimport Header from \"./Header\";\nimport CurveDesignInputParams from \"./CurveDesignInputParams\";\nimport SimulationInputParams from \"./SimulationInputParams\";\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 getMinPrice,\n getS,\n vest_tokens,\n getR,\n getSlippage,\n getTxDistribution,\n getDeltaR_priceGrowth,\n rv_U,\n getMedian,\n getSum\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 simulationContainer: {\n minHeight: \"442px\"\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 },\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 boxBorderBottom: {\n borderBottom: \"1px solid #313d47\"\n },\n initialRaise: {\n justifyContent: \"space-between\"\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 boxPlaceholder: {\n padding: theme.spacing(3, 3),\n display: \"flex\",\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: theme.palette.text.secondary,\n opacity: 0.4\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)\", // Green gradient\n background: \"linear-gradient(290deg, #1880e0, #3873d8)\", // blue gradient\n color: \"white\"\n },\n // Descriptions\n descriptionContainer: {\n \"& > div:not(:last-child)\": {\n paddingBottom: theme.spacing(1),\n marginBottom: theme.spacing(1),\n borderBottom: \"1px solid #3f5463\"\n },\n \"& td\": {\n verticalAlign: \"top\",\n padding: theme.spacing(0.5)\n }\n },\n descriptionTitle: {\n fontWeight: theme.typography.fontWeightBold,\n padding: theme.spacing(0.5)\n },\n descriptionName: {\n fontWeight: theme.typography.fontWeightBold\n },\n descriptionPadding: {\n padding: theme.spacing(0.5)\n }\n })\n);\n\nconst parameterDescriptions = [\n {\n name: \"Initial raise\",\n text: \"Total funds raised in the hatch period of the ABC launch\"\n },\n {\n name: \"Allocation to funding pool\",\n text:\n \"The percentage of the funds raised in the Hatch sale that go directly into the project funding pool to compensate future work done in the project\"\n },\n {\n name: \"Hatch price\",\n text:\n \"The price paid per 'ABC token' by community members involved in hatching the project\"\n },\n {\n name: \"Post-hatch price\",\n text:\n \"The price of the 'ABC token' when the curve enters the open phase and is live for public participation\"\n },\n {\n name: \"Exit tribute\",\n text:\n \"The percentage of funds that are diverted to the project funding pool from community members who exit funds from the project by burning 'ABC tokens' in exchange for collateral\"\n }\n];\n\nconst simulationParameterDescriptions = [\n {\n name: \"Price\",\n text: \"Price of the token over time.\"\n },\n {\n name: \"Floor price\",\n text:\n \"Lower bound of the price guaranteed by the vesting of hatch tokens. It decreases over time as more hatch tokens are allowed to be traded\"\n },\n {\n name: \"Total exit tributes\",\n text:\n \"Cumulative sum of exit tributes collected from only exit /sell transactions\"\n }\n];\n\nconst resultParameterDescriptions = [\n {\n name: \"Total reserve\",\n text:\n \"Total DAI in the smart contract reserve at the end of the simulated period\"\n },\n {\n name: \"Funds generated from initial hatch\",\n text:\n \"Fraction of the funds (theta) raised during the hatch that go directly to the cause (analytic result)\"\n },\n {\n name: \"Funds generated from exit tributes\",\n text:\n \"Cumulative sum of exit tributes collected from only exit /sell transactions\"\n },\n {\n name: \"Average slippage\",\n text:\n \"Average of the slippage of each transaction occured during the simulation period\"\n }\n];\n\nexport default function App() {\n const [curveParams, setCurveParams] = useState({\n theta: 0.35, // fraction allocated to reserve (.)\n p0: 0.1, // Hatch sale price p0 (DAI / token)\n p1: 0.3, // Return factor (.)\n wFee: 0.05, // friction coefficient (.)\n d0: 3e6 // Initial raise, d0 (DAI)\n });\n\n const { d0, theta, p0, p1, 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, 250),\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 p1\n });\n\n const [priceTimeseries, setPriceTimeseries] = useState([0]);\n const [withdrawFeeTimeseries, setWithdrawFeeTimeseries] = useState([0]);\n const [floorpriceTimeseries, setFloorpriceTimeseries] = useState([0]);\n const [totalReserve, setTotalReserve] = useState(R0);\n const [withdrawCount, setWithdrawCount] = useState(0);\n const [avgSlippage, setAvgSlippage] = useState(0);\n const [avgTxSize, setAvgTxSize] = useState(0);\n // Simulation state variables\n const [simulationActive, setSimulationActive] = useState(false);\n const [simulationRunning, setSimulationRunning] = useState(false);\n\n useEffect(() => {\n setSimulationActive(false);\n }, [curveParams]);\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\n async function simulateRandomDelta() {\n const R_t: number[] = [R0];\n const S_t: number[] = [S0];\n const p_t: number[] = [getPriceR({ R: R0, V0, k })];\n const wFee_t: number[] = [0];\n const slippage_t: number[] = [];\n const avgTxSize_t: number[] = [];\n\n // hatchers tokens = S0[section added by Z]\n const H_t: number[] = [S0]; // total hatcher tokens not vested\n const floorprice_t: number[] = []; // initially the price is the floor as all tokens are hatcher tokens\n\n // Random walk\n const numSteps = 52;\n const u_min = 0.97;\n const u_max = 1.04;\n const tx_spread = 10;\n // vesting(should this be exposed in the app ?)\n const cliff = 8; // weeks before vesting starts ~2 months\n const halflife = 52; // 26 weeks, half life is ~6 months\n // percentage of the hatch tokens which vest per week(since that is our timescale in the sim)\n\n // numSteps = 52 take 8ms to run\n setSimulationRunning(true);\n for (let t = 0; t < numSteps; t++) {\n const txsWeek = rv_U(5, 2 * t + 5);\n\n const R = getLast(R_t);\n const S = getLast(S_t);\n const H = getLast(H_t);\n\n // enforce the effects of the unvested tokens not being burnable\n let u_lower;\n if (H > S) {\n u_lower = 1;\n } else {\n // compute the reserve if all that supply is burned\n const R_ratio = getR({ S: S - H, V0, k }) / R;\n u_lower = Math.max(1 - R_ratio, u_min);\n }\n const priceGrowth = rv_U(u_lower, u_max);\n\n const deltaR = getDeltaR_priceGrowth({ R, k, priceGrowth });\n const R_next = R + deltaR;\n\n const txs = getTxDistribution({\n sum: deltaR,\n num: txsWeek,\n spread: tx_spread\n });\n // Compute slippage\n const slippage_txs = txs.map(txR =>\n getSlippage({ R, deltaR: txR, V0, k })\n );\n const slippage = getMedian(slippage_txs);\n\n const txsWithdraw = txs.filter(tx => tx < 0);\n const wFees = -wFee * getSum(txsWithdraw);\n // txsWithdraw.reduce((t, c) => t + c, 0);\n\n // Vest\n const delta_H = vest_tokens({ week: t, H, halflife, cliff });\n const H_next = H - delta_H;\n\n // find floor price\n const S_next = getS({ R, V0, k });\n const floorprice_next = getMinPrice({\n S: S_next,\n H: S0 - H_next,\n V0,\n k\n });\n\n const _avgTxSize = getMedian(txsWithdraw);\n\n R_t.push(R_next);\n S_t.push(S_next);\n H_t.push(H_next);\n p_t.push(getPriceR({ R: R_next, V0, k }));\n slippage_t.push(slippage);\n avgTxSize_t.push(_avgTxSize);\n wFee_t.push(getLast(wFee_t) + wFees);\n\n floorprice_t.push(floorprice_next);\n setWithdrawCount(c => c + txsWithdraw.length);\n\n // Stop the simulation if it's no longer active\n if (!simulationActive || !canContinueSimulation) break;\n }\n\n // floorprice_t is missing one data point\n floorprice_t[floorprice_t.length] = floorprice_t[floorprice_t.length - 1];\n\n setPriceTimeseries(p_t);\n setWithdrawFeeTimeseries(wFee_t);\n setFloorpriceTimeseries(floorprice_t);\n setAvgSlippage(getAvg(slippage_t));\n setAvgTxSize(getAvg(avgTxSize_t));\n setTotalReserve(getLast(R_t));\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: `Total reserve`,\n value: (+totalReserve.toPrecision(3)).toLocaleString() + \" DAI\"\n },\n {\n label: `Funds generated from initial hatch`,\n value: Math.round(d0 * theta).toLocaleString() + \" DAI\"\n },\n {\n label: `Funds generated from exit tributes (${withdrawCount} txs)`,\n value:\n (+getLast(withdrawFeeTimeseries).toPrecision(3)).toLocaleString() +\n \" DAI\"\n },\n {\n label: `Average slippage (avg tx size ${Math.round(\n avgTxSize\n ).toLocaleString()} DAI)`,\n value: +(100 * avgSlippage).toFixed(3) + \"%\"\n }\n ];\n\n const classes = useStyles();\n\n return (\n <>\n
\n \n
\n \n
\n\n \n \n \n \n \n Curve Design\n \n
\n \n Parameters description:\n \n
\n \n \n {parameterDescriptions.map(({ name, text }) => (\n \n \n \n \n ))}\n \n
\n \n {name}\n \n \n {text}\n
\n \n }\n />\n
\n\n \n \n \n\n \n Run parameters\n \n\n \n \n \n
\n
\n\n \n \n \n Preview\n \n \n Visualization of the token bonding curve analytic\n function on a specific range of reserve [0, 4 * R0].\n This result is deterministic given the current set of\n parameters and will never change regardes of the\n campaign performance, it only shows how the price will\n react to reserve changes.\n \n \n }\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 \n {simulationActive ? (\n <>\n \n \n \n Simulation\n \n
\n \n This chart shows a 52 week simulation of discrete\n transactions interacting with the token bonding\n curve. Each transaction adds or substract reserve\n to the system, modifying the price over time. The\n frequency, size and direction of each transaction\n is computed from a set of bounded random\n functions.\n \n
\n\n \n \n {simulationParameterDescriptions.map(\n ({ name, text }) => (\n \n \n \n \n )\n )}\n \n
\n \n {name}\n \n \n {text}\n
\n \n }\n />\n
\n\n \n \n \n
\n
\n\n \n \n \n Results\n \n
\n \n Result parameters description:\n \n
\n \n \n {resultParameterDescriptions.map(\n ({ name, text }) => (\n \n \n \n \n )\n )}\n \n
\n \n {name}\n \n \n {text}\n
\n \n }\n />\n
\n\n \n \n \n
\n
\n \n ) : (\n \n \n \n \n Run a simulation to see results\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 light: \"#0f8bff\",\n dark: \"#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