From 83a0ab26847de6ce86fa422733bd662a651a79df Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Mon, 10 May 2021 00:11:10 +0000 Subject: [PATCH 01/33] GitBook: [main] 53 pages and 17 assets modified --- ...=> air_fold_4 (1) (2) (2) (3) (3) (1).png} | Bin ...=> air_fold_4 (1) (2) (2) (3) (3) (2).png} | Bin ...=> air_fold_4 (1) (2) (2) (3) (3) (3).png} | Bin ...=> air_null_6 (1) (2) (2) (3) (3) (1).png} | Bin ...=> air_null_6 (1) (2) (2) (3) (3) (2).png} | Bin ...=> air_null_6 (1) (2) (2) (3) (3) (3).png} | Bin ...uential_2 (1) (1) (1) (1) (1) (2) (1).png} | Bin ...uential_2 (1) (1) (1) (1) (1) (2) (2).png} | Bin ...quential_2 (1) (1) (1) (1) (1) (2) (3).png | Bin 0 -> 88135 bytes building-a-frontend-with-js-sdk.md | 18 ++++++++++-------- 10 files changed, 10 insertions(+), 8 deletions(-) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (1).png => air_fold_4 (1) (2) (2) (3) (3) (1).png} (100%) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (2).png => air_fold_4 (1) (2) (2) (3) (3) (2).png} (100%) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3).png => air_fold_4 (1) (2) (2) (3) (3) (3).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (1).png => air_null_6 (1) (2) (2) (3) (3) (1).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (2).png => air_null_6 (1) (2) (2) (3) (3) (2).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3).png => air_null_6 (1) (2) (2) (3) (3) (3).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (1).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (1).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (2).png} (100%) create mode 100644 .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (1).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (1).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (1).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (1).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (2).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (2).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (2).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (2).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (1).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (1).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (1).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (1).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (2).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (2).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (2).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (2).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (1).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (1).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (1).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (2).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (2).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3).png new file mode 100644 index 0000000000000000000000000000000000000000..a3364b242fc26c051a3c4486545b4eca7d421b29 GIT binary patch literal 88135 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 %(j5RsluBmd| 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 literal 0 HcmV?d00001 diff --git a/building-a-frontend-with-js-sdk.md b/building-a-frontend-with-js-sdk.md index 3cd7e70..154f14f 100644 --- a/building-a-frontend-with-js-sdk.md +++ b/building-a-frontend-with-js-sdk.md @@ -1,18 +1,20 @@ +--- +description: WIP -- Tread Carefully +--- + # Building A Frontend with JS SDK -Fluence provides means to connect to the network from a javascript environment. It is currently tested to work in nodejs and modern browsers. +The JS SDK provides the means to connect to a Fluence peer-to-peer network from a javascript environment and is currently available for _node.js_ and modern browsers. -To create an application you will need two main building blocks: the JS SDK itself and the aqua compiler. Both of them are provided in a form npm packages. JS SDK wraps the air interpreter and provides a connection to the network. There is low-level api for executing air scripts and registering for service calls handlers. Aqua compiler allows to write code in aqua language and compile it into typescript code which can be directly used with the SDK. - -Even though all the logic could be programmed by hand with raw air it is strongly recommended to use aqua. +To create an application two building blocks are needed: the JS SDK and the Aqua compiler. Both packages are available as _npm_ packages. The JS SDK wraps the AIR interpreter and provides a connection to the network. There is la ow-level api for executing AIR scripts and registering for service call handlers. The Aqua compiler allows to write code in Aqua language and compile it to typescript code which can be directly used with the JS SDK. ### Basic usage -As previously said you can use fluence with any frontend or nodejs framework. JS SDK could be as any other npm library. For the purpose of the demo we will init a bare-bones nodejs package and show you the steps needed install JS SDK and aqua compiler. Feel free to use the tool most suitable for the framework used in application, the installation process should be roughly the same +To demonstrate the development of a client application, we initiate a bare-bones _node.js_ package and review the steps needed to install the JS SDK and Aqua compiler. -#### 1. Start with npm package +#### 1. Install The _npm_ Package -For the purpose of the demo we will use a very minimal npm package with typescript support: +For the purpose of the demo we will use a very minimal _npm_ package with typescript support: ```text src @@ -112,7 +114,7 @@ $ #### 3. Setting up aqua compiler -Aqua is the proffered language for the Fluence network. It can be used with javascript-based environments via npm package. +Aqua is the proffered language for the Fluence network. It can be used with javascript-based environments via _npm_ package. **Warning: the package requires java to be installed \(it will call "java -jar ... "\)** From 9001aa511f338de1f46b0c9d0d9305a2bec89b36 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Mon, 10 May 2021 00:11:42 +0000 Subject: [PATCH 02/33] GitBook: [main] 53 pages modified --- SUMMARY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index dc5a469..288370c 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -19,7 +19,6 @@ * [Blocks To Database](development_development/development_reward_block_app/development_persisting_blocks.md) * [Additional Concepts](development_development/development_reward_block_app/development_additional_concepts.md) * [Summary](development_development/summary.md) -* [Building A Frontend with JS SDK](building-a-frontend-with-js-sdk.md) * [Knowledgebase](knowledge_knowledge/README.md) * [Overview](knowledge_knowledge/knowledge_overview.md) * [Concepts](knowledge_knowledge/knowledge_concepts.md) From 7740af72e9b830d9e463d1f7c99ba2f8af6918e4 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 14 May 2021 00:18:00 +0000 Subject: [PATCH 03/33] GitBook: [main] 52 pages and 2 assets modified --- .gitbook/assets/image (5).png | Bin 0 -> 68908 bytes .gitbook/assets/image (6).png | Bin 0 -> 68908 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitbook/assets/image (5).png create mode 100644 .gitbook/assets/image (6).png diff --git a/.gitbook/assets/image (5).png b/.gitbook/assets/image (5).png new file mode 100644 index 0000000000000000000000000000000000000000..b4ea5bfd880d34397a33fb516f21dea43a98c630 GIT binary patch literal 68908 zcmeFZcUY5I_bv>G0xE)_fFckJpdv)1NhfxsiS!x;0qLOh5}Jyr6r~ABQ3Rw$dQU*A zAiV@aiIfN-)IewT(d+mFzz1F=~$Q|{Y%=?e; zr=g)?R=#!ZE)C7zNg5hDf5v^_Kh#Z+EE*aJjq){^wg>HOB174k>*eS+>8W>xZ=b7( zFU3Nhe|e+*!JkW{%lkUhfm8beKRjnUsK+0o$M2z8wf`&^%~xwqR#rC{$F-UZmAyL~ zI+V8l6~esOkG;|}Drd6SvNtPcFcN(%j8zaCT1F)rI#z!g`oH;;OD2Hf zpghB+zkmAse<6@&EvCQu_3zJV=uSiYA&PX(4`}~sGNp)&L;tfVV6YoXG%y5x#8
  • %N@!rr5&XPvxB6L;Ys*MO1K`%l{UuVG|_G>6k% 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 o!+~QhVOe@(>7m<_(8oR{sSK|WIu5sAF^F|>N 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%0Dr)VUFd`6esWYW zx!;k)aq!>DqX%F(@8+N(o0Tv_b{G~2pOM2_t7o!L%@2FmqNs;DOtx)>>Pz!xbBMl- z9fk(-u9yTOjg)}x2vV33td)=w8fCutY9h<39->7fBpQA!^!LmkQKD!Jrrk;)T=OYA zRqMTh?yz#ux!GbyckJjzap2#}NKP?v(r_hdID!c3jPl(DT=<1CF2% z`IkQ9l03;{VXEK07Vi?yAv-^(-QaGw@-bgL2&qEyoACiiUAh_(Vuw1|e(`GfnfejG zL~j_YK|8&Ft}@*+psq=|I5V7{HHE4ska?_wlN`1F`(BmWQ!%jcZ=vc{1DbSmi*HSH z{l4UM*UxoVFJn}xh(T^ST_# z1C*=#44L_-a!}LwXP21LBP?yOQXkITh=?VuFxuJ%?JK%0*KwmH? zSdB75l4}M4rFQR#^#PKuxx=1K8uh$xgdK8uJ~X+$L~6%0)6(iQ`Zu`Tv}cH2O5}bcx55o{MifMe|8<^q|Nf&&3)Jnm9t{DK^k+xF z7jx$u@Q9`Wnq3ov1$>m4dQb@?9@LUCgRp5=gCU5MLmm$tZ-m45jAU3Mp4%v# zNUU3lWHq9Lc}KND3R&yq+Ff<8?#E=t0$m-MKx-_t;Cxr&Of^#Tf;^Bvb^+c%-5ZI4x782*q+&n#*F;aWQ=p=N-^dg6UiDMSmQPxP$ z0Alr;GKa<|9D)!enT&=oUwi_=<@*7ZbtcbS`9*LdF0eDPU-#~=lq zUPwqdds3gk((hZ$tV?)w$Ljg=%j5 z>_L?2kfG1LBB8no$`nhaA|)9s9->8qH_8pYLWDJe5B~!R_Y&Z!@5b(CAqDSy)0YS7 z0+mY=HyCKToq)kK>HLo1F{z7Tg{gA$HvQS&+rT0!QbJ&O6#~_^a=6zG$jD;wwSv#Uuq&{xo%w&Q&&t@K;aA*%u!tMS1A}V&3`~g zmMgP5txOthgBPNRxu@#-XTcmt)U1#&)x?Ht!~(} zSwsm&pk5k0T(4hlclz>;nzvY=R?l0&)VO&k!4V=uFVqAgM`>Bq=WV&istUCEA?DYC zd-O6fO9lz}D@L)B>JnyZ9wqqsW)yuEMMS~h@9Wqsqy+nY6Od-fu)8&wBllu-f}{2s z|B@Yo#a=5|$4`w(r%V+E=I63o$LRr-#D|&zk=P=7 zB-bt-a$wMui)R6>{-!-v6UxkTloWoVu)gji5cx6+b*K~VU{#jH{Jy>N^EK4ZWp5%z zr~KEliwW7DUH5a@lhW0}9Dgi(LtC~15Q&Ch9d~G)y#TNZ_Fh*^(&NjqQU8TPy-}T7 ziytTyV||teB40+~$8cvOuqsPpK4l~&OSJ#7?Dtqb5&-7^SoZTzJYyq%EPJniu?m>u z^0KQN_Wl7-va~C7hTW`p|3u+~L>~aFzbPQ6GXlp7h#s{Roc<>-E3J6GIkf`Q3T;Ov44?e>dIIu7TZQ%IB6g6X6x^b~7+} z-f`UMrI-;kl>R3)0!CfY0m-^8TzxmcyAi5ru7-l6wl zy2r^!AhQu|B3gAVPJJYI#HOoVGUS+&20M%alZ-&x8TJG z#{HRy`Ch7rJ$!)D22U=>KA-|N83Vg^n*^>bm`;PBDW~?lA%-X?W`1jSxrQ#Ru zGAe`UN&!CbblYy1ulGw&bze*_^{epp!9XSSlS3YT=wel!5*B5}cDZb7qn@U3S%InW z4@zIKLh<8>UvBS$e8Hb1Td$|I+=cT#)m|&#i{rIersrfXGnuGR^8Dh}DJ zIH$xP3~vN~0e!s4;xYBp(des(qIXgMh`l$KD@6@#?7I8f9#>yI1zq?OnB+9g&xy91 z3zQ*;!%%SD90Mq00F^0M-)|If8LlsSQ7ozS)WRg4&bW$rAzn9(tU}ud+%hnNOU18H zLeKQR+WKv`w16qu+~>!Mc{@BQMB`ztX7cYGRc-JWifZf?@fSG@4QwKv7p6aLT@nMN2LA_zLik)d9Qx1?J}>{}<<>Hh%yB literal 0 HcmV?d00001 diff --git a/.gitbook/assets/image (6).png b/.gitbook/assets/image (6).png new file mode 100644 index 0000000000000000000000000000000000000000..b4ea5bfd880d34397a33fb516f21dea43a98c630 GIT binary patch literal 68908 zcmeFZcUY5I_bv>G0xE)_fFckJpdv)1NhfxsiS!x;0qLOh5}Jyr6r~ABQ3Rw$dQU*A zAiV@aiIfN-)IewT(d+mFzz1F=~$Q|{Y%=?e; zr=g)?R=#!ZE)C7zNg5hDf5v^_Kh#Z+EE*aJjq){^wg>HOB174k>*eS+>8W>xZ=b7( zFU3Nhe|e+*!JkW{%lkUhfm8beKRjnUsK+0o$M2z8wf`&^%~xwqR#rC{$F-UZmAyL~ zI+V8l6~esOkG;|}Drd6SvNtPcFcN(%j8zaCT1F)rI#z!g`oH;;OD2Hf zpghB+zkmAse<6@&EvCQu_3zJV=uSiYA&PX(4`}~sGNp)&L;tfVV6YoXG%y5x#8
  • %N@!rr5&XPvxB6L;Ys*MO1K`%l{UuVG|_G>6k% zGWcWSzxg)S$;>_fBy7N8R;36&+6M){3-`C*4-AIkABFwbVE*3v{+}=yUZ!DpobOdJ zV&DN0Mm@MMxwCsgYD{*%?DW=*9(up~h^rntqe2d`y|pohL2nnU3<(ULbtJpJF))+; zV^b?hfE{WhGW+z`-pM`VG~$YR$}Bkmk^3PU&cx!?8T6$mX|-r^dkw8P?6*VRBfP+# zwD{!nD%Ms*dAV0hgBj^NXImGoXDW@aygz?=zHH*l9^OTNr=Gw13(J!(ijMPwYP!@Jrr0{>3K6ZBe-?=?*3qzxBGh^aO|Ft0V5X#gfu$;i{!j z$JrK-rSXRQl(|xtn|!`5m~DhYFH^$J6VBI;yy=i3<{;iAkn;tacfK>-*tP`HQ!O~W#fkJ)kRe(beRlEltXg~E)@k0Q z=N^S0lPgZ)qJ3@1in*z3x{&H<%Rjm zg|H?nFp7oQ!m4h2Y2@Am98aKr8?7*@qhX5M>x&tR)J(hETRAHlGK7zdUo{Yy@_2S~ z9essjGBL+U0;B06egqZx3+vf}RuRJdI_hg4w_}y)3D;iDu`dUp?;a%~&ZR7DlVZ^> zC@@b}ZBqaPFW2(cl;VzcaDDF9^2h>03Z=NSwS2ncbhuo>vJXukC-u#^|DHpPid2F| zWqUD8b=1w(hbCKS>YSsf;^1~M(pUJSlw(xbOygC)&CbP53|aw!?0Cr`T##c^nhAk> z-%+bBo@iJaFb@xP)$r-z78^gKn8ouE+Sk!4Qh8zIC{8Fbd23QoYqfCCuN6>Ap@Kyj zS}?!O_{-m%3RrHJh3;>8Jk`#u5_2K*K%>TMywVl zyW$PVuqK_62j}>*Cst;IT>7iR4l9~xR`8?7?O6KzLeCBsZEq6Y`7_~hRd``X0@ezx z)Wyte`fD@N(18FYqN8Ifit9g%6QIg;>rTwQv+uQ7%6eas3l`6c3vlszO}|gHFgiGB znPAVc*CAmnk6JqFWqahT;?@|8dv`XQB>!2JdYx?m#ICBO1-~8dGJK3tprzqZ@-Y zveoJ4)_d}kI$v@|I;Zuk?$)fk6i`+3al~G&e4Emspnfjo!PlA}d^Y^8SVpeB-uNX^c*nLZTJ&{CzDPA>f^i9);78zs?BIfGp#MJh-) z6X%AbUG3GY*w#1u6YL6HIbUHiJ080g^vgrCHV4uK`fxa; zNBpw-lm!3&k^X}Z+HNDZmy`Ld%7+eTLL4b}LYk|4p&l@OPkgk!p1y0JPF*W}n6+!8y$Z00~u05 zY?Bhprd9Rt`6?d-S?U7>>If_R#tAh&5qr7Iiz?vaH*3!KvIJSsa^A#3+cO$z=`obA z6S(D2Imgj~`Q|OFzG1VkbgOFAi|G1Ro9X*zcaqpWVr@pC&(tLAsi0_G!%U&%Iu=E_ zAAa-YQ;kV2tT_nlz6nwA?YNT@$IN`wt5w+O0U#g;^n-lPd;2d`D%KY-`owt-) zQ*LRi#_qLdn~Z*I=|nuyw%Py6Eu<$~=Sb`R_#`6y3f)i_}n%PJ-4N+veJ~Im>JJnHt#_>uhaCy9M7!V zG*-mi=qli0o9tl-m>B?DkV3Rd?4w`e;Od)AQShSreX*Ju|W zM_)xon5hct79^(mJoje4isZCMu54ahkKv5vOW~5~^R2WDCs=!S8lZ@-VnyNPY9!la z=-g9I(}%$ga~*!$%Woax;n6gCL3pj`uI{&?5S)f*)+|^PiV5jD**QJ13Q?@-8rjqm zD}r;`BxKw~Y?A$XZ`+aY%)*ym=+(PY@H^=;!+1G`KON_a!oY4J8s8516?Q7g2axWH zlx$OW-DkV9p`!7r$|rRdvGiRT@^jX(D_Qid1vQ@}8j~r*Q*OKn8^YU%@A6LiEmW^H z2B*#3&%sNK&&lPwLTk6XRiMQt(MAc?NbbD^+mgU4-iz4=?Ova<`&~-)kZyxZ1sYOf zXS{~?=*-EowVkn&mva|$gKmcva!N{IvDVR_+)ueEbYlJgSZcl63#p%fdA4bJSSg|$uD?n7%v-| zrSYc3q5AdBLp^e0g1h!;70cb++yvgE=P(z)Zo=ZjCcDqI`{yOTc48E5fSD~J%))dPRiTKGiQ-s>GXKlzo58KwLH6$!cBi0u5#E~*j+eu zc`;Z~PN7Dk`Za{s7%dZ_@Ao6lYM(soYBbWvLRHJPuH`Z}%=8A?FbP5LnOh0HvFmzM z{lY=atG+=TUD?(65P)H!7qb-x?-@#FZUm8Hn1}2N)q8j@|SXOl}S9 zWpO)X^b1#L0(?MvVQRwm_Wu94L8Tw`XF6?!?U+JVOR+ZD4S40dV|U)3sTop*^JFvB zq$4XAP_pSK^YsEPHuwYJbRXO0$-P>#@K~#6TY1;QG#d)oJNb|28#v)7_ymOVwVGyV z<3S|gRyO%YMW$&ww0}XjeD<>ZL0uN_zHcj9>e6Y%fh-m_wP;ir#?FpN9levreEtRV}8`baj zCI1Q$Xy~yjG%!>(D(%592*0 zq4&dm*!gDX8*#jzv_@g7jgf-h>O+IXG?iG%AGs6avbeCqqE>>AZ;5%2eV;P{WjePx z!MDSOiPY#2M(d%ZMm@|QSV=~OcTJ(U@X*)J8?qs5h8TEZes;UYUZ)UpDGuR{caF*H zo+j(K=B$$MCS}QGb@w>mb_6HWP*;c=QY3MO%Nwre=&E&N!!WU6q9>QswSkYtM*4Id z_~X<7aRjL_PfBw4)nAZ|V!G9gvo9SPpS8=)9trOpbhmtW@d#ZeL^0~%ts{T@6#U@R z8Gi^omX;T|3I1ZFXH}Jax4Ozqc!d={^ex*r!V>W=fw+Pwz^X)761L3O<2(1kseq5ep!<)+$lttv24EyRSJgkhbMPg|q<(IGBl2gZ{BkY-Q7Po4KP0*4 z`=9Xlm#%+Jdru$C7JNO%sQnYl{qOJ8dF}?l>U!4r6KMB z$^y&%B_5SJW+@RS%ubjh*Q5c1gF%@%0L`_v{)d-jXOg@ZSfp@OQR_-R-%1V*d-QZW zP4R`WR6jw1aBtg*Xs=SY@DMs!5<5)ML|5KdE}JV!8%y4qO>3BRe`S_wW;0KILYk5u zjllI~=;Gor+H}WXTC3imG?)5L&U;%w>i+SuYbjn1z(nL!VZPy3DSCu2ugXTbZ2b-8 zOCRO}6Xx3#%RbNk0HM4p=+^27%9jsDv0=q(UaebeQqWN2ys8<6@jXkTLo!a}J{2?B zx9EGy>lk!Z@mQyPw*H-W^TL^;1+S8XJDCjU*@J27k`y;YPul8Z? zs!HhE-G6Pwb0^twPRZBKw3YGUK>?BDk$7Ffvry;G8GmtU>&M;GAN!W#ckwI|kIXmn z?(0+eqN69wR0=gcK3^3HRA<8AP?gVhcGOdlQ*p0g+oD#}`j3QIR=(%qgBaT4;8tWA z)YzT+CLdlYe>?>iG~Q5*ISidvnH-6|xC1RKnbz8(F07n8Qn)MCQI*icM*5S6485iO z5?XTsde22+a^f7V#p-t)#^3kR{C-(xiJaKaP$MsF+`z*|!t`2B5Wesc^VmI3Xbopii(#&%D%S?8?3ldLNNZyo^(; zaKo!;{y1Dj|0{)raxKexE38_(tCEW51=CkGy7TqZH_|O@ei%!gmCesLW>|T7n0iot zE!HgE%qos0*;-5*LrdYenMZ%33z(o0BjreO)zJG#J&~y%p>Bl+^6%E{WsB6H<>29`m6qmUOV)8 z%h}UmK%04$4$8*R>S5DIl$^Jj197(UDZ}+OSu*#;?mdPJ8k*;=ABcatax!a%i9!nH z>z-MU9(h213%<1#ZeGj*Q^0+1e_B1d#z?xZe$~-C-p4nIG!#K0GP!-4tifNFvvUAGnILW1W1d z^c0fp$PL++pzwm9iUmP%#*Pp5JV~$!==k11pCoc}8D`d17XP!46Ao_+w;PmI|H#TLiP`)NG2l}{L?Sm;SxWSBbRuuz%4nx7u zhzxTAjw0X_d_bP9l82RnNCm%=|FKxb2^%eRe>eCH0_WQ*yExgp4~AmYW+ZKt(2m0k z7YH zWd5_#QvRYe%YT*jf1A<{Siq3Ka{>Ofx_`IozxejAQ~1{@{9o@$u@{=Q1g5Vl3i?jeMT@N&ecbJLsV@eeQa_-s5K(NuWPC8=cN z$8EV+i_^ZJ9i!#R2 zLCBn#5&p#IJsUFiI^0J)hbYSTKuwMxa+dXo~L8Li-s=9ou=&z3fRBrGuREb;9eJL7Zc zH1$zD2pg-Kl_UI!Mwk$Li#7?|uzr)Sp>^LPsCX3--?I2V>}YgbeSTB!(g~06?@gwn zi0>47OoN4-bVZZDD*P6~vXr7q?pKLNuJ%29{MRrRd%oHB&SuqAHAD`7PU8TeA2bvt z>N?hL4w!2^Ph66I+<#Coc`Mav?CF6o%7WC3vqe23nnm8E$mHXBD6cN1Rx*627`|S^ z;Fh2nZ}raEp-AsTl~jyaK8Q(wDi*!o06id-^Z9m;Uog*VbV#-z#>D+*gi|i}evl8= zs>*cjx{i4YidX_UC0N6J;{^Lv(=~keD~krh20GivjHGsv_0t!vv;(X1URGG=+NNzw zj;zS%=lXzRDPgu}dxwgHyUe8awMsfju5KK)9=-v2P_%}=BB%?t{8Vy0+OqQc?>0*O7#?dm)Gn~$12}&N z@9lfHH*m{8phUV{azCkbm^5|P(6Mx+9nf$TS$S7K2S43d79?i$IC>8a1z9$kx(%wG zocl;LJ2hrp*l|cEq*+cYS~lyg zy}H5Q9P8^!mUMM!4@R`&a;r&pkj6dYO80XM1hI(5NGxeq)D%UKSeaMIv0U ztL~7I@b{7<6{}agdGe+WnyRgLk41bSk*6mm=v&p>i+Hqt=r0GD+|at|u6kg+TTfeiuu(O@q zu24xcTQX!i)_D~zXMwg1v#*?^1R?S&wl}$-nz&ORmd#{6)e0+g>CS!9AgHjU3=1@_ zfGWW#1OaE9uhx@t;O4_o!bcq9e8_f!1R*ID=D(@nu1-*;Y(=3lTpf+?9k3C`F z_0S)%MedQYwo!A4HtqTOK#PzqvV@oc_omH-B!n)7S{;)8+F+RBN2#filjQ|NR?Lh0ycsXiRNL){_1 zTMl*fk(xIunnou2W>vD)_wlxLICrXEE-rVkGLQVcIpeq=&?(%;vf=WX#NmnxM-|(1 z>QRnWgVH$4sK%Fl+*LyFd`QPktg}LWmtMkO7Mfx7C)8k4knC&TZ7H%_i{=w;)$*(B z9v;gHJMaO|DU%?}BBSz>QLm-}l*F=x{gC1Ln-<%E7;*eTu!pU6Vu#OdJF^-d35Hs1B*;;O|luH*x#gnV%E4ZH_eegz!MZ)3E_CHUy zy!0DI>bK75^7PNnxu8d(`isHqBkpL*#Cqa*kY&0JL1<*X-_<1}ar^W`>2y;0X3qM1 zR1g*w*2i`>3yC*JqPN>20qR!<5=M*MJa#DVOxCi>;mHIEW3fpcb+YV*YE6^6%DpHD z*!$S^htB#-D*3maVZM?tYhQ$JK22#6Y$t{KoPql;C*X)tn3mkj>G~GVqSU^yFil>e zyvu^7&|ZeSxTbcVeh#qjIHeg$Sx8WFeffoGT6(1_&-UQr6G1uW7K!#5>`I`IdqTl- zQT@l53eBNX-)g%AYD3Y@_))`(yhi>#O}OkQhDA}Q>~t(($NRe7JDSF<&m8` ziut;n5~P6pszKDWy_Z5;Q^&iyxClstWv8{HFcFwHH0KLF0IN?$nZU1v%DUNo#MY`yZ9;D z0Tjm^L&>^9DzZ1}-pv&7-nF3=^+E3z!C4GSs2T4_g^OiP@(OYrUo}F$6wILPx}A5( z@MW2%!6keyHa$$3zIN0qCaW&TE%PzIOlCEDk{=q5-B+q<2`zm z-X(3XST%Bo9Pbq3y@1|o5tSd&7L%1=)Z=}@Y*^?9itvXPym1WX2R&;Kn4UPoIXAE= zFH zgQOvXBdGtf9#3I#95KBd5x4qGD(A@13kQ1TsBY2Z?G;WLSFk(tP~%6DVK{;`Q$@St za$LuuaKA0~K!>|V)To*??%8m}in*Dup3mK(p3rL}TZI!viER>9Hq0Bq)`|2e(}~o2 zS5aNX+x8|M?V9MeP5BpTo2L1*)e9pEFA~89e3Z`;ss65WsY3dLdGgXLtA>PBGbBR& zd&gyecLFR~t7}6?8G2UwGVXZy>Z{D@%=Po09eK7IALDuiWVBwc zgUZVZ7%KU9Gf#bZ)xKlTUmbuwKoUc}Cih?-g<--+!>L6OmoCiQIqzY6BfH-LFtUif zHqYX^?_~6@#zElZ!kz*MGVY@cyb$k#c-{DBu`8S-s0D1*>2q#T&@=JJO1f@5HkY}r z;(4pATXjpjs9+h8epJT0<=7S_E|$vi>)!S+O`ripmeHAPwCJ$MMDmwnjL7^qtSD@> z#f}pzC{H+N;u9uUu)g=o`8yvK-Ak9-N|c9BHFE~E6he^2Z**e$Z445%ykk<_MqFQ3 zV&Cp-K7MiL7*oIG${j`Ou#xq{lBzx}_DS+Z@u7@dCX(XD*Gn)&w2p3gt9ho{c@wI# zad({oe|y@LUNweU2@jXZE}8Kd%77P4SJfS&JQBnWIZ(U@?gfQTFc$(UB_^@TUf`1h zDK0dAEN{8twqi&r^#vc+uT7$1`CN{9o^Qoc`UKz{)e(((93|r*e!ZHw`B|Zk2sF7L z9Spd3{LZX?OATn^WcGR*_Z}m=e6=ZK_Q|7^qMRpYSHR|{R!~jN0%&< z^XghusE2qmEQ-4)Tul0zVTD#Dm_-2?VgR!!6M)35KMbrgE8;zf{K~$0G<4vTVsxW} zXca!jTebt!>4j~))A9MR?S`fl++}vWp#i&TSg{y*;D>uyF?Z1mVVU-Bu3ymncnT#u z>Qwn7-YiqK&v7KeyN+8oC&x-Ha4X4so?RO`r=jwg!0F0X>#7B<7FjcNCt|Y^u#8o6 zYmT`oR7%1M)^F@-D>j_ob509=CI6-`7Y{CG6)V&V;|cyPr#uG8C9h&P32SSq><6=Q zC*uzV`jFq&Et}GNc8oe(8V%8V3J0aAk9QzS?7m+ZySYauw>4?sBc@03X_*EKc-lCb z1nPcL%(H!Oj(=2HRA25Pi5BEqZ@gRaNXrOYiZS94TX4zS79SEy?8<(;5_#8mjR+^! zYPRl+J#J@XaKPw%6TN2$y(JQFAlM9uV+<}l*~=?hgDwL0=bMeZBCCD})gXNe|EoR; zqrBTey1>{R!ZLG-`?M=?*Kl$BNm*-vzyqzs26yY_bV2X5*k5QfTHx2u9Km)U#4ivP z05j0CGPVbkqEDy>q&s3%5B-Lj@6?AvD9ofuxkjU>^OeFJv_DrkX0p?&n7nd%FwI~C zP&oUYLH0R@Uen9%F+@1ovbFVQ;}@S)gBE;M&vGOAXO4YBGXlfx+SdorvQWLU^UbZS zmkc~B6OXAn z$!k=P;TpR;YGWGMQ2Y=x9tIukV%562Fib{?fG zVV*8h@WQ_DT{G131pKWuB>4_m%sMR%&mWZ}(=Yj{bi!*$glQ_-Pi?(7LxIm~^gK_9 zpEZ zZFMgu`>s*7hmqVjbft9Mi!TJ2U9HfdxTfAFeAAB5J8l?kSonp1^~4(4H~y8O4ZwD6m6O*MYl~iJmmPxcdja!DRHssb z!6C;t`bA6O6#aNC0vsJ*Hen4{su@WYuRpEuKe&D5*3P7uuRBOEG*ziZAYXK3@=SPv z0twFpIbg7-Hzi)=)k=+M51-Xb>_=YeMdTjZ1^rnLVKoahV^@JrR`zD`O~YXFsDnR2 z@9b^8D;q|*3UxWtIk%@rbwgSWl(!0eiWBD~s+1%6Rwaz_9N{bJ$9HVio3sHUkUMRK6$gzD>K25aQRwC zjHa(|hj+wB9Jp$#c9=s(l-ItLQk;-ZhhaofoM{pu29q>7Sh5+vr2mV zLFFlUME01^CL<}x3X455bf$Soqpr_6hcaYe8ty6+RpCEf2Cf|>B>HkROXx3voCwXG zJqp|xZ88rqS45W}(zA*=iw{1lcbQ92kBGhX$>Op|)h4WyVL6c14jmW@(FJwHpw9)4`RazFGl^l59I-fr-7UB0nZb zhwQn%HS~eU>&NwSxlL1+$exq|RHV`;*ZXsYVWKe86Fmv9T?4m9z4-=Q-*tDA494#l z{_r|HskYcFCRxPm+lTXFHV>Wj&@=3y@j4T~GAW;+j3cD6cv zWyxOu?V@~iRC@{)vJlK4NgOJJM^yT!Z={tefa^BdWaYz6FZ4mtaRd=uT{;KMK<~Ym z{#r(wr9;_!Z|N!l*eD{`()kwJOXr}bA6&%+yNxJuog>c{`VAR~nJ%d}`A(ju)Wb7B z$yva*0lSVIr9TMV4oe5@#7hYL8aN`=uDMcppm7kK3L3Y0rFunlUzhqL^*z9aR!7!m zghLcP(sR}Ffu92@t@g{2b^Sq@6zsP6gqqk?-`8Fxb(l$Eec#s{wq^+}p`(D0tkN_y z^_H-=b~PigYG1U>>SA3uA;7QkGlW}&`@eUz1|@{Lb>7@J;!cFI9felJlmX2RRDRUm#qQ@6!p^8 zR?db!*`+p6HmsfJ(IKS7(>{m0FjE$$UX;s^oUqaob1+PB^mJaFnPK-AyE{f8H>i`U z|Is%_uTPgHQrpyUJbiv3QhgKW@lA4QwpUrjwwF`I$u$GIWQx~*SFn=KIT_1LBhGEI z8fDeIn_Ee&%00mb)j_nCkBpVnE4w+XY$BUC|2Bt8(uI&KZ`<`=Y08(Bq)!|*cR*8hFQRaef*htB&uFO?aDFYXK)|b74 zx2O7zcCdI``i-UfSjhvV8LMnH$Kt+2iDmbeU`9;Fo2D4Wm%`Z9)6GPWks3W2uZ#J@ zOEKwEBb2Pwtj8<<`XSVc?Sv7V@XCel{I|*DF=@F7jc5o6P;Brg`gTvJHyKH-n-f8w zyv2_F$5wVd5LeJyjdp8rT{ENOQiAc}Nvo^S!pB3Wnr-_(ArPn^@s3HCSPN-HU@D3F z@ zXXN{N*Wc|Yt=9CqEM}_bw)w~|e;W_Tl$=-viCDCVY_9_UTOqV~-p7sf1^dDHaGwW* zb_NvS|G>RF&KqNtcaKHp2l8OZm`}H3zjsTo-nlw*ut)&vXK*yNo55@q zs3z`E!y#db2l-ds&dZ0;zG#X8p!~q?1~8i}tIf2Kyf!wpE3-~@q1y)##~XIYkN6GT zhlk9Svo5}b=iVCDGsN3w)?c10P57Qnojt7i4Ws4{4*sK|!W-g4wjPlX#aUaA=o*ZM zj~&}&_~mipYv1EN^_pe@W_IVBhpra1vMfaVXL6sn-l>m~(()4^w|*WieCBhw17!R` zBB-)n#&eS}Ofc~Y&A;H%>;aaf(DXdWfG zBfS0Pj=fq(-Dejf{YFWVp3u~%lK;diIS|Fjr8fQKXNI!rji#q=_DrOZjGeZ!l zyTRQSD&|pqtv*Z^arvRJQ5%;mJ}TL@C2P>HRd}t!Bh0eg=0|S7ZNJO{7MUg;)uc-A zS!f`(CeazK^ojpsUgdn4y7Vk&U%UjA_QM62sMaZ}7>MoOfbb#ySe{I#s}6DIb*_#` zzH!qh->TK()+YXsMHgDjr%XAHh@E+NE>}BZhoI3BPB}BPTRU);*D3aGtLg= zm%%blJp&1R2F(+gB||+d)(d-M#x6QS(yBdP^I~_Q!0IR^a%o?@1IN#7glCponzP!M z60;!E-O=+M849i*ogHJv*J9cX^^$^ECv_Y~W_zLcT_W$;l7yi0Debc}*CS%(1wL8} zo5d@``X$vOFvW0t^|{-p@@6Vx ztW}b`NPWnpBRy|?J)f5S&INdzE|atUG-Q?lCAb7BcYN-WnGWVd*mb(Dd=Ek&87g@q zZL9bjfSoVg-Ya{%(pQQdW{S?~sy|tLfV?K0Yg(c+r!#f##yQEEeIK!J>LulOzHEwtto}~V z*9`RtM-}h6rxTFyU0x0-V6BlIOI+;)CiuZwH6xw4mH^x$pLvPJS1L%k8!)RiKDrdR zrTyUdr>%h%TB?;F{5=QEjzGHnCgk1F{z8BUOboYG2 z?54?@2>QZ)slj~K{Z%r9ZaMuCn1gb@j@Gwpx=CCGT4FGJ8Uw40)z%yGc;iH$v{Xg; zB2}>oaw6W!`eAw!uVMPJ%Whj(TO{{fiMiFOW|apKG)QrNC7WC$ChnMY62_a^PU3Q> zGux$ac|S7;OWzV8NZ6;DwRh6l?tSP-JUx$?vR<-T+GXw$#(fOFlogsCmgS2LQl4s~ zsOtGfKTn-foW7ivTAU6pldh}}#^h)wz2M2ttFRPQE7r-CfQsIl!a}uLR-+Yd1*$Cj zT|_W2d_lm|JS`(391oX+G;3HUe*sC3lGFrv)?)%xJx2}X6FOnZFU?}ZBB#?N z#^%yXc(UiD&>PhrSJj&c8u`~-&7&zN4c%^c_~uWzh^bwP9oNQ|SUqN5;Fx>~t7eV~ z_GL!0uX}}tgTVRnOX?w6pUV$@ZPWtqATko&bSJH)OxmC`-r%0t`K5gsOEKRKf(`1je)>kBvXunNe>+$Vik&zC822N6>8)gC`zz!}siBf{z2zWLbsLkk zK>}H}fga@2x0s66^Y`JtXNbYKo@3}!mpjlhC4$8;l~nZz%o@nV>b7eFqxqSix(q|4 z@7kC*IPCZQ52(oD-&31AmryZhy4;6~ZN4CCVm*CDn`3hBGV`QrglP<}ARvh+=hwrO@gt{ z5?S-%tyZ%ptS*o9lJZ^{#o^8FuDV4MXohBA?ZLo#jCAz)w;xjP7i)xwA3qVh*E2D@ zWR(bq9~CEx+27Q$w)vW)B2s>mHx`kMf?Im~1{-~dw@gp;UA>;DFK%+Yq6;FclSBwh zw7JUDWQKPARy-Wr9dqv?5sxWdst~Vi&0Sd$V%RY2`hb=g7&Y?JYVA+NrJ$$Y=k<-m zI5Uxc;0RcMhZOV=2_!Pd5dbA5dlgxcDJg9d&(`m^^s@DhzG(4$rmqc?Fi(c9%WF&5 zk)#m`AA|T*)H96pjJ$$K;mFpxk_NTLz)VtSvb^6!PqISQX*R4hc6)oxok5u4V^xB_ z5F#CY_I3}~r1x&|xJW0WwBjyi->mnLE}vBKwjLjb2ks@^NKz|xof0-)pBl(G+k~o^ z=n)_4Hto3-IxhcPp{a6c_1?^AZ`s}Gyy6AKCRL1Ju8nU)5vXB*A>s8)!Vq_0BM3Ho z&QGv3S!KdUPONf)H*3kyG#?V8=sT4b>y-kJ?`0xYzr(GXx9}{N#Fi$LP69fjWutJj z)W#wx6hTVdg?Dsa?KSppq`L^`5cX^cUvB;QLS(jF87Bv(W&zdSrK1vrm?s(XVe;ajYev5n-@ z{JJ*Jwl0e(OnhVijXc=5bpM^}<0#Jzp5@JBOP-ei1Mp`Ok9^0f?G@&dGSZ_VTPQYJ zv+_#B8YYI^dRq8gYMM>aiQRg#l~rb3^_s$GQe(?m^9M-JlRvqYqi}9w@u9Ux#zt6M zs0GiY=zqcoKcDFg95{i<_yKwTDjh@59u~O^-x4YFA;)H!3(Ox{6KI_lJemZSU|}WD z*xl62Cy;uvWn$`cmgka)tr*deCP%t1b?srLNJE3oe=88}-B|FMdbK{w(U#TUZL3o_ zp<@-Uuvw;$D}JTSJ>z7QH};~(t1K@G|30{vcud}l#wC$YeiKv^pL71CeulfcrArpS zuWm1z6_aQAt;#YH&H_%?L)}eptt)x(p8rh|oj|XLUP_77bKJfGVp5%sj&ro? zTGBt48H5zQxJm#SQ+xaTSdyx#H;?PA(r=y$Iu~MoV?;rI5@Zkm z!u0HT+E(|pF@YKA5Rfwk6+CPcOlM)cYXoU#7pp4L)Nq6R95iYDd!~t3{@&lju4jPS zcPH@tx46bzRVFTS13^DYsGj3N!K>3<`*!&m2Lt6q>&(4*O4YzbRZ3u@SCztE-}rtX zEqtyg2t4{LKh}6l&iG-~Ah;s~D6L?$(h@=gID-CXG!<_01CYwvrL=~yBw^DyjR27r zr1Ld=7P|$i2SHW%uOHgbF?78tNdDJ{J`CrzSNi=!pDbo}cQ{=d3}lIi}mF_O^y0p37n zNvD&mcNq{n6#lVN&JoUeG|nK1Ctn)0M54Z~`*6Ki4eH7+>(kqyB2o<7vdQ)lxa_DAhHP{IRYs1$1WS5$7higlt&0dnV_)(cr#aVy zNk>z}Cv>jRksoc5+4$BMYt?p8_t)0YQ}P~pGc^xuoOUmk$<8m131JT+xZHX4tIAm4 zJ5u%pSvROMg}-<|v3g*Gox7@+mYm=B`<*H%s`k)$eHqc8Y6FkwL4E~SP8Fq5kM0u| z9Q4^3I;C*m_Bsv2Vz-*S$1pXXwZ#py>)t!xo@&s}gu5TzGfm8c2R1k6U}hPVrACU* z7`rU_!dk1B;%|RP@t@qDna|3OePZOu?I<_pwSUJM6JX?Ma(qQ=St!q#O`H;`_dH)q zR6E~gc>AQES^Z_Azk_kMV{U@>jP3INT7msG7t%!sFH^6MF7mnaL`Y^Ri*(O;sO{b^ z{Yt_N;(f)&%?$PYEzoJIOH_SN; zy()C*bV3;Wi}z-AZ_RzEObs_Sk4)elsW#+%PvO%kqHh~I-XX^(L@LFZHtr9*O~#`` zr9XDzQBURzrY}k_{Jfu*ccBkrm`Eq@5`yj$E3+6={Lvt@wPBn74JQVlD3+1YUg%SmYI90e6y@C)Yl1p!?2PC8 zu9*JzeMJX!F3UV<^?c0vbT+=mCVz#7^?~fsY>ix$1TvFeoFnq0pRDim{DxcBY~2FS zyCy=|yC*-kEyb(u-XSDN<+Q)6+3oD*1iBemst1gNE99>9>Ixf^707|zt~)6&YjpHX zj&fYk?<@{y*}ZoBipF>U=~{5%`Yd~dz)AZ+PI^eEB3P5{IOl!zjq2de_N+(^4P%)= z&G*4#?~8}%@_=DiK4NH8s^OvCJTh+_2xE1+N&_1W6}tFaa}H1sX>(^^p>i^u3#FM`)@1Paq{3WDYBw{c^D z0Nuf)gy}^ddPoEtxVmn=$h)h_6b(&*FIJ37HQ+UFrV`faWFXAWx66Cz%)zHBx^dp4 zp*Lo~w>XQH=VGAM1Jan3?=gpb4+D$gE>a6&ECU;Nq46l!r2z0uu+#eOK_I|x@5|0> z{)Dgl+j%khyd4*>1CKBfdD_-hsHBr z^lLBLB>~!V1NM=e_B>2 zHUHW|+qHWq=#9ZWdw2YyR{{RAK+@rI`XI>nXFvvSy?f2{KyArN8TT&%0d^Z|DzVe< z>riu9KSalR3m8L&xCgM?D5lPgv+QGH^pJbtwNQE^#uW|F0K(7m9c@59_*A~i0~cxN z@|Z4qxXtmt3i1~M(&P;Xh_X7}^jCN)8+(tH{`aPWaZ2DB`?Rkn{Du0|DDWn6-{qVvvh&U;uM>+I>nj5REywp7=c zETa;HA9Muh{w_}sxg(&I{6Y0e2dlq7(3KRM-N}D9;lG>k|Cdd;oV90d)Z4La`ol{Z zKhNl-?)E1D#N+NvoM4<(1_+>m*0Nz-xeX8i`SJ3hU!C zU^kbvR@*E;m?St7G{6$jwcA33$M#WR%^5ZzOo(ZnCF3gqEn5#SN2!&>b{pt)QFe1BSC52LC$fI{{;g;&8fcfjYc9EFCIz60K@l}B|6 zs|*2LtMOb*n2J+hfjHa50*W$!`*7*)f#|nLatr8~Gf}2axgX5Ku^VvcC>K4Wgvrix zt%5F^W%Mt?G!=IHB^hH(#>-|qw*eQ=_de)K%MALC)kTpzqVu}D+-2vAwB+=xA69#( z<)-O$$CCQ;S2G?@btLn#5Uxk)AqteuP%RmclAOLUS#$KD^va92QM1L5bVTo7iEl%i zTOh;wjxXZPbGNWBsPBV$kB1-C5dFN6`z`pyqgzckDC$GhHJoBP@)1ElTBQWrs-F?K z#bIQ3IJ|Gef^W#ve)N)uL!tXQZu)(o-w@)noH8?=JqSWR*z=~zv2vXNI;zb-lLmTd zH&0DHzCBDwSH7P_nDq!jg1)l4XECMIA`ozBCZ81zwkjX?KBMc!~$2B_8z#)G?ddhha^{q)$~?QA5kQVzN34K{C~)vf&- zz%O@T)}nj@nI_LSt4vGe>t9&{?P9%2A7ZX5H`uV-_4u;6lJD|n=ayiPL|ldrSg8S&vR%_!SLTlZC0hJ#Rl7bCRA5wcLsO-8 zKpM*n+CVwSafcKc+FbvVw|xdn)B!auk6g9n^ui7W%9E!DI2*}Cdo;ZbQ@>aAb+g>Z zNW5zll2kA_DWi7^wcRpxt0?bwYfG-d9Dz-ta<)LF476hXU{WwNd)L%bPxbRSuF7-y z6hq>2o_nEnTwb+guL%@j zm`I!W08-}$1D}smhVgB^?PwDVxAW*Q&IRxJ@{AAlbE6I4%SX1;Tv)lz0ONyopAlv( z3J2ls>P8eB?B1PS2)_QtvC^;aWz@w6)Lb;I z`eGZr(qi|M48u*Dj1)3!F63iYk%jFtT_SCxu}(-m1Bm)^wEu+wLqggqRJ+iWW^@c* zh|*&)W0-2PI+Sb~VZ=*#B-2&%zu0^8c&h*He>B@JTf|0%h;7b1XJ*S#GF2*Nma)tk zO2%zWNhGsSiBzU!$Q(lEsDwg>%*l|<-Sz5oKAm&!y^rtjo_p^<_dd?!JRYAD_I|%# z!+NdPTF>=dYjvyKOBv)oap1XusBx?EJ&k-1p1c&{coPBtY#X`py9QaTPu=f!dIb5l z7)>;b9yj*?40Wu8X831YN<3-WhW7+dP^aq9aflJnj$*VV@b>&@M?HmJ2Z7rG3TFqW zmNlF{W#e9h?^?XDqoQt~)d$V&n%~kXAjP_XZ&=0iE-pMfKYtEjURIGSO5by7JyZuD5Wu*F1+>O2|?$X<{aeDUoLw=?I}6dI*~Pz>9u^vJo!q> zkmP@^CUWqCg;(WO&*kZ9^q*cWxfJaWai)B$IcXpdj1-MmjYcULox10@-Vrh>uc~ZX z*VO%F;2Wsdp2hAxyWMo{K5GXKUAQSc;FL6( zcx7pr0c>An%BSrag7Sv+jYrEC2CDG;6cU6dGYl*;X%!4&>*y3*bbQ=>yx%O zl!7OAADV^AXab;N3@=#nVF}+|Uy}-*pO;CRM$@HTWx@#$UWAFOnXPF(Q-;Ko zAhwcAMV&mELw-L$-;Ms3 z_w$^+qwnq`ezoJbSs{r$Q+KaaN)jtFHD0yerNc;qd#57loVt??%$#gCq6LO>ObCb{ zL)Njn53Y-loee6C7@+UgC4RV)teTe)GJ3i}`pXA4izl5_j3SYex#2v`#%cXV)g^l) zg;lwXdq#B}^+H`Y%tlJh1RloKm}oxAAElKWi@xgEqmts}Qu4@4;4=t*UVT%y@Pu8u z(?vqjnSnms;zjxR@Rny3??p_@Ul=?yz4E!(K(zaE^RJgxOo|g<-CC$fNk~xS6gonP zG~l$44coNfNJ%j0bY_{3pg`oU(-Oo;*vtFJ#zi6)>CJgsl4XV7p1n{RfBNk+H->1> zN~}}+%7?<76Hhyh1h<|QbxaHSaH4?13YGJUP!*}ZJ1bw010?@nvyJo{DsTHd3legZYh+L67YRI^u?iZ(Asc1v}Sc5e=>r@eCj>n^?uIx*Pp_zk>0 z1L#DjMP3_Htpzf|;`wsM!R1sI4KV1B$2Xfs%g9`kI}lM%pWS=j?%ttpZR(P~Z(gZR z(p0`6MSD=GS(67@)8`)XyBP%>SJ-#isitIUqO;UGm`&o+P~WxhHmd$VKVPA}wj)Q~ z|53^yc9MJV5x#qu+2l1Z8p#7a%&x+*=Z?s6!zn>_;ki?1s-^N5eT1JrTz+j3`C{x= z3zxX^xJAi1e=kQl6{}Nc_P16 z>rOw}6!L^5vXAzOPbvGD|1>SH5o%5eOl7m0I^&eBpf}W8HTx;cYP#e7_VT7#_p#gg z$9t>u*E?3?ZfouI7XEBCH1MIrp})Vd|Le+y@2M$G{GwP}1ay6!m1V%l;WPAOf)n_; zu(p5}`P+VyrNRIpq^}fMi=c|1^Dmym-FiroMHC8C_hrV7f-B&@EN>H5+XhnB8OdU& zN?-)#aCt#$JmjB1)89}R?{&Zv0_-@NJ3D~TS~S`;?CrHF%Yu;uS?zo?aCaX-HyQeG z5g0}k0gd7gk73;fI>zz@k1mcn2^K4wjF#YyUF%cT*|}CuQP&|7?v>vDADRVlFjyJC zRz|HkR$(iW7_7f5{yzDikR|*3JZ*yxn7qw+RE@v~dm-nY@|-3a-klL~hwWdw&oJl& zzFNX6(DrbMU4V~q?b7qYCyK%BdD|=#sYrC_a^Y}%ehDeb4=?Xx#-VSG@^9O-EfqPH zMWZ^nF<540ncD_t;Ou|^1XRi%__G?GUFgcvy}SG`{b3R<0LS9{=$%MIq66_@7k7Og zTpI#FmbfKNy$LQ70a!T8*fTRQm(q?$dk;~d30zH*IAZY?keANXgLX#a6 zGE`u+>!YvV;+rGj2GkqOdKL_&pjGT2WK#UIgG((Iz&gcO9rYf#$V7PlbyDm>EH6N( zHz?hiz8@86R35^eEsRl5bFeakKy6-LxU zTfBJK=AaZZ=NNdDaQ|$|!+$`)vz&^cyKo%R<5n+$977X%fk zyc0F%c?^o){Akz~J~0iZw;U;p0VE4BRs?=pSYvgf^-JBqwoyXCTL;;>7d>^Tsyxig z`Wt}@r=tjCkGR6IGY~w)u52a&Gy3pab)=8&e_C!P!pXheM`le+NnrTm+hdJg8};|lEe3Q$@=aj!@0($qb5)9;JoH*)HC7} z<3S2uT$kN}*@hk1SfbpoTFU^?vi@N0e%vaYkNE+Wa}*>ugugh`Myp^qk!qY_5n2LU zZm{Nd0Ul!jU({EvqXCqYqjp&CcWuy&7?4mdw(1b#3W%|_`OY0XNJg+S#rCThObsi0rD|gvKm;wt@T~4n;>dG z=edMJYWKpk45AC51IIByt@VD_k+p|oGITv$lp|UR?$AC%vK_<>n4Pcif$G587x0K| zjRrFOcR09%>G}mYOd5Q1Wo(ZlDG-(6t=3mvY?^ zoDMn*J1G_5s32(WcO_VoCXDvh)m3^-A8bmD-@Y9?z<(t)_dfVSh0{Ukg^@bz4zd6= z?ltU9!Z1W;?Ebr*|J~02p3eWC&i}{CR%dZ|En1C+60$W-I|HCslOM7Y?sQLVoMmlr z9<22Kf*JtH;e2H-kCDH@tNIg|w6K_59=I|iFhE^w|0ArSNh0v*3J)qx)eJD< zeI?neLy6zeJD%AXau;L=@V4a_HXg8SI(TJvU9ZXX>X*=$6^ilZv#9Ms!I1w(=*E0a zK%+V`4vL z+t*w<#DQ%@7eM9a8^7l;4E>T{1o+S=4*a!FH}Ibq-@776~O059G5O1SUF$RbOp9NW3ly}I_sGCo^$EoBh_P4M<*Z$NXXL#a5NFmUD02vHDP_eW{d_gH88Y8G+?~K$T#x8%a@~B|3Pm7Gnk8ACCaZSn`0QT{RoWPQqBsgM<%3VNhbBbnd2{38jJ-XPx2lps@zGr@R)jvL8 zoc-fV&*~nxuQhi`_p)p*m#LM;FJL++I}CN^ z=s04y&bxeER%GCTRa|w0QF~(PBkOLdxNnBli*feBQSarT{geNu$^J2$UI1`emU`QF zwXYhc87;n+y(nne?^r4^WgEI8NP924^SP<-vLJbtl(9+c%fye*c&>OvVg36=eAc~_ zbUmvLjOYhm>&cK?CoC47U-GJ68E9R(_|%;3T#|L^Y|kCVb-nRB0b_z|hE11h7N3_# zuUpCw2?V$e0$NwzEv`JZhqcI)zN9TW9V=?dg>5{V;pBH?A%@!y#SnsgH++vrXo4N= z@A2#nC59aBzt~-FEa@!0{lIV^_9O2}L+!X@&pxCJ8=uf>zg1&60HldPWljG$dh>FJ?-OGAQA9YGJWb(V8P`dqsD#NhHLlp;;Z{)E&*|`lp9xo5H?~wWOLZ~@AO7!MCc|P4MZI`pKg%v8f%4HhP$S4v!MRk73h39_sO?_C!j&hlqTy*DnCU< z-~G|H4jpe8s*Van zuCA+1O~m($=hyd*y&m*GnPKDI0UelKp~=#f&BrNw1fF77q|&DbQ(WlATBYZI6J+x8nIloc;>AiFa_6|X4cf^C{TU1)dj(s;`z_AhTG-#Y)z@I1TX}oM8=b*#{ zg=Dba!ADC{mPWfiVX4(Pe{B7iug|u0&bQKRyLCUG@|o4;rM4bP)Awg;h9-JV4Svie zA3$U-4hCGVKHcSK-}hj2;R<(2mi-Z`4p>sA{fM>{?CV2H>8K+Xr?E#^6j|=SNGIe! z(rb(K*s^>gr|*-S;#?x3T5X?IWg7J%DdFSi8JnBq^n=n2#uKnI+B3~63k?j+1Cdvq zXItk1#b#`OXZTr{YB4OI&1jP2hHbIKdA6-5#EWNkdNb5>x|tuT%HzrvO#d0s^^voA zBLBpHI=)vW=>(Vjp*(jf2BQbh)Xj_!K{q++ivH{CM&>3HNl8EDtF7PM(K)|6I{raS znZx0}`w4xE5VT0@6EN`nDs#`Jg*Bew(y7BJy3|#-f2=jW`OSdI@=NpC#hU%mC!8-x zUnjW4$GqviXFgzFa~ki^o+$H+C&T?oVZ9X+hJx2BGtubY6YW zZA@bfy>Ainnfs{r3mx0(Nm-w4=`wvMF#tMUW=>qxy;_u2-pzAPJET{R(cITf!lvc! za$=#?m%7lLE{DbOP?w127OR9Dp3@)lOjF{YF3n2(=v$SH=W$qmO4cVdU{gx>@Jxwt zTAR1wNKVBBZHwl^_c>8sJX%BzLqZ=Wg!RT_S&JBO3fLvtV9k%PyOfl$%PmX#g$ zK&s)W&QAPeMC04i;itoJ(Ba_Lz`i$okaw`6ay8dodZvFclHk%J?Zb7=A-}xMoBq0V zQU5avmlgTWN<)9H<>{(>Sw95~FnQfl^w2r}y_i>cG@Ay!i1aFTQwBxK2fQ`dk84X4S3+%Ln{bQtXLvp(Z_=krODfhp zi|B|wrsO&O?)3FyjZ2cTCaoir`YP>_F7BW1I)z+m-%%Rs5|<-o{84&7j+f3Ts4~aB zi+NG=@rRdXhxhearB96bV7(b12I=Bm!-@7l zoNT^8iQR-K)_efc`3k}ch@%Vv^9EG+;fQ9>0&CQS#|$k)GA0QZ1d=$3LBkpZ<_u z@-=_YhN1#Zqqzc&msyqJOG o!+~QhVOe@(>7m<_(8oR{sSK|WIu5sAF^F|>N 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%0Dr)VUFd`6esWYW zx!;k)aq!>DqX%F(@8+N(o0Tv_b{G~2pOM2_t7o!L%@2FmqNs;DOtx)>>Pz!xbBMl- z9fk(-u9yTOjg)}x2vV33td)=w8fCutY9h<39->7fBpQA!^!LmkQKD!Jrrk;)T=OYA zRqMTh?yz#ux!GbyckJjzap2#}NKP?v(r_hdID!c3jPl(DT=<1CF2% z`IkQ9l03;{VXEK07Vi?yAv-^(-QaGw@-bgL2&qEyoACiiUAh_(Vuw1|e(`GfnfejG zL~j_YK|8&Ft}@*+psq=|I5V7{HHE4ska?_wlN`1F`(BmWQ!%jcZ=vc{1DbSmi*HSH z{l4UM*UxoVFJn}xh(T^ST_# z1C*=#44L_-a!}LwXP21LBP?yOQXkITh=?VuFxuJ%?JK%0*KwmH? zSdB75l4}M4rFQR#^#PKuxx=1K8uh$xgdK8uJ~X+$L~6%0)6(iQ`Zu`Tv}cH2O5}bcx55o{MifMe|8<^q|Nf&&3)Jnm9t{DK^k+xF z7jx$u@Q9`Wnq3ov1$>m4dQb@?9@LUCgRp5=gCU5MLmm$tZ-m45jAU3Mp4%v# zNUU3lWHq9Lc}KND3R&yq+Ff<8?#E=t0$m-MKx-_t;Cxr&Of^#Tf;^Bvb^+c%-5ZI4x782*q+&n#*F;aWQ=p=N-^dg6UiDMSmQPxP$ z0Alr;GKa<|9D)!enT&=oUwi_=<@*7ZbtcbS`9*LdF0eDPU-#~=lq zUPwqdds3gk((hZ$tV?)w$Ljg=%j5 z>_L?2kfG1LBB8no$`nhaA|)9s9->8qH_8pYLWDJe5B~!R_Y&Z!@5b(CAqDSy)0YS7 z0+mY=HyCKToq)kK>HLo1F{z7Tg{gA$HvQS&+rT0!QbJ&O6#~_^a=6zG$jD;wwSv#Uuq&{xo%w&Q&&t@K;aA*%u!tMS1A}V&3`~g zmMgP5txOthgBPNRxu@#-XTcmt)U1#&)x?Ht!~(} zSwsm&pk5k0T(4hlclz>;nzvY=R?l0&)VO&k!4V=uFVqAgM`>Bq=WV&istUCEA?DYC zd-O6fO9lz}D@L)B>JnyZ9wqqsW)yuEMMS~h@9Wqsqy+nY6Od-fu)8&wBllu-f}{2s z|B@Yo#a=5|$4`w(r%V+E=I63o$LRr-#D|&zk=P=7 zB-bt-a$wMui)R6>{-!-v6UxkTloWoVu)gji5cx6+b*K~VU{#jH{Jy>N^EK4ZWp5%z zr~KEliwW7DUH5a@lhW0}9Dgi(LtC~15Q&Ch9d~G)y#TNZ_Fh*^(&NjqQU8TPy-}T7 ziytTyV||teB40+~$8cvOuqsPpK4l~&OSJ#7?Dtqb5&-7^SoZTzJYyq%EPJniu?m>u z^0KQN_Wl7-va~C7hTW`p|3u+~L>~aFzbPQ6GXlp7h#s{Roc<>-E3J6GIkf`Q3T;Ov44?e>dIIu7TZQ%IB6g6X6x^b~7+} z-f`UMrI-;kl>R3)0!CfY0m-^8TzxmcyAi5ru7-l6wl zy2r^!AhQu|B3gAVPJJYI#HOoVGUS+&20M%alZ-&x8TJG z#{HRy`Ch7rJ$!)D22U=>KA-|N83Vg^n*^>bm`;PBDW~?lA%-X?W`1jSxrQ#Ru zGAe`UN&!CbblYy1ulGw&bze*_^{epp!9XSSlS3YT=wel!5*B5}cDZb7qn@U3S%InW z4@zIKLh<8>UvBS$e8Hb1Td$|I+=cT#)m|&#i{rIersrfXGnuGR^8Dh}DJ zIH$xP3~vN~0e!s4;xYBp(des(qIXgMh`l$KD@6@#?7I8f9#>yI1zq?OnB+9g&xy91 z3zQ*;!%%SD90Mq00F^0M-)|If8LlsSQ7ozS)WRg4&bW$rAzn9(tU}ud+%hnNOU18H zLeKQR+WKv`w16qu+~>!Mc{@BQMB`ztX7cYGRc-JWifZf?@fSG@4QwKv7p6aLT@nMN2LA_zLik)d9Qx1?J}>{}<<>Hh%yB literal 0 HcmV?d00001 From 7965c129bdf705a280f63d17f8ad90020420234d Mon Sep 17 00:00:00 2001 From: Ari Date: Fri, 28 May 2021 09:59:42 -0400 Subject: [PATCH 11/33] Update knowledge_concepts.md Fixed mispelling --- knowledge_knowledge/knowledge_concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/knowledge_knowledge/knowledge_concepts.md b/knowledge_knowledge/knowledge_concepts.md index b718dac..ff360e0 100644 --- a/knowledge_knowledge/knowledge_concepts.md +++ b/knowledge_knowledge/knowledge_concepts.md @@ -28,7 +28,7 @@ Services are logical compute units derived from linking of one or more Wasm modu * Permission to resources * Maximum memory allocation -FCE uses a [shared nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme meaning that modules only expose functions explicitly marked to be publicly available while not sharing memeory or any other resources. It should be further noted that services can **not** call on other services directly. +FCE uses a [shared nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme meaning that modules only expose functions explicitly marked to be publicly available while not sharing memory or any other resources. It should be further noted that services can **not** call on other services directly. ## Blueprint From d5854f2f314c0fa1db5144312587903ccc9f1798 Mon Sep 17 00:00:00 2001 From: Dzmitry Lahoda Date: Sat, 29 May 2021 17:26:36 +0300 Subject: [PATCH 12/33] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1fafee5..1c559fe 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Fluence Labs builds distributed networks, development tools, components and support systems to allow developers to efficiently and reliably build, operate, maintain, and monetize distributed and decentralized services and applications. An integral component of the Fluence solution is [Aquamarine](https://github.com/fluencelabs/aquamarine), a programming language enabling peer-to-peer coordination for distributed applications and backends. -Fluence is also developing the [Fluence Compute Engine](https://github.com/fluencelabs/fce) \(FCE\) -- a general purpose runtime for multi-module WebAssembly applications with WASI support and a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. FCE allows for the rapid development and deployment of portable Wasm services which can be composed and coordinated with Aquamarine into secure applications. Furthermore, Fluence has implemented innovations at the p2p [node](https://github.com/fluencelabs/fluence) level, such as [TrustGraph](https://github.com/fluencelabs/trust-graph), local development and testing tools, such as [FCE-Repl](https://github.com/fluencelabs/fce/tree/master/tools/repl), and support tooling, such as [Fluence Distributor](https://github.com/fluencelabs/proto-distributor). +Fluence is also developing the [Marine](https://github.com/fluencelabs/marine) - a general purpose compute runtime for multi-module WebAssembly applications with WASI support and a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. FCE allows for the rapid development and deployment of portable Wasm services which can be composed and coordinated with Aquamarine into secure applications. Furthermore, Fluence has implemented innovations at the p2p [node](https://github.com/fluencelabs/fluence) level, such as [TrustGraph](https://github.com/fluencelabs/trust-graph), local development and testing tools, such as [FCE-Repl](https://github.com/fluencelabs/fce/tree/master/tools/repl), and support tooling, such as [Fluence Distributor](https://github.com/fluencelabs/proto-distributor). In combination, Aquamarine and the Fluence runtimes and tools allow developers to avoid the typical peer-to-peer development challenges and accelerate the development and deployment of distributed services and applications. From 26508d859cc2bbcf4be7ba90db105812f12f6fef Mon Sep 17 00:00:00 2001 From: Dzmitry Lahoda Date: Sat, 29 May 2021 17:28:07 +0300 Subject: [PATCH 13/33] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c559fe..acc7189 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Fluence Labs builds distributed networks, development tools, components and support systems to allow developers to efficiently and reliably build, operate, maintain, and monetize distributed and decentralized services and applications. An integral component of the Fluence solution is [Aquamarine](https://github.com/fluencelabs/aquamarine), a programming language enabling peer-to-peer coordination for distributed applications and backends. -Fluence is also developing the [Marine](https://github.com/fluencelabs/marine) - a general purpose compute runtime for multi-module WebAssembly applications with WASI support and a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. FCE allows for the rapid development and deployment of portable Wasm services which can be composed and coordinated with Aquamarine into secure applications. Furthermore, Fluence has implemented innovations at the p2p [node](https://github.com/fluencelabs/fluence) level, such as [TrustGraph](https://github.com/fluencelabs/trust-graph), local development and testing tools, such as [FCE-Repl](https://github.com/fluencelabs/fce/tree/master/tools/repl), and support tooling, such as [Fluence Distributor](https://github.com/fluencelabs/proto-distributor). +Fluence is also developing the [Marine](https://github.com/fluencelabs/marine) - a general purpose compute runtime for multi-module WebAssembly applications with WASI support and a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. FCE allows for the rapid development and deployment of portable Wasm services which can be composed and coordinated with Aquamarine into secure applications. Furthermore, Fluence has implemented innovations at the p2p [node](https://github.com/fluencelabs/fluence) level, such as [TrustGraph](https://github.com/fluencelabs/trust-graph), local development and testing tools, such as [Marine-Repl](https://github.com/fluencelabs/marine/tree/master/tools/repl), and support tooling, such as [Fluence Distributor](https://github.com/fluencelabs/proto-distributor). In combination, Aquamarine and the Fluence runtimes and tools allow developers to avoid the typical peer-to-peer development challenges and accelerate the development and deployment of distributed services and applications. From 09dde89d1db0d572d249f8709e72339c02096495 Mon Sep 17 00:00:00 2001 From: Dzmitry Lahoda Date: Sat, 29 May 2021 17:51:47 +0300 Subject: [PATCH 14/33] fce -> marine 2 --- quick_start/quick_start_setup.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quick_start/quick_start_setup.md b/quick_start/quick_start_setup.md index 9cd78cf..2dc55c7 100644 --- a/quick_start/quick_start_setup.md +++ b/quick_start/quick_start_setup.md @@ -15,11 +15,11 @@ rustup toolchain install nightly rustup target add wasm32-wasi ``` -In addition, install the Fluence REPL,`frepl`, and CLI, `fcli`, tools: +In addition, install the Marine REPL,`mrepl`, and CLI, `marine`, tools: ```bash -$ cargo install fcli --force -$ cargo install +nightly install frepl --force +$ cargo install marine --force +$ cargo +nightly install mrepl --force ``` Finally, you need [node](https://nodejs.org/en/) installed, and if you don't have it already, you may be best served by installing [NVM](https://github.com/nvm-sh/nvm): From 22ab51165d62ab6cff42e8318c252b62b67cb7ac Mon Sep 17 00:00:00 2001 From: Dzmitry Lahoda Date: Sat, 29 May 2021 17:56:00 +0300 Subject: [PATCH 15/33] Update quick_start_setup.md --- quick_start/quick_start_setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quick_start/quick_start_setup.md b/quick_start/quick_start_setup.md index 2dc55c7..76d20fb 100644 --- a/quick_start/quick_start_setup.md +++ b/quick_start/quick_start_setup.md @@ -29,7 +29,7 @@ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash nvm install --lts ``` -which allows us to install the \[Fluence Service Distribution and Management too\]\([https://github.com/fluencelabs/proto-distributor](https://github.com/fluencelabs/proto-distributor)\), `fldist`. +which allows us to install the [Fluence Service Distribution and Management tool](https://github.com/fluencelabs/proto-distributor), `fldist`. ```bash npm install -g @fluencelabs/fldist From 9419236becea47e7828e05e34775c9d671f3cde0 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Sat, 29 May 2021 15:03:26 +0000 Subject: [PATCH 16/33] GitBook: [main] 2 pages and 22 assets modified --- ...g => air_fold_4 (1) (2) (2) (3) (3) (3) (1).png} | Bin ...g => air_fold_4 (1) (2) (2) (3) (3) (3) (2).png} | Bin ...g => air_fold_4 (1) (2) (2) (3) (3) (3) (3).png} | Bin ...g => air_null_6 (1) (2) (2) (3) (3) (3) (1).png} | Bin ...g => air_null_6 (1) (2) (2) (3) (3) (3) (2).png} | Bin ...g => air_null_6 (1) (2) (2) (3) (3) (3) (3).png} | Bin ...equential_2 (1) (1) (1) (1) (1) (2) (3) (1).png} | Bin ...equential_2 (1) (1) (1) (1) (1) (2) (3) (2).png} | Bin ...equential_2 (1) (1) (1) (1) (1) (2) (3) (3).png} | Bin ...equential_2 (1) (1) (1) (1) (1) (2) (3) (4).png} | Bin .../assets/{image (5).png => image (6) (1).png} | Bin README.md | 2 +- .../knowledge_aquamarine_air.md | 2 +- 13 files changed, 2 insertions(+), 2 deletions(-) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (3) (1).png => air_fold_4 (1) (2) (2) (3) (3) (3) (1).png} (100%) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (3) (2).png => air_fold_4 (1) (2) (2) (3) (3) (3) (2).png} (100%) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (3).png => air_fold_4 (1) (2) (2) (3) (3) (3) (3).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (3) (1).png => air_null_6 (1) (2) (2) (3) (3) (3) (1).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (3) (2).png => air_null_6 (1) (2) (2) (3) (3) (3) (2).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (3).png => air_null_6 (1) (2) (2) (3) (3) (3) (3).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2) (1).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (1).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2) (2).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (2).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (3).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4).png} (100%) rename .gitbook/assets/{image (5).png => image (6) (1).png} (100%) diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (1).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (1).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (1).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (1).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (2).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (2).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (2).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (2).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (1).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (1).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (1).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (1).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (2).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (2).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (2).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (2).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (3).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (1).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (1).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (1).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (1).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (2).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (2).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (2).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (2).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (3).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (3).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4).png diff --git a/.gitbook/assets/image (5).png b/.gitbook/assets/image (6) (1).png similarity index 100% rename from .gitbook/assets/image (5).png rename to .gitbook/assets/image (6) (1).png diff --git a/README.md b/README.md index acc7189..03eb3ef 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Fluence Labs builds distributed networks, development tools, components and support systems to allow developers to efficiently and reliably build, operate, maintain, and monetize distributed and decentralized services and applications. An integral component of the Fluence solution is [Aquamarine](https://github.com/fluencelabs/aquamarine), a programming language enabling peer-to-peer coordination for distributed applications and backends. -Fluence is also developing the [Marine](https://github.com/fluencelabs/marine) - a general purpose compute runtime for multi-module WebAssembly applications with WASI support and a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. FCE allows for the rapid development and deployment of portable Wasm services which can be composed and coordinated with Aquamarine into secure applications. Furthermore, Fluence has implemented innovations at the p2p [node](https://github.com/fluencelabs/fluence) level, such as [TrustGraph](https://github.com/fluencelabs/trust-graph), local development and testing tools, such as [Marine-Repl](https://github.com/fluencelabs/marine/tree/master/tools/repl), and support tooling, such as [Fluence Distributor](https://github.com/fluencelabs/proto-distributor). +Fluence is also developing [Marine](https://github.com/fluencelabs/marine) - a general purpose compute runtime for multi-module WebAssembly applications with WASI support and a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. FCE allows for the rapid development and deployment of portable Wasm services which can be composed and coordinated with Aquamarine into secure applications. Furthermore, Fluence has implemented innovations at the p2p [node](https://github.com/fluencelabs/fluence) level, such as [TrustGraph](https://github.com/fluencelabs/trust-graph), local development and testing tools, such as [Marine-Repl](https://github.com/fluencelabs/marine/tree/master/tools/repl), and support tooling, such as [Fluence Distributor](https://github.com/fluencelabs/proto-distributor). In combination, Aquamarine and the Fluence runtimes and tools allow developers to avoid the typical peer-to-peer development challenges and accelerate the development and deployment of distributed services and applications. diff --git a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md index 355dcb3..6dea06b 100644 --- a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md +++ b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md @@ -23,7 +23,7 @@ AIR instructions are intended to launch the execution of a service method as fol 4. The arguments specified by the argument list are passed to the method 5. The result of the method returned under the name output name -**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29.png) +**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%282%29.png) The _**seq**_ instruction takes two instructions at most as its arguments and executes them sequentially, one after the other. From 9e12bbc50035255af08bf1f44a8a63f0fca5c3c6 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Thu, 10 Jun 2021 17:50:12 +0000 Subject: [PATCH 17/33] GitBook: [main] 54 pages and 22 assets modified --- ..._fold_4 (1) (2) (2) (3) (3) (3) (3) (1).png} | Bin ..._fold_4 (1) (2) (2) (3) (3) (3) (3) (2).png} | Bin ..._fold_4 (1) (2) (2) (3) (3) (3) (3) (3).png} | Bin ..._null_6 (1) (2) (2) (3) (3) (3) (3) (1).png} | Bin ..._null_6 (1) (2) (2) (3) (3) (3) (3) (2).png} | Bin ..._null_6 (1) (2) (2) (3) (3) (3) (3) (3).png} | Bin ...l_2 (1) (1) (1) (1) (1) (2) (3) (4) (1).png} | Bin ...l_2 (1) (1) (1) (1) (1) (2) (3) (4) (2).png} | Bin ...l_2 (1) (1) (1) (1) (1) (2) (3) (4) (3).png} | Bin ...l_2 (1) (1) (1) (1) (1) (2) (3) (4) (4).png} | Bin .../{image (6).png => image (6) (1) (1).png} | Bin SUMMARY.md | 5 +++-- knowledge_knowledge/knowledge_aquamarine/hll.md | 2 +- .../knowledge_aquamarine_air.md | 2 +- .../knowledge_aquamarine/marine.md | 16 ++++++++++++++++ knowledge_knowledge/knowledge_aquamarine/vm.md | 2 +- 16 files changed, 22 insertions(+), 5 deletions(-) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (3) (3) (1).png => air_fold_4 (1) (2) (2) (3) (3) (3) (3) (1).png} (100%) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (3) (3) (2).png => air_fold_4 (1) (2) (2) (3) (3) (3) (3) (2).png} (100%) rename .gitbook/assets/{air_fold_4 (1) (2) (2) (3) (3) (3).png => air_fold_4 (1) (2) (2) (3) (3) (3) (3) (3).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (3) (3) (1).png => air_null_6 (1) (2) (2) (3) (3) (3) (3) (1).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (3) (3) (2).png => air_null_6 (1) (2) (2) (3) (3) (3) (3) (2).png} (100%) rename .gitbook/assets/{air_null_6 (1) (2) (2) (3) (3) (3).png => air_null_6 (1) (2) (2) (3) (3) (3) (3) (3).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (1).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (1).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (2).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (2).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (3).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (3).png} (100%) rename .gitbook/assets/{air_sequential_2 (1) (1) (1) (1) (1) (2) (3).png => air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (4).png} (100%) rename .gitbook/assets/{image (6).png => image (6) (1) (1).png} (100%) create mode 100644 knowledge_knowledge/knowledge_aquamarine/marine.md diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (1).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3) (1).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (1).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3) (1).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (2).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3) (2).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (2).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3) (2).png diff --git a/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3).png b/.gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3) (3).png similarity index 100% rename from .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3).png rename to .gitbook/assets/air_fold_4 (1) (2) (2) (3) (3) (3) (3) (3).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (1).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3) (1).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (1).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3) (1).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (2).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3) (2).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (2).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3) (2).png diff --git a/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3).png b/.gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3) (3).png similarity index 100% rename from .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3).png rename to .gitbook/assets/air_null_6 (1) (2) (2) (3) (3) (3) (3) (3).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (1).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (1).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (1).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (1).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (2).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (2).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (2).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (2).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (3).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (3).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (3).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (3).png diff --git a/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3).png b/.gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (4).png similarity index 100% rename from .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3).png rename to .gitbook/assets/air_sequential_2 (1) (1) (1) (1) (1) (2) (3) (4) (4).png diff --git a/.gitbook/assets/image (6).png b/.gitbook/assets/image (6) (1) (1).png similarity index 100% rename from .gitbook/assets/image (6).png rename to .gitbook/assets/image (6) (1) (1).png diff --git a/SUMMARY.md b/SUMMARY.md index 288370c..23fa2eb 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -25,8 +25,9 @@ * [Tools](knowledge_knowledge/knowledge_tools.md) * [Aquamarine](knowledge_knowledge/knowledge_aquamarine/README.md) * [AIR](knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md) - * [HLL](knowledge_knowledge/knowledge_aquamarine/hll.md) - * [VM](knowledge_knowledge/knowledge_aquamarine/vm.md) + * [Aqua](knowledge_knowledge/knowledge_aquamarine/hll.md) + * [Aqua VM](knowledge_knowledge/knowledge_aquamarine/vm.md) + * [Marine](knowledge_knowledge/knowledge_aquamarine/marine.md) * [Fluence Compute Engine](knowledge_knowledge/fluence-compute-engine.md) * [Node](knowledge_knowledge/node/README.md) * [Overview](knowledge_knowledge/node/overview.md) diff --git a/knowledge_knowledge/knowledge_aquamarine/hll.md b/knowledge_knowledge/knowledge_aquamarine/hll.md index 6740663..630f2b9 100644 --- a/knowledge_knowledge/knowledge_aquamarine/hll.md +++ b/knowledge_knowledge/knowledge_aquamarine/hll.md @@ -1,4 +1,4 @@ -# HLL +# Aqua ## Aquamarine High Level Language diff --git a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md index 6dea06b..25b942b 100644 --- a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md +++ b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md @@ -23,7 +23,7 @@ AIR instructions are intended to launch the execution of a service method as fol 4. The arguments specified by the argument list are passed to the method 5. The result of the method returned under the name output name -**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%282%29.png) +**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%284%29%20%282%29.png) The _**seq**_ instruction takes two instructions at most as its arguments and executes them sequentially, one after the other. diff --git a/knowledge_knowledge/knowledge_aquamarine/marine.md b/knowledge_knowledge/knowledge_aquamarine/marine.md new file mode 100644 index 0000000..68bc56a --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/marine.md @@ -0,0 +1,16 @@ +# Marine + +[Marine](https://github.com/fluencelabs/marine) is a general purpose WebAssembly runtime favoring Wasm modules based on the [ECS](https://en.wikipedia.org/wiki/Entity_component_system) pattern or plugin architecture and uses Wasm [Interface Types](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.mdhttps://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.md) \( IT\) to implement a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. Fluence [nodes](https://github.com/fluencelabs/fluence) use Marine to host the Aqua VM and execute hosted Wasm services. + +Todo: we could really do with diagram + +The [Marine Rust SDK](https://github.com/fluencelabs/marine-rs-sdk) allows to hide the IT implementation details behind a handy procedural macro `[marine]` and provides the scaffolding for unit tests. + + + + + + + + + diff --git a/knowledge_knowledge/knowledge_aquamarine/vm.md b/knowledge_knowledge/knowledge_aquamarine/vm.md index aaded61..ec6c770 100644 --- a/knowledge_knowledge/knowledge_aquamarine/vm.md +++ b/knowledge_knowledge/knowledge_aquamarine/vm.md @@ -1,2 +1,2 @@ -# VM +# Aqua VM From 65e54c22202b9bfc4011c77f81653862de8548da Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Thu, 10 Jun 2021 18:10:40 +0000 Subject: [PATCH 18/33] GitBook: [main] 55 pages modified --- SUMMARY.md | 3 ++- .../knowledge_aquamarine/marine/README.md | 16 ++++++++++++ .../marine/marine-rs-sdk.md | 26 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 knowledge_knowledge/knowledge_aquamarine/marine/README.md create mode 100644 knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md diff --git a/SUMMARY.md b/SUMMARY.md index 23fa2eb..3d692b6 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -27,7 +27,8 @@ * [AIR](knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md) * [Aqua](knowledge_knowledge/knowledge_aquamarine/hll.md) * [Aqua VM](knowledge_knowledge/knowledge_aquamarine/vm.md) - * [Marine](knowledge_knowledge/knowledge_aquamarine/marine.md) + * [Marine](knowledge_knowledge/knowledge_aquamarine/marine/README.md) + * [Marine-RS-SDK](knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md) * [Fluence Compute Engine](knowledge_knowledge/fluence-compute-engine.md) * [Node](knowledge_knowledge/node/README.md) * [Overview](knowledge_knowledge/node/overview.md) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/README.md b/knowledge_knowledge/knowledge_aquamarine/marine/README.md new file mode 100644 index 0000000..68bc56a --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/marine/README.md @@ -0,0 +1,16 @@ +# Marine + +[Marine](https://github.com/fluencelabs/marine) is a general purpose WebAssembly runtime favoring Wasm modules based on the [ECS](https://en.wikipedia.org/wiki/Entity_component_system) pattern or plugin architecture and uses Wasm [Interface Types](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.mdhttps://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.md) \( IT\) to implement a [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. Fluence [nodes](https://github.com/fluencelabs/fluence) use Marine to host the Aqua VM and execute hosted Wasm services. + +Todo: we could really do with diagram + +The [Marine Rust SDK](https://github.com/fluencelabs/marine-rs-sdk) allows to hide the IT implementation details behind a handy procedural macro `[marine]` and provides the scaffolding for unit tests. + + + + + + + + + diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md new file mode 100644 index 0000000..30abe89 --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -0,0 +1,26 @@ +# Marine-RS-SDK + +The marine-rs-sdk empowers developers to write services suitable for peer hosting in peer-to-peer networks using the Marine Virtual Machine by enabling the wasm32-wasi compile target for Marine. For an introduction to writing services with the marine-rs-sdk, see the [Developing Modules And Services](../../../development_development/) section. + +### API + +The procedural macros `[marine]` and `[marine_test]` are the two primary features provided by the SDK. The `[marine]` macro can be applied to a function, external block or structure. The `[marine_test]` macro, on the other hand, allows the use of the familiar `cargo test` to execute \(unit\) tests over the actual Wasm module generated from the service code. + +#### Function Export + +Applying the `[marine]` macro to a function results in its export, which means that it can be called from other modules or AIR scripts. For the function to be compatible with this macro, its arguments must be of the `ftype`, which is defined as follows: + +`ftype` = `bool`, `u8`, `u16`, `u32`, `u64`, `i8`, `i16`, `i32`, `i64`, `f32`, `f64`, `String` +`ftype` = `ftype` \| `Vec`<`ftype`> +`ftype` = `ftype` \| `Record`<`ftype`> + +In other words, the arguments must be one of the types listed below: + +* one of the following Rust basic types: `bool`, `u8`, `u16`, `u32`, `u64`, `i8`, `i16`, `i32`, `i64`, `f32`, `f64`, `String` +* a vector of elements of the above types +* a vector composed of vectors of the above type, where recursion is acceptable, e.g. the type `Vec>>` is permissible +* a record, where all fields are of the basic Rust types +* a record, where all fields are of any above types or other records + +The return type of a function must follow the same rules, but currently only one return type is possible. + From e40e42e326581a03856bf93b6709d40a92c66733 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Thu, 10 Jun 2021 18:21:19 +0000 Subject: [PATCH 19/33] GitBook: [main] 54 pages modified --- .../marine/marine-rs-sdk.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 30abe89..ec47c76 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -24,3 +24,36 @@ In other words, the arguments must be one of the types listed below: The return type of a function must follow the same rules, but currently only one return type is possible. +Below an example of an exposed function with a complex type signature and return value: + +```rust +// export TestRecord as a public data structure bound by +// the IT type constraints +#[marine] +pub struct TestRecord { + pub field_0: i32, + pub field_1: Vec>, +} + +// export foo as a public function bound by the +// IT type contraints +#[marine] # +pub fn foo(arg_1: Vec>>>, arg_2: String) -> Vec>>> { + unimplemented!() +} +``` + + + +{% hint style="info" %} +Function Export Requirements + +* wrap a target function with the `[marine]` macro +* function arguments must by of `ftype` +* the function return type also must be of `ftype` +{% endhint %} + +#### Function Import + + + From 85c51c7d34d1b4e52f436142938baf3e2425d247 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Thu, 10 Jun 2021 18:39:02 +0000 Subject: [PATCH 20/33] GitBook: [main] 54 pages modified --- .../marine/marine-rs-sdk.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index ec47c76..d438f7e 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -55,5 +55,30 @@ Function Export Requirements #### Function Import +The `[marine]` macro can also wrap an [`extern` block](https://doc.rust-lang.org/std/keyword.extern.html). In this case, all functions declared in it are considered imported functions. If there are imported functions in some module, say, module A, then: + +* There should be another module, module B, that exports the same functions. The name of module B is indicated in the `link` macro \(see examples below\). +* Module B should be loaded to `Marine` by the moment the loading of module A starts. Module A cannot be loaded if at least one imported function is absent in `Marine`. + +```text +#[marine] +pub struct TestRecord { + pub field_0: i32, + pub field_1: Vec>, +} + +// wrap the extern block with the marine macro to expose the function +// as an import to the Marine VM +#[marine] +#[link(wasm_import_module = "some_module")] +extern "C" { + pub fn foo(arg: Vec>>>, arg_2: String) -> Vec>>>; +} +``` + + + + + From a1c432d5029549f0bb91c7fa3f920759a26874b1 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Thu, 10 Jun 2021 18:40:38 +0000 Subject: [PATCH 21/33] GitBook: [main] one page modified --- .../knowledge_aquamarine/marine/marine-rs-sdk.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index d438f7e..12118c7 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -78,6 +78,16 @@ extern "C" { +{% hint style="info" %} + + +#### Function import requirements + +* wrap an extern block with the function\(s\) to be imported with the `[marine]` macro +* all function\(s\) arguments must be of the `ftype` type +* the return type of the function\(s\) must be `ftype` +{% endhint %} + From 6d83f7883770c23291d3e3ba3cb298c78f2edc7b Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Thu, 10 Jun 2021 19:39:23 +0000 Subject: [PATCH 22/33] GitBook: [main] 54 pages modified --- .../marine/marine-rs-sdk.md | 220 +++++++++++++++++- 1 file changed, 218 insertions(+), 2 deletions(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 12118c7..7394872 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -24,7 +24,7 @@ In other words, the arguments must be one of the types listed below: The return type of a function must follow the same rules, but currently only one return type is possible. -Below an example of an exposed function with a complex type signature and return value: +See the example below of an exposed function with a complex type signature and return value: ```rust // export TestRecord as a public data structure bound by @@ -60,7 +60,11 @@ The `[marine]` macro can also wrap an [`extern` block](https://doc.rust-lang.org * There should be another module, module B, that exports the same functions. The name of module B is indicated in the `link` macro \(see examples below\). * Module B should be loaded to `Marine` by the moment the loading of module A starts. Module A cannot be loaded if at least one imported function is absent in `Marine`. -```text + + +See the example below of a wrapped `extern` block: + +```rust #[marine] pub struct TestRecord { pub field_0: i32, @@ -87,6 +91,218 @@ extern "C" { * all function\(s\) arguments must be of the `ftype` type * the return type of the function\(s\) must be `ftype` {% endhint %} + +#### + +#### Structures + +Finally, the `[marine]` macro can wrap a `struct` making possible to use it as a function argument or return type. Note that + +* only macro-wrapped structures can be used as function arguments and return types +* all fields of the wrapped structure must be public and of the `ftype`. +* it is possible to have inner records in the macro-wrapped structure + +See the example below for a wrapped `struc`t: + +```rust +#[marine] +pub struct TestRecord0 { + pub field_0: i32, +} + +#[marine] +pub struct TestRecord1 { + pub field_0: i32, + pub field_1: String, + pub field_2: Vec, + pub test_record_0: TestRecord0, +} + +#[marine] +pub struct TestRecord2 { + pub test_record_0: TestRecord0, + pub test_record_1: TestRecord1, +} + +#[marine] +fn foo(mut test_record: TestRecord2) -> TestRecord2 { unimplemented!(); } +``` + + + +{% hint style="info" %} + + +> #### Structure passing requirements +> +> * wrap a structure with the `[marine]` macro +> * all structure fields must be of the `ftype` +> * the structure must be pointed to without preceding package import in a function signature, i.e`StructureName` but not `package_name::module_name::StructureName` +{% endhint %} + + + +#### Call Parameters + +There is a special API function `fluence::get_call_parameters()` that returns an instance of the `CallParameters` structure defined as follows: + +```rust +pub struct CallParameters { + pub call_id: String, + pub user_name: String, + pub application_id: String, +} +``` + +Where + +* **call\_id** is the id, or nonce, of the current call to the service. This number is unique across the calls. +* **user\_name** is the user name of the caller +* **application\_id** is the id of the application that this service belongs to + + + +#### Testing + + + + + + + +### Features + +The SDK has two useful features: `logger` and `debug`. + +#### Logger + +Using logging is a simple way to assist in the debugging without deploying the module\(s\) to a peer-to-peer network node. The `logger` feature allows you to use a special logger that is based at the top of the [log](https://crates.io/crates/log) crate. + +To enable logging please specify the `logger` feature of the Fluence SDK in `Config.toml` and add the [log](https://docs.rs/log/0.4.11/log/) crate: + +```rust +[dependencies] +log = "0.4.14" +fluence = { version = "0.6.9", features = ["logger"] } +``` + +The logger should be initialized before its usage. This can be done in the `main` function as shown in the example below. + +```rust +use fluence::marine; +use fluence::WasmLogger; + +pub fn main() { + WasmLogger::new() + // with_log_level can be skipped, + // logger will be initialized with Info level in this case. + .with_log_level(log::Level::Info) + .build() + .unwrap(); +} + +#[marine] +pub fn put(name: String, file_content: Vec) -> String { + log::info!("put called with file name {}", file_name); + unimplemented!() +} +``` + + + +In addition to the standard log creation features, the Fluence logger allows the so-called target map to be configured during the initialization step. This allows you to filter out logs by `logging_mask`, which can be set for each module in the service configuration. Let's consider an example: + +```rust +const TARGET_MAP: [(&str, i64); 4] = [ + ("instruction", 1 << 1), + ("data_cache", 1 << 2), + ("next_peer_pks", 1 << 3), + ("subtree_complete", 1 << 4), +]; + +pub fn main() { + use std::collections::HashMap; + use std::iter::FromIterator; + + let target_map = HashMap::from_iter(TARGET_MAP.iter().cloned()); + + fluence::WasmLogger::new() + .with_target_map(target_map) + .build() + .unwrap(); +} + +#[fce] +pub fn foo() { + log::info!(target: "instruction", "this will print if (logging_mask & 1) != 0"); + log::info!(target: "data_cache", "this will print if (logging_mask & 2) != 0"); +} +``` + + + +Here, an array called `TARGET_MAP` is defined and provided to a logger in the `main` function of a module. Each entry of this array contains a string \(a target\) and a number that represents the bit position in the 64-bit mask `logging_mask`. When you write a log message request `log::info!`, its target must coincide with one of the strings \(the targets\) defined in the `TARGET_MAP` array. The log will be printed if `logging_mask` for the module has the corresponding target bit set. + +{% hint style="info" %} +REPL also uses the log crate to print logs from Wasm modules. Log messages will be printed if`RUST_LOG` environment variable is specified. +{% endhint %} + + + +#### Debug + +The application of the second feature is limited to obtaining some of the internal details of the IT execution. Normally, this feature should not be used by a backend developer. Here you can see example of such details for the greeting service compiled with the `debug` feature: + +```bash +# running the greeting service compiled with debug feature +~ $ RUST_LOG="info" fce-repl Config.toml +Welcome to the Fluence FaaS REPL +app service's created with service id = e5cfa463-ff50-4996-98d8-4eced5ac5bb9 +elapsed time 40.694769ms + +1> call greeting greeting "user" +[greeting] sdk.allocate: 4 +[greeting] sdk.set_result_ptr: 1114240 +[greeting] sdk.set_result_size: 8 +[greeting] sdk.get_result_ptr, returns 1114240 +[greeting] sdk.get_result_size, returns 8 +[greeting] sdk.get_result_ptr, returns 1114240 +[greeting] sdk.get_result_size, returns 8 +[greeting] sdk.deallocate: 0x110080 8 + +result: String("Hi, user") + elapsed time: 222.675µs +``` + +The most important information these logs relates to the `allocate`/`deallocate` function calls. The `sdk.allocate: 4` line corresponds to passing the 4-byte `user` string to the Wasm module, with the memory allocated inside the module and the string is copied there. Whereas `sdk.deallocate: 0x110080 8` refers to passing the 8-byte resulting string `Hi, user` to the host side. Since all arguments and results are passed by value, `deallocate` is called to delete unnecessary memory inside the Wasm module. + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ccf7c7d19fc24deaf1ba3dc0f40f97599e441816 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 00:42:32 +0000 Subject: [PATCH 23/33] GitBook: [main] 54 pages modified --- .../marine/marine-rs-sdk.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 7394872..59d2e6e 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -164,11 +164,47 @@ Where #### Testing +Since we are compiling to a wasm32-wasi target with `ftype` constrains, the basic `cargo test` is not all that useful or even usable for our purposes. To alleviate that limitation, Fluence has introduced the [`[marine-test]` macro ](https://github.com/fluencelabs/marine-rs-sdk/tree/master/crates/marine-test-macro)that does a lot of the heavy lifting to allow developers to use `cargo test` as intended. That is, `[marine-test]` macro generates the necessary code to call Marine, one instance per test function, based on the Wasm module and associated configuration file so that the actual test function is run against the Wasm module not the native code. +Let's have a look at an implementation example: +```rust +use fluence::marine; +use fluence::module_manifest; +module_manifest!(); +pub fn main() {} +#[marine] +pub fn greeting(name: String) -> String { # 1 + format!("Hi, {}", name) +} + +#[cfg(test)] +mod tests { + use fluence_test::marine_test; # 2 + + #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")] # 3 + fn empty_string() { + let actual = greeting.greeting(String::new()); # 4 + assert_eq!(actual, "Hi, "); + } + + #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")] + fn non_empty_string() { + let actual = greeting.greeting("name".to_string()); + assert_eq!(actual, "Hi, name"); + } +} +``` + +1. We wrap a basic _greeting_ function with the `[marine`\] macro which results in the greeting.wasm module +2. We wrap our tests as usual with `[cfg(test)]` and import the fluence_test crate._ Do **not** import _super_ or the _local crate_. +3. Instead, we apply the `[marine_test]` to each of the test functions by providing the path to the config file, e.g., Config.toml, and the directory containing the Wasm module we obtained after compiling our project with `marine build`. It is imperative that project compilation proceeds the test runner otherwise there won't be the required Wasm file. +4. The target of our tests is the `pub fn greeting` function. Since we are calling the function from the Wasm module we must prefix the function name with the module namespace -- `greeting` in this example case. + +Now that we have our Wasm module and tests in place, we can proceed with `cargo test --release.` Note that using the `release`vastly improves the import speed of the necessary Wasm modules. ### Features From 0e966ac367e10ef03f8530693dc6934b84e370cb Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 01:17:20 +0000 Subject: [PATCH 24/33] GitBook: [main] 54 pages modified --- .../knowledge_aquamarine/hll.md | 2 +- .../knowledge_aquamarine_air.md | 2 +- .../marine/marine-rs-sdk.md | 64 +++++++++++++++++++ .../knowledge_aquamarine/vm.md | 2 +- 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/hll.md b/knowledge_knowledge/knowledge_aquamarine/hll.md index 630f2b9..6740663 100644 --- a/knowledge_knowledge/knowledge_aquamarine/hll.md +++ b/knowledge_knowledge/knowledge_aquamarine/hll.md @@ -1,4 +1,4 @@ -# Aqua +# HLL ## Aquamarine High Level Language diff --git a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md index 25b942b..6dea06b 100644 --- a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md +++ b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md @@ -23,7 +23,7 @@ AIR instructions are intended to launch the execution of a service method as fol 4. The arguments specified by the argument list are passed to the method 5. The result of the method returned under the name output name -**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%284%29%20%282%29.png) +**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%282%29.png) The _**seq**_ instruction takes two instructions at most as its arguments and executes them sequentially, one after the other. diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 59d2e6e..1936bf1 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -162,6 +162,70 @@ Where +#### MountedBinaryResult + +Due to the inherent limitations of Wasm modules, such as a lack of sockets, it may be necessary for a module to interact with its host to bridge such gaps, e.g. use a https transport provider like _curl_. In order for a Wasm module to use a host's _curl_ capabilities, we need to provide access to the binary, which at the code level is achieved through the Rust `extern` block: + +```rust +// Importing a linked binary, curl, to a Wasm module +#![allow(improper_ctypes)] + +use fluence::marine; +use fluence::module_manifest; +use fluence::MountedBinaryResult; + +module_manifest!(); + +pub fn main() {} + +#[marine] +pub fn curl_request(curl_cmd: Vec) -> MountedBinaryResult { + let response = curl(curl_cmd); + response +} + +#[marine] +#[link(wasm_import_module = "host")] +extern "C" { + fn curl(cmd: Vec) -> MountedBinaryResult; +} +``` + +The above code creates a "curl adapter", i.e., a Wasm module that allows other Wasm modules to use the the `curl_request` function, which calls the imported _curl_ binary in this case, to make http calls. Please note that we are wrapping the `extern` block with the `[marine]`macro and introduce a Marine-native data structure [`MountedBinaryResult`](https://github.com/fluencelabs/marine/blob/master/examples/url-downloader/curl_adapter/src/main.rs) as the linked-function return value. + +Please not that if you want to use `curl_request` with testing, see below, the curl call needs to be marked unsafe, e.g.: + +```rust + let response = unsafe { curl(curl_cmd) }; +``` + +since cargo does not have access to the magic in place in the marine rs sdk to handle unsafe. + +MountedBinaryResult itself is a Marine-compatible struct containing a binary's return process code, error string, stdout and stderr: + +```rust +#[marine] +#[derive(Clone, PartialEq, Default, Eq, Debug, Serialize, Deserialize)] +pub struct MountedBinaryResult { + /// Return process exit code or host execution error code, where SUCCESS_CODE means success. + pub ret_code: i32, + + /// Contains the string representation of an error, if ret_code != SUCCESS_CODE. + pub error: String, + + /// The data that the process wrote to stdout. + pub stdout: Vec, + + /// The data that the process wrote to stderr. + pub stderr: Vec, +} + +``` + +MountedBinaryResult then can be used on a variety of match or conditional tests. + + + #### Testing Since we are compiling to a wasm32-wasi target with `ftype` constrains, the basic `cargo test` is not all that useful or even usable for our purposes. To alleviate that limitation, Fluence has introduced the [`[marine-test]` macro ](https://github.com/fluencelabs/marine-rs-sdk/tree/master/crates/marine-test-macro)that does a lot of the heavy lifting to allow developers to use `cargo test` as intended. That is, `[marine-test]` macro generates the necessary code to call Marine, one instance per test function, based on the Wasm module and associated configuration file so that the actual test function is run against the Wasm module not the native code. diff --git a/knowledge_knowledge/knowledge_aquamarine/vm.md b/knowledge_knowledge/knowledge_aquamarine/vm.md index ec6c770..aaded61 100644 --- a/knowledge_knowledge/knowledge_aquamarine/vm.md +++ b/knowledge_knowledge/knowledge_aquamarine/vm.md @@ -1,2 +1,2 @@ -# Aqua VM +# VM From 3c2360eade742c1ea754dbeb36fbf85aad20b150 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 01:48:13 +0000 Subject: [PATCH 25/33] GitBook: [main] 54 pages modified --- knowledge_knowledge/knowledge_aquamarine/hll.md | 2 +- .../knowledge_aquamarine/knowledge_aquamarine_air.md | 2 +- .../knowledge_aquamarine/marine/marine-rs-sdk.md | 4 +--- knowledge_knowledge/knowledge_aquamarine/vm.md | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/hll.md b/knowledge_knowledge/knowledge_aquamarine/hll.md index 6740663..630f2b9 100644 --- a/knowledge_knowledge/knowledge_aquamarine/hll.md +++ b/knowledge_knowledge/knowledge_aquamarine/hll.md @@ -1,4 +1,4 @@ -# HLL +# Aqua ## Aquamarine High Level Language diff --git a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md index 6dea06b..25b942b 100644 --- a/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md +++ b/knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md @@ -23,7 +23,7 @@ AIR instructions are intended to launch the execution of a service method as fol 4. The arguments specified by the argument list are passed to the method 5. The result of the method returned under the name output name -**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%282%29.png) +**Figure 2: Sequential Instruction** ![Execution](../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%284%29%20%282%29.png) The _**seq**_ instruction takes two instructions at most as its arguments and executes them sequentially, one after the other. diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 1936bf1..efd0440 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -201,7 +201,7 @@ Please not that if you want to use `curl_request` with testing, see below, the c since cargo does not have access to the magic in place in the marine rs sdk to handle unsafe. -MountedBinaryResult itself is a Marine-compatible struct containing a binary's return process code, error string, stdout and stderr: +MountedBinaryResult itself is a Marine-compatible struct containing a binary's return process code, error string and stdout and stderr as byte arrays: ```rust #[marine] @@ -224,8 +224,6 @@ pub struct MountedBinaryResult { MountedBinaryResult then can be used on a variety of match or conditional tests. - - #### Testing Since we are compiling to a wasm32-wasi target with `ftype` constrains, the basic `cargo test` is not all that useful or even usable for our purposes. To alleviate that limitation, Fluence has introduced the [`[marine-test]` macro ](https://github.com/fluencelabs/marine-rs-sdk/tree/master/crates/marine-test-macro)that does a lot of the heavy lifting to allow developers to use `cargo test` as intended. That is, `[marine-test]` macro generates the necessary code to call Marine, one instance per test function, based on the Wasm module and associated configuration file so that the actual test function is run against the Wasm module not the native code. diff --git a/knowledge_knowledge/knowledge_aquamarine/vm.md b/knowledge_knowledge/knowledge_aquamarine/vm.md index aaded61..ec6c770 100644 --- a/knowledge_knowledge/knowledge_aquamarine/vm.md +++ b/knowledge_knowledge/knowledge_aquamarine/vm.md @@ -1,2 +1,2 @@ -# VM +# Aqua VM From 2eaab3679631016555f82c44107c3a5846e88403 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 06:52:29 +0000 Subject: [PATCH 26/33] GitBook: [main] 2 pages modified --- SUMMARY.md | 1 - knowledge_knowledge/fluence-compute-engine.md | 6 ------ 2 files changed, 7 deletions(-) delete mode 100644 knowledge_knowledge/fluence-compute-engine.md diff --git a/SUMMARY.md b/SUMMARY.md index 3d692b6..d2ae32d 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -29,7 +29,6 @@ * [Aqua VM](knowledge_knowledge/knowledge_aquamarine/vm.md) * [Marine](knowledge_knowledge/knowledge_aquamarine/marine/README.md) * [Marine-RS-SDK](knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md) - * [Fluence Compute Engine](knowledge_knowledge/fluence-compute-engine.md) * [Node](knowledge_knowledge/node/README.md) * [Overview](knowledge_knowledge/node/overview.md) * [Services](knowledge_knowledge/node/knowledge_node_services.md) diff --git a/knowledge_knowledge/fluence-compute-engine.md b/knowledge_knowledge/fluence-compute-engine.md deleted file mode 100644 index bb14861..0000000 --- a/knowledge_knowledge/fluence-compute-engine.md +++ /dev/null @@ -1,6 +0,0 @@ -# Fluence Compute Engine - -[Fluence Compute Engine](https://github.com/fluencelabs/fce) \(FCE\) is a general purpose WebAssembly runtime that could be used in different scenarios, especially in programs based on the [ECS](https://en.wikipedia.org/wiki/Entity_component_system) pattern or plugin architecture. It runs multi-module Wasm applications with [interface-types](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.mdhttps://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.md) and [shared-nothing](https://en.wikipedia.org/wiki/Shared-nothing_architecture) linking scheme. - -Fluence [nodes](https://github.com/fluencelabs/fluence) use FCE to execute [Aquamarine](https://github.com/fluencelabs/aquamarine) and Wasm services. - From 0c270c551d580d8a55a106b5a925569dcb95f051 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 07:21:09 +0000 Subject: [PATCH 27/33] GitBook: [main] 53 pages modified --- .../marine/marine-rs-sdk.md | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index efd0440..bf3746c 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -102,8 +102,10 @@ Finally, the `[marine]` macro can wrap a `struct` making possible to use it as a * all fields of the wrapped structure must be public and of the `ftype`. * it is possible to have inner records in the macro-wrapped structure -See the example below for a wrapped `struc`t: +See the example below for a wrapped `struct` : +{% tabs %} +{% tab title="Example 1" %} ```rust #[marine] pub struct TestRecord0 { @@ -127,6 +129,37 @@ pub struct TestRecord2 { #[marine] fn foo(mut test_record: TestRecord2) -> TestRecord2 { unimplemented!(); } ``` +{% endtab %} + +{% tab title="Example 2" %} +```rust +#[fce] +pub struct TestRecord0 { + pub field_0: i32, +} + +#[fce] +pub struct TestRecord1 { + pub field_0: i32, + pub field_1: String, + pub field_2: Vec, + pub test_record_0: TestRecord0, +} + +#[fce] +pub struct TestRecord2 { + pub test_record_0: TestRecord0, + pub test_record_1: TestRecord1, +} + +#[fce] +#[link(wasm_import_module = "some_module")] +extern "C" { + fn foo(mut test_record: TestRecord2) -> TestRecord2; +} +``` +{% endtab %} +{% endtabs %} From f7b0e7a703442760c0908d5f9bcc6737d182aab0 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 07:31:57 +0000 Subject: [PATCH 28/33] GitBook: [main] 53 pages modified --- .../marine/marine-rs-sdk.md | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index bf3746c..4c0feef 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -4,7 +4,7 @@ The marine-rs-sdk empowers developers to write services suitable for peer hostin ### API -The procedural macros `[marine]` and `[marine_test]` are the two primary features provided by the SDK. The `[marine]` macro can be applied to a function, external block or structure. The `[marine_test]` macro, on the other hand, allows the use of the familiar `cargo test` to execute \(unit\) tests over the actual Wasm module generated from the service code. +The procedural macros `[marine]` and `[marine_test]` are the two primary features provided by the SDK. The `[marine]` macro can be applied to a function, external block or structure. The `[marine_test]` macro, on the other hand, allows the use of the familiar `cargo test` to execute tests over the actual Wasm module generated from the service code. #### Function Export @@ -177,23 +177,53 @@ extern "C" { #### Call Parameters -There is a special API function `fluence::get_call_parameters()` that returns an instance of the `CallParameters` structure defined as follows: +There is a special API function `fluence::get_call_parameters()` that returns an instance of the [`CallParameters`](https://github.com/fluencelabs/marine-rs-sdk/blob/master/fluence/src/call_parameters.rs#L35) structure defined as follows: ```rust pub struct CallParameters { - pub call_id: String, - pub user_name: String, - pub application_id: String, + /// Peer id of the AIR script initiator. + pub init_peer_id: String, + + /// Id of the current service. + pub service_id: String, + + /// Id of the service creator. + pub service_creator_peer_id: String, + + /// Id of the host which run this service. + pub host_id: String, + + /// Id of the particle which execution resulted a call this service. + pub particle_id: String, + + /// Security tetraplets which described origin of the arguments. + pub tetraplets: Vec>, } ``` -Where +CallParameters are especially useful in constructing authentication services: -* **call\_id** is the id, or nonce, of the current call to the service. This number is unique across the calls. -* **user\_name** is the user name of the caller -* **application\_id** is the id of the application that this service belongs to +```text +// auth.rs +use fluence::{marine, CallParameters}; +use::marine; +use crate::get_connection; +pub fn is_owner() -> bool { + let meta = marine::get_call_parameters(); + let caller = meta.init_peer_id; + let owner = meta.service_creator_peer_id; + caller == owner +} + +#[fce] +pub fn am_i_owner() -> bool { + is_owner() +} +``` + +#### #### MountedBinaryResult From 170d601cf44045ebfc3996aaebd36a342bada977 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 07:33:09 +0000 Subject: [PATCH 29/33] GitBook: [main] 53 pages modified --- .../knowledge_aquamarine/marine/marine-rs-sdk.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 4c0feef..f9593ed 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -207,7 +207,6 @@ CallParameters are especially useful in constructing authentication services: // auth.rs use fluence::{marine, CallParameters}; use::marine; -use crate::get_connection; pub fn is_owner() -> bool { let meta = marine::get_call_parameters(); @@ -217,7 +216,7 @@ pub fn is_owner() -> bool { caller == owner } -#[fce] +#[marine] pub fn am_i_owner() -> bool { is_owner() } From 832dfd4c712934592e65febb39e557824f2b0b14 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 17:24:38 +0000 Subject: [PATCH 30/33] GitBook: [main] 53 pages modified --- .../marine/marine-rs-sdk.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index f9593ed..cf0d7ce 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -60,10 +60,10 @@ The `[marine]` macro can also wrap an [`extern` block](https://doc.rust-lang.org * There should be another module, module B, that exports the same functions. The name of module B is indicated in the `link` macro \(see examples below\). * Module B should be loaded to `Marine` by the moment the loading of module A starts. Module A cannot be loaded if at least one imported function is absent in `Marine`. +See the examples below for wrapped `extern` block usage: - -See the example below of a wrapped `extern` block: - +{% tabs %} +{% tab title="Example 1" %} ```rust #[marine] pub struct TestRecord { @@ -79,6 +79,18 @@ extern "C" { pub fn foo(arg: Vec>>>, arg_2: String) -> Vec>>>; } ``` +{% endtab %} + +{% tab title="Example 2" %} +```rust +[marine] +#[link(wasm_import_module = "some_module")] +extern "C" { + pub fn foo(arg: Vec>>>) -> Vec>>>; +} +``` +{% endtab %} +{% endtabs %} From aa575ab9a75c940ad46af6132ca6c323dbc3eb7f Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 18:00:45 +0000 Subject: [PATCH 31/33] GitBook: [main] one page modified --- .../marine/marine-rs-sdk.md | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index cf0d7ce..6c6fdfa 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -114,7 +114,7 @@ Finally, the `[marine]` macro can wrap a `struct` making possible to use it as a * all fields of the wrapped structure must be public and of the `ftype`. * it is possible to have inner records in the macro-wrapped structure -See the example below for a wrapped `struct` : +See the example below for wrapping `struct`: {% tabs %} {% tab title="Example 1" %} @@ -169,6 +169,33 @@ pub struct TestRecord2 { extern "C" { fn foo(mut test_record: TestRecord2) -> TestRecord2; } +``` +{% endtab %} + +{% tab title="Example 3" %} +```rust +mod data_crate { + use fluence::marine; + #[marine] + pub struct Data { + pub name: String, + pub data: f64, + } +} + +use data_crate::Data; +use fluence::marine; + +fn main() {} + +#[marine] +fn some_function() -> Data { + Data { + name: "example".into(), + data: 1.0, + } +} + ``` {% endtab %} {% endtabs %} From fbb42a97fa0edab96abee6a3233d6a16654378dd Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 18:04:41 +0000 Subject: [PATCH 32/33] GitBook: [main] one page modified --- .../knowledge_aquamarine/marine/marine-rs-sdk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 6c6fdfa..54d6ca6 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -112,7 +112,7 @@ Finally, the `[marine]` macro can wrap a `struct` making possible to use it as a * only macro-wrapped structures can be used as function arguments and return types * all fields of the wrapped structure must be public and of the `ftype`. -* it is possible to have inner records in the macro-wrapped structure +* it is possible to have inner records in the macro-wrapped structure and to import wrapped structs from other crates See the example below for wrapping `struct`: From f10cc106e7d16687a06702d7f3396d3070537ff1 Mon Sep 17 00:00:00 2001 From: boneyard93501 Date: Fri, 11 Jun 2021 23:15:29 +0000 Subject: [PATCH 33/33] GitBook: [main] 56 pages modified --- SUMMARY.md | 10 ++-- .../knowledge_aquamarine/hll/README.md | 6 ++ .../hll/knowledge_aquamarine_air.md | 55 +++++++++++++++++++ .../knowledge_aquamarine/hll/vm.md | 2 + .../knowledge_aquamarine/marine/marine-cli.md | 35 ++++++++++++ .../marine/marine-repl.md | 35 ++++++++++++ .../marine/marine-rs-sdk.md | 48 ++++++++++++---- knowledge_knowledge/knowledge_tools.md | 21 +++++-- ...k_start_building_from_multiple_services.md | 2 +- 9 files changed, 193 insertions(+), 21 deletions(-) create mode 100644 knowledge_knowledge/knowledge_aquamarine/hll/README.md create mode 100644 knowledge_knowledge/knowledge_aquamarine/hll/knowledge_aquamarine_air.md create mode 100644 knowledge_knowledge/knowledge_aquamarine/hll/vm.md create mode 100644 knowledge_knowledge/knowledge_aquamarine/marine/marine-cli.md create mode 100644 knowledge_knowledge/knowledge_aquamarine/marine/marine-repl.md diff --git a/SUMMARY.md b/SUMMARY.md index d2ae32d..5d6e7c9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -24,11 +24,13 @@ * [Concepts](knowledge_knowledge/knowledge_concepts.md) * [Tools](knowledge_knowledge/knowledge_tools.md) * [Aquamarine](knowledge_knowledge/knowledge_aquamarine/README.md) - * [AIR](knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md) - * [Aqua](knowledge_knowledge/knowledge_aquamarine/hll.md) - * [Aqua VM](knowledge_knowledge/knowledge_aquamarine/vm.md) + * [Aqua](knowledge_knowledge/knowledge_aquamarine/hll/README.md) + * [Aqua VM](knowledge_knowledge/knowledge_aquamarine/hll/vm.md) + * [AIR](knowledge_knowledge/knowledge_aquamarine/hll/knowledge_aquamarine_air.md) * [Marine](knowledge_knowledge/knowledge_aquamarine/marine/README.md) - * [Marine-RS-SDK](knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md) + * [Marine CLI](knowledge_knowledge/knowledge_aquamarine/marine/marine-cli.md) + * [Marine Repl](knowledge_knowledge/knowledge_aquamarine/marine/marine-repl.md) + * [Marine Rust SDK](knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md) * [Node](knowledge_knowledge/node/README.md) * [Overview](knowledge_knowledge/node/overview.md) * [Services](knowledge_knowledge/node/knowledge_node_services.md) diff --git a/knowledge_knowledge/knowledge_aquamarine/hll/README.md b/knowledge_knowledge/knowledge_aquamarine/hll/README.md new file mode 100644 index 0000000..630f2b9 --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/hll/README.md @@ -0,0 +1,6 @@ +# Aqua + +## Aquamarine High Level Language + +_**Stay Tuned -- Coming Soon To A Repo Near You**_ + diff --git a/knowledge_knowledge/knowledge_aquamarine/hll/knowledge_aquamarine_air.md b/knowledge_knowledge/knowledge_aquamarine/hll/knowledge_aquamarine_air.md new file mode 100644 index 0000000..24d8bb8 --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/hll/knowledge_aquamarine_air.md @@ -0,0 +1,55 @@ +# AIR + +The Aquamarine Intermediate Representation \(AIR\) is a low level language to program both distributed networks and the services deployed on them. The language is comprised of a small number of instructions: + +* _**call**_: : execution +* _**seq**_ : sequential +* _**par** :_ parallel +* _**fold**_ : iteration +* _**xor** :_ branching & error handling +* _**null**_ : empty instruction + +which operate on _peer-id_ \(location\), _service-id_, and _service method_ over an argument list, see Figure 1. + +**Figure 1: AIR Instruction Definition** ![Execution](../../../.gitbook/assets/air_call_execution_1.png) + +## Instructions + +AIR instructions are intended to launch the execution of a service method as follows: + +1. The method is executed on the peer specified by the peer id \(location\) parameter +2. The peer is expected to have the Wasm service specified by the service id parameter +3. The service must have a callable method specified be the method parameter +4. The arguments specified by the argument list are passed to the method +5. The result of the method returned under the name output name + +**Figure 2: Sequential Instruction** ![Execution](../../../.gitbook/assets/air_sequential_2%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%282%29%20%283%29%20%284%29%20%282%29.png) + +The _**seq**_ instruction takes two instructions at most as its arguments and executes them sequentially, one after the other. + +**Figure 3: Parallel Instruction** ![Execution](../../../.gitbook/assets/air_par_3.png) + +The _**par**_ instruction takes two instructions at most as its arguments and particles may execute on parallel paths iff each service referenced is hosted on a different node otherwise particles execute sequentially + +TODO: add better graphic showing the disticntion of branching vs seq. + +**Figure 4: Fold Instruction** ![Execution](https://github.com/fluencelabs/gitbook-docs/tree/84e814d02d9299034c9c031adf7f081bb59898b9/.gitbook/assets/air_fold_4%20%281%29%20%282%29%20%281%29.png) + +The _**fold**_ instruction iterates over the elements of an array and workds as follows: + +* _**fold**_ instruction takes three arguments: an array, a variable and an instruction +* At each iteration, the variable is assigned an element of the array and the argument-instruction is executed +* The argument-instruction can access the variable and uses the next statement to trigger the next iteration + +Figure 5: Branching Instruction ![Execution](../../../.gitbook/assets/air_xor_5.png) + +This instruction is intended for organizing branches in the flow of execution as well as for handling errors: + +* The _**XOR**_ instruction takes two instructions as its arguments +* The first instruction is executed and if the execution is successful, then the second instruction is ignored +* If the first instruction fails, then the second one is executed. + +**Figure 6: Null Instruction** ![Execution](https://github.com/fluencelabs/gitbook-docs/tree/84e814d02d9299034c9c031adf7f081bb59898b9/.gitbook/assets/air_null_6%20%281%29%20%282%29.png) + +This is an empty instruction: it takes no arguments and does nothing. The _**null**_ instruction is useful for generating code. + diff --git a/knowledge_knowledge/knowledge_aquamarine/hll/vm.md b/knowledge_knowledge/knowledge_aquamarine/hll/vm.md new file mode 100644 index 0000000..ec6c770 --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/hll/vm.md @@ -0,0 +1,2 @@ +# Aqua VM + diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-cli.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-cli.md new file mode 100644 index 0000000..a00c2ee --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-cli.md @@ -0,0 +1,35 @@ +# Marine CLI + +The [Marine command line tool](https://github.com/fluencelabs/marine) provides the project `marine build` functionality, analogous to `cargo build`, that results in the Rust code to be compiled to _wasm32-wasi_ modules. In addition, `marine` provides utilities to inspect Wasm modules, expose Wasm module attributes or manually set module properties. + +```rust +mbp16~(:|✔) % marine --help +Fluence Marine command line tool 0.6.7 +Fluence Labs + +USAGE: + marine [SUBCOMMAND] + +FLAGS: + -h, --help Prints help information + -V, --version Prints version information + +SUBCOMMANDS: + aqua Shows data types of provided module in a format suitable for Aqua + build Builds provided Rust project to Wasm + help Prints this message or the help of the given subcommand(s) + info Shows manifest and sdk version of the provided Wasm file + it Shows IT of the provided Wasm file + repl Starts Fluence application service REPL + set Sets interface types and version to the provided Wasm file +mbp16~(:|✔) % +``` + + + + + + + + + diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-repl.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-repl.md new file mode 100644 index 0000000..139c327 --- /dev/null +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-repl.md @@ -0,0 +1,35 @@ +# Marine Repl + +[`mrepl`](https://crates.io/crates/mrepl) is a command line tool to locally run a Marine instance to inspect, run, and test Wasm modules and service configurations. We can run the Repl either with `mrepl` or `marine repl` + +```text +mbp16~(:|✔) % mrepl +Welcome to the Marine REPL (version 0.7.2) +Minimal supported versions + sdk: 0.6.0 + interface-types: 0.20.0 + +New version is available! 0.7.2 -> 0.7.4 +To update run: cargo +nightly install mrepl --force + +app service was created with service id = d81a4de5-55c3-4cb7-935c-3d5c6851320d +elapsed time 486.234µs + +1> help +Commands: + +n/new [config_path] create a new service (current will be removed) +l/load load a new Wasm module +u/unload unload a Wasm module +c/call [args] call function with given name from given module +i/interface print public interface of all loaded modules +e/envs print environment variables of a module +f/fs print filesystem state of a module +h/help print this message +q/quit/Ctrl-C exit + +2> +``` + + + diff --git a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md index 54d6ca6..66b95e3 100644 --- a/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md +++ b/knowledge_knowledge/knowledge_aquamarine/marine/marine-rs-sdk.md @@ -1,6 +1,6 @@ -# Marine-RS-SDK +# Marine Rust SDK -The marine-rs-sdk empowers developers to write services suitable for peer hosting in peer-to-peer networks using the Marine Virtual Machine by enabling the wasm32-wasi compile target for Marine. For an introduction to writing services with the marine-rs-sdk, see the [Developing Modules And Services](../../../development_development/) section. +The [marine-rs-sdk](https://github.com/fluencelabs/marine-rs-sdk) empowers developers to write services suitable for peer hosting in peer-to-peer networks using the Marine Virtual Machine by enabling the wasm32-wasi compile target for Marine. For an introduction to writing services with the marine-rs-sdk, see the [Developing Modules And Services](../../../development_development/) section. ### API @@ -210,9 +210,10 @@ fn some_function() -> Data { > * wrap a structure with the `[marine]` macro > * all structure fields must be of the `ftype` > * the structure must be pointed to without preceding package import in a function signature, i.e`StructureName` but not `package_name::module_name::StructureName` +> * wrapped structs can be imported from crates {% endhint %} - +#### #### Call Parameters @@ -325,6 +326,8 @@ pub struct MountedBinaryResult { MountedBinaryResult then can be used on a variety of match or conditional tests. + + #### Testing Since we are compiling to a wasm32-wasi target with `ftype` constrains, the basic `cargo test` is not all that useful or even usable for our purposes. To alleviate that limitation, Fluence has introduced the [`[marine-test]` macro ](https://github.com/fluencelabs/marine-rs-sdk/tree/master/crates/marine-test-macro)that does a lot of the heavy lifting to allow developers to use `cargo test` as intended. That is, `[marine-test]` macro generates the necessary code to call Marine, one instance per test function, based on the Wasm module and associated configuration file so that the actual test function is run against the Wasm module not the native code. @@ -375,7 +378,7 @@ The SDK has two useful features: `logger` and `debug`. #### Logger -Using logging is a simple way to assist in the debugging without deploying the module\(s\) to a peer-to-peer network node. The `logger` feature allows you to use a special logger that is based at the top of the [log](https://crates.io/crates/log) crate. +Using logging is a simple way to assist in debugging without deploying the module\(s\) to a peer-to-peer network node. The `logger` feature allows you to use a special logger that is based at the top of the [log](https://crates.io/crates/log) crate. To enable logging please specify the `logger` feature of the Fluence SDK in `Config.toml` and add the [log](https://docs.rs/log/0.4.11/log/) crate: @@ -407,8 +410,6 @@ pub fn put(name: String, file_content: Vec) -> String { } ``` - - In addition to the standard log creation features, the Fluence logger allows the so-called target map to be configured during the initialization step. This allows you to filter out logs by `logging_mask`, which can be set for each module in the service configuration. Let's consider an example: ```rust @@ -431,15 +432,13 @@ pub fn main() { .unwrap(); } -#[fce] +#[marine] pub fn foo() { log::info!(target: "instruction", "this will print if (logging_mask & 1) != 0"); log::info!(target: "data_cache", "this will print if (logging_mask & 2) != 0"); } ``` - - Here, an array called `TARGET_MAP` is defined and provided to a logger in the `main` function of a module. Each entry of this array contains a string \(a target\) and a number that represents the bit position in the 64-bit mask `logging_mask`. When you write a log message request `log::info!`, its target must coincide with one of the strings \(the targets\) defined in the `TARGET_MAP` array. The log will be printed if `logging_mask` for the module has the corresponding target bit set. {% hint style="info" %} @@ -477,7 +476,36 @@ The most important information these logs relates to the `allocate`/`deallocate` - +#### Module Manifest + +The `module_manifest!` macro embeds the Interface Type \(IT\), SDK and Rust project version as well as additional project and build information into Wasm module. For the macro to be usable, it needs to be imported and initialized in the _main.rs_ file: + +```text +// main.rs +use fluence::marine; +use fluence::module_manifest; // import manifest macro + +module_manifest!(); // initialize macro + +fn main() {} + +#[marine] +fn some_function() {} +} +``` + +Using the Marine CLI, we can inspect a module's manifest with `marine info`: + +```rust +mbp16~/localdev/struct-exp(main|…) % marine info -i artifacts/*.wasm +it version: 0.20.1 +sdk version: 0.6.0 +authors: The Fluence Team +version: 0.1.0 +description: foo-wasm, a Marine wasi module +repository: +build time: 2021-06-11 21:08:59.855352 +00:00 UTC +``` diff --git a/knowledge_knowledge/knowledge_tools.md b/knowledge_knowledge/knowledge_tools.md index b76d137..b736f7c 100644 --- a/knowledge_knowledge/knowledge_tools.md +++ b/knowledge_knowledge/knowledge_tools.md @@ -1,14 +1,21 @@ # Tools -## Fluence FCE REPL +## Fluence Marine REPL -\`\`[`fce-repl`](https://crates.io/crates/frepl) is a command line tool \(CLI\) to locally inspect, run, and test module and service configurations making it an invaluable development tool. +[`mrepl`](https://crates.io/crates/mrepl) is a command line tool \(CLI\) to locally run a Marine instance to inspect, run, and test module and service configurations. ```text -mbp16~(:|✔) % fce-repl -Welcome to the FCE REPL (version 0.5.2) -app service was created with service id = 2321fc56-8cb9-497a-8abb-03d04665e1cc -elapsed time 282.52µs +mbp16~(:|✔) % mrepl +Welcome to the Marine REPL (version 0.7.2) +Minimal supported versions + sdk: 0.6.0 + interface-types: 0.20.0 + +New version is available! 0.7.2 -> 0.7.4 +To update run: cargo +nightly install mrepl --force + +app service was created with service id = d81a4de5-55c3-4cb7-935c-3d5c6851320d +elapsed time 486.234µs 1> help Commands: @@ -22,6 +29,8 @@ e/envs print environment variables of a modul f/fs print filesystem state of a module h/help print this message q/quit/Ctrl-C exit + +2> ``` ## Fluence Proto Distributor: FLDIST diff --git a/quick_start/quick_start_building_from_multiple_services.md b/quick_start/quick_start_building_from_multiple_services.md index 3954d9c..c146ead 100644 --- a/quick_start/quick_start_building_from_multiple_services.md +++ b/quick_start/quick_start_building_from_multiple_services.md @@ -43,7 +43,7 @@ Let's test the hex conversion test in isolation with the following AIR script: ``` {% hint style="info" %} -Aquamarine Intermediate Representation \(AIR\) is a low level implementation of Aquamarine to coordinate services into applications. For a detailed introduction to AIR, please refer to the [Knowledgebase](../knowledge_knowledge/knowledge_aquamarine/knowledge_aquamarine_air.md). For the remainder of this section, we will see three AIR _instructions_: _seq, xor,_ and _call._ +Aquamarine Intermediate Representation \(AIR\) is a low level implementation of Aquamarine to coordinate services into applications. For a detailed introduction to AIR, please refer to the [Knowledgebase](../knowledge_knowledge/knowledge_aquamarine/hll/knowledge_aquamarine_air.md). For the remainder of this section, we will see three AIR _instructions_: _seq, xor,_ and _call._ _seq_ is the _sequential_ instruction that wraps arguments and executes them, you guessed it, sequentially. And yes, there is a _parallel_ instruction in the language.