<mxfile host="drawio.lan">
  <diagram id="megapool-validator-states" name="Megapool Validator States">
    <mxGraphModel dx="1547" dy="1500" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2320" pageHeight="1700" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="init_dot" parent="1" style="ellipse;html=1;fillColor=#000000;strokeColor=#000000;" value="" vertex="1">
          <mxGeometry height="26" width="26" x="120" y="360" as="geometry" />
        </mxCell>
        <mxCell id="inqueue" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="In Queue" vertex="1">
          <mxGeometry height="70" width="170" x="330" y="338" as="geometry" />
        </mxCell>
        <mxCell id="prestaked" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Prestaked" vertex="1">
          <mxGeometry height="70" width="170" x="770" y="338" as="geometry" />
        </mxCell>
        <mxCell id="staked" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Staked" vertex="1">
          <mxGeometry height="70" width="160" x="1210" y="338" as="geometry" />
        </mxCell>
        <mxCell id="exiting" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Exiting" vertex="1">
          <mxGeometry height="70" width="160" x="1630" y="338" as="geometry" />
        </mxCell>
        <mxCell id="exited" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Exited" vertex="1">
          <mxGeometry height="70" width="160" x="2050" y="338" as="geometry" />
        </mxCell>
        <mxCell id="dequeued" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Dequeued" vertex="1">
          <mxGeometry height="70" width="160" x="335" y="618" as="geometry" />
        </mxCell>
        <mxCell id="locked" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Locked" vertex="1">
          <mxGeometry height="70" width="160" x="1210" y="638" as="geometry" />
        </mxCell>
        <mxCell id="dissolved" parent="1" style="rounded=1;whiteSpace=wrap;html=1;arcSize=30;fillColor=#FFFFFF;strokeColor=#000000;fontSize=16;" value="Dissolved" vertex="1">
          <mxGeometry height="70" width="160" x="1210" y="868" as="geometry" />
        </mxCell>
        <mxCell id="end1_outer" parent="1" style="ellipse;html=1;fillColor=#FFFFFF;strokeColor=#000000;" value="" vertex="1">
          <mxGeometry height="30" width="30" x="400" y="788" as="geometry" />
        </mxCell>
        <mxCell id="end1_inner" parent="1" style="ellipse;html=1;fillColor=#000000;strokeColor=#000000;container=1;" value="" vertex="1">
          <mxGeometry height="16" width="16" x="407" y="795" as="geometry" />
        </mxCell>
        <mxCell id="end2_outer" parent="1" style="ellipse;html=1;fillColor=#FFFFFF;strokeColor=#000000;" value="" vertex="1">
          <mxGeometry height="30" width="30" x="2115" y="788" as="geometry" />
        </mxCell>
        <mxCell id="end2_inner" parent="1" style="ellipse;html=1;fillColor=#000000;strokeColor=#000000;" value="" vertex="1">
          <mxGeometry height="16" width="16" x="2122" y="795" as="geometry" />
        </mxCell>
        <mxCell id="e_deposit" edge="1" parent="1" source="init_dot" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;" target="inqueue" value="deposit&#xa;(node operator)">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e_assign" edge="1" parent="1" source="inqueue" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;" target="prestaked" value="assign&#xa;(anyone via deposit pool)">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e_dequeue" edge="1" parent="1" source="inqueue" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="dequeued" value="dequeue&#xa;(node operator)">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e_deq_end" edge="1" parent="1" source="dequeued" style="endArrow=classic;html=1;strokeColor=#333333;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="end1_outer" value="">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e_stake" edge="1" parent="1" source="prestaked" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;" target="staked" value="stake&#xa;(anyone)">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e_dissolve" edge="1" parent="1" source="prestaked" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="dissolved" value="dissolve&#xa;(anyone with proof or time out)">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="855" y="903" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e_notifyexit_staked" edge="1" parent="1" source="staked" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;" target="exiting" value="notify exit&#xa;(anyone)">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e_challenge" edge="1" parent="1" source="staked" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;exitX=0.4;exitY=1;exitDx=0;exitDy=0;entryX=0.4;entryY=0;entryDx=0;entryDy=0;" target="locked" value="challenge exiting&#xa;(oDAO member)">
          <mxGeometry relative="1" x="0.0609" y="-74" as="geometry">
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="e_notnotexiting" edge="1" parent="1" source="locked" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;exitX=0.6;exitY=0;exitDx=0;exitDy=0;entryX=0.6;entryY=1;entryDx=0;entryDy=0;" target="staked" value="notify not exiting&#xa;(anyone)">
          <mxGeometry relative="1" x="-0.0609" y="-64" as="geometry">
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="e_notifyexit_locked" edge="1" parent="1" source="locked" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.7;entryY=1;entryDx=0;entryDy=0;" target="exiting" value="notify exit&#xa;(anyone)">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1742" y="673" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e_notifyexit_diss" edge="1" parent="1" source="dissolved" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.9;entryY=1;entryDx=0;entryDy=0;" target="exiting" value="notify exit&#xa;(anyone)">
          <mxGeometry relative="1" x="-0.0501" y="-66" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="1774" y="903" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e_finalbalance" edge="1" parent="1" source="exiting" style="endArrow=classic;html=1;strokeColor=#333333;fontSize=13;" target="exited" value="notify final balance&#xa;(node operator first, after delay anyone)">
          <mxGeometry relative="1" y="-37" as="geometry">
            <mxPoint x="-1" as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="e_exited_end" edge="1" parent="1" source="exited" style="endArrow=classic;html=1;strokeColor=#333333;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="end2_outer" value="">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="n_inqueue" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;In Queue&lt;/b&gt;&lt;br&gt;- Node deposited bond&lt;br&gt;- Bond sent to deposit pool to advance queue&lt;br&gt;- Node&#39;s request for funds is in queue (standard or express)&lt;br&gt;- Awaiting funds to be assigned from deposit pool" vertex="1">
          <mxGeometry height="170" width="240" x="255" y="90" as="geometry" />
        </mxCell>
        <mxCell id="n_prestaked" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Prestaked&lt;/b&gt;&lt;br&gt;- Assigned funds (32 ETH) from the deposit pool - sent to megapool&lt;br&gt;- Prestake of 1 ETH deposited to Beacon Chain" vertex="1">
          <mxGeometry height="170" width="240" x="690" y="90" as="geometry" />
        </mxCell>
        <mxCell id="n_staked" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Staked&lt;/b&gt;&lt;br&gt;- Beacon Chain validator withdrawal credential proof provided and verified&lt;br&gt;- Remaining funds (31 ETH) deposited to Beacon Chain to activate validator" vertex="1">
          <mxGeometry height="184" width="250" x="1140" y="86" as="geometry" />
        </mxCell>
        <mxCell id="n_exiting" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Exiting&lt;/b&gt;&lt;br&gt;- A withdrawal epoch proof has been provided and verified&lt;br&gt;- Awaiting a withdrawal balance proof to support distibution of initial capital" vertex="1">
          <mxGeometry height="200" width="250" x="1590" y="80" as="geometry" />
        </mxCell>
        <mxCell id="n_exited" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Exited&lt;/b&gt;&lt;br&gt;- A withdrawal balance proof has been provided and verified&lt;br&gt;- If called by node operator, capital is transferred to the node operator&lt;br&gt;- If called by anyone, capital is available for claim by node operator" vertex="1">
          <mxGeometry height="210" width="290" x="2030" y="80" as="geometry" />
        </mxCell>
        <mxCell id="n_dequeued" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Dequeued&lt;/b&gt;&lt;br&gt;- Node deposit request has been dequeued&lt;br&gt;- Node given credit for deposit amount" vertex="1">
          <mxGeometry height="160" width="240" x="60" y="618" as="geometry" />
        </mxCell>
        <mxCell id="n_dissolved" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Dissolved&lt;/b&gt;&lt;br&gt;• Validator activation dissolve&lt;br&gt;• Reasons:&lt;br&gt;  ◦ Incorrect withdrawal credentials&lt;br&gt;  ◦ Validator withdrawing&lt;br&gt;  ◦ Validator exiting&lt;br&gt;  ◦ Invalid balance (≥32 ETH)&lt;br&gt;  ◦ Validator activating&lt;br&gt;  ◦ Validator already activated&lt;br&gt;  ◦ Validator slashed&lt;br&gt;  ◦ They haven&#39;t staked in a timely manner (28 days) - permissionless after period elapses&lt;br&gt;• Permissionless" vertex="1">
          <mxGeometry height="242" width="340" x="670" y="988" as="geometry" />
        </mxCell>
        <mxCell id="n_locked" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;align=left;verticalAlign=top;spacingLeft=8;spacingTop=6;fontSize=13;shadow=1;" value="&lt;b&gt;Locked&lt;/b&gt;&lt;br&gt;• Node operator is given time to submit notify_exit after exiting a validator (notify threshold)&lt;br&gt;• After which an oDAO member can challenge and report they are exiting&lt;br&gt;• The NO can either confirm they are exiting with a notify_exit proof&lt;br&gt;• Or submit a notify not exiting proof" vertex="1">
          <mxGeometry height="162" width="360" x="1390" y="708" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
