From 482abb8d16002ad81e69cedaeb458f57562b7418 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Wed, 22 Feb 2023 15:10:04 +0300 Subject: [PATCH] models: add dBFT 2.1 models --- .../.github/dbft2.1_centralizedCV.drawio | 1 + .../.github/dbft2.1_centralizedCV.png | Bin 0 -> 113626 bytes .../.github/dbft2.1_threeStagedCV.drawio | 1 + .../.github/dbft2.1_threeStagedCV.png | Bin 0 -> 110022 bytes formal-models/README.md | 259 ++++++++- formal-models/dbft/dbft___AllGoodModel.launch | 2 +- .../dbftCentralizedCV.tla | 507 ++++++++++++++++++ .../dbftCentralizedCV___AllGoodModel.launch | 42 ++ .../dbft2.1_threeStagedCV/dbftCV3.tla | 427 +++++++++++++++ .../dbftCV3___AllGoodModel.launch | 42 ++ .../dbftMultipool___AllGoodModel.launch | 2 +- 11 files changed, 1278 insertions(+), 5 deletions(-) create mode 100644 formal-models/.github/dbft2.1_centralizedCV.drawio create mode 100644 formal-models/.github/dbft2.1_centralizedCV.png create mode 100644 formal-models/.github/dbft2.1_threeStagedCV.drawio create mode 100644 formal-models/.github/dbft2.1_threeStagedCV.png create mode 100644 formal-models/dbft2.1_centralizedCV/dbftCentralizedCV.tla create mode 100644 formal-models/dbft2.1_centralizedCV/dbftCentralizedCV___AllGoodModel.launch create mode 100644 formal-models/dbft2.1_threeStagedCV/dbftCV3.tla create mode 100644 formal-models/dbft2.1_threeStagedCV/dbftCV3___AllGoodModel.launch diff --git a/formal-models/.github/dbft2.1_centralizedCV.drawio b/formal-models/.github/dbft2.1_centralizedCV.drawio new file mode 100644 index 00000000..5ee02698 --- /dev/null +++ b/formal-models/.github/dbft2.1_centralizedCV.drawio @@ -0,0 +1 @@ +7V3rk5u2Fv9rPE06szu8sT+u7d020+y9me69SfMpg21s02CgmH04f30lkAC9MBgB3o3T6awR4iA4R+f8zkNipM92L7/FTrS9D1euP9KUTeytRvp8pGkq+B80RM7GJRpgjwfvB25UUOujt3L3RMckDP3Ei8jGZRgE7jIh2pw4Dp/JbuvQZ4fxsHR8l2n94q2SbdY6NpWi/XfX22zxjVQFndk5uDNq2G+dVfhcatJvR/osDsMk+7V7mbk+fDP4vWTX3QnO5gOL3SCpc8GXtf6f+OPqjwfFU+43D4sv9tq8GmdUnhz/ET0wGmxywG/ADVY38L2Bo6Xv7Pfe8n9bLxjp022y80GjCn7G4WOwclfoaOXst/nBPonD7+4s9MM4pacr4N9slp/BbxW8j+k6DJI7Z+f5B9AwC3feEgzlwQn24M/9A+qAREI1wLHrL9KBPblx4gGmwaZgdef5eGDZ07irDc3O4q2pOS+AhLrhzk3iA+jyXHAbM3tbYjRui13fSbwnkryDZGyTk8vv8Cn0wI015SXrYVvokgMp5ZjCPnyMly66qMzcI3SuxhShxIk3bsIQAj9KT100pbLTQI5UlSNIlg9e1nQBfmzgj19HUEKzRnCTvJ2VOMCuj87C9Ukhc3xvE0ApBKxzgTBNMddv0Imdt1pBGtPY3Xs/nEVKTwHHEXzs9EWY05E5JwVJG9eVvJIQz2ZQjFPJTwD/Q3j7iZI/DFI+aAiFDoAjdl+Eoiieoqx8IirKtW6aFsl7VYpoXpmkZE5IAuF6vXfbylL4wYmmv3/efVv/vX5a3v9pf1tZV7rCkSVKREiF87z1Evchcpbw7DOwMqTgNFYra6BASsy+Vefmrc3osiAMoLBtoFJEgpbr+EIUjrBcoH3QBXgWIx7oFjouKaeJxtFOmqGI2U3wqylztMmZMWc2u7srmZPhmKOqfTLnx3+tm2/bzytH2xyi+f/N2TT4fAXez3FzDpTrAzoM42QbbsLA8W+LVsqY//24i9Drh4qyuORjGEa4j5skB9TJeUxCksMt7bzFal9Dgf+lpJ04wegEsTxtQxBAyQABH7+QSCG9DN3TyM4SR4A/f0GK1yY+/JrfABzMX4ijQ/nokxt7gMHQZpVk7zgoAcg2tdoVHLf4EtpS9Rs2iSZ08zRUYk6oKWJ1hkr488EUopKV90TMC+ufRwjEU0m72qeMvwEdVCN6STmGzxegJaMD+7citAeCBs5/+tP9B/x5FwFRceLD+xJQym5B3hY0p09Atp7NQ4GJ+qrHXzBlH0GuLJzl98coZ8oi5jxPncccFOjmmrQJ0M1VbStgW2GtKpCtapMQVJeCa1VSt9HGWAqu5T6vXq2MThRhixFhZZ1hraKN5TMj8V7gJR4QvB/A8DeRaQeO8slzn0vOnYdPPpWu8YSzgMUHZfCwdSLYb/eygdGj67UfPi+3wFRfg6mx8wIngZLKBZmEqAP+xRvP4cwIJkBxe2NNLUsORtQNygKyGFHVK8IL0iEinkSDIkKpaEpCGGlweFkfEWbQ6xgirIEc7ZbIsZ0U8hyVTFXsIyfgKj5ogzepJF4tM15B/RdvFu80BZADA1E000Q/FOM9HyHYswJs5bcEEhRsxNp2jWQJ3i8Ik/Bb7G4efSfOtC01GBsNofj7HmllSnErUcIf4q02Go9HNzdkuAwPMuuEkUn2POklk9GNCQX86Isc4plKz5EO60jzsDgJq4QzwUmZyhaamCvlGk8nuQFAkqhpd4CT+CEm+xxM1IuX/IVVPPj9tbBW4KiwT/DgUDro0Tq95sDGKWaMKywC+NVW9C0StjF5GUHgAvDDOZS6IT0jvo9JBdkNk5pRGUW584uX9LOcHcTMwWIP/4Ah3oV04yjPZL5OzezDcU5zFMGLIbdS3hXKrEp525ZlS1Xf3XuyFiNAUezCV/Hgovnws/h3JqUoVG1wB888B+t5cfA6c/Dsmg6eIG/ck4PHqog2Dp6G/TpVRz90tcrBAzKx85Jq/+jidFQ6HeYxu6WO1TFptzQpbofWm5/RWlEO6FfkGjZXtyVK7TVsTaVHKjlaBVJ2RIy/bq25Mr/tXE124kC0qqYQa0lOSqBjxclD+63TaQ1zETjwNC83YjXHDFnspTRP0wnCUgNn7zrwR46pdYVS6nKSbldkMIm6vjtPxWYm2DKFBj+do2JrpKOij4d2VNgoxMIPl99vlks3SmAW8ifmjmUOzR1uQW//cKlxpVjheUrARY3gDSufhHdJwqiyk6mSeAu5oQXQwhAw86cNwypBR6iwtcbgUSLMmtT0RgU5jLa+AlUhMqYK1bquL9OE+K11CRIGN3zcMqyvem6FRNXKFSbIVI0KtMtBNVR90rgvWHMeKbJLkI/KpUny7WWr57Zqt2lWi46Jk0mtY93x+g9Rd0Mxq/qTOTO2+o8uyLJPrG2mh1EzQyhNA3CTeJzQAekcZ9HRz6ooNFr4znQ5yoS/dEt4wVgXXDAPwf3fsbWCv/CKBd+nUYtmHr6osLgodIRsSkpkjgyCvduzB9QUQD1bl0clgNWQPDJKFIdRuHf8+uO/BKUZs1dRMQwQILUWTk74wtLIud5F/IIbrjkLO4/MGv59KYXptxSG42L1WQpDB44m9QzdqyiFERvRjstQuXb5zZWl4qfE5u+uwpS/pXRsaVF4a0MoNgtVDq9lG3JcXGr2X/Vm+fLXcx5zsxlmzSYAK+udgW1DEthuNB0HqsjNocfX0pkTMudnHrY4t7qj2jCk7cqS3ssZeVsaMH7j8knl+2hATvmepD4HfaYqb6Yx0+ktJ7eYkEufNZJcEZ2ckzq7eFVde1Vib2mwxJVJwaoJRaGtU5UvbhaEXvP7Noy1TipirbKQnypeKN1zCRRCflpj5DcQ0msy0AvMe0Mwj5fi6lZX8vtpx/xSxbYmUvxSOlykm9T+ZLXzOBQhQ6cICVRxRwCV/17FvnCNZI/Wg1aqSvY00UqSkz00tR6SP3tn556Q/VFEz/SKw2CjNnGvIz4FE5eq2lRNkAomKOAUTw+z2TgnM/vG3Q+ZVlBg3U61ZNhy1dwUrSn2N9U+sLp4h7ULVr9g9TeiRKQutpKukaQA87GpdQPMrZrqrQ6ebptTNo+EO+j9Khv370XlanWcgeWTxkeUVeHqXy7x6lGpwgF7hLiqfLB4taadk7K/IMba+llyKkxQX6tIBpD822hmH3vTDLYxnLSs/yXLfw6QsuP18W9cZbVI85cgZV6M2+1yA41KUuE9V0Wojd6TtWn/SkXYa1iYXd0sq3DhggTTszTnMerrAwlyPwbTHgi20sm6hRebnr749PTNRngfe8qTfMDiEoq+OG6i6Wt+ukqmwmX1bXcruTgJfuM6fSz0TyM149i4PnF5FF3hoNLxdVll47pN3UcuSuXOQm7BGJW2argM2GS3TuHuhYI+PNX+0wfsvvEnErJlERrLIjSRRAhMaEmEVFmENFmEdFmEZH2LQ2NnwImEZEm2JkuytWOSnftyv7J6pDr9veC0CXY4ujQfa34FqfYae9h2/0XCo8kETaWM8iluILvbgk4QNcjrO3Sz6nlZJ8TbL07WiA2397ozFf8DlCzHPzAsAQ+cdKcYoBO2RxxgGIAK/MofQsRNBeM0s44+qS7dacXXCRU/1hWWrzy2dvbpSp1NnH14fXzVlaH5SgVFTIPla9UXk6XHRI5EwYb9ntxJH+NiUGCxbUclojmzFcMoFZItGhasGB7uFTdYbl3zzXT1JR8xfu3wG4oL+ikE2ao+xtK7cPCW4wu4MIBuGFJcz+xtCDYcyIYIaaV7DlSNuPEWPOcOEOo5khKAgE1v3IWXdpSAABfh2c2RADiMQ8j5wrGDvs59uILu+e2/ \ No newline at end of file diff --git a/formal-models/.github/dbft2.1_centralizedCV.png b/formal-models/.github/dbft2.1_centralizedCV.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5bde40edbf19871b1075959c587e1c89152265 GIT binary patch literal 113626 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%0A~>0y&WS%Asj7SCa3>loTwEmK0&p@k*HI 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

y=z`}0Z}DfZ1r*H{#dO zp(%7_W|p?NFsqpp)$&19gvsFK*j5=}_s2*RmTe@@7BVdR(Hlzh8pafN-{Iu#@HMEB zmIcgzO}NEe^x`$|y>gGqsjcQ3*rp8mc58yB3M3tI6)6*aMRaRHD)k-*K%u-@zm#zN z`_|6j_g~*>FdEV#UrM&t<1HBHsJ-%opYt|WS|OBp;_?0^!Q0SFD%B z!|V!&o^r-PD9gdIFh8l-zD!T7j{_~q>3a%1=$qU-S2aIlUx>sn3_v(NJa=)|f(nZO zvd=$pVCKaWYrwQzqUz538sE1v5oBvFQpEaG1Uh^^8S@pk&XF5~*oG$3)EOM37qkUV fpN&E%@G<1nE!f5UJwv)P;Gcr5%ELlwWB>mLBZ&4! literal 0 HcmV?d00001 diff --git a/formal-models/.github/dbft2.1_threeStagedCV.drawio b/formal-models/.github/dbft2.1_threeStagedCV.drawio new file mode 100644 index 00000000..4aeeeefe --- /dev/null +++ b/formal-models/.github/dbft2.1_threeStagedCV.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/formal-models/.github/dbft2.1_threeStagedCV.png b/formal-models/.github/dbft2.1_threeStagedCV.png new file mode 100644 index 0000000000000000000000000000000000000000..d0df26d044f51eaecfbc389519e3ece88dfa2184 GIT binary patch literal 110022 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%0AL1fXM{r@O>WZ?U1L*J3??1s%Oyo}R6o1QB zqBq4-Z9AH9LoTLs%G>zihj+Ncs3A#GYHDhoHiIzmOq~XR#JOPL!7+bR)E zPZ7Y~QmVst$ydUEJgj)4B%WBp-&mHAa^5&Q^(A_K12iNj27B`#{v0NWDhA(@-%X!= zm>6wi>Z0@V56KmYs+cCeE&unw;sGbXwb{AUqnl4!B~+Xqb@>l;yl@ePxf{jrKjp5! zRLS*7G?~T!^1-W>vcTp4|0w}dz6{8Ce;IJKl%s7NIWEi|w4IGSN8EEr8QrONLj1!2 z1S;<1`W-Dk8kwsR@B}MgSia)D8g_eeFEP&)O>u^A5#VjmjmJi0j+FnOK6>OJ>3KK5CiuJ-Q3}#P%zU)O=q_593 zDkk&SOZiOAvUeOmIy)$?FrQ>9)XHsevz~rTHEu_faQ3wc2u}*dtIa=(<6l~Q!vW5i z0Br?y8z#@H`>smV=|I}DH7{n5dg3`z4!}jZZqVYCMbQ9*pP{Mx`=W)uLtiXs17<58 z8_|du%+N>}exLuIO;xp$f`nD7heuJ_@6YF&%rB-6FPX251WRL^54x(z+uA+{{B-Kq zCfP&A;6lq}{UVj$Q|dn`iH^WbVfx|1c9pv%IMcbgiRrnWKRD|qANg(C3%UIa0!VS) zjL2dzudU;{$|KdeL?W1Y`YHXP*_vg2(d3xR!G>Xl+hM3Kvirk)hxwKxJ}zwgEaQ$O z_3Za^JBO1SRHo=h8gr{VwM^o*M6Kg%kRWzbiPN7=y(sD~#4pL#~$8u z*?l%OQxkVI_d%w-cFqTc=d$ky%(4@-z3R9u#*t_^Y_Pd8y7xYP8C9~zoJ66~ICuh^ z`z*aZ(`)0R+Sjh2BA8=(s4#pO&87Co<#2oI4z)socefxJ~W)c>Q6CVOoloMF?5wQ*;^~#B2#~wY0n%pEY z9XB8j_Euc}eJh>F7IqO2NaE}H489hMHRe3RRRImYGlfG6Bw=p?|i!7>GnE z$`;T+cWB-uuWw#dLWqP9kBnH99!aVUuq->H%vQyO`Zz88fvP%mI5R-Q^U9W^>tb6n zg{1*M*GJEKiPP(84^My46a_aQA?^+Fi5%@+f0f(C-I8*Hc~m3?=p1Gx5uB%BJ|x+Z z?^0YFoi-!k3(fxSujlu=>ZKsyw z+-AJ|U6&E{uCDD*ZyD99UEF~)L9OBB{-NpgjM`=Q>tpYR*}05>XIsWv~f zq8g=tV{ObTPA@_4Yzj}U#o^MP4GV=tEajVk^29Jkx6 zCM;I#Y$$6-fVcf+d}Brq;I+y*@xv3dq}}ZlQhH-m<$^U|@kym{LRHlD$9uhx>i$8b z2R*Z>uRm3O)MybEEP_7iEAdwMRtRA};)8I4k#Tz+PP6n3YXK3LDc8IXrfPfO63n7b zNvakVKjWU$|34XD84u?Y-rFFXIPLaBadtn+obp z-A}JQ(p3%qw#+o(8%!qA2aLY2dzpf|y=OZin26tZhER9ie=rd!#)6Cc#bR~$A!4|& zC&h@>aIpNIb47TMiWmzH9ScNFQy>OSH> z-qwFsKskwQwAES^AMH(^4HQmZ;Wr-^xoXjOq=_KahA!}D={T>z=euZfw~yz91ZPgM z4|+ggYmE3su|->+JFhaQ#qep@MklNFhy=+RJ;{#mWF0*-LIY@^IJ5>jNgCS!Qd?=! zFPPD#Z(Dg0IY&6Ysa-jtXXI@tJGieg%jhx`R^2y}SD?yytNq4wNSb%EzKVGgDbx%8bKU=5l zKg(g+uiRso=Z45sLW&=a;;VFDvTaWnkByC8$XnCv8Bin#JA+!kTD9o-nezPhaG|#+ z@!E=$-Df`T6eNE4+E2)0*>-&L3qExknMTUs_I? zHuPspF{;_k6OuKvte)I$s(bAdF-U8hv?}hJv>InyAA5k^tZAp+2_Q!|;lz~v*^g>v zPX6JKx|O%I0T~(TkvJyU%$l*7r0*f*`9Z{Q4xo}B;)g@VG03x6y^(7LB-BoCl%39qX9tTgXvB3Sdu zrmJh{Wn>lzS3DRyChBpz46(7XDau$w;f{}k6RyCNS!7>swmX$VlD)_?gvN0%5Zj}- z53~C`o);Wct)K#yJzYtw4tHCqLIg72-oriTz|muE=bN z5vyRWtyy|DSfwbNEB&tTbGILPf`o$+GbYL{%kbmoN+7;Iw?8^A`9s2Etc;cojX5`p z<|ep&gst^Uq#8(V1u_ogMPpgwI-2^T1n4u2m8BVyF%GdH4UWR1$If#H+r#C~RvW@c zh{m`v50-Et>b{KJ>?G7hMm5QlnJ0*_4{Zxd{PSEj_uuCfE~fiT+9=BfpbUo;P4^@c z?y90%-w8?$qDbQW<;G7|lf|reE=LJJ8l@Il4$b70kl9%S(3Qs-bO!hrR9wIi$6GkK z^ty}>w%hwM;>hC-k!>D~(>5XLVDKX>*5bveV$JQOz+6<5|B?XZ=n^FesnAg0d0&>S z%kwc6E1wwpxe5_h&1;#zk_q`V%7f^4_Nf)|7d_j}cF|7}={;y$k>=)^F1PV-$8T)| zX0zp+{^4dvy{-DQ5fq5Blv!4eb-5N=@5e5HHZk0BV-hT@o>k5O2v%dEy(Ij@J^NzJ z>Zqo*>FM4it)t`Ibj|(3qvpLRJ+@L$x_yUmRYgd+Q!R`@lHP|8leXDvmVl8;65iZ$ z(A_$BYW}IS3(+_qpjMgY>f@Nd>4_$lnUe6Ecq`}m(Sz2h5K(`VeZcwC+=_t$#)_&Z z8G%gz2do52{NIEc+JrWaH98(G9YqU3G36tSk46mpczal_^&9*?9ELdhn;Siem)cP*<3%ZBLyo4!2Sj;#Ph9Il z1svsei8BzxkN1X<&x=({-x<8OtTi+!ZXVSz!!hT>q*v^)0pQgF?aWTgocgN`1f9As zl2&%C;hIdN(UO->jfk4;_jKdAPfG(uA?|b znA3d%S+>46IM3@btcX6FQafwHLzMQ~jkRO+Xmj&f-B>#?79VoW^o|kCYbiCtEr*{( z1o%|2KF4J>P6PqJEkBBI5aD63YSm(Nz{Z>oN%%rwOI`wmEVk4ZyJg8JK#Oku#3`Cu^yhY4C0!tFrAkyWtL-6DZ6a0q zrZxUz+#`LQ2S%-lNV3;R&0XYjPoVa@Sw){8F&8AMW6nE3S=WB-VZQ@7y0?nvo_Wm7X&Q>5t8aTgfGChhJ1P4qSM4oAZcYE$n~uc{Y=WWSRQ=zxcAUlw5+rF#y~G11f$Mb_F``Mn`O5TLEVQuK z_%s15uE`|~dU5=#44-&k3}9fgt~`-e0KH`x)-mRd0%h7&sBXj@_(>g!!z9)Z<}W9J zJOc0XENy1+IRjm+Mnd>F4CEY)aIIw+y(lK(_o%>xX%{U!H$4d|s_gIW(#{KPRvAnRDABIJ`td0SN!CUz_+qA5b1f_6&9k zRwFy`@;_G-gWr;fKBEqXW{4LHo(mkA1*Z>VftP9he^5i~eC%ip`6~pU<-d>?iG+9yNaEp`nZwb8ZIdR`8p-P$N6|kkj&p8l25$X-N#1+n~WpIs6i%ZE;V4l zAThv2>yPsX4~F^bY^PnaD{9xe7G>K;XNfg4=2o)<9pPpjM`AJ8zbDzlFAh5Y?r1)qS>7t{}1=q_PU1tr&e1iool zM4>EERo_o2A=LY)J$DEYE!ewXov!?qia1R1Ql@{#Bt@HIwYH2Qt1{770X`edt-Y)fsQ}X%q=}!MLE(1NF>9Q!(5D{$n z#Wglfs88X82`q?DD|~!odTFcEdx%xc^RJTnM;b4Ht0}>X@+*c2UFYpUxqNXA84*=)y?!t!oA3<_9B&6>e>J7 z$ZrbV(*$xN{N|;@;H|deaZZWeYDsuBVPLgj)b7ALb)U`Wzkm40MN}qZuzsOzkxg0k z<#Q+h8@t2|BrFqhocvi$jbSAS<5{Hg;kkK&;8@LR2i5kI`w_c-nV#v_BIT}H^iO1T zX25IZgWqDrdK^{7vuesF3p79CDx7_Q_WTcl!&AA+~p7vCwwY{A&<>lZ_c=!$oi`V{rmP1?W>{jjmw;6FIn{ z!fK??ndLJgGCHeozQ%*iygh56%E)RT>!DdvEQ`L=))weq*YQ6~AGHot?UB`A6tLB{ z56{GIF*{9{BiMQr{ogwRd}-MzYOXI=739ktVluwuN*5G!JK9`^+>TRLK&RTkic8}f z9g(q%2DCTEg&9-JsSBao!=e-W^?0Mj*2+iGolm zU>;UIy;0&nYDI;rVnhYKax_Xb`kDgJ2~aB=k%&jaNDi?UY6MzT7(M};apf{<$pa8x zzoLn%U+}M&gaHG3;jtjq82A_n~82Wm2k8l&c>S)+|bL%CS*b4=0 z{jf38AyXrrXSGd20Y0**t1&bQ z;wpRb%`u{^glqgBJM*8uf&@8PwCQ8j0%w4G38AAuhh@9)$k2HX` zxP)Uaoadj)`vH>h5E+SX5&B1Ot_(DBko9PHCn^k_CI4u@zJgk20EZ&M-pxcqZWlZN zc5;E9K`BRiT|q!jqjU*`v%I-y-hUFGJ^*IyHR%_{Zq3BnSH;QIcM^*b?!BoyuTQqu z1}s&V#df!cj_DiaHdnsNIMg8!euVda8QBnEq1=i{US=vmRo#@w8pvQv{H7Bev|~6T zsM^}xBgcc7A#cpOzX~HL1r3{D1F1k|Th1Oa{pcsp$2H?4OB-U;gIRM@}9n?`i)r@?aq zro)HN5byz?h}44<5Pj87x%>W=cDPFCa11ux8b@t4R2nwb+7h#LOyUHbS{*60#olpc6pjfIOgJcA{PT9r?l|Fs^(izJ9(52N;E>cYHI4{P04fn z>sQ-cZ;n$lMkW6UnVKppx!Y%AV~cnJ0!9g^mOi-af#TjO1gWNQmth6k?5+HI2OF6%jVW*84(7xo7_NH9Tcn!Z&`Gji z#1cp~u&U(L44zeavD8yTtKWA}yy982q6?Wh=&)$9F+y6eO_&AUt*d+7e7b;%_FVAL zyjUoe6DnYAS!sidHZ_AlhaGC22C@o1SbF@e^!M^Efa6Sb%9w|_&ovj~@fzv;e>m@@SCQ&^?N!IkB(d=Km$3>O!C@yb z7-8`u=-TCKXu4`Qm~eP%pR4$WXSUBH_sAS6t-LoA=+v@HKP=KynhgS{i4(Kwt)g81O+ z;62w>a44c(`GWurd-m)aDDP?&s~Mh+&C#{MzyH!@dgwQK9iuU5`Rp|f^;PW_wT+6F zV_r4w%MdEd;|6Hpv@=)i96aEiDv-eqwBm4t6vr?&lI)j zq&*;mHG%VIPp{^WjI#w54SC=E56Q>$BZR$w^1UZYfPFVk9K91-;C%FjG8xmAszO4N z8VXJl{WANKiVi>8T)R*K!YZ@rnYG&A8GaY(1h1pFpaQprT%%Wjb@6qxl*7 zY@5CP@VB4Mq@8a=-^?t*b;3A7O&-O~qTZp@^YbWkDg6~RaHDI_5875evm)HlX0}_R zm;cEtP;TicQz;ap-*RAw-}nfZR&Le^7bBF@pO0I?VSH^&+23~0XOe*e37d=(z7^klL2!faHB#4 zBcQWW$cjjY#ZUB@o2SOosnQqj>oHp&%R!coZsd-$vyIGVZ14X1Go)6l=&_~tnblIjWl4R3lr)i-pH}1!0$9G=P!MoT zobyhfSO8kEYezJLOyo55cp4>BN4C9@tVU<0-EYJmevA&!m9=CvuG|#>We2IK_P|Vek^nlU zktcot&d6^A2XV4IIs5}l{|!&g0(}#?0$-IuL}-D@bsiCcb^lJ10c$L+PZ5gu(1ixS zy?8}@k}BN>Q8yxxr3-+WWriswlboq2Z=K7Ai=&q)UG+1bU2Je(p9dFM=jN7Oy;;p} z<14{656&-s4}r;X8$4JaJIDxFpb%^(1W&N-$7gY)66Hzg+&T{^?Pw60KsK&dnM7@S zJ=qp`nflLSE{mToZI^z zmDmky{LrIxC12az^n|=vu9uoSN@Mx2VbxXg*BxX)H|^h84F?kqaY?9u;W#U_-#(Xh zCn|2Ww0Lw$JMuMIyN#|^iBT9zChNAWZ-;s4vU9G>KCFIW zg2B%Mry-w_DI+KsPz)p~DM;S_$A)>NXu<_*T(U4}y!CuaSJ-t7@WC?3%X zx(7TdanjtxNH>q^kdJp$c?V+}G%#ulx90L=|5Cu&GcVNli(fky3D zXMcahK=Kyo)F%$VGH%SlcF!ku0-m2Y`NKiLD@X&PzxiGyTNc!O0G^51cOCus56f-o5ryuh*&1P&6fA&PR~!u~(Or+*`8 zT<9znUa&f^>*!Ax@9R-H7MeH5)QzKd)tJ(UNpE<)L;thvR$L5z zD);51j*P}4Bd>tmjTG$wfj(R_Qv$FH_wQl~PYc#9_D;^$)@Az_WAWw1jG~@>G_eT2 zuF{axbLGnXD=$+b#ncb&>UCYws_sddoN+lO@447IhJ{(zxmL^c3sfA$v$peT&%NF| zrooE6wu&cnE;i1K%)F>I!FR*h4rn-iPx8sv&O%-T|8SyBuC~#LHV=&O)el7S`HE6g z95MMHBcI6LAI#g0y0NDC;-*+>09;?jjydGwqTadD*FnLNWdz%h9MB2qoMYOe1v7d= zu@R+P&#t9^V|{$^Dn{EvsBcU%g|ggRnTWJ)L>IJO%qGZArbxtClHyge>F*sMQ6SM*L!CsqJ7^DG_gOEU_ zwTaX)=e+tu`Hl6hyDHn&Lcs57kF;21?)#}Anl9Tc^~)yy7Gh<GSu$tSD&&LBGC3#Pd=JX=Rqf;Xa1wmUk!i`LAcslP*Q-0frM}l ze}7z;!N{KD)%~Wq*WT55(8F!=u4e4UhE+olOA9Nu~Eif8?2) z%GNEz9g%5G$rNY%$s4Af3n!}QeE16(%HXH2K4FyfU^a9-S8bTQE=JDBi!}LBSMlvq zTo{3wSqP0tvy4f6^?e)AZ~N~;AERR>Y!ZSXz<>=Dl~BRkLvS(mLl%#$4)rx1hx~@y z)*=n|@lw~{woqFARd5X7{D90XO}xFr6m;JlEShQFKC3ZGOHm%XUf7y1x=c)EIPO5V zfCW@i|Jl#r0(8XaO-9O%prBCj42{O4*$6eQFbKAb@H82?7FaL^se)(qSGU&z+3urt zw~PnMB>*UwAJqDrMBYuseYBGB*A}i{ZV2j?-f_b@HvEJ&=K(O+oOsJqq!%%1(Ak`w6$lBIHrM+6&&-Nb6jii_ z<3@x>l_z2MF8y8O#RCw@tIr>gx(4d%*nxgBGRCi+k%TodDUw6caqa_z*C@L-9|Ed1h-@n>k8> zbG#x17QUr}p5@>Az70K4-)Gph46Np#xlKTnAD^0&5bSXe*Z~7AC!`Z7KG5?DN2fdf z`?LE*U=~qw@V~!{@*2@adH=}jpC5e%&wr9tYy)_T7jRo5*_4REuUb!&bEf4-OzS5Z z_Qh_*%U+4aYgHC!!q&eAXa=uzh*+qrM00`K<-f&bK|#hC!t!>mR>r!}AJX+@9d~rg zo$9OVwn>x3z2Dw#+U7d^KJQE^nQBbviY{FIhBkVM`) z^gJVm195&_$2x!G(*7;D`0^zs<~%R@GPi zAOQK&{~Gw#3XE{rD+b6w7RRX~+*dV9oz(=n6P@O}n06qZh`kBbEYjej-#_-o`=V%n z$g8_~RX?lBYgCp1P5GcSv~z9%WjInEB*&!t4?ps05YfOeF@0PWG~(vsz%-k|i$`zC zA0*!JDWv?Q$#P?BNn69jz$TLQjguA&#SoD*A6QWLrD!i%i6Dw_((W28+^;ev3V(rdOobLq4W&!=5u0q z>yp8AlF%%;&(;VA39qOF<2E%}cPnz+*;P6#!? zJK#J^-^+k=7QDow;sbD)_}eeBzx68MXI<)v#Y=PI3Ab{s@&IYpubEktMc#N6A0|8B z%^KcV$)RjuE;C~8veUA_ooUL_f6cyHY?1fn-K?$;*zZzuG#elOHye|;vltNAW@v?zxftNkD)fG#Col!$&S-{x|Mnm=^-MpX7*6GF}an~ zNwySRtik|zDFm}>Z4ndVQ9^V2m*=151uj90uy-QyG$Ca5QPg+d-pm}@C0dyA z5gfT{?9W&jXfMD$fplUYTD*|0F;?5m$QSi6$UavDU5LQzmPCzB_$?_0m_p``i>_cjwey zM?$3%4Y_b_Z&63^VMZ4wLC_o^_>g6KNg(01aQ6EsjEg;hK)QL?UT@$?>YGFBssGp~ zP`lvPneelnBDMzkN+_;m^qbYjh_}ybT^E(n4IhpenQpXJ^9Sp4}V_$&T4S;=Em?dcg(1qxY&CEQIs`gwg&2? zo7OgI{X_GeDIX+U$zHU zNayjl&w+_uUEb`Y1o@vVJIVD6E65rjW=Ju-seQp5Pd2Td&6SHI(6X07z z;2Y$s1Z7C-JASz<=`XID(eH8VhIOUu-m=JV3Xm9GgqrVuTPE)7BUad7x$Vr)g@+`x z5nIJ5Oc8we{pkk;0>|R=%ooz(0&R3}$Us1W&YNxv|7 zFlhN&YLM`c`VPUEnY4GN7+0;FJkl?ZaAT#xh@3ZmJt`rf_(7mA_Xin8#5{QwaEiIm z4*25_e8gh|nI%aL9v_Zq)G~PguceBmC?R>f?Q4Dr>zBAA-wQzT3)9EiL2m5t@|c%p zdwkX})TPC;#E&MlR(C=TBb3qQFGG&Mm&MS8k)MF#>agsiu&lIj2hF1@AEk@xA_g)X z1LnZp;cA6y%#^}z1qS|mV{@DenED5sQptlKa<4VySYjf3!40piHo#UY7Z=3LZ}C}= zlmrxs(~eq|9E~1q2_%TT%0L|oWBIv9G};*#SNViiFKty`!h{5bIR80n_(mFh8k(PcgYy_h z9Zk7aI~!ofwI%BGE$AATflj{&5_B7{uhb|t&;@R9%tvc`z* zzdbzIfK~IMQb#^m_EFgkW(GgX5C`|>uYA8=b_%5v-yw)PL8%V$gqkq`r*O5zL`iC2tgX zx<`XwZqY-&GG3Ab0%u7go~55VI^;@KO`7984~Al=;RVb&WS{&5lL6R5AD#<=)2S%- z)=Z_^qBeok=9*qd@#(^|CQbjE!U3W^A&BO<2&~ptH-G<-^F2)B=$AJM)H--Q?_j+` zrU~ZA&l7eG%ygTSheS{3qN{DkVnMH^Ztx$ko{EA(EIxOWst0lgayDH(VZ;vVH!DoP zJdbkKtF~pnAr~E=r<7v3GS>c*S|(7**cWtM>H(c_Ko0K!q4YrZ#KLRATMxToV`}eq z2uY1=^>&3nr2%*_4tT7F%lKOwF_ZPq%3`g9eSH7DD>@To~LI;!{Cvn@1kX7tPLc1}FIcE16hu*bTNH)s{q=UKmpoRt`eT}_kQ>%B*dINcpl@!$@WMI{X( z-m3AEV7>!obmW?6%hRHtCG~eNe_u-TmIKay>L0(h4(J7>^$w_srlwx@tXOmx{rN5Q z-Rx3cS)q1WdT)lrEWvD3gpq?D@XdG9?2}?@An@)c@0|spbE3VayyQ~M6uRz{JSzgS zrg50<=?V@Dx%ZnMAT_DBRpi}A*Hb6q+VkFM) zDVl+ednIx9QyMMAv?3m&>>vyKp;hl&Mznl;a*usXaj@%s%Y!IWz6UHKTE%>4z0SQv zu(tY?kq3a7XQ0eWKmJ>`zdpJmEa>>Jq1SoH;JmsN+u)vY)2&$r?LFp}Vogy%bw3Vf zNy|7sQO%LR;);MR4`t_C553cc`OSqG`0$!(3y^%*y{$x7h7PzytYjKRTC~AqQL!m%pmv8LII~c`gb7@bv(g z%iCIG5j-G4J?Jy*Z@vWXGU>g0M-s8=UIzbKU6--1)1qHT`%-Q?f6|F$)qT`W&;;+h z7DWq!n;^nQj`2W5K=MB|{DojAywsmaULhgJFuY0IqVkPMrpZcsIi1xnbC>s&J_V>a0L}KhP@4u6YAfOol>gSw7csZV?g_Xy zr|NAr*7Hbpb!3pJ%rPArwc+lQ-icLK`2LdzaTx~<7M_ae!R#*Vf)qCn5L&UE9DZ7B zh6$P5%XR;=sEfyV%gi~Ej(&_b$3!3S3;lcE+70kU*rPqwt_XOA`Dn1ar9939MF73@ zwjVch0|vxz-T1o}4$jQB8tJRzJf4i4Zj+0#PLA4&2Z{ZMTu$py8yDLZQ`f|yVSk6) z<~wQ8d_ZMl1NzdxO7#L2>{pAs-~N$YOexk^H3ykOl}e7$nTf9xmS@yWyW?>eIjz}4 zFjlaMyI&W^^)9~i*|{VZ$5|t~7xe_Ujtrv|1kPP$k_PB*{x^+INC!>eA1Eb~d*t^n z<9-qGeDm`%;i+wCTsHTs3ZFML{(;H$Tfs(L$%89YQZ>toVRQ`Ni^_#$-ba@k;b~&ZNJB}uUzs-QH zC0)afou4qk*umbJu>_O+xyhg0a{mtAfs%5ZAjXb1_415hp1U|O_Yb`UZAiO>EI zHw0&5?WzsONtBU^wJABqXA(pCY=*`mlN^k{Kwkto}`b6ee9=OH%P!aWDU!Axt(!v(m%R1^OtJM*W@Mq z43xPHIJ>B8teV=CV)*jhD2FPi@QQTNgBOyNKD!!0Kh8t>@HR7Kf{RaQq;g`I`2TC~ ztHYvfzOWSmK?MUr0SQ4wDS2s7Vo^XO47v@PUAmDLR8m@ML1HNv5SFD&5R~rNrKG!& zhHv&&UKM`d-`_u<*QM8^JkB$7=A1J#=f2MwnudZnmy;TmLQ2VB!$__n6hWze&l+G1 z?mOT(xJ+g_*$qyY>Z;zqcPCGYj{|OXnjUrYss55m4R=oH_DQh&t5r>04&FJP6dN;7%#cc!!mofn$iIe>Ds2 zoW~qpOZ#}XxfFIME}v|2li@c=oojghVL!%!($F>)?2H>8`J1y32XgX*XwuIl?d7G8 zPa*o>E?Gs4I@*2^Us`VTJ5Q;z(DniaSi_>-E781Z?2NDPTwdH1&Ti~nk-FbPvGuu~;lQwfMN|?^%8{>r%x{pw!0!gT zEGu$0sxM>SGk7VwDGSLAu0nYqe((sNy%meg>wO7giYrPi*(*hBl&l&ZqEDt?Y$Y9k zlH68U$Y;G{AB-y9R$G}#esKM3$^vQQ3Sti)m;8?hy5dxw(r-mNcoH)Oo38K9d>}?U zGh;VX6Ex`kwl>7>)s$U^=7FgmybCP%4TvzW-vqJYtgJyK8ER9mhTxB%{&EzFz$gMA z9fwP{P|#}@Z~(kDf^F_M9&q3SK(s0j==tK-R=*G=dQkU&d`|>yVm67$hm3Hg@w{fZ zKn(m_+n*eZpC89{it_(=>i?OfihcrGy5+Y<|8K zmoE?Uoy?jFmR`p-gj6#!U*lz$6WLzAw6buT!Y{;@pP%1VCvUm1ZELF@Pee50yzSye zGp^g)-7$118npr0J2k^C5wR4%_XNKd^@=%Q6CYghYUHDsbQ-jRO{%<3eW~Z?mehS& zDihcWs#)x5Hk)-Nq5ZBbKdqRU=rNadmxMp}S1!C|$gLb6`Xc4*>#|uCps^gX4O1M# zH%0dDo$}`qBijxeNHlG>g>J9r(pP^DcHuw6?LR}e?wmM8hq$Y*k!l&4axWy>aynro zA|MJvP0gUXxs+sfsC}XyW#Dho$)`(33Zbv!sja1O2&JI$$HH4(Br)NvM@RYvj5L$Y zMJ@0AXZIM%d7pT>vzl`vLJxMiTEfN*S`N2Qf9_|!5cR^=Ru*0AP>qxQWGG5%veBL; z(TmlE%9#|-f8=xgia&3I_*`#_^3};H7l25*14Q!u3?OgC>*v`hl$TKAsYdcf%MuQk_3)a2^E4mvOPF%9UrAS(7&e8-?N1Da+JIfCrO2kI~eUexhKI zkv$i@=@04^gW1TRU8RT&X+HP(>L3mM%-ew(QDE7h8gIi zoe`hW)Xwh1SB@yS7=1BlBQfr+VDLN3h}!l$-?|?c@foh*QPzf&1X)w2;^i}xCH#eE z|N1zt^wpJ(E0-;wJil|x;Q|Nc{KBLr9m-9L@>ThpKN(}cv~eC+ zS>{nciC}^x_v55R`-g9fUgJ?xLNu=PR;g+!1|-`mx+dE(!O}!F@Rt=WNDk{T2QC%K z`2z{B2LTJ7qsoQn2KIMIPabH!j3j?Z_nfc$(iy?7ZxD6Htb zx?QrmAgIX(Les;;+<#KtewsBA4#77RpWp#6#He#!I5Hn^N`S)|ZDeBV7=~2UE}R2DYXFlDbO8SI-{#!bczg{juqL1!g$L`-JV0 zj||m7fitmcHN@&lf-}q^ZTH4@Z??r`hb^j)fa{j3t+u@;%KcA zB3$g@9CkV%Vp0Y6pO`PO_8jOI+!+(Fa-ji%x;kWc`Nfw|{Z!_!TH z8Am-=KX_q2(>1)647J30sCnF9-2wZEz;vR36>Mz(Mvi~U{5+0xN006_lW5UjJJl+B zL?5zqfO&>xkbN&ZkCM0?gFP}CZizr2t|&DP5#DW~h@n&Y9oG2OAGcy4sXncJwnXN? zX;KFc2oEd>r~8^LR6zNk%%n4aa3Fq3f&nNL1q7Ng=o8;KO`hO-SdjF;_>Rn% zIR)~Mx?d@%IM>v-y({D*tL5Yzd#4oBl!i{52T?I8Ur7=t+GB zqG9f$`3K41*9-GF1k!Fd*AEWZVt?|)eoY$@sKCT-e!Esn8i!1A(I1)3H}Sx_@joG5 zSOMmw@@DVoYVn&OSa2f@djsL<W!bsBPvF&Gm->jNy9hvdEDa@tKCSMCx){<1fcr z{Bsy0{nbl)A-n-xOa1}n$@33d^wTU`z%6)(MzE+dv^b(AgJ7!F8weFU6UejrCMBsH zw&}D7Cu4q4R{m^cBzC5QO6P-N>pj=3_4Su`{q6-`b)?X$Ij_NKW0SVj{@KOMb$hyI zg&5PPYEyH#(3Beq!QTAlqpHh+k2^V^Q&G_-CR2G}zH{$9i*imqLxV;xUxsheKHN&T zuFBo*lQz>Q9-HN+aQYD%-w3x!>^^L(0@`9HO@^1i{lb%Cawkm$Y2o5tOz0=cY&yOf z7C|qZpYWU2aiLLK#nl2~p|$q@n{{Skmusv&@)t!Y4oAO!$zt(t1$8E+H)`EJNqt=A z#e;}&a5`5?RaP7BklLqGK={!iZ*O<3dY%Na0C{O8z$w7Y#|FDhJ_?7hcEjpy_&#XZ z!wJ9{te}nM$UJS_Fy9E0N>8S^zwqLX^&^Oc(t@6lDywSwhl|jbmNT7qynHu$7*ZSv zK+G4!qe~pau4So(G1)5&V8hl8EK*)v4~^o|qc*O@d1ABsfUfeN75scU=jJw0P0!0@ z8lz5&;dLrdPF1tw)*K;1x{>zFv#TYE_~vr(^ZFTCETuX3Dqa-;Mec@n3UCzlzZGHU zBBvd(+}njjTf(^v4)zbXZh?T__-vj%uaiF`7v9bN2Fu%d)}PkBr8)u-BhN<^uAeI) zP(A^U#C-*){zq$H*`Kmvir5#_SK7HkQ)cXnX`1CT8hi`fBkMc}qWmpAcNU_atJr(nSI`%odC)cV489UKsF)8k8Sf>|)1)Z8IG$+U)Ha{7J<# zU(V~Kl8}+^vnCeYP1DosWem_|O>?#LKwIrc>*CUp{u-BYn435BhjOc|Q>&bHhG9sO z1<&m_LppAJG6JD+TSwNkFax@QuGiVf;j;)_cK9^Zb`#{{IGg=6o5`>XEC?K?;9X> zO}0iwjbF;k(xdQB8Z=u*U4vQ_pLQfehy7qOJUzGIpMO{qk4y+=*%Rx*@3&MrUzi`B zSJB*6H#v_yoxdC?qg_`roZXniHOrpFm}rAkQo97vQ0lP%vwYxBnLHpK4Uma?W_Bqy z)Bh}wuCJV-=cCY57sqG0o<;NB&(05Of`)~QFg}QI?5bxlyluio`?n;4VBLf9zGz7H zVW_?_3y%ZKLToIp38Ja05m z(m7+aRP&m7iKs08@{@6&b=O`h4msnXDENiz?dh#X=TMzDL_H7hq0VjM*|wmyiv5H- zq0A5Ap`ArcnyVh+vRB`-Ub902_+O*f1QRw*j97y7% z#BICzP#jE2=el!sD|WzTd+tewRXT<(C>Hso9V^k=mQixi1I^ODM1REn^^lyqFh@vK z&yucRJOOvotqq_tID=6%{}#-|WjovR?j)?Ko7kF`sazlYWKOS8ccu$@ekI7)$7i(H zATG>hck3GfY^ie`0Klw;$um*m0Oh}4YTaiyN$S6Rl~LDIa?%&RrTZJ#LpE(=n%{P%+xS;I|EwvpJjblq;Tlbmq|in^tz2FT2RJK|3IY=fOtPYnKt z%@~4VpA0&%jZ^N{a-2%$a#+@-6m~=Mq{x04$I(x(H_l=H8I}WpxAxjB1C4 zVVeXW7PPzjUifgsye!!UFN2-$McnuOvd_kUHYEWDaN*@@vWH&*)+mv$%b{7&qUa~6 zB0&xd*Nfax7QYeT7zfQ*Fr?$jBIrc2_>UrVUP0NQts* zf(v5>z>Sl2)Mh2my1;+Z@d*%w_HagW8w5l~XF~QJ*5~^#(9xN7AtIDVnXX-XUl?O_ z#lT_m)0VtCLq15VAp1bnNqP z>U@S8g_g-_Pc({ckv!0z?2bzUn7OgWf1riBrP0uAN6PIWC) zr(Ao!V1$(NpXaaGv`cy>zMIV$(vPI}>qThkQ_&?M5K-nFAgi)$WB4=~Z8*$($Zex2 zu*hc%rMjc8kH4Sf2^WHBw7e?$%gN(h6Xxa+kNBeXG@G1cAnWV+yq}36!}=Lm6r5;pi7&kHsdJ} zxbjQEZf_E5+4zmU?S<&4kK#y1X^~|>^WY1@>bv=dtqhwh&7yK)a5B_XG0LN{(Ap%! z8;UU(pO`V5N#%~Ht9gv|^E;zZIq?#dkz9{nNWPj-9zWM2+MYC2%YH%O+TEz~sIns4 zJ?x_rV-GZDXHD%thS$N43PSX+pIl=3EgtAnUMwcfvxeb~wlFajb6x!ceX{5WoqLF7D)(3QsJb=1E zSRImLwKp2_a5P-Qbcp~)W!>+*-e0z4y;D42BqOr3c$ZSZJbo~~aZs}^AkjTRTNM0L z8t;^Y4d4PTQKM)y@+AXYOS&@MLL!lEZ3g&DAwC;Y#2AJ>vYcawy``}v{W~8%B)aVs zDmcRQZbMTOUzmbp7zyUdlP3*=&vcyE!hk!eU7s{7-@SfG%Q`4cQ6u}QdsywcSjZl zOgk&0cFQRs8jU;oZyq1sKE1Jb7i%)iNKKH7CY)5$4^u*gAuq3}v?8$7vB&`O55_Hs zXM=!^VTkrKR>DS`l^KbD42~c)cN~wZ9l5zS(O+Z}0yra)4+Khgl={M6PD1B5Cldol z(OA=!Z6|XNbPhRep=>)-@HR(_54x_V)rU_wLN4}!Hu#c-BsD~%dcW3>;O~V2P$fw5 z!fa?dL1Mcl(x@GwU*xnt&#T3GLNF0IyQzj+sPc2%C+!YCFdM&LSo=k?LOA)^vu* zCEn@oEFCWcl-g#k-e89`L--Zr$Z%S^CDBRxOBG$M^v50k$i@5jJm8LDdm7gsZWJN6 zX3PV9)iEAxkC?Tbs$(cUKd_o}MJV@(xg) zqHFketCSWAOHK zvaDr16>W7N8>9K_J?Oq@Y{AQ-<^{Wf9GM*wx4s4-S3Z;tY zM;I0z7Nr9c&C{;6PtZDyo*&F*>K5qb{k{+ zw1uumX7hc8$xU|cb4gT-f=bXWKdW&~y^%@PB5mOl4{JM26V;8@F(z4&b4iZg(V3;A z4wlS(dr|=(RZUOAy1c`UWSqLkT`yVB;luKFFI8+EHeVv~3ZpmYutJb1k1DAoDqeh&5!nm2%YL^L52LE*c<~BHg7tffX;X@^ z`%0jtw^24;_2Qp-K~Z3Vhb6uHopZq<>Pd){SH3E8O`h?{>uZ$1vod}zu6DpOdM}FD1FO)IY4ku+n_QdB zCJ;n^` z=LAG<{Fm1dhXFLPYech@aiPzetzPj-zIg~|$Sl|j;)IRcQ{XA@S$va;ROveg(RHZr zSgp>rzcX#dWazu~umSJzT&2<;&-Ln<`G%63k-gM5{ZCfY0c`iKop4kG1Y;Mq;i&Sg}#p{6pUBH>T@B35iR^TK9G>ZwMppi&Oh| zD)!ot_t}kOb=k~aYShfkjK{4M1=0zjwIb@Q1GD>4<=u#r95RHtN<52!_dtM}-0rY3 zxQU$uM^|a#Z$FgVq;37$RdteMrKwk`@8`av*YtE&1hk+}`EMz9hF1B_Y0&vT9E%F&gYYbW0I0pu*RI_krQ zA{Ot12h!|acs@ZV$MMZK;3(r$7aEc)AIyGBEm@@0iLHThC zDPN$!KX@kUisF)#qjxRt0)qe1Fg-q={G@()x^IDI=}zgB{OIt0{q+4SWM1Uv5(sga z%FR=|6I@s^83na2!tJxD_T%5xiCiKK90?#;LBjF1qr#v%-v8XOPN`!oRHmq)dK#uu zn#Wq$$-|R)Z(c)QC1WnTI!vuL_@j`rEQN-6#=6r5lu{Od;^CN!o7fuyRGRp+XV59z zWM$b12ASczcNG20Ick_3hFRLCc?QX;HQq~*c~b53=;Q65G`hdlZ~^6GbPW8GmXN=f JDgM;s{{TS#*7^Vd literal 0 HcmV?d00001 diff --git a/formal-models/README.md b/formal-models/README.md index f5cecb14..7f476875 100644 --- a/formal-models/README.md +++ b/formal-models/README.md @@ -1,4 +1,4 @@ -## dBFT formal models +# dBFT formal models This section contains a set of dBFT's formal specifications written in [TLA⁺](https://lamport.azurewebsites.net/tla/tla.html) language. The models @@ -112,6 +112,250 @@ configuration: * [TLA⁺ specification](./dbftMultipool/dbftMultipool.tla) * [TLC Model Checker configuration](./dbftMultipool/dbftMultipool___AllGoodModel.launch) +## Proposed dBFT 2.1 models + +Based on the liveness locks scenarios found by the TLC model checker in the +[basic dBFT 2.0 model](#basic-dbft-20-model) we've developed two extensions of +dBFT 2.0 protocol that allow to avoid the liveness lock problem and to preserve +the safety properties of the algorithm. The extensions currently don't have +any code-level implementation and presented as a TLA⁺ specifications ready to be +reviewed and discussed. The improved protocol presented in the extensions will +be referred below as dBFT 2.1. + +We've checked both dBFT 2.1 models with the TLC Model Checker against the same +set of launch configurations that was used to reveal the liveness problems of the +[basic dBFT 2.0 model](#basic-dbft-20-model). The improved models have larger +set of states, thus, the TLC Model Checker wasn't able to finish the liveness +requirements checks for *all* possible states. However, the checks have passed for +a state graph diameter that was large enough to believe the presented models +solve the dBFT 2.0 liveness lock problems. + +### Common `Commit` message improvement note + +Here and below we assume that `Commit` messages should bear preparation hashes +from all nodes that have sent the preparation message (>= `M` but not including +a whole `PrepareRequest`). This quickly synchronizes nodes still at the preparation +stage when someone else collects enough preparations. It at the same time prevents +malicious/byzantine nodes from sending spoofed `Commit` messages. The `Commit` +message size becomes a little bigger, but since it's just hashes it still fits +into a single packet in the vast majority of the cases, so it doesn't really matter. + +### dBFT 2.1 stages-based model + +The basic idea of this model is to split the consensus process into three subsequent +stages marked as `I`, `II` and `III` at the scheme. To perform a transition between +two subsequent stages each consensus node should wait for a set of messages from +at least `M` consensus nodes to be received so that it's possible to complete a full +picture of the neighbours' decisions in the current consensus round. In other words, +no transition can happen unless we have `M` number of messages from the subsequent round, +timers are only set up after we have this number of messages, just to wait for +(potentially) a whole set of them. At the same time, each of the stages has +its own `ChangeView[1,2,3]` message to exit to the next consensus round (view) if +something goes wrong in the current one and there's definitely no ability to +continue consensus process in the current view. Below there's a short description +of each stage. Please, refer to the model scheme and specification for further +details. + +#### Stage I + +Once initialized, consensus node has two ways: +1. Send its `PrepareRequest`/`PrepareResponse` message (and transmit to the + `prepareSent` state). +2. Decide to go to the next view on timeout or any other valid reason (like + transaction missing in the node's mempool or wrong proposal) via sending + `ChangeView1` message (and transmit to the `cv1` state). + +This scheme is quite similar to the basic dBFT 2.0 model except the new type of +`ChangeView` message. After that the node enters stage `I` and waits for consensus +messages of stage `I` (`PrepareRequest` or `PrepareResponse` or `ChangeView1`) +from at least `M` neighbours which is needed to decide about the next actions. +The set of received messages can be arranged in the following way: + +* `M` messages of `ChangeView1` type denote that `M` nodes have decided to change + their view directly after initialization due to invalid/missing `PrepareRequest` + which leads to immediate view changing. This is a "fail fast" route that is the + same as with dBFT 2.0 for the widespread case of missing primary. No additional + delay is added, everything works as usual. +* `M` preparation messages (of type `PrepareRequest` or `PrepareResponse`) with + missing `ChangeView3` denote that the majority of nodes have decided to commit which + denotes the safe transition to stage `II` can be performed and `Commit` message + can safely be sent even if there's `ChangeView1` message in the network. Notice + that `ChangeView3` check is just a protection against node seriously lagging + behind. +* `M` messages each of the type `PrepareRequest` or `PrepareResponse` or `ChangeView1` + where at least one message is of the type `ChangeView1` denote that at least `M` + nodes have reached the stage `I` and the node can safely take further steps. + The additional `| Commit | ≤ F ∪ | CV3 | > 0` condition requires the majority of + nodes not to have the `Commit` message to be sent so that it's still possible to + collect enough `ChangeView[2,3]` messages to change the view in further stages. + If so, then the safe transition to stage `II` can be performed and `ChangeView2` + message can safely be sent. + +#### Stage II + +Once the node has `Commit` or `ChangeView2` message sent, it enters the stage `II` +of the consensus process and waits for at least `M` messages of stage `II` +(`Commit` or `ChangeView2`) to perform the transition to the next stage. The set +of accepted messages can be arranged in the following way: + +* `M` messages of `ChangeView2` type denote that `M` nodes have decided to change + their view directly after entering the stage `II` due to timeout while waiting + for the `Commit` messages which leads to immediate view changing. +* `M` messages of type `Commit` denote that the majority of nodes have decided to + commit which denotes the block can be accepted immediately without entering the + stage `III`. Notice that this is the regular flow of normal dBFT 2.0 consensus, + it also hasn't been changed and proceeds the way it was before. +* `M` messages each of the type `Commit` or `ChangeView2` where not more than `F` + messages are of the type `Commit` denotes that the majority of nodes decided to + change their view after entering the stage `II` and there's not enough `Commit` + messages to create the block (and produce the fork), thus, the safe transition + to stage `III` can be performed and `ChangeView3` message can safely be sent + even if there's `Commit` message in the network. + +In addition, the direct transition from `cv2` state to the `commitSent` state is +added in case if it's clear that there's more than `F` nodes have decided to +commit and no `ChangeView3` message has been received which means that it's possible +to produce block in the current view. This path handles a corner case of missing +stage `I` messages, in fact, because `Commit` messages prove that there are at +least `M` preparation messages exist, but the node went `cv2` path just because +it missed some of them. + +#### Stage III + +Unlike the basic dBFT 2.0 model where consensus node locks on the commit phase, +stage `III` gives the ability to escape from the commit phase via collecting the set +of `M` `ChangeView3` messages. This phase is reachable as soon as at least `M` nodes +has reached the phase `II` (have `ChangeView2` or `Commit` messages sent) and if +there's not enough `Commit` messages (<=`F`) to accept the block. This stage is +added to avoid situation when the node is being locked on the `commitSent` state +whereas the rest of the nodes (>`F`) is willing to go to the next view. + +Here's the scheme of transitions between consensus node states for the improved +dBFT 2.1 stages-based model: + +![dBFT 2.1stages-based model](./.github/dbft2.1_threeStagedCV.png) + +Here you can find the specification file and the basic TLC Model Checker launch +configuration: + +* [TLA⁺ specification](./dbft2.1_threeStagedCV/dbftCV3.tla) +* [TLC Model Checker configuration](./dbft2.1_threeStagedCV/dbftCV3___AllGoodModel.launch) + +### dBFT 2.1 model with the centralized view changes + +The improvement which was taken as a base for this model is taken from the pBFT +algorithm and is as follows. +The consensus process is split into two stages with the following meaning: + +* Stage `I` holds the node states from which it's allowed to transmit to the subsequent + view under assumption that the *new* proposal will be generated (as the basic dBFT 2.0 + model does). +* Stage `II` holds the node states from which it's allowed to perform view change + *preserving* the proposal from the previous view. + +Another vital difference from the basic dBFT 2.0 model is that view changes are +being performed by the node on the `DoCV[1,2]` command (consensus message) sent by the +leader of the target view specified via `DoCV[1,2]` parameters. Aside from the target view +parameter, `DoCV[1,2]` message contains the set of all related pre-received consensus messages +so that the receivers of `DoCV[1,2]` are able to check its validness before the subsequent +view change. + +Below presented the short description of the proposed consensus process. Please, refer to the +model scheme and specification for further details. + +#### Stage I + +Once initialized at view `v`, the consensus node has two ways: + +1. Send its `PrepareRequest`/`PrepareResponse` message (and transmit to the + `prepareSent` state). +2. Decide to go to the next view `v+1` on timeout or any other valid reason like + transaction missing in the node's mempool via sending `ChangeView1(v+1)` message + (and transmitting to the `cv1 to v'=v+1` state). + +After that the node enters stage `I` and perform as follows: + +* If the node has its `PrepareRequest` or `PrepareResponse` sent: + * If at least `M` preparation messages (including its own) collected, then + it's clear that the majority has proposal for view `v` being accepted as + valid and the node can safely send the `Commit` message and transmit to the + phase `II` (`commitSent` state). + * If there's not enough preparation payloads received from the neighbours for a + long time, then the node is allowed to transmit to the stage `II` via sending + its `ChangeView2` message (and changing its state to the `cv2 to v'=v+1`). It + denotes the node's desire to change view to the next one with the current proposal + to be preserved. +* If the node entered the `cv1 to v'=v+1` state: + * If there's a majority (>=`M`) of `ChangeView1(v+1)` messages and the node is + primary in the view `v+1` then it should send the signal (`DoCV1(v+1)` message) + to the rest of the group to change their view to `v+1` with the new proposal + generated. The rest of the group (backup on `v+1` view that have sent their + `ChangeVeiew1(v+1)` messages) should change their view on `DoCV1(v+1)` receiving. + * If there's a majority (>=`M`) of `ChangeView1(v+1)` messages collected, but + `DoCV1(v+1)` is missing for a long time, then the node is able to "skip" view + `v+1` and send the `ChangeView1(v+2)` message hoping that the primary of `v+2` + will be faster enough to send the `DoCV1(v+2)` signal. The process can be repeated + on timeout for view `v+3`, etc. + * If there's more than `F` nodes that have sent their preparation messages + (and, consequently, announced their desire to transmit to the stage `II` of the + current view rather than to change view), then it's clear that it won't be more than `F` messages + of type `ChangeView1` to perform transition to the next view from the stage `II`. + Thus, the node is allowed to send its `ChangeView2` message (and change its + state to the `cv2 to v'=v+1`). Such situation may happen if the node haven't + proposal received in time (consider valid proposal). + +#### Stage II + +Once the node has entered the stage `II`, the proposal of the current round is +considered to be valid. Depending on the node's state the following decisions are +possible: + +* If the node has its `Commit` sent and is in the `commitSent` state: + * If the majority (>=`M`) of the `Commit` messages has been received, then the + block may be safely accepted for the current proposal. + * If there's not enough `Commit` messages for a long time, then it's legal to + send the `ChangeView2(v+1)` message, transmit to the `cv2 to v'=v+1` state + and decide to go to the next view `v+1` preserving the current proposal + and hoping that it would be possible to collect enough `Commit` messages + for it in the view `v+1`. +* If the node is in the `cv2 to v'=v+1` state then: + * If there's a majority (>=`M`) of `ChangeView2(v+1)` messages and the node is + primary in the view `v+1` then it should send the signal (`DoCV2(v+1)` message) + to the rest of the group to change their view to `v+1` with the old proposal of view `v` + preserved. The rest of the group (backup on `v+1` view that have sent their + `ChangeVeiew2(v+1)` messages) should change their view on `DoCV2(v+1)` receiving. + * If there's a majority (>=`M`) of `ChangeView2(v+1)` messages collected, but + `DoCV2(v+1)` is missing for a long time, then the node is able to "skip" view + `v+1` and send the `ChangeView2(v+2)` message hoping that the primary of `v+2` + will be faster enough to send the `DoCV2(v+2)` signal. The process can be repeated + on timeout for view `v+3`, etc. + * Finally, if the node receives at least `M` messages from the stage `I` at max + `F` of which are preparations (the blue dotted arrow from `cv2 to v'=v+1` to + `cv1 to v'=v+1` state), it has the ability to go back to the `cv1` state to start + the new consensus round with the new proposal. This case is kind of special, + it allows to escape from the deadlock situation when the node is locked on `cv2` + state unable to perform any further steps whereas the rest of the network are + waiting in the `cv1` state. Consider the case of four-nodes network where the + first node is permanently "dead", the primary have sent its `PrepareRequest` + and went to the `cv2` state on the timeout and the rest two nodes are waiting + in the `cv1` state not able to move further. + +It should be noted that "preserving the proposal of view `v` in view `v+1`" means +that the primary of view `v+1` broadcasts the `PrepareRequest` message at view `v+1` +that contains the same set of block's fields (transactions, timestamp, primary, etc) as +the `PrepareRequest` proposed in the view `v` has. + +Here's the scheme of transitions between consensus node states for the improved +dBFT 2.1 model with the centralized view changes process: + +![dBFT 2.1 model with the centralized view changes](./.github/dbft2.1_centralizedCV.png) + +Here you can find the specification file and the basic TLC Model Checker launch +configuration: + +* [TLA⁺ specification](./dbft2.1_centralizedCV/dbftCentralizedCV.tla) +* [TLC Model Checker configuration](./dbft2.1_centralizedCV/dbftCentralizedCV___AllGoodModel.launch) + ## How to run/check the TLA⁺ specification ### Prerequirements @@ -137,5 +381,14 @@ configuration: 5. Open the `Model Overview` window in the TLA⁺ Toolbox and check that behaviour specification, declared constants, invariants and properties of the model are filled in with some values. -6. Press `Run TLC on the model` bottom to start the model checking process and - explore the progress in the `Model Checkng Results` window. \ No newline at end of file +6. Press `Run TLC on the model` button to start the model checking process and + explore the progress in the `Model Checkng Results` window. + +### Model checking note + +It should be noted that all TLA⁺ specifications provided in this repo can be perfectly checked +with `MaxView` model constraint set to be 1 for the four-nodes network scenario. Larger +`MaxView` values produces too many behaviours to be checked, so TLC Model Checker is likely +to fail with OOM during the checking process. However, `MaxView` set to be 1 is enough to check +the model liveness properties for the four-nodes scenario as there are two views to be checked +in this case (0 and 1). \ No newline at end of file diff --git a/formal-models/dbft/dbft___AllGoodModel.launch b/formal-models/dbft/dbft___AllGoodModel.launch index eb14599a..52b9984e 100644 --- a/formal-models/dbft/dbft___AllGoodModel.launch +++ b/formal-models/dbft/dbft___AllGoodModel.launch @@ -26,7 +26,7 @@ - + diff --git a/formal-models/dbft2.1_centralizedCV/dbftCentralizedCV.tla b/formal-models/dbft2.1_centralizedCV/dbftCentralizedCV.tla new file mode 100644 index 00000000..5e1d6260 --- /dev/null +++ b/formal-models/dbft2.1_centralizedCV/dbftCentralizedCV.tla @@ -0,0 +1,507 @@ +-------------------------------- MODULE dbftCentralizedCV -------------------------------- + +EXTENDS + Integers, + FiniteSets + +CONSTANTS + \* RM is the set of consensus node indexes starting from 0. + \* Example: {0, 1, 2, 3} + RM, + + \* RMFault is a set of consensus node indexes that are allowed to become + \* FAULT in the middle of every considered behavior and to send any + \* consensus message afterwards. RMFault must be a subset of RM. An empty + \* set means that all nodes are good in every possible behaviour. + \* Examples: {0} + \* {1, 3} + \* {} + RMFault, + + \* RMDead is a set of consensus node indexes that are allowed to die in the + \* middle of every behaviour and do not send any message afterwards. RMDead + \* must be a subset of RM. An empty set means that all nodes are alive and + \* responding in in every possible behaviour. RMDead may intersect the + \* RMFault set which means that node which is in both RMDead and RMFault + \* may become FAULT and send any message starting from some step of the + \* particular behaviour and may also die in the same behaviour which will + \* prevent it from sending any message. + \* Examples: {0} + \* {3, 2} + \* {} + RMDead, + + \* MaxView is the maximum allowed view to be considered (starting from 0, + \* including the MaxView itself). This constraint was introduced to reduce + \* the number of possible model states to be checked. It is recommended to + \* keep this setting not too high (< N is highly recommended). + \* Example: 2 + MaxView + +VARIABLES + \* rmState is a set of consensus node states. It is represented by the + \* mapping (function) with domain RM and range RMStates. I.e. rmState[r] is + \* the state of the r-th consensus node at the current step. + rmState, + + \* msgs is the shared pool of messages sent to the network by consensus nodes. + \* It is represented by a subset of Messages set. + msgs, + + \* blockAccepted holds the view number when the accepted block's proposal + \* was firstly created for each consensus node. It is represented by a + \* mapping RM -> Nat and needed for InvTwoBlocksAcceptedAdvanced invariant + \* evaluation. + blockAccepted + +\* vars is a tuple of all variables used in the specification. It is needed to +\* simplify fairness conditions definition. +vars == <> + +\* N is the number of validators. +N == Cardinality(RM) + +\* F is the number of validators that are allowed to be malicious. +F == (N - 1) \div 3 + +\* M is the number of validators that must function correctly. +M == N - F + +\* These assumptions are checked by the TLC model checker once at the start of +\* the model checking process. All the input data (declared constants) specified +\* in the "Model Overview" section must satisfy these constraints. +ASSUME + /\ RM \subseteq Nat + /\ N >= 4 + /\ 0 \in RM + /\ RMFault \subseteq RM + /\ RMDead \subseteq RM + /\ Cardinality(RMFault) <= F + /\ Cardinality(RMDead) <= F + /\ Cardinality(RMFault \cup RMDead) <= F + /\ MaxView \in Nat + /\ MaxView <= 2 + +\* RMStates is a set of records where each record holds the node state and +\* the node current view. +RMStates == [ + type: {"initialized", "prepareSent", "commitSent", "blockAccepted", "cv1", "cv2", "bad", "dead"}, + view : Nat + ] +\* Messages is a set of records where each record holds the message type, +\* the message sender, sender's view by the moment when message was sent +\* (view field), sender's view by the first moment the PrepareRequest was +\* originally proposed (sourceView field) and the target view for +\* ChangeView[1,2]/DoChangeView[1,2] messages (targetView field). +Messages == [type : {"PrepareRequest", "PrepareResponse", "Commit", "ChangeView1", "ChangeView2", "DoChangeView1", "DoChangeView2"}, rm : RM, view : Nat, targetView : Nat, sourceView : Nat] + +\* -------------- Useful operators -------------- + +\* IsPrimaryInTheView is an operator defining whether provided node r +\* is primary in the consensus round view from the r's point of view. +\* It is a mapping from RM to the set of {TRUE, FALSE}. +IsPrimaryInTheView(r, view) == view % N = r + +\* IsPrimary is an operator defining whether provided node r is primary +\* for the current round from the r's point of view. It is a mapping +\* from RM to the set of {TRUE, FALSE}. +IsPrimary(r) == IsPrimaryInTheView(r, rmState[r].view) + +\* GetPrimary is an operator defining mapping from round index to the RM that +\* is primary in this round. +GetPrimary(view) == CHOOSE r \in RM : view % N = r + +\* GetNewView returns new view number based on the previous node view value. +\* Current specifications only allows to increment view. +GetNewView(oldView) == oldView + 1 + +\* PrepareRequestSentOrReceived denotes whether there's a PrepareRequest +\* message received from the current round's speaker (as the node r sees it). +PrepareRequestSentOrReceived(r) == Cardinality({msg \in msgs : msg.type = "PrepareRequest"/\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view}) /= 0 + +\* -------------- Safety temporal formula -------------- + +\* Init is the initial predicate initializing values at the start of every +\* behaviour. +Init == + /\ rmState = [r \in RM |-> [type |-> "initialized", view |-> 0]] + /\ msgs = {} + /\ blockAccepted = [r \in RM |-> 0] + +\* RMSendPrepareRequest describes the primary node r originally broadcasting PrepareRequest. +RMSendPrepareRequest(r) == + /\ rmState[r].type = "initialized" + /\ IsPrimary(r) + /\ rmState' = [rmState EXCEPT ![r].type = "prepareSent"] + /\ msgs' = msgs \cup {[type |-> "PrepareRequest", rm |-> r, view |-> rmState[r].view, targetView |-> 0, sourceView |-> rmState[r].view]} + /\ UNCHANGED <> + +\* RMSendPrepareResponse describes non-primary node r receiving PrepareRequest from +\* the primary node of the current round (view) and broadcasting PrepareResponse. +\* This step assumes that PrepareRequest always contains valid transactions and +\* signatures. +RMSendPrepareResponse(r) == + /\ rmState[r].type = "initialized" + /\ \neg IsPrimary(r) + /\ PrepareRequestSentOrReceived(r) + /\ LET pReq == CHOOSE msg \in msgs : msg.type = "PrepareRequest" /\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view + IN /\ rmState' = [rmState EXCEPT ![r].type = "prepareSent"] + /\ msgs' = msgs \cup {[type |-> "PrepareResponse", rm |-> r, view |-> rmState[r].view, targetView |-> 0, sourceView |-> pReq.sourceView]} + /\ UNCHANGED <> + + +\* RMSendCommit describes node r sending Commit if there's enough PrepareResponse +\* messages. +RMSendCommit(r) == + /\ rmState[r].type = "prepareSent" + /\ Cardinality({ + msg \in msgs : (msg.type = "PrepareResponse" \/ msg.type = "PrepareRequest") /\ msg.view = rmState[r].view + }) >= M + /\ PrepareRequestSentOrReceived(r) + /\ LET pReq == CHOOSE msg \in msgs : msg.type = "PrepareRequest" /\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view + IN /\ rmState' = [rmState EXCEPT ![r].type = "commitSent"] + /\ msgs' = msgs \cup {[type |-> "Commit", rm |-> r, view |-> rmState[r].view, targetView |-> 0, sourceView |-> pReq.sourceView]} + /\ UNCHANGED <> + +\* RMAcceptBlock describes node r collecting enough Commit messages and accepting +\* the block. +RMAcceptBlock(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ PrepareRequestSentOrReceived(r) + /\ Cardinality({msg \in msgs : msg.type = "Commit" /\ msg.view = rmState[r].view}) >= M + /\ LET pReq == CHOOSE msg \in msgs : msg.type = "PrepareRequest" /\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view + IN /\ rmState' = [rmState EXCEPT ![r].type = "blockAccepted"] + /\ blockAccepted' = [blockAccepted EXCEPT ![r] = pReq.sourceView] + /\ UNCHANGED <> + +\* FetchBlock describes node r that fetches the accepted block from some other node. +RMFetchBlock(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ \E rmAccepted \in RM : /\ rmState[rmAccepted].type = "blockAccepted" + /\ rmState' = [rmState EXCEPT ![r].type = "blockAccepted", ![r].view = rmState[rmAccepted].view] + /\ blockAccepted' = [blockAccepted EXCEPT ![r] = blockAccepted[rmAccepted]] + /\ UNCHANGED <> + +\* RMSendChangeView1 describes node r sending ChangeView1 message on timeout +\* during waiting for PrepareResponse or node r in "cv2" state receiving M +\* messages from the I stage not more than F of them are preparations. +RMSendChangeView1(r) == + /\ \/ /\ rmState[r].type = "initialized" + /\ \neg IsPrimary(r) + \/ /\ rmState[r].type = "cv2" + /\ Cardinality({msg \in msgs : /\ (msg.type = "ChangeView1" \/ msg.type = "PrepareRequest" \/ msg.type = "PrepareResponse") + /\ msg.view = rmState[r].view + }) >= M + /\ Cardinality({msg \in msgs : /\ (msg.type = "PrepareRequest" \/ msg.type = "PrepareResponse") + /\ msg.view = rmState[r].view + }) <= F + /\ rmState' = [rmState EXCEPT ![r].type = "cv1"] + /\ msgs' = msgs \cup {[type |-> "ChangeView1", rm |-> r, view |-> rmState[r].view, targetView |-> GetNewView(rmState[r].view), sourceView |-> rmState[r].view]} + /\ UNCHANGED <> + +\* RMSendChangeView1FromCV1 describes node r sending ChangeView1 message on timeout +\* during waiting for DoCV1 signal from the next primary. +RMSendChangeView1FromCV1(r) == + /\ rmState[r].type = "cv1" + /\ LET cv1s == {msg \in msgs : msg.type = "ChangeView1" /\ msg.view = rmState[r].view} + myCV1s == {msg \in cv1s : msg.rm = r} + myBestCV1 == CHOOSE msg \in myCV1s : \A other \in myCV1s : msg.targetView >= other.targetView + IN /\ Cardinality({msg \in cv1s : msg.targetView = myBestCV1.targetView}) >= M + /\ \neg IsPrimaryInTheView(r, myBestCV1.targetView) + /\ msgs' = msgs \cup {[type |-> "ChangeView1", rm |-> r, view |-> rmState[r].view, targetView |-> GetNewView(myBestCV1.targetView), sourceView |-> rmState[r].view]} + /\ UNCHANGED <> + +\* RMSendChangeView2 describes node r sending ChangeView message on timeout +\* during waiting for enough Prepare messages OR from CV1 after not receiving +\* enough ChangeView1 messages. +RMSendChangeView2(r) == + /\ \/ rmState[r].type = "prepareSent" + \/ rmState[r].type = "commitSent" + \/ /\ rmState[r].type = "cv1" + /\ Cardinality({msg \in msgs : /\ (msg.type = "PrepareRequest" \/ msg.type = "PrepareResponse" \/ msg.type = "ChangeView1") + /\ msg.view = rmState[r].view + /\ (msg.targetView = 0 \/ msg.targetView = GetNewView(rmState[r].view)) + }) >= M + /\ Cardinality({msg \in msgs : /\ (msg.type = "PrepareRequest" \/ msg.type = "PrepareResponse") + /\ msg.view = rmState[r].view + /\ (msg.targetView = 0 \/ msg.targetView = GetNewView(rmState[r].view)) + }) > F + /\ LET pReq == CHOOSE msg \in msgs : msg.type = "PrepareRequest" /\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view + IN /\ rmState' = [rmState EXCEPT ![r].type = "cv2"] + /\ msgs' = msgs \cup {[type |-> "ChangeView2", rm |-> r, view |-> rmState[r].view, targetView |-> GetNewView(rmState[r].view), sourceView |-> pReq.sourceView]} + /\ UNCHANGED <> + +\* RMSendChangeView2FromCV2 describes node r sending ChangeView2 message on timeout +\* during waiting for DoCV2 signal from the next primary. +RMSendChangeView2FromCV2(r) == + /\ rmState[r].type = "cv2" + /\ LET cv2s == {msg \in msgs : msg.type = "ChangeView2" /\ msg.view = rmState[r].view} + myCV2s == {msg \in cv2s : msg.rm = r} + myBestCV2 == CHOOSE msg \in myCV2s : \A other \in myCV2s : msg.targetView >= other.targetView + pReq == CHOOSE msg \in msgs : msg.type = "PrepareRequest" /\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view + IN /\ Cardinality({msg \in cv2s : msg.targetView = myBestCV2.targetView}) >= M + /\ \neg IsPrimaryInTheView(r, myBestCV2.targetView) + /\ msgs' = msgs \cup {[type |-> "ChangeView2", rm |-> r, view |-> rmState[r].view, targetView |-> GetNewView(myBestCV2.targetView), sourceView |-> pReq.sourceView]} + /\ UNCHANGED <> + +\* RMSendDoCV1ByLeader describes node r that collects enough ChangeView1 messages +\* with target view such that the node r is leader in this view. The leader r +\* broadcasts DoChangeView1 message and the newly-created PrepareRequest message +\* for this view. +RMSendDoCV1ByLeader(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ LET cv1s == {msg \in msgs : msg.type = "ChangeView1" /\ msg.view = rmState[r].view} + followersCV1s == {msg \in cv1s : IsPrimaryInTheView(r, msg.targetView)} \* TODO: this condition won't work starting from N+1 view! + targetView == CHOOSE x \in 1..(MaxView+1) : IsPrimaryInTheView(r, x) + IN /\ Cardinality(followersCV1s) >= M + /\ rmState' = [rmState EXCEPT ![r].type = "prepareSent", ![r].view = targetView] + /\ msgs' = msgs \cup {[type |-> "DoChangeView1", rm |-> r, view |-> rmState[r].view, targetView |-> targetView, sourceView |-> targetView], [type |-> "PrepareRequest", rm |-> r, view |-> targetView, targetView |-> 0, sourceView |-> targetView]} + /\ UNCHANGED <> + +\* RMSendDoCV2ByLeader describes node r that collects enough ChangeView2 messages +\* with target view such that the node r is leader in this view. The leader r +\* broadcasts DoChangeView2 message and the old PrepareRequest message that +\* was migrated from the previous view without changes. +RMSendDoCV2ByLeader(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ LET cv2s == {msg \in msgs : msg.type = "ChangeView2" /\ msg.view = rmState[r].view} + followersCV2s == {msg \in cv2s : IsPrimaryInTheView(r, msg.targetView)} + targetView == CHOOSE x \in 1..(MaxView+1) : IsPrimaryInTheView(r, x) + IN /\ Cardinality(followersCV2s) >= M + /\ LET pReq == CHOOSE msg \in msgs : msg.type = "PrepareRequest" /\ msg.rm = GetPrimary(rmState[r].view) /\ msg.view = rmState[r].view + IN /\ rmState' = [rmState EXCEPT ![r].type = "prepareSent", ![r].view = targetView] + /\ msgs' = msgs \cup {[type |-> "DoChangeView2", rm |-> r, view |-> rmState[r].view, targetView |-> targetView, sourceView |-> pReq.sourceView], [type |-> "PrepareRequest", rm |-> r, view |-> targetView, targetView |-> 0, sourceView |-> pReq.sourceView]} + /\ UNCHANGED <> + +\* RMReceiveDoCV1FromLeader descibes node r that receives DoChangeView1 message from +\* the leader of the target DoCV1's view and changes its view. +RMReceiveDoCV1FromLeader(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "blockAccepted" + /\ rmState[r].type /= "dead" + /\ Cardinality({msg \in msgs : msg.type = "DoChangeView1" /\ msg.targetView > rmState[r].view}) /= 0 + /\ LET doCV1s == {msg \in msgs : msg.type = "DoChangeView1" /\ msg.targetView > rmState[r].view} + latestDoCV1 == CHOOSE msg \in doCV1s : \A other \in doCV1s : msg.targetView >= other.targetView + IN /\ rmState' = [rmState EXCEPT ![r].type = "initialized", ![r].view = latestDoCV1.targetView] + /\ UNCHANGED <> + +\* RMReceiveDoCV2FromLeader descibes node r that receives DoChangeView2 message from +\* the leader of the target DoCV2's view and changes its view. +RMReceiveDoCV2FromLeader(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "blockAccepted" + /\ rmState[r].type /= "dead" + /\ Cardinality({msg \in msgs : msg.type = "DoChangeView2" /\ msg.targetView > rmState[r].view}) /= 0 + /\ LET doCV2s == {msg \in msgs : msg.type = "DoChangeView2" /\ msg.targetView > rmState[r].view} + latestDoCV2 == CHOOSE msg \in doCV2s : \A other \in doCV2s : msg.targetView >= other.targetView + IN /\ rmState' = [rmState EXCEPT ![r].type = "initialized", ![r].view = latestDoCV2.targetView] + /\ UNCHANGED <> + +\* RMBeBad describes the faulty node r that will send any kind of consensus message starting +\* from the step it's gone wild. This step is enabled only when RMFault is non-empty set. +RMBeBad(r) == + /\ r \in RMFault + /\ Cardinality({rm \in RM : rmState[rm].type = "bad"}) < F + /\ rmState' = [rmState EXCEPT ![r].type = "bad"] + /\ UNCHANGED <> + +\* RMFaultySendCV1 describes sending CV1 message by the faulty node r. To reduce +\* the number of reachable states, the target view of this message is restricted by +\* the next one. +RMFaultySendCV1(r) == + /\ rmState[r].type = "bad" + /\ LET cv == [type |-> "ChangeView1", rm |-> r, view |-> rmState[r].view, targetView |-> GetNewView(rmState[r].view), sourceView |-> rmState[r].view] + IN /\ cv \notin msgs + /\ msgs' = msgs \cup {cv} + /\ UNCHANGED <> + +\* RMFaultySendCV2 describes sending CV2 message by the faulty node r. To reduce +\* the number of reachable states, the target view of this message is restricted by +\* the next one; the source view of this message is restricted by the current one. +RMFaultySendCV2(r) == + /\ rmState[r].type = "bad" + /\ LET cv == [type |-> "ChangeView2", rm |-> r, view |-> rmState[r].view, targetView |-> GetNewView(rmState[r].view), sourceView |-> rmState[r].view] + IN /\ cv \notin msgs + /\ msgs' = msgs \cup {cv} + /\ UNCHANGED <> + +\* RMFaultyDoCV describes view changing by the faulty node r. +RMFaultyDoCV(r) == + /\ rmState[r].type = "bad" + /\ rmState' = [rmState EXCEPT ![r].view = GetNewView(rmState[r].view)] + /\ UNCHANGED <> + +\* RMFaultySendPReq describes sending PrepareRequest message by the primary faulty node r. +\* To reduce the number of reachable states, the sourceView is always restricted by the +\* current r's view. +RMFaultySendPReq(r) == + /\ rmState[r].type = "bad" + /\ IsPrimary(r) + /\ LET pReq == [type |-> "PrepareRequest", rm |-> r, view |-> rmState[r].view, targetView |-> 0, sourceView |-> rmState[r].view] + IN /\ pReq \notin msgs + /\ msgs' = msgs \cup {pReq} + /\ UNCHANGED <> + +\* RMFaultySendPResp describes sending PrepareResponse message by the non-primary faulty node r. +\* To reduce the number of reachable states, the sourceView is always restricted by the +\* current r's view. +RMFaultySendPResp(r) == + /\ rmState[r].type = "bad" + /\ \neg IsPrimary(r) + /\ LET pResp == [type |-> "PrepareResponse", rm |-> r, view |-> rmState[r].view, targetView |-> 0, sourceView |-> rmState[r].view] + IN /\ pResp \notin msgs + /\ msgs' = msgs \cup {pResp} + /\ UNCHANGED <> + +\* RMFaultySendCommit describes sending Commit message by the faulty node r. +\* To reduce the number of reachable states, the sourceView is always restricted by the +\* current r's view. +RMFaultySendCommit(r) == + /\ rmState[r].type = "bad" + /\ LET commit == [type |-> "Commit", rm |-> r, view |-> rmState[r].view, targetView |-> 0, sourceView |-> rmState[r].view] + IN /\ commit \notin msgs + /\ msgs' = msgs \cup {commit} + /\ UNCHANGED <> + +\* We don't describe sending DoCV messages by faulty node, because it can't +\* actually produce other than valid message, and valid message sending is described +\* in the "good" node specification. We also don't describe receiving the DoCV message +\* by the faulty node because it has a separate RMFaultyDoCV action enabled. + +\* RMDie describes node r that was removed from the network at the particular step +\* of the behaviour. After this node r can't change its state and accept/send messages. +RMDie(r) == + /\ r \in RMDead + /\ Cardinality({rm \in RM : rmState[rm].type = "dead"}) < F + /\ rmState' = [rmState EXCEPT ![r].type = "dead"] + /\ UNCHANGED <> + +\* Terminating is an action that allows infinite stuttering to prevent deadlock on +\* behaviour termination. We consider termination to be valid if at least M nodes +\* have the block being accepted. +Terminating == + /\ Cardinality({rm \in RM : rmState[rm].type = "blockAccepted"}) >= M + /\ UNCHANGED vars + + +\* Next is the next-state action describing the transition from the current state +\* to the next state of the behaviour. +Next == + \/ Terminating + \/ \E r \in RM: + RMSendPrepareRequest(r) \/ RMSendPrepareResponse(r) \/ RMSendCommit(r) + \/ RMAcceptBlock(r) + \/ RMSendChangeView1(r) \/ RMSendChangeView1FromCV1(r) + \/ RMSendChangeView2(r) \/ RMSendChangeView2FromCV2(r) + \/ RMSendDoCV1ByLeader(r) \/ RMReceiveDoCV1FromLeader(r) + \/ RMSendDoCV2ByLeader(r) \/ RMReceiveDoCV2FromLeader(r) + \/ RMBeBad(r) + \/ RMFaultySendCV1(r) \/ RMFaultySendCV2(r) \/ RMFaultyDoCV(r) \/ RMFaultySendCommit(r) \/ RMFaultySendPReq(r) \/ RMFaultySendPResp(r) + \/ RMDie(r) \/ RMFetchBlock(r) + +\* Safety is a temporal formula that describes the whole set of allowed +\* behaviours. It specifies only what the system MAY do (i.e. the set of +\* possible allowed behaviours for the system). It asserts only what may +\* happen; any behaviour that violates it does so at some point and +\* nothing past that point makes difference. +\* +\* E.g. this safety formula (applied standalone) allows the behaviour to end +\* with an infinite set of stuttering steps (those steps that DO NOT change +\* neither msgs nor rmState) and never reach the state where at least one +\* node is committed or accepted the block. +\* +\* To forbid such behaviours we must specify what the system MUST +\* do. It will be specified below with the help of fairness conditions in +\* the Fairness formula. +Safety == Init /\ [][Next]_vars + + +\* -------------- Fairness temporal formula -------------- + +\* Fairness is a temporal assumptions under which the model is working. +\* Usually it specifies different kind of assumptions for each/some +\* subactions of the Next's state action, but the only think that bothers +\* us is preventing infinite stuttering at those steps where some of Next's +\* subactions are enabled. Thus, the only thing that we require from the +\* system is to keep take the steps until it's impossible to take them. +\* That's exactly how the weak fairness condition works: if some action +\* remains continuously enabled, it must eventually happen. +Fairness == WF_vars(Next) + +\* -------------- Specification -------------- + +\* The complete specification of the protocol written as a temporal formula. +Spec == Safety /\ Fairness + +\* -------------- Liveness temporal formula -------------- + +\* For every possible behaviour it's true that eventually (i.e. at least once +\* through the behaviour) block will be accepted. It is something that dBFT +\* must guarantee (an in practice this condition is violated). +TerminationRequirement == <>(Cardinality({r \in RM : rmState[r].type = "blockAccepted"}) >= M) + +\* A liveness temporal formula asserts only what must happen (i.e. specifies +\* what the system MUST do). Any behaviour can NOT violate it at ANY point; +\* there's always the rest of the behaviour that can always make the liveness +\* formula true; if there's no such behaviour than the liveness formula is +\* violated. The liveness formula is supposed to be checked as a property +\* by the TLC model checker. +Liveness == TerminationRequirement + +\* -------------- ModelConstraints -------------- + +\* MaxViewConstraint is a state predicate restricting the number of possible +\* behaviour states. It is needed to reduce model checking time and prevent +\* the model graph size explosion. This formulae must be specified at the +\* "State constraint" section of the "Additional Spec Options" section inside +\* the model overview. +MaxViewConstraint == /\ \A r \in RM : rmState[r].view <= MaxView + /\ \A msg \in msgs : msg.targetView = 0 \/ msg.targetView <= MaxView + 1 + +\* -------------- Invariants of the specification -------------- + +\* Model invariant is a state predicate (statement) that must be true for +\* every step of every reachable behaviour. Model invariant is supposed to +\* be checked as an Invariant by the TLC Model Checker. + +\* TypeOK is a type-correctness invariant. It states that all elements of +\* specification variables must have the proper type throughout the behaviour. +TypeOK == + /\ rmState \in [RM -> RMStates] + /\ msgs \subseteq Messages + /\ blockAccepted \in [RM -> Nat] + +\* InvTwoBlocksAcceptedAdvanced ensures that the proposed and accepted block +\* originally comes from the same view for every node that has the block +\* being accepted. +InvTwoBlocksAcceptedAdvanced == \A r1 \in RM: + \A r2 \in RM \ {r1}: + \/ rmState[r1].type /= "blockAccepted" + \/ rmState[r2].type /= "blockAccepted" + \/ blockAccepted[r1] = blockAccepted[r2] + +\* InvFaultNodesCount states that there can be F faulty or dead nodes at max. +InvFaultNodesCount == Cardinality({ + r \in RM : rmState[r].type = "bad" \/ rmState[r].type = "dead" + }) <= F + +\* This theorem asserts the truth of the temporal formula whose meaning is that +\* the state predicates TypeOK, InvTwoBlocksAccepted and InvFaultNodesCount are +\* the invariants of the specification Spec. This theorem is not supposed to be +\* checked by the TLC model checker, it's here for the reader's understanding of +\* the purpose of TypeOK, InvTwoBlocksAccepted and InvFaultNodesCount. +THEOREM Spec => [](TypeOK /\ InvTwoBlocksAcceptedAdvanced /\ InvFaultNodesCount) +============================================================================= +\* Modification History +\* Last modified Fri Mar 03 10:51:05 MSK 2023 by root +\* Last modified Wed Feb 15 15:43:25 MSK 2023 by anna +\* Last modified Mon Jan 23 21:49:06 MSK 2023 by rik +\* Created Thu Dec 15 16:06:17 MSK 2022 by anna \ No newline at end of file diff --git a/formal-models/dbft2.1_centralizedCV/dbftCentralizedCV___AllGoodModel.launch b/formal-models/dbft2.1_centralizedCV/dbftCentralizedCV___AllGoodModel.launch new file mode 100644 index 00000000..f7a19d40 --- /dev/null +++ b/formal-models/dbft2.1_centralizedCV/dbftCentralizedCV___AllGoodModel.launch @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/formal-models/dbft2.1_threeStagedCV/dbftCV3.tla b/formal-models/dbft2.1_threeStagedCV/dbftCV3.tla new file mode 100644 index 00000000..536934ce --- /dev/null +++ b/formal-models/dbft2.1_threeStagedCV/dbftCV3.tla @@ -0,0 +1,427 @@ +-------------------------------- MODULE dbftCV3 -------------------------------- + +EXTENDS + Integers, + FiniteSets + +CONSTANTS + \* RM is the set of consensus node indexes starting from 0. + \* Example: {0, 1, 2, 3} + RM, + + \* RMFault is a set of consensus node indexes that are allowed to become + \* FAULT in the middle of every considered behavior and to send any + \* consensus message afterwards. RMFault must be a subset of RM. An empty + \* set means that all nodes are good in every possible behaviour. + \* Examples: {0} + \* {1, 3} + \* {} + RMFault, + + \* RMDead is a set of consensus node indexes that are allowed to die in the + \* middle of every behaviour and do not send any message afterwards. RMDead + \* must be a subset of RM. An empty set means that all nodes are alive and + \* responding in in every possible behaviour. RMDead may intersect the + \* RMFault set which means that node which is in both RMDead and RMFault + \* may become FAULT and send any message starting from some step of the + \* particular behaviour and may also die in the same behaviour which will + \* prevent it from sending any message. + \* Examples: {0} + \* {3, 2} + \* {} + RMDead, + + \* MaxView is the maximum allowed view to be considered (starting from 0, + \* including the MaxView itself). This constraint was introduced to reduce + \* the number of possible model states to be checked. It is recommended to + \* keep this setting not too high (< N is highly recommended). + \* Example: 2 + MaxView + +VARIABLES + \* rmState is a set of consensus node states. It is represented by the + \* mapping (function) with domain RM and range RMStates. I.e. rmState[r] is + \* the state of the r-th consensus node at the current step. + rmState, + + \* msgs is the shared pool of messages sent to the network by consensus nodes. + \* It is represented by a subset of Messages set. + msgs + +\* vars is a tuple of all variables used in the specification. It is needed to +\* simplify fairness conditions definition. +vars == <> + +\* N is the number of validators. +N == Cardinality(RM) + +\* F is the number of validators that are allowed to be malicious. +F == (N - 1) \div 3 + +\* M is the number of validators that must function correctly. +M == N - F + +\* These assumptions are checked by the TLC model checker once at the start of +\* the model checking process. All the input data (declared constants) specified +\* in the "Model Overview" section must satisfy these constraints. +ASSUME + /\ RM \subseteq Nat + /\ N >= 4 + /\ 0 \in RM + /\ RMFault \subseteq RM + /\ RMDead \subseteq RM + /\ Cardinality(RMFault) <= F + /\ Cardinality(RMDead) <= F + /\ Cardinality(RMFault \cup RMDead) <= F + /\ MaxView \in Nat + /\ MaxView <= 2 + +\* RMStates is a set of records where each record holds the node state and +\* the node current view. +RMStates == [ + type: {"initialized", "prepareSent", "commitSent", "blockAccepted", "cv1", "cv2", "cv3", "bad", "dead"}, + view : Nat + ] + +\* Messages is a set of records where each record holds the message type, +\* the message sender and sender's view by the moment when message was sent. +Messages == [type : {"PrepareRequest", "PrepareResponse", "Commit", "ChangeView1", "ChangeView2", "ChangeView3"}, rm : RM, view : Nat] + +\* -------------- Useful operators -------------- + +\* IsPrimary is an operator defining whether provided node r is primary +\* for the current round from the r's point of view. It is a mapping +\* from RM to the set of {TRUE, FALSE}. +IsPrimary(r) == rmState[r].view % N = r + +\* GetPrimary is an operator defining mapping from round index to the RM that +\* is primary in this round. +GetPrimary(view) == CHOOSE r \in RM : view % N = r + +\* GetNewView returns new view number based on the previous node view value. +\* Current specifications only allows to increment view. +GetNewView(oldView) == oldView + 1 + +\* PrepareRequestSentOrReceived denotes whether there's a PrepareRequest +\* message received from the current round's speaker (as the node r sees it). +PrepareRequestSentOrReceived(r) == [type |-> "PrepareRequest", rm |-> GetPrimary(rmState[r].view), view |-> rmState[r].view] \in msgs + +\* -------------- Safety temporal formula -------------- + +\* Init is the initial predicate initializing values at the start of every +\* behaviour. +Init == + /\ rmState = [r \in RM |-> [type |-> "initialized", view |-> 0]] + /\ msgs = {} + +\* RMSendPrepareRequest describes the primary node r broadcasting PrepareRequest. +RMSendPrepareRequest(r) == + /\ rmState[r].type = "initialized" + /\ IsPrimary(r) + /\ rmState' = [rmState EXCEPT ![r].type = "prepareSent"] + /\ msgs' = msgs \cup {[type |-> "PrepareRequest", rm |-> r, view |-> rmState[r].view]} + /\ UNCHANGED <<>> + +\* RMSendPrepareResponse describes non-primary node r receiving PrepareRequest from +\* the primary node of the current round (view) and broadcasting PrepareResponse. +\* This step assumes that PrepareRequest always contains valid transactions and +\* signatures. +RMSendPrepareResponse(r) == + /\ rmState[r].type = "initialized" + /\ \neg IsPrimary(r) + /\ PrepareRequestSentOrReceived(r) + /\ rmState' = [rmState EXCEPT ![r].type = "prepareSent"] + /\ msgs' = msgs \cup {[type |-> "PrepareResponse", rm |-> r, view |-> rmState[r].view]} + /\ UNCHANGED <<>> + +\* RMSendCommit describes node r sending Commit if there's enough PrepareRequest/PrepareResponse +\* messages and no node has sent the ChangeView3 message. It is possible to send the Commit after +\* the ChangeView1 or ChangeView2 message was sent with additional constraints. +RMSendCommit(r) == + /\ \/ rmState[r].type = "prepareSent" + \/ rmState[r].type = "cv1" + \/ /\ rmState[r].type = "cv2" + /\ Cardinality({ + msg \in msgs : msg.type = "Commit" /\ msg.view = rmState[r].view + }) > F + /\ Cardinality({ + msg \in msgs : (msg.type = "PrepareResponse" \/ msg.type = "PrepareRequest") /\ msg.view = rmState[r].view + }) >= M + /\ Cardinality({ + msg \in msgs : msg.type = "ChangeView3" /\ msg.view = rmState[r].view + }) = 0 + /\ PrepareRequestSentOrReceived(r) + /\ rmState' = [rmState EXCEPT ![r].type = "commitSent"] + /\ msgs' = msgs \cup {[type |-> "Commit", rm |-> r, view |-> rmState[r].view]} + /\ UNCHANGED <<>> + +\* RMAcceptBlock describes node r collecting enough Commit messages and accepting +\* the block. +RMAcceptBlock(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ PrepareRequestSentOrReceived(r) + /\ Cardinality({ + msg \in msgs : msg.type = "Commit" /\ msg.view = rmState[r].view + }) >= M + /\ rmState' = [rmState EXCEPT ![r].type = "blockAccepted"] + /\ UNCHANGED <> + +\* FetchBlock describes node r that fetches the accepted block from some other node. +RMFetchBlock(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ \E rmAccepted \in RM : /\ rmState[rmAccepted].type = "blockAccepted" + /\ rmState' = [rmState EXCEPT ![r].type = "blockAccepted", ![r].view = rmState[rmAccepted].view] + /\ UNCHANGED <> + +\* RMSendChangeView1 describes node r sending ChangeView1 message on timeout. +\* Only non-primary node is allowed to send ChangeView1 message, as the primary +\* must send the PrepareRequest if the timer fires. +RMSendChangeView1(r) == + /\ rmState[r].type = "initialized" + /\ \neg IsPrimary(r) + /\ rmState' = [rmState EXCEPT ![r].type = "cv1"] + /\ msgs' = msgs \cup {[type |-> "ChangeView1", rm |-> r, view |-> rmState[r].view]} + +\* RMSendChangeView2 describes node r sending ChangeView2 message on timeout either from +\* "cv1" state or after the node has sent the PrepareRequest or PrepareResponse message. +RMSendChangeView2(r) == + /\ \/ /\ rmState[r].type = "prepareSent" + /\ Cardinality({ + msg \in msgs : msg.type = "ChangeView1" /\ msg.view = rmState[r].view + }) > 0 + \/ rmState[r].type = "cv1" + /\ Cardinality({ + msg \in msgs : (msg.type = "ChangeView1" \/ msg.type = "PrepareRequest" \/ msg.type = "PrepareResponse") /\ msg.view = rmState[r].view + }) >= M + /\ \/ Cardinality({ + msg \in msgs : msg.type = "Commit" /\ msg.view = rmState[r].view + }) <= F + \/ Cardinality({ + msg \in msgs : msg.type = "ChangeView3" /\ msg.view = rmState[r].view + }) > 0 + /\ rmState' = [rmState EXCEPT ![r].type = "cv2"] + /\ msgs' = msgs \cup {[type |-> "ChangeView2", rm |-> r, view |-> rmState[r].view]} + +\* RMSendChangeView3 describes node r sending ChangeView3 message on timeout either from +\* "cv2" state or after the node has sent the Commit message. +RMSendChangeView3(r) == + /\ \/ rmState[r].type = "cv2" + \/ rmState[r].type = "commitSent" + /\ Cardinality({msg \in msgs : (msg.type = "ChangeView2" \/ msg.type = "Commit") /\ msg.view = rmState[r].view}) >= M + /\ Cardinality({msg \in msgs : (msg.type = "ChangeView2") /\ msg.view = rmState[r].view}) > 0 + /\ Cardinality({msg \in msgs : msg.type = "Commit" /\ msg.view = rmState[r].view}) <= F + /\ rmState' = [rmState EXCEPT ![r].type = "cv3"] + /\ msgs' = msgs \cup {[type |-> "ChangeView3", rm |-> r, view |-> rmState[r].view]} + +\* RMReceiveChangeView describes node r receiving enough ChangeView[1,2,3] messages for +\* view changing. +RMReceiveChangeView(r) == + /\ rmState[r].type /= "bad" + /\ rmState[r].type /= "dead" + /\ rmState[r].type /= "blockAccepted" + /\ \/ Cardinality({rm \in RM : Cardinality({msg \in msgs : /\ msg.rm = rm + /\ msg.type = "ChangeView1" + /\ GetNewView(msg.view) >= GetNewView(rmState[r].view) + }) # 0 + }) >= M + \/ Cardinality({rm \in RM : Cardinality({msg \in msgs : /\ msg.rm = rm + /\ msg.type = "ChangeView2" + /\ GetNewView(msg.view) >= GetNewView(rmState[r].view) + }) # 0 + }) >= M + \/ Cardinality({rm \in RM : Cardinality({msg \in msgs : /\ msg.rm = rm + /\ msg.type = "ChangeView3" + /\ GetNewView(msg.view) >= GetNewView(rmState[r].view) + }) # 0 + }) >= M + /\ rmState' = [rmState EXCEPT ![r].type = "initialized", ![r].view = GetNewView(rmState[r].view)] + /\ UNCHANGED <> + +\* RMBeBad describes the faulty node r that will send any kind of consensus message starting +\* from the step it's gone wild. This step is enabled only when RMFault is non-empty set. +RMBeBad(r) == + /\ r \in RMFault + /\ Cardinality({rm \in RM : rmState[rm].type = "bad"}) < F + /\ rmState' = [rmState EXCEPT ![r].type = "bad"] + /\ UNCHANGED <> + +\* RMFaultySendCV describes sending CV1 message by the faulty node r. +RMFaultySendCV1(r) == + /\ rmState[r].type = "bad" + /\ LET cv == [type |-> "ChangeView1", rm |-> r, view |-> rmState[r].view] + IN /\ cv \notin msgs + /\ msgs' = msgs \cup {cv} + /\ UNCHANGED <> + +\* RMFaultySendCV2 describes sending CV2 message by the faulty node r. +RMFaultySendCV2(r) == + /\ rmState[r].type = "bad" + /\ LET cv == [type |-> "ChangeView2", rm |-> r, view |-> rmState[r].view] + IN /\ cv \notin msgs + /\ msgs' = msgs \cup {cv} + /\ UNCHANGED <> + +\* RMFaultySendCV3 describes sending CV3 message by the faulty node r. +RMFaultySendCV3(r) == + /\ rmState[r].type = "bad" + /\ LET cv == [type |-> "ChangeView3", rm |-> r, view |-> rmState[r].view] + IN /\ cv \notin msgs + /\ msgs' = msgs \cup {cv} + /\ UNCHANGED <> + +\* RMFaultyDoCV describes view changing by the faulty node r. +RMFaultyDoCV(r) == + /\ rmState[r].type = "bad" + /\ rmState' = [rmState EXCEPT ![r].view = GetNewView(rmState[r].view)] + /\ UNCHANGED <> + +\* RMFaultySendPReq describes sending PrepareRequest message by the primary faulty node r. +RMFaultySendPReq(r) == + /\ rmState[r].type = "bad" + /\ IsPrimary(r) + /\ LET pReq == [type |-> "PrepareRequest", rm |-> r, view |-> rmState[r].view] + IN /\ pReq \notin msgs + /\ msgs' = msgs \cup {pReq} + /\ UNCHANGED <> + +\* RMFaultySendPResp describes sending PrepareResponse message by the non-primary faulty node r. +RMFaultySendPResp(r) == + /\ rmState[r].type = "bad" + /\ \neg IsPrimary(r) + /\ LET pResp == [type |-> "PrepareResponse", rm |-> r, view |-> rmState[r].view] + IN /\ pResp \notin msgs + /\ msgs' = msgs \cup {pResp} + /\ UNCHANGED <> + +\* RMFaultySendCommit describes sending Commit message by the faulty node r. +RMFaultySendCommit(r) == + /\ rmState[r].type = "bad" + /\ LET commit == [type |-> "Commit", rm |-> r, view |-> rmState[r].view] + IN /\ commit \notin msgs + /\ msgs' = msgs \cup {commit} + /\ UNCHANGED <> + +\* RMDie describes node r that was removed from the network at the particular step +\* of the behaviour. After this node r can't change its state and accept/send messages. +RMDie(r) == + /\ r \in RMDead + /\ Cardinality({rm \in RM : rmState[rm].type = "dead"}) < F + /\ rmState' = [rmState EXCEPT ![r].type = "dead"] + /\ UNCHANGED <> + +\* Terminating is an action that allows infinite stuttering to prevent deadlock on +\* behaviour termination. We consider termination to be valid if at least M nodes +\* has the block being accepted. +Terminating == + /\ Cardinality({rm \in RM : rmState[rm].type = "blockAccepted"}) >= M + /\ UNCHANGED <> + +\* The next-state action. +Next == + \/ Terminating + \/ \E r \in RM: + RMSendPrepareRequest(r) \/ RMSendPrepareResponse(r) \/ RMSendCommit(r) + \/ RMAcceptBlock(r) \/ RMSendChangeView1(r) \/ RMReceiveChangeView(r) \/ RMBeBad(r) \/ RMSendChangeView2(r) \/ RMSendChangeView3(r) + \/ RMFaultySendCV1(r) \/ RMFaultyDoCV(r) \/ RMFaultySendCommit(r) \/ RMFaultySendPReq(r) \/ RMFaultySendPResp(r) \/ RMFaultySendCV2(r) \/ RMFaultySendCV3(r) + \/ RMDie(r) \/ RMFetchBlock(r) + +\* Safety is a temporal formula that describes the whole set of allowed +\* behaviours. It specifies only what the system MAY do (i.e. the set of +\* possible allowed behaviours for the system). It asserts only what may +\* happen; any behaviour that violates it does so at some point and +\* nothing past that point makes difference. +\* +\* E.g. this safety formula (applied standalone) allows the behaviour to end +\* with an infinite set of stuttering steps (those steps that DO NOT change +\* neither msgs nor rmState) and never reach the state where at least one +\* node is committed or accepted the block. +\* +\* To forbid such behaviours we must specify what the system MUST +\* do. It will be specified below with the help of fairness conditions in +\* the Fairness formula. +Safety == Init /\ [][Next]_vars + +\* -------------- Fairness temporal formula -------------- + +\* Fairness is a temporal assumptions under which the model is working. +\* Usually it specifies different kind of assumptions for each/some +\* subactions of the Next's state action, but the only think that bothers +\* us is preventing infinite stuttering at those steps where some of Next's +\* subactions are enabled. Thus, the only thing that we require from the +\* system is to keep take the steps until it's impossible to take them. +\* That's exactly how the weak fairness condition works: if some action +\* remains continuously enabled, it must eventually happen. +Fairness == WF_vars(Next) + +\* -------------- Specification -------------- + +\* The complete specification of the protocol written as a temporal formula. +Spec == Safety /\ Fairness + +\* -------------- Liveness temporal formula -------------- + +\* For every possible behaviour it's true that eventually (i.e. at least once +\* through the behaviour) block will be accepted. It is something that dBFT +\* must guarantee (an in practice this condition is violated). +TerminationRequirement == <>(Cardinality({r \in RM : rmState[r].type = "blockAccepted"}) >= M) + +\* A liveness temporal formula asserts only what must happen (i.e. specifies +\* what the system MUST do). Any behaviour can NOT violate it at ANY point; +\* there's always the rest of the behaviour that can always make the liveness +\* formula true; if there's no such behaviour than the liveness formula is +\* violated. The liveness formula is supposed to be checked as a property +\* by the TLC model checker. +Liveness == TerminationRequirement + +\* -------------- ModelConstraints -------------- + +\* MaxViewConstraint is a state predicate restricting the number of possible +\* behaviour states. It is needed to reduce model checking time and prevent +\* the model graph size explosion. This formulae must be specified at the +\* "State constraint" section of the "Additional Spec Options" section inside +\* the model overview. +MaxViewConstraint == /\ \A r \in RM : rmState[r].view <= MaxView + /\ \A msg \in msgs : msg.view <= MaxView + +\* -------------- Invariants of the specification -------------- + +\* Model invariant is a state predicate (statement) that must be true for +\* every step of every reachable behaviour. Model invariant is supposed to +\* be checked as an Invariant by the TLC Model Checker. + +\* TypeOK is a type-correctness invariant. It states that all elements of +\* specification variables must have the proper type throughout the behaviour. +TypeOK == + /\ rmState \in [RM -> RMStates] + /\ msgs \subseteq Messages + +\* InvTwoBlocksAccepted states that there can't be two different blocks accepted in +\* the two different views, i.e. dBFT must not allow forks. +InvTwoBlocksAccepted == \A r1 \in RM: + \A r2 \in RM \ {r1}: + \/ rmState[r1].type /= "blockAccepted" + \/ rmState[r2].type /= "blockAccepted" + \/ rmState[r1].view = rmState[r2].view + +\* InvFaultNodesCount states that there can be F faulty or dead nodes at max. +InvFaultNodesCount == Cardinality({ + r \in RM : rmState[r].type = "bad" \/ rmState[r].type = "dead" + }) <= F + +\* This theorem asserts the truth of the temporal formula whose meaning is that +\* the state predicates TypeOK, InvTwoBlocksAccepted and InvFaultNodesCount are +\* the invariants of the specification Spec. This theorem is not supposed to be +\* checked by the TLC model checker, it's here for the reader's understanding of +\* the purpose of TypeOK, InvTwoBlocksAccepted and InvFaultNodesCount. +THEOREM Spec => [](TypeOK /\ InvTwoBlocksAccepted /\ InvFaultNodesCount) + +============================================================================= +\* Modification History +\* Last modified Wed Mar 01 12:11:07 MSK 2023 by root +\* Last modified Tue Feb 07 23:11:19 MSK 2023 by rik +\* Last modified Fri Feb 03 18:09:33 MSK 2023 by anna +\* Created Thu Dec 15 16:06:17 MSK 2022 by anna diff --git a/formal-models/dbft2.1_threeStagedCV/dbftCV3___AllGoodModel.launch b/formal-models/dbft2.1_threeStagedCV/dbftCV3___AllGoodModel.launch new file mode 100644 index 00000000..8f828243 --- /dev/null +++ b/formal-models/dbft2.1_threeStagedCV/dbftCV3___AllGoodModel.launch @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/formal-models/dbftMultipool/dbftMultipool___AllGoodModel.launch b/formal-models/dbftMultipool/dbftMultipool___AllGoodModel.launch index e522df66..1171d273 100644 --- a/formal-models/dbftMultipool/dbftMultipool___AllGoodModel.launch +++ b/formal-models/dbftMultipool/dbftMultipool___AllGoodModel.launch @@ -27,7 +27,7 @@ - +