Merge pull request #2870 from derekpierre/docs-overhaul
Initial overhaul of NuCypher Official Docspull/2877/head
|
@ -797,10 +797,10 @@
|
|||
inkscape:window-height="847"
|
||||
inkscape:window-width="1440"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:current-layer="g5131"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="1146.2484"
|
||||
inkscape:cx="1525.6608"
|
||||
inkscape:cy="741.41039"
|
||||
inkscape:cx="3553.5993"
|
||||
inkscape:zoom="0.26677337"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
|
@ -895,322 +895,284 @@
|
|||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path4907" />
|
||||
<g
|
||||
transform="matrix(2.6255904,0,0,2.6255904,717.57346,-3501.4322)"
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-7">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 294.2099,421.17453 37.11396,8.57588"
|
||||
id="path20777"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20791"
|
||||
d="m 311.74758,533.30988 49.51574,-21.87177"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 259.92903,515.20165 100.24612,-7.24732"
|
||||
id="path20789"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20787"
|
||||
d="M 370.90723,501.97156 388.97681,462.8481"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="M 307.14907,527.34317 382.27683,459.0685"
|
||||
id="path20785"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20783"
|
||||
d="m 343.37547,436.36707 39.67181,15.06137"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="M 299.18991,529.03075 251.27876,453.48222"
|
||||
id="path20781"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20779"
|
||||
d="M 252.55195,507.77935 243.7157,460.68617"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20775"
|
||||
d="m 259.17518,513.41776 29.30881,-89.17964"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 383.40483,428.46216 5.35376,20.51392 0.19914,0.76301"
|
||||
id="path20773"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20771"
|
||||
d="m 295.61611,416.79044 84.27253,5.00125"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 249.98265,449.26946 31.81553,-29.13148"
|
||||
id="path20767"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d=""
|
||||
id="path20749"
|
||||
inkscape:connector-curvature="0" />
|
||||
<circle
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="path20751"
|
||||
cx="252.85713"
|
||||
cy="514.86218"
|
||||
r="7.1428571" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="533.43359"
|
||||
cx="304.64285"
|
||||
id="circle20753"
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20755"
|
||||
cx="367.5"
|
||||
cy="507.7193"
|
||||
r="7.1428571" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="455.93359"
|
||||
cx="388.57144"
|
||||
id="circle20757"
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20759"
|
||||
cx="386.07144"
|
||||
cy="422.00504"
|
||||
r="7.1428571" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="417.00504"
|
||||
cx="288.21429"
|
||||
id="circle20761"
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20763"
|
||||
cx="243.92857"
|
||||
cy="453.79074"
|
||||
r="7.1428571" />
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="g5131"
|
||||
transform="translate(-378.14779,-1135.7137)">
|
||||
<image
|
||||
y="-1250.1744"
|
||||
x="1788.584"
|
||||
width="274.65036"
|
||||
height="274.65036"
|
||||
preserveAspectRatio="none"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAACXBIWXMAACE4AAAhOAFFljFgAAAA AXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAkHSURBVHgB7Z3teRNZEoXP7ZYE3p0fmgiwI8CO YOwIYCLARABEAI5gZiPARLBDBPZGYG0EiAy0zzOzMpK771S11NCSW+rvT533B8KibWT10am6VffD 4MCw1o6Xf+HYcXFqETw+sxZjY3AMeQyukefjvtcA0+DfzepRv/Y9fNVH+Z7p4CkmxpgZDgiDHqNi 8e7x0rh4Ljf4VJRxKk+PUS0zeVcn8sZORJj/WfqYHB2ZKXpKrwQUCGaBc3GTX0QsL3c5Sd3I65lg JajP7gi3fXKpzgsoCElzXDoDvBDRnKMLGNzCw6clcNt1d+qkgEKnkVf/pjOi2cVaTIMjc40O0ikB zef2eDTAK+vjLarPZepmKqHuduHhqkuu1AkBLef2XBLh9513m5SIkK5ldPdpeGRu0XJaLaBDE84j xJGsOFKbhdRKAR28cLYRIS09vG5jaGuVgDTHGTr4Tf76EuQRGtraliO1RkDe0r7vaXJcOsbBB3do rtACGheQhivHwce2FP06xFSq3BdNu5GDhljVcuxv8mm6oXhyoeH+izo3GqQRBwrqOS7+bVe9KVKc xtyodgcS13kjn5w7iqdU1I3uFvf2LWqmVgfSkCXCqf2XPCRkpPa7OzLvUBO1CIghq160+y/D/V/r CGmVCygQDxPlJqglL6pUQIs/7akzxA1Y22mKmb/ExegnM0FFVJZE2wf7iuJpnLHeA70XqIhKHEhf sOfhGqQ1uC4uzcB8QsmULiCKp71UIaJSBUTxtJ+yRVSagJgwd4ZSE+tSBLSehnEHiqcrzGSIf1bG EL/wKCys84Di6RJj+cDf6L1DQQo7kLQn2NfqKFqxlrbHGQpQyIHWvS2Kp6PovdN7iALkFpB21dkY 7T56D4t08XOFMCbNvSN3Up3LgZg0947xaraEzXxPMwsomPzOznrv0HxI6kOZp8dmCmHr0PUFpLdY HxdZFjJmEpD3zX6h+/Se6eCJOUl7ceoQxtB1MBwv5/ZD2otTORBD18GRelSWyoFEPI2uPSK1M14v MU8k0YHoPodLmoQ60YGGLj6CHCTBDikJ7BWQrlvnFisHjNz7QAN72CugNAok/SZJAzsFRPchAQku tFNAxkFlS0FIt9jnQrGjMI68yDZSFzqJqwvFOhDrPmSbAXAZ93ysA7HnRWKYuSOcbB/T8MiBHub2 kuIhMYy9/z8eVD0OYS6TZ7KDId5sP7URwqpOnq+eoBHef0t3XdrXV/bPK5u0ry8PEsZ+joaxDQca gnUfsp/lt81kejOEMXyRBBwHLza+Dv8STKhm5ZkkIRqJTr7/LqDg/C1CUhAdjUVD2AsQkgLrxgjI gEuUSToc88NsAgHp8N1SQCQlWmgO86BAQFL7oXhIJpb3qyO5AgFZjr5IRoxZmc4g+MLBc/Wlqqmy QrqPpirMTf2+dRBoBmESzT1+SFbWmnHWyRB32iBZGat2nId7ug/Jx/IvHMuQnnN/SE5cnDqcPEby ouZDAZHcOC6eOfoHCMmB7+Pnxk5tJt1HEuhnjvEZwkhuxgPUCOdE10OdFXDHGjoQyYcOwJgDkUJQ QKQQFBApBAVECkEBkUI4xmIKQnIgvbApHYgUwhEZzUBIDqSGOB1IMWiKmpb0cE50/3Cko/o/EJKD IAcyYBJN8uF7+EoBkdxo+uP4LiYgJAdBCBsO6UAkH4OnmDjr/e44lCdZmal2VoVEwzBGMrLWzGpz BR//BSEZCDUTCEj6YXQgkgnj4VYfAwG5T/EHCMnA0omEME2G2JUnaZHh+yQ8ued7N94HPoOQNEQG XT822TSrmEZIEnb5w2y+C8gdUUAkHe4/fmgl4kBSUKQLkSREIzsPW/EfmAeRBDx8in65eVrPEa5B yB6W2IxSGwJiGCN7EW1sH7z7eFK9xb9ASBxb4Ut5JKD1aIzdebLNdHBkrreffCQgDWPSKKMLkQ12 1Qlj14U9gMk02WTh4Sru+VgBBYkSk2myRtznejt5Dtm5MtXuUBw5PPyY5Dlkp4CGR+aWLkRUA4EW drB3bTxdiCRpYK+A6EIHToL7KIm7c9CFDpelh9dJ1yQKaK1ATnk9MPaNvDauQwr0UN6hgzvwXLGD YenjJI2AUm0wpT+I1enDQe71VRrxKKkcKMT7Zr/wdJ/eMx08MSdpL860xZ3vJydVpNtI6LrIcn0m AWlCbTndo7dkCV0hmUJY8J9YO/YXuLHgWas9I1PoCsm8S6tO91j4+BWcM9QnZllDV0iubX7V5nzL AmNf0HuZNXSFZA5hUZb39ncpOL0B6Sya0w6fmrfISSEBKTK0v2M+1E3kwz9xR+YMBSi8U73mQ9yo s5NMF16QyxaisAMpbHV0Dk2az/LmPVFKOSsjSKqXQRbPkVn7mem9KkM8SmmHrYx+MhOpVL8DaTdy j/ReoSRKCWFRFnN76Tj4CNI+pBUVt7arCKULSKGIWkgF4lEqOS9sJC903XhlTtQ8s6rEo1TiQCGL P+2pM8QNODpriiBhLjPn2abSEwv1hetwkXWiRpjqe1+leJTKj7zU4aIUGy90Z0+QWtAKszZHyxqq 76OWM1P1F3GfmDPOJaoefY+1PVGHeJRaD93Vpp10frVWxOS6fGb63hZpjOah0iR6F9r6GDnBpLRj kMJoyNK+Vl2uE6WRY7/XIe1Ep1CCFEJDlox0L5oQj9KIA0WhG+VGl1q9Tlp6XDWNOFAUulFmdAe5 K52/3LR4lMYdKIq6kQt8kDbIK5A4/pDh+bumwlUcrRJQSDC/yJVemsU5SLBLhm5y0QbH2abxEBaH fsIGI3NhdaXAIW8vo8KR90DfizaKR2mlA22znNtzSbIvDya0tdhxtumEgELCHMl18EsPR23B9sq6 Q26bcpwkOiWgKA9zewlXHKnreZKG6KD9sHkKTlforIBCgoQbIqIuiUlEoycj6eE2XRRNlM4LKIqu 2/cWOPd9vJQw97wt69V0Oov0qT7rbu9ddZpd9EpA26yXG51Kuf/ciKDEoVRQVU9u0xOPJnquuh6n ridi90kw2/RaQHGoSz3c41R+8WNNxB0Xz8KEXG548LgrQY9MjJvJNVNxlJnv4WvgMB4mw3/qc/0V Sxx/A+QddOAIZabNAAAAAElFTkSuQmCC "
|
||||
id="image4000-1" />
|
||||
<g
|
||||
transform="matrix(1.25,0,0,-1.25,-14.779929,760.11228)"
|
||||
inkscape:label="nucypher_coinmark"
|
||||
id="g20917">
|
||||
transform="matrix(2.6255904,0,0,2.6255904,1095.5662,-2360.5805)"
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-7-2">
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d=""
|
||||
id="path20749-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g20919"
|
||||
transform="matrix(0.10125892,0,0,0.10125892,239.54636,207.93507)">
|
||||
<g
|
||||
clip-path="url(#clipPath20923)"
|
||||
id="g20921">
|
||||
<g
|
||||
transform="translate(379.876,399.207)"
|
||||
id="g20927">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20929"
|
||||
style="fill:#1e65f3;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 0,0 -40.697,-19.307 c -0.869,-0.412 -1.24,-1.451 -0.827,-2.32 l 61.899,-130.478 c 23.028,-48.541 16.84,-85.367 -18.131,-101.957 -28.296,-13.423 -52.728,-4.058 -71.795,28.662 l 0.015,0.006 -73.293,154.497 c -29.713,62.633 -70.197,79.234 -118.217,56.453 -31.243,-14.821 -49.36,-41.311 -49.008,-74.937 0.019,-1.875 -2.507,-2.473 -3.311,-0.78 l -15.992,33.711 c -0.412,0.868 -1.451,1.239 -2.32,0.826 l -40.697,-19.306 c -0.869,-0.412 -1.239,-1.451 -0.827,-2.32 l 112.409,-236.948 c 0.412,-0.869 1.451,-1.239 2.32,-0.827 l 40.697,19.306 c 0.869,0.412 1.239,1.451 0.827,2.321 l -60.167,126.825 c -24.513,51.673 -19.864,89.046 17.717,106.874 28.843,13.683 51.258,4.483 71.395,-30.567 0.024,-0.044 0.048,-0.088 0.069,-0.133 l 72.564,-152.959 c 27.981,-58.981 71.49,-79.262 117.423,-57.472 35.5,16.841 50.218,42.189 49.363,75.536 -0.049,1.875 2.505,2.477 3.309,0.782 l 16.16,-34.063 c 0.412,-0.869 1.451,-1.239 2.32,-0.827 l 40.696,19.306 c 0.87,0.412 1.241,1.451 0.828,2.321 L 2.32,-0.827 C 1.907,0.042 0.869,0.412 0,0" />
|
||||
</g>
|
||||
</g>
|
||||
id="g4024">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20777-6"
|
||||
d="m 294.2099,421.17453 37.11396,8.57588"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 311.74758,533.30988 49.51574,-21.87177"
|
||||
id="path20791-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20789-5"
|
||||
d="m 259.92903,515.20165 100.24612,-7.24732"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="M 370.90723,501.97156 388.97681,462.8481"
|
||||
id="path20787-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20785-0"
|
||||
d="M 307.14907,527.34317 382.27683,459.0685"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 343.37547,436.36707 39.67181,15.06137"
|
||||
id="path20783-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20781-2"
|
||||
d="M 299.18991,529.03075 251.27876,453.48222"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="M 252.55195,507.77935 243.7157,460.68617"
|
||||
id="path20779-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 259.17518,513.41776 29.30881,-89.17964"
|
||||
id="path20775-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20773-7"
|
||||
d="m 383.40483,428.46216 5.35376,20.51392 0.19914,0.76301"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039"
|
||||
d="m 295.61611,416.79044 84.27253,5.00125"
|
||||
id="path20771-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path20767-7"
|
||||
d="m 249.98265,449.26946 31.81553,-29.13148"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#aaaaaa;stroke-width:0.599;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.898039" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="514.86218"
|
||||
cx="252.85713"
|
||||
id="path20751-5"
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20753-3"
|
||||
cx="304.64285"
|
||||
cy="533.43359"
|
||||
r="7.1428571" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="507.7193"
|
||||
cx="367.5"
|
||||
id="circle20755-9"
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20757-9"
|
||||
cx="388.57144"
|
||||
cy="455.93359"
|
||||
r="7.1428571" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="422.00504"
|
||||
cx="386.07144"
|
||||
id="circle20759-4"
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20761-9"
|
||||
cx="288.21429"
|
||||
cy="417.00504"
|
||||
r="7.1428571" />
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="453.79074"
|
||||
cx="243.92857"
|
||||
id="circle20763-1"
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
<circle
|
||||
style="fill:#7038f1;fill-opacity:1;fill-rule:evenodd;stroke:#7c47ee;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706"
|
||||
id="circle20938-5"
|
||||
cx="336.96429"
|
||||
cy="432.89789"
|
||||
r="7.1428571" />
|
||||
</g>
|
||||
</g>
|
||||
<circle
|
||||
r="7.1428571"
|
||||
cy="432.89789"
|
||||
cx="336.96429"
|
||||
id="circle20938"
|
||||
style="fill:#b4c9f3;fill-opacity:1;fill-rule:evenodd;stroke:#6994ec;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.964706" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(91.66254,-1135.7137)"
|
||||
id="text7483"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1">
|
||||
<path
|
||||
id="path5244"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1238.0664,-931.47028 h 5.5 l 15.7,24.4 q 0.35,0.55 0.65,1.05 0.25,0.4 0.5,0.9 0.25,0.45 0.35,0.7 v -27.05 h 5.2 v 35 h -5.5 l -15.7,-24.4 q -0.35,-0.55 -0.65,-1.05 -0.25,-0.4 -0.5,-0.85 -0.25,-0.45 -0.35,-0.75 v 27.05 h -5.2 z" />
|
||||
<path
|
||||
id="path5246"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1273.4539,-921.27028 h 5.1 v 14.9 q 0,2.9 1.4,4.4 1.45,1.5 4.1,1.5 1.35,0 2.55,-0.55 1.2,-0.55 2.05,-1.5 0.9,-1 1.4,-2.35 0.5,-1.4 0.5,-3 v -13.4 h 5.1 v 24.8 h -5.1 v -4 q -1.2,2.25 -3.3,3.5 -2.05,1.2 -4.75,1.2 -1.8,0 -3.45,-0.6 -1.65,-0.55 -2.9,-1.7 -1.25,-1.2 -2,-3 -0.7,-1.8 -0.7,-4.25 z" />
|
||||
<path
|
||||
id="path5248"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1334.3531,-904.97028 q -1.35,2.25 -2.85,3.95 -1.5,1.7 -3.35,2.9 -1.8,1.15 -4.05,1.75 -2.2,0.6 -5.05,0.6 -3.75,0 -6.95,-1.35 -3.15,-1.35 -5.5,-3.75 -2.3,-2.4 -3.6,-5.75 -1.3,-3.35 -1.3,-7.35 0,-4 1.35,-7.35 1.4,-3.35 3.8,-5.75 2.4,-2.4 5.6,-3.75 3.2,-1.35 6.85,-1.35 2.7,0 5,0.7 2.35,0.65 4.25,1.85 1.9,1.2 3.35,2.85 1.45,1.65 2.35,3.65 l -4.3,3.1 q -1.9,-3.65 -4.55,-5.45 -2.6,-1.8 -6.2,-1.8 -2.5,0 -4.7,1 -2.15,1 -3.8,2.8 -1.6,1.75 -2.55,4.2 -0.95,2.4 -0.95,5.3 0,2.85 0.9,5.3 0.9,2.4 2.5,4.2 1.6,1.8 3.75,2.8 2.2,1 4.8,1 3.55,0 6.3,-1.75 2.75,-1.75 4.75,-5.5 z" />
|
||||
<path
|
||||
id="path5250"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1340.896,-891.12028 q 0.45,0.2 1,0.35 0.6,0.15 1.25,0.15 1,0 1.65,-0.5 0.65,-0.45 1.35,-2.15 l 1.15,-3.05 -10.1,-24.95 h 5.85 l 7,17.9 6.95,-17.9 h 5.65 l -12,29.8 q -1.2,3.05 -2.95,4.3 -1.75,1.25 -4,1.25 -1,0 -1.95,-0.15 -0.95,-0.15 -1.65,-0.4 z" />
|
||||
<path
|
||||
id="path5252"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1366.2273,-921.27028 h 5.1 v 3.8 q 1.15,-1.85 3.5,-3.15 2.4,-1.35 5.3,-1.35 2.3,0 4.4,0.9 2.1,0.9 3.65,2.6 1.55,1.65 2.45,4.1 0.95,2.45 0.95,5.5 0,3 -0.95,5.45 -0.9,2.4 -2.5,4.1 -1.6,1.7 -3.8,2.65 -2.15,0.9 -4.65,0.9 -2.7,0 -4.95,-1.1 -2.2,-1.1 -3.4,-3 v 13.6 h -5.1 z m 12.45,4 q -1.6,0 -3,0.6 -1.4,0.6 -2.45,1.75 -1.05,1.1 -1.65,2.65 -0.6,1.55 -0.6,3.4 0,1.9 0.6,3.45 0.6,1.5 1.65,2.65 1.05,1.1 2.45,1.7 1.4,0.6 3,0.6 1.6,0 3,-0.6 1.4,-0.6 2.45,-1.7 1.05,-1.15 1.65,-2.65 0.6,-1.55 0.6,-3.45 0,-1.85 -0.6,-3.4 -0.6,-1.55 -1.65,-2.65 -1.05,-1.15 -2.45,-1.75 -1.4,-0.6 -3,-0.6 z" />
|
||||
<path
|
||||
id="path5254"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1419.489,-896.47028 h -5.1 v -15.2 q 0,-2.7 -1.5,-4.15 -1.45,-1.45 -4,-1.45 -1.35,0 -2.6,0.55 -1.25,0.55 -2.2,1.55 -0.9,1 -1.45,2.45 -0.55,1.4 -0.55,3.15 v 13.1 h -5.1 v -35 h 5.1 v 14.35 q 1.4,-2.2 3.65,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.8,1.65 1.2,1.1 1.9,2.75 0.7,1.6 0.7,3.75 z" />
|
||||
<path
|
||||
id="path5256"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1429.7382,-907.77028 q 0.05,1.65 0.6,3.05 0.6,1.35 1.6,2.4 1,1 2.35,1.55 1.35,0.55 3,0.55 1.5,0 2.65,-0.4 1.15,-0.4 2,-1.05 0.9,-0.7 1.55,-1.65 0.65,-0.95 1.2,-2.05 l 3.95,2.35 q -1.75,3.6 -4.5,5.45 -2.75,1.8 -7,1.8 -2.55,0 -4.85,-0.95 -2.25,-0.95 -3.95,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1,-2.45 2.7,-4.15 1.75,-1.75 4.05,-2.7 2.35,-0.95 5,-0.95 2.7,0 4.9,0.95 2.2,0.9 3.75,2.55 1.6,1.65 2.45,3.95 0.9,2.25 0.9,4.95 v 1.8 z m 7.55,-10.1 q -1.4,0 -2.65,0.5 -1.2,0.45 -2.2,1.3 -0.95,0.8 -1.65,1.95 -0.7,1.1 -1.05,2.45 h 14.8 q -0.15,-1.5 -0.85,-2.65 -0.65,-1.2 -1.65,-1.95 -1,-0.8 -2.25,-1.2 -1.2,-0.4 -2.5,-0.4 z" />
|
||||
<path
|
||||
id="path5258"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1468.2468,-916.87028 q -1,-0.3 -1.95,-0.3 -1.35,0 -2.5,0.6 -1.15,0.55 -2,1.6 -0.8,1 -1.25,2.4 -0.45,1.4 -0.45,3.05 v 13.05 h -5.1 v -24.8 h 5.1 v 4.2 q 1,-2.2 2.8,-3.55 1.8,-1.35 4.35,-1.35 0.5,0 0.9,0.1 0.45,0.05 0.95,0.15 z" />
|
||||
<path
|
||||
id="path5260"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1487.6757,-931.47028 h 5.5 l 15.7,24.4 q 0.35,0.55 0.65,1.05 0.25,0.4 0.5,0.9 0.25,0.45 0.35,0.7 v -27.05 h 5.2 v 35 h -5.5 l -15.7,-24.4 q -0.35,-0.55 -0.65,-1.05 -0.25,-0.4 -0.5,-0.85 -0.25,-0.45 -0.35,-0.75 v 27.05 h -5.2 z" />
|
||||
<path
|
||||
id="path5262"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1526.2226,-907.77028 q 0.05,1.65 0.6,3.05 0.6,1.35 1.6,2.4 1,1 2.35,1.55 1.35,0.55 3,0.55 1.5,0 2.65,-0.4 1.15,-0.4 2,-1.05 0.9,-0.7 1.55,-1.65 0.65,-0.95 1.2,-2.05 l 3.95,2.35 q -1.75,3.6 -4.5,5.45 -2.75,1.8 -7,1.8 -2.55,0 -4.85,-0.95 -2.25,-0.95 -3.95,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1,-2.45 2.7,-4.15 1.75,-1.75 4.05,-2.7 2.35,-0.95 5,-0.95 2.7,0 4.9,0.95 2.2,0.9 3.75,2.55 1.6,1.65 2.45,3.95 0.9,2.25 0.9,4.95 v 1.8 z m 7.55,-10.1 q -1.4,0 -2.65,0.5 -1.2,0.45 -2.2,1.3 -0.95,0.8 -1.65,1.95 -0.7,1.1 -1.05,2.45 h 14.8 q -0.15,-1.5 -0.85,-2.65 -0.65,-1.2 -1.65,-1.95 -1,-0.8 -2.25,-1.2 -1.2,-0.4 -2.5,-0.4 z" />
|
||||
<path
|
||||
id="path5264"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1548.7453,-921.27028 h 4 v -6.7 h 5.1 v 6.7 h 5.55 v 4.1 h -5.55 v 13.15 q 0,1.85 0.8,2.75 0.8,0.9 2.6,0.9 0.4,0 0.9,-0.1 0.55,-0.1 0.95,-0.2 l 0.45,4.3 q -0.7,0.25 -1.65,0.4 -0.95,0.2 -2.05,0.2 -1.4,0 -2.7,-0.35 -1.3,-0.35 -2.3,-1.2 -0.95,-0.85 -1.55,-2.25 -0.55,-1.45 -0.55,-3.55 v -14.05 h -4 z" />
|
||||
<path
|
||||
id="path5266"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1591.5859,-903.07028 4.5,-18.2 h 5.1 l -6.95,24.8 h -5.2 l -5,-18.4 -5,18.4 h -5.2 l -6.95,-24.8 h 5.1 l 4.5,18.2 5,-18.2 h 5.1 z" />
|
||||
<path
|
||||
id="path5268"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1629.3609,-908.87028 q 0,3.25 -1.15,5.7 -1.15,2.45 -3.05,4.1 -1.85,1.65 -4.25,2.5 -2.35,0.8 -4.8,0.8 -2.45,0 -4.85,-0.8 -2.35,-0.85 -4.25,-2.5 -1.85,-1.65 -3,-4.1 -1.15,-2.45 -1.15,-5.7 0,-3.2 1.15,-5.65 1.15,-2.45 3,-4.1 1.9,-1.65 4.25,-2.5 2.4,-0.85 4.85,-0.85 2.45,0 4.8,0.85 2.4,0.85 4.25,2.5 1.9,1.65 3.05,4.1 1.15,2.45 1.15,5.65 z m -13.25,8.4 q 1.65,0 3.1,-0.6 1.45,-0.6 2.55,-1.7 1.1,-1.1 1.75,-2.65 0.65,-1.55 0.65,-3.45 0,-1.9 -0.65,-3.45 -0.65,-1.55 -1.75,-2.65 -1.1,-1.1 -2.55,-1.7 -1.45,-0.6 -3.1,-0.6 -1.65,0 -3.1,0.6 -1.45,0.6 -2.55,1.7 -1.1,1.1 -1.75,2.65 -0.65,1.55 -0.65,3.45 0,1.9 0.65,3.45 0.65,1.55 1.75,2.65 1.1,1.1 2.55,1.7 1.45,0.6 3.1,0.6 z" />
|
||||
<path
|
||||
id="path5270"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1648.032,-916.87028 q -1,-0.3 -1.95,-0.3 -1.35,0 -2.5,0.6 -1.15,0.55 -2,1.6 -0.8,1 -1.25,2.4 -0.45,1.4 -0.45,3.05 v 13.05 h -5.1 v -24.8 h 5.1 v 4.2 q 1,-2.2 2.8,-3.55 1.8,-1.35 4.35,-1.35 0.5,0 0.9,0.1 0.45,0.05 0.95,0.15 z" />
|
||||
<path
|
||||
id="path5272"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1658.2414,-912.92028 8.45,-8.35 h 6.25 l -8.75,8.6 10.25,16.2 h -5.95 l -7.95,-12.6 -2.3,2.3 v 10.3 h -5.1 v -35 h 5.1 z" />
|
||||
<path
|
||||
id="path5274"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1361.3222,-826.57028 q -2.25,-4.05 -3.8,-9.35 -1.5,-5.35 -1.5,-11.85 0,-6.5 1.5,-11.8 1.55,-5.35 3.8,-9.4 h 4.75 q -1.05,1.95 -1.95,4.5 -0.85,2.5 -1.5,5.3 -0.6,2.75 -0.95,5.7 -0.35,2.95 -0.35,5.7 0,2.8 0.35,5.75 0.35,2.9 0.95,5.7 0.65,2.75 1.5,5.25 0.9,2.55 1.95,4.5 z" />
|
||||
<path
|
||||
id="path5276"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1401.0957,-846.42028 q 0,3.15 -1.05,5.6 -1,2.45 -2.85,4.15 -1.8,1.65 -4.3,2.55 -2.5,0.85 -5.45,0.85 -2.95,0 -5.45,-0.85 -2.5,-0.9 -4.35,-2.55 -1.8,-1.7 -2.85,-4.15 -1,-2.45 -1,-5.6 v -22.55 h 5.4 v 22.4 q 0,1.85 0.55,3.4 0.55,1.5 1.6,2.65 1.1,1.1 2.6,1.75 1.55,0.6 3.5,0.6 1.95,0 3.45,-0.6 1.55,-0.65 2.6,-1.75 1.1,-1.15 1.65,-2.65 0.55,-1.55 0.55,-3.4 v -22.4 h 5.4 z" />
|
||||
<path
|
||||
id="path5278"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1421.323,-854.37028 q -1,-0.3 -1.95,-0.3 -1.35,0 -2.5,0.6 -1.15,0.55 -2,1.6 -0.8,1 -1.25,2.4 -0.45,1.4 -0.45,3.05 v 13.05 h -5.1 v -24.8 h 5.1 v 4.2 q 1,-2.2 2.8,-3.55 1.8,-1.35 4.35,-1.35 0.5,0 0.9,0.1 0.45,0.05 0.95,0.15 z" />
|
||||
<path
|
||||
id="path5281"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1430.1558,-852.77028 q 0,1.6 1.6,2.5 1.6,0.9 4.6,1.45 4.25,0.85 6.3,2.6 2.05,1.75 2.05,4.9 0,1.65 -0.65,3.15 -0.65,1.45 -1.9,2.55 -1.2,1.05 -3,1.7 -1.75,0.65 -4.05,0.65 -2.2,0 -4,-0.6 -1.75,-0.6 -3.1,-1.6 -1.35,-1 -2.35,-2.35 -0.95,-1.35 -1.5,-2.8 l 4.15,-2.6 q 0.9,2.45 2.6,4.05 1.7,1.55 4.25,1.55 1.95,0 3.3,-0.95 1.4,-1 1.4,-2.6 0,-1.6 -1.45,-2.4 -1.4,-0.85 -4.4,-1.45 -1.75,-0.35 -3.3,-0.95 -1.5,-0.6 -2.65,-1.5 -1.15,-0.9 -1.85,-2.15 -0.65,-1.25 -0.65,-2.9 0,-1.65 0.7,-2.95 0.75,-1.3 1.95,-2.2 1.25,-0.9 2.85,-1.35 1.6,-0.45 3.35,-0.45 3.95,0 6.3,1.55 2.35,1.55 3.65,4.6 l -3.75,2.2 q -0.85,-2.25 -2.5,-3.35 -1.6,-1.1 -3.6,-1.1 -1.75,0 -3.05,0.75 -1.3,0.75 -1.3,2.05 z" />
|
||||
<path
|
||||
id="path5283"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1450.2605,-858.77028 h 5.1 v 14.9 q 0,2.9 1.4,4.4 1.45,1.5 4.1,1.5 1.35,0 2.55,-0.55 1.2,-0.55 2.05,-1.5 0.9,-1 1.4,-2.35 0.5,-1.4 0.5,-3 v -13.4 h 5.1 v 24.8 h -5.1 v -4 q -1.2,2.25 -3.3,3.5 -2.05,1.2 -4.75,1.2 -1.8,0 -3.45,-0.6 -1.65,-0.55 -2.9,-1.7 -1.25,-1.2 -2,-3 -0.7,-1.8 -0.7,-4.25 z" />
|
||||
<path
|
||||
id="path5285"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1479.4597,-868.97028 h 5.1 v 35 h -5.1 z" />
|
||||
<path
|
||||
id="path5287"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1508.0808,-833.97028 q -0.45,-0.55 -0.9,-1.55 -0.4,-1.05 -0.5,-2.8 -1.2,2.5 -3.35,3.8 -2.15,1.25 -4.9,1.25 -1.9,0 -3.45,-0.55 -1.55,-0.55 -2.65,-1.55 -1.1,-1.05 -1.75,-2.45 -0.6,-1.4 -0.6,-3.1 0,-1.85 0.7,-3.25 0.7,-1.45 1.9,-2.4 1.2,-1 2.75,-1.6 1.6,-0.6 3.4,-0.9 l 7.85,-1.25 v -1.05 q 0,-4.3 -5.2,-4.3 -2.65,0 -3.9,1 -1.25,0.95 -1.25,2.25 0,0.2 0,0.35 0,0.1 0.1,0.4 l -4.55,1.55 q -0.4,-0.95 -0.4,-2 0,-1.45 0.65,-2.75 0.7,-1.35 2,-2.35 1.3,-1.05 3.15,-1.65 1.85,-0.6 4.2,-0.6 5.1,0 7.7,2.2 2.6,2.15 2.6,6.2 v 10.9 q 0,2.15 0.3,3.5 0.35,1.3 1.2,2.7 z m -8.85,-3.55 q 1.65,0 3,-0.6 1.4,-0.65 2.35,-1.75 0.95,-1.15 1.45,-2.65 0.55,-1.55 0.55,-3.35 v -0.7 l -6.7,1.15 q -2.35,0.4 -3.6,1.45 -1.2,1 -1.2,2.75 0,1.7 1.1,2.7 1.15,1 3.05,1 z" />
|
||||
<path
|
||||
id="path5289"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1522.6363,-852.77028 q 0,1.6 1.6,2.5 1.6,0.9 4.6,1.45 4.25,0.85 6.3,2.6 2.05,1.75 2.05,4.9 0,1.65 -0.65,3.15 -0.65,1.45 -1.9,2.55 -1.2,1.05 -3,1.7 -1.75,0.65 -4.05,0.65 -2.2,0 -4,-0.6 -1.75,-0.6 -3.1,-1.6 -1.35,-1 -2.35,-2.35 -0.95,-1.35 -1.5,-2.8 l 4.15,-2.6 q 0.9,2.45 2.6,4.05 1.7,1.55 4.25,1.55 1.95,0 3.3,-0.95 1.4,-1 1.4,-2.6 0,-1.6 -1.45,-2.4 -1.4,-0.85 -4.4,-1.45 -1.75,-0.35 -3.3,-0.95 -1.5,-0.6 -2.65,-1.5 -1.15,-0.9 -1.85,-2.15 -0.65,-1.25 -0.65,-2.9 0,-1.65 0.7,-2.95 0.75,-1.3 1.95,-2.2 1.25,-0.9 2.85,-1.35 1.6,-0.45 3.35,-0.45 3.95,0 6.3,1.55 2.35,1.55 3.65,4.6 l -3.75,2.2 q -0.85,-2.25 -2.5,-3.35 -1.6,-1.1 -3.6,-1.1 -1.75,0 -3.05,0.75 -1.3,0.75 -1.3,2.05 z" />
|
||||
<path
|
||||
id="path5291"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;writing-mode:lr-tb;text-anchor:middle"
|
||||
d="m 1543.441,-826.57028 q 1.05,-1.95 1.9,-4.5 0.9,-2.5 1.5,-5.25 0.65,-2.8 1,-5.7 0.35,-2.95 0.35,-5.75 0,-2.75 -0.35,-5.7 -0.35,-2.95 -1,-5.7 -0.6,-2.8 -1.5,-5.3 -0.85,-2.55 -1.9,-4.5 h 4.75 q 2.25,4.05 3.75,9.4 1.55,5.3 1.55,11.8 0,6.5 -1.55,11.85 -1.5,5.3 -3.75,9.35 z" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-314.77606,13.125)"
|
||||
id="g9758">
|
||||
<path
|
||||
id="path5294"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1755.2855,-1647.8735 h 23 v 4.8 h -17.6 v 9.7 h 16.2 v 4.8 h -16.2 v 10.9 h 17.75 v 4.8 h -23.15 z" />
|
||||
<path
|
||||
id="path5296"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1782.8589,-1637.6735 h 4 v -6.7 h 5.1 v 6.7 h 5.55 v 4.1 h -5.55 v 13.15 q 0,1.85 0.8,2.75 0.8,0.9 2.6,0.9 0.4,0 0.9,-0.1 0.55,-0.1 0.95,-0.2 l 0.45,4.3 q -0.7,0.25 -1.65,0.4 -0.95,0.2 -2.05,0.2 -1.4,0 -2.7,-0.35 -1.3,-0.35 -2.3,-1.2 -0.95,-0.85 -1.55,-2.25 -0.55,-1.45 -0.55,-3.55 v -14.05 h -4 z" />
|
||||
<path
|
||||
id="path5298"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1825.2824,-1612.8735 h -5.1 v -15.2 q 0,-2.7 -1.5,-4.15 -1.45,-1.45 -4,-1.45 -1.35,0 -2.6,0.55 -1.25,0.55 -2.2,1.55 -0.9,1 -1.45,2.45 -0.55,1.4 -0.55,3.15 v 13.1 h -5.1 v -35 h 5.1 v 14.35 q 1.4,-2.2 3.65,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.8,1.65 1.2,1.1 1.9,2.75 0.7,1.6 0.7,3.75 z" />
|
||||
<path
|
||||
id="path5300"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1835.5316,-1624.1735 q 0.05,1.65 0.6,3.05 0.6,1.35 1.6,2.4 1,1 2.35,1.55 1.35,0.55 3,0.55 1.5,0 2.65,-0.4 1.15,-0.4 2,-1.05 0.9,-0.7 1.55,-1.65 0.65,-0.95 1.2,-2.05 l 3.95,2.35 q -1.75,3.6 -4.5,5.45 -2.75,1.8 -7,1.8 -2.55,0 -4.85,-0.95 -2.25,-0.95 -3.95,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1,-2.45 2.7,-4.15 1.75,-1.75 4.05,-2.7 2.35,-0.95 5,-0.95 2.7,0 4.9,0.95 2.2,0.9 3.75,2.55 1.6,1.65 2.45,3.95 0.9,2.25 0.9,4.95 v 1.8 z m 7.55,-10.1 q -1.4,0 -2.65,0.5 -1.2,0.45 -2.2,1.3 -0.95,0.8 -1.65,1.95 -0.7,1.1 -1.05,2.45 h 14.8 q -0.15,-1.5 -0.85,-2.65 -0.65,-1.2 -1.65,-1.95 -1,-0.8 -2.25,-1.2 -1.2,-0.4 -2.5,-0.4 z" />
|
||||
<path
|
||||
id="path5302"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1874.0402,-1633.2735 q -1,-0.3 -1.95,-0.3 -1.35,0 -2.5,0.6 -1.15,0.55 -2,1.6 -0.8,1 -1.25,2.4 -0.45,1.4 -0.45,3.05 v 13.05 h -5.1 v -24.8 h 5.1 v 4.2 q 1,-2.2 2.8,-3.55 1.8,-1.35 4.35,-1.35 0.5,0 0.9,0.1 0.45,0.05 0.95,0.15 z" />
|
||||
<path
|
||||
id="path5304"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1881.723,-1624.1735 q 0.05,1.65 0.6,3.05 0.6,1.35 1.6,2.4 1,1 2.35,1.55 1.35,0.55 3,0.55 1.5,0 2.65,-0.4 1.15,-0.4 2,-1.05 0.9,-0.7 1.55,-1.65 0.65,-0.95 1.2,-2.05 l 3.95,2.35 q -1.75,3.6 -4.5,5.45 -2.75,1.8 -7,1.8 -2.55,0 -4.85,-0.95 -2.25,-0.95 -3.95,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1,-2.45 2.7,-4.15 1.75,-1.75 4.05,-2.7 2.35,-0.95 5,-0.95 2.7,0 4.9,0.95 2.2,0.9 3.75,2.55 1.6,1.65 2.45,3.95 0.9,2.25 0.9,4.95 v 1.8 z m 7.55,-10.1 q -1.4,0 -2.65,0.5 -1.2,0.45 -2.2,1.3 -0.95,0.8 -1.65,1.95 -0.7,1.1 -1.05,2.45 h 14.8 q -0.15,-1.5 -0.85,-2.65 -0.65,-1.2 -1.65,-1.95 -1,-0.8 -2.25,-1.2 -1.2,-0.4 -2.5,-0.4 z" />
|
||||
<path
|
||||
id="path5306"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1906.3956,-1637.6735 h 5.1 v 14.9 q 0,2.9 1.4,4.4 1.45,1.5 4.1,1.5 1.35,0 2.55,-0.55 1.2,-0.55 2.05,-1.5 0.9,-1 1.4,-2.35 0.5,-1.4 0.5,-3 v -13.4 h 5.1 v 24.8 h -5.1 v -4 q -1.2,2.25 -3.3,3.5 -2.05,1.2 -4.75,1.2 -1.8,0 -3.45,-0.6 -1.65,-0.55 -2.9,-1.7 -1.25,-1.2 -2,-3 -0.7,-1.8 -0.7,-4.25 z" />
|
||||
<path
|
||||
id="path5308"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1970.0519,-1612.8735 h -5.1 v -16.4 q 0,-2.15 -1.05,-3.35 -1,-1.25 -3.25,-1.25 -2.25,0 -3.85,1.75 -1.6,1.7 -1.6,5.6 v 13.65 h -5.1 v -16.25 q 0,-2.1 -1.05,-3.4 -1,-1.35 -3.05,-1.35 -2.25,0 -3.95,1.85 -1.65,1.8 -1.65,5.5 v 13.65 h -5.1 v -24.8 h 5.1 v 3.55 q 1.15,-1.95 3.1,-3.1 1.95,-1.15 4.2,-1.15 2.55,0 4.25,1.1 1.75,1.1 2.55,3.3 1.3,-2.25 3.3,-3.3 2.05,-1.1 4.6,-1.1 3.55,0 5.6,2.05 2.05,2 2.05,5.3 z" />
|
||||
<path
|
||||
id="path5310"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1741.223,-1585.3735 h 13.6 q 5.25,0 8.15,2.3 2.95,2.3 2.95,6.2 0,1.45 -0.45,2.65 -0.45,1.2 -1.2,2.15 -0.75,0.9 -1.75,1.6 -0.95,0.7 -2,1.15 1.45,0.55 2.7,1.3 1.25,0.75 2.15,1.8 0.95,1 1.45,2.35 0.55,1.35 0.55,3.1 0,2.45 -1,4.4 -1,1.9 -2.7,3.25 -1.65,1.35 -3.9,2.05 -2.25,0.7 -4.75,0.7 h -13.8 z m 5.4,30.3 h 7.85 q 3.45,0 5.4,-1.4 2,-1.4 2,-4.35 0,-2.95 -2,-4.35 -1.95,-1.4 -5.4,-1.4 h -7.85 z m 0,-16.2 h 7.8 q 2.95,0 4.6,-1.1 1.7,-1.1 1.7,-3.6 0,-2.5 -1.7,-3.6 -1.65,-1.1 -4.6,-1.1 h -7.8 z" />
|
||||
<path
|
||||
id="path5312"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1772.7042,-1585.3735 h 5.1 v 35 h -5.1 z" />
|
||||
<path
|
||||
id="path5314"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1809.7636,-1562.7735 q 0,3.25 -1.15,5.7 -1.15,2.45 -3.05,4.1 -1.85,1.65 -4.25,2.5 -2.35,0.8 -4.8,0.8 -2.45,0 -4.85,-0.8 -2.35,-0.85 -4.25,-2.5 -1.85,-1.65 -3,-4.1 -1.15,-2.45 -1.15,-5.7 0,-3.2 1.15,-5.65 1.15,-2.45 3,-4.1 1.9,-1.65 4.25,-2.5 2.4,-0.85 4.85,-0.85 2.45,0 4.8,0.85 2.4,0.85 4.25,2.5 1.9,1.65 3.05,4.1 1.15,2.45 1.15,5.65 z m -13.25,8.4 q 1.65,0 3.1,-0.6 1.45,-0.6 2.55,-1.7 1.1,-1.1 1.75,-2.65 0.65,-1.55 0.65,-3.45 0,-1.9 -0.65,-3.45 -0.65,-1.55 -1.75,-2.65 -1.1,-1.1 -2.55,-1.7 -1.45,-0.6 -3.1,-0.6 -1.65,0 -3.1,0.6 -1.45,0.6 -2.55,1.7 -1.1,1.1 -1.75,2.65 -0.65,1.55 -0.65,3.45 0,1.9 0.65,3.45 0.65,1.55 1.75,2.65 1.1,1.1 2.55,1.7 1.45,0.6 3.1,0.6 z" />
|
||||
<path
|
||||
id="path5316"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1837.8847,-1556.8235 q -1.75,3.5 -4.65,5.35 -2.85,1.8 -6.75,1.8 -2.7,0 -5.05,-0.95 -2.35,-0.95 -4.1,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1.05,-2.45 2.8,-4.15 1.8,-1.75 4.1,-2.7 2.35,-0.95 4.95,-0.95 4.1,0 7,1.8 2.9,1.8 4.2,4.95 l -4.05,2.7 q -1.35,-2.75 -3.2,-3.75 -1.8,-1 -3.9,-1 -1.6,0 -3,0.6 -1.4,0.55 -2.45,1.65 -1.05,1.05 -1.65,2.65 -0.6,1.55 -0.6,3.5 0,1.95 0.55,3.55 0.6,1.55 1.65,2.65 1.05,1.05 2.45,1.65 1.4,0.55 3.05,0.55 2.8,0 4.45,-1.3 1.7,-1.35 2.95,-3.7 z" />
|
||||
<path
|
||||
id="path5318"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1847.8238,-1566.8235 8.45,-8.35 h 6.25 l -8.75,8.6 10.25,16.2 h -5.95 l -7.95,-12.6 -2.3,2.3 v 10.3 h -5.1 v -35 h 5.1 z" />
|
||||
<path
|
||||
id="path5320"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1888.4706,-1556.8235 q -1.75,3.5 -4.65,5.35 -2.85,1.8 -6.75,1.8 -2.7,0 -5.05,-0.95 -2.35,-0.95 -4.1,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1.05,-2.45 2.8,-4.15 1.8,-1.75 4.1,-2.7 2.35,-0.95 4.95,-0.95 4.1,0 7,1.8 2.9,1.8 4.2,4.95 l -4.05,2.7 q -1.35,-2.75 -3.2,-3.75 -1.8,-1 -3.9,-1 -1.6,0 -3,0.6 -1.4,0.55 -2.45,1.65 -1.05,1.05 -1.65,2.65 -0.6,1.55 -0.6,3.5 0,1.95 0.55,3.55 0.6,1.55 1.65,2.65 1.05,1.05 2.45,1.65 1.4,0.55 3.05,0.55 2.8,0 4.45,-1.3 1.7,-1.35 2.95,-3.7 z" />
|
||||
<path
|
||||
id="path5322"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1915.8097,-1550.3735 h -5.1 v -15.2 q 0,-2.7 -1.5,-4.15 -1.45,-1.45 -4,-1.45 -1.35,0 -2.6,0.55 -1.25,0.55 -2.2,1.55 -0.9,1 -1.45,2.45 -0.55,1.4 -0.55,3.15 v 13.1 h -5.1 v -35 h 5.1 v 14.35 q 1.4,-2.2 3.65,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.8,1.65 1.2,1.1 1.9,2.75 0.7,1.6 0.7,3.75 z" />
|
||||
<path
|
||||
id="path5324"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1939.2159,-1550.3735 q -0.45,-0.55 -0.9,-1.55 -0.4,-1.05 -0.5,-2.8 -1.2,2.5 -3.35,3.8 -2.15,1.25 -4.9,1.25 -1.9,0 -3.45,-0.55 -1.55,-0.55 -2.65,-1.55 -1.1,-1.05 -1.75,-2.45 -0.6,-1.4 -0.6,-3.1 0,-1.85 0.7,-3.25 0.7,-1.45 1.9,-2.4 1.2,-1 2.75,-1.6 1.6,-0.6 3.4,-0.9 l 7.85,-1.25 v -1.05 q 0,-4.3 -5.2,-4.3 -2.65,0 -3.9,1 -1.25,0.95 -1.25,2.25 0,0.2 0,0.35 0,0.1 0.1,0.4 l -4.55,1.55 q -0.4,-0.95 -0.4,-2 0,-1.45 0.65,-2.75 0.7,-1.35 2,-2.35 1.3,-1.05 3.15,-1.65 1.85,-0.6 4.2,-0.6 5.1,0 7.7,2.2 2.6,2.15 2.6,6.2 v 10.9 q 0,2.15 0.3,3.5 0.35,1.3 1.2,2.7 z m -8.85,-3.55 q 1.65,0 3,-0.6 1.4,-0.65 2.35,-1.75 0.95,-1.15 1.45,-2.65 0.55,-1.55 0.55,-3.35 v -0.7 l -6.7,1.15 q -2.35,0.4 -3.6,1.45 -1.2,1 -1.2,2.75 0,1.7 1.1,2.7 1.15,1 3.05,1 z" />
|
||||
<path
|
||||
id="path5326"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1949.9003,-1575.1735 h 5.1 v 24.8 h -5.1 z m -0.35,-9.7 h 5.8 v 5.75 h -5.8 z" />
|
||||
<path
|
||||
id="path5328"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1984.162,-1550.3735 h -5.1 v -15.35 q 0,-2.55 -1.45,-4 -1.4,-1.45 -4.05,-1.45 -1.35,0 -2.55,0.55 -1.15,0.55 -2.05,1.55 -0.85,1 -1.4,2.45 -0.5,1.4 -0.5,3.15 v 13.1 h -5.1 v -24.8 h 5.1 v 4.15 q 1.3,-2.2 3.5,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.75,1.65 1.15,1.05 1.8,2.7 0.7,1.6 0.7,3.7 z" />
|
||||
<g
|
||||
aria-label="PRE Nodes (Ursulas) on Threshold Network"
|
||||
id="text4028"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:45px;line-height:1.25;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro Bold';stroke-width:0.9375">
|
||||
<path
|
||||
d="m 1714.2049,-929.25397 h 13.77 q 2.565,0 4.635,0.675 2.115,0.675 3.6,1.98 1.485,1.305 2.295,3.195 0.81,1.845 0.81,4.185 0,2.385 -0.81,4.23 -0.81,1.845 -2.295,3.15 -1.485,1.305 -3.6,1.98 -2.07,0.675 -4.635,0.675 h -8.91 v 11.43 h -4.86 z m 4.86,15.75 h 8.73 q 3.285,0 4.95,-1.53 1.71,-1.53 1.71,-4.185 0,-2.655 -1.71,-4.185 -1.665,-1.53 -4.95,-1.53 h -8.73 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5329" />
|
||||
<path
|
||||
d="m 1755.773,-911.02897 h -6.21 v 13.275 h -4.86 v -31.5 h 13.005 q 2.475,0 4.455,0.675 1.98,0.675 3.33,1.845 1.395,1.17 2.115,2.835 0.765,1.62 0.765,3.555 0,3.375 -2.025,5.715 -1.98,2.295 -5.445,3.195 l 7.83,13.68 h -5.625 z m -6.21,-4.23 h 7.83 q 6.12,0 6.12,-4.86 0,-4.905 -6.12,-4.905 h -7.83 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5331" />
|
||||
<path
|
||||
d="m 1773.7069,-929.25397 h 20.7 v 4.32 h -15.84 v 8.73 h 14.58 v 4.32 h -14.58 v 9.81 h 15.975 v 4.32 h -20.835 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5333" />
|
||||
<path
|
||||
d="m 1813.3456,-929.25397 h 4.95 l 14.13,21.96 q 0.315,0.495 0.585,0.945 0.225,0.36 0.45,0.81 0.225,0.405 0.315,0.63 v -24.345 h 4.68 v 31.5 h -4.95 l -14.13,-21.96 q -0.315,-0.495 -0.585,-0.945 -0.225,-0.36 -0.45,-0.765 -0.225,-0.405 -0.315,-0.675 v 24.345 h -4.68 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5335" />
|
||||
<path
|
||||
d="m 1867.3856,-908.91397 q 0,2.925 -1.035,5.13 -1.035,2.205 -2.745,3.69 -1.665,1.485 -3.825,2.25 -2.115,0.72 -4.32,0.72 -2.205,0 -4.365,-0.72 -2.115,-0.765 -3.825,-2.25 -1.665,-1.485 -2.7,-3.69 -1.035,-2.205 -1.035,-5.13 0,-2.88 1.035,-5.085 1.035,-2.205 2.7,-3.69 1.71,-1.485 3.825,-2.25 2.16,-0.765 4.365,-0.765 2.205,0 4.32,0.765 2.16,0.765 3.825,2.25 1.71,1.485 2.745,3.69 1.035,2.205 1.035,5.085 z m -11.925,7.56 q 1.485,0 2.79,-0.54 1.305,-0.54 2.295,-1.53 0.99,-0.99 1.575,-2.385 0.585,-1.395 0.585,-3.105 0,-1.71 -0.585,-3.105 -0.585,-1.395 -1.575,-2.385 -0.99,-0.99 -2.295,-1.53 -1.305,-0.54 -2.79,-0.54 -1.485,0 -2.79,0.54 -1.305,0.54 -2.295,1.53 -0.99,0.99 -1.575,2.385 -0.585,1.395 -0.585,3.105 0,1.71 0.585,3.105 0.585,1.395 1.575,2.385 0.99,0.99 2.295,1.53 1.305,0.54 2.79,0.54 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5337" />
|
||||
<path
|
||||
d="m 1893.6846,-897.75397 h -4.59 v -3.6 q -1.08,1.89 -2.97,3.06 -1.845,1.17 -4.41,1.17 -2.295,0 -4.275,-0.81 -1.98,-0.855 -3.465,-2.385 -1.44,-1.575 -2.295,-3.735 -0.81,-2.16 -0.81,-4.86 0,-2.7 0.9,-4.86 0.9,-2.16 2.385,-3.69 1.53,-1.575 3.465,-2.385 1.935,-0.855 4.005,-0.855 2.655,0 4.545,1.08 1.935,1.035 2.925,2.925 v -12.555 h 4.59 z m -11.205,-3.6 q 1.44,0 2.7,-0.54 1.26,-0.54 2.205,-1.53 0.945,-1.035 1.485,-2.385 0.54,-1.395 0.54,-3.105 0,-1.665 -0.54,-3.06 -0.54,-1.395 -1.485,-2.385 -0.945,-1.035 -2.205,-1.575 -1.26,-0.54 -2.7,-0.54 -1.44,0 -2.7,0.54 -1.26,0.54 -2.205,1.575 -0.945,0.99 -1.485,2.385 -0.54,1.395 -0.54,3.06 0,1.71 0.54,3.105 0.54,1.35 1.485,2.385 0.945,0.99 2.205,1.53 1.26,0.54 2.7,0.54 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5339" />
|
||||
<path
|
||||
d="m 1903.1452,-907.92397 q 0.045,1.485 0.54,2.745 0.54,1.215 1.44,2.16 0.9,0.9 2.115,1.395 1.215,0.495 2.7,0.495 1.35,0 2.385,-0.36 1.035,-0.36 1.8,-0.945 0.81,-0.63 1.395,-1.485 0.585,-0.855 1.08,-1.845 l 3.555,2.115 q -1.575,3.24 -4.05,4.905 -2.475,1.62 -6.3,1.62 -2.295,0 -4.365,-0.855 -2.025,-0.855 -3.555,-2.385 -1.53,-1.575 -2.43,-3.735 -0.9,-2.205 -0.9,-4.815 0,-2.61 0.9,-4.77 0.9,-2.205 2.43,-3.735 1.575,-1.575 3.645,-2.43 2.115,-0.855 4.5,-0.855 2.43,0 4.41,0.855 1.98,0.81 3.375,2.295 1.44,1.485 2.205,3.555 0.81,2.025 0.81,4.455 v 1.62 z m 6.795,-9.09 q -1.26,0 -2.385,0.45 -1.08,0.405 -1.98,1.17 -0.855,0.72 -1.485,1.755 -0.63,0.99 -0.945,2.205 h 13.32 q -0.135,-1.35 -0.765,-2.385 -0.585,-1.08 -1.485,-1.755 -0.9,-0.72 -2.025,-1.08 -1.08,-0.36 -2.25,-0.36 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5341" />
|
||||
<path
|
||||
d="m 1929.4048,-914.67397 q 0,1.44 1.44,2.25 1.44,0.81 4.14,1.305 3.825,0.765 5.67,2.34 1.845,1.575 1.845,4.41 0,1.485 -0.585,2.835 -0.585,1.305 -1.71,2.295 -1.08,0.945 -2.7,1.53 -1.575,0.585 -3.645,0.585 -1.98,0 -3.6,-0.54 -1.575,-0.54 -2.79,-1.44 -1.215,-0.9 -2.115,-2.115 -0.855,-1.215 -1.35,-2.52 l 3.735,-2.34 q 0.81,2.205 2.34,3.645 1.53,1.395 3.825,1.395 1.755,0 2.97,-0.855 1.26,-0.9 1.26,-2.34 0,-1.44 -1.305,-2.16 -1.26,-0.765 -3.96,-1.305 -1.575,-0.315 -2.97,-0.855 -1.35,-0.54 -2.385,-1.35 -1.035,-0.81 -1.665,-1.935 -0.585,-1.125 -0.585,-2.61 0,-1.485 0.63,-2.655 0.675,-1.17 1.755,-1.98 1.125,-0.81 2.565,-1.215 1.44,-0.405 3.015,-0.405 3.555,0 5.67,1.395 2.115,1.395 3.285,4.14 l -3.375,1.98 q -0.765,-2.025 -2.25,-3.015 -1.44,-0.99 -3.24,-0.99 -1.575,0 -2.745,0.675 -1.17,0.675 -1.17,1.845 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5343" />
|
||||
<path
|
||||
d="m 1964.6616,-891.09397 q -2.025,-3.645 -3.42,-8.415 -1.35,-4.815 -1.35,-10.665 0,-5.85 1.35,-10.62 1.395,-4.815 3.42,-8.46 h 4.275 q -0.945,1.755 -1.755,4.05 -0.765,2.25 -1.35,4.77 -0.54,2.475 -0.855,5.13 -0.315,2.655 -0.315,5.13 0,2.52 0.315,5.175 0.315,2.61 0.855,5.13 0.585,2.475 1.35,4.725 0.81,2.295 1.755,4.05 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5345" />
|
||||
<path
|
||||
d="m 2000.4577,-908.95897 q 0,2.835 -0.945,5.04 -0.9,2.205 -2.565,3.735 -1.62,1.485 -3.87,2.295 -2.25,0.765 -4.905,0.765 -2.655,0 -4.905,-0.765 -2.25,-0.81 -3.915,-2.295 -1.62,-1.53 -2.565,-3.735 -0.9,-2.205 -0.9,-5.04 v -20.295 h 4.86 v 20.16 q 0,1.665 0.495,3.06 0.495,1.35 1.44,2.385 0.99,0.99 2.34,1.575 1.395,0.54 3.15,0.54 1.755,0 3.105,-0.54 1.395,-0.585 2.34,-1.575 0.99,-1.035 1.485,-2.385 0.495,-1.395 0.495,-3.06 v -20.16 h 4.86 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5347" />
|
||||
<path
|
||||
d="m 2018.6623,-916.11397 q -0.9,-0.27 -1.755,-0.27 -1.215,0 -2.25,0.54 -1.035,0.495 -1.8,1.44 -0.72,0.9 -1.125,2.16 -0.405,1.26 -0.405,2.745 v 11.745 h -4.59 v -22.32 h 4.59 v 3.78 q 0.9,-1.98 2.52,-3.195 1.62,-1.215 3.915,-1.215 0.45,0 0.81,0.09 0.405,0.045 0.855,0.135 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5349" />
|
||||
<path
|
||||
d="m 2026.6118,-914.67397 q 0,1.44 1.44,2.25 1.44,0.81 4.14,1.305 3.825,0.765 5.67,2.34 1.845,1.575 1.845,4.41 0,1.485 -0.585,2.835 -0.585,1.305 -1.71,2.295 -1.08,0.945 -2.7,1.53 -1.575,0.585 -3.645,0.585 -1.98,0 -3.6,-0.54 -1.575,-0.54 -2.79,-1.44 -1.215,-0.9 -2.115,-2.115 -0.855,-1.215 -1.35,-2.52 l 3.735,-2.34 q 0.81,2.205 2.34,3.645 1.53,1.395 3.825,1.395 1.755,0 2.97,-0.855 1.26,-0.9 1.26,-2.34 0,-1.44 -1.305,-2.16 -1.26,-0.765 -3.96,-1.305 -1.575,-0.315 -2.97,-0.855 -1.35,-0.54 -2.385,-1.35 -1.035,-0.81 -1.665,-1.935 -0.585,-1.125 -0.585,-2.61 0,-1.485 0.63,-2.655 0.675,-1.17 1.755,-1.98 1.125,-0.81 2.565,-1.215 1.44,-0.405 3.015,-0.405 3.555,0 5.67,1.395 2.115,1.395 3.285,4.14 l -3.375,1.98 q -0.765,-2.025 -2.25,-3.015 -1.44,-0.99 -3.24,-0.99 -1.575,0 -2.745,0.675 -1.17,0.675 -1.17,1.845 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5351" />
|
||||
<path
|
||||
d="m 2044.706,-920.07397 h 4.59 v 13.41 q 0,2.61 1.26,3.96 1.305,1.35 3.69,1.35 1.215,0 2.295,-0.495 1.08,-0.495 1.845,-1.35 0.81,-0.9 1.26,-2.115 0.45,-1.26 0.45,-2.7 v -12.06 h 4.59 v 22.32 h -4.59 v -3.6 q -1.08,2.025 -2.97,3.15 -1.845,1.08 -4.275,1.08 -1.62,0 -3.105,-0.54 -1.485,-0.495 -2.61,-1.53 -1.125,-1.08 -1.8,-2.7 -0.63,-1.62 -0.63,-3.825 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5353" />
|
||||
<path
|
||||
d="m 2070.9853,-929.25397 h 4.59 v 31.5 h -4.59 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5355" />
|
||||
<path
|
||||
d="m 2096.7443,-897.75397 q -0.405,-0.495 -0.81,-1.395 -0.36,-0.945 -0.45,-2.52 -1.08,2.25 -3.015,3.42 -1.935,1.125 -4.41,1.125 -1.71,0 -3.105,-0.495 -1.395,-0.495 -2.385,-1.395 -0.99,-0.945 -1.575,-2.205 -0.54,-1.26 -0.54,-2.79 0,-1.665 0.63,-2.925 0.63,-1.305 1.71,-2.16 1.08,-0.9 2.475,-1.44 1.44,-0.54 3.06,-0.81 l 7.065,-1.125 v -0.945 q 0,-3.87 -4.68,-3.87 -2.385,0 -3.51,0.9 -1.125,0.855 -1.125,2.025 0,0.18 0,0.315 0,0.09 0.09,0.36 l -4.095,1.395 q -0.36,-0.855 -0.36,-1.8 0,-1.305 0.585,-2.475 0.63,-1.215 1.8,-2.115 1.17,-0.945 2.835,-1.485 1.665,-0.54 3.78,-0.54 4.59,0 6.93,1.98 2.34,1.935 2.34,5.58 v 9.81 q 0,1.935 0.27,3.15 0.315,1.17 1.08,2.43 z m -7.965,-3.195 q 1.485,0 2.7,-0.54 1.26,-0.585 2.115,-1.575 0.855,-1.035 1.305,-2.385 0.495,-1.395 0.495,-3.015 v -0.63 l -6.03,1.035 q -2.115,0.36 -3.24,1.305 -1.08,0.9 -1.08,2.475 0,1.53 0.99,2.43 1.035,0.9 2.745,0.9 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5357" />
|
||||
<path
|
||||
d="m 2109.8442,-914.67397 q 0,1.44 1.44,2.25 1.44,0.81 4.14,1.305 3.825,0.765 5.67,2.34 1.845,1.575 1.845,4.41 0,1.485 -0.585,2.835 -0.585,1.305 -1.71,2.295 -1.08,0.945 -2.7,1.53 -1.575,0.585 -3.645,0.585 -1.98,0 -3.6,-0.54 -1.575,-0.54 -2.79,-1.44 -1.215,-0.9 -2.115,-2.115 -0.855,-1.215 -1.35,-2.52 l 3.735,-2.34 q 0.81,2.205 2.34,3.645 1.53,1.395 3.825,1.395 1.755,0 2.97,-0.855 1.26,-0.9 1.26,-2.34 0,-1.44 -1.305,-2.16 -1.26,-0.765 -3.96,-1.305 -1.575,-0.315 -2.97,-0.855 -1.35,-0.54 -2.385,-1.35 -1.035,-0.81 -1.665,-1.935 -0.585,-1.125 -0.585,-2.61 0,-1.485 0.63,-2.655 0.675,-1.17 1.755,-1.98 1.125,-0.81 2.565,-1.215 1.44,-0.405 3.015,-0.405 3.555,0 5.67,1.395 2.115,1.395 3.285,4.14 l -3.375,1.98 q -0.765,-2.025 -2.25,-3.015 -1.44,-0.99 -3.24,-0.99 -1.575,0 -2.745,0.675 -1.17,0.675 -1.17,1.845 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5359" />
|
||||
<path
|
||||
d="m 2128.5685,-891.09397 q 0.945,-1.755 1.71,-4.05 0.81,-2.25 1.35,-4.725 0.585,-2.52 0.9,-5.13 0.315,-2.655 0.315,-5.175 0,-2.475 -0.315,-5.13 -0.315,-2.655 -0.9,-5.13 -0.54,-2.52 -1.35,-4.77 -0.765,-2.295 -1.71,-4.05 h 4.275 q 2.025,3.645 3.375,8.46 1.395,4.77 1.395,10.62 0,5.85 -1.395,10.665 -1.35,4.77 -3.375,8.415 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5361" />
|
||||
<path
|
||||
d="m 1721.7948,-850.9806 q 0,2.925 -1.035,5.13 -1.035,2.205 -2.745,3.69 -1.665,1.485 -3.825,2.25 -2.115,0.72 -4.32,0.72 -2.205,0 -4.365,-0.72 -2.115,-0.765 -3.825,-2.25 -1.665,-1.485 -2.7,-3.69 -1.035,-2.205 -1.035,-5.13 0,-2.88 1.035,-5.085 1.035,-2.205 2.7,-3.69 1.71,-1.485 3.825,-2.25 2.16,-0.765 4.365,-0.765 2.205,0 4.32,0.765 2.16,0.765 3.825,2.25 1.71,1.485 2.745,3.69 1.035,2.205 1.035,5.085 z m -11.925,7.56 q 1.485,0 2.79,-0.54 1.305,-0.54 2.295,-1.53 0.99,-0.99 1.575,-2.385 0.585,-1.395 0.585,-3.105 0,-1.71 -0.585,-3.105 -0.585,-1.395 -1.575,-2.385 -0.99,-0.99 -2.295,-1.53 -1.305,-0.54 -2.79,-0.54 -1.485,0 -2.79,0.54 -1.305,0.54 -2.295,1.53 -0.99,0.99 -1.575,2.385 -0.585,1.395 -0.585,3.105 0,1.71 0.585,3.105 0.585,1.395 1.575,2.385 0.99,0.99 2.295,1.53 1.305,0.54 2.79,0.54 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5363" />
|
||||
<path
|
||||
d="m 1746.6538,-839.8206 h -4.59 v -13.815 q 0,-2.295 -1.305,-3.6 -1.26,-1.305 -3.645,-1.305 -1.215,0 -2.295,0.495 -1.035,0.495 -1.845,1.395 -0.765,0.9 -1.26,2.205 -0.45,1.26 -0.45,2.835 v 11.79 h -4.59 v -22.32 h 4.59 v 3.735 q 1.17,-1.98 3.15,-3.15 2.025,-1.215 4.455,-1.215 1.62,0 3.06,0.54 1.44,0.495 2.475,1.485 1.035,0.945 1.62,2.43 0.63,1.44 0.63,3.33 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5365" />
|
||||
<path
|
||||
d="m 1763.0057,-871.3206 h 24.3 v 4.41 h -9.72 v 27.09 h -4.86 v -27.09 h -9.72 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5367" />
|
||||
<path
|
||||
d="m 1811.5234,-839.8206 h -4.59 v -13.68 q 0,-2.43 -1.35,-3.735 -1.305,-1.305 -3.6,-1.305 -1.215,0 -2.34,0.495 -1.125,0.495 -1.98,1.395 -0.81,0.9 -1.305,2.205 -0.495,1.26 -0.495,2.835 v 11.79 h -4.59 v -31.5 h 4.59 v 12.915 q 1.26,-1.98 3.285,-3.15 2.025,-1.215 4.455,-1.215 1.62,0 3.06,0.54 1.44,0.495 2.52,1.485 1.08,0.99 1.71,2.475 0.63,1.44 0.63,3.375 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5369" />
|
||||
<path
|
||||
d="m 1829.7414,-858.1806 q -0.9,-0.27 -1.755,-0.27 -1.215,0 -2.25,0.54 -1.035,0.495 -1.8,1.44 -0.72,0.9 -1.125,2.16 -0.405,1.26 -0.405,2.745 v 11.745 h -4.59 v -22.32 h 4.59 v 3.78 q 0.9,-1.98 2.52,-3.195 1.62,-1.215 3.915,-1.215 0.45,0 0.81,0.09 0.405,0.045 0.855,0.135 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5371" />
|
||||
<path
|
||||
d="m 1836.6559,-849.9906 q 0.045,1.485 0.54,2.745 0.54,1.215 1.44,2.16 0.9,0.9 2.115,1.395 1.215,0.495 2.7,0.495 1.35,0 2.385,-0.36 1.035,-0.36 1.8,-0.945 0.81,-0.63 1.395,-1.485 0.585,-0.855 1.08,-1.845 l 3.555,2.115 q -1.575,3.24 -4.05,4.905 -2.475,1.62 -6.3,1.62 -2.295,0 -4.365,-0.855 -2.025,-0.855 -3.555,-2.385 -1.53,-1.575 -2.43,-3.735 -0.9,-2.205 -0.9,-4.815 0,-2.61 0.9,-4.77 0.9,-2.205 2.43,-3.735 1.575,-1.575 3.645,-2.43 2.115,-0.855 4.5,-0.855 2.43,0 4.41,0.855 1.98,0.81 3.375,2.295 1.44,1.485 2.205,3.555 0.81,2.025 0.81,4.455 v 1.62 z m 6.795,-9.09 q -1.26,0 -2.385,0.45 -1.08,0.405 -1.98,1.17 -0.855,0.72 -1.485,1.755 -0.63,0.99 -0.945,2.205 h 13.32 q -0.135,-1.35 -0.765,-2.385 -0.585,-1.08 -1.485,-1.755 -0.9,-0.72 -2.025,-1.08 -1.08,-0.36 -2.25,-0.36 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5373" />
|
||||
<path
|
||||
d="m 1862.9155,-856.7406 q 0,1.44 1.44,2.25 1.44,0.81 4.14,1.305 3.825,0.765 5.67,2.34 1.845,1.575 1.845,4.41 0,1.485 -0.585,2.835 -0.585,1.305 -1.71,2.295 -1.08,0.945 -2.7,1.53 -1.575,0.585 -3.645,0.585 -1.98,0 -3.6,-0.54 -1.575,-0.54 -2.79,-1.44 -1.215,-0.9 -2.115,-2.115 -0.855,-1.215 -1.35,-2.52 l 3.735,-2.34 q 0.81,2.205 2.34,3.645 1.53,1.395 3.825,1.395 1.755,0 2.97,-0.855 1.26,-0.9 1.26,-2.34 0,-1.44 -1.305,-2.16 -1.26,-0.765 -3.96,-1.305 -1.575,-0.315 -2.97,-0.855 -1.35,-0.54 -2.385,-1.35 -1.035,-0.81 -1.665,-1.935 -0.585,-1.125 -0.585,-2.61 0,-1.485 0.63,-2.655 0.675,-1.17 1.755,-1.98 1.125,-0.81 2.565,-1.215 1.44,-0.405 3.015,-0.405 3.555,0 5.67,1.395 2.115,1.395 3.285,4.14 l -3.375,1.98 q -0.765,-2.025 -2.25,-3.015 -1.44,-0.99 -3.24,-0.99 -1.575,0 -2.745,0.675 -1.17,0.675 -1.17,1.845 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5375" />
|
||||
<path
|
||||
d="m 1901.2597,-839.8206 h -4.59 v -13.68 q 0,-2.43 -1.35,-3.735 -1.305,-1.305 -3.6,-1.305 -1.215,0 -2.34,0.495 -1.125,0.495 -1.98,1.395 -0.81,0.9 -1.305,2.205 -0.495,1.26 -0.495,2.835 v 11.79 h -4.59 v -31.5 h 4.59 v 12.915 q 1.26,-1.98 3.285,-3.15 2.025,-1.215 4.455,-1.215 1.62,0 3.06,0.54 1.44,0.495 2.52,1.485 1.08,0.99 1.71,2.475 0.63,1.44 0.63,3.375 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5377" />
|
||||
<path
|
||||
d="m 1929.744,-850.9806 q 0,2.925 -1.035,5.13 -1.035,2.205 -2.745,3.69 -1.665,1.485 -3.825,2.25 -2.115,0.72 -4.32,0.72 -2.205,0 -4.365,-0.72 -2.115,-0.765 -3.825,-2.25 -1.665,-1.485 -2.7,-3.69 -1.035,-2.205 -1.035,-5.13 0,-2.88 1.035,-5.085 1.035,-2.205 2.7,-3.69 1.71,-1.485 3.825,-2.25 2.16,-0.765 4.365,-0.765 2.205,0 4.32,0.765 2.16,0.765 3.825,2.25 1.71,1.485 2.745,3.69 1.035,2.205 1.035,5.085 z m -11.925,7.56 q 1.485,0 2.79,-0.54 1.305,-0.54 2.295,-1.53 0.99,-0.99 1.575,-2.385 0.585,-1.395 0.585,-3.105 0,-1.71 -0.585,-3.105 -0.585,-1.395 -1.575,-2.385 -0.99,-0.99 -2.295,-1.53 -1.305,-0.54 -2.79,-0.54 -1.485,0 -2.79,0.54 -1.305,0.54 -2.295,1.53 -0.99,0.99 -1.575,2.385 -0.585,1.395 -0.585,3.105 0,1.71 0.585,3.105 0.585,1.395 1.575,2.385 0.99,0.99 2.295,1.53 1.305,0.54 2.79,0.54 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5379" />
|
||||
<path
|
||||
d="m 1934.623,-871.3206 h 4.59 v 31.5 h -4.59 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5381" />
|
||||
<path
|
||||
d="m 1966.9415,-839.8206 h -4.59 v -3.6 q -1.08,1.89 -2.97,3.06 -1.845,1.17 -4.41,1.17 -2.295,0 -4.275,-0.81 -1.98,-0.855 -3.465,-2.385 -1.44,-1.575 -2.295,-3.735 -0.81,-2.16 -0.81,-4.86 0,-2.7 0.9,-4.86 0.9,-2.16 2.385,-3.69 1.53,-1.575 3.465,-2.385 1.935,-0.855 4.005,-0.855 2.655,0 4.545,1.08 1.935,1.035 2.925,2.925 v -12.555 h 4.59 z m -11.205,-3.6 q 1.44,0 2.7,-0.54 1.26,-0.54 2.205,-1.53 0.945,-1.035 1.485,-2.385 0.54,-1.395 0.54,-3.105 0,-1.665 -0.54,-3.06 -0.54,-1.395 -1.485,-2.385 -0.945,-1.035 -2.205,-1.575 -1.26,-0.54 -2.7,-0.54 -1.44,0 -2.7,0.54 -1.26,0.54 -2.205,1.575 -0.945,0.99 -1.485,2.385 -0.54,1.395 -0.54,3.06 0,1.71 0.54,3.105 0.54,1.35 1.485,2.385 0.945,0.99 2.205,1.53 1.26,0.54 2.7,0.54 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5383" />
|
||||
<path
|
||||
d="m 1986.0946,-871.3206 h 4.95 l 14.13,21.96 q 0.315,0.495 0.585,0.945 0.225,0.36 0.45,0.81 0.225,0.405 0.315,0.63 v -24.345 h 4.68 v 31.5 h -4.95 l -14.13,-21.96 q -0.315,-0.495 -0.585,-0.945 -0.225,-0.36 -0.45,-0.765 -0.225,-0.405 -0.315,-0.675 v 24.345 h -4.68 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5385" />
|
||||
<path
|
||||
d="m 2020.8747,-849.9906 q 0.045,1.485 0.54,2.745 0.54,1.215 1.44,2.16 0.9,0.9 2.115,1.395 1.215,0.495 2.7,0.495 1.35,0 2.385,-0.36 1.035,-0.36 1.8,-0.945 0.81,-0.63 1.395,-1.485 0.585,-0.855 1.08,-1.845 l 3.555,2.115 q -1.575,3.24 -4.05,4.905 -2.475,1.62 -6.3,1.62 -2.295,0 -4.365,-0.855 -2.025,-0.855 -3.555,-2.385 -1.53,-1.575 -2.43,-3.735 -0.9,-2.205 -0.9,-4.815 0,-2.61 0.9,-4.77 0.9,-2.205 2.43,-3.735 1.575,-1.575 3.645,-2.43 2.115,-0.855 4.5,-0.855 2.43,0 4.41,0.855 1.98,0.81 3.375,2.295 1.44,1.485 2.205,3.555 0.81,2.025 0.81,4.455 v 1.62 z m 6.795,-9.09 q -1.26,0 -2.385,0.45 -1.08,0.405 -1.98,1.17 -0.855,0.72 -1.485,1.755 -0.63,0.99 -0.945,2.205 h 13.32 q -0.135,-1.35 -0.765,-2.385 -0.585,-1.08 -1.485,-1.755 -0.9,-0.72 -2.025,-1.08 -1.08,-0.36 -2.25,-0.36 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5387" />
|
||||
<path
|
||||
d="m 2041.0572,-862.1406 h 3.6 v -6.03 h 4.59 v 6.03 h 4.995 v 3.69 h -4.995 v 11.835 q 0,1.665 0.72,2.475 0.72,0.81 2.34,0.81 0.36,0 0.81,-0.09 0.495,-0.09 0.855,-0.18 l 0.405,3.87 q -0.63,0.225 -1.485,0.36 -0.855,0.18 -1.845,0.18 -1.26,0 -2.43,-0.315 -1.17,-0.315 -2.07,-1.08 -0.855,-0.765 -1.395,-2.025 -0.495,-1.305 -0.495,-3.195 v -12.645 h -3.6 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5389" />
|
||||
<path
|
||||
d="m 2079.6137,-845.7606 4.05,-16.38 h 4.59 l -6.255,22.32 h -4.68 l -4.5,-16.56 -4.5,16.56 h -4.68 l -6.255,-22.32 h 4.59 l 4.05,16.38 4.5,-16.38 h 4.59 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5391" />
|
||||
<path
|
||||
d="m 2113.6112,-850.9806 q 0,2.925 -1.035,5.13 -1.035,2.205 -2.745,3.69 -1.665,1.485 -3.825,2.25 -2.115,0.72 -4.32,0.72 -2.205,0 -4.365,-0.72 -2.115,-0.765 -3.825,-2.25 -1.665,-1.485 -2.7,-3.69 -1.035,-2.205 -1.035,-5.13 0,-2.88 1.035,-5.085 1.035,-2.205 2.7,-3.69 1.71,-1.485 3.825,-2.25 2.16,-0.765 4.365,-0.765 2.205,0 4.32,0.765 2.16,0.765 3.825,2.25 1.71,1.485 2.745,3.69 1.035,2.205 1.035,5.085 z m -11.925,7.56 q 1.485,0 2.79,-0.54 1.305,-0.54 2.295,-1.53 0.99,-0.99 1.575,-2.385 0.585,-1.395 0.585,-3.105 0,-1.71 -0.585,-3.105 -0.585,-1.395 -1.575,-2.385 -0.99,-0.99 -2.295,-1.53 -1.305,-0.54 -2.79,-0.54 -1.485,0 -2.79,0.54 -1.305,0.54 -2.295,1.53 -0.99,0.99 -1.575,2.385 -0.585,1.395 -0.585,3.105 0,1.71 0.585,3.105 0.585,1.395 1.575,2.385 0.99,0.99 2.295,1.53 1.305,0.54 2.79,0.54 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5393" />
|
||||
<path
|
||||
d="m 2130.4152,-858.1806 q -0.9,-0.27 -1.755,-0.27 -1.215,0 -2.25,0.54 -1.035,0.495 -1.8,1.44 -0.72,0.9 -1.125,2.16 -0.405,1.26 -0.405,2.745 v 11.745 h -4.59 v -22.32 h 4.59 v 3.78 q 0.9,-1.98 2.52,-3.195 1.62,-1.215 3.915,-1.215 0.45,0 0.81,0.09 0.405,0.045 0.855,0.135 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5395" />
|
||||
<path
|
||||
d="m 2139.6036,-854.6256 7.605,-7.515 h 5.625 l -7.875,7.74 9.225,14.58 h -5.355 l -7.155,-11.34 -2.07,2.07 v 9.27 h -4.59 v -31.5 h 4.59 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
id="path5397" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Basis Grotesque, Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
|
@ -1321,34 +1283,6 @@
|
|||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50px;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque';text-align:center;text-anchor:middle;stroke-width:0.9375px"
|
||||
d="m 1732.4398,-950.07489 h 5.1 v 13.95 q 1.35,-2.05 3.65,-3.25 2.3,-1.2 5,-1.2 2.45,0 4.55,0.95 2.15,0.9 3.7,2.65 1.55,1.7 2.45,4.1 0.9,2.4 0.9,5.4 0,3 -0.95,5.4 -0.9,2.4 -2.5,4.15 -1.6,1.7 -3.8,2.65 -2.15,0.9 -4.6,0.9 -3,0 -5.2,-1.3 -2.15,-1.3 -3.2,-3.05 v 3.65 h -5.1 z m 12.45,31 q 1.6,0 3,-0.6 1.4,-0.6 2.45,-1.7 1.05,-1.15 1.65,-2.65 0.6,-1.55 0.6,-3.45 0,-1.85 -0.6,-3.4 -0.6,-1.55 -1.65,-2.65 -1.05,-1.15 -2.45,-1.75 -1.4,-0.6 -3,-0.6 -1.6,0 -3,0.6 -1.4,0.6 -2.45,1.75 -1.05,1.1 -1.65,2.65 -0.6,1.55 -0.6,3.4 0,1.9 0.6,3.45 0.6,1.5 1.65,2.65 1.05,1.1 2.45,1.7 1.4,0.6 3,0.6 z" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.55555541,0,0,0.55555541,1476.8056,-1875.7962)"
|
||||
id="g7703">
|
||||
<polygon
|
||||
style="fill:#343434"
|
||||
points="125.1661,285.168 127.9611,287.958 255.9231,212.32 127.9611,0 125.1661,9.5 "
|
||||
id="polygon7705" />
|
||||
<polygon
|
||||
style="fill:#8c8c8c"
|
||||
points="0,212.32 127.962,287.959 127.962,154.158 127.962,0 "
|
||||
id="polygon7707" />
|
||||
<polygon
|
||||
style="fill:#3c3c3b"
|
||||
points="126.3861,412.3056 127.9611,416.9066 255.9991,236.5866 127.9611,312.1866 126.3861,314.1066 "
|
||||
id="polygon7709" />
|
||||
<polygon
|
||||
style="fill:#8c8c8c"
|
||||
points="0,236.5852 127.962,416.9052 127.962,312.1852 "
|
||||
id="polygon7711" />
|
||||
<polygon
|
||||
style="fill:#141414"
|
||||
points="127.9611,154.1587 127.9611,287.9577 255.9211,212.3207 "
|
||||
id="polygon7713" />
|
||||
<polygon
|
||||
style="fill:#393939"
|
||||
points="127.9609,154.1588 0.0009,212.3208 127.9609,287.9578 "
|
||||
id="polygon7715" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#000000;stroke-opacity:1"
|
||||
inkscape:label="Layer 1"
|
||||
|
@ -3438,5 +3372,63 @@
|
|||
id="path10494-3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<g
|
||||
id="g4913"
|
||||
transform="matrix(0.65109685,0,0,0.65109685,1486.7609,-1757.1421)"
|
||||
style="fill:none">
|
||||
<path
|
||||
d="m -128.15178,183.90102 h 11.11 v 4.4 c 1.255,-1.6262 2.904,-2.9064 4.79,-3.72 2.149,-0.9119 4.466,-1.3584 6.8,-1.31 3.425,-0.0809 6.803003,0.8027 9.750003,2.55 2.806,1.7497 5.04,4.2796 6.43,7.28 1.59,3.4446 2.37,7.2074 2.28,11 0.086,3.781 -0.751,7.526 -2.44,10.91 -1.538,3.024 -3.907,5.547 -6.83,7.27 -3.085,1.771 -6.593003,2.67 -10.150003,2.6 -2.132,0.026 -4.25,-0.354 -6.24,-1.12 -1.71,-0.64 -3.223,-1.715 -4.39,-3.12 v 19.9 h -11.11 z m 13.22,28.26 c 0.897,1.014 2.009,1.817 3.254,2.349 1.245,0.533 2.593,0.782 3.946,0.731 1.34,0.049 2.673,-0.203 3.903,-0.736 1.231,-0.533 2.326,-1.333 3.207,-2.344 1.877003,-2.273 2.836003,-5.1658 2.690003,-8.11 0.143,-2.9762 -0.827,-5.8992 -2.720003,-8.2 -0.882,-1.0087 -1.978,-1.8077 -3.208,-2.3389 -1.23,-0.5311 -2.563,-0.7809 -3.902,-0.7311 -1.348,-0.0489 -2.689,0.201 -3.929,0.7318 -1.239,0.5308 -2.346,1.3293 -3.241,2.3382 -1.89,2.3023 -2.856,5.2251 -2.71,8.2 -0.141,2.9469 0.825,5.84 2.71,8.11 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4289" />
|
||||
<path
|
||||
d="m -72.681777,222.15102 c -3.182,-1.712 -5.816,-4.288 -7.6,-7.43 -1.785,-3.273 -2.72,-6.942 -2.72,-10.6701 0,-3.7282 0.935,-7.3968 2.72,-10.67 1.783,-3.1455 4.417,-5.7243 7.6,-7.44 3.383,-1.7542 7.139,-2.6699 10.95,-2.6699 3.811,0 7.567,0.9157 10.95,2.6699 3.176,1.722 5.805,4.2995 7.59,7.44 1.785,3.2732 2.72,6.9418 2.72,10.67 0,3.7281 -0.935,7.3971 -2.72,10.6701 -1.785,3.138 -4.415,5.712 -7.59,7.43 -3.381,1.761 -7.138,2.68 -10.95,2.68 -3.812,0 -7.569,-0.919 -10.95,-2.68 z m 3.67,-10 c 0.935,0.991 2.062,1.781 3.313,2.321 1.251,0.539 2.6,0.818 3.962,0.818 1.363,0 2.711,-0.279 3.962,-0.818 1.251,-0.54 2.378,-1.33 3.313,-2.321 1.921,-2.239 2.921,-5.1228 2.8,-8.0701 0.131,-2.9761 -0.869,-5.8915 -2.8,-8.16 -0.939,-0.9835 -2.068,-1.7664 -3.319,-2.3012 -1.25,-0.5349 -2.596,-0.8106 -3.956,-0.8106 -1.36,0 -2.706,0.2757 -3.956,0.8106 -1.251,0.5348 -2.38,1.3177 -3.319,2.3012 -1.928,2.2695 -2.925,5.1851 -2.79,8.16 -0.117,2.9359 0.879,5.8081 2.79,8.0401 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4291" />
|
||||
<path
|
||||
d="m -33.761777,166.40092 h 11.11 v 57.7901 h -11.11 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4293" />
|
||||
<path
|
||||
d="m -2.8317774,223.87102 -14.6299996,-40.0001 h 11.3499996 l 8.48,26.0001 8.3900004,-26.0001 h 11.43 l -14.6300004,40.1301 -5.67,16.46 h -10.63 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4295" />
|
||||
<path
|
||||
d="m 28.538223,219.19102 c -3.38,-3.747 -5.07,-8.793 -5.07,-15.1401 -0.087,-3.7914 0.689,-7.553 2.27,-11 1.404,-3.0191 3.673,-5.553 6.52,-7.28 3.061,-1.7511 6.545,-2.6231 10.07,-2.52 2.231,-0.0324 4.445,0.3859 6.51,1.23 1.801,0.7181 3.385,1.8893 4.6,3.4 v -4 h 11.19 v 42.6901 c 0.078,1.886 -0.253,3.766 -0.971,5.511 -0.718,1.745 -1.806,3.314 -3.189,4.599 -2.767,2.533 -6.433,3.797 -11,3.79 h -20.3 v -8.71 h 18.54 c 0.789,0.024 1.573,-0.125 2.299,-0.436 0.725,-0.311 1.374,-0.776 1.901,-1.364 1.115,-1.263 1.702,-2.906 1.64,-4.59 v -5.28 c -1.12,1.574 -2.678,2.784 -4.48,3.48 -2.079,0.845 -4.306,1.266 -6.55,1.24 -5.94,0.013 -10.6,-1.86 -13.98,-5.62 z m 8.55,-7 c 0.898,0.998 2.006,1.784 3.244,2.303 1.238,0.518 2.575,0.757 3.916,0.697 1.345,0.056 2.686,-0.183 3.928,-0.701 1.243,-0.519 2.356,-1.303 3.262,-2.299 1.9,-2.277 2.872,-5.1879 2.72,-8.1501 0.143,-2.9762 -0.827,-5.8992 -2.72,-8.2 -0.896,-1.0127 -2.006,-1.8135 -3.249,-2.3445 -1.244,-0.531 -2.59,-0.7788 -3.941,-0.7255 -1.351,-0.0592 -2.699,0.187 -3.942,0.7203 -1.243,0.5332 -2.35,1.3398 -3.238,2.3597 -1.867,2.3127 -2.817,5.2315 -2.67,8.2 -0.166,2.9709 0.787,5.8961 2.67,8.2001 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4297" />
|
||||
<path
|
||||
d="m 81.648223,222.15102 c -3.177,-1.716 -5.807,-4.29 -7.59,-7.43 -1.785,-3.273 -2.72,-6.942 -2.72,-10.6701 0,-3.7282 0.935,-7.3968 2.72,-10.67 1.782,-3.1428 4.412,-5.721 7.59,-7.44 3.383,-1.7542 7.139,-2.6699 10.95,-2.6699 3.811,0 7.566997,0.9157 10.949997,2.6699 3.179,1.7214 5.811,4.2988 7.6,7.44 1.778,3.2752 2.71,6.943 2.71,10.67 0,3.7269 -0.932,7.3951 -2.71,10.6701 -1.789,3.138 -4.422,5.712 -7.6,7.43 -3.381,1.761 -7.137997,2.68 -10.949997,2.68 -3.812,0 -7.569,-0.919 -10.95,-2.68 z m 3.68,-10 c 0.935,0.991 2.062,1.781 3.313,2.321 1.251,0.539 2.6,0.818 3.962,0.818 1.363,0 2.711,-0.279 3.962,-0.818 1.251,-0.54 2.378,-1.33 3.313,-2.321 1.917997,-2.24 2.914997,-5.124 2.789997,-8.0701 0.135,-2.9749 -0.862,-5.8905 -2.789997,-8.16 -0.939,-0.9835 -2.068,-1.7664 -3.319,-2.3012 -1.25,-0.5349 -2.596,-0.8106 -3.956,-0.8106 -1.36,0 -2.706,0.2757 -3.956,0.8106 -1.251,0.5348 -2.38,1.3177 -3.319,2.3012 -1.935,2.266 -2.936,5.1832 -2.8,8.16 -0.118,2.9378 0.882,5.8111 2.8,8.0401 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4299" />
|
||||
<path
|
||||
d="m 119.93822,183.90102 h 11.19 v 5.6 c 1.132,-1.9815 2.827,-3.5825 4.87,-4.6 2.286,-1.1317 4.81,-1.6975 7.36,-1.65 2.756,-0.0559 5.475,0.6352 7.87,2 2.253,1.3279 4.081,3.2704 5.27,5.6 1.292,2.5478 1.937,5.374 1.88,8.23 v 25.1 h -11.19 v -22.61 c 0.073,-2.2026 -0.699,-4.3497 -2.16,-6 -0.705,-0.7742 -1.571,-1.3854 -2.536,-1.7913 -0.965,-0.4058 -2.007,-0.5965 -3.054,-0.5587 -1.122,-0.0393 -2.239,0.1647 -3.275,0.5979 -1.036,0.4333 -1.965,1.0856 -2.725,1.9121 -1.579,1.7645 -2.411,4.0737 -2.32,6.44 v 22.06 h -11.18 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4301" />
|
||||
<path
|
||||
d="m 185.23822,168.25102 h 21 c 5.48,0 9.813,1.5167 13,4.55 1.598,1.5501 2.851,3.4204 3.677,5.4883 0.825,2.068 1.205,4.287 1.113,6.5117 0.094,2.225 -0.285,4.4445 -1.11,6.5127 -0.826,2.0683 -2.08,3.9383 -3.68,5.4873 -3.2,3.04 -7.533,4.56 -13,4.56 h -14.17 v 22.86 h -6.79 z m 21,27 c 3.733,0 6.477,-1 8.23,-3 1.8,-2.082 2.744,-4.7695 2.64,-7.52 0.1,-2.7343 -0.836,-5.4057 -2.62,-7.48 -1.76,-2 -4.503,-3 -8.23,-3 h -14.19 v 21 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4303" />
|
||||
<path
|
||||
d="m 237.42822,222.15102 c -3.053,-1.753 -5.568,-4.308 -7.27,-7.39 -1.738,-3.302 -2.646,-6.9782 -2.646,-10.71 0,-3.7317 0.908,-7.4075 2.646,-10.71 1.699,-3.0863 4.214,-5.6463 7.27,-7.4 3.215,-1.8192 6.857,-2.7478 10.55,-2.69 3.704,-0.0595 7.357,0.8616 10.59,2.67 3.078,1.7387 5.609,4.3014 7.31,7.4 1.738,3.3025 2.646,6.9783 2.646,10.71 0,3.7318 -0.908,7.408 -2.646,10.71 -1.706,3.092 -4.237,5.65 -7.31,7.39 -3.23,1.817 -6.885,2.742 -10.59,2.68 -3.691,0.071 -7.334,-0.847 -10.55,-2.66 z m -1.6,-10.35 c 1.101,2.213 2.807,4.068 4.92,5.35 2.183,1.303 4.688,1.968 7.23,1.92 2.554,0.044 5.07,-0.621 7.27,-1.92 2.145,-1.267 3.88,-3.124 5,-5.35 1.156,-2.422 1.756,-5.0714 1.756,-7.755 0,-2.6836 -0.6,-5.3332 -1.756,-7.755 -1.12,-2.2256 -2.855,-4.0826 -5,-5.35 -2.2,-1.2991 -4.716,-1.9637 -7.27,-1.92 -2.542,-0.0478 -5.047,0.6173 -7.23,1.92 -2.108,1.2711 -3.813,3.1118 -4.92,5.31 -1.156,2.4218 -1.756,5.0714 -1.756,7.755 0,2.6836 0.6,5.333 1.756,7.755 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4305" />
|
||||
<path
|
||||
d="m 280.50822,219.67102 c -3.78,-3.44 -5.857,-8.037 -6.23,-13.79 h 6.71 c 0.189,3.566 1.752,6.92 4.36,9.36 2.527,2.293 5.923,3.437 10.19,3.43 4.047,0 7.283,-0.813 9.71,-2.44 1.19,-0.796 2.151,-1.89 2.788,-3.172 0.636,-1.282 0.927,-2.709 0.842,-4.138 0.04,-0.927 -0.105,-1.8524 -0.426,-2.7228 -0.321,-0.8703 -0.812,-1.6682 -1.444,-2.3472 -1.319,-1.3334 -2.918,-2.3579 -4.68,-3 -1.873,-0.72 -4.457,-1.5334 -7.75,-2.44 -3.276,-0.8735 -6.492,-1.9557 -9.63,-3.24 -2.402,-1.0163 -4.527,-2.5897 -6.2,-4.59 -1.792,-2.2965 -2.701,-5.1602 -2.56,-8.07 -0.049,-2.7766 0.792,-5.4961 2.4,-7.76 1.715,-2.3291 4.041,-4.139 6.72,-5.23 3.112,-1.2989 6.459,-1.939 9.83,-1.88 5.587,0 10.18,1.5033 13.78,4.51 1.779,1.4738 3.231,3.302 4.264,5.3681 1.033,2.066 1.624,4.3247 1.736,6.6319 h -6.72 c -0.103,-1.4735 -0.512,-2.9093 -1.201,-4.2161 -0.689,-1.3067 -1.642,-2.4557 -2.799,-3.3739 -2.607,-1.9573 -5.813,-2.9472 -9.07,-2.8 -3.79,0 -6.74,0.78 -8.88,2.32 -1.024,0.7149 -1.853,1.6754 -2.411,2.7935 -0.557,1.118 -0.825,2.358 -0.779,3.6065 -0.039,0.9001 0.104,1.7988 0.42,2.6425 0.316,0.8436 0.799,1.6148 1.42,2.2675 1.306,1.3063 2.888,2.304 4.63,2.92 2.49,0.8767 5.023,1.6244 7.59,2.24 3.34,0.8348 6.627,1.8734 9.84,3.11 2.493,1.0111 4.691,2.6345 6.39,4.72 1.864,2.4478 2.799,5.4774 2.64,8.55 0.079,3.062 -0.848,6.066 -2.64,8.55 -1.861,2.475 -4.385,4.371 -7.28,5.47 -3.363,1.3 -6.945,1.938 -10.55,1.88 -6.227,0 -11.23,-1.72 -15.01,-5.16 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4307" />
|
||||
</g>
|
||||
<g
|
||||
id="g4901"
|
||||
transform="matrix(2.0664304,0,0,2.0664304,1378.4691,-1970.1409)"
|
||||
style="fill:none">
|
||||
<path
|
||||
d="m 124,62.7799 -34,-19.64 c -2.4323,-1.4043 -5.1914,-2.1436 -8,-2.1436 -2.8086,0 -5.5677,0.7393 -8,2.1436 l -34,19.64 c -2.4328,1.4046 -4.453,3.425 -5.8573,5.858 -1.4043,2.433 -2.1433,5.1928 -2.1427,8.002 V 115.88 c -6e-4,2.809 0.7384,5.569 2.1427,8.002 1.4043,2.433 3.4245,4.453 5.8573,5.858 l 34,19.64 c 2.4323,1.404 5.1914,2.144 8,2.144 2.8086,0 5.5677,-0.74 8,-2.144 l 34,-19.64 c 2.433,-1.405 4.453,-3.425 5.857,-5.858 1.405,-2.433 2.144,-5.193 2.143,-8.002 V 76.6399 c 0.001,-2.8092 -0.738,-5.569 -2.143,-8.002 -1.404,-2.433 -3.424,-4.4534 -5.857,-5.858 z m 0,53.1001 c 0,1.405 -0.369,2.784 -1.071,4.001 -0.703,1.216 -1.713,2.227 -2.929,2.929 l -34,19.62 c -1.2128,0.712 -2.5936,1.087 -4,1.087 -1.4064,0 -2.7872,-0.375 -4,-1.087 L 44,122.81 c -1.2164,-0.702 -2.2265,-1.713 -2.9287,-2.929 C 40.3692,118.664 39.9997,117.285 40,115.88 V 76.6399 c 0.0032,-1.4066 0.374,-2.7879 1.0757,-4.007 0.7016,-1.219 1.7097,-2.2336 2.9243,-2.943 l 34,-19.62 c 1.2162,-0.7021 2.5957,-1.0718 4,-1.0718 1.4043,0 2.7838,0.3697 4,1.0718 l 34,19.62 c 1.215,0.7094 2.223,1.724 2.924,2.943 0.702,1.2191 1.073,2.6004 1.076,4.007 z"
|
||||
fill="#7b3fe4"
|
||||
id="path4309" />
|
||||
<path
|
||||
d="m 113,92.03 -13,-7.5 c -0.9141,-0.5208 -1.948,-0.7947 -3,-0.7947 -1.052,0 -2.0859,0.2739 -3,0.7947 L 67,100.14 56,93.78 V 81.07 l 11,-6.36 11,6.36 v 6.84 l 8,-4.65 v -3.35 c 7e-4,-1.0539 -0.2762,-2.0893 -0.8029,-3.0022 C 84.6705,75.995 83.9127,75.2369 83,74.71 L 70,67.26 c -0.9141,-0.5208 -1.948,-0.7947 -3,-0.7947 -1.052,0 -2.0859,0.2739 -3,0.7947 l -13,7.5 c -0.908,0.5323 -1.6619,1.2915 -2.1879,2.2032 C 48.2862,77.8748 48.0063,78.9075 48,79.96 v 15 c 0.0056,1.054 0.285,2.0884 0.811,3.0018 0.5259,0.9133 1.2803,1.6743 2.189,2.2082 l 13,7.5 c 0.9156,0.516 1.9489,0.787 3,0.787 1.0511,0 2.0844,-0.271 3,-0.787 l 27,-15.64 11,6.37 v 12.69 l -11,6.36 -11,-6.36 v -6.92 l -8,4.62 v 3.47 c 0.0046,1.049 0.284,2.078 0.8104,2.985 0.5263,0.907 1.2813,1.661 2.1896,2.185 l 13,7.52 c 0.9102,0.532 1.9458,0.811 3,0.81 1.0549,0.006 2.0917,-0.274 3,-0.81 l 13,-7.5 c 0.911,-0.526 1.668,-1.283 2.195,-2.193 0.526,-0.911 0.804,-1.945 0.805,-2.997 v -15 c 0.006,-1.0589 -0.268,-2.1006 -0.795,-3.0192 C 114.678,93.3222 113.917,92.5595 113,92.03 Z"
|
||||
fill="#7b3fe4"
|
||||
id="path4311" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 556 KiB After Width: | Height: | Size: 564 KiB |
Before Width: | Height: | Size: 562 KiB After Width: | Height: | Size: 562 KiB |
After Width: | Height: | Size: 414 KiB |
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 712 KiB After Width: | Height: | Size: 732 KiB |
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 151 KiB |
After Width: | Height: | Size: 7.9 KiB |
|
@ -12,9 +12,9 @@
|
|||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
version="1.1"
|
||||
id="svg6584"
|
||||
viewBox="0 0 1943.0472 1662.3266"
|
||||
viewBox="0 0 1961.8191 1662.3266"
|
||||
height="469.14554mm"
|
||||
width="548.37109mm">
|
||||
width="553.66895mm">
|
||||
<defs
|
||||
id="defs6586">
|
||||
<marker
|
||||
|
@ -782,17 +782,17 @@
|
|||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="96"
|
||||
inkscape:window-x="1700"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="121"
|
||||
inkscape:window-x="1697"
|
||||
inkscape:window-height="847"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-width="1252"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:current-layer="g6978"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="888.92522"
|
||||
inkscape:cx="1007.2314"
|
||||
inkscape:zoom="0.34977465"
|
||||
inkscape:cy="1003.7612"
|
||||
inkscape:cx="706.11971"
|
||||
inkscape:zoom="0.32889898"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
|
@ -859,11 +859,11 @@
|
|||
transform="matrix(1.0648771,0,0,1.0648771,1215.3207,-2390.9759)"
|
||||
id="g22552">
|
||||
<g
|
||||
style="fill:#1e65f3;fill-opacity:0.25098"
|
||||
style="fill:#7038f1;fill-opacity:0.25098"
|
||||
transform="matrix(1.1935921,0,0,1.1935921,-1039.1496,1252.1078)"
|
||||
id="g28-8-6">
|
||||
<path
|
||||
style="fill:#1e65f3;fill-opacity:0.25098"
|
||||
style="fill:#7038f1;fill-opacity:0.25098"
|
||||
d="m 144.208,15.894 c 8.086,0 14.686,6.599 14.686,14.686 0,8.087 -6.599,14.655 -14.686,14.655 -8.086,0 -14.655,-6.568 -14.655,-14.655 0,-8.087 6.569,-14.686 14.655,-14.686 z"
|
||||
id="path30-5-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
|
@ -878,34 +878,34 @@
|
|||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#1e65f3;fill-opacity:1"
|
||||
style="fill:#7038f1;fill-opacity:1"
|
||||
transform="matrix(1.1935921,0,0,1.1935921,-1039.1496,1252.1078)"
|
||||
id="g44-6-5">
|
||||
<path
|
||||
style="fill:#1e65f3;fill-opacity:1"
|
||||
style="fill:#7038f1;fill-opacity:1"
|
||||
d="m 186.902,116.742 c 0.682,5.081 -0.868,10.255 -4.276,14.128 -3.377,3.873 -8.272,6.073 -13.415,6.073 h -48.983 c -5.143,0 -10.038,-2.2 -13.415,-6.073 -3.408,-3.873 -4.957,-9.047 -4.276,-14.128 l 5.05,-37.21 c 1.177,-8.83 8.799,-15.46 17.66,-15.46 h 38.945 c 8.861,0 16.483,6.63 17.66,15.46 z m -16.235,3.656 c 0.248,-0.31 0.558,-0.837 0.465,-1.549 l -5.05,-37.179 c -0.124,-0.96 -0.929,-1.673 -1.89,-1.673 h -38.945 c -0.96,0 -1.766,0.713 -1.89,1.673 l -5.05,37.179 c -0.093,0.713 0.217,1.239 0.465,1.549 0.279,0.279 0.744,0.651 1.456,0.651 h 48.983 c 0.713,0 1.178,-0.372 1.456,-0.651 z"
|
||||
id="path46-3-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#1e65f3;fill-opacity:1"
|
||||
style="fill:#7038f1;fill-opacity:1"
|
||||
transform="matrix(1.1935921,0,0,1.1935921,-1039.1496,1252.1078)"
|
||||
id="g52-8-6">
|
||||
<path
|
||||
style="fill:#1e65f3;fill-opacity:1"
|
||||
style="fill:#7038f1;fill-opacity:1"
|
||||
d="m 144.208,0 c 16.885,0 30.58,13.725 30.58,30.58 0,16.855 -13.694,30.58 -30.58,30.58 -16.855,0 -30.58,-13.725 -30.58,-30.58 0,-16.855 13.726,-30.58 30.58,-30.58 z m 14.686,30.58 c 0,-8.086 -6.599,-14.686 -14.686,-14.686 -8.086,0 -14.655,6.599 -14.655,14.686 0,8.087 6.568,14.655 14.655,14.655 8.087,0 14.686,-6.569 14.686,-14.655 z"
|
||||
id="path54-5-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#1e65f3;fill-opacity:0.188235"
|
||||
style="fill:#7038f1;fill-opacity:0.188235"
|
||||
transform="matrix(1.1935921,0,0,1.1935921,-1039.1496,1252.1078)"
|
||||
id="g64-6-1">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path66-1-7"
|
||||
d="m 120.689,121.049 h 48.522 c 0.713,0 1.177,-0.372 1.456,-0.651 0.248,-0.31 0.558,-0.837 0.465,-1.549 l -5.05,-37.179 c -0.04,-0.316 -0.173,-0.589 -0.344,-0.833 -5.58,11.9 -18.032,26.707 -45.049,40.212 z"
|
||||
style="fill:#1e65f3;fill-opacity:0.188235" />
|
||||
style="fill:#7038f1;fill-opacity:0.188235" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
|
@ -1271,7 +1271,7 @@
|
|||
id="path22952-6"
|
||||
d="m 148.9877,240.32891 v 6.1934 h -2.6543 c -1.9554,0 -3.5393,1.5837 -3.5393,3.5391 v 17.6957 c 0,1.9553 1.5839,3.539 3.5393,3.539 h 28.3127 c 1.9553,0 3.5395,-1.5837 3.5395,-3.539 v -17.6957 c 0,-1.9554 -1.5842,-3.5391 -3.5395,-3.5391 h -2.6541 v -6.1934 c 0,-6.3525 -5.1498,-11.5021 -11.5022,-11.5021 -6.3523,0 -11.5021,5.1495 -11.5021,11.5021 z m 4.4239,6.1934 v -6.1934 c 0,-3.9106 3.1674,-7.0783 7.0782,-7.0783 3.9107,0 7.0783,3.1677 7.0783,7.0783 v 6.1934 z m 3.539,9.7326 c 0,-1.9552 1.5838,-3.539 3.5392,-3.539 1.9553,0 3.539,1.5838 3.539,3.539 0,1.2477 -0.6461,2.3449 -1.619,2.9731 0,0 -2.5072,1.0346 -1.3868,3.6017 -0.2432,-1.6211 -0.8214,-1.6211 -0.6106,-0.2211 l -0.017,-0.1146 c -0.1093,-0.7262 -0.4671,-1.8827 -0.4671,-2.6168 l -1.3581,-0.6492 c -0.973,-0.6282 -1.6193,-1.7255 -1.6193,-2.9731 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Serif;-inkscape-font-specification:Serif;letter-spacing:0px;word-spacing:0px;clip-rule:evenodd;opacity:0.990354;fill:#a8c3f4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9375" />
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Serif;-inkscape-font-specification:Serif;letter-spacing:0px;word-spacing:0px;clip-rule:evenodd;opacity:0.990354;fill:#9974ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9375" />
|
||||
<circle
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Serif;-inkscape-font-specification:Serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.04592px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="circle22954-5"
|
||||
|
@ -1297,110 +1297,6 @@
|
|||
d="m 292.64892,-828.76207 v 208.2197"
|
||||
id="path7556"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
transform="translate(-540.21883,746.76092)"
|
||||
id="g9758">
|
||||
<path
|
||||
id="path5294"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1755.2855,-1647.8735 h 23 v 4.8 h -17.6 v 9.7 h 16.2 v 4.8 h -16.2 v 10.9 h 17.75 v 4.8 h -23.15 z" />
|
||||
<path
|
||||
id="path5296"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1782.8589,-1637.6735 h 4 v -6.7 h 5.1 v 6.7 h 5.55 v 4.1 h -5.55 v 13.15 q 0,1.85 0.8,2.75 0.8,0.9 2.6,0.9 0.4,0 0.9,-0.1 0.55,-0.1 0.95,-0.2 l 0.45,4.3 q -0.7,0.25 -1.65,0.4 -0.95,0.2 -2.05,0.2 -1.4,0 -2.7,-0.35 -1.3,-0.35 -2.3,-1.2 -0.95,-0.85 -1.55,-2.25 -0.55,-1.45 -0.55,-3.55 v -14.05 h -4 z" />
|
||||
<path
|
||||
id="path5298"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1825.2824,-1612.8735 h -5.1 v -15.2 q 0,-2.7 -1.5,-4.15 -1.45,-1.45 -4,-1.45 -1.35,0 -2.6,0.55 -1.25,0.55 -2.2,1.55 -0.9,1 -1.45,2.45 -0.55,1.4 -0.55,3.15 v 13.1 h -5.1 v -35 h 5.1 v 14.35 q 1.4,-2.2 3.65,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.8,1.65 1.2,1.1 1.9,2.75 0.7,1.6 0.7,3.75 z" />
|
||||
<path
|
||||
id="path5300"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1835.5316,-1624.1735 q 0.05,1.65 0.6,3.05 0.6,1.35 1.6,2.4 1,1 2.35,1.55 1.35,0.55 3,0.55 1.5,0 2.65,-0.4 1.15,-0.4 2,-1.05 0.9,-0.7 1.55,-1.65 0.65,-0.95 1.2,-2.05 l 3.95,2.35 q -1.75,3.6 -4.5,5.45 -2.75,1.8 -7,1.8 -2.55,0 -4.85,-0.95 -2.25,-0.95 -3.95,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1,-2.45 2.7,-4.15 1.75,-1.75 4.05,-2.7 2.35,-0.95 5,-0.95 2.7,0 4.9,0.95 2.2,0.9 3.75,2.55 1.6,1.65 2.45,3.95 0.9,2.25 0.9,4.95 v 1.8 z m 7.55,-10.1 q -1.4,0 -2.65,0.5 -1.2,0.45 -2.2,1.3 -0.95,0.8 -1.65,1.95 -0.7,1.1 -1.05,2.45 h 14.8 q -0.15,-1.5 -0.85,-2.65 -0.65,-1.2 -1.65,-1.95 -1,-0.8 -2.25,-1.2 -1.2,-0.4 -2.5,-0.4 z" />
|
||||
<path
|
||||
id="path5302"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1874.0402,-1633.2735 q -1,-0.3 -1.95,-0.3 -1.35,0 -2.5,0.6 -1.15,0.55 -2,1.6 -0.8,1 -1.25,2.4 -0.45,1.4 -0.45,3.05 v 13.05 h -5.1 v -24.8 h 5.1 v 4.2 q 1,-2.2 2.8,-3.55 1.8,-1.35 4.35,-1.35 0.5,0 0.9,0.1 0.45,0.05 0.95,0.15 z" />
|
||||
<path
|
||||
id="path5304"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1881.723,-1624.1735 q 0.05,1.65 0.6,3.05 0.6,1.35 1.6,2.4 1,1 2.35,1.55 1.35,0.55 3,0.55 1.5,0 2.65,-0.4 1.15,-0.4 2,-1.05 0.9,-0.7 1.55,-1.65 0.65,-0.95 1.2,-2.05 l 3.95,2.35 q -1.75,3.6 -4.5,5.45 -2.75,1.8 -7,1.8 -2.55,0 -4.85,-0.95 -2.25,-0.95 -3.95,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1,-2.45 2.7,-4.15 1.75,-1.75 4.05,-2.7 2.35,-0.95 5,-0.95 2.7,0 4.9,0.95 2.2,0.9 3.75,2.55 1.6,1.65 2.45,3.95 0.9,2.25 0.9,4.95 v 1.8 z m 7.55,-10.1 q -1.4,0 -2.65,0.5 -1.2,0.45 -2.2,1.3 -0.95,0.8 -1.65,1.95 -0.7,1.1 -1.05,2.45 h 14.8 q -0.15,-1.5 -0.85,-2.65 -0.65,-1.2 -1.65,-1.95 -1,-0.8 -2.25,-1.2 -1.2,-0.4 -2.5,-0.4 z" />
|
||||
<path
|
||||
id="path5306"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1906.3956,-1637.6735 h 5.1 v 14.9 q 0,2.9 1.4,4.4 1.45,1.5 4.1,1.5 1.35,0 2.55,-0.55 1.2,-0.55 2.05,-1.5 0.9,-1 1.4,-2.35 0.5,-1.4 0.5,-3 v -13.4 h 5.1 v 24.8 h -5.1 v -4 q -1.2,2.25 -3.3,3.5 -2.05,1.2 -4.75,1.2 -1.8,0 -3.45,-0.6 -1.65,-0.55 -2.9,-1.7 -1.25,-1.2 -2,-3 -0.7,-1.8 -0.7,-4.25 z" />
|
||||
<path
|
||||
id="path5308"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1970.0519,-1612.8735 h -5.1 v -16.4 q 0,-2.15 -1.05,-3.35 -1,-1.25 -3.25,-1.25 -2.25,0 -3.85,1.75 -1.6,1.7 -1.6,5.6 v 13.65 h -5.1 v -16.25 q 0,-2.1 -1.05,-3.4 -1,-1.35 -3.05,-1.35 -2.25,0 -3.95,1.85 -1.65,1.8 -1.65,5.5 v 13.65 h -5.1 v -24.8 h 5.1 v 3.55 q 1.15,-1.95 3.1,-3.1 1.95,-1.15 4.2,-1.15 2.55,0 4.25,1.1 1.75,1.1 2.55,3.3 1.3,-2.25 3.3,-3.3 2.05,-1.1 4.6,-1.1 3.55,0 5.6,2.05 2.05,2 2.05,5.3 z" />
|
||||
<path
|
||||
id="path5310"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1741.223,-1585.3735 h 13.6 q 5.25,0 8.15,2.3 2.95,2.3 2.95,6.2 0,1.45 -0.45,2.65 -0.45,1.2 -1.2,2.15 -0.75,0.9 -1.75,1.6 -0.95,0.7 -2,1.15 1.45,0.55 2.7,1.3 1.25,0.75 2.15,1.8 0.95,1 1.45,2.35 0.55,1.35 0.55,3.1 0,2.45 -1,4.4 -1,1.9 -2.7,3.25 -1.65,1.35 -3.9,2.05 -2.25,0.7 -4.75,0.7 h -13.8 z m 5.4,30.3 h 7.85 q 3.45,0 5.4,-1.4 2,-1.4 2,-4.35 0,-2.95 -2,-4.35 -1.95,-1.4 -5.4,-1.4 h -7.85 z m 0,-16.2 h 7.8 q 2.95,0 4.6,-1.1 1.7,-1.1 1.7,-3.6 0,-2.5 -1.7,-3.6 -1.65,-1.1 -4.6,-1.1 h -7.8 z" />
|
||||
<path
|
||||
id="path5312"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1772.7042,-1585.3735 h 5.1 v 35 h -5.1 z" />
|
||||
<path
|
||||
id="path5314"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1809.7636,-1562.7735 q 0,3.25 -1.15,5.7 -1.15,2.45 -3.05,4.1 -1.85,1.65 -4.25,2.5 -2.35,0.8 -4.8,0.8 -2.45,0 -4.85,-0.8 -2.35,-0.85 -4.25,-2.5 -1.85,-1.65 -3,-4.1 -1.15,-2.45 -1.15,-5.7 0,-3.2 1.15,-5.65 1.15,-2.45 3,-4.1 1.9,-1.65 4.25,-2.5 2.4,-0.85 4.85,-0.85 2.45,0 4.8,0.85 2.4,0.85 4.25,2.5 1.9,1.65 3.05,4.1 1.15,2.45 1.15,5.65 z m -13.25,8.4 q 1.65,0 3.1,-0.6 1.45,-0.6 2.55,-1.7 1.1,-1.1 1.75,-2.65 0.65,-1.55 0.65,-3.45 0,-1.9 -0.65,-3.45 -0.65,-1.55 -1.75,-2.65 -1.1,-1.1 -2.55,-1.7 -1.45,-0.6 -3.1,-0.6 -1.65,0 -3.1,0.6 -1.45,0.6 -2.55,1.7 -1.1,1.1 -1.75,2.65 -0.65,1.55 -0.65,3.45 0,1.9 0.65,3.45 0.65,1.55 1.75,2.65 1.1,1.1 2.55,1.7 1.45,0.6 3.1,0.6 z" />
|
||||
<path
|
||||
id="path5316"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1837.8847,-1556.8235 q -1.75,3.5 -4.65,5.35 -2.85,1.8 -6.75,1.8 -2.7,0 -5.05,-0.95 -2.35,-0.95 -4.1,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1.05,-2.45 2.8,-4.15 1.8,-1.75 4.1,-2.7 2.35,-0.95 4.95,-0.95 4.1,0 7,1.8 2.9,1.8 4.2,4.95 l -4.05,2.7 q -1.35,-2.75 -3.2,-3.75 -1.8,-1 -3.9,-1 -1.6,0 -3,0.6 -1.4,0.55 -2.45,1.65 -1.05,1.05 -1.65,2.65 -0.6,1.55 -0.6,3.5 0,1.95 0.55,3.55 0.6,1.55 1.65,2.65 1.05,1.05 2.45,1.65 1.4,0.55 3.05,0.55 2.8,0 4.45,-1.3 1.7,-1.35 2.95,-3.7 z" />
|
||||
<path
|
||||
id="path5318"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1847.8238,-1566.8235 8.45,-8.35 h 6.25 l -8.75,8.6 10.25,16.2 h -5.95 l -7.95,-12.6 -2.3,2.3 v 10.3 h -5.1 v -35 h 5.1 z" />
|
||||
<path
|
||||
id="path5320"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1888.4706,-1556.8235 q -1.75,3.5 -4.65,5.35 -2.85,1.8 -6.75,1.8 -2.7,0 -5.05,-0.95 -2.35,-0.95 -4.1,-2.65 -1.7,-1.75 -2.7,-4.15 -1,-2.45 -1,-5.35 0,-2.9 1,-5.3 1.05,-2.45 2.8,-4.15 1.8,-1.75 4.1,-2.7 2.35,-0.95 4.95,-0.95 4.1,0 7,1.8 2.9,1.8 4.2,4.95 l -4.05,2.7 q -1.35,-2.75 -3.2,-3.75 -1.8,-1 -3.9,-1 -1.6,0 -3,0.6 -1.4,0.55 -2.45,1.65 -1.05,1.05 -1.65,2.65 -0.6,1.55 -0.6,3.5 0,1.95 0.55,3.55 0.6,1.55 1.65,2.65 1.05,1.05 2.45,1.65 1.4,0.55 3.05,0.55 2.8,0 4.45,-1.3 1.7,-1.35 2.95,-3.7 z" />
|
||||
<path
|
||||
id="path5322"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1915.8097,-1550.3735 h -5.1 v -15.2 q 0,-2.7 -1.5,-4.15 -1.45,-1.45 -4,-1.45 -1.35,0 -2.6,0.55 -1.25,0.55 -2.2,1.55 -0.9,1 -1.45,2.45 -0.55,1.4 -0.55,3.15 v 13.1 h -5.1 v -35 h 5.1 v 14.35 q 1.4,-2.2 3.65,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.8,1.65 1.2,1.1 1.9,2.75 0.7,1.6 0.7,3.75 z" />
|
||||
<path
|
||||
id="path5324"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1939.2159,-1550.3735 q -0.45,-0.55 -0.9,-1.55 -0.4,-1.05 -0.5,-2.8 -1.2,2.5 -3.35,3.8 -2.15,1.25 -4.9,1.25 -1.9,0 -3.45,-0.55 -1.55,-0.55 -2.65,-1.55 -1.1,-1.05 -1.75,-2.45 -0.6,-1.4 -0.6,-3.1 0,-1.85 0.7,-3.25 0.7,-1.45 1.9,-2.4 1.2,-1 2.75,-1.6 1.6,-0.6 3.4,-0.9 l 7.85,-1.25 v -1.05 q 0,-4.3 -5.2,-4.3 -2.65,0 -3.9,1 -1.25,0.95 -1.25,2.25 0,0.2 0,0.35 0,0.1 0.1,0.4 l -4.55,1.55 q -0.4,-0.95 -0.4,-2 0,-1.45 0.65,-2.75 0.7,-1.35 2,-2.35 1.3,-1.05 3.15,-1.65 1.85,-0.6 4.2,-0.6 5.1,0 7.7,2.2 2.6,2.15 2.6,6.2 v 10.9 q 0,2.15 0.3,3.5 0.35,1.3 1.2,2.7 z m -8.85,-3.55 q 1.65,0 3,-0.6 1.4,-0.65 2.35,-1.75 0.95,-1.15 1.45,-2.65 0.55,-1.55 0.55,-3.35 v -0.7 l -6.7,1.15 q -2.35,0.4 -3.6,1.45 -1.2,1 -1.2,2.75 0,1.7 1.1,2.7 1.15,1 3.05,1 z" />
|
||||
<path
|
||||
id="path5326"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1949.9003,-1575.1735 h 5.1 v 24.8 h -5.1 z m -0.35,-9.7 h 5.8 v 5.75 h -5.8 z" />
|
||||
<path
|
||||
id="path5328"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:50px;line-height:125%;font-family:'Basis Grotesque';-inkscape-font-specification:'Basis Grotesque, Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1984.162,-1550.3735 h -5.1 v -15.35 q 0,-2.55 -1.45,-4 -1.4,-1.45 -4.05,-1.45 -1.35,0 -2.55,0.55 -1.15,0.55 -2.05,1.55 -0.85,1 -1.4,2.45 -0.5,1.4 -0.5,3.15 v 13.1 h -5.1 v -24.8 h 5.1 v 4.15 q 1.3,-2.2 3.5,-3.5 2.25,-1.35 4.95,-1.35 1.8,0 3.4,0.6 1.6,0.55 2.75,1.65 1.15,1.05 1.8,2.7 0.7,1.6 0.7,3.7 z" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.5555554,0,0,0.5555554,1251.3627,-1142.1603)"
|
||||
id="g7703">
|
||||
<polygon
|
||||
style="fill:#343434"
|
||||
points="127.9611,287.958 255.9231,212.32 127.9611,0 125.1661,9.5 125.1661,285.168 "
|
||||
id="polygon7705" />
|
||||
<polygon
|
||||
style="fill:#8c8c8c"
|
||||
points="0,212.32 127.962,287.959 127.962,154.158 127.962,0 "
|
||||
id="polygon7707" />
|
||||
<polygon
|
||||
style="fill:#3c3c3b"
|
||||
points="127.9611,416.9066 255.9991,236.5866 127.9611,312.1866 126.3861,314.1066 126.3861,412.3056 "
|
||||
id="polygon7709" />
|
||||
<polygon
|
||||
style="fill:#8c8c8c"
|
||||
points="127.962,416.9052 127.962,312.1852 0,236.5852 "
|
||||
id="polygon7711" />
|
||||
<polygon
|
||||
style="fill:#141414"
|
||||
points="127.9611,287.9577 255.9211,212.3207 127.9611,154.1587 "
|
||||
id="polygon7713" />
|
||||
<polygon
|
||||
style="fill:#393939"
|
||||
points="0.0009,212.3208 127.9609,287.9578 127.9609,154.1588 "
|
||||
id="polygon7715" />
|
||||
</g>
|
||||
<g
|
||||
style="font-size:35px;line-height:1.25;font-family:sans-serif;stroke-width:0.9375"
|
||||
id="text7986"
|
||||
|
@ -1486,8 +1382,7 @@
|
|||
<g
|
||||
style="font-size:35px;line-height:1.25;font-family:sans-serif;stroke-width:0.9375"
|
||||
id="text9319"
|
||||
aria-label="Encrypted
|
||||
kFragi">
|
||||
aria-label="Encrypted kFragi">
|
||||
<path
|
||||
id="path6031"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
|
@ -1552,9 +1447,7 @@ kFragi">
|
|||
<g
|
||||
style="font-size:35px;line-height:1.25;font-family:sans-serif;stroke-width:0.9375"
|
||||
id="text15880"
|
||||
aria-label="Obtain Ursulai information
|
||||
and associated
|
||||
encrypted kFragi">
|
||||
aria-label="Obtain Ursulai information and associated encrypted kFragi">
|
||||
<path
|
||||
id="path6085"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
|
@ -1773,9 +1666,7 @@ encrypted kFragi">
|
|||
<g
|
||||
style="font-size:35px;line-height:1.25;font-family:sans-serif;stroke-width:0.9375"
|
||||
id="text15880-4"
|
||||
aria-label="Send Capsule and
|
||||
encrypted kFragi
|
||||
to Ursulai">
|
||||
aria-label="Send Capsule and encrypted kFragi to Ursulai">
|
||||
<path
|
||||
id="path6190"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
|
@ -1932,9 +1823,7 @@ to Ursulai">
|
|||
<g
|
||||
style="font-size:35px;line-height:1.25;font-family:sans-serif;stroke-width:0.9375"
|
||||
id="text10711-4"
|
||||
aria-label="Decrypt kFragi
|
||||
using Ursulai's
|
||||
private key (skui)">
|
||||
aria-label="Decrypt kFragi using Ursulai's private key (skui)">
|
||||
<path
|
||||
id="path5903"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
|
@ -2111,8 +2000,7 @@ private key (skui)">
|
|||
<g
|
||||
style="font-size:35px;line-height:1.25;font-family:sans-serif;stroke-width:0.9375"
|
||||
id="text11328"
|
||||
aria-label="Apply kFragi
|
||||
to Capsule">
|
||||
aria-label="Apply kFragi to Capsule">
|
||||
<path
|
||||
id="path5990"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
|
@ -2194,5 +2082,63 @@ to Capsule">
|
|||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Basis Grotesque Pro';-inkscape-font-specification:'Basis Grotesque Pro';text-align:center;text-anchor:middle;stroke-width:0.9375"
|
||||
d="m 684.04182,-403.45573 h -14.35 q 0.14,2.8 1.75,4.62 1.61,1.785 4.235,1.785 2.205,0 3.535,-1.015 1.365,-1.05 2.31,-2.94 l 1.995,1.19 q -2.555,5.075 -7.945,5.075 -3.605,0 -6.125,-2.59 -2.485,-2.625 -2.485,-6.58 0,-3.955 2.52,-6.545 2.52,-2.625 6.195,-2.625 3.85,0 6.09,2.415 2.275,2.415 2.275,6.265 z m -8.365,-7.315 q -2.275,0 -3.78,1.4 -1.505,1.365 -1.995,3.675 h 11.41 q -0.14,-2.345 -1.82,-3.71 -1.68,-1.365 -3.815,-1.365 z" />
|
||||
</g>
|
||||
<g
|
||||
id="g4913"
|
||||
transform="matrix(0.65109681,0,0,0.65109681,1256.9648,-1039.5484)"
|
||||
style="fill:none">
|
||||
<path
|
||||
d="m -128.15178,183.90102 h 11.11 v 4.4 c 1.255,-1.6262 2.904,-2.9064 4.79,-3.72 2.149,-0.9119 4.466,-1.3584 6.8,-1.31 3.425,-0.0809 6.803003,0.8027 9.750003,2.55 2.806,1.7497 5.04,4.2796 6.43,7.28 1.59,3.4446 2.37,7.2074 2.28,11 0.086,3.781 -0.751,7.526 -2.44,10.91 -1.538,3.024 -3.907,5.547 -6.83,7.27 -3.085,1.771 -6.593003,2.67 -10.150003,2.6 -2.132,0.026 -4.25,-0.354 -6.24,-1.12 -1.71,-0.64 -3.223,-1.715 -4.39,-3.12 v 19.9 h -11.11 z m 13.22,28.26 c 0.897,1.014 2.009,1.817 3.254,2.349 1.245,0.533 2.593,0.782 3.946,0.731 1.34,0.049 2.673,-0.203 3.903,-0.736 1.231,-0.533 2.326,-1.333 3.207,-2.344 1.877003,-2.273 2.836003,-5.1658 2.690003,-8.11 0.143,-2.9762 -0.827,-5.8992 -2.720003,-8.2 -0.882,-1.0087 -1.978,-1.8077 -3.208,-2.3389 -1.23,-0.5311 -2.563,-0.7809 -3.902,-0.7311 -1.348,-0.0489 -2.689,0.201 -3.929,0.7318 -1.239,0.5308 -2.346,1.3293 -3.241,2.3382 -1.89,2.3023 -2.856,5.2251 -2.71,8.2 -0.141,2.9469 0.825,5.84 2.71,8.11 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4289" />
|
||||
<path
|
||||
d="m -72.681777,222.15102 c -3.182,-1.712 -5.816,-4.288 -7.6,-7.43 -1.785,-3.273 -2.72,-6.942 -2.72,-10.6701 0,-3.7282 0.935,-7.3968 2.72,-10.67 1.783,-3.1455 4.417,-5.7243 7.6,-7.44 3.383,-1.7542 7.139,-2.6699 10.95,-2.6699 3.811,0 7.567,0.9157 10.95,2.6699 3.176,1.722 5.805,4.2995 7.59,7.44 1.785,3.2732 2.72,6.9418 2.72,10.67 0,3.7281 -0.935,7.3971 -2.72,10.6701 -1.785,3.138 -4.415,5.712 -7.59,7.43 -3.381,1.761 -7.138,2.68 -10.95,2.68 -3.812,0 -7.569,-0.919 -10.95,-2.68 z m 3.67,-10 c 0.935,0.991 2.062,1.781 3.313,2.321 1.251,0.539 2.6,0.818 3.962,0.818 1.363,0 2.711,-0.279 3.962,-0.818 1.251,-0.54 2.378,-1.33 3.313,-2.321 1.921,-2.239 2.921,-5.1228 2.8,-8.0701 0.131,-2.9761 -0.869,-5.8915 -2.8,-8.16 -0.939,-0.9835 -2.068,-1.7664 -3.319,-2.3012 -1.25,-0.5349 -2.596,-0.8106 -3.956,-0.8106 -1.36,0 -2.706,0.2757 -3.956,0.8106 -1.251,0.5348 -2.38,1.3177 -3.319,2.3012 -1.928,2.2695 -2.925,5.1851 -2.79,8.16 -0.117,2.9359 0.879,5.8081 2.79,8.0401 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4291" />
|
||||
<path
|
||||
d="m -33.761777,166.40092 h 11.11 v 57.7901 h -11.11 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4293" />
|
||||
<path
|
||||
d="m -2.8317774,223.87102 -14.6299996,-40.0001 h 11.3499996 l 8.48,26.0001 8.3900004,-26.0001 h 11.43 l -14.6300004,40.1301 -5.67,16.46 h -10.63 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4295" />
|
||||
<path
|
||||
d="m 28.538223,219.19102 c -3.38,-3.747 -5.07,-8.793 -5.07,-15.1401 -0.087,-3.7914 0.689,-7.553 2.27,-11 1.404,-3.0191 3.673,-5.553 6.52,-7.28 3.061,-1.7511 6.545,-2.6231 10.07,-2.52 2.231,-0.0324 4.445,0.3859 6.51,1.23 1.801,0.7181 3.385,1.8893 4.6,3.4 v -4 h 11.19 v 42.6901 c 0.078,1.886 -0.253,3.766 -0.971,5.511 -0.718,1.745 -1.806,3.314 -3.189,4.599 -2.767,2.533 -6.433,3.797 -11,3.79 h -20.3 v -8.71 h 18.54 c 0.789,0.024 1.573,-0.125 2.299,-0.436 0.725,-0.311 1.374,-0.776 1.901,-1.364 1.115,-1.263 1.702,-2.906 1.64,-4.59 v -5.28 c -1.12,1.574 -2.678,2.784 -4.48,3.48 -2.079,0.845 -4.306,1.266 -6.55,1.24 -5.94,0.013 -10.6,-1.86 -13.98,-5.62 z m 8.55,-7 c 0.898,0.998 2.006,1.784 3.244,2.303 1.238,0.518 2.575,0.757 3.916,0.697 1.345,0.056 2.686,-0.183 3.928,-0.701 1.243,-0.519 2.356,-1.303 3.262,-2.299 1.9,-2.277 2.872,-5.1879 2.72,-8.1501 0.143,-2.9762 -0.827,-5.8992 -2.72,-8.2 -0.896,-1.0127 -2.006,-1.8135 -3.249,-2.3445 -1.244,-0.531 -2.59,-0.7788 -3.941,-0.7255 -1.351,-0.0592 -2.699,0.187 -3.942,0.7203 -1.243,0.5332 -2.35,1.3398 -3.238,2.3597 -1.867,2.3127 -2.817,5.2315 -2.67,8.2 -0.166,2.9709 0.787,5.8961 2.67,8.2001 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4297" />
|
||||
<path
|
||||
d="m 81.648223,222.15102 c -3.177,-1.716 -5.807,-4.29 -7.59,-7.43 -1.785,-3.273 -2.72,-6.942 -2.72,-10.6701 0,-3.7282 0.935,-7.3968 2.72,-10.67 1.782,-3.1428 4.412,-5.721 7.59,-7.44 3.383,-1.7542 7.139,-2.6699 10.95,-2.6699 3.811,0 7.566997,0.9157 10.949997,2.6699 3.179,1.7214 5.811,4.2988 7.6,7.44 1.778,3.2752 2.71,6.943 2.71,10.67 0,3.7269 -0.932,7.3951 -2.71,10.6701 -1.789,3.138 -4.422,5.712 -7.6,7.43 -3.381,1.761 -7.137997,2.68 -10.949997,2.68 -3.812,0 -7.569,-0.919 -10.95,-2.68 z m 3.68,-10 c 0.935,0.991 2.062,1.781 3.313,2.321 1.251,0.539 2.6,0.818 3.962,0.818 1.363,0 2.711,-0.279 3.962,-0.818 1.251,-0.54 2.378,-1.33 3.313,-2.321 1.917997,-2.24 2.914997,-5.124 2.789997,-8.0701 0.135,-2.9749 -0.862,-5.8905 -2.789997,-8.16 -0.939,-0.9835 -2.068,-1.7664 -3.319,-2.3012 -1.25,-0.5349 -2.596,-0.8106 -3.956,-0.8106 -1.36,0 -2.706,0.2757 -3.956,0.8106 -1.251,0.5348 -2.38,1.3177 -3.319,2.3012 -1.935,2.266 -2.936,5.1832 -2.8,8.16 -0.118,2.9378 0.882,5.8111 2.8,8.0401 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4299" />
|
||||
<path
|
||||
d="m 119.93822,183.90102 h 11.19 v 5.6 c 1.132,-1.9815 2.827,-3.5825 4.87,-4.6 2.286,-1.1317 4.81,-1.6975 7.36,-1.65 2.756,-0.0559 5.475,0.6352 7.87,2 2.253,1.3279 4.081,3.2704 5.27,5.6 1.292,2.5478 1.937,5.374 1.88,8.23 v 25.1 h -11.19 v -22.61 c 0.073,-2.2026 -0.699,-4.3497 -2.16,-6 -0.705,-0.7742 -1.571,-1.3854 -2.536,-1.7913 -0.965,-0.4058 -2.007,-0.5965 -3.054,-0.5587 -1.122,-0.0393 -2.239,0.1647 -3.275,0.5979 -1.036,0.4333 -1.965,1.0856 -2.725,1.9121 -1.579,1.7645 -2.411,4.0737 -2.32,6.44 v 22.06 h -11.18 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4301" />
|
||||
<path
|
||||
d="m 185.23822,168.25102 h 21 c 5.48,0 9.813,1.5167 13,4.55 1.598,1.5501 2.851,3.4204 3.677,5.4883 0.825,2.068 1.205,4.287 1.113,6.5117 0.094,2.225 -0.285,4.4445 -1.11,6.5127 -0.826,2.0683 -2.08,3.9383 -3.68,5.4873 -3.2,3.04 -7.533,4.56 -13,4.56 h -14.17 v 22.86 h -6.79 z m 21,27 c 3.733,0 6.477,-1 8.23,-3 1.8,-2.082 2.744,-4.7695 2.64,-7.52 0.1,-2.7343 -0.836,-5.4057 -2.62,-7.48 -1.76,-2 -4.503,-3 -8.23,-3 h -14.19 v 21 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4303" />
|
||||
<path
|
||||
d="m 237.42822,222.15102 c -3.053,-1.753 -5.568,-4.308 -7.27,-7.39 -1.738,-3.302 -2.646,-6.9782 -2.646,-10.71 0,-3.7317 0.908,-7.4075 2.646,-10.71 1.699,-3.0863 4.214,-5.6463 7.27,-7.4 3.215,-1.8192 6.857,-2.7478 10.55,-2.69 3.704,-0.0595 7.357,0.8616 10.59,2.67 3.078,1.7387 5.609,4.3014 7.31,7.4 1.738,3.3025 2.646,6.9783 2.646,10.71 0,3.7318 -0.908,7.408 -2.646,10.71 -1.706,3.092 -4.237,5.65 -7.31,7.39 -3.23,1.817 -6.885,2.742 -10.59,2.68 -3.691,0.071 -7.334,-0.847 -10.55,-2.66 z m -1.6,-10.35 c 1.101,2.213 2.807,4.068 4.92,5.35 2.183,1.303 4.688,1.968 7.23,1.92 2.554,0.044 5.07,-0.621 7.27,-1.92 2.145,-1.267 3.88,-3.124 5,-5.35 1.156,-2.422 1.756,-5.0714 1.756,-7.755 0,-2.6836 -0.6,-5.3332 -1.756,-7.755 -1.12,-2.2256 -2.855,-4.0826 -5,-5.35 -2.2,-1.2991 -4.716,-1.9637 -7.27,-1.92 -2.542,-0.0478 -5.047,0.6173 -7.23,1.92 -2.108,1.2711 -3.813,3.1118 -4.92,5.31 -1.156,2.4218 -1.756,5.0714 -1.756,7.755 0,2.6836 0.6,5.333 1.756,7.755 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4305" />
|
||||
<path
|
||||
d="m 280.50822,219.67102 c -3.78,-3.44 -5.857,-8.037 -6.23,-13.79 h 6.71 c 0.189,3.566 1.752,6.92 4.36,9.36 2.527,2.293 5.923,3.437 10.19,3.43 4.047,0 7.283,-0.813 9.71,-2.44 1.19,-0.796 2.151,-1.89 2.788,-3.172 0.636,-1.282 0.927,-2.709 0.842,-4.138 0.04,-0.927 -0.105,-1.8524 -0.426,-2.7228 -0.321,-0.8703 -0.812,-1.6682 -1.444,-2.3472 -1.319,-1.3334 -2.918,-2.3579 -4.68,-3 -1.873,-0.72 -4.457,-1.5334 -7.75,-2.44 -3.276,-0.8735 -6.492,-1.9557 -9.63,-3.24 -2.402,-1.0163 -4.527,-2.5897 -6.2,-4.59 -1.792,-2.2965 -2.701,-5.1602 -2.56,-8.07 -0.049,-2.7766 0.792,-5.4961 2.4,-7.76 1.715,-2.3291 4.041,-4.139 6.72,-5.23 3.112,-1.2989 6.459,-1.939 9.83,-1.88 5.587,0 10.18,1.5033 13.78,4.51 1.779,1.4738 3.231,3.302 4.264,5.3681 1.033,2.066 1.624,4.3247 1.736,6.6319 h -6.72 c -0.103,-1.4735 -0.512,-2.9093 -1.201,-4.2161 -0.689,-1.3067 -1.642,-2.4557 -2.799,-3.3739 -2.607,-1.9573 -5.813,-2.9472 -9.07,-2.8 -3.79,0 -6.74,0.78 -8.88,2.32 -1.024,0.7149 -1.853,1.6754 -2.411,2.7935 -0.557,1.118 -0.825,2.358 -0.779,3.6065 -0.039,0.9001 0.104,1.7988 0.42,2.6425 0.316,0.8436 0.799,1.6148 1.42,2.2675 1.306,1.3063 2.888,2.304 4.63,2.92 2.49,0.8767 5.023,1.6244 7.59,2.24 3.34,0.8348 6.627,1.8734 9.84,3.11 2.493,1.0111 4.691,2.6345 6.39,4.72 1.864,2.4478 2.799,5.4774 2.64,8.55 0.079,3.062 -0.848,6.066 -2.64,8.55 -1.861,2.475 -4.385,4.371 -7.28,5.47 -3.363,1.3 -6.945,1.938 -10.55,1.88 -6.227,0 -11.23,-1.72 -15.01,-5.16 z"
|
||||
fill="#0a0b0d"
|
||||
id="path4307" />
|
||||
</g>
|
||||
<g
|
||||
id="g4901"
|
||||
transform="matrix(1.430532,0,0,1.430532,1200.8167,-1159.4605)"
|
||||
style="fill:none">
|
||||
<path
|
||||
d="m 124,62.7799 -34,-19.64 c -2.4323,-1.4043 -5.1914,-2.1436 -8,-2.1436 -2.8086,0 -5.5677,0.7393 -8,2.1436 l -34,19.64 c -2.4328,1.4046 -4.453,3.425 -5.8573,5.858 -1.4043,2.433 -2.1433,5.1928 -2.1427,8.002 V 115.88 c -6e-4,2.809 0.7384,5.569 2.1427,8.002 1.4043,2.433 3.4245,4.453 5.8573,5.858 l 34,19.64 c 2.4323,1.404 5.1914,2.144 8,2.144 2.8086,0 5.5677,-0.74 8,-2.144 l 34,-19.64 c 2.433,-1.405 4.453,-3.425 5.857,-5.858 1.405,-2.433 2.144,-5.193 2.143,-8.002 V 76.6399 c 0.001,-2.8092 -0.738,-5.569 -2.143,-8.002 -1.404,-2.433 -3.424,-4.4534 -5.857,-5.858 z m 0,53.1001 c 0,1.405 -0.369,2.784 -1.071,4.001 -0.703,1.216 -1.713,2.227 -2.929,2.929 l -34,19.62 c -1.2128,0.712 -2.5936,1.087 -4,1.087 -1.4064,0 -2.7872,-0.375 -4,-1.087 L 44,122.81 c -1.2164,-0.702 -2.2265,-1.713 -2.9287,-2.929 C 40.3692,118.664 39.9997,117.285 40,115.88 V 76.6399 c 0.0032,-1.4066 0.374,-2.7879 1.0757,-4.007 0.7016,-1.219 1.7097,-2.2336 2.9243,-2.943 l 34,-19.62 c 1.2162,-0.7021 2.5957,-1.0718 4,-1.0718 1.4043,0 2.7838,0.3697 4,1.0718 l 34,19.62 c 1.215,0.7094 2.223,1.724 2.924,2.943 0.702,1.2191 1.073,2.6004 1.076,4.007 z"
|
||||
fill="#7b3fe4"
|
||||
id="path4309" />
|
||||
<path
|
||||
d="m 113,92.03 -13,-7.5 c -0.9141,-0.5208 -1.948,-0.7947 -3,-0.7947 -1.052,0 -2.0859,0.2739 -3,0.7947 L 67,100.14 56,93.78 V 81.07 l 11,-6.36 11,6.36 v 6.84 l 8,-4.65 v -3.35 c 7e-4,-1.0539 -0.2762,-2.0893 -0.8029,-3.0022 C 84.6705,75.995 83.9127,75.2369 83,74.71 L 70,67.26 c -0.9141,-0.5208 -1.948,-0.7947 -3,-0.7947 -1.052,0 -2.0859,0.2739 -3,0.7947 l -13,7.5 c -0.908,0.5323 -1.6619,1.2915 -2.1879,2.2032 C 48.2862,77.8748 48.0063,78.9075 48,79.96 v 15 c 0.0056,1.054 0.285,2.0884 0.811,3.0018 0.5259,0.9133 1.2803,1.6743 2.189,2.2082 l 13,7.5 c 0.9156,0.516 1.9489,0.787 3,0.787 1.0511,0 2.0844,-0.271 3,-0.787 l 27,-15.64 11,6.37 v 12.69 l -11,6.36 -11,-6.36 v -6.92 l -8,4.62 v 3.47 c 0.0046,1.049 0.284,2.078 0.8104,2.985 0.5263,0.907 1.2813,1.661 2.1896,2.185 l 13,7.52 c 0.9102,0.532 1.9458,0.811 3,0.81 1.0549,0.006 2.0917,-0.274 3,-0.81 l 13,-7.5 c 0.911,-0.526 1.668,-1.283 2.195,-2.193 0.526,-0.911 0.804,-1.945 0.805,-2.997 v -15 c 0.006,-1.0589 -0.268,-2.1006 -0.795,-3.0192 C 114.678,93.3222 113.917,92.5595 113,92.03 Z"
|
||||
fill="#7b3fe4"
|
||||
id="path4311" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 369 KiB |
|
@ -1,3 +1,7 @@
|
|||
.wy-side-nav-search {
|
||||
background-color: #7038F1;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ Overview
|
|||
--------
|
||||
|
||||
This guide is an example of NuCypher's decentralized network allowing Alice to share a secret
|
||||
with Bob using the NuCypher Network via the ``nucypher`` CLI. It is analogous to the ``python`` example
|
||||
with Bob using the PRE Application on the Threshold Network via the ``nucypher`` CLI. It is analogous to the ``python`` example
|
||||
in :doc:`/application_development/getting_started`.
|
||||
|
||||
.. note::
|
||||
|
|
|
@ -10,11 +10,11 @@ Getting Started with Characters
|
|||
A Note about Side Channels
|
||||
--------------------------
|
||||
|
||||
The NuCypher network does not store or handle an application's data; instead - it manages access *to* application data.
|
||||
The PRE Application nodes do not store or handle an application's data; instead - it manages access *to* application data.
|
||||
Management of encrypted secrets and public keys tends to be highly domain-specific - the surrounding architecture
|
||||
will vary greatly depending on the throughput, sensitivity, and sharing cadence of application secrets.
|
||||
|
||||
In all cases, NuCypher must be integrated with a storage and transport layer in order to function properly.
|
||||
In all cases, the PRE Application must be integrated with a storage and transport layer in order to function properly.
|
||||
Along with the transport of ciphertexts, a nucypher application also needs to include channels for Alice and Bob
|
||||
to discover each other's public keys, and provide policy encrypting information to Bob and Enrico.
|
||||
|
||||
|
@ -67,7 +67,7 @@ the role of a ``Teacher``\ , or "seednode":
|
|||
|
||||
.. note::
|
||||
|
||||
While any nucypher worker node can be used to seed your peers, NuCypher maintains
|
||||
While any PRE node can be used to seed your peers, NuCypher maintains
|
||||
workers that can be used as seed nodes:
|
||||
|
||||
- mainnet: ``https://mainnet.nucypher.network:9151``
|
||||
|
@ -91,7 +91,7 @@ they know about network-wide, then kick-off the automated node-discovery loop:
|
|||
|
||||
|
||||
For information on how to run a staking Ursula node via CLI,
|
||||
see :doc:`Running a Worker </staking/running_a_worker>`.
|
||||
see :doc:`Running a Node </pre_application/running_a_node>`.
|
||||
|
||||
|
||||
Alice: Grant Access to a Secret
|
||||
|
@ -179,11 +179,11 @@ After generating a keystore, any future usage can decrypt the keys from the disk
|
|||
|
||||
# Instantiate Alice
|
||||
alice = Alice(
|
||||
keystore=keystore, # NuCypher Keystore
|
||||
known_nodes=[ursula], # Peers (Optional)
|
||||
signer=signer, # Alice Wallet
|
||||
keystore=keystore, # NuCypher Keystore
|
||||
known_nodes=[ursula], # Peers (Optional)
|
||||
signer=signer, # Alice Wallet
|
||||
eth_provider_uri=<RPC ENDPOINT>, # Ethereum RPC endpoint
|
||||
domain='lynx' # NuCypher network (mainnet, lynx, ibex)
|
||||
domain='lynx' # PRE Application network (mainnet, lynx, ibex)
|
||||
)
|
||||
|
||||
# Alice is identified by her ethereum address
|
||||
|
|
|
@ -8,7 +8,7 @@ Overview
|
|||
--------
|
||||
|
||||
To aid in application development, a network of federated Ursulas can be run locally. These Ursulas do not utilize
|
||||
blockchain functionality, but afford the same cryptographic capabilities of the public NuCypher network.
|
||||
blockchain functionality, but afford the same cryptographic capabilities of the public PRE nodes on the Threshold Network.
|
||||
|
||||
.. note::
|
||||
|
||||
|
|
|
@ -7,61 +7,7 @@ Lynx Testnet
|
|||
NuCypher provides a public Long-Term Support testnet running on the Ethereum Goerli testnet as a stable playground
|
||||
for application development and network users (e.g., Alices wishing to create sharing policies, grant and retrieve, etc.).
|
||||
|
||||
.. note::
|
||||
|
||||
Lynx testnet tokens are not needed to use nucypher as Alice, Bob, or Enrico.
|
||||
If you'd like to volunteer to run a Lynx testnet node, reach out to the
|
||||
team on our `Discord server <https://discord.gg/7rmXa3S>`_.
|
||||
.. attention::
|
||||
|
||||
|
||||
.. important::
|
||||
|
||||
Goerli ETH is required for the Lynx testnet, and can be obtained from Goerli's `standard faucet <https://goerli-faucet.slock.it/>`_
|
||||
or `authenticated faucet <https://faucet.goerli.mudit.blog/>`_.
|
||||
|
||||
|
||||
Alice and Bob can use the lynx testnet using the python API:
|
||||
|
||||
.. code:: python
|
||||
|
||||
# CharacterConfiguration API
|
||||
alice_factory = AliceConfiguration(domain='lynx', ...)
|
||||
alice_factory == 'lynx'
|
||||
True
|
||||
|
||||
alice = alice_factory.produce()
|
||||
alice.domain == 'lynx'
|
||||
True
|
||||
|
||||
# Character API
|
||||
alice = Alice(domain='lynx', ...)
|
||||
print(alice.domain)
|
||||
alice.domain == 'lynx'
|
||||
True
|
||||
|
||||
|
||||
Alice and Bob can also be configured to use the lynx testnet using the command line:
|
||||
|
||||
.. code::
|
||||
|
||||
# While creating a new alice
|
||||
$ nucypher alice init --network lynx --eth-provider <GOERLI PROVIDER URI>
|
||||
|
||||
# Update an existing alice
|
||||
$ nucypher alice config --network lynx --eth-provider <GOERLI PROVIDER URI>
|
||||
|
||||
# While creating a new bob
|
||||
$ nucypher bob init --network lynx --eth-provider <GOERLI PROVIDER URI>
|
||||
|
||||
# Update an existing bob
|
||||
$ nucypher bob config --network lynx --eth-provider <GOERLI PROVIDER URI>
|
||||
|
||||
|
||||
|
||||
Deployments
|
||||
-----------
|
||||
|
||||
* `NuCypherToken 0x02B50E38E5872068F325B1A7ca94D90ce2bfff63 <https://goerli.etherscan.io/address/0x02B50E38E5872068F325B1A7ca94D90ce2bfff63>`_
|
||||
* `StakingEscrow (Dispatcher) 0x40Ca356d8180Ddc21C82263F9EbCeaAc6Cad7250 <https://goerli.etherscan.io/address/0x40Ca356d8180Ddc21C82263F9EbCeaAc6Cad7250>`_
|
||||
* `PolicyManager (Dispatcher) 0xaC5e34d3FD41809873968c349d1194D23045b9D2 <https://goerli.etherscan.io/address/0xaC5e34d3FD41809873968c349d1194D23045b9D2>`_
|
||||
* `Adjudicator (Dispatcher) 0xC62e20B599416e4B5F3b54d50837F070bFec6412 <https://goerli.etherscan.io/address/0xC62e20B599416e4B5F3b54d50837F070bFec6412>`_
|
||||
This testnet is currently being migrated to Threshold Network.
|
||||
|
|
|
@ -1,7 +1,36 @@
|
|||
.. _porter:
|
||||
.. _web-development:
|
||||
|
||||
Porter Service
|
||||
==============
|
||||
===============
|
||||
Web Development
|
||||
===============
|
||||
|
||||
Web development / browser support for the PRE Application can be split into 3 projects:
|
||||
|
||||
#. :ref:`rust-umbral-library` - Rust implementation of Umbral, the underlying threshold PRE cryptography library.
|
||||
#. `Porter`_ - the "Infura for NuCypher" - a web-based service for interacting with the network PRE Application protocol.
|
||||
#. :ref:`nucypher-ts-library` - middleware javascript layer that ties the underlying cryptography ``rust-umbral`` layer to the use of Porter.
|
||||
|
||||
By leveraging rust-umbral and its associated javascript bindings for cryptography, and Porter for
|
||||
communication with the network of PRE nodes, a lightweight, richer and full-featured web and mobile
|
||||
experience is accessible to web application developers.
|
||||
|
||||
|
||||
.. _rust-umbral-library:
|
||||
|
||||
Rust-Umbral
|
||||
===========
|
||||
|
||||
`Rust-Umbral <https://github.com/nucypher/rust-umbral>`_ is the cryptography
|
||||
layer for client-side applications. The underlying Umbral threshold PRE scheme has been re-written in Rust,
|
||||
and provides bindings to other languages:
|
||||
|
||||
* Rust (primary)
|
||||
* JavaScript (WASM-based)
|
||||
* Python
|
||||
|
||||
|
||||
Porter
|
||||
======
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
@ -10,9 +39,7 @@ nucypher-based protocol operations on behalf of applications.
|
|||
|
||||
Its goal is to simplify and abstract the complexities surrounding the nucypher protocol to negate the need for
|
||||
applications to interact with it via a python client. Porter introduces the nucypher protocol to cross-platform
|
||||
functionality including web and mobile applications. By leveraging ``rust-umbral`` and its associated javascript
|
||||
bindings for cryptography, and Porter for communication with the network, a lightweight, richer and full-featured
|
||||
web and mobile experience is accessible to application developers.
|
||||
functionality including web and mobile applications.
|
||||
|
||||
.. image:: ../.static/img/porter_diagram.svg
|
||||
:target: ../.static/img/porter_diagram.svg
|
||||
|
@ -302,7 +329,7 @@ For a full list of CLI options, run:
|
|||
| | | |_| | | | |_( (/ /| |
|
||||
|_| \___/|_| \___)____)_|
|
||||
|
||||
the Pipe for nucypher network operations
|
||||
the Pipe for PRE Application network operations
|
||||
|
||||
Network: <NETWORK NAME>
|
||||
Provider: ...
|
||||
|
@ -324,7 +351,7 @@ For a full list of CLI options, run:
|
|||
| | | |_| | | | |_( (/ /| |
|
||||
|_| \___/|_| \___)____)_|
|
||||
|
||||
the Pipe for nucypher network operations
|
||||
the Pipe for PRE Application network operations
|
||||
|
||||
Network: <NETWORK NAME>
|
||||
Provider: ...
|
||||
|
@ -344,7 +371,7 @@ For a full list of CLI options, run:
|
|||
| | | |_| | | | |_( (/ /| |
|
||||
|_| \___/|_| \___)____)_|
|
||||
|
||||
the Pipe for nucypher network operations
|
||||
the Pipe for PRE Application network operations
|
||||
|
||||
Network: <NETWORK NAME>
|
||||
Provider: ...
|
||||
|
@ -365,7 +392,7 @@ For a full list of CLI options, run:
|
|||
| | | |_| | | | |_( (/ /| |
|
||||
|_| \___/|_| \___)____)_|
|
||||
|
||||
the Pipe for nucypher network operations
|
||||
the Pipe for PRE Application network operations
|
||||
|
||||
Network: <NETWORK NAME>
|
||||
Provider: ...
|
||||
|
@ -721,3 +748,12 @@ Example Response
|
|||
},
|
||||
"version": "6.0.0"
|
||||
}
|
||||
|
||||
|
||||
.. _nucypher-ts-library:
|
||||
|
||||
nucypher-ts
|
||||
===========
|
||||
|
||||
`nucypher-ts <https://github.com/nucypher/nucypher-ts>`_ is a typescript middleware layer implementation of the ``nucypher`` python library. It abstracts
|
||||
the cryptography layer and PRE network protocol to provide PRE functionality in web applications.
|
|
@ -9,7 +9,7 @@ role.
|
|||
* **Alice**: *"The Data Owner"* - retains full control over the data encrypted for her and determines whom to share the data with
|
||||
* **Enrico**: *"The Encryptor"* - a data source that encrypts data on behalf of Alice
|
||||
* **Bob**: *"The Data Recipient"* - the data recipient that Alice intends to share data with
|
||||
* **Ursula**: *"The Proxy in PRE"* - the nodes on the NuCypher Network that stand ready to re-encrypt data in exchange for payment in fees and token rewards; they enforce the access policy created by Alice
|
||||
* **Ursula**: *"The Proxy in PRE"* - the PRE node on the Threshold Network that stands ready to re-encrypt data in exchange for payment in fees and token rewards; they enforce the access policy created by Alice
|
||||
|
||||
.. _Umbral: https://github.com/nucypher/umbral-doc/blob/master/umbral-doc.pdf
|
||||
|
||||
|
@ -37,10 +37,10 @@ for different Bobs. Enrico, therefore, only has to encrypt data using the provid
|
|||
and data can later be re-encrypted for all Bobs who have been granted access.
|
||||
|
||||
When Alice wants to share this information with Bob, she can create a
|
||||
policy in the NuCypher Network to grant access to him. To grant access to Bob, Alice must:
|
||||
policy in the PRE Application running on the Threshold Network to grant access to him. To grant access to Bob, Alice must:
|
||||
|
||||
#. Create a re-encryption key based on the asymmetric private key and Bob's public key
|
||||
#. Determine `n` Ursulas from the NuCypher Network to use in the policy
|
||||
#. Determine `n` Ursulas from the Threshold Network to use in the policy
|
||||
#. Configure the conditions of the policy, e.g. *expiration time, m-of-n threshold values*
|
||||
#. Deploy the policy to the blockchain and escrow associated policy fees
|
||||
#. Create a `treasure map`, encrypted for Bob that contains the list of `n` Ursulas in the policy,
|
||||
|
@ -59,7 +59,7 @@ Enrico::Encrypt
|
|||
.. image:: ../.static/img/enrico_encrypt.svg
|
||||
:target: ../.static/img/enrico_encrypt.svg
|
||||
|
||||
The NuCypher Network uses the Umbral_ threshold proxy re-encryption scheme which employs a key encapsulation mechanism (KEM)/data
|
||||
The Ursulas uses the Umbral_ threshold proxy re-encryption scheme which employs a key encapsulation mechanism (KEM)/data
|
||||
encapsulation mechanism (DEM). In this approach, an ephemeral symmetric key is used to encrypt the data, and the
|
||||
symmetric key is encrypted using an asymmetric encryption key. The encrypted data (the DEM portion) and the
|
||||
encrypted symmetric key (the KEM portion, called a `capsule`) are stored together.
|
||||
|
@ -82,7 +82,7 @@ To gain access, Bob must request re-encryption of the `capsule` by the `n` Ursul
|
|||
Remember that when Alice granted access to Bob, she created a `treasure map` that contained
|
||||
this list of `n` Ursulas in the policy, and the associated encrypted re-encryption key fragments (`kFrags`) for Bob to
|
||||
give to the Ursulas for the re-encryption operation. Therefore, Bob sends his `capsule` and the relevant encrypted
|
||||
`kFrag` to the various Ursulas in the NuCypher Network associated with the policy. Those Ursulas
|
||||
`kFrag` to the various Ursulas in the Threshold Network associated with the policy. Those Ursulas
|
||||
will decrypt the encrypted `kFrag` and use it to perform a partial re-encryption operation on the `capsule` to
|
||||
produce a corresponding ciphertext fragment, `cFrag`. In the same way a `kFrag` is a fragment of a key, a `cFrag`
|
||||
is a fragment of ciphertext. The `cFrag` is returned to Bob, who collects `cFrags` until he obtains a threshold, `m`,
|
||||
|
|
|
@ -32,20 +32,4 @@ Incorrect re-encryptions are detectable by Bob, who can then send a proof to the
|
|||
Penalties
|
||||
---------
|
||||
|
||||
At network genesis, although violations will be detected, attributed and publicly logged, the actual penalty levied will be of nominal size.
|
||||
For each violation, :math:`2 \times 10 ^ {-18}` NU tokens will be deleted from the offender’s stake. The theoretical maximum number of tokens
|
||||
that can be slashed in a given period is limited by the number of blocks processed on Ethereum per day (~6000) and the number of
|
||||
transactions per block (~30 based on transaction gas and current gas limits). This yields a maximum slashable value of:
|
||||
|
||||
.. math::
|
||||
|
||||
&= 2 \times 10 ^ {-18} NU \times 6000 \text{ blocks per period} \times 30 \text{ transactions per block} \\
|
||||
&= 3.6 \times 10 ^ {-13} NU \text{ per period}
|
||||
|
||||
The genesis penalty is measurable – so staker behavior can be observed – but small enough that it has a negligible impact on the staker’s ability to continue serving the network. If the severity of penalties and logic of the slashing protocol changes, it may involve any combination of the following:
|
||||
|
||||
* Larger penalties levied in absolute terms (number of tokens slashed per violation). This will provide a material disincentive to stakers.
|
||||
* Penalties calculated as a percentage of the offender’s stake (i.e. the larger the stake, the greater the number of tokens slashed per violation). This will make punishments and disincentives far more equitable across stakers of diverse sizes.
|
||||
* Ramped penalties, that increase with each successive violation, potentially resetting in a specified number of periods. This will encourage stakers to avoid repeat offences and rectify errors quickly.
|
||||
* Temporal limitations on penalties, for example capping the total number of tokens slashabe in each period. This addresses a potentially uneven distribution of punishment, despite a near-identical crime, due to the unpredictable frequency with which a given Bob makes requests to an Ursula. A slash limit per period also gives stakers a grace period in which they may rectify their incorrectly re-encrypting Ursula. Since penalties are levied per incorrect re-encryption, a Bob making requests at a high cadence or batching their requests could wipe out a stake before it's possible to manually fix an error – a limit on the maximum penalty size per period mitigates unfair scenarios of this sort.
|
||||
* Temporary unbonding of Ursula, which forces the staker to forfeit subsidies, work and fees for a specified period. In a simple construction, this punishment would only apply if the Ursula is not servicing any other policies or all relevant Alices consent to the removal of that Ursula from their sharing policies.
|
||||
TBD
|
||||
|
|
|
@ -7,7 +7,7 @@ Finnegan's Wake Demo
|
|||
Overview
|
||||
--------
|
||||
|
||||
This demo is an example of a NuCypher decentralized network allowing Alice to share
|
||||
This demo is an example of a network of PRE nodes allowing Alice to share
|
||||
data with Bob using proxy re-encryption. This enables the private sharing of data across public consensus networks,
|
||||
without revealing data keys to intermediary entities.
|
||||
|
||||
|
@ -15,7 +15,7 @@ without revealing data keys to intermediary entities.
|
|||
+------+-----------+----------------------------------------------------------------------------------------------+
|
||||
| Step | Character | Operation |
|
||||
+======+===========+==============================================================================================+
|
||||
| 1 | Alice | Alice sets a Policy on the NuCypher network (2-of-3) and grants access to Bob |
|
||||
| 1 | Alice | Alice sets a Policy on the PRE Nodes in the Threshold Network and grants access to Bob |
|
||||
+------+-----------+----------------------------------------------------------------------------------------------+
|
||||
| 2 | Alice | Label and Alice's public key provided to Bob |
|
||||
+------+-----------+----------------------------------------------------------------------------------------------+
|
||||
|
@ -32,7 +32,7 @@ without revealing data keys to intermediary entities.
|
|||
|
||||
|
||||
There are two version of the example, one federated example using a local federated network
|
||||
and another example using the nucypher application development tesnet on Goerli: "Lynx".
|
||||
and another example using the PRE application development tesnet on Goerli: "Lynx".
|
||||
|
||||
|
||||
Install NuCypher
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
Heartbeat Demo
|
||||
====================
|
||||
|
||||
.. figure:: https://user-images.githubusercontent.com/2564234/49080419-dda35680-f243-11e8-90d7-6f649d80e03d.png
|
||||
:width: 100%
|
||||
.. image:: ../.static/img/heart_monitor.svg
|
||||
:target: ../.static/img/heart_monitor.svg
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
@ -16,7 +16,7 @@ The Heart Monitor uses this public key to produce a file with some amount of enc
|
|||
This file is uploaded to a storage layer (e.g., IPFS, S3, or whatever you choose).
|
||||
|
||||
At some future point, she wants to share this information with other people, such as her Doctor.
|
||||
Once she obtains her Doctor's public keys, she can create a policy in the NuCypher network granting access to him.
|
||||
Once she obtains her Doctor's public keys, she can create a policy with PRE nodes to grant access to him.
|
||||
After this, her Doctor can read the file with encrypted data (which was uploaded by the Heart Monitor) and
|
||||
request a re-encrypted ciphertext for each measurement, which can be opened with the Doctor's private key.
|
||||
|
||||
|
@ -29,7 +29,7 @@ This simple example showcases many interesting and distinctive aspects of NuCyph
|
|||
- As a consequence of the previous point, the Heart Monitor is completely
|
||||
unaware of the recipients. In its mind, it's producing data **for Alicia**.
|
||||
- Alicia never interacts with the Doctor: she only needs the Doctor's public keys.
|
||||
- Alicia only interacts with the NuCypher network for granting access to the Doctor.
|
||||
- Alicia only interacts with a network of PRE nodes for granting access to the Doctor.
|
||||
After this, she can even disappear from the face of the Earth.
|
||||
- The Doctor never interacts with Alicia or the Heart Monitor:
|
||||
he only needs the encrypted data and some policy metadata.
|
||||
|
@ -46,7 +46,7 @@ The actors in this example can be mapped naturally to :doc:`Characters </api/nuc
|
|||
This corresponds to the :class:`~nucypher.characters.lawful.Alice` character.
|
||||
- The Heart Monitor, or any other data sources that **encrypt data** on Alicia's behalf,
|
||||
is portrayed by the :class:`~nucypher.characters.lawful.Enrico` character.
|
||||
- Nodes in the NuCypher network are called :class:`~nucypher.characters.lawful.Ursula` in our terminology.
|
||||
- PRE Nodes are called :class:`~nucypher.characters.lawful.Ursula` in our terminology.
|
||||
They receive the access policy from Alice and stand ready to
|
||||
re-encrypt data in exchange for payment in fees and token rewards.
|
||||
In a way, they **enforce the access policy** created by Alicia.
|
||||
|
@ -102,7 +102,7 @@ What's left is running the ``doctor.py`` script:
|
|||
|
||||
|
||||
This script will read the data generated in the previous step and retrieve
|
||||
re-encrypted ciphertexts by means of the NuCypher network.
|
||||
re-encrypted ciphertexts by means of the network of PRE nodes.
|
||||
The result is printed in the console:
|
||||
|
||||
.. code::
|
||||
|
|
|
@ -26,9 +26,6 @@ Glossary
|
|||
Enrico
|
||||
*"The Encryptor"* :term:`Character` - a data source that encrypts data on behalf of :term:`Alice` and produces a :term:`MessageKit`.
|
||||
|
||||
Felix
|
||||
*"The Faucet"* :term:`Character` - provides *testnet* NU tokens for nodes on the test NuCypher Network.
|
||||
|
||||
KEM
|
||||
Key encapsulation mechanism - a symmetric key encrypted with an asymmetric key
|
||||
|
||||
|
@ -42,23 +39,17 @@ Glossary
|
|||
The ciphertext (data encrypted with a symmetric key) and the :term:`Capsule` (encrypted symmetric key) that are stored together.
|
||||
|
||||
NU
|
||||
The NuCypher token used by nodes for staking.
|
||||
The Legacy NuCypher token used by nodes for staking.
|
||||
|
||||
NuNit
|
||||
1 NU = 10\ :sup:`18` NuNits.
|
||||
|
||||
Period
|
||||
A timeframe of approximately 7 days in the NuCypher Network. This parameter is used as a minimum unit for policy
|
||||
duration, and is also the cadence with which workers must make an on-chain commitment to being online and
|
||||
available. Note that period durations were 24 hours in the genesis (previous) protocol and could change again in the
|
||||
future.
|
||||
|
||||
PKE
|
||||
Public-key encryption.
|
||||
|
||||
Porter
|
||||
A web service that is the conduit between applications (platform-agnostic) and the nucypher network, that
|
||||
performs nucypher protocol operations on behalf of Alice and Bob.
|
||||
A web service that is the conduit between applications (platform-agnostic) and the PRE nodes on the Threshold network, that
|
||||
performs ``nucypher`` protocol operations on behalf of Alice and Bob.
|
||||
|
||||
PRE
|
||||
Proxy re-encryption.
|
||||
|
@ -66,12 +57,6 @@ Glossary
|
|||
Re-encryption Key
|
||||
A key that facilitates the transformation of ciphertext from one encryption key to another.
|
||||
|
||||
Stake
|
||||
A quantity of tokens and escrow duration in periods.
|
||||
|
||||
Staker
|
||||
An account that holds NU tokens and performs staking-related operations on the blockchain.
|
||||
|
||||
Stamp
|
||||
The public key for a :term:`Character`'s signing key pair.
|
||||
|
||||
|
@ -82,10 +67,7 @@ Glossary
|
|||
NuCypher's threshold proxy re-encryption scheme - it takes standard :term:`PRE` and increases security and performance. See Umbral_.
|
||||
|
||||
Ursula
|
||||
*"The Proxy in PRE"* :term:`Character` - the nodes on the NuCypher Network that stand ready to re-encrypt data in exchange for payment in fees and token rewards; they enforce the access policy created by :term:`Alice`.
|
||||
*"The Proxy in PRE"* :term:`Character` - the PRE node on the Threshold Network that stands ready to re-encrypt data in exchange for payment in fees and token rewards; they enforce the access policy created by :term:`Alice`.
|
||||
|
||||
Worker
|
||||
An account that is actively doing work in the network as an :term:`Ursula` node. A worker is bonded to, and performs work on behalf of, a :term:`Staker`.
|
||||
|
||||
WorkLock
|
||||
NuCypher's permissionless token distribution mechanism.
|
||||
Operator
|
||||
An account that is actively doing work in the network as an :term:`Ursula` node. An Operator is bonded to, and performs work on behalf of, a Staking Provider.
|
||||
|
|
|
@ -1,32 +1,62 @@
|
|||
Introduction
|
||||
=============
|
||||
|
||||
|
||||
.. _Umbral: https://github.com/nucypher/pyUmbral
|
||||
|
||||
|
||||
The NuCypher network is a decentralized network of nodes that perform threshold
|
||||
cryptography operations serving users with secrets management and dynamic access control.
|
||||
``nucypher`` is the python library and CLI for interacting with the
|
||||
decentralized threshold cryptography network.
|
||||
.. image:: ./.static/img/threshold_logo_purple.png
|
||||
:target: ./.static/img/threshold_logo_purple.png
|
||||
|
||||
|
||||
How does NuCypher work?
|
||||
-----------------------
|
||||
`Welcome <https://blog.threshold.network/threshold-launch/>`_ to the Threshold Network!
|
||||
|
||||
Introduction
|
||||
=============
|
||||
|
||||
The `NuCypher Network <https://www.nucypher.com/>`_ has merged with the
|
||||
`KEEP Network <https://keep.network/>`_ to form the `Threshold Network <https://threshold.network/>`_!
|
||||
|
||||
The Threshold Network powers user sovereignty on the public blockchain. It provides a decentralized
|
||||
network of nodes that perform threshold cryptography operations as a service to ensure full control over
|
||||
your digital assets.
|
||||
|
||||
Proxy Re-Encryption (PRE) Application
|
||||
=====================================
|
||||
|
||||
The NuCypher Network proxy re-encryption (PRE) service is now the PRE Application on the Threshold Network.
|
||||
|
||||
The PRE Application is the first of many *threshold cryptography*-based applications
|
||||
to be hosted on the Threshold Network. PRE is an end-to-end encryption protocol that is a more scalable, more flexible form of
|
||||
`public-key encryption <https://en.wikipedia.org/wiki/Public-key_cryptography>`_ and enables a group of proxy
|
||||
entities to transform encrypted data from one public key to another, without the power to decrypt the data or gain access to any
|
||||
private keys. PRE equips developers, applications and end-users with **secrets management** and **dynamic access control** capabilities.
|
||||
This service is provided by a decentralized array of nodes on the Threshold Network, each running the same PRE client software.
|
||||
|
||||
Private data, wherever stored, remains private, confidential
|
||||
and encrypted while maintaining the ability to share that data with trusted parties.
|
||||
|
||||
.. attention::
|
||||
|
||||
In order to run a PRE node on Threshold, ``nucypher`` version 6.0.0 is required,
|
||||
but is not yet available. See `releases <https://pypi.org/project/nucypher/#history>`_.
|
||||
|
||||
However, this documentation can be used in the interim to gain a better understanding of
|
||||
the logistics of running a PRE node.
|
||||
|
||||
How does it Work?
|
||||
-----------------
|
||||
|
||||
.. image:: ./.static/img/nucypher_overview.svg
|
||||
:target: ./.static/img/nucypher_overview.svg
|
||||
|
||||
1. Alice, the data owner, grants access to her encrypted data to
|
||||
anyone she wants by creating a policy and uploading it to
|
||||
the NuCypher network.
|
||||
the PRE Application on the Threshold Network.
|
||||
|
||||
2. Alice gets information about the group of ``n`` Ursulas associated
|
||||
with the policy, which are nodes on the NuCypher network. Each Ursula provides their encrypting key, and Alice creates
|
||||
2. Alice gets information about the group of ``n`` PRE nodes (Ursulas) associated
|
||||
with the policy, which are nodes on the Threshold network providing the PRE service. Each Ursula provides their encrypting key, and Alice creates
|
||||
``n`` re-encryption key shares (:term:`kFrag`), each of which is encrypted with a different Ursula's encrypting key.
|
||||
The Ursulas in the group stand ready to re-encrypt data in exchange for payment in fees and token rewards.
|
||||
The list of Ursulas and their associated encrypted re-encryption key shares are stored in a treasure map. Alice
|
||||
subsequently encrypts the treasure map for Bob. The treasure map provides Bob the requisite information and cryptographic material to successfully request the NuCypher network to re-encrypt the data shared by Alice – such that he can decrypt it with his private key.
|
||||
subsequently encrypts the treasure map for Bob. The treasure map provides Bob the requisite information and cryptographic
|
||||
material to successfully request the Threshold Network to re-encrypt the data shared by Alice – such that he can decrypt it with his private key.
|
||||
|
||||
3. Each policy created by Alice has an associated encryption key, which can be used
|
||||
by any entity (Enrico) to encrypt data on Alice's behalf.
|
||||
|
@ -38,7 +68,7 @@ or any other storage layer.
|
|||
|
||||
4. Bob, a data recipient, uses the treasure map to determine the list of Ursulas to contact and the associated
|
||||
re-encryption key share to send to Ursula for the re-encryption operation. Bob obtains the encrypted data from the
|
||||
storage layer and sends a re-encryption request to the relevant Ursulas on the NuCypher network. If the policy is
|
||||
storage layer and sends a re-encryption request to the relevant Ursulas on the Threshold network. If the policy is
|
||||
satisfied, Ursula decrypts the provided re-encryption key share and re-encrypts the data to Bob's public key. Bob
|
||||
can subsequently decrypt the data with his private key.
|
||||
|
||||
|
@ -53,7 +83,7 @@ More detailed information:
|
|||
Whitepapers
|
||||
-----------
|
||||
|
||||
**Network**
|
||||
**Original Network**
|
||||
|
||||
https://github.com/nucypher/whitepaper/blob/master/whitepaper.pdf
|
||||
|
||||
|
@ -61,20 +91,6 @@ Whitepapers
|
|||
*by Michael Egorov, David Nuñez, and MacLane Wilkison - NuCypher*
|
||||
|
||||
|
||||
**Economics**
|
||||
|
||||
https://github.com/nucypher/whitepaper/blob/master/economics/staking_protocol/NuCypher_Staking_Protocol_Economics.pdf
|
||||
|
||||
*"NuCypher Network: Staking Protocol & Economics"*
|
||||
*by Michael Egorov, MacLane Wilkison, Arjun Hassard - NuCypher*
|
||||
|
||||
|
||||
https://github.com/nucypher/whitepaper/blob/master/economics/pricing_protocol/NuCypher_Network__Pricing_Protocol_Economics.pdf
|
||||
|
||||
*"NuCypher Network: Pricing Protocol & Economics"*
|
||||
*by Arjun Hassard - NuCypher*
|
||||
|
||||
|
||||
**Cryptography**
|
||||
|
||||
https://github.com/nucypher/umbral-doc/blob/master/umbral-doc.pdf
|
||||
|
@ -85,25 +101,32 @@ Whitepapers
|
|||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Staking
|
||||
:caption: Threshold
|
||||
|
||||
threshold/threshold_overview
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: PRE Application
|
||||
|
||||
pre_application/overview
|
||||
pre_application/node_requirements
|
||||
pre_application/running_a_node
|
||||
pre_application/cloud_node_management
|
||||
pre_application/best_practices
|
||||
pre_application/node_providers
|
||||
pre_application/testnet
|
||||
|
||||
staking/overview
|
||||
staking/stake_initialization
|
||||
staking/stake_management
|
||||
staking/running_a_worker
|
||||
staking/best_practices
|
||||
staking/testnet
|
||||
staking/remote_worker_cli
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Application Development
|
||||
|
||||
application_development/getting_started
|
||||
application_development/porter
|
||||
application_development/local_fleet_demo
|
||||
application_development/web_development
|
||||
application_development/http_character_control
|
||||
application_development/cli_examples
|
||||
application_development/local_fleet_demo
|
||||
application_development/testnet
|
||||
|
||||
.. toctree::
|
||||
|
@ -112,10 +135,8 @@ Whitepapers
|
|||
|
||||
references/pip-installation
|
||||
references/cli_reference
|
||||
references/network_events
|
||||
references/signers
|
||||
references/environment_variables
|
||||
references/networks
|
||||
references/network_events
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
@ -154,7 +175,6 @@ Whitepapers
|
|||
:caption: Support
|
||||
|
||||
support/contribution
|
||||
support/node_providers
|
||||
support/community
|
||||
support/troubleshooting
|
||||
support/faq
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
=======================
|
||||
Node/Operator Diligence
|
||||
=======================
|
||||
|
||||
.. attention::
|
||||
|
||||
This best practices document is a work-in-progress and is not comprehensive.
|
||||
|
||||
|
||||
Operators can demonstrate their vested interest in the success of the network by adhering to
|
||||
the following core areas of responsibility (in order of importance):
|
||||
|
||||
1. Keystore Diligence
|
||||
---------------------
|
||||
|
||||
Requires that private keys used by the PRE node are backed up and can be restored.
|
||||
|
||||
Keystore diligence an be exercised by:
|
||||
|
||||
- Keeping an offline record of the mnemonic recovery phrase.
|
||||
- Backing up the worker's keystores (both ethereum and nucypher).
|
||||
- Using a password manager to generate and store a strong password when one is required.
|
||||
|
||||
.. note::
|
||||
|
||||
The default location of the nucypher PRE node keystore files can be located by
|
||||
running a nucypher command:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher --config-path
|
||||
|
||||
Encrypted PRE Node keys can be found in the ``keystore`` directory:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
/home/user/.local/share/nucypher
|
||||
├── ursula.json
|
||||
├── keystore
|
||||
│ ├── 1621399628-e76f101f35846f18d80bfda5c61e9ec2.priv
|
||||
└── ...
|
||||
|
||||
2. Runtime Diligence
|
||||
--------------------
|
||||
|
||||
Requires active and security-conscious participation in the network.
|
||||
|
||||
A PRE node that is unreachable or otherwise invalid will be unable to accept new
|
||||
policies, and miss out on inflation rewards.
|
||||
|
||||
It is **not necessary (and potentially risky)** to hold NU/T tokens on an Operator's
|
||||
account for any reason.
|
||||
|
||||
Runtime Diligence an be exercised by:
|
||||
|
||||
- Secure the node's keystore used on the deployment host.
|
||||
- Maintain high uptime; keep downtime brief when required by updates or reconfiguration.
|
||||
- Update when new versions are available.
|
||||
|
||||
..
|
||||
TODO: separate section on backups and data (#2285)
|
|
@ -1,31 +1,49 @@
|
|||
.. _managing-cloud-workers:
|
||||
.. _managing-cloud-nodes:
|
||||
|
||||
Cloud Worker Management
|
||||
=======================
|
||||
PRE Node Cloud Automation
|
||||
=========================
|
||||
|
||||
.. important::
|
||||
|
||||
In order to run a PRE node on Threshold, ``nucypher`` version 6.0.0 is required,
|
||||
but is not yet available. See `releases <https://pypi.org/project/nucypher/#history>`_.
|
||||
|
||||
However, this documentation can be used in the interim to gain a better understanding of
|
||||
the logistics of running a PRE node.
|
||||
|
||||
|
||||
NuCypher maintains a CLI to assist with the initialization and management of PRE nodes
|
||||
deployed on cloud infrastructure, that leverages automation tools
|
||||
such as `Ansible <https://www.ansible.com/>`_ and `Docker <https://www.docker.com/>`_.
|
||||
|
||||
.. important::
|
||||
|
||||
Only supports Digital Ocean and AWS cloud infrastructure.
|
||||
|
||||
This tool will handle the minutiae of node configuration and operation on your behalf by
|
||||
providing high-level CLI commands.
|
||||
|
||||
NuCypher maintains a CLI to assist with the management of multiple Nucypher Ursula nodes deployed on cloud infrastructure,
|
||||
that leverages automation tools such as Ansible and Docker.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
(nucypher)$ nucypher cloudworkers ACTION [OPTIONS]
|
||||
|
||||
**Cloudworkers Command Actions**
|
||||
**Command Actions**
|
||||
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| Action | Description |
|
||||
+======================+===============================================================================+
|
||||
| ``up`` | Creates and deploys hosts for all active local stakers. |
|
||||
| ``up`` | Creates and deploys hosts for stakers. |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``create`` | Creates and deploys the given number of hosts independent of stakes |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``add`` | Add an existing host to be managed by cloudworkers CLI tools |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``add_for_stake`` | Add an existing host to be managed for a specified local staker address |
|
||||
| ``add_for_stake`` | Add an existing host to be managed for a specified staker |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``deploy`` | Install and run Ursula on existing managed hosts. |
|
||||
| ``deploy`` | Install and run a node on existing managed hosts. |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``update`` | Update or manage existing installed Ursula. |
|
||||
| ``update`` | Update or manage existing installed nodes. |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``destroy`` | Shut down and cleanup resources deployed on AWS or Digital Ocean |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
|
@ -35,9 +53,9 @@ that leverages automation tools such as Ansible and Docker.
|
|||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``logs`` | Download and display the accumulated stdout logs of selected hosts |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``backup`` | Download local copies of critical data from selected installed Ursulas |
|
||||
| ``backup`` | Download local copies of critical data from selected installed nodes |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``restore`` | Reconstitute and deploy an operating Ursula from backed up data |
|
||||
| ``restore`` | Reconstitute and deploy an operating node from backed up data |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``list_hosts`` | Print local nicknames of all managed hosts under a given namespace |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
|
@ -49,46 +67,53 @@ Some examples:
|
|||
|
||||
.. code:: bash
|
||||
|
||||
# You have some local stakes. Now run an Ursula for each one with a single command.
|
||||
#
|
||||
# Initialize a node
|
||||
#
|
||||
|
||||
# on Digital Ocean
|
||||
##################
|
||||
$ export DIGITALOCEAN_ACCESS_TOKEN=<your access token>
|
||||
$ export DIGITALOCEAN_REGION=<a digitalocean availability region>
|
||||
$ nucypher cloudworkers up --cloudprovider digitalocean --remote-provider http://mainnet.infura..3epifj3rfioj
|
||||
|
||||
# --------------------------------------------------------------------------------------------------------------------------- #
|
||||
# NOTE: if no --remote-provider is specified, geth will be run on the host and a larger instance with more RAM will be used.
|
||||
# this will probably cost more and require some time to sync. * A remote provider such as Alchemy or Infura is highly recommended *
|
||||
# --------------------------------------------------------------------------------------------------------------------------- #
|
||||
# OR
|
||||
|
||||
# on AWS
|
||||
########
|
||||
# configure your local aws cli with named profiles https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
|
||||
$ nucypher cloudworkers up --cloudprovider aws --aws-profile my-aws-profile --remote-provider http://mainnet.infura..3epifj3rfioj
|
||||
$ nucypher cloudworkers up --cloudprovider aws --aws-profile my-aws-profile --remote-provider https://mainnet.infura..3epifj3rfioj
|
||||
|
||||
# add your ubuntu machine at the office to an existing locally managed stake
|
||||
|
||||
####################################################################################################################################
|
||||
#
|
||||
# Management Commands
|
||||
#
|
||||
|
||||
# add your ubuntu machine to an existing stake
|
||||
$ nucypher cloudworkers add_for_stake --staker-address 0x9a92354D3811938A1f35644825188cAe3103bA8e --host-address somebox.myoffice.net --login-name ubuntu --key-path ~/.ssh/id_rsa
|
||||
|
||||
# update all your existing hosts to the latest code
|
||||
$ nucypher cloudworkers update --nucypher-image nucypher/nucypher:latest
|
||||
|
||||
# stop the running Ursula on your hosts
|
||||
# stop the running node(s) on your host(s)
|
||||
$ nucypher cloudworkers stop
|
||||
|
||||
# change two of your existing hosts to use alchemy instead of infura as a delegated blockchain
|
||||
# note: hosts created for local stakers will have the staker's checksum address as their nickname by default
|
||||
$ nucypher cloudworkers update --remote-provider wss://eth-mainnet.ws.alchemyapi.io/v2/aodfh298fh2398fh2398hf3924f... --include-host 0x9a92354D3811938A1f35644825188cAe3103bA8e --include-host 0x1Da644825188cAe3103bA8e92354D3811938A1f35
|
||||
$ nucypher cloudworkers update --remote-provider https://eth-mainnet.ws.alchemyapi.io/v2/aodfh298fh2398fh2398hf3924f... --include-host 0x9a92354D3811938A1f35644825188cAe3103bA8e --include-host 0x1Da644825188cAe3103bA8e92354D3811938A1f35
|
||||
|
||||
# add some random host and then deploy an Ursula on it
|
||||
# add some random host and then deploy a node on it
|
||||
$ nucypher cloudworkers add --host-address somebox.myoffice.net --login-name ubuntu --key-path ~/.ssh/id_rsa --nickname my_new_host
|
||||
$ nucypher cloudworkers deploy --include-host my_new_host --remote-provider http://mainnet.infura..3epifj3rfioj
|
||||
$ nucypher cloudworkers deploy --include-host my_new_host --remote-provider https://mainnet.infura..3epifj3rfioj
|
||||
|
||||
# deploy nucypher on all your managed hosts
|
||||
$ nucypher cloudworkers deploy --remote-provider http://mainnet.infura..3epifj3rfioj
|
||||
$ nucypher cloudworkers deploy --remote-provider https://mainnet.infura..3epifj3rfioj
|
||||
|
||||
# deploy nucypher on all your managed hosts
|
||||
$ nucypher cloudworkers deploy --remote-provider http://mainnet.infura..3epifj3rfioj
|
||||
$ nucypher cloudworkers deploy --remote-provider https://mainnet.infura..3epifj3rfioj
|
||||
|
||||
# print the current status of all workers across all namespaces (in bash)
|
||||
# print the current status of all nodes across all namespaces (in bash)
|
||||
$ for ns in $(nucypher cloudworkers list-namespaces); do nucypher cloudworkers status --namespace $ns; done
|
||||
> local nickname: Project11-mainnet-2
|
||||
> nickname: Aquamarine Nine DarkViolet Foxtrot
|
||||
|
@ -107,7 +132,7 @@ Some examples:
|
|||
# see if all your managed hosts successfully committed to the next period
|
||||
$ for ns in $(nucypher cloudworkers list-namespaces); do nucypher cloudworkers status --namespace $ns; done | grep "last committed period: \|last log line: \|local nickname:"
|
||||
|
||||
# backup all your worker's critical data
|
||||
# backup all your node's critical data
|
||||
# note: this is also done after any update or deploy operations
|
||||
$ for ns in $(nucypher cloudworkers list-namespaces); do nucypher cloudworkers backup --namespace $ns; done
|
||||
|
||||
|
@ -119,7 +144,7 @@ Some examples:
|
|||
|
||||
# NB: environment variables and cli args function identically for both update and deploy
|
||||
|
||||
# set some environment variables to configure Ursula workers on all your hosts
|
||||
# set some environment variables to configure nodes on all your hosts
|
||||
$ nucypher cloudworkers deploy -e DONT_PERFORM_WORK_ON_SUNDAY=true
|
||||
|
||||
# set a max gas price and gas strategy for existing hosts
|
|
@ -0,0 +1,37 @@
|
|||
.. _node-providers:
|
||||
|
||||
=================
|
||||
Staking Providers
|
||||
=================
|
||||
|
||||
You can delegate running a PRE node to one of the *node-as-a-service* Staking Providers listed below.
|
||||
|
||||
.. warning::
|
||||
Staking Providers have not been vetted or endorsed by the core development team.
|
||||
Use your own judgement when selecting a provider.
|
||||
|
||||
|
||||
* `Ankr <https://www.ankr.com>`_
|
||||
* Email: sales@ankr.com
|
||||
* `BisonTrails <https://bisontrails.co/>`_
|
||||
* Email: viktor@bisontrails.co
|
||||
* Discord: ``@Viktor Bunin | Judging Steward#7847``
|
||||
* `Figment <https://figment.io/>`_
|
||||
* Email: support@figment.io
|
||||
* Discord: ``@claymenzel#0569``
|
||||
* Telegram: ``@claymenzel``
|
||||
* `InfStones <https://infstones.io/>`_
|
||||
* Email: contact@infinitystones.io
|
||||
* Discord: ``@infinitystones#2856``
|
||||
* Telegram: https://t.me/infstones
|
||||
* WeChat: ``@InfStones``
|
||||
* `P2P Validator <https://p2p.org>`_
|
||||
* Email: am@p2p.org
|
||||
* Telegram: ``@P2Pstaking``
|
||||
* `Staked <https://staked.us/>`_
|
||||
* Email: staked@staked.us
|
||||
* Discord: ``@cole at staked.us #0429``
|
||||
* Telegram: ``@staked_official``
|
||||
* WeChat: ``@colekennelly``
|
||||
|
||||
More detailed profile information about each Staking Provider is available `here <https://github.com/nucypher/validator-profiles>`_.
|
|
@ -0,0 +1,97 @@
|
|||
.. _node-requirements:
|
||||
|
||||
Node Requirements
|
||||
=================
|
||||
|
||||
Minimum System Requirements
|
||||
---------------------------
|
||||
|
||||
* Debian/Ubuntu (Recommended)
|
||||
* 20GB storage
|
||||
* 4GB RAM
|
||||
* x86 architecture
|
||||
* Static IP address
|
||||
* Exposed TCP port 9151
|
||||
|
||||
Nodes can be run on cloud infrastructure - for example, a
|
||||
`Digital Ocean 4GB Basic Droplet <https://www.digitalocean.com/pricing/>`_
|
||||
satisfies the requirements listed above.
|
||||
|
||||
The above requirements only apply if you intend to run a node yourself.
|
||||
Alternatively, a staking provider can run a node on your behalf.
|
||||
|
||||
|
||||
PRE Node Configuration Requirements
|
||||
-----------------------------------
|
||||
|
||||
Ethereum Node Provider URI
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
The PRE node will need to execute an initial transaction to confirm its
|
||||
operation on startup, and therefore requires access to an
|
||||
`ethereum node <https://web3py.readthedocs.io/en/stable/node.html>`_
|
||||
(either a local or remote ethereum node) to broadcast the transaction. Remote
|
||||
ethereum providers include Infura, Alchemy etc. and an HTTPS URI will need to
|
||||
be configured (``https://<URI>``), whereas a local full node would entail running
|
||||
`geth <https://geth.ethereum.org/>`_ locally and configured using the
|
||||
IPC URI (``ipc://<PATH TO IPC FILE>``).
|
||||
This value is specified via the ``--eth-provider`` CLI parameter.
|
||||
|
||||
It is worth noting that running a local ethereum node is quite the undertaking,
|
||||
and has its own
|
||||
`additional requirements <https://docs.ethhub.io/using-ethereum/running-an-ethereum-node/>`_.
|
||||
|
||||
|
||||
Operator Software Ethereum Account
|
||||
++++++++++++++++++++++++++++++++++
|
||||
|
||||
A software wallet is recommended for the PRE node operator's ethereum account
|
||||
since the account needs to remain unlocked to execute an automated transaction
|
||||
when the node first starts.
|
||||
|
||||
.. caution::
|
||||
|
||||
- Operator accounts **do not** need NU/KEEP/T tokens for any reason; do not keep NU/KEEP/T in the
|
||||
operator account.
|
||||
- Do not store large amounts of ETH in the operator account; only enough to pay gas fees. Nodes
|
||||
only need to execute a single transaction on the first start which costs ~100K gas at
|
||||
a gas price of 146 gwei, this would be ~0.015 ETH). There are no subsequent transactions on restarts.
|
||||
- Store the operator account password in a password manager
|
||||
|
||||
To create a new ethereum software account using the ``geth`` CLI
|
||||
(more information `here <https://geth.ethereum.org/>`_):
|
||||
|
||||
.. code::
|
||||
|
||||
geth account new
|
||||
|
||||
- Never share your ethereum account password.
|
||||
- Do not forget your ethereum account password.
|
||||
- Secure your ethereum account password in a password manager.
|
||||
|
||||
This command will add a new account to your local keystore.
|
||||
|
||||
|
||||
PRE Node Operator Transaction Signer
|
||||
++++++++++++++++++++++++++++++++++++
|
||||
|
||||
In conjunction with an Ethereum node provider for broadcasting to the
|
||||
Ethereum blockchain, the node also needs to configure a transaction signer
|
||||
for signing messages to be broadcasted.
|
||||
|
||||
This separation of a transaction signer from an Ethereum node allows pre-signed
|
||||
transactions to be sent to an external (possibly remote) ethereum node and is
|
||||
particularly desirable when interacting with an untrusted ethereum node.
|
||||
|
||||
Local ethereum keystore signing can be configured for the operator software
|
||||
account. Local keystore signing utilizes `eth-account <https://github.com/ethereum/eth-account/>`_
|
||||
to sign ethereum transactions using local ethereum keystore files. By default
|
||||
on Linux, the default local keystore directory path is ``~/.ethereum/keystore``.
|
||||
The local keystore signer can be specified during initialization using the
|
||||
following URI format, ``--signer`` CLI parameter and ``keystore://<PATH TO LOCAL KEYSTORE>`` as the
|
||||
value, eg. ``--signer keystore:///root/.ethereum/keystore``.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
The expectation is that the operator account is part of the local ethereum keystore.
|
|
@ -0,0 +1,81 @@
|
|||
.. _pre-overview:
|
||||
|
||||
Application Overview
|
||||
====================
|
||||
|
||||
All Threshold Network Stakers (legacy KEEP, legacy NU, liquid T) are able to participate
|
||||
in the PRE application. Threshold Staking can be performed and managed via
|
||||
the `Threshold dashboard <https://dashboard.threshold.network/overview/network>`_.
|
||||
|
||||
For more information about the roles associated with the Threshold Staking contract,
|
||||
see `here <https://github.com/threshold-network/solidity-contracts/blob/main/docs/rfc-1-staking-contract.adoc>`_.
|
||||
|
||||
The PRE Application operations are divided into two roles:
|
||||
|
||||
* `Staking Provider`_
|
||||
* `Operator`_
|
||||
|
||||
|
||||
Staking Provider
|
||||
----------------
|
||||
|
||||
The Staking Provider is a party authorized to operate in the network on behalf of a
|
||||
given stake owner - it can be the owner itself for self-hosting. The staking provider handles
|
||||
the everyday operations on the delegated stake without actually owning the staked tokens. A
|
||||
staking provider cannot transfer delegated staked tokens, but the staking provider’s misbehavior may
|
||||
result in slashing tokens and thus the entire staked amount is indeed at stake. A Staking Provider
|
||||
can be specified on the `Threshold Dashboard <https://dashboard.threshold.network/overview/network>`_.
|
||||
|
||||
|
||||
Operator
|
||||
--------
|
||||
|
||||
The Operator (aka "Ursula") is the node that provides PRE application service.
|
||||
|
||||
It is the bonded delegate of a Staking Provider and an active network node, performing PRE work on behalf
|
||||
of a Staking Provider. Ursulas must remain online to provide uninterrupted services on-demand.
|
||||
|
||||
.. note::
|
||||
|
||||
In the traditional NuCypher Network parlance, ``Worker`` can be used interchangeably
|
||||
with the new Threshold Network ``Operator`` term.
|
||||
|
||||
|
||||
Authorizing the PRE Application
|
||||
-------------------------------
|
||||
Before the Staking Provider is eligible to participate in the PRE application,
|
||||
the Authorizer appointed during the stake delegation needs to approve the PRE Application
|
||||
to use the stake. From the moment of approval, the application is authorized to slash or seize the stake.
|
||||
|
||||
Authorization can be performed on the `Threshold dashboard <https://dashboard.threshold.network/overview/network>`_.
|
||||
|
||||
|
||||
Staking Provider Strategies & Responsibilities
|
||||
----------------------------------------------
|
||||
|
||||
In order to provide the PRE service and receive rewards, there have three options for running a PRE node:
|
||||
|
||||
* **Node Delegation**: Delegate running a PRE client to one of the participating *node-as-a-service* :ref:`Staking Providers <node-providers>`. In this
|
||||
case, the setup, operation, and monitoring is outsourced, and stakers need only check in occasionally to ensure the provider is handling things as expected.
|
||||
* **Self-Managed, Manual**: :ref:`Run<running-a-node>` your own PRE node and retain full purview and customization control over the machine(s), installation, dependencies and configuration. In this case, stakers are entirely responsible for setup, operation, and monitoring
|
||||
of the PRE client.
|
||||
* **Self-Managed, Automated**: Run your own PRE node on either Digital Ocean or AWS, leveraging :ref:`automation tools <managing-cloud-nodes>` that speed up and simplify the installation process. In this case too, stakers are entirely responsible for setup, operation, and monitoring of the PRE client.
|
||||
|
||||
Note that setting up a PRE node from scratch is non-trivial, but is typically inexpensive and unburdensome to maintain.
|
||||
PRE end-users expect and require an on-demand service, wherein their *grant*, *revoke* and *re-encryption* requests are answered reliably, correctly, and without interruption.
|
||||
Hence the most critical responsibility for stakers is ensuring that their PRE node remains online **at all times**. If this is not certain using a local machine, it is highly recommended to use cloud infrastructure instead.
|
||||
|
||||
|
||||
Staker Subsidization (Rewards)
|
||||
------------------------------
|
||||
Stakers who have successfully set up their PRE node (confirmed and activated via an on-chain transaction) are eligible to receive rewards, denominated in the native T token.
|
||||
|
||||
The sum received will be proportional to one's relative stake size and the duration of time the staker has been active, but independent of the staking rate – i.e. issuance will be computed to target
|
||||
a `minimum yield <https://forum.threshold.network/t/threshold-network-reward-mechanisms-proposal-i-stable-yield-for-non-institutional-staker-welfare/82>`_.
|
||||
|
||||
The target yield and subsequent issuance (total number of tokens distributed monthly to stakers) will be determined by the Threshold Council, and will ramp up over the genesis era of the Threshold Network.
|
||||
|
||||
.. important::
|
||||
|
||||
During the genesis era of Threshold Network, to avoid prejudicing against new stakers who have never run a PRE node previously, the first 1-2 months can be considered a *"grace period"* in which
|
||||
all stakers will receive the full month's rewards, regardless of which day they commenced staking.
|
|
@ -0,0 +1,435 @@
|
|||
.. _running-a-node:
|
||||
|
||||
Running a PRE Node
|
||||
==================
|
||||
|
||||
.. attention::
|
||||
|
||||
In order to run a PRE node on Threshold, ``nucypher`` version 6.0.0 is required,
|
||||
but is not yet available. See `releases <https://pypi.org/project/nucypher/#history>`_.
|
||||
|
||||
However, this documentation can be used in the interim to gain a better understanding of
|
||||
the logistics of running a PRE node.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
NuCypher maintains a separate self-contained CLI that automates the initialization
|
||||
and management of PRE nodes deployed on cloud infrastructure. This CLI leverages
|
||||
automation tools such as Ansible and Docker to simplify the setup and management
|
||||
of nodes running in the cloud. See :ref:`managing-cloud-nodes`.
|
||||
|
||||
After finding a server that meets the :ref:`requirements <node-requirements>`, running a PRE node entails two steps:
|
||||
|
||||
#. Initializing a PRE node configuration
|
||||
#. Starting the PRE node.
|
||||
|
||||
Node management commands are issued via the ``nucypher ursula`` CLI. For more information
|
||||
on that command you can run ``nucypher ursula –help``.
|
||||
|
||||
Initializing the PRE node configuration entails:
|
||||
|
||||
- Creation of a nucypher-specific keystore to store private encryption keys used
|
||||
by the node, which will be protected by a user-specified password.
|
||||
|
||||
.. important::
|
||||
|
||||
This is not to be confused with an ethereum keystore - which stores ethereum account private keys.
|
||||
|
||||
- Creation of a persistent node configuration file called ``ursula.json``. This file will be written to disk and contains the various runtime configurations for the node.
|
||||
|
||||
All PRE node configuration information will be stored in ``/home/user/.local/share/nucypher/`` by default.
|
||||
|
||||
.. _run-ursula-with-docker:
|
||||
|
||||
Run Node via Docker (Recommended)
|
||||
---------------------------------
|
||||
|
||||
Running the node via a docker container negates the need to install ``nucypher`` locally.
|
||||
Instead, the node is run as part of a docker container which greatly simplifies the installation process.
|
||||
|
||||
|
||||
Setup Docker
|
||||
++++++++++++
|
||||
|
||||
- Install `docker <https://docs.docker.com/install>`_.
|
||||
- *Optional* Depending on the setup you want, post install instructions, additional
|
||||
docker configuration is available `here <https://docs.docker.com/engine/install/linux-postinstall/>`_.
|
||||
- Get the latest ``nucypher`` docker image:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ docker pull nucypher/nucypher:latest
|
||||
|
||||
|
||||
Export Node Environment Variables
|
||||
+++++++++++++++++++++++++++++++++
|
||||
|
||||
These environment variables are used to better simplify the docker installation process.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# Password used for creation / update of nucypher keystore
|
||||
$ export NUCYPHER_KEYSTORE_PASSWORD=<YOUR NUCYPHER KEYSTORE PASSWORD>
|
||||
|
||||
# Password used to unlock node eth account
|
||||
$ export NUCYPHER_OPERATOR_ETH_PASSWORD=<YOUR OPERATOR ETH ACCOUNT PASSWORD>
|
||||
|
||||
|
||||
Initialize Node Configuration
|
||||
+++++++++++++++++++++++++++++
|
||||
|
||||
This step creates and stores the PRE node configuration, and only needs to be run once.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ docker run -it --rm \
|
||||
--name ursula \
|
||||
-v ~/.local/share/nucypher:/root/.local/share/nucypher \
|
||||
-v ~/.ethereum/:/root/.ethereum \
|
||||
-p 9151:9151 \
|
||||
-e NUCYPHER_KEYSTORE_PASSWORD \
|
||||
nucypher/nucypher:latest \
|
||||
nucypher ursula init \
|
||||
--signer keystore:///root/.ethereum/keystore \
|
||||
--eth-provider <L1 PROVIDER URI> \
|
||||
--network <L1 NETWORK NAME> \
|
||||
--payment-provider <L2 PROVIDER URI> \
|
||||
--payment-network <L2 NETWORK NAME> \
|
||||
--max-gas-price <GWEI>
|
||||
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<L1 PROVIDER URI>`` - The URI of a local or hosted ethereum node (infura/geth, e.g. ``https://infura.io/…``)
|
||||
* ``<L1 NETWORK NAME>`` - The name of a nucypher network (mainnet, ibex, or lynx)
|
||||
|
||||
* ``<L2 PROVIDER URI>`` - The URI of a local or hosted level-two node (infura/bor)
|
||||
* ``<L2 NETWORK NAME>`` - The name of a payment network (polygon or mumbai)
|
||||
|
||||
* ``<GWEI>`` (*Optional*) - The maximum price of gas to spend on any transaction
|
||||
|
||||
Launch the Node
|
||||
+++++++++++++++
|
||||
|
||||
This step starts the PRE node.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ docker run -d --rm \
|
||||
--name ursula \
|
||||
-v ~/.local/share/nucypher:/root/.local/share/nucypher \
|
||||
-v ~/.ethereum/:/root/.ethereum \
|
||||
-p 9151:9151 \
|
||||
-e NUCYPHER_KEYSTORE_PASSWORD \
|
||||
-e NUCYPHER_OPERATOR_ETH_PASSWORD \
|
||||
nucypher/nucypher:latest \
|
||||
nucypher ursula run
|
||||
|
||||
View Node Logs
|
||||
++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ docker logs -f ursula
|
||||
|
||||
|
||||
Upgrade the Node To a Newer Version
|
||||
+++++++++++++++++++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# stop docker container
|
||||
$ docker stop ursula
|
||||
|
||||
# pull latest docker image
|
||||
$ docker pull nucypher/nucypher:latest
|
||||
|
||||
# start node (same aforementioned run command)
|
||||
$ docker run …
|
||||
|
||||
|
||||
Run Node without Docker
|
||||
-----------------------
|
||||
|
||||
Instead of using docker, PRE nodes can be run using a local installation of ``nucypher``.
|
||||
|
||||
|
||||
Install ``nucypher``
|
||||
++++++++++++++++++++
|
||||
|
||||
- ``nucypher`` supports Python 3.7 and 3.8. If you don’t already have it, install `Python <https://www.python.org/downloads/>`_.
|
||||
- Create a `Virtual Environment <https://virtualenv.pypa.io/en/latest/>`_ in a folder
|
||||
somewhere on your machine.This virtual environment is a self-contained directory
|
||||
tree that will contain a python installation for a particular version of Python,
|
||||
and various installed packages needed to run the node.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
python -m venv </your/path/nucypher-venv>
|
||||
|
||||
- Activate the newly created virtual environment:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ source </your/path/nucypher-venv>/bin/activate
|
||||
|
||||
- Install `nucypher` package
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ pip3 install -U nucypher
|
||||
|
||||
- Verify that `nucypher` is installed
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher –-version
|
||||
|
||||
|
||||
Run Node via systemd (Alternate)
|
||||
++++++++++++++++++++++++++++++++
|
||||
|
||||
Instead of using docker, the node can be run as a `systemd <https://en.wikipedia.org/wiki/Systemd>`_ service.
|
||||
|
||||
|
||||
Configure the node
|
||||
++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$(nucypher) nucypher ursula init \
|
||||
--eth-provider <L1 PROVIDER URI> \
|
||||
--network <L1 NETWORK NAME> \
|
||||
--payment-provider <L2 PROVIDER URI> \
|
||||
--payment-network <L2 NETWORK NAME> \
|
||||
--signer <SIGNER URI> \
|
||||
--max-gas-price <GWEI>
|
||||
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<L1 PROVIDER URI>`` - The URI of a local or hosted ethereum node (infura/geth, e.g. ``https://infura.io/…``)
|
||||
* ``<L1 NETWORK NAME>`` - The name of a nucypher network (mainnet, ibex, or lynx)
|
||||
|
||||
* ``<L2 PROVIDER URI>`` - The URI of a local or hosted level-two node (infura/bor)
|
||||
* ``<L2 NETWORK NAME>`` - The name of a payment network (polygon or mumbai)
|
||||
|
||||
* ``<SIGNER URI>`` - The URI to an ethereum keystore or signer: ``keystore:///root/.ethereum/keystore``
|
||||
* ``<GWEI>`` (*Optional*) - The maximum price of gas to spend on any transaction
|
||||
|
||||
|
||||
Create Node Service Template
|
||||
++++++++++++++++++++++++++++
|
||||
|
||||
Create a file named ``ursula.service`` in ``/etc/systemd/system``, and add this template to it
|
||||
|
||||
.. code:: bash
|
||||
|
||||
[Unit]
|
||||
Description="Ursula, a PRE Node."
|
||||
|
||||
[Service]
|
||||
User=<YOUR USERNAME>
|
||||
Type=simple
|
||||
Environment="NUCYPHER_OPERATOR_ETH_PASSWORD=<YOUR OPERATOR ADDRESS PASSWORD>"
|
||||
Environment="NUCYPHER_KEYSTORE_PASSWORD=<YOUR PASSWORD>"
|
||||
ExecStart=<VIRTUALENV PATH>/bin/nucypher ursula run
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
- ``<YOUR USER>`` - The host system’s username to run the process with (best practice is to use a dedicated user)
|
||||
- ``<YOUR OPERATOR ADDRESS PASSWORD>`` - Operator’s ETH account password
|
||||
- ``<YOUR PASSWORD>`` - ``nucypher`` keystore password
|
||||
- ``<VIRTUALENV PATH>`` - The absolute path to the python virtual environment containing the ``nucypher`` executable.
|
||||
Run ``pipenv –venv`` within the virtual environment to get the virtual environment path.
|
||||
|
||||
|
||||
Enable Node Service
|
||||
+++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo systemctl enable ursula
|
||||
|
||||
|
||||
Run Node Service
|
||||
++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo systemctl start ursula
|
||||
|
||||
|
||||
Check Node Service Status
|
||||
+++++++++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# Application Logs
|
||||
$ tail -f ~/.local/share/nucypher/nucypher.log
|
||||
|
||||
# Systemd status
|
||||
$ systemctl status ursula
|
||||
|
||||
# Systemd Logs
|
||||
$ journalctl -f -t ursula
|
||||
|
||||
|
||||
Restart Node Service
|
||||
++++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo systemctl restart ursula
|
||||
|
||||
|
||||
Run Node Manually
|
||||
+++++++++++++++++
|
||||
|
||||
Configure the Node
|
||||
++++++++++++++++++
|
||||
|
||||
If you’d like to use another own method of running the Node's process in the
|
||||
background,, here is how to run Ursula using the CLI directly.
|
||||
|
||||
First initialize a Node configuration:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$(nucypher) nucypher ursula init \
|
||||
--eth-provider <L1 PROVIDER URI> \
|
||||
--network <L1 NETWORK NAME> \
|
||||
--payment-provider <L2 PROVIDER URI> \
|
||||
--payment-network <L2 NETWORK NAME> \
|
||||
--signer <SIGNER URI> \
|
||||
--max-gas-price <GWEI>
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<L1 PROVIDER URI>`` - The URI of a local or hosted ethereum node (infura/geth, e.g. ``https://infura.io/…``)
|
||||
* ``<L1 NETWORK NAME>`` - The name of a nucypher network (mainnet, ibex, or lynx)
|
||||
|
||||
* ``<L2 PROVIDER URI>`` - The URI of a local or hosted level-two node (infura/bor)
|
||||
* ``<L2 NETWORK NAME>`` - The name of a payment network (polygon or mumbai)
|
||||
|
||||
* ``<SIGNER URI>`` - The URI to an ethereum keystore or signer: ``keystore:///root/.ethereum/keystore``
|
||||
* ``<GWEI>`` (*Optional*) - The maximum price of gas to spend on any transaction
|
||||
|
||||
|
||||
Run the Node
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher ursula run
|
||||
|
||||
|
||||
Update Node Configuration
|
||||
+++++++++++++++++++++++++
|
||||
|
||||
These configuration settings will be stored in an ursula configuration file, ``ursula.json``, stored
|
||||
in ``/home/user/.local/share/nucypher`` by default.
|
||||
|
||||
All node configuration values can be modified using the config command, ``nucypher ursula config``
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher ursula config --<OPTION> <NEW VALUE>
|
||||
|
||||
# Usage
|
||||
$ nucypher ursula config –help
|
||||
|
||||
# Update the max gas price setting
|
||||
$ nucypher ursula config --max-gas-price <GWEI>
|
||||
|
||||
# Change the Ethereum provider to use
|
||||
nucypher ursula config --eth-provider <ETH PROVIDER URI>
|
||||
|
||||
# Accept payments for service using the SubscriptionManager contract on polygon/mumbai
|
||||
nucypher ursula config --payment-method SubscriptionManager --payment-network mumbai
|
||||
|
||||
# View the current configuration
|
||||
nucypher ursula config
|
||||
|
||||
#
|
||||
# Non-default configuration file path
|
||||
#
|
||||
|
||||
# View the current configuration of a non-default configuration file path
|
||||
nucypher ursula config --config-file <CONFIG PATH>
|
||||
|
||||
# Update the max gas price setting of a non-default configuration file path
|
||||
nucypher ursula config --config-file <CONFIG PATH> --eth-provider <ETH PROVIDER URI>
|
||||
|
||||
|
||||
.. important::
|
||||
|
||||
The node must be restarted for any configuration changes to take effect.
|
||||
|
||||
|
||||
Node Qualification
|
||||
++++++++++++++++++
|
||||
|
||||
Nodes must be fully qualified: funded with ETH and bonded to an operator address,
|
||||
in order to fully start. Nodes that are launched before qualification will
|
||||
pause until they have a balance greater than 0 ETH, and are bonded to an
|
||||
operator address. Once both of these requirements are met, the node will
|
||||
automatically continue startup.
|
||||
|
||||
Waiting for qualification:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
Defaulting to Ursula configuration file: '/root/.local/share/nucypher/ursula.json'
|
||||
Authenticating Ursula
|
||||
Starting services
|
||||
ⓘ Operator startup is paused. Waiting for bonding and funding ...
|
||||
ⓘ Operator startup is paused. Waiting for bonding and funding ...
|
||||
ⓘ Operator startup is paused. Waiting for bonding and funding …
|
||||
|
||||
Continuing startup after funding and bonding:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
...
|
||||
ⓘ Operator startup is paused. Waiting for bonding and funding ...
|
||||
✓ Operator is funded with 0.641160744670608582 ETH
|
||||
✓ Operator 0x2507beC003324d1Ec7F42Cc03B95d213D2E0b238 is bonded to staking provider 0x4F29cC79B52DCc97db059B0E11730F9BE98F1959
|
||||
✓ Operator already confirmed. Not starting worktracker.
|
||||
...
|
||||
✓ Rest Server https://1.2.3.4:9151
|
||||
Working ~ Keep Ursula Online!
|
||||
|
||||
|
||||
Node Status
|
||||
-----------
|
||||
|
||||
Node Logs
|
||||
+++++++++
|
||||
|
||||
A reliable way to check the status of a node is to view the logs.
|
||||
View logs for a docker-launched Ursula:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ docker logs -f ursula
|
||||
|
||||
View logs for a CLI-launched or systemd Ursula:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# Application Logs
|
||||
tail -f ~/.local/share/nucypher/nucypher.log
|
||||
|
||||
# Systemd Logs
|
||||
journalctl -f -t ursula
|
||||
|
||||
|
||||
Node Status Page
|
||||
++++++++++++++++
|
||||
|
||||
Once the node is running, you can view its public status page at ``https://<node_ip>:9151/status``.
|
|
@ -0,0 +1,12 @@
|
|||
.. _ibex-testnet:
|
||||
|
||||
=============
|
||||
Ibex Testnet
|
||||
=============
|
||||
|
||||
NuCypher provides a public testnet running on the Ethereum Rinkeby testnet meant for staking providers and node operators
|
||||
to learn how to set up a PRE application node, as well as for internal development purposes.
|
||||
|
||||
.. attention::
|
||||
|
||||
This testnet is currently being migrated to Threshold Network.
|
|
@ -92,90 +92,6 @@ Enrico
|
|||
+--------------------------+-------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Stake
|
||||
-----
|
||||
|
||||
Manage stakes and other staker-related operations.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
(nucypher)$ nucypher stake ACTION [OPTIONS]
|
||||
|
||||
|
||||
**Stake Command Actions**
|
||||
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| Action | Description |
|
||||
+======================+===============================================================================+
|
||||
| ``init-stakeholder``| Create a new stakeholder configuration |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``create`` | Initialize NuCypher stakes (used with ``--value`` and ``--duration``) |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``increase`` | Increase an existing stake's value |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``list`` | List active stakes for current stakeholder |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``accounts`` | Show ETH and NU balances for stakeholder's accounts |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``bond-worker`` | Bond a worker to a staker |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``unbond-worker`` | Unbond worker currently bonded to a staker |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``divide`` | Create a new stake from part of an existing one |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``restake`` | Manage automatic reward re-staking |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``rewards`` | Preview and withdraw staking rewards and fees |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``prolong`` | Prolong an existing stake's duration |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``winddown`` | Manage winding down of stakes |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``snapshots`` | Manage taking snapshots |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``mint`` | Mint last portion of reward |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``merge`` | Merge two stakes into one |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``remove-inactive`` | Remove inactive stake |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``events`` | View StakingEscrow blockchain events associated with a staker |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
|
||||
**Stake Command Options**
|
||||
|
||||
+-----------------+--------------------------------------------+
|
||||
| Option | Description |
|
||||
+=================+============================================+
|
||||
| ``--value`` | Stake value (optional) |
|
||||
+-----------------+--------------------------------------------+
|
||||
| ``--duration`` | Stake duration of extension (optional) |
|
||||
+-----------------+--------------------------------------------+
|
||||
| ``--index`` | Stake index (optional) |
|
||||
+-----------------+--------------------------------------------+
|
||||
|
||||
**Re-stake Command Options**
|
||||
|
||||
+-------------------------+---------------------------------------------+
|
||||
| Option | Description |
|
||||
+=========================+=============================================+
|
||||
| ``--enable`` | Enable re-staking |
|
||||
+-------------------------+---------------------------------------------+
|
||||
| ``--disable`` | Disable re-staking |
|
||||
+-------------------------+---------------------------------------------+
|
||||
| ``--lock-until`` | Enable re-staking lock until release period |
|
||||
+-------------------------+---------------------------------------------+
|
||||
|
||||
**Stake Rewards Command Actions**
|
||||
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| Action | Description |
|
||||
+======================+===============================================================================+
|
||||
| ``show`` | Show available and historical staking rewards |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| ``withdraw`` | Withdraw unlocked tokens and fees from the contract to your wallet |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
|
||||
Ursula
|
||||
------
|
||||
|
||||
|
@ -193,11 +109,11 @@ Ursula
|
|||
+--------------------------+---------------------------------------------------------------------+
|
||||
| Action | Description |
|
||||
+==========================+=====================================================================+
|
||||
| ``init`` | Create a brand new persistent Bob. |
|
||||
| ``init`` | Create a brand new persistent Ursula. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``config`` | View and optionally update an existing Ursula's configuration. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``destroy`` | Delete existing Bob's configuration. |
|
||||
| ``destroy`` | Delete existing Ursula's configuration. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``forget`` | Delete all stored peer metadata. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
|
@ -210,7 +126,7 @@ Ursula
|
|||
Cloudworkers
|
||||
------------
|
||||
|
||||
Manage worker and other staker-related operations on cloud infrastructure.
|
||||
Manage PRE Node operations on cloud infrastructure.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
|
@ -254,7 +170,7 @@ Manage worker and other staker-related operations on cloud infrastructure.
|
|||
Status
|
||||
------
|
||||
|
||||
Echo a snapshot of live NuCypher Network metadata.
|
||||
Echo a snapshot of live PRE Application metadata.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
|
@ -267,13 +183,5 @@ Echo a snapshot of live NuCypher Network metadata.
|
|||
+--------------------------+---------------------------------------------------------------------+
|
||||
| Action | Description |
|
||||
+==========================+=====================================================================+
|
||||
| ``events`` | Show events associated to NuCypher contracts. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``fee-range`` | Provide information on the global fee range. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``locked-tokens`` | Display a graph of the number of locked tokens over time. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``network`` | Overall information of the NuCypher Network. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
| ``stakers`` | Show relevant information about stakers. |
|
||||
| ``events`` | Show events associated to PRE Application contracts. |
|
||||
+--------------------------+---------------------------------------------------------------------+
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
Network Events
|
||||
==============
|
||||
PRE Application Events
|
||||
======================
|
||||
|
||||
When there is an interaction with NuCypher smart contracts, various on-chain events are emitted. These events are
|
||||
When there is an interaction with PRE Application smart contracts, various on-chain events are emitted. These events are
|
||||
defined in the :doc:`Contracts API </contracts_api/index>`, and they are queryable via the ``nucypher status events``
|
||||
CLI command, and allows for any NuCypher Network event to be queried.
|
||||
CLI command, and allows for any PRE Application event to be queried.
|
||||
|
||||
|
||||
Querying Events
|
||||
|
@ -25,68 +25,6 @@ For a full list of CLI options, run:
|
|||
$ nucypher status events --help
|
||||
|
||||
|
||||
For example, to view the staking rewards received by all Stakers in the current period, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name StakingEscrow --event-name Minted
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 11916688 to latest
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
Minted:
|
||||
- (EventRecord) staker: <STAKER_ADDRESS 1>, period: 18681, value: 1234567890123456789012, block_number: 11916689
|
||||
- (EventRecord) staker: <STAKER ADDRESS 2>, period: 18681, value: 1234567890123456789012, block_number: 11916692
|
||||
- (EventRecord) staker: <STAKER ADDRESS 3>, period: 18681, value: 1234567890123456789012, block_number: 11916692
|
||||
- (EventRecord) staker: <STAKER ADDRESS 4>, period: 18681, value: 1234567890123456789012, block_number: 11916692
|
||||
...
|
||||
|
||||
The value ``1234567890123456789012`` is in NuNits and equates to approximately 1234.57 NU (1 NU = 10\ :sup:`18` NuNits).
|
||||
|
||||
|
||||
To view the staking rewards received by all Stakers from block number ``11916685`` to ``11916688``, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name StakingEscrow --event-name Minted --from-block 11916685 --to-block 11916688
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 11916685 to 11916688
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
Minted:
|
||||
- (EventRecord) staker: <STAKER_ADDRESS 1>, period: 18681, value: 1234567890123456789012, block_number: 11916687
|
||||
- (EventRecord) staker: <STAKER_ADDRESS 2>, period: 18681, value: 1234567890123456789012, block_number: 11916687
|
||||
- (EventRecord) staker: <STAKER_ADDRESS 3>, period: 18681, value: 1234567890123456789012, block_number: 11916687
|
||||
- (EventRecord) staker: <STAKER ADDRESS 4>, period: 18681, value: 1234567890123456789012, block_number: 11916687
|
||||
...
|
||||
|
||||
|
||||
To view every PolicyManager smart contract event thus far, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name PolicyManager --from-block 0
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- PolicyManager Events ---------
|
||||
|
||||
ArrangementRevoked:
|
||||
FeeRateRangeSet:
|
||||
- (EventRecord) sender: 0xb6bfF48574B722F3BFf0C29c9e1b631dD19c1A93, min: 50000000000, defaultValue: 50000000000, max: 500000000000, block_number: 11057893
|
||||
MinFeeRateSet:
|
||||
- (EventRecord) node: 0xd4CA3a2F1046B845Aad5fe16211fd1686421e175, value: 500000000000, block_number: 11466651
|
||||
OwnershipTransferred:
|
||||
- (EventRecord) previousOwner: 0x0000000000000000000000000000000000000000, newOwner: 0xebA17F35955E057a8d2e74bD4638528851d8E063, block_number: 10763539
|
||||
- (EventRecord) previousOwner: 0xebA17F35955E057a8d2e74bD4638528851d8E063, newOwner: 0xb6bfF48574B722F3BFf0C29c9e1b631dD19c1A93, block_number: 11057541
|
||||
...
|
||||
|
||||
|
||||
Event Filters
|
||||
-------------
|
||||
|
||||
|
@ -94,11 +32,20 @@ To aid with query limits and more specific queries, events can be filtered using
|
|||
option. Multiple ``--event-filter`` options can be defined, but note that only properties classified
|
||||
as ``indexed`` in the event's solidity definition can be used as a filter.
|
||||
|
||||
For example, to view all of the commitments ever made by the Worker associated with a specific Staker run:
|
||||
The event filter can be defined as follows, ``--event-filter <PARAMETER_NAME>=<FILTER_VALUE>``.
|
||||
|
||||
|
||||
Legacy Events
|
||||
-------------
|
||||
|
||||
To query for events related to the NuCypher Network prior to the merge to Threshold Network,
|
||||
e.g. ``CommitmentMade`` or ``Minted``, use the ``--legacy`` flag.
|
||||
|
||||
For example, to view all of the legacy NuCypher Network commitments ever made by the node associated with a specific Staker run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name StakingEscrow --event-name CommitmentMade --event-filter staker=<STAKING_ADDRESS> --from-block 0
|
||||
$ nucypher status events --legacy --eth-provider <ETH PROVIDER URI> --contract-name StakingEscrow --event-name CommitmentMade --event-filter staker=<STAKING_ADDRESS> --from-block 0
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
@ -112,20 +59,6 @@ For example, to view all of the commitments ever made by the Worker associated w
|
|||
- (EventRecord) staker: <STAKER_ADDRESS>, period: 18554, value: 1234567890123456789012, block_number: 11076964
|
||||
...
|
||||
|
||||
To view the commitment made by the Worker associated with a specific Staker in period 18552, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name StakingEscrow --event-name CommitmentMade --event-filter staker=<STAKING_ADDRESS> --event-filter period=18552 --from-block 0
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
CommitmentMade:
|
||||
- (EventRecord) staker: <STAKER_ADDRESS>, period: 18552, value: 1234567890123456789012, block_number: 11063640
|
||||
|
||||
|
||||
CSV Output
|
||||
----------
|
||||
|
@ -137,89 +70,6 @@ data can be written to a CSV file using either of the following command-line opt
|
|||
* ``--csv-file <FILEPATH>`` - write event information to a specific CSV file at the provided filepath
|
||||
|
||||
|
||||
For example,
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name PolicyManager --event-name PolicyCreated --from-block 0 --csv
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- PolicyManager Events ---------
|
||||
|
||||
PolicyManager::PolicyCreated events written to PolicyManager_PolicyCreated_2021-02-24_20-02-32.csv
|
||||
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name PolicyManager --event-name PolicyCreated --from-block 0 --csv-file ~/Policy_Events.csv
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- PolicyManager Events ---------
|
||||
|
||||
PolicyManager::PolicyCreated events written to /<HOME DIRECTORY>/Policy_Events.csv
|
||||
|
||||
|
||||
To write every PolicyManager smart contract event thus far to corresponding CSV files, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name PolicyManager --from-block 0 --csv
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- PolicyManager Events ---------
|
||||
|
||||
No PolicyManager::ArrangementRevoked events found
|
||||
PolicyManager::FeeRateRangeSet events written to PolicyManager_FeeRateRangeSet_2021-02-24_20-47-00.csv
|
||||
PolicyManager::MinFeeRateSet events written to PolicyManager_MinFeeRateSet_2021-02-24_20-47-01.csv
|
||||
PolicyManager::OwnershipTransferred events written to PolicyManager_OwnershipTransferred_2021-02-24_20-47-01.csv
|
||||
PolicyManager::PolicyCreated events written to PolicyManager_PolicyCreated_2021-02-24_20-47-01.csv
|
||||
No PolicyManager::PolicyRevoked events found
|
||||
No PolicyManager::RefundForArrangement events found
|
||||
No PolicyManager::RefundForPolicy events found
|
||||
PolicyManager::StateVerified events written to PolicyManager_StateVerified_2021-02-24_20-47-06.csv
|
||||
PolicyManager::UpgradeFinished events written to PolicyManager_UpgradeFinished_2021-02-24_20-47-06.csv
|
||||
PolicyManager::Withdrawn events written to PolicyManager_Withdrawn_2021-02-24_20-47-06.csv
|
||||
|
||||
|
||||
To write StakingEscrow events for a specific Staker for the current period to corresponding CSV files, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher status events --eth-provider <ETH PROVIDER URI> --contract-name StakingEscrow --event-filter staker=<STAKING_ADDRESS> --csv
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 11929449 to latest
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
StakingEscrow::CommitmentMade events written to StakingEscrow_CommitmentMade_2021-02-26_00-11-53.csv
|
||||
No StakingEscrow::Deposited events found
|
||||
No StakingEscrow::Divided events found
|
||||
No StakingEscrow::Donated events found
|
||||
No StakingEscrow::Initialized events found
|
||||
No StakingEscrow::Locked events found
|
||||
StakingEscrow::Merged events written to StakingEscrow_Merged_2021-02-26_00-12-27.csv
|
||||
StakingEscrow::Minted events written to StakingEscrow_Minted_2021-02-26_00-12-29.csv
|
||||
No StakingEscrow::OwnershipTransferred events found
|
||||
No StakingEscrow::Prolonged events found
|
||||
No StakingEscrow::ReStakeLocked events found
|
||||
No StakingEscrow::ReStakeSet events found
|
||||
No StakingEscrow::Slashed events found
|
||||
No StakingEscrow::SnapshotSet events found
|
||||
No StakingEscrow::StateVerified events found
|
||||
No StakingEscrow::UpgradeFinished events found
|
||||
No StakingEscrow::WindDownSet events found
|
||||
No StakingEscrow::Withdrawn events found
|
||||
No StakingEscrow::WorkMeasurementSet events found
|
||||
No StakingEscrow::WorkerBonded events found
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
If there were no events found, a CSV file is not written to.
|
||||
|
@ -229,5 +79,5 @@ To write StakingEscrow events for a specific Staker for the current period to co
|
|||
|
||||
When using the ``--csv-file`` option, since different events can have different
|
||||
properties, the ``--event-name`` and ``--contract-name`` options must be specified. If querying for multiple
|
||||
events at the same time i.e. running the command without ``--event-name``, the ``--csv`` option can be used
|
||||
events at the same time i.e. running the command without ``--event-name``, the ``--csv`` option should be used
|
||||
to generate separate default filenames for the different events.
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
===================
|
||||
NuCypher Networks
|
||||
===================
|
||||
|
||||
|
||||
Active Networks
|
||||
-----------------
|
||||
|
||||
Mainnet
|
||||
*******
|
||||
|
||||
* `NuCypherToken 0x4fE83213D56308330EC302a8BD641f1d0113A4Cc <https://etherscan.io/address/0x4fE83213D56308330EC302a8BD641f1d0113A4Cc>`_
|
||||
* `StakingEscrow (Dispatcher) 0xbbD3C0C794F40c4f993B03F65343aCC6fcfCb2e2 <https://etherscan.io/address/0xbbD3C0C794F40c4f993B03F65343aCC6fcfCb2e2>`_
|
||||
* `PolicyManager (Dispatcher) 0x67E4A942c067Ff25cE7705B69C318cA2Dfa54D64 <https://etherscan.io/address/0x67E4A942c067Ff25cE7705B69C318cA2Dfa54D64>`_
|
||||
* `Adjudicator (Dispatcher) 0x359924Be0640659F34198e518BF3d40Fb56160BE <https://etherscan.io/address/0x359924Be0640659F34198e518BF3d40Fb56160BE>`_
|
||||
* `WorkLock 0xe9778e69a961e64d3cdbb34cf6778281d34667c2 <https://etherscan.io/address/0xe9778e69a961e64d3cdbb34cf6778281d34667c2>`_
|
||||
|
||||
|
||||
Lynx
|
||||
****
|
||||
|
||||
Public Long-Term Support testnet to provide a stable playground for network users (e.g., Alices wishing to create sharing
|
||||
policies). Running on Ethereum Goerli testnet (see :ref:`lynx-testnet`).
|
||||
|
||||
* `NuCypherToken 0x02B50E38E5872068F325B1A7ca94D90ce2bfff63 <https://goerli.etherscan.io/address/0x02B50E38E5872068F325B1A7ca94D90ce2bfff63>`_
|
||||
* `StakingEscrow (Dispatcher) 0x40Ca356d8180Ddc21C82263F9EbCeaAc6Cad7250 <https://goerli.etherscan.io/address/0x40Ca356d8180Ddc21C82263F9EbCeaAc6Cad7250>`_
|
||||
* `PolicyManager (Dispatcher) 0xaC5e34d3FD41809873968c349d1194D23045b9D2 <https://goerli.etherscan.io/address/0xaC5e34d3FD41809873968c349d1194D23045b9D2>`_
|
||||
* `Adjudicator (Dispatcher) 0xC62e20B599416e4B5F3b54d50837F070bFec6412 <https://goerli.etherscan.io/address/0xC62e20B599416e4B5F3b54d50837F070bFec6412>`_
|
||||
|
||||
|
||||
Ibex
|
||||
****
|
||||
|
||||
Public testnet, intended as a playground for stakers and node operators (e.g., learning how to create and manage
|
||||
stakes, setting up a node, as well as for internal development purposes. Running on Ethereun Rinkeby testnet (see :ref:`ibex-testnet`).
|
||||
|
||||
* `NuCypherToken 0x78D591D90a4a768B9D2790deA465D472b6Fe0f18 <https://rinkeby.etherscan.io/address/0x78D591D90a4a768B9D2790deA465D472b6Fe0f18>`_
|
||||
* `StakingEscrow (Dispatcher) 0x6A6F917a3FF3d33d26BB4743140F205486cD6B4B <https://rinkeby.etherscan.io/address/0x6A6F917a3FF3d33d26BB4743140F205486cD6B4B>`_
|
||||
* `PolicyManager (Dispatcher) 0x4db603E42E6798Ac534853AA2c0fF5618cb0ebE5 <https://rinkeby.etherscan.io/address/0x4db603E42E6798Ac534853AA2c0fF5618cb0ebE5>`_
|
||||
* `Adjudicator (Dispatcher) 0xE1d0C09b94ba522BCC1b73922dc1f0b6ca9bEA26 <https://rinkeby.etherscan.io/address/0xE1d0C09b94ba522BCC1b73922dc1f0b6ca9bEA26>`_
|
||||
|
||||
|
||||
Historical networks
|
||||
--------------------
|
||||
|
||||
The following is a list of networks that we used at some point in the past and that are currently deprecated:
|
||||
|
||||
* `miranda`: Our first decentralized testnet.
|
||||
* `frances`: Our second testnet. Only for development purposes.
|
||||
* `cassandra`: Incentivized Testnet, supporting our 'Come and Stake It' initiative.
|
||||
* `gemini`: New version of Incentivized Testnet, supporting Phase 4 of 'Come and Stake It'.
|
|
@ -1,193 +0,0 @@
|
|||
Transaction Signing
|
||||
===================
|
||||
|
||||
In conjunction with an ethereum provider, an transaction signer operates independently of the provider/broadcaster.
|
||||
This separation allows pre-signed transactions to be sent to an external (possibly remote) ethereum node
|
||||
and is particularly desirable when interacting with an untrusted ethereum node.
|
||||
|
||||
For example, external signers can be used with:
|
||||
|
||||
- Infura/Alchemy/Etc.
|
||||
- Local ethereum node
|
||||
- Remote ethereum node
|
||||
|
||||
The following signers are currently supported:
|
||||
|
||||
#. :ref:`Hardware Wallet <signing-with-hardware>` (recommended for :ref:`Stakers <staking-guide>`)
|
||||
#. :ref:`Local Keystore <signing-with-local-keystore>` (recommended for :ref:`Workers <ursula-config-guide>`)
|
||||
#. :ref:`Clef <signing-with-clef>`
|
||||
|
||||
.. _signing-with-hardware:
|
||||
|
||||
Signing with Hardware Wallet
|
||||
****************************
|
||||
|
||||
A hardware wallet stores private keys on a physical device. Storing private keys offline keeps them out of
|
||||
reach of attackers and therefore provides a high level of security.
|
||||
|
||||
.. note::
|
||||
|
||||
Currently, ``nucypher`` only provides native support for Trezor. Work is underway to natively support other
|
||||
hardware wallets such as Ledger. In the meantime, other hardware wallets can be used in conjunction
|
||||
with `Clef <Signing with Clef>`_.
|
||||
|
||||
Trezor
|
||||
++++++
|
||||
|
||||
A `Trezor <https://trezor.io/>`_ signer can be specified either through the CLI (``--signer``) or
|
||||
API (``nucypher.blockchain.eth.signers.Signer.from_signer_uri``), using the URI ``trezor``.
|
||||
|
||||
|
||||
.. _signing-with-local-keystore:
|
||||
|
||||
Signing with Local Keystore
|
||||
***************************
|
||||
|
||||
.. important::
|
||||
|
||||
For operational security, the Keystore signer is not recommended for :ref:`Staker operations <staking-guide>`.
|
||||
An exception can be made for testnets, but Staker operations should be performed using a hardware wallet.
|
||||
|
||||
Local keystore signing utilizes `eth-account <https://github.com/ethereum/eth-account>`_ to sign ethereum transactions
|
||||
using local ethereum keystore files. By default on Linux, the keystore directory path is ``~/.ethereum/keystore``
|
||||
(on MacOS for Rinkeby testnet, ``/Users/<username>/Library/Ethereum/rinkeby/keystore``).
|
||||
|
||||
|
||||
Usage
|
||||
+++++
|
||||
|
||||
Specify the local keystore signer either through the CLI (``--signer``) or API (``nucypher.blockchain.eth.signers.Signer.from_signer_uri``),
|
||||
using the URI ``keystore://<PATH TO LOCAL KEYSTORE>``.
|
||||
|
||||
The path provided can either be a directory of keystore files or an individual keystore file. In the case of a
|
||||
directory, it is scanned and each of the keystore files contained are processed.
|
||||
|
||||
|
||||
.. _signing-with-clef:
|
||||
|
||||
Signing with Clef
|
||||
*****************
|
||||
|
||||
Clef enables applications to connect to an ethereum node and send locally signed
|
||||
transactions to be broadcasted. More
|
||||
information about Clef can be found `here <https://geth.ethereum.org/docs/clef/tutorial>`_. Clef can
|
||||
use hardware wallets (Ledger and Trezor) over USB, or geth formatted private keys by specifying the keystore
|
||||
directory path.
|
||||
|
||||
|
||||
Clef Setup
|
||||
++++++++++
|
||||
|
||||
Clef is typically installed alongside geth.
|
||||
|
||||
.. important::
|
||||
|
||||
Geth version 1.9.22 or higher is required.
|
||||
|
||||
If you already have geth installed on your system you may already have Clef installed. To check for an
|
||||
existing installation run:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ clef --version
|
||||
Clef version 0.0.0
|
||||
|
||||
If ``clef`` was not found, upgrade ``geth`` to the latest version and try again.
|
||||
|
||||
Next, initialize Clef with your chosen password to encrypt the master seed:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ clef init
|
||||
...
|
||||
The master seed of clef will be locked with a password.
|
||||
Please specify a password. Do not forget this password!
|
||||
Password:
|
||||
|
||||
|
||||
Running Clef
|
||||
++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ clef --keystore <PATH TO KEYSTORE> --chainid <CHAIN ID> --advanced
|
||||
|
||||
|
||||
* ``<PATH TO KEYSTORE>`` - The path to the directory containing geth-formatted private key files; the default path for Linux is ``~/.ethereum/keystore``.
|
||||
**No need to specify if using a hardware wallet.**
|
||||
* ``<CHAIN ID>`` - 1 is specified to ensure Clef signs transactions with the network ID of ethereum mainnet (4 for the ``ibex`` testnet on rinkeby).
|
||||
|
||||
.. code:: bash
|
||||
|
||||
Enter 'ok' to proceed:
|
||||
> ok
|
||||
...
|
||||
|
||||
------- Signer info -------
|
||||
* extapi_version : 6.0.0
|
||||
* extapi_http : n/a
|
||||
* extapi_ipc : <CLEF IPC PATH>
|
||||
* intapi_version : 7.0.0
|
||||
|
||||
where ``<CLEF IPC PATH>``:
|
||||
|
||||
* Linux: ``/home/<username>/.clef/clef.ipc``
|
||||
* MacOS: ``/Users/<username>/Library/Signer/clef.ipc``
|
||||
|
||||
|
||||
.. _clef-rules:
|
||||
|
||||
Clef Rules
|
||||
++++++++++
|
||||
|
||||
By default, all requests to the Clef signer require manual confirmation. To overcome this, Clef allows the
|
||||
configuration of rules to automate the confirmation of requests to the signer. In particular, we recommend that users
|
||||
of a Clef signer with ``nucypher`` define the following rules file (``rules.js``), which simply approves the
|
||||
listing of accounts:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
function ApproveListing() {
|
||||
return "Approve"
|
||||
}
|
||||
|
||||
The sha256 digest of this particular 3-line file is ``8d089001fbb55eb8d9661b04be36ce3285ffa940e5cdf248d0071620cf02ebcd``.
|
||||
We will use this digest to attest that we trust these rules:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ clef attest 8d089001fbb55eb8d9661b04be36ce3285ffa940e5cdf248d0071620cf02ebcd
|
||||
|
||||
WARNING!
|
||||
|
||||
Clef is an account management tool. It may, like any software, contain bugs.
|
||||
|
||||
Please take care to
|
||||
- backup your keystore files,
|
||||
- verify that the keystore(s) can be opened with your password.
|
||||
|
||||
Clef is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
Enter 'ok' to proceed:
|
||||
> ok
|
||||
|
||||
Decrypt master seed of clef
|
||||
Password:
|
||||
INFO [04-14|02:00:54.740] Ruleset attestation updated sha256=8d089001fbb55eb8d9661b04be36ce3285ffa940e5cdf248d0071620cf02ebcd
|
||||
|
||||
|
||||
Once the rules file is attested, we can run Clef with the ``--rules rules.js`` flag,
|
||||
to indicate which are the automated rules (in our case, allowing the listing of accounts):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ clef --keystore <PATH TO KEYSTORE> --chainid <CHAIN ID> --advanced --rules rules.js
|
||||
|
||||
|
||||
Usage
|
||||
+++++
|
||||
|
||||
Once ``clef`` is running, specify the Clef signer either through the CLI (``--signer``) or
|
||||
API (``nucypher.blockchain.eth.signers.Signer.from_signer_uri``), using the URI ``clef://<CLEF IPC PATH>``.
|
|
@ -1,107 +0,0 @@
|
|||
================
|
||||
Worker Diligence
|
||||
================
|
||||
|
||||
.. attention::
|
||||
|
||||
This best practices document is a work-in-progress and is not comprehensive.
|
||||
|
||||
|
||||
Workers can demonstrate their vested interest in the success of the network by adhering to
|
||||
three core areas of responsibility (in order of importance):
|
||||
|
||||
1. Keystore Diligence
|
||||
---------------------
|
||||
|
||||
Requires that private keys used by the worker are backed up and can be restored.
|
||||
|
||||
Keystore diligence an be exercised by:
|
||||
|
||||
- Keeping an offline record of the mnemonic recovery phrase.
|
||||
- Backing up the worker's keystores (both ethereum and nucypher).
|
||||
- Using a password manager to generate and store a strong password when one is required.
|
||||
|
||||
.. note::
|
||||
|
||||
The default location of the nucypher worker keystore files can be located by
|
||||
running a nucypher command:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher --config-path
|
||||
|
||||
Encrypted worker keys can be found in the ``keystore`` directory:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
/home/user/.local/share/nucypher
|
||||
├── ursula.json
|
||||
├── keystore
|
||||
│ ├── 1621399628-e76f101f35846f18d80bfda5c61e9ec2.priv
|
||||
└── ...
|
||||
|
||||
2. Datastore Diligence
|
||||
----------------------
|
||||
|
||||
Requires that material observed during the runtime be stored.
|
||||
|
||||
A running worker stores peer metadata, re-encryption key fragments ("Kfrags"), and "treasure maps".
|
||||
|
||||
Loss of stored re-encryption key fragments will lead to slashing of the bonded stake.
|
||||
If a worker node has already agreed to enforce a policy, then loses a Kfrag, network users
|
||||
can issue a challenge which is verified onchain by the Adjudicator contract.
|
||||
|
||||
As a civic matter, storing node validity status is important for workers so that they refrain from
|
||||
pestering nodes with unnecessary additional verification requests. Loss of peer metadata means
|
||||
that the worker must rediscover and validate peers, slowly rebuilding its network view which contributes to
|
||||
lessened availability and higher network-wide traffic.
|
||||
|
||||
Datastore diligence can be exercised by maintain regular backups of the worker's filesystem and database.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
The default location of the worker keystore files can be located by running a nucypher command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ nucypher --config-path
|
||||
|
||||
The worker database and peer metadata can be found in the nucypher configuration root
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
/home/user/.local/share/nucypher
|
||||
├── ursula.db
|
||||
│ ├── ...
|
||||
└── known_nodes
|
||||
├── certificates
|
||||
| └── ...
|
||||
└── metadata
|
||||
└── ...
|
||||
|
||||
|
||||
3. Runtime Diligence
|
||||
--------------------
|
||||
|
||||
Requires active and security-conscious participation in the network.
|
||||
|
||||
A bonded node that is unreachable or otherwise invalid will be unable to accept new
|
||||
policies, and miss out on inflation rewards. The bonded stake will remain locked until
|
||||
the entire commitment is completed.
|
||||
|
||||
The worker's ethereum account must have enough ether to pay for transaction gas;
|
||||
however, it is *not* necessary (and potentially risky) to hold NU tokens on a worker's
|
||||
account for any reason.
|
||||
|
||||
Runtime Diligence an be exercised by:
|
||||
|
||||
- Secure the worker's keystore used on the deployment host.
|
||||
- Maintain high uptime; keep downtime brief when required by updates or reconfiguration.
|
||||
- Update when a new version is available.
|
||||
- Monitor a running ursula for nominal behaviour and period confirmations.
|
||||
- Hold enough ETH in the worker's ethereum wallet to pay for gas.
|
||||
|
||||
|
||||
..
|
||||
TODO: separate section on backups and data (#2285)
|
|
@ -1,46 +0,0 @@
|
|||
.. _running-a-node:
|
||||
|
||||
Stakers and Workers
|
||||
===================
|
||||
|
||||
NuCypher staking operations are divided into two roles - “Staker” and “Worker”.
|
||||
The Staker can be thought of as a fiduciary administrator that holds NU and collects rewards.
|
||||
The Worker is bonded to a Staker and performs work on behalf of the Staker.
|
||||
|
||||
Staker Overview
|
||||
----------------
|
||||
|
||||
A nucypher staker is a holder of NU and manager of one or more stakes. NU is an ERC-20 token that underpins the network. Stakes are initiated by locking NU into
|
||||
the *"Staking Escrow "* contract for a fixed duration of time. Staked NU earns two income streams: inflation
|
||||
rewards (NU) and policy fees (ETH). Staked NU gradually unlocks with each completed period (7 days),
|
||||
depending on *re-stake* and *wind-down* configuration options.
|
||||
|
||||
Active network participation (work) is delegated to a *Worker* node through *bonding*.
|
||||
There is a 1:1 relationship between the roles; One Staker to one Worker. A Staker controls a single Ethereum
|
||||
account and may have multiple substakes, but only ever has one Worker bonded at a time. To ensure the integrity of the network and its service quality,
|
||||
staked NU can be :ref:`slashed <slashing-protocol>` due to misbehaviour, deliberate or unintentional, by the
|
||||
corresponding worker.
|
||||
|
||||
Worker Overview
|
||||
----------------
|
||||
|
||||
*Worker* - (aka "Ursula") Active network participant who carries out threshold cryptography operations.
|
||||
|
||||
The Worker is the bonded delegate of a Staker and an active network node, performing work on behalf of a Staker.
|
||||
Workers must remain online to provide uninterrupted services on-demand, signalling their availability with
|
||||
a commitment transaction before the start of each period (every 7 days), which costs approximately 200k gas.
|
||||
|
||||
|
||||
Staker and Worker Delegation
|
||||
-----------------------------
|
||||
|
||||
There are several strategies for running and maintaining a stake:
|
||||
|
||||
* Delegate custody of NU and work to a third-party custodian (Staker Delegation).
|
||||
* Delegate work via a staking pool or `Node-as-a-Service provider <https://github.com/nucypher/validator-profiles>`_ (Worker Delegation).
|
||||
* Control the Staker yourself and run your own worker (Self Directed).
|
||||
|
||||
Here is a simple heuristic to help decide on a course of action:
|
||||
|
||||
.. image:: ../.static/img/running_a_node_decision.svg
|
||||
:target: ../.static/img/running_a_node_decision.svg
|
|
@ -1,536 +0,0 @@
|
|||
.. _ursula-config-guide:
|
||||
|
||||
================
|
||||
Running a Worker
|
||||
================
|
||||
|
||||
NuCypher staking operations are divided into two roles "Staker" and "Worker" - This Guide is for Workers.
|
||||
|
||||
Overview
|
||||
----------
|
||||
|
||||
Role in the Network
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The Worker is the bonded delegate of a Staker and an active network node. Each staking account
|
||||
or "Staker" is bonded to exactly one Worker. Workers must remain online to provide uninterrupted
|
||||
re-encryption services to network users on-demand and perform periodic automated transactions to
|
||||
signal continued commitment to availability.
|
||||
|
||||
|
||||
Core Components
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Worker nodes have three core components:
|
||||
|
||||
* Ethereum software wallet (keystore)
|
||||
* Local or hosted ethereum provider
|
||||
* Worker node; Local or cloud server
|
||||
|
||||
|
||||
Minimum System Requirements
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
* Debian/Ubuntu (Recommended)
|
||||
* 20GB storage
|
||||
* 4GB RAM
|
||||
* x86 architecture
|
||||
* Static IP address
|
||||
* Exposed TCP port 9151
|
||||
|
||||
Workers can be run on cloud infrastructure – for example,
|
||||
`Digital Ocean 4GB Basic Droplet <https://www.digitalocean.com/pricing/>`_ satisfies requirements listed above.
|
||||
|
||||
|
||||
1. Establish Ethereum Provider
|
||||
-------------------------------
|
||||
|
||||
Worker Ursula transactions can be broadcasted using either a local or remote ethereum node.
|
||||
|
||||
For general background information about choosing a node technology and operation,
|
||||
see https://web3py.readthedocs.io/en/stable/node.html.
|
||||
|
||||
.. note::
|
||||
|
||||
`Additional requirements <https://docs.ethhub.io/using-ethereum/running-an-ethereum-node/>`_
|
||||
are needed to run a local Ethereum node on the same system.
|
||||
|
||||
|
||||
2. Establish Worker Ethereum Account
|
||||
-------------------------------------
|
||||
|
||||
By default, all transaction and message signing requests are forwarded to the configured ethereum provider.
|
||||
When using a remote ethereum provider (e.g. Infura, Alchemy, other hosted node), a local transaction signer must
|
||||
be configured in addition to the broadcasting node. For workers this can be a software wallet, or clef.
|
||||
For more detailed information see :doc:`/references/signers`.
|
||||
|
||||
.. caution::
|
||||
|
||||
Stay safe handling ETH and NU:
|
||||
|
||||
- Workers **do not** need NU for any reason; **do not** keep NU on the worker's account.
|
||||
- Do not store large amounts of ETH on the worker; keep only enough to pay for gas fees.
|
||||
- Store the ethereum account password in a password manager when using a keystore.
|
||||
|
||||
Because worker nodes perform periodic automated transactions to signal continued commitment to providing service,
|
||||
The worker's ethereum account must remain unlocked while the node is running. While there are several types of accounts
|
||||
workers can use, a software based wallet is the easiest.
|
||||
|
||||
.. note::
|
||||
|
||||
To create a new ethereum software account using the ``geth`` CLI
|
||||
|
||||
.. code::
|
||||
|
||||
geth account new
|
||||
|
||||
- Never share your ethereum account password.
|
||||
- Do not forget your ethereum account password.
|
||||
- Secure your ethereum account password in a password manager.
|
||||
|
||||
|
||||
3. Run Worker
|
||||
-------------
|
||||
|
||||
.. important::
|
||||
|
||||
Before proceeding it is important to know that the worker must spend ETH to unlock staked NU.
|
||||
Periodic automated commitments are required to signal continued availability. Currently, Worker
|
||||
nodes must perform one commitment transaction every 7 days each costing ~200k gas.
|
||||
|
||||
The ``--max-gas-price`` parameter is optional and can be used to set the maximum commitment gas price you are
|
||||
willing to spend. Workers will automatically retry and replace any previous commitment attempts. Too low of a
|
||||
gas price may result in missed commitments.
|
||||
|
||||
|
||||
.. _run-ursula-with-docker:
|
||||
|
||||
|
||||
Run Worker with Docker (Recommended)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Setup Docker
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
#. Install `Docker <https://docs.docker.com/install/>`_
|
||||
#. (Optional) Follow these post install instructions: `https://docs.docker.com/install/linux/linux-postinstall/ <https://docs.docker.com/install/linux/linux-postinstall/>`_
|
||||
#. Get the latest nucypher image:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
docker pull nucypher/nucypher:latest
|
||||
|
||||
|
||||
Export Worker Environment Variables
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# Passwords used for both creation and unlocking
|
||||
export NUCYPHER_KEYSTORE_PASSWORD=<YOUR KEYSTORE_PASSWORD>
|
||||
export NUCYPHER_WORKER_ETH_PASSWORD=<YOUR WORKER ETH ACCOUNT PASSWORD>
|
||||
|
||||
Initialize a new Worker
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
docker run -it --rm \
|
||||
--name ursula \
|
||||
-v ~/.local/share/nucypher:/root/.local/share/nucypher \
|
||||
-v ~/.ethereum/:/root/.ethereum \
|
||||
-p 9151:9151 \
|
||||
-e NUCYPHER_KEYSTORE_PASSWORD \
|
||||
nucypher/nucypher:latest \
|
||||
nucypher ursula init \
|
||||
--signer keystore:///root/.ethereum/keystore \
|
||||
--eth-provider <L1 PROVIDER URI> \
|
||||
--network <L1 NETWORK NAME> \
|
||||
--payment-provider <L2 PROVIDER URI> \
|
||||
--payment-network <L2 NETWORK NAME> \
|
||||
--max-gas-price <GWEI>
|
||||
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<L1 PROVIDER URI>`` - The URI of a local or hosted ethereum node (infura/geth)
|
||||
* ``<L1 NETWORK NAME>`` - The name of a nucypher network (mainnet, ibex, or lynx)
|
||||
|
||||
* ``<L2 PROVIDER URI>`` - The URI of a local or hosted level-two node (infura/bor)
|
||||
* ``<L2 NETWORK NAME>`` - The name of a payment network (polygon or mumbai)
|
||||
|
||||
* ``<GWEI>`` - The maximum price of gas to spend on commitment transactions
|
||||
|
||||
|
||||
Launch the worker
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
docker run -d --rm \
|
||||
--name ursula \
|
||||
-v ~/.local/share/nucypher:/root/.local/share/nucypher \
|
||||
-v ~/.ethereum/:/root/.ethereum \
|
||||
-p 9151:9151 \
|
||||
-e NUCYPHER_KEYSTORE_PASSWORD \
|
||||
-e NUCYPHER_WORKER_ETH_PASSWORD \
|
||||
nucypher/nucypher:latest \
|
||||
nucypher ursula run \
|
||||
|
||||
|
||||
View worker logs
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# docker logs
|
||||
docker logs -f ursula
|
||||
|
||||
|
||||
Upgrading to a Newer Version
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When a new version is available, a docker-launched worker can be updated by
|
||||
stopping the worker, running docker pull, then restarting the worker.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
docker stop ursula
|
||||
docker pull nucypher/nucypher:latest
|
||||
docker run ...
|
||||
|
||||
|
||||
Run Worker with systemd (Alternate)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Instead of using docker, the nucypher worker can be run as a systemd service.
|
||||
|
||||
.. note::
|
||||
|
||||
Running a worker with systemd required a local installation of nucypher.
|
||||
See :doc:`/references/pip-installation`.
|
||||
|
||||
1. Install nucypher into a virtual environment.
|
||||
|
||||
.. code-block::
|
||||
|
||||
$(nucypher) pip install -U nucypher
|
||||
|
||||
|
||||
2. Configure the worker using the nucypher CLI:
|
||||
|
||||
.. code-block::
|
||||
|
||||
$(nucypher) nucypher ursula init \
|
||||
--eth-provider <L1 PROVIDER URI> \
|
||||
--network <L1 NETWORK NAME> \
|
||||
--payment-provider <L2 PROVIDER URI> \
|
||||
--payment-network <L2 NETWORK NAME> \
|
||||
--signer <SIGNER URI> \
|
||||
--max-gas-price <GWEI> \
|
||||
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<L1 PROVIDER URI>`` - The URI of a local or hosted ethereum node (infura/geth)
|
||||
* ``<L1 NETWORK NAME>`` - The name of a nucypher network (mainnet, ibex, or lynx)
|
||||
|
||||
* ``<L2 PROVIDER URI>`` - The URI of a local or hosted level-two node (infura/bor)
|
||||
* ``<L2 NETWORK NAME>`` - The name of a payment network (polygon or mumbai)
|
||||
|
||||
* ``<SIGNER URI>`` - The URI to an ethereum keystore or signer: `keystore:///root/.ethereum/keystore`
|
||||
* ``<GWEI>`` - The maximum price of gas to spend on commitment transactions
|
||||
|
||||
|
||||
The configuration settings will be stored in an ursula configuration file.
|
||||
|
||||
.. important::
|
||||
|
||||
The default configuration file is ``ursula.json``. If there is an existing default configuration file, a new
|
||||
Worker configuration file suffixed by the first 8 characters of the node's public key
|
||||
e.g. ``ursula-0216ad10.json``. Since this file is not the default, subsequent ``ursula`` CLI commands
|
||||
can use the ``--config-file <FILEPATH>`` option to specify the non-default filepath of the Worker
|
||||
configuration file. If there are multiple configuration files and ``--config-file <FILEPATH>`` is not specified,
|
||||
the CLI will prompt for an interactive selection of the configuration file to use.
|
||||
|
||||
|
||||
3. Use this template to create a file named ``ursula.service`` and place it in ``/etc/systemd/system/``.
|
||||
|
||||
.. code-block::
|
||||
|
||||
[Unit]
|
||||
Description="Ursula, a NuCypher Worker."
|
||||
|
||||
[Service]
|
||||
User=<YOUR USER>
|
||||
Type=simple
|
||||
Environment="NUCYPHER_WORKER_ETH_PASSWORD=<YOUR WORKER ADDRESS PASSWORD>"
|
||||
Environment="NUCYPHER_KEYSTORE_PASSWORD=<YOUR PASSWORD>"
|
||||
ExecStart=<VIRTUALENV PATH>/bin/nucypher ursula run
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<YOUR USER>`` - The host system's username to run the process with (best practice is to use a dedicated user)
|
||||
* ``<YOUR WORKER ADDRESS PASSWORD>`` - Worker's ETH account password
|
||||
* ``<YOUR PASSWORD>`` - Ursula's keystore password
|
||||
* ``<VIRTUALENV PATH>`` - The absolute path to the python virtual environment containing the ``nucypher`` executable
|
||||
|
||||
|
||||
4. Enable Ursula System Service
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ sudo systemctl enable ursula
|
||||
|
||||
|
||||
5. Run Ursula System Service
|
||||
|
||||
To start Ursula services using systemd
|
||||
|
||||
.. code-block::
|
||||
|
||||
$ sudo systemctl start ursula
|
||||
|
||||
|
||||
**Check Ursula service status**
|
||||
|
||||
.. code-block::
|
||||
|
||||
# Application Logs
|
||||
$ tail -f ~/.local/share/nucypher/nucypher.log
|
||||
|
||||
# Systemd status
|
||||
$ systemctl status ursula
|
||||
|
||||
# Systemd Logs
|
||||
$ journalctl -f -t ursula
|
||||
|
||||
|
||||
**To restart your node service**
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo systemctl restart ursula
|
||||
|
||||
|
||||
Run Worker Manually
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
1. Configure the Worker
|
||||
|
||||
If you'd like to use another own method of running the worker process in the background, or are
|
||||
using one of the testnets, here is how to run Ursula using the CLI directly.
|
||||
|
||||
First initialize a Worker configuration:
|
||||
|
||||
.. code-block::
|
||||
|
||||
$(nucypher) nucypher ursula init \
|
||||
--eth-provider <L1 PROVIDER URI> \
|
||||
--network <L1 NETWORK NAME> \
|
||||
--payment-provider <L2 PROVIDER URI> \
|
||||
--payment-network <L2 NETWORK NAME> \
|
||||
--signer <SIGNER URI> \
|
||||
--max-gas-price <GWEI> \
|
||||
|
||||
Replace the following values with your own:
|
||||
|
||||
* ``<L1 PROVIDER URI>`` - The URI of a local or hosted ethereum node (infura/geth)
|
||||
* ``<L1 NETWORK NAME>`` - The name of a nucypher network (mainnet, ibex, or lynx)
|
||||
|
||||
* ``<L2 PROVIDER URI>`` - The URI of a local or hosted level-two node (infura/bor)
|
||||
* ``<L2 NETWORK NAME>`` - The name of a payment network (polygon or mumbai)
|
||||
|
||||
* ``<SIGNER URI>`` - The URI to an ethereum keystore or signer: `keystore:///root/.ethereum/keystore`
|
||||
* ``<GWEI>`` - The maximum price of gas to spend on commitment transactions
|
||||
|
||||
The configuration settings will be stored in an Ursula configuration file.
|
||||
|
||||
.. important::
|
||||
|
||||
The default configuration file is ``ursula.json``. If there is an existing default configuration file, a new
|
||||
Worker configuration file suffixed by the first 8 characters of the node's public key
|
||||
e.g. ``ursula-0216ad10.json``. Since this file is not the default, subsequent ``ursula`` CLI commands
|
||||
can use the ``--config-file <FILEPATH>`` option to specify the non-default filepath of the Worker
|
||||
configuration file. If there are multiple configuration files and ``--config-file <FILEPATH>`` is not specified,
|
||||
the CLI will prompt for an interactive selection of the configuration file to use.
|
||||
|
||||
|
||||
2. Start the worker
|
||||
|
||||
.. code-block::
|
||||
|
||||
# Run Worker
|
||||
nucypher ursula run
|
||||
|
||||
|
||||
Update Worker Configuration
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
All worker configuration values can be modified using the `config` command. For non-default worker configuration file
|
||||
paths, use the ``--config-file <CONFIG PATH>`` parameter.
|
||||
|
||||
.. code::
|
||||
|
||||
#
|
||||
# Default configuration file path
|
||||
#
|
||||
|
||||
nucypher ursula config --<OPTION> <NEW VALUE>
|
||||
|
||||
# Update the max gas price setting
|
||||
nucypher ursula config --max-gas-price <GWEI>
|
||||
|
||||
# Change the Ethereum provider to use
|
||||
nucypher ursula config --eth-provider <ETH PROVIDER URI>
|
||||
|
||||
# Accept payments for service using the SubscriptionManager contract on polygon/mumbai
|
||||
nucypher ursula config --payment-method SubscriptionManager --payment-network mumbai
|
||||
|
||||
# View the current configuration
|
||||
nucypher ursula config
|
||||
|
||||
|
||||
#
|
||||
# Non-default configuration file path
|
||||
#
|
||||
|
||||
# View the current configuration of a non-default configuration file path
|
||||
nucypher ursula config --config-file <CONFIG PATH>
|
||||
|
||||
# Update the max gas price setting of a non-default configuration file path
|
||||
nucypher ursula config --config-file <CONFIG PATH> --eth-provider <ETH PROVIDER URI>
|
||||
|
||||
|
||||
.. important::
|
||||
|
||||
The worker must be restarted for new changes to take effect.
|
||||
|
||||
|
||||
4. Qualify Worker
|
||||
-----------------
|
||||
|
||||
Workers must be fully qualified (funded and bonded) in order to fully start. Workers
|
||||
that are launched before qualification will pause until they are have a balance greater than 0 ETH,
|
||||
and are bonded to a staking account. Once both of these requirements are met, the worker will automatically
|
||||
resume startup.
|
||||
|
||||
Waiting for qualification:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
...
|
||||
Authenticating Ursula
|
||||
Qualifying worker
|
||||
ⓘ Worker startup is paused. Waiting for bonding and funding ...
|
||||
ⓘ Worker startup is paused. Waiting for bonding and funding ...
|
||||
ⓘ Worker startup is paused. Waiting for bonding and funding ...
|
||||
|
||||
Resuming startup after funding and bonding:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
...
|
||||
ⓘ Worker startup is paused. Waiting for bonding and funding ...
|
||||
✓ Worker is bonded to 0x37f320567b6C4dF121302EaED8A9B7029Fe09Deb
|
||||
✓ Worker is funded with 0.01 ETH
|
||||
✓ External IP matches configuration
|
||||
Starting services
|
||||
✓ Database Pruning
|
||||
✓ Work Tracking
|
||||
✓ Rest Server https://1.2.3.4:9151
|
||||
Working ~ Keep Ursula Online!
|
||||
|
||||
.. _fund-worker-account:
|
||||
|
||||
|
||||
5. Monitor Worker
|
||||
------------------
|
||||
|
||||
Ursula's Logs
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
A reliable way to check the status of a worker node is to view the logs.
|
||||
|
||||
View logs for a docker-launched Ursula:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
docker logs -f ursula
|
||||
|
||||
View logs for a CLI-launched or systemd Ursula:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# Application Logs
|
||||
tail -f ~/.local/share/nucypher/nucypher.log
|
||||
|
||||
# Systemd Logs
|
||||
journalctl -f -t ursula
|
||||
|
||||
|
||||
Node Status Webpage
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Once Ursula is running, you can view its public status page at ``https://<node_ip>:9151/status``.
|
||||
|
||||
.. image:: ../.static/img/Annotated-Ursula-Status-Webpage-v1.png
|
||||
:target: ../.static/img/Annotated-Ursula-Status-Webpage-v1.png
|
||||
|
||||
- *Nickname Icon* - A visual representation of the node's nickname words and colors
|
||||
- *Staker Nickname* - A nickname/codename for the node derived from the staker address
|
||||
- *Staker Address* - The Staker address this node is bonded to
|
||||
- *Client Version* - The version of nucypher this node is running
|
||||
- *Network Name* - The nucypher network this node is running on (mainnet, lynx, or ibex).
|
||||
- *Peer Count* - The total number of peers this node has discovered.
|
||||
- *Fleet State Checksum* - A checksum representing all currently known peers
|
||||
- *Fleet State Icon* - A visual representation of the fleet state's checksum word and color
|
||||
- *Fleet State History* - The most recent historical fleet states known by this node, sorted from most recent to oldest
|
||||
- *Peer Nickname* - The nickname of a peer derived from it's staker address
|
||||
- *Peer Fleet State* - The current fleet state of a peer node
|
||||
- *Peer Staker Address* - The staker address of a peer
|
||||
- *Verified Nodes* - The collection of nodes that have been and validated by this node (valid metadata and staking status)
|
||||
- *Unverified Nodes* - The collection of nodes that have not been contacted or validated by this node
|
||||
|
||||
|
||||
Network Status Webpage
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Your node will eventually be listed on the `Status Monitor Page <https://status.nucypher.network>`_ (this can take some time).
|
||||
|
||||
|
||||
Prometheus Endpoint
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Ursula can optionally provide a `Prometheus <https://prometheus.io>`_ metrics endpoint to be used for as a data source
|
||||
for real-time monitoring. For docker users, the Prometheus client library is installed by default.
|
||||
|
||||
For pip installations, The Prometheus client library is **not** included by default and must be explicitly installed:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
(nucypher)$ pip install nucypher[ursula]
|
||||
|
||||
The metrics endpoint is disabled by default but can be enabled by providing the following
|
||||
parameters to the ``nucypher ursula run`` command:
|
||||
|
||||
* ``--prometheus`` - a boolean flag to enable the prometheus endpoint
|
||||
* ``--metrics-port <PORT>`` - the HTTP port to run the prometheus endpoint on
|
||||
|
||||
The corresponding endpoint, ``http://<node_ip>:<METRICS PORT>/metrics``, can be used as a Prometheus data source for
|
||||
monitoring including the creation of alert criteria.
|
||||
|
||||
By default, metrics will be collected every 90 seconds but this can be modified using the ``--metrics-interval`` option.
|
||||
Collection of metrics will increase the number of RPC requests made to your provider endpoint; increasing the frequency
|
||||
of metrics collection will further increase this number.
|
||||
|
||||
During the Technical Contributor Phase of our testnet, *P2P Validator*
|
||||
contributed a `self-hosted node monitoring suite <https://economy.p2p.org/nucypher-worker-node-monitoring-suite/amp/>`_
|
||||
that uses a Grafana dashboard to visualize and monitor the metrics produced by the prometheus endpoint.
|
||||
|
||||
.. image:: ../.static/img/p2p_validator_dashboard.png
|
||||
:target: ../.static/img/p2p_validator_dashboard.png
|
|
@ -1,282 +0,0 @@
|
|||
.. _staking-guide:
|
||||
|
||||
Stake Initialization
|
||||
====================
|
||||
|
||||
NuCypher staking operations are divided into two roles "Staker" and "Worker" - This Guide is for Stakers.
|
||||
|
||||
|
||||
Staking Requirements
|
||||
---------------------
|
||||
|
||||
The staking CLI itself is lightweight and can be run on commodity hardware. While there are no
|
||||
specific minimum system constraints, there are some basic requirements for stakers:
|
||||
|
||||
#. Hosted or Remote Ethereum Node (Infura, Geth, etc.)
|
||||
#. Hardware or Software Wallet (Trezor, Ledger, Keyfile)
|
||||
#. At least 15,000 NU
|
||||
#. Small amount of ether to pay for transaction gas
|
||||
|
||||
Using a hardware wallet is *highly* recommended. They are ideal for stakers since they hold NU and
|
||||
temporary access to private keys is required during stake management, while providing a higher standard
|
||||
of security than software wallets or keyfiles.
|
||||
|
||||
|
||||
Staking Procedure
|
||||
-----------------
|
||||
|
||||
#. Obtain and secure NU
|
||||
#. Install ``nucypher`` on Staker's system (pip :doc:`/references/pip-installation` and docker are supported)
|
||||
#. Configure nucypher CLI for staking (`3. Configure nucypher for staking`_)
|
||||
#. Bond a Worker to your Staker using the worker's ethereum address (see `6. Bond a worker`_)
|
||||
#. Manage active stakes (:doc:`stake_management`)
|
||||
|
||||
.. caution::
|
||||
|
||||
Once NU is locked in the staking escrow contract, a worker node must be run to unlock it. Worker's make
|
||||
periodic automated commitments (every 7 days) which cost at least ~200k gas, depending on how many sub-stakes
|
||||
you have. Be sure to consider this operational cost when locking NU.
|
||||
|
||||
.. note::
|
||||
|
||||
If you are running an Ibex testnet node, testnet tokens can be obtained by joining the
|
||||
`Discord server <https://discord.gg/7rmXa3S>`_ and typing ``.getfunded <YOUR_STAKER_ETH_ADDRESS>``
|
||||
in the #testnet-faucet channel.
|
||||
|
||||
|
||||
1. Establish an Ethereum Provider
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Staking transactions can be broadcasted using either a local or remote ethereum node.
|
||||
|
||||
For general background information about choosing a node technology and operation,
|
||||
see https://web3py.readthedocs.io/en/stable/node.html.
|
||||
|
||||
|
||||
2. Select Transaction Signer
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
By default, all transaction and message signing requests are forwarded to the configured ethereum provider.
|
||||
When using an external ethereum provider (e.g. Infura, Alchemy, other hosted/remote node), a local transaction signer must
|
||||
be configured in addition to the broadcasting node. This can be a hardware wallet, software wallet, or clef.
|
||||
|
||||
For more detailed information see :doc:`/references/signers`
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher <COMMAND> <ACTION> --signer <SIGNER_URI>
|
||||
|
||||
.. note::
|
||||
|
||||
For hardware wallets, only trezor is currently supported by the CLI directly.
|
||||
Ledger functionality can be achieved through clef.
|
||||
|
||||
|
||||
Trezor Signer (Recommended)
|
||||
++++++++++++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher <COMMAND> <ACTION> --signer trezor
|
||||
|
||||
Keystore File Signer
|
||||
++++++++++++++++++++
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher <COMMAND> <ACTION> --signer keystore://<ABSOLUTE PATH TO KEYFILE>
|
||||
|
||||
.. danger::
|
||||
|
||||
The Keystore signer is not safe to use for mainnet :ref:`Staker operations <staking-guide>`
|
||||
(An exception can be made for testnets). For staking operations use a hardware wallet.
|
||||
|
||||
Clef Signer
|
||||
+++++++++++
|
||||
|
||||
Clef can be used as an external transaction signer with nucypher and supports both hardware (ledger & trezor)
|
||||
and software wallets. See :ref:`signing-with-clef` for setting up Clef. By default, all requests to the clef
|
||||
signer require manual confirmation.
|
||||
|
||||
This includes not only transactions but also more innocuous requests such as listing the accounts
|
||||
that the signer is handling. This means, for example, that a command like ``nucypher stake accounts`` will first ask
|
||||
for user confirmation in the clef CLI before showing the Staker accounts. You can automate this confirmation by
|
||||
using :ref:`clef-rules`.
|
||||
|
||||
.. note::
|
||||
|
||||
The default location for the clef IPC file is ``/home/<username>/.clef/clef.ipc``
|
||||
(on MacOS, ``/Users/<username>/Library/Signer/clef.ipc``)
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ nucypher <COMMAND> <ACTION> --signer clef://<CLEF IPC PATH> --hw-wallet
|
||||
|
||||
# Create a new stakeholder with clef as the default signer
|
||||
$ nucypher stake init-stakeholder --signer clef:///home/<username>/.clef/clef.ipc ...
|
||||
|
||||
# Update an existing configuration with clef as the default signer
|
||||
$ nucypher stake config --signer clef:///home/<username>/.clef/clef.ipc # Set clef as the default signer
|
||||
|
||||
# Create a new stake using inline signer and provider values
|
||||
$ nucypher stake create --signer clef:///home/<username>/.clef/clef.ipc --eth-provider ~/.ethereum/geth.ipc
|
||||
|
||||
|
||||
3. Configure nucypher for staking
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Before initiating a stake, a setup step is required to configure nucypher for staking.
|
||||
This will create a JSON configuration file (`~/.local/share/nucypher/stakeholder.json`) containing editable
|
||||
configuration values. No new keys or secrets are created in this step, it is just for configuration.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
(nucypher)$ nucypher stake init-stakeholder --signer <SIGNER URI> --eth-provider <PROVIDER>
|
||||
|
||||
.. note:: If you are using NuCypher's Ibex testnet, passing the network name is required ``--network ibex``.
|
||||
|
||||
|
||||
4. Create a new stake
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once you have configured nucypher for staking, you can proceed with stake initiation.
|
||||
This operation will transfer NU to nucypher's staking escrow contract, locking it for
|
||||
the commitment period.
|
||||
|
||||
|
||||
.. caution::
|
||||
|
||||
Before proceeding it is important to know that the worker must spend ETH to unlock staked NU.
|
||||
Once tokens are locked, the only way for them to become unlocked is by running a bonded Worker node.
|
||||
|
||||
Currently, Worker nodes must perform one automated transaction every 7 days costing ~200k gas.
|
||||
|
||||
|
||||
.. code:: bash
|
||||
|
||||
|
||||
(nucypher)$ nucypher stake create
|
||||
Enter ethereum account password (0xB548378f13e9A2C7bEf66B890B46F2eD6Ed87fCf):
|
||||
Enter stake value in NU (15000 NU - 45000 NU) [45000]: 45000
|
||||
Enter stake duration (4 - 62863) [52]: 4
|
||||
|
||||
══════════════════════════════ STAGED STAKE ══════════════════════════════
|
||||
|
||||
Staking address: 0xB548378f13e9A2C7bEf66B890B46F2eD6Ed87fCf
|
||||
~ Chain -> ID # <CHAIN_ID>
|
||||
~ Value -> 45000 NU (45000000000000000000000 NuNits)
|
||||
~ Duration -> 28 Days (4 Periods)
|
||||
~ Enactment -> Mar 24 2021 17:00 PDT (period #2673)
|
||||
~ Expiration -> Apr 21 2021 17:00 PDT (period #2677)
|
||||
|
||||
═════════════════════════════════════════════════════════════════════════
|
||||
|
||||
* Ursula Node Operator Notice *
|
||||
-------------------------------
|
||||
|
||||
By agreeing to stake 45000 NU (45000000000000000000000 NuNits):
|
||||
|
||||
- Staked tokens will be locked for the stake duration.
|
||||
|
||||
- You are obligated to maintain a networked and available Ursula-Worker node
|
||||
bonded to the staker address 0xB548378f13e9A2C7bEf66B890B46F2eD6Ed87fCf for the duration
|
||||
of the stake(s) (4 periods).
|
||||
|
||||
- Agree to allow NuCypher network users to carry out uninterrupted re-encryption
|
||||
work orders at-will without interference.
|
||||
|
||||
Failure to keep your node online or fulfill re-encryption work orders will result
|
||||
in loss of staked NU as described in the NuCypher slashing protocol:
|
||||
https://docs.nucypher.com/en/latest/architecture/slashing.html.
|
||||
|
||||
Keeping your Ursula node online during the staking period and successfully
|
||||
producing correct re-encryption work orders will result in rewards
|
||||
paid out in ethers retro-actively and on-demand.
|
||||
|
||||
Accept ursula node operator obligation? [y/N]: y
|
||||
Publish staged stake to the blockchain? [y/N]: y
|
||||
Broadcasting APPROVEANDCALL Transaction (0.0821491982 ETH @ 261.575 gwei)
|
||||
TXHASH 0xf4fc7d6b674c83e4fd99fef64e194b7455fc4438a639e2973b09f09f3493ad10
|
||||
Waiting 600 seconds for receipt
|
||||
|
||||
Stake initialization transaction was successful.
|
||||
...
|
||||
|
||||
StakingEscrow address: 0x40Ca356d8180Ddc21C82263F9EbCeaAc6Cad7250
|
||||
|
||||
View your stakes by running 'nucypher stake list'
|
||||
or set your Ursula worker node address by running 'nucypher stake bond-worker'.
|
||||
|
||||
See https://docs.nucypher.com/en/latest/staking/running_a_worker.html
|
||||
|
||||
|
||||
You will need to confirm two transactions here.
|
||||
|
||||
|
||||
5. List existing stakes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once you have created one or more stakes, you can view all active stakes for connected wallets:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
(nucypher)$ nucypher stake list
|
||||
|
||||
Network <NETWORK_NAME> ═══════════════════════════════
|
||||
Staker 0xB548378f13e9A2C7bEf66B890B46F2eD6Ed87fCf ════
|
||||
Worker not bonded ════
|
||||
-------------- -----------------------------------
|
||||
Status Never Made a Commitment (New Stake)
|
||||
Restaking Yes
|
||||
Winding Down No
|
||||
Snapshots Yes
|
||||
Unclaimed Fees 0 ETH
|
||||
Min fee rate 50 gwei
|
||||
-------------- -----------------------------------
|
||||
╒═══════╤══════════╤═════════════╤═════════════╤═══════════════╤════════╤═══════════╕
|
||||
│ Slot │ Value │ Remaining │ Enactment │ Termination │ Boost │ Status │
|
||||
╞═══════╪══════════╪═════════════╪═════════════╪═══════════════╪════════╪═══════════╡
|
||||
│ 0 │ 45000 NU │ 5 │ Mar 24 2021 │ Apr 21 2021 │ 1.10x │ DIVISIBLE │
|
||||
╘═══════╧══════════╧═════════════╧═════════════╧═══════════════╧════════╧═══════════╛
|
||||
|
||||
.. caution::
|
||||
If the Worker in the list is shown as ``NO_WORKER_BONDED``,
|
||||
it means that you haven't yet bonded a Worker node to your Staker.
|
||||
Your staking account will be highlighted in red.
|
||||
|
||||
|
||||
.. _bond-worker:
|
||||
|
||||
6. Bond a Worker
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
After initiating a stake, the staker must delegate access to a work address through *bonding*.
|
||||
There is a 1:1 relationship between the roles: A Staker may have multiple substakes but only ever has one Worker at a time.
|
||||
|
||||
.. important:: The Worker cannot be changed for a minimum of 2 periods (14 days) once bonded.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
(nucypher)$ nucypher stake bond-worker
|
||||
Enter ethereum account password (0xB548378f13e9A2C7bEf66B890B46F2eD6Ed87fCf):
|
||||
Enter worker address: 0x6cf78fE4bD2a6573046d17f72f4C20462124Aa10
|
||||
Commit to bonding worker 0x6cf78fE4bD2a6573046d17f72f4C20462124Aa10 to staker 0xB548378f13e9A2C7bEf66B890B46F2eD6Ed87fCf for a minimum of 2 periods? [y/N]: y
|
||||
...
|
||||
This worker can be replaced or detached after period #2674 (2021-04-01 00:00:00+00:00)
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
The worker's address must be EIP-55 checksum valid, however, geth shows addresses in the lowercase
|
||||
normalized format. You can convert the normalized address to checksum format on etherscan or using the geth console:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ geth attach ~/.ethereum/geth.ipc
|
||||
> eth.accounts
|
||||
["0x63e478bc474ebb6c31568ff131ccd95c24bfd552", "0x270b3f8af5ba2b79ea3bd6a6efc7ecab056d3e3f", "0x45d33d1ff0a7e696556f36de697e5c92c2cccfae"]
|
||||
> web3.toChecksumAddress(eth.accounts[2])
|
||||
"0x45D33d1Ff0A7E696556f36DE697E5C92C2CCcFaE"
|
||||
|
||||
|
||||
After this step, you're finished with the Staker, and you can proceed to :ref:`ursula-config-guide`.
|
|
@ -1,115 +0,0 @@
|
|||
.. _stake-management:
|
||||
|
||||
Stake Management
|
||||
----------------
|
||||
|
||||
Several administrative operations can be performed on active stakes:
|
||||
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
| Action | Description |
|
||||
+======================+===============================================================================+
|
||||
| ``events`` | View blockchain events associated with a staker |
|
||||
+----------------------+-------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Query Staker Blockchain Events
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
As the Staker and its associated Worker interact with the StakingEscrow smart contract, various on-chain events
|
||||
are emitted. These events are outlined :doc:`here </contracts_api/main/StakingEscrow>`, and are made accessible via the
|
||||
``nucypher stake events`` CLI command.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
This command is limited to events from the StakingEscrow smart contract and the Staker address associated with
|
||||
the Staker's configuration file. For generic and network-wide event queries,
|
||||
see :doc:`/references/network_events`.
|
||||
|
||||
|
||||
For simple Staker accounting, events such as ``CommitmentMade``, ``Withdrawn``, and ``Minted`` can
|
||||
be used. The output of each can be correlated using the period number.
|
||||
|
||||
By default, the query is performed from block number 0 i.e. from the genesis of the blockchain. This can be modified
|
||||
using the ``--from-block`` option.
|
||||
|
||||
|
||||
For a full list of CLI options, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher stake events --help
|
||||
|
||||
|
||||
For example, to view all of the staking rewards received by the Staker thus far, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher stake events --staking-address <STAKER ADDRESS> --eth-provider <ETH PROVIDER URI> --event-name Minted
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
Minted:
|
||||
- (EventRecord) staker: <STAKER ADDRESS>, period: 18551, value: 1234567890123456789012, block_number: 11070103
|
||||
- (EventRecord) staker: <STAKER ADDRESS>, period: 18552, value: 1234567890123456789012, block_number: 11076964
|
||||
...
|
||||
|
||||
``1234567890123456789012`` is in NuNits and equates to approximately 1234.57 NU (1 NU = 10\ :sup:`18` NuNits).
|
||||
|
||||
|
||||
To view staking rewards received by the Staker from block number 11070000 to block number 11916688, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher stake events --staking-address <STAKER ADDRESS> --eth-provider <ETH PROVIDER URI> --event-name Minted --from-block 11070000 --to-block 11916688
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 11070000 to 11916688
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
Minted:
|
||||
- (EventRecord) staker: <STAKER ADDRESS>, period: 18551, value: 1234567890123456789012, block_number: 11070103
|
||||
- (EventRecord) staker: <STAKER ADDRESS>, period: 18552, value: 1234567890123456789012, block_number: 11076964
|
||||
...
|
||||
|
||||
|
||||
.. important::
|
||||
|
||||
Depending on the Ethereum provider being used, the number of results a query is allowed to return may be limited.
|
||||
For example, on Infura this limit is currently 10,000.
|
||||
|
||||
|
||||
To aid with management of this information, instead of outputting the information to the CLI, the event data can
|
||||
be written to a CSV file using either of the following command-line options:
|
||||
|
||||
* ``--csv`` - flag to write event information to a CSV file in the current directory with a default filename
|
||||
* ``--csv-file <FILEPATH>`` - write event information to a CSV file at the provided filepath
|
||||
|
||||
For example,
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher stake events --staking-address <STAKER ADDRESS> --eth-provider <ETH PROVIDER URI> --event-name Minted --csv
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
StakingEscrow::Minted events written to StakingEscrow_Minted_2021-02-09_15-23-25.csv
|
||||
|
||||
|
||||
.. code::
|
||||
|
||||
$ nucypher stake events --staking-address <STAKER ADDRESS> --eth-provider <ETH PROVIDER URI> --event-name Minted --csv-file ~/Minted_Events.csv
|
||||
|
||||
Reading Latest Chaindata...
|
||||
Retrieving events from block 0 to latest
|
||||
|
||||
--------- StakingEscrow Events ---------
|
||||
|
||||
StakingEscrow::Minted events written to /<HOME DIRECTORY>/Minted_Events.csv
|
|
@ -1,40 +0,0 @@
|
|||
.. _ibex-testnet:
|
||||
|
||||
=============
|
||||
Ibex Testnet
|
||||
=============
|
||||
|
||||
NuCypher provides a public testnet running on the Ethereum Rinkeby testnet meant for stakers and node operators to learn how to
|
||||
create and manage stakes, set up a node, as well as for internal development purposes.
|
||||
|
||||
.. attention::
|
||||
|
||||
Ibex Testnet NU can be obtained by joining the `Discord Server <https://discord.gg/7rmXa3S>`_ and typing
|
||||
``.getfunded <YOUR_STAKER_ETH_ADDRESS>`` in the #testnet-faucet channel. Some ETH is also provided via
|
||||
the ``.getfunded`` command, but additional Rinkeby ETH can be obtained from the `Rinkeby faucet <https://faucet.rinkeby.io/>`_.
|
||||
|
||||
|
||||
Stakers and Workers can be configured to use the Ibex testnet using the command line:
|
||||
|
||||
.. code::
|
||||
|
||||
# While creating a new staker
|
||||
$ nucypher stake init-stakeholder --network ibex --eth-provider <RINKEBY PROVIDER URI>
|
||||
|
||||
# Update an existing staker
|
||||
$ nucypher stake config --network ibex --eth-provider <RINKEBY PROVIDER URI>
|
||||
|
||||
# While creating a new worker
|
||||
$ nucypher ursula init --network ibex --eth-provider <RINKEBY PROVIDER URI>
|
||||
|
||||
# Update an existing worker
|
||||
$ nucypher ursula config --network ibex --eth-provider <RINKEBY PROVIDER URI>
|
||||
|
||||
|
||||
Deployments
|
||||
-----------
|
||||
|
||||
* `NuCypherToken 0x78D591D90a4a768B9D2790deA465D472b6Fe0f18 <https://rinkeby.etherscan.io/address/0x78D591D90a4a768B9D2790deA465D472b6Fe0f18>`_
|
||||
* `StakingEscrow (Dispatcher) 0x6A6F917a3FF3d33d26BB4743140F205486cD6B4B <https://rinkeby.etherscan.io/address/0x6A6F917a3FF3d33d26BB4743140F205486cD6B4B>`_
|
||||
* `PolicyManager (Dispatcher) 0x4db603E42E6798Ac534853AA2c0fF5618cb0ebE5 <https://rinkeby.etherscan.io/address/0x4db603E42E6798Ac534853AA2c0fF5618cb0ebE5>`_
|
||||
* `Adjudicator (Dispatcher) 0xE1d0C09b94ba522BCC1b73922dc1f0b6ca9bEA26 <https://rinkeby.etherscan.io/address/0xE1d0C09b94ba522BCC1b73922dc1f0b6ca9bEA26>`_
|
|
@ -15,4 +15,4 @@ that characterise its nature. The full list of *Labels* are available `here <htt
|
|||
|
||||
Contact Us
|
||||
----------
|
||||
You can join our `Discord <http://discord.nucypher.com>`_ to chat with us.
|
||||
You can join our `Discord <https://discord.gg/Threshold>`_ to chat with us.
|
||||
|
|
|
@ -24,19 +24,19 @@ Q: What is the network name for NuCypher's testnet?
|
|||
NuCypher currently has two testnets available, each of them with different goals:
|
||||
|
||||
* ``lynx``: Public Long-Term Support testnet, intended as a stable playground for network users (e.g., Alices wishing to create sharing policies). Running on Ethereum Goerli testnet.
|
||||
* ``ibex``: Public testnet, intended as a playground for stakers and node operators (e.g., learning how to create and manage stakes, setting up a node), as well as for internal development purposes. Running on Ethereun Rinkeby testnet.
|
||||
* ``ibex``: Public testnet, intended as a playground for node operators (e.g., learning how to set up a PRE node etc.), as well as for internal development purposes. Running on Ethereun Rinkeby testnet.
|
||||
|
||||
|
||||
Using the Network
|
||||
-----------------
|
||||
Using the PRE Application on Threshold Network
|
||||
----------------------------------------------
|
||||
|
||||
*These are questions related to how the NuCypher network works.*
|
||||
*These are questions related to how the PRE Application on Threshold Network works.*
|
||||
|
||||
Q: How do I know if NuCypher is a good fit for my use case?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Q: How do I know if the PRE Application is a good fit for my use case?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A centralized approach to access control means users are forced to trust the system(s) with the plaintext version of
|
||||
their private data, and usually are given little insight into who exactly they are trusting. NuCypher’s decentralized
|
||||
their private data, and usually are given little insight into who exactly they are trusting. The PRE Application’s decentralized
|
||||
access control system offers developers, and their users, a departure from this opaque and trust-dependent paradigm.
|
||||
When integrated, `nucypher` enables end-to-end encrypted data sharing workflows within applications – but
|
||||
crucially, without sacrificing scalability, redundancy or performance – and applicable to data payloads of
|
||||
|
@ -44,53 +44,30 @@ any form, size, structure, sensitivity or production cadence. Users enjoy the sa
|
|||
currently take for granted, but are **not** obliged to trust the developers of the application or
|
||||
third-party access control services (e.g. centralized servers or key management systems) with their data.
|
||||
|
||||
Q: How is NuCypher different from more traditional public key infrastructure (PKI)?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Q: How is PRE different from more traditional public key infrastructure (PKI)?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For an in-depth analysis of this topic, see our blog post entitled "`Three things that NuCypher's "Ursula" can do that vanilla public-key cryptography can't <https://blog.nucypher.com/why-use-nucyphers-ursula-instead-of-traditional-public-key-cryptography/>`_".
|
||||
|
||||
Q: How much trust do we place in Ursula, the proxy?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Ursulas are “semi-trusted” in the sense that Alice must trust Ursula to revoke a policy once it expires or if instructed to do so (by Alice). Alice and Bob also trust Ursula to be responsive and perform the re-encryption correctly so that Bob can access the data. Importantly, Ursulas are not trusted with access to any underlying plaintext.
|
||||
Ursulas are “semi-trusted” in the sense that Alice must trust Ursula to revoke a policy once it expires or if instructed to do so (by Alice). Alice and Bob also trust Ursula to be responsive and perform the re-encryption correctly so that Bob can access the data.
|
||||
Importantly, Ursulas are not trusted with access to any underlying plaintext or private keys.
|
||||
|
||||
Q: How do we verify that Ursula has performed the re-encryption correctly?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Every time an Ursula produces a re-encryption, she computes a zero-knowledge proof that proves that the re-encryption she just performed is correct, without disclosing any kind of secret information. This correctness proof is publicly verifiable, so in the event someone detects incorrect re-encryptions coming from an Ursula, these faulty proofs can be sent to a smart contract that will slash the stake associated with that Ursula. However, in a normal scenario, with Ursula working correctly, there’s no need for correctness proofs to be submitted on-chain.
|
||||
Every time an Ursula produces a re-encryption, she computes a zero-knowledge proof that proves that the re-encryption she just performed is correct, without disclosing any kind of secret information. This correctness proof is publicly verifiable, so in the event
|
||||
someone detects incorrect re-encryptions coming from an Ursula, these faulty proofs can be sent to a smart contract that will slash the stake
|
||||
associated with that Ursula. However, in a normal scenario, with Ursula working correctly, there’s no need for correctness proofs to be
|
||||
submitted on-chain.
|
||||
|
||||
Q: How much trust do we place in Enrico?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Enrico is often (not always!) controlled by Alice. Enrico must be trusted to perform the encryption correctly and to not disclose the secret key. However, these things are out of our (cryptographic) control.
|
||||
Additionally, Alice can decrypt (and thus read) anything encrypted by Enrico.
|
||||
|
||||
Q: Who is the Staker in this narrative? Is it Alice or Ursula?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Staker can be thought of as a fiduciary administrator that holds NU and collects rewards.
|
||||
Ursula performs work on behalf of the Staker: recall that Ursula is only “valid” (i.e. will be selected for work and able to earn inflation rewards) if she’s bonded to a Staker.
|
||||
|
||||
Q: Does Alice or Bob need NU to use the network? Who pays Ursula? How is it done?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Neither Alice nor Bob need NU to use the network - Stakers require NU to run Ursulas on the network. However, Alice pays Ursulas for re-encryptions via an ETH deposit to the PolicyManager contract at the point of granting access to Bob. Payment models are an area of active research for the NuCypher protocol, including the prospect of Bob independently paying in ETH for all or some component of the work performed by Ursula.
|
||||
|
||||
Q: How much does Alice pay?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Alice provides an upfront deposit that covers the entirety of the sharing policy's duration (in periods), for all the Ursulas required to service the policy. Currently, Ursulas may choose a discretionary payment rate per period, which Alice discovers on an Ursula-by-Ursula basis by querying public network contracts. In the early stages of the network, both Alice and Ursula must settle on a rate which falls within a fixed, universal range, enforced by the PolicyManager contract.
|
||||
|
||||
Q: What currency does Ursula stake in (assuming Ursula is also the Staker)?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Ursula stakes in NU, receives policy fees in ETH, and receives inflation rewards in NU.
|
||||
|
||||
Q: Why do you have a mix of NU and ETH?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
It’s much more convenient for Alice to simply carry ETH. If she has to acquire NU also, it sets a much higher barrier to entry.
|
||||
Additionally, since NU is an ERC20 token, using it for payment instead of ETH offers no advantages.
|
||||
Enrico is often (not always!) controlled by Alice. Enrico must be trusted to perform the encryption correctly and to not disclose the secret key.
|
||||
However, these things are out of our (cryptographic) control. Additionally, Alice can decrypt (and thus read) anything encrypted by Enrico.
|
||||
|
||||
Q: Where are Bobs’ requests handled?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -112,53 +89,35 @@ sets of keys separate.
|
|||
Q: How can I get help integrating nucypher into my application?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
See :doc:`/application_development/getting_started`. To chat directly with our team, please join our `Discord <http://discord.nucypher.com>`_.
|
||||
See :doc:`/application_development/getting_started`. To chat directly with our team, please join our `Discord <https://discord.gg/Threshold>`_.
|
||||
|
||||
Q: How do I integrate nucypher if my application is not written in Python?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Nucypher also provides REST-like HTTP endpoints for working with characters. See :ref:`character-control-guide`.
|
||||
Nucypher also provides web integration. See :ref:`web-development`.
|
||||
|
||||
|
||||
Running a Node
|
||||
--------------
|
||||
|
||||
*These are questions related to running a node on the NuCypher network.*
|
||||
*These are questions related to running a PRE node on the Threshold Network.*
|
||||
|
||||
Q: What kind of token is NU?
|
||||
Q: What kind of token is T?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
NU is an implementation of the ERC20 standard deployed onto the Ethereum blockchain.
|
||||
T is an implementation of the ERC20 standard deployed onto the Ethereum blockchain.
|
||||
|
||||
Q: What are the two streams of income Ursula can receive?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Inflation Rewards (NU) and Policy Fees (ETH).
|
||||
|
||||
Q: How are Policy Fees (ETH) determined?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The amount of fees a staker can earn in a given period is determined by multiple factors,
|
||||
including (1) the minimum fee rate set by the staker,
|
||||
(2) the number of active policies issued by users of the network to that staker,
|
||||
and (3) whether the staker has previously committed to being available for that period.
|
||||
|
||||
Q: How many Ursulas per period collect Inflation rewards (NU)?
|
||||
Q: How many Ursulas per period collect Inflation rewards (T)?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Every Ursula that is “online” and “available” will receive a cut based on the size of their stake proportional to the overall NU staked in the network and augmented by a time coefficient based on their remaining stake duration.
|
||||
Every Ursula that is “online” and “available” will receive a cut based on the
|
||||
size of their stake proportional to the overall T staked in the network.
|
||||
|
||||
Q: How/Where can I acquire NU tokens?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Q: What are the recommended specifications for running a PRE Application node?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The initial distribution of NU was done via the "*WorkLock*" mechanism developed by NuCypher.
|
||||
|
||||
Participation in WorkLock is now closed, but since NU is an ERC-20 token, it can be purchased through exchanges.
|
||||
|
||||
Q: What are the recommended specifications for running a nucypher node?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
See :ref:`ursula-config-guide`.
|
||||
See :ref:`node-requirements`.
|
||||
|
||||
Q: How do I set up a network node?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -175,17 +134,6 @@ Q: How computationally expensive is performing re-encryptions likely to be?
|
|||
|
||||
A re-encryption operation is very lightweight (in the order of milliseconds) and is comparable to computing an ECDSA signature.
|
||||
|
||||
Q: Can my Staker and Worker address be the same?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Technically, yes, but it is not recommended. The accounts have different security considerations - the staker address
|
||||
is high-value and can be a hardware wallet (with NU and ETH) that performs stake management while the worker
|
||||
address is low-value and needs to remain unlocked while running (software wallet with ETH) since it
|
||||
is used by an Ursula node.
|
||||
|
||||
You should stake with one address and set the worker to be a different address. Subsequently, you can bond
|
||||
the worker address to the stake.
|
||||
|
||||
Q: Where is my Ursula config path?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -223,18 +171,6 @@ This is **ONLY** a heuristic to ensure that your node is running correctly, it d
|
|||
#. Ensure that your node uses the correct IP address and can be accessed via port 9151 from an outside
|
||||
connection eg. cell phone, other computer etc. by navigating to: ``https://<node_ip>:9151/status``
|
||||
|
||||
#. Ensure that your worker is bonded with your staker - ``nucypher stake list`` and check that
|
||||
*Worker* is not ``0x0000``.
|
||||
|
||||
#. Run the following command and ensure that the various settings are correct::
|
||||
|
||||
nucypher status stakers
|
||||
> --eth-provider <YOUR ETH PROVIDER URI>
|
||||
> --network <NETWORK>
|
||||
> --staking-address <YOUR STAKER ADDRESS>
|
||||
|
||||
#. Ensure that your node is listed on the `Status Monitor Page <https://status.nucypher.network>`_ (this can take a few minutes).
|
||||
|
||||
Q: What's the best way to run Ursula in the background?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -243,46 +179,14 @@ Using docker :ref:`Docker <run-ursula-with-docker>`
|
|||
Q: When installing on Docker, what do I input for <NETWORK NAME>?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Use ``mainnet`` if you want to interact with the main NuCypher network,
|
||||
Use ``mainnet`` if you want to interact with the PRE Application network,
|
||||
and either ``lynx`` or ``ibex`` in case you want to use one of our testnets.
|
||||
Go :ref:`here <faq-testnet>` to read more about the difference between both testnets.
|
||||
|
||||
Q: How can I check for currently available staking rewards?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Run::
|
||||
|
||||
nucypher status stakers
|
||||
> --eth-provider <YOUR ETH PROVIDER URI>
|
||||
> --network <NETWORK>
|
||||
> --staking-address <YOUR STAKER ADDRESS>
|
||||
|
||||
Note that a minimum of two periods must elapse before rewards will be delivered to your wallet. For example, say we
|
||||
are in Period 5 when you start staking:
|
||||
|
||||
- Period 5: You deposit stake and initiate a worker
|
||||
- Period 5: Your worker calls ``commitToNextPeriod()`` in order to receive work for the next period
|
||||
- Period 6: Your worker successfully performs the work
|
||||
- Period 7: Your worker receives rewards for the work completed in the previous period
|
||||
|
||||
|
||||
Q: How can I observe the settings (re-staking, winding down) for my stake?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Run::
|
||||
|
||||
nucypher status stakers
|
||||
> --eth-provider <YOUR ETH PROVIDER URI>
|
||||
> --network <NETWORK>
|
||||
> --staking-address <YOUR STAKER ADDRESS>
|
||||
|
||||
|
||||
Q: How can I reuse an Ursula that was connected to the previous version of the testnet?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
#. Run ``nucypher ursula destroy`` to destroy the current configuration.
|
||||
#. Repeat all of the steps with the new tokens in the :ref:`staking-guide`.
|
||||
#. Run ``nucypher ursula init`` per the :ref:`ursula-config-guide`.
|
||||
On the `Threshold Dashboard UI <https://dashboard.threshold.network>`_.
|
||||
|
||||
Q: What is a fleet state?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -299,32 +203,6 @@ Q: Why do I get ``NET::ERR_CERT_INVALID`` when loading the Ursula node status pa
|
|||
The status page uses a self-signed certificate, but browsers don’t like it.
|
||||
You can usually proceed to the page anyway. If not, try using a different browser.
|
||||
|
||||
Q: This all seems too complex for me, can I still participate in some way?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
We highly recommend delegating to an experienced staker rather than doing it yourself, if
|
||||
you are not super familiar with running nodes for other networks.
|
||||
See :ref:`node-providers`.
|
||||
|
||||
Q: Why is my node is labelled as "*Idle*" in the status monitor?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Your node is `Idle` because it has never made a commitment. Likely, your worker address does not have any
|
||||
ETH to use for transaction gas.
|
||||
|
||||
Q: The status of my node on the status monitor seems incorrect?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Check when last your node made a commitment by running::
|
||||
|
||||
nucypher status stakers
|
||||
> --eth-provider <YOUR ETH PROVIDER URI>
|
||||
> --network <NETWORK>
|
||||
> --staking-address <YOUR STAKER ADDRESS>
|
||||
|
||||
If everything looks fine, the status monitor probably just needs some time to connect to the node again to update the
|
||||
node's status.
|
||||
|
||||
Q: What types of Ethereum web3 node providers do you support?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -332,21 +210,10 @@ Q: What types of Ethereum web3 node providers do you support?
|
|||
* HTTP(S)-based JSON-RPC server e.g. ``http://<host>``, ``https://<host>``
|
||||
* Websocket(Secure)-based JSON-RPC server e.g. ``ws://<host>:8080``, ``wss://<host>:8080``
|
||||
|
||||
|
||||
Q: Is there a difference between delegating staking and running a node yourself?
|
||||
Q: How does my node choose what price to use for transactions? Can I control this?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Delegating stake and/or work to a 3rd party is a good option for those who are not confident with the technicals
|
||||
of staking and running a node and/or are concerned about gas costs relative to stake size (e.g. small stakers).
|
||||
|
||||
If you are comfortable with technical requirements of staking or wish to implement a sophisticated staking configuration
|
||||
(e.g. restake toggles, stake extensions, sub-stakes, adding stake, etc.) it may not be the right option.
|
||||
|
||||
|
||||
Q: How does my worker node choose what price to use for transactions? Can I control this?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When sending a transaction, your worker node automatically chooses the gas price
|
||||
When sending a transaction, your node automatically chooses the gas price
|
||||
using a `gas strategy <https://web3py.readthedocs.io/en/stable/gas_price.html>`_.
|
||||
|
||||
We currently offer three types of gas strategies,
|
||||
|
@ -358,6 +225,7 @@ based on the approximate confirmation time:
|
|||
|
||||
Note that the times are an approximation, and the confirmation time may vary
|
||||
when gas prices experience more volatility.
|
||||
|
||||
In such situations, transactions may not be mined within the expected time.
|
||||
However, your node keeps track of the transactions and is capable of automatically
|
||||
sending replacement transactions to adjust to a scenario with new prices.
|
||||
|
@ -384,10 +252,46 @@ This is complementary to the gas strategy that you may have configured.
|
|||
|
||||
If you set a maximum limit and gas prices remain higher
|
||||
than that limit, it's possible that your node will not get
|
||||
the commitment transaction included in the blockchain.
|
||||
This implies that you can miss some rewards.
|
||||
the transaction included in the blockchain.
|
||||
|
||||
.. warning::
|
||||
|
||||
The maximum gas price limit is an experimental feature and may be changed
|
||||
or removed in the future.
|
||||
|
||||
|
||||
Threshold Network Merger
|
||||
------------------------
|
||||
|
||||
Questions related to the merger with the KEEP Network to form the Threshold Network.
|
||||
|
||||
Q: What is the T token address?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
https://etherscan.io/address/0xcdf7028ceab81fa0c6971208e83fa7872994bee5
|
||||
|
||||
Q: What is the NU → T VendingMachine address?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
https://etherscan.io/address/0x1cca7e410ee41739792ea0a24e00349dd247680e
|
||||
|
||||
Q: What is the NU to T conversion ratio?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
1 NU = 3.259242493160746 T.
|
||||
|
||||
Q: Will conversion rate be fixed regardless of NU and T price?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Yes. The ratio is static.
|
||||
|
||||
Q: What happened to the existing NU contracts after the merge?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
They continue to exist on the Ethereum mainnet but most of the functionality is disabled.
|
||||
|
||||
Q: When was NU inflation halted?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thursday December 30th after the execution
|
||||
of NuCypher DAO proposal `#2 <https://client.aragon.org/#/nucypherdao/0x61950d573c741ca10ee6815de11bcbe7e60a0f10/vote/2/>`_
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
.. _node-providers:
|
||||
|
||||
===========================
|
||||
Node as a Service Providers
|
||||
===========================
|
||||
|
||||
.. warning::
|
||||
This is an opt-in list.
|
||||
Providers have not been vetted or endorsed by the core development team.
|
||||
Use your judgement in selecting a provider.
|
||||
|
||||
.. note::
|
||||
If you are a provider and wish to be included in this list,
|
||||
please submit a pull request.
|
||||
|
||||
Staking pools and node infrastructure providers that support the NuCypher Network are available `here <https://github.com/nucypher/validator-profiles>`_.
|
|
@ -3,12 +3,6 @@ Troubleshooting
|
|||
===============
|
||||
|
||||
|
||||
self.InsufficientTokens(f"Insufficient token balance ({self.token_agent})
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
There is an insufficient amount of NU in your staking account.
|
||||
|
||||
|
||||
ValueError: {'code': -32000, 'message': 'no suitable peers available'}
|
||||
----------------------------------------------------------------------
|
||||
|
||||
|
@ -32,24 +26,17 @@ This error can be caused by a variety of reasons. Each time ``require()`` fails
|
|||
without a corresponding check in the ``nucypher`` client itself, this error is raised. Over time, as we update the
|
||||
client, this generic error will become extinct.
|
||||
|
||||
In the most common cases:
|
||||
|
||||
- Ensure that your worker is :ref:`bonded to a staker <bond-worker>`.
|
||||
You can confirm by running ``nucypher stake list`` and check that `Worker` is set correctly i.e. not ``0x0000``.
|
||||
- If your worker is configured, ensure that the worker address has ETH and that the correct worker address is
|
||||
provided in the Ursula configuration file. You can view worker configuration by running ``nucypher ursula config``
|
||||
|
||||
|
||||
builtins.ValueError: {'code': -32000, 'message': 'insufficient funds for gas * price + value'}
|
||||
----------------------------------------------------------------------------------------------
|
||||
|
||||
The Ursula node does not have enough ETH to pay for transaction gas. Ensure that your worker address has ETH.
|
||||
The Ursula node does not have enough ETH to pay for transaction gas. Ensure that your operator address has ETH.
|
||||
|
||||
|
||||
Warning! Error encountered during contract execution [Out of gas]
|
||||
-----------------------------------------------------------------
|
||||
|
||||
The Ursula node does not have enough ETH to pay for transaction gas; ensure that your worker address has ETH.
|
||||
The Ursula node does not have enough ETH to pay for transaction gas; ensure that your operator address has ETH.
|
||||
|
||||
|
||||
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment
|
||||
|
@ -92,27 +79,3 @@ Potential reasons:
|
|||
|
||||
#. If trying to collect rewards, this is a `known bug <https://github.com/nucypher/nucypher/issues/1657>`_ in our
|
||||
code - rerun the command without the ``--staking-address`` option.
|
||||
|
||||
|
||||
ValidationError: The field extraData is 97 bytes, but should be 32. It is quite likely that you are connected to a POA chain
|
||||
----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Add the ``--poa`` flag to your command and try again.
|
||||
|
||||
|
||||
ValueError: {'code': -32601, 'message': 'the method web3_clientVersion does not exist/is not available'}
|
||||
--------------------------------------------------------------------------------------------------------
|
||||
|
||||
Ensure that the intended *signer* used is not mistakenly specified as a *provider*.
|
||||
|
||||
To view your existing ``nucypher`` configuration
|
||||
|
||||
.. code:: bash
|
||||
|
||||
nucypher stake config
|
||||
|
||||
and to update values
|
||||
|
||||
.. code:: bash
|
||||
|
||||
nucypher stake config --signer <SIGNER PATH> --eth-provider <YOUR ETH PROVIDER URI>
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
.. _threshold_overview:
|
||||
|
||||
Legacy NuCypher Stakes
|
||||
----------------------
|
||||
|
||||
As part of the merger to the Threshold Network, if you have an existing legacy NU stake,
|
||||
you can now withdraw it (and then upgrade the liquid tokens to T and stake). If you are
|
||||
subject to a vesting agreement, your unvested stake will not be immediately withdrawable
|
||||
but you can still stake it in Threshold!
|
||||
|
||||
Both options are available from the `NU dashboard <https://stake.nucypher.network/manage>`_:
|
||||
|
||||
* `Withdraw available NU <https://stake.nucypher.network/manage/withdraw>`_
|
||||
* `Stake unvested NU on Threshold <https://stake.nucypher.network/manage/stake>`_
|
||||
|
||||
|
||||
Upgrading to T
|
||||
--------------
|
||||
|
||||
The Threshold Network Token (`T <https://etherscan.io/address/0xCdF7028ceAB81fA0C6971208e83fa7872994beE5>`_) is
|
||||
the work token for staking on the Threshold Network, and
|
||||
allows for participation in `DAO governance <https://blog.threshold.network/thresholds-governance-structure-and-the-upcoming-council-elections/>`_.
|
||||
|
||||
The `Threshold Network Dashboard <https://dashboard.threshold.network/upgrade.>`_ can be used to upgrade from NU to T.
|
||||
|
||||
The upgrade from NU to T is also available via directly interacting with the vending machine smart contracts
|
||||
deployed on mainnet. The NU -> T vending machine contract address is https://etherscan.io/address/0x1CCA7E410eE41739792eA0A24e00349Dd247680e.
|
||||
|
||||
.. note::
|
||||
|
||||
1 NU = 3.259242493160745 T
|
||||
|
||||
|
||||
.. important::
|
||||
|
||||
The vending machine contract uses a static conversion ratios and remain available indefinitely, so
|
||||
please be safe, take your time, and confirm everything!
|
||||
|
||||
|
||||
T Supply Details
|
||||
----------------
|
||||
|
||||
* 10B initial supply
|
||||
|
||||
* 4.5B allocated to NU holders
|
||||
* 4.5B allocated to KEEP holders
|
||||
* 1B allocated to Threshold DAO
|
After Width: | Height: | Size: 677 KiB |
|
@ -1,6 +1,6 @@
|
|||
# NuCypher's Heartbeat Demo
|
||||
|
||||

|
||||

|
||||
|
||||
Alicia has a Heart Monitor device that measures her heart rate and outputs this data in encrypted form.
|
||||
Since she thinks that she may want to share this data in the future,
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Overhaul NuCypher documentation to accommodate the new PRE Application / Threshold Network paradigm.
|
|
@ -126,4 +126,4 @@ contract SubscriptionManager is Initializable {
|
|||
require(sent, "Failed transfer");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ class Porter(Learner):
|
|||
| | | |_| | | | |_( (/ /| |
|
||||
|_| \___/|_| \___)____)_|
|
||||
|
||||
the Pipe for nucypher network operations
|
||||
the Pipe for PRE Application network operations
|
||||
"""
|
||||
|
||||
APP_NAME = "Porter"
|
||||
|
|