From ac9e1b5234fde15ce9bef65aeba3eb92a7ddca21 Mon Sep 17 00:00:00 2001 From: Iann Santos Date: Mon, 8 Jun 2020 18:44:40 -0300 Subject: [PATCH] feat: add README --- README.md | 49 +++++++++++++++++++ client-api/infrastructure/docker-compose.yml | 26 ---------- client-api/logs/pact.log | 18 +++---- images/new-pact-contract.png | Bin 0 -> 22388 bytes images/validated-pact-contract.png | Bin 0 -> 24225 bytes 5 files changed, 58 insertions(+), 35 deletions(-) create mode 100644 README.md delete mode 100644 client-api/infrastructure/docker-compose.yml create mode 100644 images/new-pact-contract.png create mode 100644 images/validated-pact-contract.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..f7d6baa --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# PACT - Node + +A simple Node project implementing Pact to integration tests. + +## Tools + +- Express +- Typescript +- Jest +- Pact + +## Pact Concept + +Pact is a code-first tool for testing HTTP and message integrations using contract tests. Contract tests assert that inter-application messages conform to a shared understanding that is documented in a contract. Without contract testing, the only way to ensure that applications will work correctly together is by using expensive and brittle integration tests. + +Do you set your house on fire to test your smoke alarm? No, you test the contract it holds with your ears by using the testing button. Pact provides that testing button for your code, allowing you to safely confirm that your applications will work together without having to deploy the world first. + +## Getting started + +1. Clone the project on your machine. + +```shell + git clone https://github.com/iannsantos/pact-node +``` + +2. Go to directories `account-api` and `client-api` and execute `yarn install` (or `npm install`) to install necessary packages. +3. Go to directory `infrastructure` with `docker-compose.yml` for up Postgres and Pact Broker containers. + +```shell + docker-compose up +``` + +4. To start with tests, go to `client-api` directory and execute `yarn test ; yarn pact:publish` to generate Pact Contract and publish it on Pact Broker. To view this result, go to `http://localhost`, you should see something like this: + +new pact contract + +Also you'll see the Pact contract JSON file on `client-api/pacts`. + +5. And to validate the generated contract, go to `account-api` and execute `yarn test`, this will run verifier Pact contract and publish the result on Pact Broker. To see, go again to `http://localhost` and you should see something like this: + +new pact contract + +## Links + +- How to Pact works: https://docs.pact.io/how-pact-works#slide-1 +- Pact Documentation: https://docs.pact.io/ +- Pact Flow: https://pactflow.io/ +- Pact Broker: https://github.com/pact-foundation/pact_broker +- POC with Java: https://github.com/vinirib/zup-pact-workshop diff --git a/client-api/infrastructure/docker-compose.yml b/client-api/infrastructure/docker-compose.yml deleted file mode 100644 index f271e01..0000000 --- a/client-api/infrastructure/docker-compose.yml +++ /dev/null @@ -1,26 +0,0 @@ -version: '3' - -services: - # Postgres and pact-broker settings were copied from https://github.com/DiUS/pact_broker-docker/blob/master/docker-compose.yml - postgres: - image: postgres:10.5 - healthcheck: - test: psql postgres --command "select 1" -U postgres - ports: - - "5432:5432" - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: password - POSTGRES_DB: postgres - pact_broker: - image: dius/pact-broker:2.27.2-1 - ports: - - "80:80" - links: - - postgres - environment: - PACT_BROKER_DATABASE_USERNAME: postgres - PACT_BROKER_DATABASE_PASSWORD: password - PACT_BROKER_DATABASE_HOST: postgres - PACT_BROKER_DATABASE_NAME: postgres - PACT_BROKER_WEBHOOK_SCHEME_WHITELIST: http https diff --git a/client-api/logs/pact.log b/client-api/logs/pact.log index a9328dc..d35e50d 100644 --- a/client-api/logs/pact.log +++ b/client-api/logs/pact.log @@ -1,5 +1,5 @@ -I, [2020-06-08T16:27:40.747854 #72346] INFO -- : Registered expected interaction GET /balance/1 -D, [2020-06-08T16:27:40.748158 #72346] DEBUG -- : { +I, [2020-06-08T18:23:47.117649 #92963] INFO -- : Registered expected interaction GET /balance/1 +D, [2020-06-08T18:23:47.117904 #92963] DEBUG -- : { "description": "a request for account", "providerState": "one client with your account", "request": { @@ -19,8 +19,8 @@ D, [2020-06-08T16:27:40.748158 #72346] DEBUG -- : { }, "metadata": null } -I, [2020-06-08T16:27:40.750413 #72346] INFO -- : Received request GET /balance/1 -D, [2020-06-08T16:27:40.750535 #72346] DEBUG -- : { +I, [2020-06-08T18:23:47.119954 #92963] INFO -- : Received request GET /balance/1 +D, [2020-06-08T18:23:47.120081 #92963] DEBUG -- : { "path": "/balance/1", "query": "", "method": "get", @@ -32,8 +32,8 @@ D, [2020-06-08T16:27:40.750535 #72346] DEBUG -- : { "Version": "HTTP/1.1" } } -I, [2020-06-08T16:27:40.750789 #72346] INFO -- : Found matching response for GET /balance/1 -D, [2020-06-08T16:27:40.750876 #72346] DEBUG -- : { +I, [2020-06-08T18:23:47.120359 #92963] INFO -- : Found matching response for GET /balance/1 +D, [2020-06-08T18:23:47.120469 #92963] DEBUG -- : { "status": 200, "headers": { "Content-Type": "application/json; charset=utf-8" @@ -44,6 +44,6 @@ D, [2020-06-08T16:27:40.750876 #72346] DEBUG -- : { "balance": 100 } } -I, [2020-06-08T16:27:40.756292 #72346] INFO -- : Verifying - interactions matched -I, [2020-06-08T16:27:40.761010 #72346] INFO -- : Cleared interactions -I, [2020-06-08T16:27:40.765737 #72346] INFO -- : Writing pact for AccountApi to /home/iann/dev/pact-node/client-api/pacts/clientapi-accountapi.json +I, [2020-06-08T18:23:47.124950 #92963] INFO -- : Verifying - interactions matched +I, [2020-06-08T18:23:47.127843 #92963] INFO -- : Cleared interactions +I, [2020-06-08T18:23:47.131515 #92963] INFO -- : Writing pact for AccountApi to /home/iann/dev/pact-node/client-api/pacts/clientapi-accountapi.json diff --git a/images/new-pact-contract.png b/images/new-pact-contract.png new file mode 100644 index 0000000000000000000000000000000000000000..a49dbd4ed9f4dee29b3d3fe873219b7f39d9a85b GIT binary patch literal 22388 zcmeFZWl&vB6fFpW5CXvo?oMzCu7Lm-cXxO9i@UpBJZNxtE-t~{-5r8E3`xHCYJSZ7 zH}h(yYN%7ikv`Jhdv~w3*X|oCD=mruhXV%z0f7Jz6PAa7fX;`2fW(A_c{}3~d>i-n z58B}yKoR!s&jZ#ld0E7h< zUDJls_!@7stxwM?NP~#F1-Xh;=CSsqtmzV0ff9`xAznAlrot_fH<;ZnO1I`TuTUwGER0cNK?2 zi2C1Eg!KRaasRir-R&0A>Nj9;Z`NwwLr}0NiJU&^$2bFO`+JgmO~3gMC)xjX-ifG8 zCXd^NpoZ&^?4eq$gjk4+t7ahY4pEtr`+rwOK=ytn&b#g z-jUD~YjGNuE4jQX&t-1FKr}10sZ4lj^(%@$6guVkM6^m_^q)aE8h89q3^?9|v1n2u zoZ&5!TWB832v$;u*g(;sX%Krgk6bp1mvAbYL*#d+{P$&ifGoowmp?Yp6~d36E}S!C zr?@qYX4!EFt5j@C0N_=(XT5($#4nI#NabYCar^la^lRZH*F3PV|7di{Yz`KOum$a3 znXCfexdeCaZbN(OpD^IGNSt6Tu}|Q;eP@HLiyQjHMdE9b__r66eIp~Fj1`N^q?M)J z*4CanyhoE?STHQavmG~`JPZ&fk=qPql0V?-1({9eVsbmQa`t1oAkt?RUWWvRikh%b z&ArmyhIL~i9uS<>v}hHePSfA;;+T-d5+#l*Q0-<}$o&1B1Ba{7V0lI!=5Ofx5CQmH zR_jfgyD5W5=6@^?t*Gzy__9uKH@}fSpv=0ct--ky ztFev@Z?X=&i1)Z2n&mmRf`=zp)@dcfwZ-G5$pK`WJ*HFUtUuo?A*K?KlejkiviFDw z)-W8j{D02qnk*8#%`s^db4vv-_&gFali8+*D?gBMf3%v~U8+6WK6L3? zMU2i6ueatSQ-gH|j64ecj*V$M!2 z=5fw+*|O=(RmlPXUyWmh9JK;Jn2C90vM!m{3O8f(p$?GqoR;y-EO>k0jmUmlSIv8Byt3X ztChijb{i$*UN8;VLA)&~9J(dRgO88ka~KvoXKNp$tQ^&9)XI2AeL``YsrsbQ z_?+@2dwd_K{@)uxGAs$^>_06l6q?&_Ys;tdN#+WIv$!3p*u?cMuSUAERntu?hSA3h zu8*e+wtN=V{6A7mjWxKe?jOTE*4Rw`mgo@;5jy+IMq{Z|9y18ek%Ia+#$R#kzYPLn zm2DkevqJ=DlYC~A9OhcIHUv_aGmBs4ZBl;K%0!vfsn-g@c3+y9x9YmIT_O>Vb3Aj# z>9W2UpMYy7@B**25dDx%<+Wcp`==a+(Ju_Aa!)HM|Jt^f34%v~;t^H0)78V4^!NDW zrndT?>C3^x?H)WxY9_I0r5CrbN;nTJ2xMA2N+9ren&N+n7Zs3>%n%OiY-K`INN5pBlo;{ zT0#t2wpkri;0)!Hu_BSsT9DTjRR`!5UfK?39@*0M zovq>*DiDi~6RA~-p#?K$o4lN(ig}uqj9eU2agRzQc{R?p{@E+b#lc8|JMKyU@|r7- zSnuW9Z(XayCj5s{V150)TkH>qkIM5et1K0(i@&j&Hs3Z9$0b(8n}v#FxpGAg(;Ig* zf|HAD{fLQ?eD?CHf3wq7(Y*#?3)Gq@`#dR!))@wX<#nb6iduTnQ9G8kchfGXkX@ZF zN+(g*(^QBF^?=$qd3Ju@ZP@=PJ|dmZxpw6FVnFmb{hycLUaAGlmu+noeoYbS!zT2) zK40OUILjQ4c619>HX^{kag&{+b@WlMogJK5GOt%S;P2`8| z;v;FjvhsX6*aLDMAe&RWa=aE6KLBQZ7yq}(AGV+O2i_1JpDFwaK8Ck@{1*t6i-udZ zA#g=})^FE?JrA%8n@*@i{Cl_sGP}iEM5Ld`N*tzvjLahqX>%WKq^dMe2?_D{Etw6N6T}T0VpRN%v%+f0u~&)NmmS*Ile1gI*YmZZ-_as3Hiy>+FV$!lzzLL> zPX0lKyF%(wn^jDSCxftFK%Cuv{VQ6=>lOQx)SU)NES2}(S>dnUy}PWJhS$Kr<9!Kp z?&p;DwCDZ^m*{&W@70`ZcH&smgm#uVvS*nW>enm67cH;lGw+)$%z^0Wi>&8Wn|rI< zhNqhbVsEq;3?DJpQ9`m8;#aK~?{)9iw!zn@OZ3;?=(Vl0|1b&Z-EWrv0D7K@$86x} ze-7`){Qnv#f7(xY*yDYU>3#k~n(m*YBCX$gzutbBosIs3Vhwf6{+=cSG5&Exb12Db+MNNG=_*epY6#;;BC==Z2|=o;S? z`jLVH!*!-|epT(bj=e>23twkM1K8bmpykRteQWTCCS1i{^F4i5<9})$eLh80V~~!~ zavx6fm`%L$B>$C{12OIYF!kzkBIGCXx+i^dFeb2-Ee$K&HyMG1P?|ew;kclap-<8< z_|ktGwhI4;SLQ_*OBpqY-z{W30y&oRJ+7*_iJxOW#SZ6%Kg3r$r#JJiZ5W>Ml~BYl0p zW5w9OI()>X3hvwQluPj79ai`>=;%3Bs_kFKHIgIrRchR8n;$!O&9W$d?ZOS0S;_;A zd;11nU}zlP+b?{is8$%JPjX$}9~t?X2q*cZA5MXM>N!Fvy{&qFWPRX|E1eI3U_F|C zT$no7%fLX9Z~A1n{@W5mDPxgXAYGAdg1b@60O;hqsaVgR^!B#4*Blh`Z?2j@YGuii zN8&P44V((kyVPP=7TIWO6u{>NcgL-wJTrm&{lU36_ zxpvX_l;>Ub)-t)=TDzuupwSd0c)YHExXWm}@g7^u)vIYyF(;nj$I}c~HDh1BjNYpJ zdfrGruJ;+G*O8W#rJCXElb8S+{j*FV1UQ^SxtC`?;^N(b}Y|js-oVbBva{7~vOYmgLI_Ig{H_lA$yN ztc*NH5ZOEArk?E`?68A7Q6Rvb-|MN0`z;c5#eLKW;NTnBmQA{^BQZ#i;dsDq@FV@Q zBZPt3PgROubgFC?WXG(ctcnLEUEkCWgpQEa)G(obKTM|fv`H}&jC+i!GEi@!ctk8r zq1Fl(w}#FBwe6lbyHB+-E;0K2B||REf_xWMfJxBA9Asb8<(w~7KAt}j5f4f?thLR^ zUuN8HmZam!QKCb0EKI@SGTwWkms+13wj!X-$J$Ie3CvO`R&r}x(si(ox)%Xm2xf@c zr{*V8)2fgne2cqs4G;xptWLICrunjg&EtVBtwc@#>f2eCchk_sji+cKdx&ZvyGKK zB|pTN%&oK;eVc`SyQs($m?~&TGzHp`_X)R$wItMGG!lk7E5&?Jf8%U~gQ~H0^5+L9 z))B66B;Ro{BbmQ~z!vLWEcC$LM@mWo4sm_xVo}H$7{h*%CiLL!y8grCcMFa|l5A4$ zUQrV+&k;`4LKG9PZd6jnp9TfRa%X+Mg)Pg6E;n_zoXc$r&>WAOLFoz9AtF;|NL+Up z$c5eBaNcUfT*>u_<;PdL2#|8*@vi(>h3@MI^u;;GqnO?p%aK2R9~G6S7V%Y=&4pr& zBU|O$$U}&Th|eAtl+Ev(Zn7l;@FnlR@`$q~ua635Nasq&)0$kWi%@_Du8Wlr@|p8; zH1M1jYc)E|_N5af`G6R%y_1}i6Iz2AIGuvY`gw%0oZGCfIDTHbN)?1x;pw74VvKR?+qvHa%R89-Ex_}<42m-Nl5PE-QF7P` zRc|-j2G6Q;Ma!#YR~BJISdNjyrLq@QR8nUzr&-zbedO_vW(`8ku`jCFP4l}4sf zUYOY8W<)nC4jxTQkj%?>BV2(d{qd*7X*4coqvcfz&XuuO)EtK3J9q*D$bpKx>s{Kh z#B`2Ty&YqLmoz2&wxSvM=~H_9OF1-=3r(FgVr>7#=l7?II{2~(z4~CSY7(>ZQY~Wq zraRZxTh3Tj^Q6fe+LJAux@?iU>XFe^6kxu_u`wG}n^i`Fay-V>Ygxm=6+cIhJ`=~n z#_pz8v0lPeqD{(JBr4~s-u01ax>X)#I7&E#UNAgbXS0>`q81j8@%&Kh)j8SJo9(b_ zIDJWsK}4C{0z(=((gM<3;$&;J067-xoP%eDSU=#2 z-9j=6^WME;aHZvOTe)Vm3)_dig#a;@s86hClcw3r!+c z8lv{6lKC@GW?n6G(}e#KTjfk=nVkAKz;z}W#?&-@SQYxGLiw~W*}+t*_yFq`%06`B zYFwklRs>QOUjhl-c+iHUx1@OQ$0gzo*@*eT+M-eIYe&&KgB$-<4lEgpM_h(hU)3;4 z=68;;gO4U#!Y%528s*8@gno)aj_9yZgO7!noAh<|i4+1kDriSVa?A^FA>zvj(d;^n z%@>Ej#p@UF!u4;mc|8Mgk277@zN(E&Tiw!}7!+%oNs|dQ(Wj5kC65{FlGL7>D?;_j zn2l&x?a~NGmUQ$T54eq*x@3LyAaB|x;Ll(u8>?esJ9`+POH+bl4eC|Sk@FgFabCe7CTAi}&I2f@H~JKdYpzW1Fwp=>%BlRX-c ziT=oq!fh$WA(-3e46NdMRljaFF+^KvhU@I}^rig71;Swm?k%>1A?=69A{D^Ej@6M8 z+T(m|v$>y&X&vPB44-v)R>{L?rEKi3Cs3C1t-^3?7zi=1``XT~e~Xt6&UQ1Go%lR^ zr1r=r8(T#~gcwr*x)!R(j8%VJ?Z7=wsi;zOcpp04bf;0z@EUtNB=#=6YdVHT`wP62 z#JQ)RimfY~5$coMx0SC!-zuJU%~!A$CU24d(H9o)YEHPC@C0W>?CoTUlZ;;N#~NJl ziih@QrK0X1pe}DDzzh8FH`4q-8^bjNUy#mpErjlz%9=Lz!db9FKmt60QDIIFsfTiQ zxjon|zdU(xGVaSAhkL7EKwe7Pm;*IjhH<1h_66Rs4hmr(#?+B zKz+skgt)g00`!ND=d|hMPIz9rYs9r>34d`?w&aPEjQ4neE!tinC1WWnl)=Fph=3Fbk6*>azlj^lF7S2lqTnh#8${p&|unqww z!AG;%cZfLJ{CqC_?ibqw@kn-m_;OU%(>5jH=JZ)Peq~!_Pq#Zibf|FXz?}%TZ8p$;rQ$lKh7?JB!vez&%w$6{P)n+a{U;~6C&eOn_|ui~=eW7MncZ|2 z7&5?vFOFlFIY5hx`^*Se;2 z;|9(_L9KcLueaCfW^C*o@5gynP;Sf-epbepYTFIX&q>v9{1#n}-{YZnFR7Y!mReep zF;*jg(sg)o8GRv?wrSyWJyJ`pMH=mhbnJ*RHEja@jqg9o+qCKc=TK@nI~r(PIOG{t zdZt1(vYYa&T=t%?-35@9B3EEc0i3$g5M`Ba{qvzGSNYBXO zXz1$mYWFdFwDUe5tZMf55?m+F|7H_<)pauvo_tnkVOc)RoH!CU@>xx@VtgA!*Z0tG zm4zE#Xq>FdZoN~V4+A>kkr0Wk-cz#Z!dMJ_2|`=H!4F-?Q~ae{r1Y32D2iOZ2K zb-W1$$`7Tb+^086DRnpFzA<8gD7*>2p31sL@pcVjiC%Mw zV_9VXBNu?D;i|3uyMyYUSJ5|`R5H%VmNQ!i-x3!@SW>$_mZ^xKuQw$|r(W2y?avak z_G%X(SRfF;I1%bs0kDvVwq^~Q#H@fa_{W1~8YPdm*7m6Ohn(bJ+w#K230_Ki-S@39vVSlYJB=OqAf=4#bHTEA(#nxCYdG43~w z6QyN;h(sL&BF%XNevySYs0<)LqJuOmCUNjRyYZEf*1YB>xJoYM8n`EtXv65U` zo;Jb2*uG&{-M~}0au8^D?bD4MLMGNH!@G+ICQx81zr#D*>BYa(g*HAHD#H=IP|c+cNyx5*-(G! z(!eBgkw-oIE*?H|x&Un&CEEMcLW2RO$3!k<;tX#9LXmqJKLt66X9e4Y>N~x|xrV>U zfBfwmeCf~GOA7mx@yH1sG)cSq5;lA2c@y<+P!w`URKPG`Ab+X!bN}jw&@^(@RCz`{ zW+*Z*@5I5dZ<}??N?Pn^<)-`Iu}n^taAmYiFRn=BXpJz{2Q8GhNt(N`A*UzatY9xW zWsLXnl}Ci<;c9lF5haut-v&Y-Yy_5CtmW>oP4eIxT-DAPd|`5!_yTkyiqqq|-F)A% z^1F90sxPNw>b!2{6shln%iC*CwRr%AfTM34Kf|As-|BZ|_P7xsKk%t&A7ey1<6@N9 zAsln>gQEqxG3G5c-Ed890@o5B*z-plAkEo^!D(}XT@}hzn)a)N88GR_F7l1|sxKIu zoP~fV>6}?`(Z>oT0t5DDFP#=`S{l!KgY=n51h4>a`aj%(iTTI=__KU$Kvwo}UC6i!FBTth;wP^V0 zW{lDEIB8W0=IDJ3EbE+RdX1ObUlyWC8k(pfEmn9m=S9;d663$`^0`=0&eSsB`6A^b z9Hi)d9AX5Ymy0|*xV(k{8yZJ%sM99*jbtXR5{IBt@ zQ5*-Si{tY|g7(?o4La$P3DJLyAxn;`);L8@z)&sC&&C)JiyYUmx#LCH`(Lt!wf0C8 z1ahj?m!#8+cP?*yk6$=$xOB~c>6ti=5pX6&+yAu8G1Kzlc%^l)OFK2zIa0jtqvqzt zTi8c@Up4jH9~lrj~j*=7L$c2oLZDPL*)4r@}aOjA=VjETWVa=Y7U;4Ol@YFg`gsgKr zamms{!=q($`+tdo-C>DDPD@b#z-)VA*)lZh@+#-%a)#qcPbJ)n&!pfBADap(W&$%= zx2uo~y@2T}r_-`AUWMa3-Zvb3bHm#vehUx2f+`}1qCQ|@?3rKYLbBGRh==7YJ+8)e z3@I#ZdRZr+ISBuHI~mAYNS=|i@U*at#K0!GA>us@AN^C=BBp&*ooNDi=Qxb}A2L3T z?2WD;obDpKw^*~cp?=;_K8lo)uRHwI$AK85^ zw3-@R*3|>|JJiRLZ3>E%6m`@g@6T4T5|9L~<+4sNf+`7r%Q?Y#tsZm;AJ zBAGPQy$`wcE5qvsJWb+AJd3kxBk{}dm+k=H{Qm6w8!LG0 z358OncWg<5-Ud{G1i@gWLj*p#va1McZfADk{ z9!=WU(c7O(^LkF@0`zI*Dyq6CcK)|DE|qz=r)0VYMp57Bmo#ozl??T)g1gx|n9^#{ zJnZ%$eEhj}7@4Z(2{oi)*<||tK2|rqbD&8}N0h0P_YKvtoPh2ESKN1p;?X>gt1{dy zs<}Vaq5~e8!rw$B3gZRSt25x1okUhr;attPgWt=~S~n^{i6eWO#FwvIU+3ccxO!i% zt5Gd0857A{D!T`2hHlNt;n0Q>gnTG8R47xZ${p^yc7R$@G)J@}7{82wuhy8#4Uey@ zG8u1)407p%aU;@9Ew#Rnb_hv-6xd0Pa7J`UQ-!uVk*}G1gOX9Pm4M2+u8RfAvWDqJ zy%S}SEv?iS#Igqhmn0iGw=MQxTIMd8s$Px#cC;f`!=I)OIQnPk+O!*cUs(1ySJjQ{ zmPs(81q%VcO#{=G3ab>;bgg^?TZ|6#QrhIn@JkfhYC1NJU$32@#KYMacui6J6bz^A z4qa@jucH`rCWEJSw}!r-CLIaOyBQnP$KxI#^E3~14I)zZV5MbJ;Gf~+zwzx0$xK6N zoU|d@RcZ%hieF>HF`*3{RBL*6*G!ZGJX&P@s};1IaT^yqB=I(_7iTAZbe`fO1E1X; z4pRlM&7^uxArs9%gv5=Qgn$RG15|AWOx|F;nZF1tz@F^piFw>Lb#vzvxH?NNEc74y~Xu6@HXoT*37PwST^tcWwQAEt)HoQ63Ua(kPsbv-q z%=HVG^2`3%Gr*9j3V^DmwzNTZMC)npSTN(7ZgC@ca*wL|f#!_SzHadN++SQvniHAyQ z^Z%*v*sz?F#2+cC=jI0Vh>d9*xZ5OWzbCzSQ#Ka$Mf)vr5o_Q{^Ms59gO6G#;iSjNu|g5jlRU%=2fGGQmv~Dp)~I z&`yDfITk!muE}siks)D^9H)@(uH}mf#bz?i82gvurd>){yRi=LKPUD1Z1u75T2unt zCE>-iH40g|;m||IUea4;5b6=(X`}F~!Pv;}NLh|}RK=Nu(*_5})aboCbW-UV|0F`V zo1pYjvY2EgqaN6a{G76!HLG=dlr<-l;G22XcIA+={#5)|A?Zp>r<2wvgS*CvP6}gn zP-8y$bTHty8ATS{VV>*j_jkKYeR15;hw0Jz@i zTZV+SauimGO)}Aq?QQ6g7_q(|Uc$(D-KPHTXhh;%4vWSSl3wXzZet7bQ2Kx6+EJ2E zy`x~Ks2=yVtI7OldI{-G(!C_2o)8gI0WofmsrcSsS~^?euHj{eC^IXh#Vr~F3ENjr z))mqjOXSSocy1gY1P%8$MSb3|JWz<>AC@;O{9f`g!?|$H@_1P|h>FSNt5{YxYj{I@ zPMv!eIM?SwPT(E|8C%c(fX$+}Dj5cnvJ<93Tto4w4C%Mvv(=jmx(9)V3#r~i)`<(W zq-3|QrQIhD6k>0VlvBzukT7jd+>Vzyr#a7azn)%T9`jw=)=cZw$E-qC+8r1olbUKR-?;40&s|YrA6)8}c%JEMIlS7u zTJmHB{+E0}C*dXi*w*2keuh!}VUT@zPb3uYtn%TSG)j9(mthyKJ0|8Opty!;J$)`p zgJLDCdSig6NM1m8iIl@qp7-4*Hr&DL+AFS>%;;;HDcqC#Z zh3W}DbyW^Gl%!n*3d<{Jmd2%P@%`0Q7tWuBOQJ93y0J%EKAiSmA*^o5;*7J_d{jxKK5FuTxhzLnS)`w;@n_=xgxXYD)-CrAomgn$(S9w+~EeeWwWLLxE zEKQOH1F{PZYanjKc)&QmXVI$5YoCoP^LXS_iONT5|DP&gJ^=F^YC z1j$2~CD7n8I|;)6-(>fS&|Hv9w=~nfcZR;_Q?>^P<&QXKS^xP|!z`m;XajJ9jMQwsy5B#*?Y7$_S1AP#3MMYQ z;;B2`(9o@;f+YR+!ur~VZ8Pr=5HJYv&wmebrp5zEM3n{w(fTURbxC_o>&58XM4Oa$ zW@oVwCA`@B9Rx^1Vr68R%2J}7F==rtKRzPou&w->ͨz`1Fl_ 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 G3H>LB7H=H@ literal 0 HcmV?d00001 diff --git a/images/validated-pact-contract.png b/images/validated-pact-contract.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae78be669881026e4eeed1a164a864b9f6da49f GIT binary patch literal 24225 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%0D9_khX|00QL z5kA=6=$XL!0)q~yz?iMo*Ipuo6+v;%y`}t7yUi_u&q;xTrGpTzEW5{=6it;HxVK3zXYv$w2BIS|nj~63W`nl*dkw6ye{O1MxS^hBzpV zx{9#xkho_CRjb6?^?4<6WTl$zB(`uSRnyWd*o$t>)BF1!MQX=!zz0Y{OT*TxQwEi` zzNTB0>s_4){5DXzv-8Q6J%6GEm~97?0Q!WE`O)K){%%tu-m&Ccd8|{GKMl7Ir!suN zuxKzKdFwIW{_1+?Ckpz_jC(nv%x;jA2nnxH2w?}uzY&e9npb&Q$ztVifAJE=vKHZ! zNvKAZ4DBBJI~6s7svK77kW40_LMsUBYza zT(_Ep4jJO(zZ~yKQEy-~mdPdkwo>GW6PlBcJD;CKBSa>%I~ptdguHxi{y=5-CXibJ zV+<=4aTm0+?Lob8-LyL(x-LgIzp${K+AwBT^f>k5X3wrh%HVP0;#O|5fnh}NoSNyb z`t|QBwxOk|)E}|EHamGpcrMuzA~IwqMIyfPgNxr0Eh!$$uX$DF~!Gt_dZ z5vrS2aqeym_Ru;QfC|$^3Fd&^1jFZXO)?WDJK`+fD6Z7@EjIB3j^0%O`HvU+7Y)k$ zO&_?Etx~+Yy4jHNNWA$Y}?l(w)b3K*hza9P%CXqgu2g4vcE_aG=dh=!mX08 zr!^mP8V?;=r!v2`AZKsQN$dM5@SM#SE5U8#b{H>Z-EsG_7}GymRM{$ut&)g7zj0pehIp zczidphgm5n+-K~GwBCzCTFNB5Ib4FWbeXlms*nBPD~Ewuyh z#t%55styB+yl?5R?h@=#Efk(wUV0AXF?)8gyQdjY{|!sUvqmDGqTlRoQ91w^DKRK^ z^%Sv0#;C_MR$=uGV2pHhkZjCAUA}noq$?%Gu*#eo7fviw?Lz@Gy&Z!>bkr10yy%&A z5!l7{$5_%yO)Ysmy}a33Fx!Ju`+FaCDum*|%^l8{Ur$lP;qVHX@rpadf_bj(c*E7_ zl#!8yC;sku}q; zt8u*hwDeJ}7G5jLZVYS$-iSZPEq?BM-fURO`=T03FTJ)`c0zW(*|BUF2a(fMQA`@abawfnyrAWcZ3Dr(Q(pCS;- z$_r9?L^+5Gs4Hl0501xgn#T)`|B9`${6l#4|J?rm@#F2jo}OnVpZ_3LD7(=Y ztxl8B(RJ2;CZ1+&++TX1NfyaP(|@TyMcMvW>-AszKVR`5K4GcIDhnz#lbB~@dOpzX zRxYTG>71Q%4b=XFeEG*xRK#sw=RKUiJF}l35a+{jW=Eybw20dMB!=33_Qwsx3oQHk z6>uVsW}k1pwR5ex57~`6OQ+R5+Ok>YZBrL6ESw_6VG|^tKXfW1*}vORHr>-U@6TY= zI4YG#b%~6YAKnshzCFb&RWYrkk7Vt$oE&Mw@lbEzJK91-Y!D@srgxI-a;cZX>F7|r zEWbnh&toTOee2eRwI`SeW@UH>DiNSRncE0nz=*EEx&eUM&*PiWu0*%POA}R*0H{`tYjEv@XxzgfBOVAucR%AjaIjzFE%>W}q`z*BsX( zlVhPI`_P|)(fdMPp#=0D66;sjR#i!b%?_Lkio;k#|CZKGV%LM@KOuNXwZW2N#duim z*8sT0^nwpBfht;&<*ss1TK>`$ZR#*&SbAr1Jfvf5D_efQtdRkfXf*d^xMyXC;)XO2 z^lgTyMW7#|nHM@G*RQq6|H9tHe74^8gzvw(!}6Jr`794l#eITP|;DYP_lXRKX~$@RR910 literal 0 HcmV?d00001