diff --git a/spec/app/ics-028-cross-chain-validation/figures/ccv-unbonding-overview.excalidraw b/spec/app/ics-028-cross-chain-validation/figures/ccv-unbonding-overview.excalidraw new file mode 100644 index 000000000..9a57634db --- /dev/null +++ b/spec/app/ics-028-cross-chain-validation/figures/ccv-unbonding-overview.excalidraw @@ -0,0 +1,4367 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 2397, + "versionNonce": 829974083, + "isDeleted": false, + "id": "288dISSfHCk2NOu4muYto", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 424.92702425970924, + "y": 1437.7493664453027, + "strokeColor": "#1864ab", + "backgroundColor": "#1864ab", + "width": 1005.0833333333333, + "height": 169.87698412698418, + "seed": 1089140909, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "DURyamuWvIhE5o-GLqnvp", + "type": "arrow" + }, + { + "id": "-sQ1lqt81ejZKXt6Q2HFf", + "type": "arrow" + }, + { + "id": "gMMtc7H_hFXaSquI_JbUz", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "jxiIfnYuV__VAbb-JgmY7", + "type": "arrow" + }, + { + "id": "cFz81tlJ2NMZiYzWVMuf6", + "type": "arrow" + } + ], + "updated": 1642600840865 + }, + { + "type": "rectangle", + "version": 2115, + "versionNonce": 1733232131, + "isDeleted": false, + "id": "OfGfoX6AzJGTbsVLECmyB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 423.05202425970924, + "y": 621.3743664453026, + "strokeColor": "#1864ab", + "backgroundColor": "#1864ab", + "width": 1008.8333333333333, + "height": 305.0555555555555, + "seed": 797809709, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "DURyamuWvIhE5o-GLqnvp", + "type": "arrow" + }, + { + "id": "-sQ1lqt81ejZKXt6Q2HFf", + "type": "arrow" + }, + { + "id": "gMMtc7H_hFXaSquI_JbUz", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "jxiIfnYuV__VAbb-JgmY7", + "type": "arrow" + }, + { + "id": "cFz81tlJ2NMZiYzWVMuf6", + "type": "arrow" + } + ], + "updated": 1642600635405 + }, + { + "type": "text", + "version": 657, + "versionNonce": 248070797, + "isDeleted": false, + "id": "DcYomqVwJx0rUjMvf5S5b", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 833.5555555555553, + "y": 344.063492063492, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 481, + "height": 35, + "seed": 484186313, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601011013, + "fontSize": 28, + "fontFamily": 1, + "text": "Completion of Unbonding Operations", + "baseline": 25, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Completion of Unbonding Operations" + }, + { + "type": "text", + "version": 1024, + "versionNonce": 1687990989, + "isDeleted": false, + "id": "yqi6dzvpzblq17ysowkTo", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 431.16839719235065, + "y": 448.03444717631976, + "strokeColor": "#364fc7", + "backgroundColor": "transparent", + "width": 139, + "height": 25, + "seed": 578772677, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600635405, + "fontSize": 20, + "fontFamily": 1, + "text": "Provider Chain", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Provider Chain" + }, + { + "type": "text", + "version": 1474, + "versionNonce": 890186723, + "isDeleted": false, + "id": "Y19fC1uuzabCFyV0s97Ip", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1607.2239527479067, + "y": 448.32412971600235, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "width": 159, + "height": 25, + "seed": 1161289003, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601115252, + "fontSize": 20, + "fontFamily": 1, + "text": "Consumer Chains", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Consumer Chains" + }, + { + "type": "rectangle", + "version": 1759, + "versionNonce": 625632333, + "isDeleted": false, + "id": "io7ctwpVbQY3h06icqEIP", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 418.9045083034623, + "y": 486.804922000858, + "strokeColor": "#1864ab", + "backgroundColor": "#1864ab", + "width": 1012.5833333333331, + "height": 100.05555555555551, + "seed": 1043647324, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "DURyamuWvIhE5o-GLqnvp", + "type": "arrow" + }, + { + "id": "-sQ1lqt81ejZKXt6Q2HFf", + "type": "arrow" + }, + { + "id": "gMMtc7H_hFXaSquI_JbUz", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "jxiIfnYuV__VAbb-JgmY7", + "type": "arrow" + } + ], + "updated": 1642600635406 + }, + { + "type": "rectangle", + "version": 2927, + "versionNonce": 1983288067, + "isDeleted": false, + "id": "niGq9B1KH3f2JGEXfsVWR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1082.654508303462, + "y": 457.6660331119692, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 326.3333333333336, + "height": 1533.0833333333328, + "seed": 1857158372, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "arrow", + "id": "gdGzxModJaJKV9kGsQ0lN" + }, + { + "type": "arrow", + "id": "UdbNDUj-KimwGAw0JZmAm" + }, + { + "type": "arrow", + "id": "L-m2OjIz_DM9FZL_aw8q1" + }, + { + "type": "arrow", + "id": "MUNWjeP_k1E_jhbGobXH1" + }, + { + "type": "arrow", + "id": "Z366__sEfBTh-UkidbmWs" + }, + { + "id": "L-SUQMkaBFUSpHYaSKHI8", + "type": "arrow" + }, + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "jz87Jfblhql4prXUNauec", + "type": "arrow" + }, + { + "id": "XqKtKE8gPBp_eAGHN-Ucc", + "type": "arrow" + }, + { + "id": "Uv1Gs8hixSdQGVRH6KLVi", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "UqXi4k7D7LBkElLUl9bRY", + "type": "arrow" + }, + { + "id": "WEyZi3lMqkJ8FhlR5xFl1", + "type": "arrow" + }, + { + "id": "soJdQZVXQySCwfBjVwVtd", + "type": "arrow" + }, + { + "id": "0s6Gf0lhs4RxTdpZNUqsV", + "type": "arrow" + } + ], + "updated": 1642600635406 + }, + { + "type": "text", + "version": 1277, + "versionNonce": 477254317, + "isDeleted": false, + "id": "mKQR2MU2I6RaZxHleDOeo", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1181.5711749701286, + "y": 420.33269977863563, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 112, + "height": 26, + "seed": 461936988, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635406, + "fontSize": 20, + "fontFamily": 1, + "text": "CCV Module", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "CCV Module" + }, + { + "type": "rectangle", + "version": 3293, + "versionNonce": 1486043811, + "isDeleted": false, + "id": "ZBGOYMeC4-MdhYaPJ-0IB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 580.9045083034619, + "y": 456.58269977863574, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 304.33333333333326, + "height": 1531.083333333333, + "seed": 1937775204, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "arrow", + "id": "gdGzxModJaJKV9kGsQ0lN" + }, + { + "type": "arrow", + "id": "UdbNDUj-KimwGAw0JZmAm" + }, + { + "type": "arrow", + "id": "L-m2OjIz_DM9FZL_aw8q1" + }, + { + "type": "arrow", + "id": "MUNWjeP_k1E_jhbGobXH1" + }, + { + "type": "arrow", + "id": "Z366__sEfBTh-UkidbmWs" + }, + { + "id": "L-SUQMkaBFUSpHYaSKHI8", + "type": "arrow" + }, + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "jz87Jfblhql4prXUNauec", + "type": "arrow" + }, + { + "id": "XqKtKE8gPBp_eAGHN-Ucc", + "type": "arrow" + }, + { + "id": "Uv1Gs8hixSdQGVRH6KLVi", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "UqXi4k7D7LBkElLUl9bRY", + "type": "arrow" + }, + { + "id": "WEyZi3lMqkJ8FhlR5xFl1", + "type": "arrow" + }, + { + "id": "soJdQZVXQySCwfBjVwVtd", + "type": "arrow" + }, + { + "id": "0s6Gf0lhs4RxTdpZNUqsV", + "type": "arrow" + }, + { + "id": "zRzvyJHLJcGNoyUqNi09v", + "type": "arrow" + }, + { + "id": "cFz81tlJ2NMZiYzWVMuf6", + "type": "arrow" + } + ], + "updated": 1642600635406 + }, + { + "type": "text", + "version": 1255, + "versionNonce": 424506637, + "isDeleted": false, + "id": "8MWo4aqmMRZ_6M0R-fqTm", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 665.321174970128, + "y": 420.24936644530237, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 147, + "height": 25, + "seed": 401616348, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635406, + "fontSize": 20, + "fontFamily": 1, + "text": "Staking Module", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Staking Module" + }, + { + "type": "text", + "version": 1854, + "versionNonce": 1545651469, + "isDeleted": false, + "id": "v3aZhl7kBQN_LlwRZKca8", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 656.2882878336204, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 159, + "height": 25, + "seed": 806156493, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "dYJRFcc1PLcSHVaOF3szx", + "type": "arrow" + } + ], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "init undelegate-1", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "init undelegate-1" + }, + { + "type": "rectangle", + "version": 1107, + "versionNonce": 117677635, + "isDeleted": false, + "id": "mjb-z7j9KAQicoyLxGdMD", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 521.3326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 217.00000000000003, + "height": 43.75, + "seed": 102106061, + "groupIds": [ + "VIocaW0VwoAK-tEMbwF6i" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Ygx86iuovd0TmthLMHcRq", + "type": "text" + }, + { + "id": "Ygx86iuovd0TmthLMHcRq", + "type": "text" + }, + { + "id": "Ygx86iuovd0TmthLMHcRq", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "type": "text", + "id": "Ygx86iuovd0TmthLMHcRq" + } + ], + "updated": 1642600868111 + }, + { + "type": "text", + "version": 1079, + "versionNonce": 322870125, + "isDeleted": false, + "id": "Ygx86iuovd0TmthLMHcRq", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 611.6064753554905, + "y": 530.7076997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 207.00000000000003, + "height": 25, + "seed": 286698371, + "groupIds": [ + "VIocaW0VwoAK-tEMbwF6i" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "mjb-z7j9KAQicoyLxGdMD", + "originalText": "EndBlock" + }, + { + "type": "rectangle", + "version": 1592, + "versionNonce": 1215885933, + "isDeleted": false, + "id": "bsvuNHc8NDse8ddQcKZVC", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 520.7076997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 282, + "height": 44.99999999999999, + "seed": 171907533, + "groupIds": [ + "gfLFyjEdxp9zQoBw_3SqN" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "gf9fplNPnrE2fF2kM1scl", + "type": "text" + }, + { + "id": "gf9fplNPnrE2fF2kM1scl", + "type": "text" + }, + { + "id": "gf9fplNPnrE2fF2kM1scl", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "gf9fplNPnrE2fF2kM1scl", + "type": "text" + }, + { + "id": "gf9fplNPnrE2fF2kM1scl", + "type": "text" + }, + { + "id": "wiNk7YxLC6w3qcdxfA5HM", + "type": "arrow" + }, + { + "id": "gf9fplNPnrE2fF2kM1scl", + "type": "text" + }, + { + "type": "text", + "id": "gf9fplNPnrE2fF2kM1scl" + } + ], + "updated": 1642600919620 + }, + { + "type": "text", + "version": 1635, + "versionNonce": 1301772003, + "isDeleted": false, + "id": "gf9fplNPnrE2fF2kM1scl", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1104.9216781417922, + "y": 530.7076997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 272, + "height": 25, + "seed": 271709571, + "groupIds": [ + "gfLFyjEdxp9zQoBw_3SqN" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "bsvuNHc8NDse8ddQcKZVC", + "originalText": "EndBlock" + }, + { + "type": "text", + "version": 1944, + "versionNonce": 317332685, + "isDeleted": false, + "id": "2XMg0yRe96WOesVqiCQQ-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 656.2882878336204, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 220, + "height": 25, + "seed": 1796815331, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "" + }, + { + "type": "arrow", + "version": 2810, + "versionNonce": 239004045, + "isDeleted": false, + "id": "3SeouFV8muGxqHUkL0Vc8", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 918.1530852701657, + "y": 552.5973901947737, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 131.8240708739196, + "height": 1.0224628362805106, + "seed": 626176963, + "groupIds": [ + "vexHwxQT-Qwn1_fQ4WMZu" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635406, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 131.8240708739196, + -1.0224628362805106 + ] + ] + }, + { + "type": "text", + "version": 1647, + "versionNonce": 682099139, + "isDeleted": false, + "id": "qdAEsThxT6FSsrS7Kt4pK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 944.8321512501689, + "y": 509.81800936249795, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 80, + "height": 25, + "seed": 355835373, + "groupIds": [ + "vexHwxQT-Qwn1_fQ4WMZu" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635406, + "fontSize": 20, + "fontFamily": 1, + "text": "updates", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates" + }, + { + "type": "arrow", + "version": 2888, + "versionNonce": 388247533, + "isDeleted": false, + "id": "JnqmaagVJuwrk_54IKvQ8", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 920.9151937961719, + "y": 680.7060229665822, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 129.0619623479132, + "height": 0.27011154965987316, + "seed": 976668835, + "groupIds": [ + "65A-wNjKwxPx9Z6rx72Qa" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635406, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 129.0619623479132, + -0.27011154965987316 + ] + ] + }, + { + "type": "text", + "version": 1808, + "versionNonce": 6869347, + "isDeleted": false, + "id": "8Ko91C-fybcS0oL81RyKJ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 927.8321512501687, + "y": 638.6789934209272, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 114, + "height": 25, + "seed": 1072809741, + "groupIds": [ + "65A-wNjKwxPx9Z6rx72Qa" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635406, + "fontSize": 20, + "fontFamily": 1, + "text": "StakingHook", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "StakingHook" + }, + { + "type": "text", + "version": 1327, + "versionNonce": 379639981, + "isDeleted": false, + "id": "ZhWLObdAQ7DNXYE3H3QBZ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1461.445910951049, + "y": 804.7276573363806, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 119, + "height": 25, + "seed": 1497949645, + "groupIds": [ + "OBrDlmfGyuZF1MjnQMPCx" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "VSCPacket-1", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "VSCPacket-1" + }, + { + "type": "arrow", + "version": 2257, + "versionNonce": 1123554467, + "isDeleted": false, + "id": "jjmd9OK2eou689hzpSx2D", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1464.6319416280771, + "y": 850.1877422208913, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 121.62386851542169, + "height": 1.693510304863139, + "seed": 1752885635, + "groupIds": [ + "OBrDlmfGyuZF1MjnQMPCx" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 121.62386851542169, + -1.693510304863139 + ] + ] + }, + { + "type": "rectangle", + "version": 1846, + "versionNonce": 974970339, + "isDeleted": false, + "id": "zrerEZvkoppdLgVEr-HAR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 1462.9576997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 253.24999999999997, + "height": 124.28571428571442, + "seed": 737507619, + "groupIds": [ + "ac8_hZSpXUKuuvN3hcNoN" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "ZiI3_vPGpIcZ3QZEd-jZ-", + "type": "text" + }, + { + "id": "ZiI3_vPGpIcZ3QZEd-jZ-", + "type": "text" + }, + { + "id": "ZiI3_vPGpIcZ3QZEd-jZ-", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "ZiI3_vPGpIcZ3QZEd-jZ-", + "type": "text" + }, + { + "id": "ZiI3_vPGpIcZ3QZEd-jZ-", + "type": "text" + }, + { + "type": "text", + "id": "ZiI3_vPGpIcZ3QZEd-jZ-" + }, + { + "id": "cFz81tlJ2NMZiYzWVMuf6", + "type": "arrow" + } + ], + "updated": 1642600868111 + }, + { + "type": "text", + "version": 1918, + "versionNonce": 590162307, + "isDeleted": false, + "id": "ZiI3_vPGpIcZ3QZEd-jZ-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 611.6064753554905, + "y": 1475.1005569214929, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 243.24999999999997, + "height": 100, + "seed": 1393843853, + "groupIds": [ + "ac8_hZSpXUKuuvN3hcNoN" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock\n- compute updates-j\n- complete undelegate-1\n- complete redelegate-1", + "baseline": 93, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "zrerEZvkoppdLgVEr-HAR", + "originalText": "EndBlock\n- compute updates-j\n- complete undelegate-1\n- complete redelegate-1" + }, + { + "type": "arrow", + "version": 3017, + "versionNonce": 538595693, + "isDeleted": false, + "id": "s4m9JE4Ws5SNKruUeKciX", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 919.0426513063876, + "y": 867.6329216669907, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 130.99912129944914, + "height": 0.47416060277919314, + "seed": 1145786371, + "groupIds": [ + "yGSu-GF2cmHnrANMW04OV" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 130.99912129944914, + 0.47416060277919314 + ] + ] + }, + { + "type": "text", + "version": 1841, + "versionNonce": 1115654115, + "isDeleted": false, + "id": "PJ7or8MkoB5Ta3Ijgl2nS", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 937.8967677119203, + "y": 826.3501642737743, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 94, + "height": 25, + "seed": 1960043949, + "groupIds": [ + "yGSu-GF2cmHnrANMW04OV" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-1", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-1" + }, + { + "type": "rectangle", + "version": 1737, + "versionNonce": 2112660099, + "isDeleted": false, + "id": "xUOhnu2c7zi5RcZBJm9_0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 780.9576997786359, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.49999999999994, + "height": 135, + "seed": 1594382243, + "groupIds": [ + "t4kjRFeOj_Zv00-6NfpW0" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "type": "text" + }, + { + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "type": "text" + }, + { + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "type": "text" + }, + { + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "type": "text" + }, + { + "id": "wiNk7YxLC6w3qcdxfA5HM", + "type": "arrow" + }, + { + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "type": "text" + }, + { + "type": "text", + "id": "xJ9MQG4krLBiVC1J-n9Cd" + } + ], + "updated": 1642600919620 + }, + { + "type": "text", + "version": 1779, + "versionNonce": 512162605, + "isDeleted": false, + "id": "xJ9MQG4krLBiVC1J-n9Cd", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1104.9216781417922, + "y": 798.4576997786359, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 279.49999999999994, + "height": 100, + "seed": 906274829, + "groupIds": [ + "t4kjRFeOj_Zv00-6NfpW0" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock\n- VSC1:={vscId, updates-1}\n- provide VSC1\n- vscId++", + "baseline": 93, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "xUOhnu2c7zi5RcZBJm9_0", + "originalText": "EndBlock\n- VSC1:={vscId, updates-1}\n- provide VSC1\n- vscId++" + }, + { + "type": "rectangle", + "version": 1465, + "versionNonce": 1354130477, + "isDeleted": false, + "id": "FWaH8-7qhZ3CCEqeqDGDE", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 816.9576997786359, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 217.00000000000003, + "height": 85, + "seed": 402877251, + "groupIds": [ + "UTPDgVuWHHgewtd7yku-H" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "QtScPVLIHX_XpCTGNl19E", + "type": "text" + }, + { + "id": "QtScPVLIHX_XpCTGNl19E", + "type": "text" + }, + { + "id": "QtScPVLIHX_XpCTGNl19E", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "QtScPVLIHX_XpCTGNl19E", + "type": "text" + }, + { + "id": "QtScPVLIHX_XpCTGNl19E", + "type": "text" + }, + { + "type": "text", + "id": "QtScPVLIHX_XpCTGNl19E" + } + ], + "updated": 1642600868111 + }, + { + "type": "text", + "version": 1435, + "versionNonce": 124977443, + "isDeleted": false, + "id": "QtScPVLIHX_XpCTGNl19E", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 611.6064753554905, + "y": 834.4576997786359, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 207, + "height": 50, + "seed": 1823350381, + "groupIds": [ + "UTPDgVuWHHgewtd7yku-H" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock\n- compute updates-1", + "baseline": 43, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "FWaH8-7qhZ3CCEqeqDGDE", + "originalText": "EndBlock\n- compute updates-1" + }, + { + "type": "diamond", + "version": 1564, + "versionNonce": 901958797, + "isDeleted": false, + "id": "8FSwgT1wTNXMVwek31Zcj", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 253.22826628158566, + "y": 818.4576997786359, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 145, + "height": 105, + "seed": 328927971, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "b9turHYT8j_iZlkRmUQJd", + "type": "text" + }, + { + "id": "b9turHYT8j_iZlkRmUQJd", + "type": "text" + }, + { + "id": "b9turHYT8j_iZlkRmUQJd", + "type": "text" + }, + { + "id": "-r0GObbpXNWzCa57TLWTv", + "type": "arrow" + }, + { + "id": "b9turHYT8j_iZlkRmUQJd", + "type": "text" + }, + { + "type": "text", + "id": "b9turHYT8j_iZlkRmUQJd" + } + ], + "updated": 1642600635407 + }, + { + "type": "text", + "version": 1521, + "versionNonce": 369610435, + "isDeleted": false, + "id": "b9turHYT8j_iZlkRmUQJd", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 258.22826628158566, + "y": 858.4576997786359, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 135, + "height": 25, + "seed": 1335478477, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "Tendermint", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "8FSwgT1wTNXMVwek31Zcj", + "originalText": "Tendermint" + }, + { + "type": "arrow", + "version": 3988, + "versionNonce": 171160301, + "isDeleted": false, + "id": "tRsPeghC6Larxxo1-cOHT", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 548.8499010357573, + "y": 872.4379527210932, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 117.80814515172608, + "height": 1.2723534635447322, + "seed": 1717417603, + "groupIds": [ + "QwYvAiHAt3q-R51TmsfOS" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -117.80814515172608, + 1.2723534635447322 + ] + ] + }, + { + "type": "text", + "version": 2322, + "versionNonce": 709295715, + "isDeleted": false, + "id": "isS-yd5bGYUz8MEWFM5RH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 441.0476489368832, + "y": 828.3501642737748, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 94, + "height": 25, + "seed": 6367021, + "groupIds": [ + "QwYvAiHAt3q-R51TmsfOS" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-1", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-1" + }, + { + "type": "text", + "version": 1373, + "versionNonce": 2011929517, + "isDeleted": false, + "id": "SzCr9Evju7A0-EI2hAVan", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1465.3875273830427, + "y": 1279.9686647108056, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 132, + "height": 50, + "seed": 800354189, + "groupIds": [ + "nKurdQH5Lw4OmdxDJxyCg" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "arrow", + "id": "UdbNDUj-KimwGAw0JZmAm" + } + ], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": " all ACKs for\nVSCPacket-1", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": " all ACKs for\nVSCPacket-1" + }, + { + "type": "arrow", + "version": 2225, + "versionNonce": 49217955, + "isDeleted": false, + "id": "qxQQDOIb_6yBAx_VEeb37", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1586.2574313298073, + "y": 1347.4225451745372, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 123.56280714681475, + "height": 0.8260181955356529, + "seed": 666229699, + "groupIds": [ + "nKurdQH5Lw4OmdxDJxyCg" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -123.56280714681475, + 0.8260181955356529 + ] + ] + }, + { + "type": "text", + "version": 855, + "versionNonce": 2036282595, + "isDeleted": false, + "id": "dHBZb2RdXqXsUyWx3KiOq", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 467.468690926376, + "y": 527.1521442230803, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 52, + "height": 25, + "seed": 135797549, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "Block", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Block" + }, + { + "type": "rectangle", + "version": 2124, + "versionNonce": 369926275, + "isDeleted": false, + "id": "kdNbiNehK3QVI1DL8BGYt", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 425.5275274313726, + "y": 961.9993664453024, + "strokeColor": "#1864ab", + "backgroundColor": "#1864ab", + "width": 1006.3333333333335, + "height": 246.30555555555554, + "seed": 618253869, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "DURyamuWvIhE5o-GLqnvp", + "type": "arrow" + }, + { + "id": "-sQ1lqt81ejZKXt6Q2HFf", + "type": "arrow" + }, + { + "id": "gMMtc7H_hFXaSquI_JbUz", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "jxiIfnYuV__VAbb-JgmY7", + "type": "arrow" + }, + { + "id": "M5sZD3idFu959njYfEyeu", + "type": "arrow" + } + ], + "updated": 1642600635407 + }, + { + "type": "text", + "version": 1869, + "versionNonce": 504583821, + "isDeleted": false, + "id": "mhqdDomzdSXgWXV-WcaDJ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 997.1632878336203, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 168, + "height": 25, + "seed": 152254243, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "dYJRFcc1PLcSHVaOF3szx", + "type": "arrow" + } + ], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "init undelegate-2", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "init undelegate-2" + }, + { + "type": "text", + "version": 1965, + "versionNonce": 769350179, + "isDeleted": false, + "id": "phK7bzOTf8HJPVnfLFghy", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 997.1632878336203, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 229, + "height": 25, + "seed": 775520397, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "" + }, + { + "type": "arrow", + "version": 2960, + "versionNonce": 15970189, + "isDeleted": false, + "id": "3NrrQafWyNKIVHetasLgc", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 919.6406969678351, + "y": 1021.7570662096172, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 130.31196234791332, + "height": 0.2711443590825411, + "seed": 210131651, + "groupIds": [ + "cB6bFsaKlgxurLpKAbJKw" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 130.31196234791332, + -0.2711443590825411 + ] + ] + }, + { + "type": "text", + "version": 1832, + "versionNonce": 2097847235, + "isDeleted": false, + "id": "nKyT1_Q-GDSz7rKZubHwS", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 927.807654421832, + "y": 979.7290038545395, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 114, + "height": 25, + "seed": 699655917, + "groupIds": [ + "cB6bFsaKlgxurLpKAbJKw" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "StakingHook", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "StakingHook" + }, + { + "type": "text", + "version": 1411, + "versionNonce": 592459245, + "isDeleted": false, + "id": "PLhcueSSD57kWN6Qi-0hy", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1461.445910951049, + "y": 1086.6026573363806, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 127, + "height": 25, + "seed": 1762921059, + "groupIds": [ + "E8OZCCeBcSVKKnXG7XX_J" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "VSCPacket-2", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "VSCPacket-2" + }, + { + "type": "arrow", + "version": 2336, + "versionNonce": 560474979, + "isDeleted": false, + "id": "hmUXP0GIWwIo13Y3ulP7V", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1468.6319416280767, + "y": 1132.0627422208913, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 121.62386851542169, + "height": 1.693510304863139, + "seed": 1775403341, + "groupIds": [ + "E8OZCCeBcSVKKnXG7XX_J" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 121.62386851542169, + -1.693510304863139 + ] + ] + }, + { + "type": "arrow", + "version": 3146, + "versionNonce": 688713805, + "isDeleted": false, + "id": "jMOzMGNmj6p2YM8NwCj4-", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 920.9214990138784, + "y": 1149.093477787134, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 127.59577676362153, + "height": 0.3613955173641443, + "seed": 864732675, + "groupIds": [ + "STwyOVqEMrli0DcBTproc" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 127.59577676362153, + -0.3613955173641443 + ] + ] + }, + { + "type": "text", + "version": 1942, + "versionNonce": 1857210115, + "isDeleted": false, + "id": "KyCMqbrlIZV3ujG0FLBh0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 931.8722708835835, + "y": 1106.9751642737742, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 103, + "height": 25, + "seed": 871288749, + "groupIds": [ + "STwyOVqEMrli0DcBTproc" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635407, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-2", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-2" + }, + { + "type": "rectangle", + "version": 1822, + "versionNonce": 867765645, + "isDeleted": false, + "id": "RB0NFxq5enBSn_1g0Rs1M", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 1062.8326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 292, + "height": 135, + "seed": 1659440547, + "groupIds": [ + "1Ml5oLQaWc-g3mG6AtEjs" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "id": "wiNk7YxLC6w3qcdxfA5HM", + "type": "arrow" + }, + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "id": "zwf74_KbAfyIn5CmMaEpU", + "type": "text" + }, + { + "type": "text", + "id": "zwf74_KbAfyIn5CmMaEpU" + } + ], + "updated": 1642600919620 + }, + { + "type": "text", + "version": 1870, + "versionNonce": 1246895555, + "isDeleted": false, + "id": "zwf74_KbAfyIn5CmMaEpU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1104.9216781417922, + "y": 1080.3326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 282, + "height": 100, + "seed": 1714573837, + "groupIds": [ + "1Ml5oLQaWc-g3mG6AtEjs" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock\n- VSC2:={vscId, updates-2}\n- provide VSC2\n- vscId++", + "baseline": 93, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "RB0NFxq5enBSn_1g0Rs1M", + "originalText": "EndBlock\n- VSC2:={vscId, updates-2}\n- provide VSC2\n- vscId++" + }, + { + "type": "rectangle", + "version": 1549, + "versionNonce": 6087875, + "isDeleted": false, + "id": "BWRQRfnJRP2bLO56TV_Xk", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 1098.8326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 217.00000000000003, + "height": 85, + "seed": 173891907, + "groupIds": [ + "54R2JrsB_ogK-ZKI5BQYv" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "6n_oBuNMDsal_ABzyahFz", + "type": "text" + }, + { + "id": "6n_oBuNMDsal_ABzyahFz", + "type": "text" + }, + { + "id": "6n_oBuNMDsal_ABzyahFz", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "6n_oBuNMDsal_ABzyahFz", + "type": "text" + }, + { + "id": "6n_oBuNMDsal_ABzyahFz", + "type": "text" + }, + { + "id": "6n_oBuNMDsal_ABzyahFz", + "type": "text" + }, + { + "type": "text", + "id": "6n_oBuNMDsal_ABzyahFz" + } + ], + "updated": 1642600868111 + }, + { + "type": "text", + "version": 1520, + "versionNonce": 1810037997, + "isDeleted": false, + "id": "6n_oBuNMDsal_ABzyahFz", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 611.6064753554905, + "y": 1116.3326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 207, + "height": 75, + "seed": 1570146413, + "groupIds": [ + "54R2JrsB_ogK-ZKI5BQYv" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock\n- compute updates-2", + "baseline": 68, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "BWRQRfnJRP2bLO56TV_Xk", + "originalText": "EndBlock\n- compute updates-2" + }, + { + "type": "diamond", + "version": 1648, + "versionNonce": 722687853, + "isDeleted": false, + "id": "JopS_hj-ZXS5fwF8ERp6u", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 253.20376945324915, + "y": 1100.3326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 145, + "height": 105, + "seed": 1397113059, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "MzLtWftrAv0s7667yRuHn", + "type": "text" + }, + { + "id": "MzLtWftrAv0s7667yRuHn", + "type": "text" + }, + { + "id": "MzLtWftrAv0s7667yRuHn", + "type": "text" + }, + { + "id": "-r0GObbpXNWzCa57TLWTv", + "type": "arrow" + }, + { + "id": "MzLtWftrAv0s7667yRuHn", + "type": "text" + }, + { + "id": "MzLtWftrAv0s7667yRuHn", + "type": "text" + }, + { + "type": "text", + "id": "MzLtWftrAv0s7667yRuHn" + } + ], + "updated": 1642600635408 + }, + { + "type": "text", + "version": 1604, + "versionNonce": 1140974051, + "isDeleted": false, + "id": "MzLtWftrAv0s7667yRuHn", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 258.20376945324915, + "y": 1140.3326997786357, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 135, + "height": 25, + "seed": 467989197, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "fontSize": 20, + "fontFamily": 1, + "text": "Tendermint", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "JopS_hj-ZXS5fwF8ERp6u", + "originalText": "Tendermint" + }, + { + "type": "arrow", + "version": 4224, + "versionNonce": 1592779213, + "isDeleted": false, + "id": "U1GKh2Ic0h0HFt8GEtuaT", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 547.8840752672525, + "y": 1151.2236818704496, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 115.6168162115581, + "height": 0.6116243141882478, + "seed": 926035075, + "groupIds": [ + "ItvOetjnwy_YHQhWlMVXp" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -115.6168162115581, + 0.6116243141882478 + ] + ] + }, + { + "type": "text", + "version": 2427, + "versionNonce": 835825027, + "isDeleted": false, + "id": "zBOyUTJljULnw2kI-Qufe", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 437.77315210854516, + "y": 1106.4751642737747, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 103, + "height": 25, + "seed": 766972205, + "groupIds": [ + "ItvOetjnwy_YHQhWlMVXp" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-2", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-2" + }, + { + "type": "arrow", + "version": 4638, + "versionNonce": 1399606211, + "isDeleted": false, + "id": "cFz81tlJ2NMZiYzWVMuf6", + "fillStyle": "hachure", + "strokeWidth": 4, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 6.277329793107594, + "x": 596.0928834941102, + "y": 927.8334623501592, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "width": 2.9100524049084697, + "height": 507.68956239314696, + "seed": 134041987, + "groupIds": [ + "CqF-dAVHfY77Yn6VmbWfc" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600877592, + "startBinding": { + "elementId": "OfGfoX6AzJGTbsVLECmyB", + "focus": 0.6599084118084031, + "gap": 1.3993722528743433 + }, + "endBinding": { + "elementId": "zrerEZvkoppdLgVEr-HAR", + "focus": -1.094118517194332, + "gap": 27.43050693890325 + }, + "lastCommittedPoint": null, + "startArrowhead": "bar", + "endArrowhead": "bar", + "points": [ + [ + 0, + 0 + ], + [ + -2.9100524049084697, + 507.68956239314696 + ] + ] + }, + { + "type": "text", + "version": 2004, + "versionNonce": 28235597, + "isDeleted": false, + "id": "dlq-LCddvyv9rW9vWOnen", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 1282.6521442230803, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 86, + "height": 50, + "seed": 1619373805, + "groupIds": [ + "AxP1pTUQVIrrnNNvwelgT" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "unbonding\nperiod", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "unbonding\nperiod" + }, + { + "type": "text", + "version": 2010, + "versionNonce": 1371132909, + "isDeleted": false, + "id": "JE7v3fw6Lo-vnwABTfGUW", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 1298.1521442230805, + "strokeColor": "#000000", + "backgroundColor": "#e67700", + "width": 240, + "height": 50, + "seed": 1500007565, + "groupIds": [ + "SsR2cRbMRkeYQVfLbQQFK" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + } + ], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "register VSC1 maturity\nfrom all consumer chains", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "register VSC1 maturity\nfrom all consumer chains" + }, + { + "type": "arrow", + "version": 3361, + "versionNonce": 1026647053, + "isDeleted": false, + "id": "epRmOkOvZWfXiLqu0Qlge", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1049.1877097524193, + "y": 1308.7643114112332, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 126.96037696966164, + "height": 0.24647998429350082, + "seed": 773091331, + "groupIds": [ + "f4ho76RQ9mWQGX32Ab5Md" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -126.96037696966164, + 0.24647998429350082 + ] + ] + }, + { + "type": "text", + "version": 2312, + "versionNonce": 1947234115, + "isDeleted": false, + "id": "gASwr2kKuNorBYPW6PB7B", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 933.8546672064161, + "y": 1241.7430748057857, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 118, + "height": 50, + "seed": 1068287405, + "groupIds": [ + "f4ho76RQ9mWQGX32Ab5Md" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "fontSize": 20, + "fontFamily": 1, + "text": "undelegate-1\nmatured", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "undelegate-1\nmatured" + }, + { + "type": "arrow", + "version": 3101, + "versionNonce": 1726175853, + "isDeleted": false, + "id": "Qaof0appxyTfGqOyPimeM", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 921.6877097524193, + "y": 1540.6646169450064, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 128.06196234791332, + "height": 0.2680274478566389, + "seed": 744054659, + "groupIds": [ + "trbBqTUQZ8hVyEHwhsPIS" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 128.06196234791332, + -0.2680274478566389 + ] + ] + }, + { + "type": "text", + "version": 2022, + "versionNonce": 1869057763, + "isDeleted": false, + "id": "pWe_TqLEWak9ZMs-2H7zz", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 937.1046672064163, + "y": 1498.6396715011538, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 95, + "height": 25, + "seed": 1745915437, + "groupIds": [ + "trbBqTUQZ8hVyEHwhsPIS" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-j", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-j" + }, + { + "type": "diamond", + "version": 1776, + "versionNonce": 2047568397, + "isDeleted": false, + "id": "CxowGLLYEeGhRaFOmUk4P", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 251.5328735492903, + "y": 1507.15214422308, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 145, + "height": 105, + "seed": 510627181, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "wUVhER-pspmKNFqCwFdDW", + "type": "text" + }, + { + "id": "wUVhER-pspmKNFqCwFdDW", + "type": "text" + }, + { + "id": "wUVhER-pspmKNFqCwFdDW", + "type": "text" + }, + { + "id": "-r0GObbpXNWzCa57TLWTv", + "type": "arrow" + }, + { + "id": "wUVhER-pspmKNFqCwFdDW", + "type": "text" + }, + { + "id": "wUVhER-pspmKNFqCwFdDW", + "type": "text" + }, + { + "id": "wUVhER-pspmKNFqCwFdDW", + "type": "text" + }, + { + "type": "text", + "id": "wUVhER-pspmKNFqCwFdDW" + } + ], + "updated": 1642601376438 + }, + { + "type": "text", + "version": 1731, + "versionNonce": 239192387, + "isDeleted": false, + "id": "wUVhER-pspmKNFqCwFdDW", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 256.5328735492903, + "y": 1547.15214422308, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 135, + "height": 25, + "seed": 1814825955, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601376438, + "fontSize": 20, + "fontFamily": 1, + "text": "Tendermint", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CxowGLLYEeGhRaFOmUk4P", + "originalText": "Tendermint" + }, + { + "type": "arrow", + "version": 4199, + "versionNonce": 2046117219, + "isDeleted": false, + "id": "3ImxJI5H1IhgvS85qKlh1", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 548.4045083034616, + "y": 1560.3823971655374, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 117.80814515172608, + "height": 1.2723534635447322, + "seed": 1163220941, + "groupIds": [ + "LrWRbUyeQLT9OV6pnT1k8" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601371578, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -117.80814515172608, + 1.2723534635447322 + ] + ] + }, + { + "type": "text", + "version": 2558, + "versionNonce": 1056339533, + "isDeleted": false, + "id": "6GQox3CC4___t_Car9og8", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 440.1022562045864, + "y": 1516.294608718219, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 95, + "height": 25, + "seed": 1730582403, + "groupIds": [ + "LrWRbUyeQLT9OV6pnT1k8" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601371578, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-j", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-j" + }, + { + "type": "text", + "version": 1926, + "versionNonce": 1455869955, + "isDeleted": false, + "id": "n_apeqqeSuAXb8Aa_VqFx", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 733.2067914294267, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 158, + "height": 25, + "seed": 785185293, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "dYJRFcc1PLcSHVaOF3szx", + "type": "arrow" + } + ], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "init redelegate-1", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "init redelegate-1" + }, + { + "type": "text", + "version": 2005, + "versionNonce": 510618979, + "isDeleted": false, + "id": "yuH8tjvqZiQpXEO6g4Dfb", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 733.2067914294267, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 219, + "height": 25, + "seed": 740374851, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "" + }, + { + "type": "arrow", + "version": 2939, + "versionNonce": 728991075, + "isDeleted": false, + "id": "M5qfHpuAKGd2joPo_LidE", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 921.4377097524193, + "y": 757.6245265623885, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 129.0619623479132, + "height": 0.27011154965987316, + "seed": 211562605, + "groupIds": [ + "52U-6lK1W6brXq10aCVDA" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 129.0619623479132, + -0.27011154965987316 + ] + ] + }, + { + "type": "text", + "version": 1859, + "versionNonce": 461125197, + "isDeleted": false, + "id": "0Wj-qDmmfdRHFyIB8pqt3", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 928.3546672064163, + "y": 715.5974970167337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 114, + "height": 25, + "seed": 1053759715, + "groupIds": [ + "52U-6lK1W6brXq10aCVDA" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "fontSize": 20, + "fontFamily": 1, + "text": "StakingHook", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "StakingHook" + }, + { + "type": "arrow", + "version": 3485, + "versionNonce": 306372867, + "isDeleted": false, + "id": "0v7hh7uxixdfVpYjaX0IN", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1047.8654006842082, + "y": 1404.7895225336572, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 126.96037696966164, + "height": 0.24647998429350082, + "seed": 1121770893, + "groupIds": [ + "bzgS7UIMLtmHiz7NOxjpS" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -126.96037696966164, + 0.24647998429350082 + ] + ] + }, + { + "type": "text", + "version": 2446, + "versionNonce": 1352262829, + "isDeleted": false, + "id": "2gQDdpyI5F1fliwPoB914", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 933.0323581382052, + "y": 1337.7682859282097, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 117, + "height": 50, + "seed": 202591683, + "groupIds": [ + "bzgS7UIMLtmHiz7NOxjpS" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "fontSize": 20, + "fontFamily": 1, + "text": "redelegate-1\nmatured", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "redelegate-1\nmatured" + }, + { + "type": "rectangle", + "version": 1652, + "versionNonce": 1418907213, + "isDeleted": false, + "id": "-L4r_-m6RbrGgavC67Rjk", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 1526.40214422308, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 282, + "height": 44.99999999999999, + "seed": 101774467, + "groupIds": [ + "BIN_XiQ90fjv_AvqHTY2r" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "id": "wiNk7YxLC6w3qcdxfA5HM", + "type": "arrow" + }, + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "type": "text" + }, + { + "type": "text", + "id": "Xsb8ZrPkxJ7fF3p7A30aR" + } + ], + "updated": 1642600919620 + }, + { + "type": "text", + "version": 1694, + "versionNonce": 226609411, + "isDeleted": false, + "id": "Xsb8ZrPkxJ7fF3p7A30aR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1104.9216781417922, + "y": 1536.40214422308, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 272, + "height": 25, + "seed": 1460193581, + "groupIds": [ + "BIN_XiQ90fjv_AvqHTY2r" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "-L4r_-m6RbrGgavC67Rjk", + "originalText": "EndBlock" + }, + { + "type": "arrow", + "version": 4832, + "versionNonce": 541089133, + "isDeleted": false, + "id": "M5sZD3idFu959njYfEyeu", + "fillStyle": "hachure", + "strokeWidth": 4, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 6.277329793107594, + "x": 876.2468575020056, + "y": 1214.4108870905281, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "width": 0.04088500122713867, + "height": 446.6102100653302, + "seed": 1822069859, + "groupIds": [ + "F-MSJHdtVFQVUvZCVH0mb" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635408, + "startBinding": { + "elementId": "kdNbiNehK3QVI1DL8BGYt", + "focus": 0.10816135727922097, + "gap": 6.109673614163796 + }, + "endBinding": { + "elementId": "QXlbO191aqO2Ebca6nJSm", + "focus": -0.09325154026316189, + "gap": 4.731977813937419 + }, + "lastCommittedPoint": null, + "startArrowhead": "bar", + "endArrowhead": "bar", + "points": [ + [ + 0, + 0 + ], + [ + -0.04088500122713867, + 446.6102100653302 + ] + ] + }, + { + "type": "text", + "version": 2094, + "versionNonce": 2010451693, + "isDeleted": false, + "id": "BsxGg6VO6rGscqezmTejP", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 770.8921896412048, + "y": 1367.6521442230799, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 86, + "height": 50, + "seed": 1038528611, + "groupIds": [ + "_3gCHPt_YFY_m1npu2XJ5" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600882925, + "fontSize": 20, + "fontFamily": 1, + "text": "unbonding\nperiod", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "unbonding\nperiod" + }, + { + "type": "rectangle", + "version": 2490, + "versionNonce": 126142339, + "isDeleted": false, + "id": "QXlbO191aqO2Ebca6nJSm", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 422.37409961491886, + "y": 1665.7493664453023, + "strokeColor": "#1864ab", + "backgroundColor": "#1864ab", + "width": 1005.0833333333333, + "height": 162.5555555555557, + "seed": 27175747, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "DURyamuWvIhE5o-GLqnvp", + "type": "arrow" + }, + { + "id": "-sQ1lqt81ejZKXt6Q2HFf", + "type": "arrow" + }, + { + "id": "gMMtc7H_hFXaSquI_JbUz", + "type": "arrow" + }, + { + "id": "qUiA0J-sfT84YpVQWlEot", + "type": "arrow" + }, + { + "id": "jxiIfnYuV__VAbb-JgmY7", + "type": "arrow" + }, + { + "id": "cFz81tlJ2NMZiYzWVMuf6", + "type": "arrow" + }, + { + "id": "M5sZD3idFu959njYfEyeu", + "type": "arrow" + } + ], + "updated": 1642600635408 + }, + { + "type": "rectangle", + "version": 1941, + "versionNonce": 370399139, + "isDeleted": false, + "id": "mpRpGxyyho1lobPdtJ75y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 606.6064753554905, + "y": 1690.9576997786353, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 253.24999999999997, + "height": 117.50000000000001, + "seed": 1835458157, + "groupIds": [ + "JrgL8elQW7Dq3Q6PWzPuU" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "pIw5JMoColGr9m_qovMhF", + "type": "text" + }, + { + "id": "pIw5JMoColGr9m_qovMhF", + "type": "text" + }, + { + "id": "pIw5JMoColGr9m_qovMhF", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "pIw5JMoColGr9m_qovMhF", + "type": "text" + }, + { + "id": "pIw5JMoColGr9m_qovMhF", + "type": "text" + }, + { + "id": "pIw5JMoColGr9m_qovMhF", + "type": "text" + }, + { + "id": "cFz81tlJ2NMZiYzWVMuf6", + "type": "arrow" + }, + { + "type": "text", + "id": "pIw5JMoColGr9m_qovMhF" + } + ], + "updated": 1642600868111 + }, + { + "type": "text", + "version": 2042, + "versionNonce": 1735469069, + "isDeleted": false, + "id": "pIw5JMoColGr9m_qovMhF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 611.6064753554905, + "y": 1699.7076997786353, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 243.24999999999997, + "height": 100, + "seed": 667831011, + "groupIds": [ + "JrgL8elQW7Dq3Q6PWzPuU" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600868111, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock\n- compute updates-k\n- ! cannot complete \nundelegate-2", + "baseline": 93, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "mpRpGxyyho1lobPdtJ75y", + "originalText": "EndBlock\n- compute updates-k\n- ! cannot complete undelegate-2" + }, + { + "type": "arrow", + "version": 3196, + "versionNonce": 1452562573, + "isDeleted": false, + "id": "UC5ZzJxhmHYCs7KEr8mvo", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 919.134785107629, + "y": 1768.664616945006, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 128.06196234791332, + "height": 0.2680274478566389, + "seed": 993691853, + "groupIds": [ + "GK0iuN3yOAXSK5NbTvgTY" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 128.06196234791332, + -0.2680274478566389 + ] + ] + }, + { + "type": "text", + "version": 2119, + "versionNonce": 1306854083, + "isDeleted": false, + "id": "73rDFdHpWyiGnIX69Rmqj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 933.0517425616258, + "y": 1726.6396715011533, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 98, + "height": 25, + "seed": 304674435, + "groupIds": [ + "GK0iuN3yOAXSK5NbTvgTY" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-k", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-k" + }, + { + "type": "diamond", + "version": 1876, + "versionNonce": 1474429581, + "isDeleted": false, + "id": "_ebS12dRowA_tQI8j45CY", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 248.9799489044999, + "y": 1738.1521442230796, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 145, + "height": 105, + "seed": 971630381, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "id": "-r0GObbpXNWzCa57TLWTv", + "type": "arrow" + }, + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "id": "E673Ak76SUOSt77Qi8bsE", + "type": "text" + }, + { + "type": "text", + "id": "E673Ak76SUOSt77Qi8bsE" + } + ], + "updated": 1642601420357 + }, + { + "type": "text", + "version": 1830, + "versionNonce": 287242435, + "isDeleted": false, + "id": "E673Ak76SUOSt77Qi8bsE", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 253.9799489044999, + "y": 1778.1521442230796, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 135, + "height": 25, + "seed": 527248931, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601420358, + "fontSize": 20, + "fontFamily": 1, + "text": "Tendermint", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_ebS12dRowA_tQI8j45CY", + "originalText": "Tendermint" + }, + { + "type": "arrow", + "version": 4294, + "versionNonce": 1325148397, + "isDeleted": false, + "id": "jRnLv9fNuoznNAaRsNZgk", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 545.8515836586712, + "y": 1788.382397165537, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 117.80814515172608, + "height": 1.2723534635447322, + "seed": 1004435853, + "groupIds": [ + "YrqVjtQGzKIAhQyl39Kp9" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601420358, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -117.80814515172608, + 1.2723534635447322 + ] + ] + }, + { + "type": "text", + "version": 2655, + "versionNonce": 1290332259, + "isDeleted": false, + "id": "wB_7P6AInvDavIoMbkl8E", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 436.04933155979603, + "y": 1744.2946087182186, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 98, + "height": 25, + "seed": 1384739267, + "groupIds": [ + "YrqVjtQGzKIAhQyl39Kp9" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601420358, + "fontSize": 20, + "fontFamily": 1, + "text": "updates-k", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "updates-k" + }, + { + "type": "rectangle", + "version": 1749, + "versionNonce": 1528659117, + "isDeleted": false, + "id": "jFpSjGFb3cu0a0QbNucLK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 1754.4021442230796, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 282, + "height": 44.99999999999999, + "seed": 173129709, + "groupIds": [ + "6OEOlibeQD_u8MFuWagZW" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "9c_Yl7A91iXAKKFtnu4tQ", + "type": "arrow" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "wiNk7YxLC6w3qcdxfA5HM", + "type": "arrow" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "id": "XTAVne28eQ084ExAjqSpY", + "type": "text" + }, + { + "type": "text", + "id": "XTAVne28eQ084ExAjqSpY" + } + ], + "updated": 1642600919620 + }, + { + "type": "text", + "version": 1790, + "versionNonce": 218607779, + "isDeleted": false, + "id": "XTAVne28eQ084ExAjqSpY", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1104.9216781417922, + "y": 1764.4021442230796, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 272, + "height": 25, + "seed": 1285308771, + "groupIds": [ + "6OEOlibeQD_u8MFuWagZW" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "EndBlock", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": "jFpSjGFb3cu0a0QbNucLK", + "originalText": "EndBlock" + }, + { + "type": "text", + "version": 1407, + "versionNonce": 975855725, + "isDeleted": false, + "id": "TwCHKr0JNGlDxzOskcB_5", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1464.0651425264014, + "y": 1848.5121948934466, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 132, + "height": 50, + "seed": 990666029, + "groupIds": [ + "4SBCEOxhGjEbzBGnyMBcq" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "arrow", + "id": "UdbNDUj-KimwGAw0JZmAm" + } + ], + "updated": 1642600635409, + "fontSize": 20, + "fontFamily": 1, + "text": " all ACKs for\nVSCPacket-1", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": " all ACKs for\nVSCPacket-1" + }, + { + "type": "arrow", + "version": 2258, + "versionNonce": 477882595, + "isDeleted": false, + "id": "3CUepvm0tgsMnFtYyBDqg", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1584.935046473166, + "y": 1915.966075357178, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 123.56280714681475, + "height": 0.8260181955356529, + "seed": 274012195, + "groupIds": [ + "4SBCEOxhGjEbzBGnyMBcq" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -123.56280714681475, + 0.8260181955356529 + ] + ] + }, + { + "type": "text", + "version": 2080, + "versionNonce": 1828937485, + "isDeleted": false, + "id": "QSiOaQm7YoHL3FHb5xGQR", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1099.9216781417922, + "y": 1888.90214422308, + "strokeColor": "#000000", + "backgroundColor": "#e67700", + "width": 240, + "height": 50, + "seed": 239799565, + "groupIds": [ + "DpRuLZsRaxufqGOHn5Hhe" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + } + ], + "updated": 1642600919620, + "fontSize": 20, + "fontFamily": 1, + "text": "register VSC2 maturity\nfrom all consumer chains", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "register VSC2 maturity\nfrom all consumer chains" + }, + { + "type": "arrow", + "version": 3429, + "versionNonce": 460510339, + "isDeleted": false, + "id": "S32vBZg5ju-5zAgb6D7qY", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1047.8654006842082, + "y": 1937.8097612767697, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 126.96037696966164, + "height": 0.24647998429350082, + "seed": 1358265827, + "groupIds": [ + "O0RfEkM6R98ddCqKabsm1" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -126.96037696966164, + 0.24647998429350082 + ] + ] + }, + { + "type": "text", + "version": 2382, + "versionNonce": 691333421, + "isDeleted": false, + "id": "NJ3kaRH3ykxaEPbuL6kwI", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 928.0323581382052, + "y": 1870.7885246713222, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 127, + "height": 50, + "seed": 26478029, + "groupIds": [ + "O0RfEkM6R98ddCqKabsm1" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "fontSize": 20, + "fontFamily": 1, + "text": "undelegate-2\nmatured", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "undelegate-2\nmatured" + }, + { + "id": "FlycApHxvNhc7EzTtDfVw", + "type": "text", + "x": 606.6064753554905, + "y": 1913.90214422308, + "width": 220, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 4, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 334653923, + "version": 81, + "versionNonce": 1637804867, + "isDeleted": false, + "boundElements": null, + "updated": 1642600868111, + "text": "complete undelegate-2", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "complete undelegate-2" + }, + { + "type": "text", + "version": 1473, + "versionNonce": 1078215149, + "isDeleted": false, + "id": "4uwRrBf63CyHdZgytHPgP", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1461.445910951049, + "y": 1508.7613874951103, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 120, + "height": 25, + "seed": 1561641411, + "groupIds": [ + "v10k9qiCW2ZlkFRAoU0v7" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600635409, + "fontSize": 20, + "fontFamily": 1, + "text": "VSCPacket-j", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "VSCPacket-j" + }, + { + "type": "arrow", + "version": 2396, + "versionNonce": 109764451, + "isDeleted": false, + "id": "LAJit7p8fwSjpli354rmQ", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1465.1319416280767, + "y": 1554.2214723796214, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 121.62386851542169, + "height": 1.693510304863139, + "seed": 1021538285, + "groupIds": [ + "v10k9qiCW2ZlkFRAoU0v7" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 121.62386851542169, + -1.693510304863139 + ] + ] + }, + { + "type": "text", + "version": 1528, + "versionNonce": 597654605, + "isDeleted": false, + "id": "LcE9oP3jo0SV72kN6WVl7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1461.445910951049, + "y": 1735.9042446379674, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 123, + "height": 25, + "seed": 2051265795, + "groupIds": [ + "bCkx_NwLyCOUyNPR2c83i" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642600635409, + "fontSize": 20, + "fontFamily": 1, + "text": "VSCPacket-k", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "VSCPacket-k" + }, + { + "type": "arrow", + "version": 2449, + "versionNonce": 90110723, + "isDeleted": false, + "id": "aiXbgSJSQTjiViNaUGmMf", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1466.6319416280767, + "y": 1781.3643295224786, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 121.62386851542169, + "height": 1.693510304863139, + "seed": 475148461, + "groupIds": [ + "bCkx_NwLyCOUyNPR2c83i" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642600635409, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 121.62386851542169, + -1.693510304863139 + ] + ] + }, + { + "type": "rectangle", + "version": 1951, + "versionNonce": 1359653507, + "isDeleted": false, + "id": "lWhZF3KHnueXQn1g7preT", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 1632.307976640662, + "y": 488.6342870802232, + "strokeColor": "#e67700", + "backgroundColor": "#e67700", + "width": 22.857142857142406, + "height": 1489.2857142857147, + "seed": 1833606115, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "umXKeqaL3A2gsELJxrAno", + "type": "arrow" + }, + { + "id": "JdK3ZV05Kgdm0t1Wbwel3", + "type": "arrow" + }, + { + "id": "Hg015OniyGFjM7QYWPufU", + "type": "arrow" + }, + { + "id": "1qXvD7xEgjTf4VUM5wDV3", + "type": "arrow" + }, + { + "id": "HHI5Vc7fqPn6VuRzXoIaY", + "type": "arrow" + } + ], + "updated": 1642601108975 + }, + { + "type": "text", + "version": 1364, + "versionNonce": 450358979, + "isDeleted": false, + "id": "lvwKtrmcLxqDV3LzwuTSz", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1472.9030270444368, + "y": 511.61853035225386, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 105, + "height": 25, + "seed": 771374435, + "groupIds": [ + "Qi942Aq3vXaCC_NBM6xKv" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601084994, + "fontSize": 20, + "fontFamily": 1, + "text": "VSCPacket", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "VSCPacket" + }, + { + "type": "arrow", + "version": 2292, + "versionNonce": 1465624547, + "isDeleted": false, + "id": "5zz8ESfQcxy3owCiP9VT3", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1469.089057721465, + "y": 557.0786152367646, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 121.62386851542169, + "height": 1.693510304863139, + "seed": 1943862861, + "groupIds": [ + "Qi942Aq3vXaCC_NBM6xKv" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1642601080289, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 121.62386851542169, + -1.693510304863139 + ] + ] + }, + { + "type": "rectangle", + "version": 2071, + "versionNonce": 439186221, + "isDeleted": false, + "id": "Ov7Nt-iR2V6wD_0fP-mUY", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 1672.593690926376, + "y": 488.6342870802232, + "strokeColor": "#e67700", + "backgroundColor": "#e67700", + "width": 22.857142857142406, + "height": 1489.2857142857147, + "seed": 692385091, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "umXKeqaL3A2gsELJxrAno", + "type": "arrow" + }, + { + "id": "JdK3ZV05Kgdm0t1Wbwel3", + "type": "arrow" + }, + { + "id": "Hg015OniyGFjM7QYWPufU", + "type": "arrow" + }, + { + "id": "1qXvD7xEgjTf4VUM5wDV3", + "type": "arrow" + }, + { + "id": "HHI5Vc7fqPn6VuRzXoIaY", + "type": "arrow" + } + ], + "updated": 1642601108975 + }, + { + "type": "rectangle", + "version": 2044, + "versionNonce": 2146984483, + "isDeleted": false, + "id": "zDLZUtrO8Lij6Z4ctMo67", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 20, + "angle": 0, + "x": 1711.1651194978049, + "y": 488.6342870802231, + "strokeColor": "#e67700", + "backgroundColor": "#e67700", + "width": 22.857142857142406, + "height": 1489.2857142857147, + "seed": 1478186211, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Mi1I3PpLY1MQGIPxt7fC1", + "type": "arrow" + }, + { + "id": "umXKeqaL3A2gsELJxrAno", + "type": "arrow" + }, + { + "id": "JdK3ZV05Kgdm0t1Wbwel3", + "type": "arrow" + }, + { + "id": "Hg015OniyGFjM7QYWPufU", + "type": "arrow" + }, + { + "id": "1qXvD7xEgjTf4VUM5wDV3", + "type": "arrow" + }, + { + "id": "HHI5Vc7fqPn6VuRzXoIaY", + "type": "arrow" + } + ], + "updated": 1642601108975 + }, + { + "type": "text", + "version": 933, + "versionNonce": 257253005, + "isDeleted": false, + "id": "BF8omtpN5J817AOrrJinc", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 465.5222623549474, + "y": 637.8485727945094, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 67, + "height": 25, + "seed": 156612141, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601398863, + "fontSize": 20, + "fontFamily": 1, + "text": "Block 1", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Block 1" + }, + { + "type": "text", + "version": 904, + "versionNonce": 1034784707, + "isDeleted": false, + "id": "EXAbJSyrRTJfdeB6ZeE9e", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 461.7365480692332, + "y": 978.8485727945097, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 76, + "height": 25, + "seed": 284738093, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601384686, + "fontSize": 20, + "fontFamily": 1, + "text": "Block 2", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Block 2" + }, + { + "type": "text", + "version": 944, + "versionNonce": 186422403, + "isDeleted": false, + "id": "EeggQ3YD-incj8Aa12fst", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 458.5936909263761, + "y": 1453.4200013659383, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 68, + "height": 25, + "seed": 1671725389, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601379543, + "fontSize": 20, + "fontFamily": 1, + "text": "Block j", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Block j" + }, + { + "type": "text", + "version": 992, + "versionNonce": 268758787, + "isDeleted": false, + "id": "dmYqu29T9lOTUDFFjP5dR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 464.2365480692332, + "y": 1683.2771442230812, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 71, + "height": 25, + "seed": 2007237869, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1642601409906, + "fontSize": 20, + "fontFamily": 1, + "text": "Block k", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Block k" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/spec/app/ics-028-cross-chain-validation/figures/ccv-unbonding-overview.png b/spec/app/ics-028-cross-chain-validation/figures/ccv-unbonding-overview.png new file mode 100644 index 000000000..ebc9e5366 Binary files /dev/null and b/spec/app/ics-028-cross-chain-validation/figures/ccv-unbonding-overview.png differ diff --git a/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.excalidraw b/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.excalidraw index aeedc2596..95a53d64c 100644 --- a/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.excalidraw +++ b/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.excalidraw @@ -5,8 +5,8 @@ "elements": [ { "type": "rectangle", - "version": 818, - "versionNonce": 1168306251, + "version": 842, + "versionNonce": 1770996696, "isDeleted": false, "id": "Lzfre0sNq-j_kaO2bid-V", "fillStyle": "hachure", @@ -15,11 +15,11 @@ "roughness": 1, "opacity": 20, "angle": 0, - "x": 1029.80728608124, + "x": 1033.80728608124, "y": 370.7566693985417, "strokeColor": "#e67700", "backgroundColor": "#e67700", - "width": 299.9999999999998, + "width": 236.99999999999977, "height": 425.0000000000002, "seed": 875787883, "groupIds": [], @@ -44,14 +44,18 @@ { "id": "1qXvD7xEgjTf4VUM5wDV3", "type": "arrow" + }, + { + "id": "0s6Gf0lhs4RxTdpZNUqsV", + "type": "arrow" } ], - "updated": 1639738032458 + "updated": 1642602779277 }, { "type": "rectangle", - "version": 757, - "versionNonce": 1380852165, + "version": 820, + "versionNonce": 292777896, "isDeleted": false, "id": "tiEtkt2XHCbZp9ZIwwoVN", "fillStyle": "hachure", @@ -60,11 +64,11 @@ "roughness": 1, "opacity": 20, "angle": 0, - "x": 562.0850638590175, + "x": 631.0850638590175, "y": 364.8677805096529, "strokeColor": "#1864ab", "backgroundColor": "#1864ab", - "width": 298.33333333333326, + "width": 221.33333333333323, "height": 430.55555555555543, "seed": 1114932363, "groupIds": [], @@ -91,12 +95,12 @@ "type": "arrow" } ], - "updated": 1639737978946 + "updated": 1642602680924 }, { "type": "text", - "version": 447, - "versionNonce": 880535685, + "version": 705, + "versionNonce": 1417474008, "isDeleted": false, "id": "DcYomqVwJx0rUjMvf5S5b", "fillStyle": "hachure", @@ -105,8 +109,8 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 770.5555555555554, - "y": 263.77777777777777, + "x": 780.5555555555554, + "y": 266.77777777777777, "strokeColor": "#000000", "backgroundColor": "transparent", "width": 391, @@ -115,7 +119,7 @@ "groupIds": [], "strokeSharpness": "sharp", "boundElements": [], - "updated": 1639738049788, + "updated": 1642602732507, "fontSize": 28, "fontFamily": 1, "text": "CCV - Validator Set Update", @@ -127,8 +131,8 @@ }, { "type": "rectangle", - "version": 2207, - "versionNonce": 1255900293, + "version": 2331, + "versionNonce": 1999724712, "isDeleted": false, "id": "LZ-zpiSZrRKjK21SSB5me", "fillStyle": "hachure", @@ -137,11 +141,11 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 757.6961749701286, - "y": 419.36778050965296, + "x": 664.6961749701286, + "y": 420.36778050965296, "strokeColor": "#495057", "backgroundColor": "transparent", - "width": 60.33333333333322, + "width": 154.3333333333333, "height": 343.3333333333332, "seed": 689622821, "groupIds": [], @@ -203,17 +207,21 @@ "id": "soJdQZVXQySCwfBjVwVtd", "type": "arrow" }, + { + "id": "pFUtKITgaRpYy9le7pyUv", + "type": "arrow" + }, { "id": "0s6Gf0lhs4RxTdpZNUqsV", "type": "arrow" } ], - "updated": 1639737943282 + "updated": 1642602647942 }, { "type": "rectangle", - "version": 2244, - "versionNonce": 1722365067, + "version": 2381, + "versionNonce": 57363624, "isDeleted": false, "id": "bV7tck2JEoFVq7rV8HSWu", "fillStyle": "hachure", @@ -222,11 +230,11 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1066.9739527479064, + "x": 1070.9739527479064, "y": 426.03444717631953, "strokeColor": "#495057", "backgroundColor": "transparent", - "width": 60.33333333333322, + "width": 172.33333333333331, "height": 344.4444444444449, "seed": 1430831243, "groupIds": [], @@ -281,7 +289,11 @@ "type": "arrow" }, { - "id": "soJdQZVXQySCwfBjVwVtd", + "id": "0s6Gf0lhs4RxTdpZNUqsV", + "type": "arrow" + }, + { + "id": "HHI5Vc7fqPn6VuRzXoIaY", "type": "arrow" }, { @@ -289,11 +301,11 @@ "type": "arrow" }, { - "id": "0s6Gf0lhs4RxTdpZNUqsV", + "id": "soJdQZVXQySCwfBjVwVtd", "type": "arrow" } ], - "updated": 1639737885278 + "updated": 1642602774327 }, { "type": "text", @@ -329,8 +341,8 @@ }, { "type": "arrow", - "version": 1307, - "versionNonce": 205471595, + "version": 2172, + "versionNonce": 477269208, "isDeleted": false, "id": "soJdQZVXQySCwfBjVwVtd", "fillStyle": "hachure", @@ -339,26 +351,26 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 827.9648271771262, - "y": 456.76727084030205, + "x": 824.4912274560614, + "y": 456.28099618447334, "strokeColor": "#495057", "backgroundColor": "transparent", - "width": 230.2388007650577, - "height": 1.199251209361762, + "width": 239.85269160961423, + "height": 0.4292804414828879, "seed": 888195723, "groupIds": [], "strokeSharpness": "round", "boundElements": [], - "updated": 1639738081704, + "updated": 1642602774327, "startBinding": { "elementId": "LZ-zpiSZrRKjK21SSB5me", - "focus": -0.7802079726658296, - "gap": 9.9353188736643 + "gap": 5.461719152599573, + "focus": -0.7893003201774047 }, "endBinding": { "elementId": "bV7tck2JEoFVq7rV8HSWu", - "focus": 0.8289360654308046, - "gap": 8.770324805722453 + "gap": 6.630033682230661, + "focus": 0.8270921041462953 }, "lastCommittedPoint": null, "startArrowhead": "triangle", @@ -369,15 +381,15 @@ 0 ], [ - 230.2388007650577, - -1.199251209361762 + 239.85269160961423, + -0.4292804414828879 ] ] }, { "type": "text", - "version": 1277, - "versionNonce": 1778767302, + "version": 1455, + "versionNonce": 1779252904, "isDeleted": false, "id": "fYIVRw6i_u72mXigtRsA1", "fillStyle": "hachure", @@ -386,16 +398,14 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 611.641637493901, - "y": 490.7765630941593, + "x": 677.7013096558908, + "y": 501.7765630941593, "strokeColor": "#000000", "backgroundColor": "#e67700", "width": 113, "height": 25, "seed": 112951915, - "groupIds": [ - "K8nZE1MmcDWYA2kWmR_eG" - ], + "groupIds": [], "strokeSharpness": "sharp", "boundElements": [ { @@ -403,7 +413,7 @@ "type": "arrow" } ], - "updated": 1642169450939, + "updated": 1642602660149, "fontSize": 19.860178682944078, "fontFamily": 1, "text": "provide VSC", @@ -413,51 +423,10 @@ "containerId": null, "originalText": "provide VSC" }, - { - "type": "arrow", - "version": 3884, - "versionNonce": 1769463531, - "isDeleted": false, - "id": "jxiIfnYuV__VAbb-JgmY7", - "fillStyle": "hachure", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 607.3900197173294, - "y": 533.5145534807024, - "strokeColor": "#495057", - "backgroundColor": "#ced4da", - "width": 130.15389165851616, - "height": 0.7185972546147923, - "seed": 1988390341, - "groupIds": [ - "K8nZE1MmcDWYA2kWmR_eG" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1639737810404, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "triangle", - "points": [ - [ - 0, - 0 - ], - [ - 130.15389165851616, - -0.7185972546147923 - ] - ] - }, { "type": "text", - "version": 1149, - "versionNonce": 1883141413, + "version": 1226, + "versionNonce": 1935849176, "isDeleted": false, "id": "SX9_IjHVCeJsw5zjihNjk", "fillStyle": "hachure", @@ -466,16 +435,14 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 605.7013096558908, - "y": 621.3587865243416, + "x": 677.7013096558908, + "y": 684.3587865243416, "strokeColor": "#000000", "backgroundColor": "#e67700", "width": 129, "height": 52, "seed": 786765227, - "groupIds": [ - "hv2luiwiY1Fn7podKPU9I" - ], + "groupIds": [], "strokeSharpness": "sharp", "boundElements": [ { @@ -483,7 +450,7 @@ "type": "arrow" } ], - "updated": 1639737972442, + "updated": 1642602651313, "fontSize": 20, "fontFamily": 1, "text": "register \nVSC maturity", @@ -493,51 +460,10 @@ "containerId": null, "originalText": "register \nVSC maturity" }, - { - "type": "arrow", - "version": 3542, - "versionNonce": 283810731, - "isDeleted": false, - "id": "jxc2-4ezQeQEtWLvEmWmn", - "fillStyle": "hachure", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 739.7928637114015, - "y": 691.4171997739187, - "strokeColor": "#495057", - "backgroundColor": "#ced4da", - "width": 142.84735305604875, - "height": 1, - "seed": 1843441285, - "groupIds": [ - "hv2luiwiY1Fn7podKPU9I" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1639737972442, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "triangle", - "points": [ - [ - 0, - 0 - ], - [ - -142.84735305604875, - -1 - ] - ] - }, { "type": "text", - "version": 1383, - "versionNonce": 2037642053, + "version": 1487, + "versionNonce": 694785704, "isDeleted": false, "id": "NQpfW4a7Hwtvr-8EPhJwk", "fillStyle": "hachure", @@ -546,24 +472,26 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1146.3083041605673, - "y": 519.2210075386038, + "x": 1085.2505196648644, + "y": 532.2210075386038, "strokeColor": "#000000", "backgroundColor": "#e67700", "width": 93, "height": 26, "seed": 38614437, - "groupIds": [ - "i37LDlVmVV-RTaLNpmAyT" - ], + "groupIds": [], "strokeSharpness": "sharp", "boundElements": [ { "id": "Mi1I3PpLY1MQGIPxt7fC1", "type": "arrow" + }, + { + "id": "dYJRFcc1PLcSHVaOF3szx", + "type": "arrow" } ], - "updated": 1639738027560, + "updated": 1642602790741, "fontSize": 19.860178682944078, "fontFamily": 1, "text": "apply VSC", @@ -573,51 +501,10 @@ "containerId": null, "originalText": "apply VSC" }, - { - "type": "arrow", - "version": 4028, - "versionNonce": 2120978315, - "isDeleted": false, - "id": "HHI5Vc7fqPn6VuRzXoIaY", - "fillStyle": "hachure", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 1145.0566863839958, - "y": 561.9589979251468, - "strokeColor": "#495057", - "backgroundColor": "#ced4da", - "width": 112.37753627426332, - "height": 0.14750106233304905, - "seed": 2089165611, - "groupIds": [ - "i37LDlVmVV-RTaLNpmAyT" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1639738027560, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "triangle", - "points": [ - [ - 0, - 0 - ], - [ - 112.37753627426332, - -0.14750106233304905 - ] - ] - }, { "type": "text", - "version": 943, - "versionNonce": 742587973, + "version": 972, + "versionNonce": 1300620200, "isDeleted": false, "id": "hlLx6LN5_BUDJUO2t7mzz", "fillStyle": "hachure", @@ -626,8 +513,8 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 733.3628416367951, - "y": 381.0344471763196, + "x": 686.3628416367951, + "y": 383.0344471763196, "strokeColor": "#000000", "backgroundColor": "transparent", "width": 112, @@ -636,7 +523,7 @@ "groupIds": [], "strokeSharpness": "round", "boundElements": [], - "updated": 1639737575703, + "updated": 1642602697708, "fontSize": 20, "fontFamily": 1, "text": "CCV Module", @@ -648,8 +535,8 @@ }, { "type": "text", - "version": 554, - "versionNonce": 2008417445, + "version": 1043, + "versionNonce": 1266297256, "isDeleted": false, "id": "yqi6dzvpzblq17ysowkTo", "fillStyle": "hachure", @@ -658,8 +545,8 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 646.9183971923508, - "y": 326.03444717631965, + "x": 639.9183971923508, + "y": 334.03444717631965, "strokeColor": "#364fc7", "backgroundColor": "transparent", "width": 138, @@ -668,7 +555,7 @@ "groupIds": [], "strokeSharpness": "sharp", "boundElements": [], - "updated": 1639738044934, + "updated": 1642602718526, "fontSize": 20, "fontFamily": 1, "text": "Provider Chain", @@ -680,8 +567,8 @@ }, { "type": "text", - "version": 993, - "versionNonce": 321838219, + "version": 1057, + "versionNonce": 2103193304, "isDeleted": false, "id": "tLJ6siXC9VChVdOcHR37l", "fillStyle": "hachure", @@ -690,8 +577,8 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1052.2517305256843, - "y": 387.1455582874308, + "x": 1101.2517305256843, + "y": 391.1455582874308, "strokeColor": "#000000", "backgroundColor": "transparent", "width": 112, @@ -700,7 +587,7 @@ "groupIds": [], "strokeSharpness": "round", "boundElements": [], - "updated": 1639737605484, + "updated": 1642602785547, "fontSize": 20, "fontFamily": 1, "text": "CCV Module", @@ -712,8 +599,8 @@ }, { "type": "text", - "version": 1131, - "versionNonce": 1794981669, + "version": 1513, + "versionNonce": 1480211880, "isDeleted": false, "id": "Y19fC1uuzabCFyV0s97Ip", "fillStyle": "hachure", @@ -722,8 +609,8 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1106.4739527479067, - "y": 337.14555828743073, + "x": 1045.4739527479067, + "y": 338.14555828743073, "strokeColor": "#e67700", "backgroundColor": "transparent", "width": 148, @@ -732,7 +619,7 @@ "groupIds": [], "strokeSharpness": "sharp", "boundElements": [], - "updated": 1639738043115, + "updated": 1642602714807, "fontSize": 20, "fontFamily": 1, "text": "Consumer Chain", @@ -744,8 +631,8 @@ }, { "type": "text", - "version": 1307, - "versionNonce": 2012879595, + "version": 1480, + "versionNonce": 88165288, "isDeleted": false, "id": "_72T1dsBHZpELeZ7ogywj", "fillStyle": "hachure", @@ -754,12 +641,12 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1152.2505196648644, - "y": 656.2274627737531, + "x": 1085.2505196648644, + "y": 672.2274627737531, "strokeColor": "#000000", "backgroundColor": "#e67700", "width": 129, - "height": 52, + "height": 50, "seed": 1106855979, "groupIds": [], "strokeSharpness": "sharp", @@ -767,61 +654,26 @@ { "id": "Mi1I3PpLY1MQGIPxt7fC1", "type": "arrow" + }, + { + "id": "dYJRFcc1PLcSHVaOF3szx", + "type": "arrow" } ], - "updated": 1639738011223, + "updated": 1642602790741, "fontSize": 20, "fontFamily": 1, "text": "notify \nVSC maturity", - "baseline": 44, + "baseline": 43, "textAlign": "center", "verticalAlign": "top", "containerId": null, "originalText": "notify \nVSC maturity" }, - { - "type": "arrow", - "version": 3677, - "versionNonce": 644692101, - "isDeleted": false, - "id": "XoX-hR8ww2fkzA2itN0ni", - "fillStyle": "hachure", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 1175.6410803550361, - "y": 667.6706739726183, - "strokeColor": "#495057", - "backgroundColor": "#ced4da", - "width": 104.36858191293186, - "height": 0.16257572706570045, - "seed": 1799283717, - "groupIds": [], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1639738005691, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "triangle", - "points": [ - [ - 0, - 0 - ], - [ - -104.36858191293186, - -0.16257572706570045 - ] - ] - }, { "type": "text", - "version": 751, - "versionNonce": 1655403435, + "version": 933, + "versionNonce": 661443496, "isDeleted": false, "id": "USOjGct8Q4FclCqyREAjw", "fillStyle": "hachure", @@ -830,19 +682,17 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1093.4180655283808, - "y": 583.8332539375602, + "x": 1091.4180655283808, + "y": 592.8332539375602, "strokeColor": "#000000", "backgroundColor": "transparent", "width": 86, "height": 52, "seed": 1928733029, - "groupIds": [ - "TQm0hBeKsv0wgVtm-4fl4" - ], + "groupIds": [], "strokeSharpness": "sharp", "boundElements": [], - "updated": 1639737953138, + "updated": 1642602793045, "fontSize": 20, "fontFamily": 1, "text": "unbonding\nperiod", @@ -854,31 +704,37 @@ }, { "type": "arrow", - "version": 1038, - "versionNonce": 112668805, + "version": 1470, + "versionNonce": 1661510360, "isDeleted": false, "id": "dYJRFcc1PLcSHVaOF3szx", "fillStyle": "hachure", "strokeWidth": 2, - "strokeStyle": "solid", + "strokeStyle": "dashed", "roughness": 0, "opacity": 100, "angle": 0, - "x": 1079.9457793756937, - "y": 558.2437284418835, + "x": 1083.9873273042986, + "y": 674.787472319473, "strokeColor": "#000000", "backgroundColor": "#ced4da", - "width": 1.0563467444264916, - "height": 101.58143746887185, + "width": 0.2423078102508498, + "height": 109.44664752881295, "seed": 47081765, - "groupIds": [ - "TQm0hBeKsv0wgVtm-4fl4" - ], + "groupIds": [], "strokeSharpness": "round", "boundElements": [], - "updated": 1639737953138, - "startBinding": null, - "endBinding": null, + "updated": 1642602790741, + "startBinding": { + "elementId": "_72T1dsBHZpELeZ7ogywj", + "focus": -1.0179406248132712, + "gap": 1.2631923605658812 + }, + "endBinding": { + "elementId": "NQpfW4a7Hwtvr-8EPhJwk", + "focus": 1.0326950964223782, + "gap": 7.119817252056237 + }, "lastCommittedPoint": null, "startArrowhead": "bar", "endArrowhead": "bar", @@ -888,15 +744,15 @@ 0 ], [ - 1.0563467444264916, - 101.58143746887185 + -0.2423078102508498, + -109.44664752881295 ] ] }, { "type": "text", - "version": 708, - "versionNonce": 484556363, + "version": 725, + "versionNonce": 1364544424, "isDeleted": false, "id": "RzN1Ejg0DNhbMX38KakLy", "fillStyle": "hachure", @@ -905,8 +761,8 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 869.5850638590175, - "y": 504.923336065209, + "x": 875.5850638590175, + "y": 490.923336065209, "strokeColor": "#000000", "backgroundColor": "transparent", "width": 104, @@ -915,7 +771,7 @@ "groupIds": [], "strokeSharpness": "sharp", "boundElements": [], - "updated": 1639737822982, + "updated": 1642602567020, "fontSize": 20, "fontFamily": 1, "text": "VSCPacket", @@ -927,8 +783,8 @@ }, { "type": "text", - "version": 734, - "versionNonce": 1150499979, + "version": 760, + "versionNonce": 946448552, "isDeleted": false, "id": "sQR88kHWeEXVsXgq8udT2", "fillStyle": "hachure", @@ -938,7 +794,7 @@ "opacity": 100, "angle": 0, "x": 865.140619414573, - "y": 631.5900027318755, + "y": 656.5900027318755, "strokeColor": "#000000", "backgroundColor": "transparent", "width": 160, @@ -950,9 +806,13 @@ { "type": "arrow", "id": "UdbNDUj-KimwGAw0JZmAm" + }, + { + "id": "0s6Gf0lhs4RxTdpZNUqsV", + "type": "arrow" } ], - "updated": 1639738095313, + "updated": 1642602595082, "fontSize": 20, "fontFamily": 1, "text": " VSCPacket-ACK", @@ -964,8 +824,8 @@ }, { "type": "arrow", - "version": 1349, - "versionNonce": 546561963, + "version": 1901, + "versionNonce": 1446594520, "isDeleted": false, "id": "pFUtKITgaRpYy9le7pyUv", "fillStyle": "hachure", @@ -974,22 +834,26 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 834.2710945360454, - "y": 543.3834209497197, + "x": 824.0249181995255, + "y": 516.6028911169248, "strokeColor": "#495057", "backgroundColor": "#ced4da", - "width": 223.68812838986992, - "height": 9.194889183243276, + "width": 242.12081022232314, + "height": 30.99520266125478, "seed": 1819697989, "groupIds": [], "strokeSharpness": "round", "boundElements": [], - "updated": 1639737943282, - "startBinding": null, + "updated": 1642602774327, + "startBinding": { + "elementId": "LZ-zpiSZrRKjK21SSB5me", + "gap": 4.995409896063598, + "focus": -0.47343333675257726 + }, "endBinding": { "elementId": "bV7tck2JEoFVq7rV8HSWu", - "focus": 0.2540482168158336, - "gap": 9.014729821990954 + "gap": 4.8282243260578035, + "focus": 0.21245077762725106 }, "lastCommittedPoint": null, "startArrowhead": null, @@ -1000,15 +864,15 @@ 0 ], [ - 223.68812838986992, - 9.194889183243276 + 242.12081022232314, + 30.99520266125478 ] ] }, { "type": "arrow", - "version": 1410, - "versionNonce": 664121893, + "version": 2363, + "versionNonce": 1492869848, "isDeleted": false, "id": "0s6Gf0lhs4RxTdpZNUqsV", "fillStyle": "hachure", @@ -1017,26 +881,26 @@ "roughness": 1, "opacity": 100, "angle": 0, - "x": 1054.7490645492014, - "y": 669.4161730806497, + "x": 1063.5472546745837, + "y": 684.0659396918977, "strokeColor": "#495057", "backgroundColor": "#ced4da", - "width": 220.74579277912267, - "height": 10.675950532715547, + "width": 237.96419827484328, + "height": 23.35329422599807, "seed": 105495787, "groupIds": [], "strokeSharpness": "round", "boundElements": [], - "updated": 1639738019004, + "updated": 1642602774327, "startBinding": { "elementId": "bV7tck2JEoFVq7rV8HSWu", - "focus": -0.39790907943453063, - "gap": 12.224888198704889 + "gap": 7.426698073322591, + "focus": -0.4237049945547797 }, "endBinding": { "elementId": "LZ-zpiSZrRKjK21SSB5me", - "focus": 0.5273001796810546, - "gap": 15.973763466616901 + "gap": 6.553548096278409, + "focus": 0.6895846829562841 }, "lastCommittedPoint": null, "startArrowhead": null, @@ -1047,8 +911,8 @@ 0 ], [ - -220.74579277912267, - 10.675950532715547 + -237.96419827484328, + 23.35329422599807 ] ] } diff --git a/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.png b/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.png index 5adf805a8..9f6019ed6 100644 Binary files a/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.png and b/spec/app/ics-028-cross-chain-validation/figures/ccv-vsc-overview.png differ diff --git a/spec/app/ics-028-cross-chain-validation/overview_and_basic_concepts.md b/spec/app/ics-028-cross-chain-validation/overview_and_basic_concepts.md index 2c5a71c01..435f4e019 100644 --- a/spec/app/ics-028-cross-chain-validation/overview_and_basic_concepts.md +++ b/spec/app/ics-028-cross-chain-validation/overview_and_basic_concepts.md @@ -9,6 +9,7 @@ - [Definitions and Overview](#definitions-and-overview) - [Channel Initialization](#channel-initialization) - [Validator Set Update](#validator-set-update) + - [Completion of Unbonding Operations](#completion-of-unbonding-operations) @@ -95,9 +96,16 @@ which MUST NOT complete before reaching maturity on both the provider and all th i.e., the *unbonding period* (denoted as `UnbondingPeriod`) has elapsed on both the provider and all the consumer chains. Thus, a *VSC reaching maturity* on a consumer chain means that all the unbonding operations that resulted in validator updates included in that VSC have matured on the consumer chain. -> **Background**: An *unbonding operation* is any operation of unbonding an amount of the tokens a validator bonded. Note that the bonded tokens correspond to the validator's voting power. Unbonding operations have two components: +> **Background**: An *unbonding operation* is any operation of unbonding an amount of the tokens a validator bonded. Note that the bonded tokens correspond to the validator's voting power. We distinguish between three types of unbonding operations: +> - *undelegation* - a delegator unbonds tokens it previously delegated to a validator; +> - *redelegation* - a delegator instantly redelegates tokens from a source validator to a different validator (the destination validator); +> - *validator unbonding* - a validator is removed from the validator set; note that although validator unbondings do not entail unbonding tokens, they behave similarly to other unbonding operations. +> +> Regardless of the type, unbonding operations have two components: > - The *initiation*, e.g., a delegator requests their delegated tokens to be unbonded. The initiation of an operation of unbonding an amount of the tokens a validator bonded results in a change in the voting power of that validator. -> - The *completion*, e.g., the tokens are actually unbonded and transferred back to the delegator. To complete, unbonding operations must reach *maturity*, i.e., `UnbondingPeriod` must elapse since the operations were initiated. +> - The *completion*, e.g., the tokens are actually unbonded and transferred back to the delegator. To complete, unbonding operations must reach *maturity*, i.e., `UnbondingPeriod` must elapse since the operations were initiated. +> +> For more details, take a look at the [Cosmos SDK documentation](https://docs.cosmos.network/master/modules/staking/). > **Note**: Time periods are measured in terms of the block time, i.e., `currentTimestamp()` (as defined in [ICS 24](../../core/ics-024-host-requirements)). > As a result, a consumer chain MAY start the unbonding period for every VSC that it applies in a block at any point during that block. @@ -161,7 +169,41 @@ In the context of VSCs, the CCV module enables the following functionalities: - **notify** the provider chain that the provided VSCs have matured on this consumer chain. These functionalities are depicted in the following Figure that shows an overview of the Validator Set Update operation of CCV. +For a more detailed description of Validator Set Update, take a look at the [technical specification](./technical_specification.md#validator-set-update). ![Validator Set Update Overview](./figures/ccv-vsc-overview.png?raw=true) -For a more detailed description of Validator Set Update, take a look at the [technical specification](./technical_specification.md#validator-set-update). \ No newline at end of file +### Completion of Unbonding Operations + +In the context of single-chain validation, the completion of any unbonding operation requires the `UnbondingPeriod` to elapse since the operations was initiated (i.e., the operation MUST reach maturity). +In the context of CCV, the completion MUST require also the unbonding operation to reach maturity on **all** consumer chains (for the [Security Model](#security-model) to be preserved). +Therefore, the provider Staking module needs to be aware of the VSC maturity notifications registered by the provider CCV module. + +The ***provider chain*** achieves this through the following approach: +- The provider Staking module is notifying the CCV module when any unbonding operation is initiated. + This is done through [Staking hooks](https://docs.cosmos.network/master/modules/staking/06_hooks.html), + i.e., operations registered by the CCV module to be execute when a certain event has occurred within the provider Staking module + (for more details, see the [Interfacing Other Modules](./technical_specification.md#interfacing-other-modules) section). + As a result, the CCV module maps all the unbonding operations to the corresponding VSCs. + > Note that it is not necessary for the provider Staking module to notify the initiation of validator unbonding operations, + since the CCV module can obtain this information from the validator updates received from the provider Staking module + (i.e., by comparing to the previous batch of validator updates). +- When the CCV module registers maturity notifications for a VSC from all consumer chains, it notifies the provider Staking module of the maturity of all unbonding operations mapped to this VSC. + This enables the provider Staking module to complete the unbonding operations only when they reach maturity on both the provider chain and on all the consumer chains. + +This approach is depicted in the following Figure that shows an overview of the interface between the provider CCV module and the provider Staking module in the context of the Validator Set Update operation of CCV: +- In `Block 1`, two unbonding operations are initiated (i.e., `undelegate-1` and `redelegate-1`) in the provider Staking module. + For each operation, the provider Staking module notifies the provider CCV module. + As a result, the provider CCV module maps these to operation to `vscId`, which is the ID of the following VSC (i.e., `VSC1`). + The provider CCV module provides `VSC1` to all consumer chains. +- In `Block 2`, the same approach is used for `undelegate-2`. +- In `Block j`, `UnbondingPeriod` has elapsed since `Block 1`. + In the meantime, the provider CCV module registered maturity notifications for `VSC1` from all consumer chains + and, consequently, notified the provider Staking module of the maturity of both `undelegate-1` and `redelegate-1`. + As a result, the provider Staking module completes both unbonding operations in `Block j`. +- In `Block k`, `UnbondingPeriod` has elapsed since `Block 2`. + In the meantime, the provider CCV module has NOT yet registered maturity notifications for `VSC2` from all consumer chains. + As a result, the provider Staking module CANNOT complete `undelegate-2` in `Block k`. + The unbonding operation is completed later once the provider CCV module registered maturity notifications for `VSC2` from all consumer chains. + +![Completion of Unbonding Operations](./figures/ccv-unbonding-overview.png?raw=true) diff --git a/spec/app/ics-028-cross-chain-validation/technical_specification.md b/spec/app/ics-028-cross-chain-validation/technical_specification.md index f7545eac5..8c7ecf8ad 100644 --- a/spec/app/ics-028-cross-chain-validation/technical_specification.md +++ b/spec/app/ics-028-cross-chain-validation/technical_specification.md @@ -70,11 +70,24 @@ Before describing the data structures and sub-protocols of the CCV protocol, we // get validator updates from the provider Staking module GetValidatorUpdates(chainID: string): [ValidatorUpdate] - // notify the provider Staking module of matured CCV unbonding operations - UnbondValidators(chainID: string, valUpdates [ValidatorUpdate]) + + // notify the Staking module of unboding operations that + // have matured from the consumer chain's perspective + CompleteStoppedUnbonding(id: uint64) } ``` +- In addition, the following hooks enable the provider CCV module to register operations to be execute when certain events occur within the Staking module: + ```typescript + // invoked by the Staking module after + // initiating an unbonding operation + function AfterUnbondingOpInitiated(opId: uint64); + + // invoked by the Staking module before + // completing an unbonding operation + function BeforeUnbondingOpCompleted(opId: uint64): Bool; + ``` + ## Data Structures ### External Data Structures @@ -167,6 +180,7 @@ The following packet data types are required by the CCV module: - `VSCPacketData` contains a list of validator updates, i.e., ```typescript interface VSCPacketData { + id: uint64 // the id of this VSC updates: [ValidatorUpdate] } ``` @@ -177,18 +191,27 @@ The following packet data types are required by the CCV module: This section describes the internal state of the CCV module. For simplicity, the state is described by a set of variables; for each variable, both the type and a brief description is provided. In practice, all the state (except for hardcoded constants, e.g., `ProviderPortId`) is stored in a key/value store (KVS). The host state machine provides a KVS interface with three functions, i.e., `get()`, `set()`, and `delete()` (as defined in [ICS 24](../../core/ics-024-host-requirements)). -- `ProviderPortId = "provider"` is the port ID the provider CCV module is expected to bind to. -- `ConsumerPortId = "consumer"` is the port ID the consumer CCV module is expected to bind to. +- `[VSCPacketData]` is a list of `VSCPacketData`s. It exposes the following interface: + ```typescript + interface [VSCPacketData] { + // append a VSCPacketData to the list; + // the list is modified + Append(data: VSCPacketData) + + // remove all the VSCPacketData mapped to chainId; + // the list is modified + Remove(chainId: string) + } + - `[ValidatorUpdate]` is a list of `ValidatorUpdate`s. It exposes the following interface: ```typescript interface [ValidatorUpdate] { - // append updates to the list, i.e., more recent - // updates are added to the end of the list; + // append updates to the list; // the list is modified Append(updates: [ValidatorUpdate]) // return an aggregated list of updates, i.e., - // keep only the most recent update per validator; + // keep only the latest update per validator; // the original list is not modified Aggregate(): [ValidatorUpdate] @@ -200,16 +223,27 @@ This section describes the internal state of the CCV module. For simplicity, the #### State on the provider chain +- `ProviderPortId = "provider"` is the port ID the provider CCV module is expected to bind to. - `pendingClient: Map<(Timestamp, string), Height>` is a mapping from `(timestamp, chainId)` tuples to the initial height of pending clients, i.e., belonging to consumer chains that were not yet spawned, but for which a `CreateConsumerChainProposal` was received. - `chainToClient: Map` is a mapping from consumer chain IDs to the associated client IDs. - `chainToChannel: Map` is a mapping from consumer chain IDs to the CCV channel IDs. - `channelToChain: Map` is a mapping from CCV channel IDs to consumer chain IDs. - `channelStatus: Map` is a mapping from CCV channel IDs to CCV channel state, as indicated by `ChannelStatus`. -- `pendingUpdates: Map` is a mapping from consumer chain IDs to a list of pending `ValidatorUpdate`s that must be sent to the consumer chain once the CCV channel is established. +- `pendingVSCPackets: Map` is a mapping from consumer chain IDs to a list of pending `VSCPacketData`s that must be sent to the consumer chain once the CCV channel is established. +- `vscId: uint64` is a monotonic strictly increasing ID that is used to uniquely identify the VSCs sent to the consumer chains. +- `unbondingOps: Map` is a mapping that enables accessing for every unbonding operation the list of consumer chains that are still unbonding. When unbonding operations are initiated, the Staking module calls the `AfterUnbondingOpInitiated()` [hook](#ccv-pcf-shook-afubopcr1); this leads to the creation of a new `UnbondingOperation`, which is defined as + ```typescript + interface UnbondingOperation { + id: uint64 + // list of consumer chain IDs that are still unbonding + unbondingChainIds: [string] + } + ``` +- `vscToUnbondingOps: Map<(Identifier, uint64), [uint64]>` is a mapping from `(chainId, vscId)` tuples to a list of unbonding operation IDs. It enables the provider CCV module to match an acknowledgement of a `VSCPacket`, received from a consumer chain with `chainId`, with the corresponding unbonding operations. As a result, `chainId` can be removed from the list of consumer chains that are still unbonding these operations. For more details see how `VSCPacket` [acknowledgements are handled](#ccv-pcf-ackvsc1). #### State on the consumer chain - +- `ConsumerPortId = "consumer"` is the port ID the consumer CCV module is expected to bind to. - `providerClient: Identifier` identifies the client of the provider chain (on the consumer chain) that the CCV channel is build upon. - `providerChannel: Identifier` identifies the consumer's channel end of the CCV channel. - `channelStatus: ChannelStatus` is the status of the CCV channel. @@ -298,7 +332,7 @@ function CreateConsumerChainProposal(p: CreateConsumerChainProposal) { // create consumer chain client and store it clientId = clientKeeper.CreateClient(clientState, consensusState) - consumerClient[p.chainId] = clientId + chainToClient[p.chainId] = clientId } else { // store the client as a pending client @@ -315,7 +349,7 @@ function CreateConsumerChainProposal(p: CreateConsumerChainProposal) { - `UnbondingPeriod` is retrieved from the provider Staking module; - a client state is created; - a consensus state is created; - - a client of the consumer chain is created and the client ID is added to `consumerClient`. + - a client of the consumer chain is created and the client ID is added to `chainToClient`. - Otherwise, the client is stored in `pendingClient` as a pending client. - Error condition: - None. @@ -885,31 +919,37 @@ function EndBlock(): [ValidatorUpdate] { // get list of validator updates from the provider Staking module valUpdates = stakingKeeper.GetValidatorUpdates(chainId) - // add validator updates to the list of pending updates - pendingUpdates[chainId] = pendingUpdates[chainId].Aggregate(valUpdates) + // check whether there are changes in the validator set; + // note that this also entails unbonding operations + // w/o changes in the voting power of the validators in the validator set + if len(valUpdates) != 0 OR len(vscToUnbondingOps[(chainId, vscId)]) != 0 { + // create VSCPacket data + packetData = VSCPacketData{id: vscId, updates: valUpdates} - // TODO pendingUpdates should be a list of VSCs; - // once the channel is established, all the VSCs are sent, - // so that we can receive ACKs for the unbonding - - // check whether - // - there are pending updates; - // - and there is an established CCV channel to the consumer chain - if len(pendingUpdates[chainId]) != 0 AND chainId IN chainToChannel.Keys() { + // add VSCPacket data to the list of pending VSCPackets + pendingVSCPackets[chainId] = pendingVSCPackets[chainId].Append(packetData) + } + + // check whether there is an established CCV channel to the consumer chain + if chainId IN chainToChannel.Keys() { // the CCV channel should be in VALIDATING state abortSystemUnless(channelStatus[chainId] == VALIDATING) - // create packet data - packetData = VSCPacketData{updates: pendingUpdates[chainId]} - // gets the channel ID for the given consumer chain ID channelId = chainToChannel[chainId] - // create packet and send it using the interface exposed by ICS-4 - packet = Packet{data: packetData, destChannel: channelId} - channelKeeper.SendPacket(packet) + foreach data IN pendingVSCPackets[chainId] { + // create packet and send it using the interface exposed by ICS-4 + packet = Packet{data: data, destChannel: channelId} + channelKeeper.SendPacket(packet) + } + + // Remove pending VSCPackets + pendingVSCPackets.Remove(chainId) } } + // increment VSC ID + vscId++ // do not return anything to the consensus engine return [] @@ -922,10 +962,13 @@ function EndBlock(): [ValidatorUpdate] { - The provider Staking module has an up-to-date list of validator updates for every consumer chain registered. - Expected postcondition: - For every consumer chain with `chainId` - - A list of validator updates is retrieved from the provider Staking module and aggregated to the list of pending updates for the consumer chain with `chainId`, i.e., `pendingUpdates[chainId]`. - - If the list of pending updates is not empty and there is a CCV channel with status `VALIDATING` for the the consumer chain with `chainId`, then - - a `VSCPacketData` is created, with `updates = valUpdates`; - - a packet with the created `VSCPacketData` is sent on the channel associated with the consumer chain with `chainId`. + - A list of validator updates `valUpdates` is obtained from the provider Staking module. + - If either `valUpdates` is not empty or there were unbonding operations initiated during this block, + then a `VSCPacketData` is created and appended to the list of pending VSCPackets associated to `chainId`, i.e., `pendingVSCPackets[chainId]`. + - If there is an established CCV channel for the the consumer chain with `chainId`, then + - for each `VSCPacketData` in the list of pending VSCPackets associated to `chainId` + - a packet with the `VSCPacketData` is sent on the channel associated with the consumer chain with `chainId`. + - `vscId` is incremented. - Error condition: - A CCV channel for the consumer chain with `chainId` exists and its status is not set to `VALIDATING`. @@ -943,7 +986,22 @@ function onAcknowledgeVSCPacket(packet: Packet) { abortTransactionUnless(channelId IN channelToChain.Keys()) chainId = channelToChain[packet.getDestinationChannel()] - stakingKeeper.UnbondValidators(chainID, packet.data.updates) + // iterate over the unbonding operations mapped to + // this chainId and vscId (i.e., packet.data.id) + foreach op in GetUnbondingOpsFromVSC(chainId, packet.data.id) { + // remove the consumer chain from + // the list of consumer chain that are still unbonding + op.unbondingChainIds.Remove(chainId) + // if the unbonding operation has unbonded on all consumer chains + if op.unbondingChainIds.IsEmpty() { + // attempt to complete unbonding in Staking module + stakingKeeper.CompleteStoppedUnbonding(op.id) + // remove unbonding operation + unbondingOps.Remove(op.id) + } + } + // clean up vscToUnbondingOps mapping + vscToUnbondingOps.Remove((chainId, vscId)) } ``` - Initiator: @@ -951,10 +1009,55 @@ function onAcknowledgeVSCPacket(packet: Packet) { - Expected precondition: - The IBC module on the provider chain received an acknowledgement of a `VSCPacket` on a channel owned by the provider CCV module. - Expected postcondition: - - The `UnbondValidators` method of the provider Staking module is invoked. + - For each unbonding operation `op` returned by `GetUnbondingOpsFromVSC(chainId, packet.data.id)` + - `chainId` is removed from `op.unbondingChainIds`; + - if `op.unbondingChainIds` is empty, + - the `CompleteStoppedUnbonding()` method of the Staking module is invoked; + - the entry `op` is removed from `unbondingOps`. + - `(chainId, vscId)` is removed from `vscToUnbondingOps`. - Error condition: - The ID of the channel on which the `VSCPacket` was sent is not mapped to a chain ID (in `channelToChain`). + +#### **[CCV-PCF-GETUBDES.1]** +```typescript +// PCF: Provider Chain Function +// Utility method +function GetUnbondingOpsFromVSC( + chainId: Identifier, + _vscId: uint64): [UnbondingOperation] { + ids = vscToUnbondingOps[(chainId, _vscId)] + if ids == nil { + // cannot find the list of unbonding operation IDs + // for this chainId and _vscId + return nil + } + // get all unbonding operations associated with + // this chainId and _vscId + ops = [] + foreach id in ids { + // get the unbonding operation with this ID + op = unbondingOps[id] + // if cannot find UnbondingOperation according to vscToUnbondingOps, + // then vscToUnbondingOps was probably not correctly updated; + // programming error + abortSystemUnless(op != nil) + // append the operation to the list of operations to be returned + ops.Append(op) + } + return ops +} +``` +- **Initiator:** + - The provider CCV module when receiving an acknowledgement for a `VSCPacket`. +- **Expected precondition:** + - None. +- **Expected postcondition:** + - If there is a list of unbonding operation IDs mapped to `(chainId, _vscId)`, then return the list of unbonding operations mapped to these IDs. + - Otherwise, return `nil`. +- **Error condition:** + - None. + #### **[CCV-PCF-TOVSC.1]** ```typescript @@ -974,6 +1077,62 @@ function onTimeoutVSCPacket(packet Packet) { - Error condition: - None. + +#### **[CCV-PCF-SHOOK-AFUBOPCR.1]** +```typescript +// PCF: Provider Chain Function +// implements a Staking module hook +function AfterUnbondingOpInitiated(opId: uint64) { + // get the IDs of all consumer chains registered with this provider chain + chainIds = chainToChannel.Keys() + + // create and store a new unbonding operation + unbondingOps[opId] = UnbondingOperation{ + id: opId, + unbondingChainIds: chainIds + } + + // add the unbonding operation id to vscToUnbondingOps + foreach chainId in chainIds { + vscToUnbondingOps[(chainId, vscId)].Append(opId) + } +} +``` +- **Initiator:** + - The Staking module. +- **Expected precondition:** + - An unbonding operation with id `opId` is initiated. +- **Expected postcondition:** + - An unbonding operations is created and added to `unbondingOps`. + - The ID of the created unbonding operation is appended to every list in `vscToUnbondingOps[(chainId, vscId)]`, where `chainId` is an ID of a consumer chains registered with this provider chain and `vscId` is the current VSC ID. +- **Error condition:** + - None. + + + +#### **[CCV-PCF-SHOOK-BFUBOPCO.1]** +```typescript +// PCF: Provider Chain Function +// implements a Staking module hook +function BeforeUnbondingOpCompleted(opId: uint64): Bool { + if opId in unbondingOps.Keys() { + // the unbonding operation is still unbonding + // on at least one consumer chain + return true + } + return false +} +``` +- **Initiator:** + - The Staking module. +- **Expected precondition:** + - An unbonding operation has matured on the provider chain. +- **Expected postcondition:** + - If there is an unboding operation with ID `opId`, then true is returned. + - Otherwise, false is returned. +- **Error condition:** + - None. + ---