From 2c43e53fb418c4e0f9d20402b42a894adcb37483 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Thu, 30 May 2024 13:20:04 -0600 Subject: [PATCH 01/13] prep docs for docs-hub --- .github/workflows/docs.yaml | 11 + README.md | 10 +- SRCs/.docs/src-10-logo-dark-theme.png | Bin 20897 -> 0 bytes SRCs/.docs/src-10-logo-light-theme.png | Bin 23823 -> 0 bytes SRCs/.docs/src-11-logo-dark-theme.png | Bin 20621 -> 0 bytes SRCs/.docs/src-11-logo-light-theme.png | Bin 18876 -> 0 bytes SRCs/.docs/src-12-logo-dark-theme.png | Bin 20866 -> 0 bytes SRCs/.docs/src-12-logo-light-theme.png | Bin 23460 -> 0 bytes SRCs/.docs/src-13-logo-dark-theme.png | Bin 22964 -> 0 bytes SRCs/.docs/src-13-logo-light-theme.png | Bin 26308 -> 0 bytes SRCs/.docs/src-2-logo-dark-theme.png | Bin 21458 -> 0 bytes SRCs/.docs/src-2-logo-light-theme.png | Bin 24281 -> 0 bytes SRCs/.docs/src-20-logo-dark-theme.png | Bin 21370 -> 0 bytes SRCs/.docs/src-20-logo-light-theme.png | Bin 24489 -> 0 bytes SRCs/.docs/src-5-logo-dark-theme.png | Bin 20263 -> 0 bytes SRCs/.docs/src-5-logo-light-theme.png | Bin 23249 -> 0 bytes SRCs/.docs/src-6-logo-dark-theme.png | Bin 18103 -> 0 bytes SRCs/.docs/src-6-logo-light-theme.png | Bin 19333 -> 0 bytes SRCs/.docs/src-7-logo-dark-theme.png | Bin 23487 -> 0 bytes SRCs/.docs/src-7-logo-light-theme.png | Bin 27006 -> 0 bytes SRCs/.docs/src-8-logo-dark-theme.png | Bin 20918 -> 0 bytes SRCs/.docs/src-8-logo-light-theme.png | Bin 23655 -> 0 bytes SRCs/.docs/src-9-logo-dark-theme.png | Bin 22186 -> 0 bytes SRCs/.docs/src-9-logo-light-theme.png | Bin 25302 -> 0 bytes .../sway-standards-logo-dark-theme.png | Bin .../sway-standards-logo-light-theme.png | Bin docs/.spellcheck.yml | 28 +++ docs/SUMMARY.md | 17 ++ docs/index.md | 60 +++++ docs/spell-check-custom-words.txt | 213 ++++++++++++++++++ .../src-10.md => docs/src-10-native-bridge.md | 45 ++-- .../src-11-security-information.md | 73 +++--- .../src-12-contract-factory.md | 56 ++--- .../src-13-soulbound-address.md | 43 ++-- .../src-14-simple-upgradeable-proxies.md | 23 +- .../src-2-inline-documentation.md | 166 +++++++------- SRCs/src-20.md => docs/src-20-native-asset.md | 57 ++--- .../src-3-minting-and-burning.md | 52 +++-- SRCs/src-5.md => docs/src-5-ownership.md | 66 +++--- SRCs/src-6.md => docs/src-6-vault.md | 99 ++++---- SRCs/src-7.md => docs/src-7-asset-metadata.md | 67 +++--- SRCs/src-8.md => docs/src-8-bridged-asset.md | 48 ++-- SRCs/src-9.md => docs/src-9-metadata-keys.md | 177 ++++++++------- 43 files changed, 824 insertions(+), 487 deletions(-) create mode 100644 .github/workflows/docs.yaml delete mode 100644 SRCs/.docs/src-10-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-10-logo-light-theme.png delete mode 100644 SRCs/.docs/src-11-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-11-logo-light-theme.png delete mode 100644 SRCs/.docs/src-12-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-12-logo-light-theme.png delete mode 100644 SRCs/.docs/src-13-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-13-logo-light-theme.png delete mode 100644 SRCs/.docs/src-2-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-2-logo-light-theme.png delete mode 100644 SRCs/.docs/src-20-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-20-logo-light-theme.png delete mode 100644 SRCs/.docs/src-5-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-5-logo-light-theme.png delete mode 100644 SRCs/.docs/src-6-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-6-logo-light-theme.png delete mode 100644 SRCs/.docs/src-7-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-7-logo-light-theme.png delete mode 100644 SRCs/.docs/src-8-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-8-logo-light-theme.png delete mode 100644 SRCs/.docs/src-9-logo-dark-theme.png delete mode 100644 SRCs/.docs/src-9-logo-light-theme.png rename {.docs => assets}/sway-standards-logo-dark-theme.png (100%) rename {.docs => assets}/sway-standards-logo-light-theme.png (100%) create mode 100644 docs/.spellcheck.yml create mode 100644 docs/SUMMARY.md create mode 100644 docs/index.md create mode 100644 docs/spell-check-custom-words.txt rename SRCs/src-10.md => docs/src-10-native-bridge.md (91%) rename SRCs/src-11.md => docs/src-11-security-information.md (80%) rename SRCs/src-12.md => docs/src-12-contract-factory.md (72%) rename SRCs/src-13.md => docs/src-13-soulbound-address.md (89%) rename SRCs/src-14.md => docs/src-14-simple-upgradeable-proxies.md (84%) rename SRCs/src-2.md => docs/src-2-inline-documentation.md (83%) rename SRCs/src-20.md => docs/src-20-native-asset.md (83%) rename SRCs/src-3.md => docs/src-3-minting-and-burning.md (76%) rename SRCs/src-5.md => docs/src-5-ownership.md (72%) rename SRCs/src-6.md => docs/src-6-vault.md (76%) rename SRCs/src-7.md => docs/src-7-asset-metadata.md (78%) rename SRCs/src-8.md => docs/src-8-bridged-asset.md (87%) rename SRCs/src-9.md => docs/src-9-metadata-keys.md (85%) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 00000000..62c0fc26 --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,11 @@ +name: Docs + +on: + pull_request: + +jobs: + test: + uses: FuelLabs/github-actions/.github/workflows/mdbook-docs.yml@master + with: + docs-src-path: 'docs' + spellcheck-config-path: 'docs/.spellcheck.yml' \ No newline at end of file diff --git a/README.md b/README.md index c6dc5325..6fadc38f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

- - Sway Standards logo + + Sway Standards logo

@@ -62,7 +62,7 @@ If you don't find what you're looking for, feel free to create an issue and prop To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: -```rust +```toml standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.5.0" } ``` @@ -71,13 +71,13 @@ standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.5.0" You may then import your desired standard in your Sway Smart Contract as so: -```rust +```sway use standards::::; ``` For example, to import the SRC-20 Native Asset Standard use the following statement in your Sway Smart Contract file: -```rust +```sway use standards::src20::SRC20; ``` diff --git a/SRCs/.docs/src-10-logo-dark-theme.png b/SRCs/.docs/src-10-logo-dark-theme.png deleted file mode 100644 index 1eee3b5964869a0886308853a83ac5b2d1c6d4ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20897 zcmeFYXH=8X+9*hGqEzV}>4X+~Rhks(9hIH{(n1Xgq4%!RQ4thDQ9wZ{p#%`H1dt*~ z2?P*ON(dqZ3}s&QoO91vbMMT2Yt6mCK3IgjyF7b8z3lyFSejowPsc?^LPB!h*ht@+ zgoF$SeE&p41$@dcvq6D>{kLr$!>rxm0nC7L_ao7DRHRrd%RrF`VccP|Aw-;!|4mnjLX~RgGt!sTcEguZ3GX>BW5P_31;eW58p=bVTP`=9Ax$Z^tBgxrVW+R_BF9W!*Rw zr{C4a;7(>DuRaf%{guY7 zOw~zA)=J&li_YP4ZNJWyDPEG0$xZa@>B;MVo|M&8f1y56;DB^#ed)<}A(0bViRSbj zY%BjZP760rs@sWHtP`g4X%BeH94vqD=0&6nlPbrWVFA3WrsY>!AV z918BrRf4N*Go&tLCH+c z45kP1@in>~0-O{;tvS`fQAD5lmCzLVZPA+L9GAS+gZ;abpCxKz;geB{~x3OiTj_yz$h~_b^RdE z@UumY^|ge~_N(p{l-0l>RaM|oLCFj1p$Jx$_fi4> z8z|$z&@lHvPskZ40Jw}V00*L^qNE6xQvpFBUY;ODMNegrhn$BB$jigSL&Z}b3RZMi z`Zo|3A-;fAy8Hk8uFgPt0icxSGqJ2P(b3&fXd6sfEE8t_wrOX1VFk2lH(iT?hTQJ1$zJKIOB^tfDJ%d z_cK8SApdCxkWtqQfw+eSh1doK`D+QCZB5_|7d(_fXcfdv13`uphb z`$v}q1pa7+y1VCJ6hhr2AYOm=3BdZ><>})d=nVnP$3NutpY6W?6IoCJ%d5)E%PWJt z+~w6kiV6@Fkg9^G7YGb-_fU`nd#Jg~tNbVQ&>(0S+&u(x#T%d_Kr28#|IkW6{F-lI zc%;OCj)wa{&e#JG3?!!jQc$s#lT%laS65P$0=@tQll?z{q8wNOqNb(_QU)ujfD}EH zltJzuYJj*a05atcRg{zSaR1Lu|F2PW@D20|f`|S;APL~9YAdIvt^`(BQ2sxGp1XpI zlDzU6W?r81fHo^ZKprZw z%AVQ%e+sRp?Eg)y{|@*!M**<@ZyVr%0DmU?FNgLInK*MD{~Le)p-%rBR{%i&_agr# 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 diff --git a/SRCs/.docs/src-11-logo-light-theme.png b/SRCs/.docs/src-11-logo-light-theme.png deleted file mode 100644 index 7a36addbca7dae4677db836fd2ec3826ef56eec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18876 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 diff --git a/SRCs/.docs/src-12-logo-dark-theme.png b/SRCs/.docs/src-12-logo-dark-theme.png deleted file mode 100644 index 3cfe6397c233959fd77ffbd8eb55d74ccacb5397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20866 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 Y-qnBZCNFmj;4XXyPgg&ebxsLQ0LRq8Gynhq diff --git a/SRCs/.docs/src-12-logo-light-theme.png b/SRCs/.docs/src-12-logo-light-theme.png deleted file mode 100644 index d5eef2068f1b90d723dbe10ea9172cab407c4a52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23460 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�FadpVic$Ze~oF>3=wD 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 diff --git a/SRCs/.docs/src-20-logo-dark-theme.png b/SRCs/.docs/src-20-logo-dark-theme.png deleted file mode 100644 index 5a81a7a5999c3114d768ec308ad12086fe8cf2d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21370 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 diff --git a/SRCs/.docs/src-20-logo-light-theme.png b/SRCs/.docs/src-20-logo-light-theme.png deleted file mode 100644 index 5cd3408e1454c581f90f4b2b015fa233612fc998..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24489 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 diff --git a/SRCs/.docs/src-5-logo-dark-theme.png b/SRCs/.docs/src-5-logo-dark-theme.png deleted file mode 100644 index 6808e847963c9ae9130efd09e6f5e77ed1c829cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20263 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 diff --git a/SRCs/.docs/src-8-logo-light-theme.png b/SRCs/.docs/src-8-logo-light-theme.png deleted file mode 100644 index 190e8b273507ce43fc470e8046e7fbc097012c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23655 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 diff --git a/SRCs/.docs/src-9-logo-light-theme.png b/SRCs/.docs/src-9-logo-light-theme.png deleted file mode 100644 index 0496aecbc6b1f74abfed230558cf3905ad28042f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25302 zcmeFYby$>L7dJX|N{EC=IUpc8be9gPfW#0=4MVqdmr5##h|(y6z|hj&f=Y-ubP4E4 zgLHozeV#Y2^L^)>_qxvaoqyg@l(}cmy7yZ5+I#)hZ>=4DM@#hrDI+Na0=b~B2G@l^ z@YulbpNI*;zb~%rRf7LI{q>DJb&)=7Ztku&_D6Voqy0X2m+?F!xEh1ob^$LgS`iO{}H1Rd{>B_IVt!xM$v0ImzoMGYQ zENl=8ufd`6j+NHIIp{@d2$<%4q2R1pXmv*b}Tsz+R6ea7Hm5;S$z`!hj;YKKJ zIVu&@PnDLLm)$tY(aK&PRaj4RUhmyy<*aA8{5YkHXf{~#eg*F3G>a#8+Vir{dxv`I zez|JXEaKVt8rv}sW+g%(I1lY_-n^rJ^XA|B04>sk66Dl66q&lr^^_B0!kOVrxCTmP zu`!avJeOYI$fv#Q1*_X8OBLm~E)W;)*wz-`g?tN`kLI@G|r8tUeQ8!Lc4nBw-@gVC7RMUm{H$gIAQ3H>g7XeJ$tsnY`#alu_N%Y z;&|Xh${&;76&k9>go?1Iaitn?8YjdC&B1s-@@z_NK2)dY2wte4+q{Ae|Aae0p0@Z^ z_I|PvUuF51_eFLNokN|}h@tD|J-$Wm({n{hg++ear|oyN%#D9Y_aQmTqOPe?y?zyQ z@nacvE`qD;M$GQK{OQ#Z!Gv2^4M`p|k>x8sSUGGvoAs$N2zK~#i?l1OpT7HmfuP6hQ^ z$>ZkhWaN{$a*k%MeL?B+5c?$_KRhNTTol1avpqi_p8(ghO#9tEyg^3y-mC74FCY*~ zS$p7LMw+*!QLfGcNGn%MYXM(pH{f^>h^&II8xrMc?a5|oZENo$2VHMyfwI|K$w3Xp zG+~-{+25Zem}n~ z2xa>{#M4m@YNUCG?WU`{HJhk_r~r&#+1K7%7%ET7ChKlxBdrTp`AYAE?eF3vL%fT}UseG25cEa52?`0o1f87)|MeRlp32@p$X^rs zpMJwbA1qTrU26|lFL#u+vbVL1C;PvOP*vBw^A8E0h5x>C#|i0a-&G+ z{dwzT|9dU5vHe~Z(n!=F6+DpM)>gmg31t2G2xW(Kv9$)<$6x;X_jUXKi7!Zq2uTVF z35oMtA%&#)MTM;;_$7r=R{SE?NK0Xuh@})#=#MY_L%N5nji(RN-CD^O*b&$Y_~&n1 zv2owFck%MQ{_k_~v9msZJiuW5FkyaS34It$S{T?&lo$L03?}%0Kt-5{u(gzwB)_^BS9{)E=0zD=5VN%j!BGSU* z|0mQFMv7Vsi3khviwO$>^+ZI(`7K4k)_{_*u@M%Qu(Yp^;{-eSF^{)TV%tiXol-Sw@09hZ9@UF>N zs)1yg(DIfl9CCL4=T%c4U^*ZqZfeFJ5C|E~`40{xHJt%mB=S_(R3^fbU!oEf>1xkt zhd|gM>To4}-|>|UzhowiSIvyxRO)4Z_CC*qhcd`QeSUd`B*e{v1IE+M=XK- zi|3B`Ql`}U)=!}qE{0RmUdzKL7&$VA2;~1if4y!px_@ocCSBY$j;bN*!F?(h>hgK9 zwQ|34KI7he$OwJa#MqfFy>lXyYva~PhrCQ?>9gkbrL*;-v%5$IA1~*5=A*8bv9Yt# z-SKCc<{w9GWRJ+oF4U%_thZoT0y<#i9k9n!s`VwR6Th65Bs>*IFVs_(U6Q=$N!^p# z>hy|PEoJcu2@Ceh+?hCz7Z+2a#GBb0+kQY`pd2z|!$4C}`qxBFTWi+r9pb=%_4 z7-RgN&o6DVuk7NQ;S@pQaDJplKjD1c<2?fVeM|B;xdc6*H7Hf~2w&jj;i}?I*_i$L zpaZrfsHiVPZA{+CD9NG2baG9d(OfUa+b?^=j)ScLk>hmLllq>(d zhD(HZq_-~}W@gn+u|e^F3;wHG}nA4$m>{~A+%YpDt)g!dEX@%I%W zYFsNuxQ~G^@y9K%>MqI+8u?xdLs~d8!_}nMhHn3TA5KN@$bD`|VVG^`PAe76p{B&4-N;RH z7GiPzv(7iU4|sx*<+-zIs+pGwJOn*PN91LKZd9-im!v;lPVzK5=aQg9NW42gbT3r) z@@jZ8kwKEBR+LHFyL_fNJ4U112N@CN8FADWRQvoJkPYr02eo3n>Ki(RD=&#|$9H{p zw_tVJ`%8WN9{dUdUxr$O{c9g-dXMvz8mz_MEnbZLDGQG$q#&@lwvQloih0z{oUk!_ zeU{*}S+tZEX! z_~F;KB2nIQW*5@67AS1WS^u~Ius7L+BJSG|Zr7Ru&dr3luI_J9nYfKH-208```i}^ zk`*A650{*sM(a}#&UDeYS|SX*saIPYrRm_eLdU#2{!--i-+%R864 zBB`ujNM9PHZ8d)G(-7XX%0np|;eO$@kJ#%yz5;3GGs@!hHt(9kp-^@;y4XLf6Im(Q zSBoc17dVMy#o$+z_D#^`)qIe0gDGv<;@qWKyvVEmgc}+bg4yG&^Ew>v4fU+wZP|Rv zs#c}^`wQbw-ekn%MZYuU=W=gIt(@!FJL%BhspSc2zDgX<%bA_kU+1H1%%6OQny7YG zn5?uP%9$xxSz21s$Qvrv{vuA^p-TFwy-A!}EY3+h;8j%m(~aOsGww^lj;OEi?Pz+p z93QaNR`+8=lF$MLzU9~4%>`ZtjIO;x;x1^XME`7lm`ec1`OK;K?A^}XrK^{p-=vb0 zGW)r1ZWAW;!a;)an6Q?5rv$}ug1e}@>SCB?7?(SKA_9F`_#H08nkfB)oxDR&dBFp7 z+E`Js6`>-ymf@ianJL=cV`gUF(;~omrjh#t*IfI{@K$3i&b>)7s)4OI1SV&1-XxnZ zSX{;V@!Fc-sm&`F+)gQN}5s0XGg||bCBE!Y^Y?paD@O!k9wJs$$5`H%$H78aJ__#uu zKUHlS6EFJt0#nSA@a#k1*I691vLC$(B(nW^J36!zv@j^_%}}jsqVy~#vIMOLcFxUH>1(rVI5rsKZt7SDcx`39@)to5%*z`HzN}e<3$d1}NM_`Z*R2L} z*b=}lFgSO%1f3mjauaOAbDkbxO}V|`3AYKHZHsO#3?+`7x>F96j(T@O(ExW^Ctx9^r1623S8u+ zSILjma+he`rrV5K>&n9O+kuk$-Nvn&PbACGsYgkJ&mJP}a66M7qCD1gXLB_2{HgtJ zQQ_AllRU9`P3z#~`GzU{9dS-jWXL`E$&_noR_Ja*aRRao$A|<=~Cd7!lXAb|v(|U2f``2Cgu;1qoztacJN&*Ys+W8#_d`d`uza0y-=>+e2y z!DZr(LgJ1*^<0hZ;Ku5V_&(l8eY|-zb*B6`B`-*(a!(}bD8wzVtn>~qTQoH_-BPv+ zOTpM7!r1@_xb5(6Y-J8cZba>Uy5~1IeA@dC9g|aQ>c|4x@AqA_deW?u6j#{ z?2$*7<;k4@#~?2E-5#VfdT-UWcTxwhk{6~u-HxuVt`<2uJS@7CH~6*k zF8<8!($B%Hw(C&&FYvY7k(~wJFKKdXnO(6rqrK&Sfh8e99WkQESJJiRAm~6(kUn5h z)b6+7?ZxrkwC(ZBi?|XrUB6cDJ{qav@xO@Uj<@l4%9#mkl7|-H)KD3`4qa`fvq14A z`P+Ec@=gZhw z%IeRblEgo8q&r}IU3+2@!ot7yXJ;+yq=FrfsXJF(P@clk@y2NXAlinnf|p{uXqBk& z#kI95gj0Ht^?9lU%TybipTWq9;8u4KBj2|U6gnN{XxJ{i&9Eb~V&FHYh| z$x)MhP=)^Q?mols6nW@kL&{@A){1BEL`q{%n@!$WmhYe7$F7(T{z#YMqD$lg8XaU} zsUxmJ!_nD{nop1n!otG3p8aw>(7lI9Up){f1`JBgnw%vjCk!E_@s6KYM25SKtj^3s zh89J~oV=f4{YG#VdcV8ZtUEl+S+V6w`8Y= zhK8<0d~-~!HpEQ)Iyhcm^6kqjSdv#CkLf`rnPHC)w(?x3>UT;*E0h-yp)K=Fb@Q^< zp_16@{3Uj%JEfa46+UGu#Gbrh|JK;)t0NJQ1u3XR!iTyGXL-P%@VFqc>MtB>AhNi> z@eV+%p7kusgpatJ=R=JG`S4y?3bBgu+l4M$4oYS&kFNl0p#$YZJovc)qL^5O>h>$I zT^-nR7tGw}oaG%~R$gF7`)`z(*~nyJt*@8qBWAGaM@{Hp`K$qRmI+azF3bC@v&&w! z&#gJ~%Rzj1$!*V=yv-?M4)3Q;@VR&`C*P`B;RYg}Dj|e{iHT_==KZ0}udXQ?JLUXX%O!B;>;*bgcd?S< z_~3A7nKff&YkOs^f(X16R2OKUE#%DLF3~;~L?0@sKMH1u2+?UfuFb>xVVx(cS2Lix z>Wx@(YQM`H!n0W!9xb#9t_$vUrF!$-A614Nf)6k5jp3-yE<$CUvvTHcT5jGaM(5#{ zUUm23@fmm@Lw-uJZ_ng*%7-j~??o;rIrs=o#FDc-sx!s(rb~Gc!WWwHH68mSlFG`y zp<(1)D`OvRDu@o7Lnz%Ip;=7kztP3^j*twe6=@7(II zQw5UTY1nr1u6*Nu_&^Pj&YVr#sT#9d;5~q^1qFyx>s{#9QCQ)fro_QP+vJni{M*6V z-ka39& zza#5%?6tP$BtG%WZ=<21VXxn&!UuAubz;ig0AFzIuR}Dik5s{|wY3LMTbmGk==bxY z16wR!{Tb>93m5dhtck1Kqr^^vv2PH)9_xMI-4#+bwkolHFA;7re$DHw26=0lrb-jM zVF~U7k3H7b_EQS>A}6~tu~W0@NAdejuDCf`o)^2An204~=(RJSHzw>eOdLpFmQ3Ov zwrm{dLg8QuvPrQL7b6O}lTPo{kYdve`vDwhq+wO>GEP%i|(<_@R)JH9Js7a){)5$H1JQ`xN_JQEb*t@ zek-u{ym?)aykle6x1>bEv=sq;7e5Ae1`aA#Tii39uDKJDgTPZqJ?Bibmf#c9)((|vgOE&olYuC z6DANZz!u7vUEI-x+L4~_S5;f^-XV6oh6d^h!m#1aUT8P@L@?y}=<3q!{`y;Q01AEOtTo7Y1MFz=NO4M*g=EH|r3ipJb4 zqmEw<``om(wKYJv;{Fi(C3lC&=aIU#&y_dDsw=}D*OCG*2Fhd&gm~f}judTqUb}pC zAirBO9%b~bto{!7q)2~vN?j)QB%Hef19yw?SexKfTvEN)D5*f0)TEw!FF-g3x4(M{ z>{D7C#x?~|00JVTaQj_tCaP!N+zt5gG{0xoDI59#JiSO=KQs3?pqQFDN!9y;cu7PV;A*#ye=o~sXjxo+;hA-V?Xp3F&B)` zVlpM{&6@qTYXjWf1^Af$W@|88@p8mY9u78-h9F&#!}!sb((L_NuKbc4JAUt2 z`M-D}<-FzJ($v-Qt4iWY;*v?a5_ega%LSKn-tUlZPW>R7)+Z3xjj4U-(Vs5W@|bHi zVkOiHI3M~jX-e2W%0xGoYyv))F2m}3;39pJhYmu@V5fDI=~ycQo_I^#tD^J3_U|Be zZ1oxP1)+PMo}P_ygd@RryMFa8Eob(#B{_~$ySux3jw=RVC__>;as^mbzn&zi7;E|v z(f6f@_X|iz%R{$@qIFl-wBKdK<8DCQ_|ZNv*<+3j z)*@}{Jnq?Jw(R8i@9+j8k1|s1g{w&#Rd`@)ZGdx_m-vYx1`}(|3zh`m|5}siA-JVm z@U_N1UGTn?wCupq-HQ0gTGC&6J}7#ds+yWJRIUO@WS4N8Kcfebh2v9Bn7h4c60R!c zMvX6iu|72GU9WMT@cw~+Y1=W$ul||EHhQXT4jRkF;S_Ak7w5ebcha-Q=z~tx%o|#F zdVzg~p-*J_$@Ez{pC#PEkwDqCZj_z$tqJ4EfuxAp_RGQnVLG?dd$YC=ziE?n*vkTYKi}7DmsF5Mi=qzI+9@x176e--&b@5M)Bk z?5=Kpi<&IyhmIeByqZn$B0@5R!RXNv^K*@XAunVTy36}wooNPBZ2SXQO<@F3M%p`> z&7ffE-pAtweV+UnmXH(yERPQ3<;!(0k-=XBRCPi%j-$<~5?a7EKGL$!>RvZl?>l$$ zz5NlHf|R7>{?%FYXU!Jyg>dGsVFo2C*|I_cP4P5SKBzkHk{JkbM~-EfEW^*cBLF!( zKRrF&5j>5&@wzO5TVxv5dUn`+Mu9jfeHdHa1R(z)*ia4CrOPea!sGhVBn;3SvhtK2sp|MRq5UkZ2}m>KtUz#Ax+_apGASbw3mg& z>=?;U^Pzzu6gfG$lUsi=uG!03x0KAx%=tO;yGb#tIctU;<=o@6NxlM)an}LZobiu- zHdA@M1#A-yp$$L!()JD#5)ydTGNHcrITKUNxi1Z`tq~!GYlm{8!kH-vepGy)c?*70 zkLsZ{g?u21(&qfghj3|=pmSqENK$r~!=!%&z*QX9^qxD^fbAQ_H+xLXHydcl(zzhF#dGzI}R@RHz2OU#s;?5t}KgZXvg-T+zxOgm69&#x!L}fI6HS1l% z6xI+ZZK%&OT|87ST-pRtbow!>O=^UMqwiiRlA-y&Em=cG!l&=e7Xo=VHQ*eZ3=@E1 zGJhs3wig=3#ERc`O(rJ(eq07+`0P~c0SCEk2G6-qPFADwI-u^mt*xyn8c)}I&Y4;( z5xHngEixC*QQ&4I27{F$)64yh2!iAkh{N9vD4Cnjya3BV0#esW|6GH4gd8tGn3#$( z8Bdti=;24R{7Nxr*EgYC5J$4zot6E&+ ztC9rYdiTEzGox;d4o+Qv`N^5kMSY_};~f&Q5KOE6V#m8pgSnIv_VNfNKugWa0BJ>K2i z+{_RCHA5?FPLvEOpuBkYA)JZu9e!%1^kEiZdX@%=(YDWh?vD%29^2+m_YW6`SXt%B zhuP`09)vl~97sm}y!DnKUHj{U+761I{?1kbvlVp$wU{1j#~PBS)6>%_9F(}n4pjKs z`W~48@I|9b)JKoS`XuS}y_5(9pB?ea1vfI>KCE(@AzfQnC!x=I`Q5#4qOeLExIIDZ zkj;6}wkTvghy-88z%z=Jv5QbQW!>`B4^}@6C5IF1#ft%x?90(Ne8@yHRp>K2+!1hr>rj|%9uooMnHIr2o&hO8bv1K7%r zcN9&yMjAe=z_l;;_1P9cEUpBonlI$fqUE;>mT1cv7~{hp0%RFuD_qW?k2zN-5waNN zIu6zUQL*{V*r~o&>KzJ>gGI@(+TxVP9gVl`yBK!)w#pM9GhimJ(`8xjMpi#Pv6JiU zX3Ab&E_X5{dOz3UEzg-uzb=li^qGEUFO^FbQ9OFW^VUU%4ef8){`L{rwPwD$m*^IF zI)15M^gOJ!xk83yFqk{6E&n*g(Z?eu^6f-U{@Z2@;LJ+yI_vY%32JV<%i2C)U&qzx zu$SFl2Aq!#GV(m?CfU)cl?u^QWdO0Lwfizqt6z+LrtQ1rf}K=P8ud8bUW}%JMXMQ# zkZ){r_#5fLuRHJI$Pr&v^sS#3EZ{lE`^tpcgj!dBWt~$GVNZKjm+sH1v~Ngj0rvZwFSeY`yQPop%Dt{=5#Xjpp!wY7Ft~O z;@)^*!$@|HW)xxbsH$|JdMRRxyOhpIR~A>IrRZ9=6o zhw%Q9cUzu(5CILh+C+K*lhI6$17(6W!+0X4jXUAqErqS{v+wCL>;-8PsbY>1_T|sN zCa$*8T2MZmrw(HA^{ycWv*)?B;9WJ}uPW6L2{#X6AqalBl#$H(C2gl=e5Pa8T~ zeAPx0&;{>3tZ6dIvKfj#^onBB1))uft_%@Pilyi^LERA_#Frwe4lgFX7G2Dnx3#}B zRoU5q{yLg)Hs7*AF2_y3!-iJu_4Q%-iaXrtkjbaB$?8+30@}XJH5YTQYPFxXqWbHy zqI%-PCU`IGOW+7^T15*>o-i)pL^MCM{SnYkvaWo|ZMtt)zk#ch?8Ke2+o;v=xr5=3 zK}2L$(Y=JWo-PNVXrzS@YlFGedd`pc=gD!OO$Eru+9VY;s{rjy7-*ZPAx@sS5^U0~ z)vQtIpejcP+4|Av!OqUEUJ-u*YDel4^|Xvxw=F+L=TapR|Mz$L(Qlc zp9BS2_i|pi`?-ob_ePf8U~_QH1W01OT5!5)awbYu-{F=W$xp02lx4j;v*u*u3Y)14zpWp*ALd_tXlI0zExw?yC zfFWr!U>;4>3GIbyI0it<=pR$yrEwaalaH+7OZMj4|sVE{Y*cxkIP9^*)F zD?L$RnnA(W1eRkHygoyakYh?)&uJ9~^9PCZ7#pX|CNis<7!R^H?k7m?7{J3Mg1I zgSu-?s(SSo6Ry!D+>;wPvJMG3(<}bPcKf}>e0k|HQ78+=>okka1j~TdgUfJ)_MT?h zXI3)F7S>uujLcZ|s=c&AZLYux$crdB(Qd({W%$XO?J+qj9bBWP{JW)E8(Zb*pCLC) z_*RmvgB$v`8m};3R}7U)9o^>FS+?0-8M{2Q*P_cucLZNh2sKQQ%|+c*&()P{m~TW& zODFwS@j6{>*NBd>ECfDHYAC*uG4*T9Q&qJa!ErR(*y7=$lOi5Hr@-UZ5@S|7QO#+f z7y5TEK+t94rP^sZh;IctxKN)*ZZSQ8C#^3SotI}DLc`Xe{cwfIpXq0&(_JZ{*p*cr z>~G3{Uir*7vFze+PWdbx)|jemFIJ#0H(4SJ;)D{QJB8axXYH~>gWjl*A~2gEI9>T( z(Y8{_QN0ux){N zBL3%MhwZt>_U9Qi&U`{@Y|EePDeqxG+(p; zBP|^rL!NnwD4q5F0{{5eCET1Qjf67Z@^AK+LiB%_z8!hIweDqXT3apBC3Ge4$3%7Z! zdev7`H*_Qo4h?xkMI8skMq#M|u+w?7^yueVOb@ous3B-T$_LIoqm=kv$^fDHEXg4i zEilv7a&42v7Z9E^x^EySIw0Rk#y6wzvPi)C)rjdi^;prfF~i%2BdT%l zcmGJbNR%#!`{HW4$|X1XiMRW2%{#rGr*MC&M>eT>>fbwQT*Kuc?`WL*wy@uP_7d&y z#!Pt`R|;|RBx;h_ghJN5^Z@{L;bTE_fNx1PDGddA(uu6*&6vNm@pxV$sw8Z4@8>(C*lI3UGPT?B&!AgsGtt`L`e?Dkh1p zuAh-ScBgzB9G@wR^f18#Tf;cZp}`1Kdi=IS`T@WGI-*dy<*(mQr>xM%dXs?2UT*q(@_2cdiu!uKR zwj1tn7ZEgHK6_nLe<%*bh+q=7K_jrQ^ zrB8S~vQD-jCK-eLw*D)=+Wg{;1=ws&{$yKgjrib6P14brG7k1KfUFgviD5w(M};`X z4}8f%Db(lHA?_4w$w+^m?&)#p{2S3e=z~-4|^qf zbdXac7pLJX)MGxsu@MIcad;$n;vl>1PKv@ooDg9rm)MA#?Y2anCTq)Qk50YNhvUMU z0}%NOWuQVaq@0tU7A%yc5mfqRc_--1RlkZ~X{Zf+Lt(l&&b0Sb@lxcC^vAR2>d8&K zEP{CuPDRd8ifo=NvIMuQL*f+F1YumZ%U$-*U9$BXK1HJ&1>Oes{tXqyt6hq<6O94Sq zMf~|+*yjaeiCTHf8B;$pAFl2e?Q}$;1xgh64%OtIg?zv8K=xLulJl#(QIYF6`Q&c;t=DJV!&qI*^y zq~~4Z>7p&=*NB3{msTIg$#<+!I={x6FSE%D^oKGdKfv`uW;dU7N2G|@nwfsz`SEP2_`(%& zCeuEt!=s}}_`=}BzJ}1L`cINc_)!o!xPS)Hn`zt#fz+z&q?oaK+Hy$!x6c^G9wx!>?I@MVMkpGy|y@Ml3T= zR9f0UD4f8|lt7IN-{;xq)xoVsO8tP$M`ZNXT)mdUHUmUJw@R^Jv;B2j(UUsMO?Uk9 zjnc{vhzh&_OR^Ba1h31C@!M1?=)MP`B`?P0UI&fD4#lGhg(pIP0p zCrxvx$2D6zmV7^M)?LJ0xgHVZX%4$F@~CPpuop5$xxhF3 zD{CNW4w3^IS0r5cj>4}eX)t>=H)o?cFKVOxHN?~8YEl!=n?SOnb*;FN+%G@L4O`7y zl!enjDO_mXY(Js7aMaHJYv|$X3u&ypUY}IpOcsJCNg(f(VB_xa`A#bVVoaFI;;DrG z{?JXtjt0+GOtR;er+ijRR?mfC+4`^+ZI}-t<3t0VnLk_Sw+CvcB1xI3^P*Lh{4=ga z?XdTBa_RSpE!Zl=E{33w#9GEV`#MdgS0ZHa?K&*0*RWV4pp zg2vYL-XKBz;d|CGTbz?u9{ptDvmNT|ZJ_>IAGU0NySmt*8n6rMTJl+Erksg> z8Q^InYF%WSz5vI*pJ{;kR7m_YL`WO!UMJ)Dvtx=@G;3&hc=y4<7B;KuJR?vK{ya4$ zm#5DYBv>%3kC|CnyDvw3PPgr?y1gRWCVAQ&9Uc%l7qWg8T~JOuDrm6uy)*K?gFB6m zej85E$D@z$}g`|IAB ze~syy+XL~&=QuksB#>F%jICP=+e{J2MjWo$P}bKABOee<(qJudM@o34FYm9#VFBMB zFNs})`gx=GWUyK~n0V~gLE%`}NG~A$uW!^sbhs7^3rnzMTA$g|0cx?5UWh zIb;a_T}&wRGAcmUNCduSA^+mL!@KxT@67#GR8>nI9UXaf{My520DB2<3q&$hOUywL zJM2lf1JV95=*+qFdlx2opxTkhTI%HM&?89qbB$c~!k-^$mPblk&|!NX#>aV+pLPtq z-Rwc8tDv37oBHC6!uP@Ykwn4LJXF|V%)125q7RBPiJzNX={?J1^-};vhi&X(23@b( zAnm_N(5(Q62ZK9NPLj%Ag({`f_7hQzH~MXuN!*z>UruBjLn33Q`F{mY$o5lp4Lr|z)bG6b*U=xagL zn$e4I4j1Rsmx;q)6+y;o?*mfbhbzI+;u_6QH0ii^zQa_h5J+EE((fq~5F}dC;gTVe zr1e`U5Id}+eW#@|>?OWux3ZlA)KiMlSO`{hE)%hz-7>g$a%B!`nDiO1QNXM>c`A*e z0^>q|72BOurd{mj{7ViySvZ$Ut><#Sy5KoHI8f-`5BEBS;n$Qeqk8TY8hzTq4QZM` z=7u5$lF)~VJIf;qbq(F`B)YP!qaUdd4feMe?T6&i1U)HvFJG{~m$8{OhB&@_w8{sS zD2ih|L{$=lwymUkBtklx^HlSVx8hvz@f3x*5*HKVBoORub@nYWzSG@z{g?tWeFSv) zObT}zK!C1J6$Z4=vE%F}X^0_!+Q9w+nR}>bBR#&GM;q__w_gLssswF5(Km1F2+G11 zdcEwsd{ z!&DMUjGm|keLg6!UPs8)U@}__Y8u8ImhNz05Aamu=5wIoA@Iuej zGFoh6dO-8VWA4P)=P>p8HPE7hrX~zZw z^#LX0vW;(66jR0kwq@K2HG&_76eY>kEyz|50eG46r}pRVA0SNd-pc(l$3|RYhYe<2%$r$;BMd5i!8yV;i8i6mEQ2P<-EVXI)fu2nrP>Hw#cnR3$ z_g&`?z11Al74hZqi}Kwv87?KPqnB(w>P%)R1m{kcpYn)MgYqpg(|mdW^G5J&6e;Cq zIy$(jsp+H;wRRcFARv5B4Q2Z%flTgRWMm{gMAh)uI8F(OG)W-Rd@F!y1Bw8Z*gUb6 zbi&hiybp0p_gGWQzVXC06dhyqGW1GlDR2R1&CJ%<^4hzfKQ@HTU-{bYtQf{^f%UT> zL(2@W*je9z+u#sU(F(3~I#h_p^tE>N2A*~IUE){bN&LW+p^^InuprzzN^k4n1qBn) z&8-)rdMc0%rxd=eTa9T;3588#_xtA`+)Nsz<0bi<&lPE$&hD#a!ui`UG439UbZeOixeGlPls* z40cIvL%q1*FbHE74huo1qAv@E-)_sc{Q6#1_^L7)J@l8xtRfBDU*}))6#%hqdWVmW zCifMfFTrL!kc?qe6%q7~48yeYN15QsUXZ>~nfrAqSD!XH8kF#epI$qZwi1&1bBw~v z#?y0qhs5*{aOK-FHsuApisE>CVUzgNZ+ay|I&#VnKPy*+$%WliqQDEhxUc}u8=RjD z;ZcQ~WtA$c#0ZELiSK5A@L(`(-8ORL!;?zlo=^JwFq0_Ad+Lml4rEkzC$|l$Z_<0wtOoMM z`pDDKST_oj(}C&~I7vaFovW)Fi5y+_Gpj*+(_FhY3UT82xO0+>J_Y1vvvh`ks>fQS zm%mnIG->n&v_ngj?1JC)gCqmd9I3K+gmV%aM9%X|PAo@UP0x{v|6foX{ zL_d@BMw|f9z*`CdO@p|I40h-c!Yi4(t$V9Au@w)jE~Iugl7Vm;^iW)|A*5j|Hnnp5 z3B5Z0U6M-jTHJwA%xd6mzjTibIOro3mX!1bEpyK3n5eQs(qdG|dip)G<2#7bUhLK$ zVj_}&j4nsqb^189K3FK~C?5@Q(=(4X`dPA*aWSfI4smjft^6_dD&Id>REC7~+@V3#zRl zTm=zM3=u-=2P`@lq*1tK^)ydV6mD=nd9ACYl3DiRS?ze1{pp}r@W^_WVD?Jur?6^` zk(Aa0s5|Jk37*+AAIy1~h8u_5T!J33tr#O)mfEctTlvsm2Tsp5lKEnj_tm7=qkD7_ zC!Xa-f&F_Yw=z5eDmOm=0t8G0*k!VCPjA7^3|<#w(My0{f9kR3FtbNlmWP2ozFxz& zEBh(f8aL;By63f0MQHSRtq8c!$IM(6i#)dq5bJRvGiuWqQfLk+>^zDxArf5)j_sjO_i!!C8-+bq z*CN?3NkLkwr;#ji%G*GQa6Zjv#6Kv5J^-g7j^#GqlE{7sto+iwR&((>d$Yy#qX|H4 zCFGQ^A9)~lu%a$Ri(QRFQZ?el;o9PFHtQQ2D1io%ibweAYxh83|K9H2o`SP>C6b{} z1w=ck-GrKJ<;+hHqv8c-H$YD_SIk+m^=?M}IWb98l>T!orpFvG&~bFIK~=SCGHB}= z?$K?xGx>4A`>R!4cK+7>XcbK72>wWuEBrD@EI;kS&(AJ$DyFLX`jVT9#^zUdC+|x> zCahOxC{`-auMb^l`%#m>)PUF-t*#btDJ(2xCl0R$%{_c>IZ*(Jh1_o64n-f9wpMaV z44Q!wXpZ}nbdPm?jNU~S5B80$R!7kJ77W0wh>WzfO;is{t2*=-^(-Yxycj=u$Jy%- z%|*^2`NxAd6sqq(K%2cncjpW(W`fQ#@Cux@n|;u_PQ!vdr*iNp=?1Xp+bME*fM6S?3 zKFh1TUSvdA1t`6r33PVf>eQgZpV7xugeAOt^5#;Lrjm3Kgfqqu^d(S^FZ;8Jf51FTnA83IUey4hPKsU@%4ADdp_P`~jYZ+`&SN3T)2X)4%2VaDMs(|ee4K|o_SK^All6Anwi*Kp<@V2e zs#;w?@%7U8f|DFGri97zL5HdMpuit%L_4!*2nl$yheDj(2kSzqDv0UwWq>{JzBLBV z`J`e>?$sQlpy~_z>H^UJ#*1N60I2stkEU~@P{2F6@jrKure$HdN#FOFpqun5==PXX zevVwJg-z?0Xo8~@j02m6_*kRL2B)W5c{HZxuCA_o0wtwIWFRWAmgdHvlUeyo{3M-o zU#8^Vw!>uQl`8HTf|C-(AN8K=@7P+upX6O#JVyz)LvQnCzze($LyMvw^^o(ORc?ME zaJ;Hip)8g;{{cUC_~dS@Nrm_3p6&C4Dc1RnS9jMj%p{%D@|v)>FF5R~t6z9T^@v!f zuB3giT6qu)45uUVf}oJ;CcWP#)Lv*}s^rBp*)FtD7jehNb?WOiuL9XO2tE>#u0IE8 z*nW1X*ag(5t2Vnrut%pi5E=Ju$^*6K`u|5QSN;!W_lAcNBl}KBhGffR2~&&+HPukI zl1Ma2Su!EJ@d`zWLd>XC3}Yw6ScWWRtt44yC~02HjEUF2eUEzIKjHiN%umnfnRA}| zJm%Oj2N^U}bxIt%CKO(a-pZA=+&-m)#I|@p-zwi{Mn!)eq)=Qt-xJIV6{Th>L zw|dW55IV}xube4e&!27v1ZluGYeOKB&&{xtBu$)_ns7Yy%D6_{!$fgpmM?d8G}dx4aoMZvbM*M z9}nB_wbatvnvwAM;Ohf$Lf&H=TX~<<$XWN~njP~ss-YFQZ;Iv=IUY_@tG2@F@@yd` z*wW_z)Gg^UTklWPXfY;kjPZub%Y1F08hg^`PJk6xGz`Ys`?wkuSw!D4Od~1KRTM%hc-7e5i))Z0xzMr?_?7`WL@uz_!w4F@R zyDjKgkTQt+GJFpv_jM)Q%XLgKeYuCedt;Bk#Fnp${~rH~1$HgS8o@Vcd%rWJev`Sm zxyvS|n`8aR<^J944JYjZq4*B)*<|MpLIgHS1dz#(nDW0v(`YmtH#fJwT_{k{Fsv2! z?nNn?+IGcYfzTMR?{szDo3$nV8(}z#4jD9O8qcWUssTjEQ5BAS%2)4bPQRp{_8A%6 zM0VMA3AmPLe&hSQIbHgnyI*!x6@NO?)`XNbMr1wl=nZ!T)ETF)?i2DLhTy0a4dX4K z95p!r&kSJNRrRoTKC5#YKW(_qb$5KQaHg7;uiQRd#`Sm0bhz|kfDEwy6ug5|4>{$O z;LpTTK+kOuRLA!ub-UsKKdkvS-!)leROb%g$$qhp3)2_a8&MHcYs_5V0&E!tF#%M{ zwV<8730&3Ul~9mI-48|yz6HYvz5qys0SGfZ&~2*-TUK6lzulrBW3&&r)g?a;Tr7EQ z36IBn23PH?4!H(IfBSg}k=@AP(z*30V?TO*c3rZEPUcYKT+=~959$?J%I-tF2t{ls z-V{IKb9n5%e5|@7ToXIX`Le)U_A|Rh=4XTIzds-1SLgZj|~riYKlf3Q}kTjnM=C2iPA0L#h^J7L)J_Gka@}rF`~n zpDWUlP{YS-?L@m4fGr*8 z(s2kV>(u;F`v_a5wU=atlOMW4xuj4$zhXV?jIaifUA>*Ud?7h_&^?GNGHaZ^(X0vB zbl?L;s~E-RBzm;QxbJ$WM*a4L5dYCleD@sy2pO8%BQPH}(twT^lE5WvXlMtGqi} zlHT^+T^qbhz44HM-pz+MMP-sQJgPWPWoKtIeChS8;x8VPDQ3pj?!oiHH;8X02&vO zwK$ekI?KLTKITS3wp8KE@jy!m)*$UGrWbj>gmaTUK0aQ#^yE+O*{%fKBFM|NYYLAS z_-*cbEBz8igxpH5d`RQoz>QXWe<^a*1qkl0jfl)UIBO*>y^O9+0MYu9rzsuRN#s(X zostG}Fmy6)U?6Y~4DHaK+;gPJWl)r4hAKQ$X+7J@O}JK36mk>aQQ8ruUiH=mI~}vZ zaW<^`&(}4ft0XCRpo4>vSRRdgS#EUnDTHG<8yC+7xR~;iz1KS>QWuO6Bl&!bMss4o z1s^Pbr;r@Q^FaAZ=(mBw^M1Hqnx&lr_PpE>AXNGRnp=Nh*~F)SAfmp{Fpd)Die%7X z^}hA`z;AAN`@rD{js726Vf8!7U|o@-3NsCK@OdhY2UvLX5|{(yt(P*0&OZeLMIkg^ z$w4RCz#Jf9pTQ@J>KS)0Z`Pbw-QDRR4LTl&NjXd=(^(zP*QpnlQ(B7fiYY(*S3dij z);6eU-3yUrbL*uq&eVB|tmYcicl7$k zSuSJz?i$bfOw7bjqUb9}Ni{V!FWx8sIT8oa<>#Bh_T}H_b)1Qw-DhMJr?rRAP(e%~ zp2InaaQ`kG7IVPv@Lkz21fW}Ef+GTKzo`v_N|}UD<8A%WBUbLkA2aSm72{pQZH?CA zr0o3vKAkXao78cpZ^0K(6B^RGJ%Mt76+*|DXSTGv8)jQ=zd^?h!u+pi>Su#((R5OJ zEThL`j7;8kT(bBUa=Dx|vJ?9`DjwZ|0SbS?O)3!gj--``UC1n>$pY`&4-%Q^y!4%`tdqlfP12~p0;g?ZH@I0msE+RCF{7G*5?NDq|H>>@ZX1Qkwt}6rKuAS<+?-&2iinmLuX$ggS6s zkIvEGHu)J68CEzjJmHj}T;N0(>|!t376k=nC@D;f$g~9%tmCgAsZXbrH?_5X%01mw z{#B^%Vln*@V-=g>eP0{J6`rKO^f-TT#?!lMI9<5K#WjS7w9q`Se_3S3193-4HPqLk z_~N24bCCx5hhxT#xV$9aq#b@TwT@YAysPkn_j0;U_^8Fl?Q%KU-oQJcpLSPzLUO#@ ztw~)yt#h!nwW9pK<%G<*kk7`HPt`>xOVE4OE$NpAb;u%ARl9wKriTd&7#adPjpAbw zBCKgDaGJ{zhfk;S@3Ua%`+LtElQGmc{b~*-Xd&78{nH$fa{S$+v{RG)RJS|$2`Z^` zpMUP?30X>gyl^DS$jIn}>A~PQ;YM@qG+#xmVyvG5q381Qw1p80g%UGc*^}Y-Axd|e z`m?;e+;L1_8O{B$CBW5~of+^fxk|jhWc2D;sOY9xHdM|DS5%mYV3hS_)ffr*h{9 z^e}TbsxF=g%lV)f%i}dSvYL{Uld~Lnp$iJo$r<+~liV;R2+1wUL{?6&zVT~M=LED4M-h_jdfMb)_GK}zODIw>!n8}5-gFF8H~_Hn_%EDJ?+v_QttIgOn=zS z;+o8ujxw5Ws;YDTSFR`Ux8 zYzMCdS^e09f_H>nAX{13p^1h_V>H;6=i%Z1WZ>Ox zhZerQi$9`$KJxFZsoY0dSy`bHUmfU@_NzYIF^gyRqjd!M5ue_^C-nTpiHGrQUe++c zgukvwgRL-imMg%@#~EGT*I@~hRkJkZ4xj#vj@|XZ)bN^`^3EI?yA|xUX8j{0pCvo_ zKQawu9frl@TWwCJD$5+xk~qfQNi8qAVR$*QzeLZ(R(PiMzyC?`O@>ufX() zg*fCPKDh()qOOn>WwcIoy)R^nhc570HGOx`aN19I!IqoPt@7pIk)+ zx-`{exa+1#EFYxx^)VD$d3fE(wzlcENYnA*HTZZq*f0Cf|Ze zk7#VRH~4y6>(6x+PMNm73Vj?$VZV6IhN *`{3,}\s*(\w+\s*,?\s*)+.*?)$' + close: '^( *`{3,})$' + - pyspelling.filters.markdown: + markdown_extensions: + - pymdownx.superfences: + - pyspelling.filters.html: + comments: false + ignores: + - code + - pre + sources: + - 'docs/*.md' + - 'docs/**/*.md' + default_encoding: utf-8 \ No newline at end of file diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 00000000..da0c2b7f --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,17 @@ +# Summary + +[Sway Standards](./index.md) + +- [SRC-2: Inline Documentation](./src-2-inline-documentation.md) +- [SRC-3: Minting and Burning](./src-3-minting-and-burning.md) +- [SRC-5: Ownership](./src-5-ownership.md) +- [SRC-6: Vault](./src-6-vault.md) +- [SRC-7: Asset Metadata](./src-7-asset-metadata.md) +- [SRC-8: Bridged Asset](./src-8-bridged-asset.md) +- [SRC-9: Metadata Keys](./src-9-metadata-keys.md) +- [SRC-10: Native Bridge](./src-10-native-bridge.md) +- [SRC-11: Security Information](./src-11-security-information.md) +- [SRC-12: Contract Factory](./src-12-contract-factory.md) +- [SRC-13: Soulbound Address](./src-13-soulbound-address.md) +- [SRC-14: Simple Upgradeable Contract](./src-14-simple-upgradeable-proxies.md) +- [SRC-20: Native Asset](./src-20-native-asset.md) diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..d9c5f3ef --- /dev/null +++ b/docs/index.md @@ -0,0 +1,60 @@ +# Sway Standards + +The purpose of the Sway Standards [repository](https://github.com/FuelLabs/sway-standards) is to contain standards for the Sway Language which users can import and use. + +Standards in this repository may be in various stages of development. Use of draft standards and feedback on the proposed standards is encouraged. To use a draft, search for a standard using the appropriate GitHub label and implement the standard ABI into your contract. + +If you don't find what you're looking for, feel free to create an issue and propose a new standard! + +> **Note** +> All standards currently use `forc v0.60.0`. + +## Using a standard + +To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: + +```toml +standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.4.4" } +``` + +> **NOTE:** +> Be sure to set the tag to the latest release. + +You may then import your desired standard in your Sway Smart Contract as so: + +```sway +use standards::::; +``` + +For example, to import the SRC-20 Native Asset Standard use the following statement in your Sway Smart Contract file: + +```sway +use standards::src20::SRC20; +``` + +## Standards + +### Native Assets + +- [SRC-20; Native Asset Standard](./SRCs/src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./SRCs/src-3.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./SRCs/src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./SRCs/src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./SRCs/src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. + +### Access Control + +- [SRC-5; Ownership Standard](./SRCs/src-5.md) is used to restrict function calls to admin users in contracts. + +### Contracts + +- [SRC-12; Contract Factory](./SRCs/src-12.md) defines the implementation of a standard API for contract factories. + +### Bridge + +- [SRC-8; Bridged Asset](./SRCs/src-8.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./SRCs/src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. + +### Documentation + +- [SRC-2; Inline Documentation](./SRCs/src-2.md) defines how to document your Sway files. diff --git a/docs/spell-check-custom-words.txt b/docs/spell-check-custom-words.txt new file mode 100644 index 00000000..818c9a71 --- /dev/null +++ b/docs/spell-check-custom-words.txt @@ -0,0 +1,213 @@ +ABI +ABIs +ASM +IDE +IDEs +LSP +namespace +ALU +APIs +JSON +BrowserStack +CLI +Deserialization +deserializing +DApp +intrinsics +Intrinsics +workspace +workspaces +Workspaces +neovim +EVM +EVM's +EOA +ERC +Ethereum +Ethereum's +FVM +FuelVM +Fuelup +Github +GraphQL +Infura +JSON +LSP +Merkle +PoA +PoS +PoW +RPC +SDK +SDK's +SDKs +SauceLabs +Sepolia +Structs +Sway +TAI +TODO +TypeScript +UTF +UTXO +UTXOs +Utils +VM +VSCode +OSS +Linux +abigen +args +async +backend +backtraces +blockchain +blockchain's +breakpoint +breakpoints +bytecode +codespace +codespaces +config +cryptographic +customizable +customizations +dapp +dev +dropdown +enum +enums +env +forc +frontend +fuelup +fullstack +graphQL +graphql +http +https +halfword +js +localhost +mainnet +mempool +merkle +monorepo +monorepos +natively +npm +nvm +onboarding +params +pnpm +prerelease +queryable +quickstart +relayer +relayers +repo +repos +runnable +stateful +struct +structs +struct's +testnet +testnets +toolchain +toolchains +urql +validator +validators +superABI +superABIs +SuperABIs +supertraits +compositional +typeclass +turbofish +DSL +TOML +IPFS +Bitwise +Bitwise +runtime +runtimes +formatter +deployable +Utils +ETH +initializer +initializers +destructuring +instantiation +VMs +superset +CEI +pre +entrancy +interoperable +blockchains +keccak +SHA +UI +backtrace +Collateralized +collateralized +submodule +DEX +TypeChain +inlines +inlining +MiB +FuelVM's +deterministically +CLI +VS +GraphViz +DOT +DCA +AST +GitHub +decrypt +subcommand +subcommands +Subcommands +supertrait +supertraits +Supertraits +incrementor +monomorphization +Booleans +boolean +Orchestrator +orchestrator +growable +arity +tuple's +unary +SRC +DEX +SubId +upgradeable +Upgradeable +transpiler +Pausable +Libs +Reentrancy +reentrancy +mathematic +Soulbound +NFTs +NFT +dApps +fungible +TicTacToe +DAO +Timelock +transpiler +namespacing +unsafety +prioritizations +polymorphism +ContractId \ No newline at end of file diff --git a/SRCs/src-10.md b/docs/src-10-native-bridge.md similarity index 91% rename from SRCs/src-10.md rename to docs/src-10-native-bridge.md index c8878866..c82a2e6f 100644 --- a/SRCs/src-10.md +++ b/docs/src-10-native-bridge.md @@ -1,25 +1,18 @@ -

- - - SRC-10 logo - -

- -# Abstract +# SRC-10: Native Bridge The following standard allows for the implementation of a standard API for Native Bridges using the Sway Language. The standardized design has the bridge contract send a message to the origin chain to register which token it accepts to prevent a loss of funds. -# Motivation +## Motivation -A standard interface for bridges intends to provide a safe and efficient bridge between the settlement or canonical chain and the Fuel Network. +A standard interface for bridges intends to provide a safe and efficient bridge between the settlement or canonical chain and the Fuel Network. -# Prior Art +## Prior Art The standard is centered on Fuel’s [Bridge Architecture](https://github.com/FuelLabs/fuel-bridge/blob/main/docs/ARCHITECTURE.md). Fuel's bridge system is built on a message protocol that allows to send (and receive) messages between entities located in two different blockchains. -The following standard takes reference from the [FungibleBridge](https://github.com/FuelLabs/fuel-bridge/blob/3971081850e7961d9b649edda4cad8a848ee248e/packages/fungible-token/bridge-fungible-token/src/interface.sw#L22) ABI defined in the fuel-bridge repository. +The following standard takes reference from the [FungibleBridge](https://github.com/FuelLabs/fuel-bridge/blob/3971081850e7961d9b649edda4cad8a848ee248e/packages/fungible-token/bridge-fungible-token/src/interface.sw#L22) ABI defined in the fuel-bridge repository. -# Specification +## Specification The following functions MUST be implemented to follow the SRC-10; Native Bridge Standard: @@ -29,8 +22,8 @@ The following functions MUST be implemented to follow the SRC-10; Native Bridge The `process_message()` function accepts incoming deposit messages from the canonical chain and issues the corresponding bridged asset. -- This function MUST parse a message at the given `message_index` index. -- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8.md). +- This function MUST parse a message at the given `message_index` index. +- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8.md). - This function SHALL issue a refund if there is an error in the bridging process. ### - `fn withdraw(to_address: b256)` @@ -43,7 +36,7 @@ The `withdraw()` function accepts and burns a bridged Native Asset on Fuel and s ### - `fn claim_refund(to_address: b256, token_address: b256, token_id: b256, gateway_contract: b256)` -The `claim_refund()` function is called if something goes wrong in the bridging process and an error occurs. It sends a message to the `gateway_contract` contract on the canonical chain to release the `token_address` token with token id `token_id` to the `to_address` address. +The `claim_refund()` function is called if something goes wrong in the bridging process and an error occurs. It sends a message to the `gateway_contract` contract on the canonical chain to release the `token_address` token with token id `token_id` to the `to_address` address. - This function SHALL send a message to the `gateway_contract` contract to release the `token_address` token with id `token_id` to the `to_address` address on the canonical chain. - This function MUST ensure a refund was issued. @@ -108,9 +101,9 @@ The `decimals` field MUST represent the bridged token's decimals on the canonica The `deposit_type` field MUST represent the type of bridge deposit made on the canonical chain. -#### Example +#### Example Deposit Message -```sway +```sway pub struct DepositMessage { pub amount: b256, pub from: b256, @@ -142,9 +135,9 @@ The `name` field MUST represent the bridged token's name field on the canonical The `symbol` field MUST represent the bridged token's symbol field on the canonical chain. -### Example +### Example Metadata Message -```sway +```sway pub struct MetadataMessage { pub token_address: b256, pub token_id: b256, @@ -155,17 +148,17 @@ pub struct MetadataMessage { ## Required Standards -Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./src-8.md) for all bridged assets. +Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./src-8.md) for all bridged assets. -# Rationale +## Rationale -The SRC-10; Native Bridge Standard is designed to standardize the native bridge interface between all Fuel instances. +The SRC-10; Native Bridge Standard is designed to standardize the native bridge interface between all Fuel instances. -# Backwards Compatibility +## Backwards Compatibility This standard is compatible with the SRC-20 and SRC-8 standards. -# Example ABI +## Example ABI ```sway abi SRC10 { @@ -173,4 +166,4 @@ abi SRC10 { fn withdraw(to_address: b256); fn claim_refund(to_address: b256, token_address: b256, token_id: b256, gateway_contract: b256); } -``` \ No newline at end of file +``` diff --git a/SRCs/src-11.md b/docs/src-11-security-information.md similarity index 80% rename from SRCs/src-11.md rename to docs/src-11-security-information.md index 1bf7a51c..8e29b9bd 100644 --- a/SRCs/src-11.md +++ b/docs/src-11-security-information.md @@ -1,27 +1,20 @@ -

- - - SRC-11 logo - -

- -# Abstract +# SRC-11: Security Information The following standard allows for contract creators to make communication information readily available to everyone, with the primary purpose of allowing white hat hackers to coordinate a bug-fix or securing of funds. -# Motivation +## Motivation White hat hackers may find bugs or exploits in contracts that they want to report to the project for safeguarding of funds. It is not immediately obvious from a `ContractId`, who the right person to contact is. This standard aims to make the process of bug reporting as smooth as possible. -# Prior Art +## Prior Art The [security.txt](https://github.com/neodyme-labs/solana-security-txt) library for Solana has explored this idea. This standard takes inspiration from the library, with some changes. -# Specification +## Specification -## Security Information Type +### Security Information Type -The following describes the `SecurityInformation` type. +The following describes the `SecurityInformation` type. - The struct MAY contain `None` for `Option` type fields, if they are deemed unnecessary. - The struct MUST NOT contain empty `String` or `Vec` fields. @@ -30,60 +23,60 @@ The following describes the `SecurityInformation` type. - The struct MUST contain at least one item in the `preferred_languages` field's `Vec`, if it is not `None`. Furthermore, the string should only contain the [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) language code and nothing else. - The struct MUST contain at least one item in the `contact_information` field's `Vec`. Furthermore, the string should follow the following format `:`. Where `contact_type` describes the method of contact (eg. `email` or `discord`) and `contact_information` describes the information needed to contact (eg. `example@example.com` or `@EXAMPLE`). -### `name: String` +#### `name: String` The name of the project that the contract is associated with. -### `project_url: Option` +#### `project_url: Option` The website URL of the project that the contract is associated with. -### `contact_information: Vec` +#### `contact_information: Vec` A list of contact information to contact developers of the project. Should be in the format `:`. You should include contact types that will not change over time. -### `policy: String` +#### `policy: String` Text describing the project's security policy, or a link to it. This should describe what kind of bounties your project offers and the terms under which you offer them. -### `preferred_languages: Option>` +#### `preferred_languages: Option>` -A list of preferred languages [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes). +A list of preferred languages [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes). If the field is not `None`, it MUST contain at least one item. -### `encryption: Option` +#### `encryption: Option` A PGP public key block (or similar) or a link to one. -### `source_code: Option` +#### `source_code: Option` A URL to the project's source code. -### `source_release: Option` +#### `source_release: Option` The release identifier of this build, ideally corresponding to a tag on git that can be rebuilt to reproduce the same binary. 3rd party build verification tools will use this tag to identify a matching github release. -### `source_revision: Option` +#### `source_revision: Option` The revision identifier of this build, usually a git commit hash that can be rebuilt to reproduce the same binary. 3rd party build verification tools will use this tag to identify a matching github release. -### `auditors: Option>` +#### `auditors: Option>` A list of people or entities that audited this smart contract, or links to pages where audit reports are hosted. Note that this field is self-reported by the author of the program and might not be accurate. -### `acknowledgments: Option` +#### `acknowledgments: Option` Text containing acknowledgments to security researchers who have previously found vulnerabilities in the project, or a link to it. -### `additional_information: Option` +#### `additional_information: Option` Text containing any additional information you want to provide, or a link to it. -## Required Functions +### Required Functions The following function MUST be implemented to follow the SRC-11 standard. -### `fn security_information() -> SecurityInformation;` +#### `fn security_information() -> SecurityInformation;` This function takes no input parameters and returns a struct containing contact information for the project owners, information regarding the bug bounty program, other information related to security, and any other information that the developers find relevant. @@ -91,19 +84,19 @@ This function takes no input parameters and returns a struct containing contact - This function's return values MUST follow the specification for the `SecurityInformation` type. - This function MUST NOT revert under any circumstances. -# Rationale +## Rationale The return structure discussed covers most information that may want to be conveyed regarding the security of the contract, with an additional field to convey any additional information. This should allow easy communication between the project owners and any white hat hackers if necessary. -# Backwards Compatibility +## Backwards Compatibility -This standard does not face any issues with backward compatibility. +This standard does not face any issues with backward compatibility. -# Security Considerations +## Security Considerations The information is entirely self reported and as such might not be accurate. Accuracy of information cannot be enforced and as such, anyone using this information should be aware of that. -# Example ABI +## Example ABI ```sway abi SRC11 { @@ -112,12 +105,20 @@ abi SRC11 { } ``` -# Example Implementation +## Example Implementation -## [Hard coded information](../examples/src11-security-information/hardcoded-information) +### Hard coded information A basic implementation of the security information standard demonstrating how to hardcode information to be returned. -## [Variable information](../examples/src11-security-information/variable-information) +```sway +{{#include ../examples/src11-security-information/hardcoded-information/src/main.sw}} +``` + +### Variable information A basic implementation of the security information standard demonstrating how to return variable information that can be edited to keep it up to date. In this example only the contact_information field is variable, but the same method can be applied to any field which you wish to update. + +```sway +{{#include ../examples/src11-security-information/variable-information/src/main.sw}} +``` diff --git a/SRCs/src-12.md b/docs/src-12-contract-factory.md similarity index 72% rename from SRCs/src-12.md rename to docs/src-12-contract-factory.md index 591d49c6..cdadb500 100644 --- a/SRCs/src-12.md +++ b/docs/src-12-contract-factory.md @@ -1,33 +1,26 @@ -

- - - SRC-12 logo - -

- -# Abstract +# SRC-12: Contract Factory The following standard allows for the implementation of a standard ABI for Contract Factories using the Sway Language. The standardized design designates how verification of newly deployed child contracts are handled. -# Motivation +## Motivation A standard interface for Contract Factories provides a safe and effective method of ensuring contracts can verify the validity of another contract as a child of a factory. This is critical on the Fuel Network as contracts cannot deploy other contracts and verification must be done after deployment. -# Prior Art +## Prior Art A Contract Factory is a design where a template contract is used and deployed repeatedly with different configurations. These configurations are often minor changes such as pointing to a different asset. All base functionality remains the same. On Fuel, contracts cannot deploy other contracts. As a result, a Contract Factory on Fuel must register and verify that the bytecode root of a newly deployed child contract matches the expected bytecode root. -When changing something such as a configurable in Sway, the bytecode root is recalculated. The [Bytecode Library](https://github.com/FuelLabs/sway-libs/tree/master/libs/bytecode) has been developed to calculate the bytecode root of a contract with different configurables. +When changing something such as a configurable in Sway, the bytecode root is recalculated. The [Bytecode Library](https://docs.fuel.network/docs/sway-libs/bytecode/) has been developed to calculate the bytecode root of a contract with different configurables. -# Specification +## Specification The following functions MUST be implemented to follow the SRC-12; Contract Factory Standard: -## Required Functions +### Required Functions -### - `fn register_contract(child_contract: ContractId, configurables: Option)>>) -> Result` +#### `fn register_contract(child_contract: ContractId, configurables: Option)>>) -> Result` The `register_contract()` function verifies that a newly deployed contract is the child of a contract factory. @@ -37,41 +30,41 @@ The `register_contract()` function verifies that a newly deployed contract is th - This function MUST return a `Result` containing the `b256` bytecode root of the newly registered contract or an `str` error message. - This function MAY add arbitrary conditions checking a contract factory child’s validity, such as verifying storage variables or initialized values. -### - `fn is_valid(child_contract: ContractId) -> bool` +#### `fn is_valid(child_contract: ContractId) -> bool` -The `is_valid()` function returns a boolean representing the state of whether a contract is registered as a valid child of the contract factory. +The `is_valid()` function returns a boolean representing the state of whether a contract is registered as a valid child of the contract factory. - This function MUST return `true` if this is a valid and registered child, otherwise `false`. -### - `fn factory_bytecode_root() -> Option` +#### `fn factory_bytecode_root() -> Option` The `factory_bytecode_root()` function returns the bytecode root of the default template contract. - This function MUST return the bytecode root of the template contract. -## Optional Functions +### Optional Functions The following are functions that may enhance the use of the SRC-12 standard but ARE NOT required. -### - `fn get_contract_id(configurables: Option)>>) -> Option` +#### `fn get_contract_id(configurables: Option)>>) -> Option` The `get_contract_id()` function returns a registered contract factory child contract with specific implementation details specified by `configurables`. -- This function MUST return `Some(ContractId)` IF a contract that follows the specified `configurables` has been registered with the SRC-12 Contract Factory contract, otherwise `None`. +This function MUST return `Some(ContractId)` IF a contract that follows the specified `configurables` has been registered with the SRC-12 Contract Factory contract, otherwise `None`. -# Rationale +## Rationale -The SRC-12; Contract Factory Standard is designed to standardize the contract factory design implementation interface between all Fuel instances. +The SRC-12; Contract Factory Standard is designed to standardize the contract factory design implementation interface between all Fuel instances. -# Backwards Compatibility +## Backwards Compatibility There are no other standards that the SRC-12 requires compatibility. -# Security Considerations +## Security Considerations This standard takes into consideration child contracts that are deployed with differentiating configurable values, however individual contract behaviors may be dependent on storage variables. As storage variables may change after the contract has been registered with the SRC-12 compliant contract, the standard suggests to check these values upon registration however it is not enforced. -# Example ABI +## Example ABI ```sway abi SRC12 { @@ -89,13 +82,20 @@ abi SRC12_Extension { } ``` -# Example Implementation +## Example Implementation -## [With Configurables](../examples/src12-contract-factory/with_configurables/src/with_configurables.sw) +### With Configurables Example of the SRC-12 implementation where contract deployments contain configurable values that differentiate the bytecode root from other contracts with the same bytecode. -## [Without Configurables](../examples/src12-contract-factory/without_configurables/src/without_configurables.sw) +```sway +{{#include ../examples/src12-contract-factory/with_configurables/src/with_configurables.sw}} +``` + +### Without Configurables Example of the SRC-12 implementation where all contract deployments are identitcal and thus have the same bytecode and root. +```sway +{{#include ../examples/src12-contract-factory/without_configurables/src/without_configurables.sw}} +``` diff --git a/SRCs/src-13.md b/docs/src-13-soulbound-address.md similarity index 89% rename from SRCs/src-13.md rename to docs/src-13-soulbound-address.md index 6d2495bf..28b49a80 100644 --- a/SRCs/src-13.md +++ b/docs/src-13-soulbound-address.md @@ -1,41 +1,34 @@ -

- - - SRC-13 logo - -

+# SRC-13: Soulbound Address -# Abstract +The following standard allows for the implementation of Soulbound Address on the Fuel Network. Soulbound Assets are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) sent to the Soulbound Address and cannot be transferred. As Native Assets on the Fuel Network do not require approvals to be spent, any asset sent to an `Address` may be transferable. The SRC-13 standard provides a predicate interface to lock Native Assets as soulbound. -The following standard allows for the implementation of Soulbound Address on the Fuel Network. Soulbound Assets are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) sent to the Soulbound Address and cannot be transferred. As Native Assets on the Fuel Network do not require approvals to be spent, any asset sent to an `Address` may be transferable. The SRC-13 standard provides a predicate interface to lock Native Assets as soulbound. +## Motivation -# Motivation +A standard enables soulbound assets on Fuel and allows external applications to query and provide soulbound assets, whether that be decentralized exchanges, wallets, or other external applications. -A standard enables soulbound assets on Fuel and allows external applications to query and provide soulbound assets, whether that be decentralized exchanges, wallets, or other external applications. +## Prior Art -# Prior Art - -[Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) on the Fuel Network do not require the implementation of certain functions such as transfer or approval. This is done directly within the FuelVM and there is no smart contract that requires updating of balances. As such, any assets sent to an `Address` may be spendable and ownership of that asset may be transferred. For any soulbound assets, spending must be restricted. +[Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) on the Fuel Network do not require the implementation of certain functions such as transfer or approval. This is done directly within the FuelVM and there is no smart contract that requires updating of balances. As such, any assets sent to an `Address` may be spendable and ownership of that asset may be transferred. For any soulbound assets, spending must be restricted. Predicates are programs that return a Boolean value and which represent ownership of some resource upon execution to true. All predicates evaluate to an `Address` based on their bytecode root. A predicate must evaluate to true such that the assets may be spent. The SRC-13 Soulbound Asset Standard naming pays homage to the [ERC-5192: Minimal Soulbound NFTs](https://eips.ethereum.org/EIPS/eip-5192) seen on Ethereum. While there is functionality we may use as a reference, it is noted that Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) are fundamentally different than Ethereum's tokens. -# Specification +## Specification -## Overview +### Overview To ensure that some asset shall never be spent, we must apply spending conditions. This can be done with Predicates on Fuel. Any asset sent to a Predicate `Address` shall never be spent if the predicate never evaluates to true. We must also ensure every `Address` on Fuel has its own Predicate. This can be guaranteed by using a `configurable` where an `Address` is defined. -## Definitions +### Definitions - **Soulbound Address Predicate** - The resulting predicate which owns assets on behalf of an `Address`. - **Soulbound Address** - The computed `Address` of the *Soulbound Asset Predicate*. - **Soulbound Asset** - Any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) sent to the *Soulbound Address*. -## Soulbound Address Predicate Specification +### Soulbound Address Predicate Specification - The *Soulbound Address Predicate* SHALL never spend the assets sent to its computed predicate `Address` or *Soulbound Address*. - The *Soulbound Address Predicate* SHALL encode an `Address` of which it represents the soulbound address. @@ -55,33 +48,33 @@ fn main() -> bool { } ``` -## Soulbound Address +### Soulbound Address -The *Soulbound Address* is the *Soulbound Address Predicate*'s predicate address. A predicate's address(the bytecode root) is defined [here](https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/predicate-id.md). +The *Soulbound Address* is the *Soulbound Address Predicate*'s predicate address. A predicate's address(the bytecode root) is defined [here](https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/predicate-id.md). The *Soulbound Address* may be computed from the *Soulbound Address Predicate*'s bytecode both on-chain or off-chain. For off-chain computation, please refer to the fuels-rs [predicate docs](https://docs.fuel.network/docs/fuels-rs/predicates/). For on-chain computation, please refer to Sway-Lib's [Bytecode Library](https://github.com/FuelLabs/sway-libs/tree/master/libs/bytecode). -# Rationale +## Rationale On the Fuel Network, the process for sending any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is the same and does not require any approval. This means that any assets sent to an Address may be spendable and does not require any external spending conditions. In the case of a soulbound asset, we need to ensure the asset cannot be spent. -# Backwards Compatibility +## Backwards Compatibility This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20.md) standard. -# Security Considerations +## Security Considerations This standard does not introduce any security concerns, as it does not call external contracts, nor does it define any mutations of the contract state. It should however be noted that any Native Asset on the Fuel Network is not a Soulbound Asset until it is sent to a *Soulbound Address*. -# Example +## Example -The following example shows the *Soulbound Address Predicate* for the `0xe033369a522e3cd2fc19a5a705a7f119938027e8e287c0ec35b784e68dab2be6` `Address`. +The following example shows the *Soulbound Address Predicate* for the `0xe033369a522e3cd2fc19a5a705a7f119938027e8e287c0ec35b784e68dab2be6` `Address`. The resulting *Soulbound Address* is `0x7f28a538d06788a3d98bb72f4b41012d86abc4b0369ee5dedf56cfbaf245d609`. Any Native Assets sent to this address will become Soulbound Assets. -```sway +```sway predicate; configurable { diff --git a/SRCs/src-14.md b/docs/src-14-simple-upgradeable-proxies.md similarity index 84% rename from SRCs/src-14.md rename to docs/src-14-simple-upgradeable-proxies.md index 5918a8ee..10140dc2 100644 --- a/SRCs/src-14.md +++ b/docs/src-14-simple-upgradeable-proxies.md @@ -1,8 +1,8 @@ -# Simple Upgradable Proxies +# SRC-14: Simple Upgradeable Proxies ## Abstract -The following proposes a standard for simple upgradable proxies. +The following proposes a standard for simple upgradeable proxies. ## Motivation @@ -13,11 +13,12 @@ We seek to standardize proxy implementation to improve developer experience and [This OpenZeppelin blog post](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades#proxies-and-implementations) is a good survey of the state of the art at this time. Proxy designs fall into three essential categories: + 1. Immutable proxies which are lightweight clones of other contracts but can't change targets -2. Upgradable proxies such as [UUPS](https://eips.ethereum.org/EIPS/eip-1822) which store a target in storage and delegate all calls to it -3. [Diamonds](https://eips.ethereum.org/EIPS/eip-2535) which are both upgradable and can point to multiple targets on a per method basis +2. Upgradeable proxies such as [UUPS](https://eips.ethereum.org/EIPS/eip-1822) which store a target in storage and delegate all calls to it +3. [Diamonds](https://eips.ethereum.org/EIPS/eip-2535) which are both upgradeable and can point to multiple targets on a per method basis -This document falls in the second category. We want to standardize the implementation of simple upgradable passthrough contracts. +This document falls in the second category. We want to standardize the implementation of simple upgradeable passthrough contracts. The FuelVM provides an `LDC` instruction that is used by Sway's `std::execution::run_external` to provide a similar behavior to EVM's `delegatecall` and execute instructions from another contract while retaining one's own storage context. This is the intended means of implementation of this standard. @@ -71,10 +72,18 @@ abi SRC14 { ## Example Implementation -### [Minimal Proxy](../examples/examples/src14-simple-proxy/owned/src/minimal.sw) +### Minimal Proxy Example of a minimal SRC-14 implementation with no access control. -### [Owned Proxy](../examples/examples/src14-simple-proxy/owned/src/owned.sw) +```sway +{{#include ../examples/examples/src14-simple-proxy/owned/src/minimal.sw}} +``` + +### Owned Proxy Example of a SRC-14 implementation that also implements [SRC-5](https://github.com/FuelLabs/sway-standards/blob/master/SRCs/src-5.md). + +```sway +{{#include ../examples/examples/src14-simple-proxy/owned/src/owned.sw}} +``` diff --git a/SRCs/src-2.md b/docs/src-2-inline-documentation.md similarity index 83% rename from SRCs/src-2.md rename to docs/src-2-inline-documentation.md index bd1210dc..277e3ddf 100644 --- a/SRCs/src-2.md +++ b/docs/src-2-inline-documentation.md @@ -1,106 +1,101 @@ -

- - - SRC-2 logo - -

+# SRC-2: Inline Documentation -# Abstract +## Abstract The following standard intends to define the structure and organization of inline documentation for functions, structs, enums, storage, configurables, and more within the Sway Language. This is a living standard. -# Motivation +## Motivation The standard seeks to provide a better developer experience using Fuel's tooling and the Language Server. This will allow for better interoperability between applications and enable developers to quickly understand any external code they are using or implementing. -# Prior Art +## Prior Art A number of pre-existing functions in the [sway standard library](https://github.com/FuelLabs/sway/tree/master/sway-lib-std), [sway-applications](https://github.com/FuelLabs/sway-applications), and [sway-libs](https://github.com/FuelLabs/sway-libs) repositories have inline documentation. The inline documentation for these is already compatible with Fuel's VS Code extension. These however do not all follow the same structure and outline. -# Specification +## Specification -## Functions +### Functions -The following describes the structure and order of inline documentation for functions. Some sections MAY NOT apply to each function. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for functions. Some sections MAY NOT apply to each function. When a section is not relevant it SHALL be omitted. -#### - Description +#### Description -This section has no header. -A simple explanation of the function's intent or functionality. +This section has no header. +A simple explanation of the function's intent or functionality. Example: -```rust +```sway /// This function computes the hash of two numbers. ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the function's intent or functionality. Example: -```rust +```sway /// # Additional Information /// /// This function also has some complex behaviors. ``` -#### - Arguments +#### Arguments This section has a `h1` header. Lists the arguments of the function's definition with the `*` symbol and describes each one. The list SHALL provide the name, type, and description. The argument SHALL be encapsulated between two backticks: `argument`. The type SHALL be encapsulated between two square brackets: [type]. Example: -```rust +```sway /// # Arguments /// /// * `argument_1`: [Identity] - This argument is a user to be hashed. ``` -#### - Returns +#### Returns This section has a `h1` header. Lists the return values of the function with the `*` symbol and describes each one. This list SHALL be in the order of the return index and provide the type and description. The type SHALL be encapsulated between two square brackets: [type]. Example: -```rust +```sway /// # Returns /// /// * [u64] - The number of hashes performed. ``` -#### - Reverts +#### Reverts This section has a `h1` header. Lists the cases in which the function will revert starting with the `*` symbol. The list SHALL be in the order of occurrence within the function. Example: -```rust +```sway /// # Reverts /// /// * When `argument_1` or `argument_2` are a zero [b256]. ``` -#### - Number of Storage Accesses +#### Number of Storage Accesses -This section has a `h1` header. +This section has a `h1` header. Provides information on how many storage reads, writes, and clears occur within the function. Example: -```rust +```sway /// # Number of Storage Accesses /// /// * Reads: `1` /// * Clears: `2` ``` -#### - Examples +#### Examples This section has a `h1` header. This section provides an example of the use of the function. This section is not required to follow the SRC-2 standard however encouraged for auxiliary and library functions. Example: -```rust +```sway /// # Examples /// /// ```sway @@ -111,52 +106,52 @@ Example: ## Structs -The following describes the structure and order of inline documentation for structs. Some sections MAY NOT apply to each struct. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for structs. Some sections MAY NOT apply to each struct. When a section is not relevant it SHALL be omitted. -#### - Description +#### Description -This section has no header. -A simple explanation of the struct's purpose or functionality. +This section has no header. +A simple explanation of the struct's purpose or functionality. Example: -```rust +```sway /// This struct contains information on an NFT. ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the struct's purpose or functionality. Example: -```rust +```sway /// # Additional Information /// /// This struct also has some complex behaviors. ``` -### - Fields +### Fields -The following describes the structure and order of inline documentation for fields within structs. Some sections MAY NOT apply to each field. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for fields within structs. Some sections MAY NOT apply to each field. When a section is not relevant it SHALL be omitted. #### Description -This section has no header. -Each field SHALL have its own description with a simple explanation of the field's purpose or functionality. +This section has no header. +Each field SHALL have its own description with a simple explanation of the field's purpose or functionality. Example: -```rust +```sway /// This field represents an owner. field_1: Identity, ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the field's purpose or functionality. Example: -```rust +```sway /// # Additional Information /// /// This field also has some complex behaviors. @@ -164,54 +159,54 @@ Example: ## Enums -The following describes the structure and order of inline documentation for enums. Some sections MAY NOT apply to each enum. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for enums. Some sections MAY NOT apply to each enum. When a section is not relevant it SHALL be omitted. -#### - Description +#### Description -This section has no header. -A simple explanation of the enum's purpose or functionality. +This section has no header. +A simple explanation of the enum's purpose or functionality. Example: -```rust +```sway /// This enum holds the state of a contract. ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the enum's purpose or functionality. Example: -```rust +```sway /// # Additional Information /// /// This enum also has some complex behaviors. ``` -### - Variant +### Variant -The following describes the structure and order of inline documentation for fields within enums. Some sections MAY NOT apply to each field. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for fields within enums. Some sections MAY NOT apply to each field. When a section is not relevant it SHALL be omitted. #### Description -This section has no header. -Each variant SHALL have its own description with a simple explanation of the variant's purpose or functionality. +This section has no header. +Each variant SHALL have its own description with a simple explanation of the variant's purpose or functionality. Example: -```rust +```sway /// This variant represents the uninitialized state of a contract. variant_1: (), /// This variant represents the initialized state of a contract. variant_2: Identity, ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the variant's purpose or functionality. Example: -```rust +```sway /// # Additional Information /// /// This variant also has some complex behaviors. @@ -219,33 +214,33 @@ Example: ## Errors -In Sway, errors are recommended to be enums. They SHALL follow the same structure and order for inline documentation as described above for enums. Some sections MAY NOT apply to each error. When a section is not relevant it SHALL be omitted. +In Sway, errors are recommended to be enums. They SHALL follow the same structure and order for inline documentation as described above for enums. Some sections MAY NOT apply to each error. When a section is not relevant it SHALL be omitted. ## Logs -In Sway, logs are recommended to be structs. They SHALL follow the same structure and order for inline documentation as described above for structs. Some sections MAY NOT apply to each log. When a section is not relevant it SHALL be omitted. +In Sway, logs are recommended to be structs. They SHALL follow the same structure and order for inline documentation as described above for structs. Some sections MAY NOT apply to each log. When a section is not relevant it SHALL be omitted. ## Storage -The following describes the structure and order of inline documentation for variables within the storage block. Some sections MAY NOT apply to each storage variable. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for variables within the storage block. Some sections MAY NOT apply to each storage variable. When a section is not relevant it SHALL be omitted. -#### - Description +#### Description -This section has no header. -A simple explanation of the storage variable's purpose or functionality. +This section has no header. +A simple explanation of the storage variable's purpose or functionality. Example: -```rust +```sway /// This storage variable is used for state. ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the storage variable's purpose or functionality. Example: -```rust +```sway /// # Additional Information /// /// This storage variable maps a user to a state. @@ -253,25 +248,25 @@ Example: ## Configurable -The following describes the structure and order of inline documentation for variables in the configurable block. Some sections MAY NOT apply to each storage variable. When a section is not relevant it SHALL be omitted. +The following describes the structure and order of inline documentation for variables in the configurable block. Some sections MAY NOT apply to each storage variable. When a section is not relevant it SHALL be omitted. -#### - Description +#### Description -This section has no header. -A simple explanation of the configurable variable's purpose or functionality. +This section has no header. +A simple explanation of the configurable variable's purpose or functionality. Example: -```rust +```sway /// This configurable variable is used for an address. ``` -#### - Additional Information +#### Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the configurable variable's purpose or functionality. Example: -```rust +```sway /// # Additional Information /// /// This configurable variable makes security assumptions. @@ -282,31 +277,32 @@ Example: If the above described sections are not relevant for the information that needs to documented, a custom section with a arbitrary `h1` header may be utilized. Example: -``` + +```sway /// # Recommended Message Style /// /// We recommend that `expect` messages are used to describe the reason you *expect* the `Option` should be `Some`. ``` -# Rationale +## Rationale The SRC-2 standard should help provide developers with an easy way to both quickly write inline documentation and get up to speed on other developers' code. This standard in combination with Fuel's VS Code extension provides readily accessible information on functions, structs, and enums ![Screenshot 2023-05-10 125656](https://github.com/FuelLabs/sway-standards/assets/54727135/f03073b9-2a28-44d1-b12a-5603a0738fee) -# Backwards Compatibility +## Backwards Compatibility There are no standards that the SRC-2 standard requires to be backward compatible with. -# Security Considerations +## Security Considerations This standard will improve security by providing developers with relevant information such as revert cases. -# Examples +## Examples ## Function Example -```rust +```sway /// Ensures that the sender is the owner. /// /// # Arguments @@ -347,7 +343,7 @@ pub fn only_owner(self, number: u64) -> bool { ## Struct Examples -```rust +```sway /// Metadata that is tied to an asset. pub struct NFTMetadata { /// Represents the ID of this NFT. @@ -355,7 +351,7 @@ pub struct NFTMetadata { } ``` -```rust +```sway /// Log of a bid. pub struct Bid { /// The number of coins that were bid. @@ -367,7 +363,7 @@ pub struct Bid { ## Enum Examples -```rust +```sway /// Determines the state of ownership. pub enum State { /// The ownership has not been set. @@ -379,7 +375,7 @@ pub enum State { } ``` -```rust +```sway /// Error log for when access is denied. pub enum AccessError { /// Emitted when the caller is not the owner of the contract. @@ -389,7 +385,7 @@ pub enum AccessError { ## Storage Examples -```rust +```sway storage { /// An asset which is to be distributed. asset: Option = Option::None, @@ -404,7 +400,7 @@ storage { ## Configurable Example -```rust +```sway configurable { /// The threshold required for activation. THRESHOLD: u64 = 5, diff --git a/SRCs/src-20.md b/docs/src-20-native-asset.md similarity index 83% rename from SRCs/src-20.md rename to docs/src-20-native-asset.md index c68ed9ce..2e02fa84 100644 --- a/SRCs/src-20.md +++ b/docs/src-20-native-asset.md @@ -1,76 +1,69 @@ -

- - - SRC-20 logo - -

- -# Abstract +# SRC-20: Native Asset The following standard allows for the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. This standard provides basic functionality as well as on-chain metadata for other applications to use. -# Motivation +## Motivation A standard interface for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) on Fuel allows external applications to interact with the native asset, whether that be decentralized exchanges, wallets, or Fuel's [Scripts](https://docs.fuel.network/docs/sway/sway-program-types/scripts/) and [Predicates](https://docs.fuel.network/docs/sway/sway-program-types/predicates/). -# Prior Art +## Prior Art The SRC-20 Native Asset Standard naming pays homage to the [ERC-20 Token Standard](https://eips.ethereum.org/EIPS/eip-20) seen on Ethereum. While there is functionality we may use as a reference, it is noted that Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) are fundamentally different than Ethereum's tokens. -There has been a discussion of the Fungible Token Standard on the [Fuel Forum](https://forum.fuel.network/). This discussion can be found [here](https://forum.fuel.network/t/src-20-fungible-token-standard/186). +There has been a discussion of the Fungible Token Standard on the [Fuel Forum](https://forum.fuel.network/). This discussion can be found [here](https://forum.fuel.network/t/src-20-fungible-token-standard/186). There has also been a Fungible Token Standard and Non-Fungible Token Standard implementations added to the [Sway-Libs](https://github.com/FuelLabs/sway-libs) repository before the creation of the [Sway-Standards](https://github.com/FuelLabs/sway-standards) repository. The introduction of this standard in the [Sway-Standards](https://github.com/FuelLabs/sway-standards) repository will deprecate the Sway-Libs Fungible Token Standard. -# Specification +## Specification -## Required Public Functions +### Required Public Functions The following functions MUST be implemented to follow the SRC-20 standard: -### `fn total_assets() -> u64` +#### `fn total_assets() -> u64` This function MUST return the total number of individual assets for a contract. -### `fn total_supply(asset: AssetId) -> Option` +#### `fn total_supply(asset: AssetId) -> Option` This function MUST return the total supply of coins for an asset. This function MUST return `Some` for any assets minted by the contract. -### `fn name(asset: AssetId) -> Option` +#### `fn name(asset: AssetId) -> Option` This function MUST return the name of the asset, such as “Ether”. This function MUST return `Some` for any assets minted by the contract. -### `fn symbol(asset: AssetId) -> Option` +#### `fn symbol(asset: AssetId) -> Option` This function must return the symbol of the asset, such as “ETH”. This function MUST return `Some` for any assets minted by the contract. -### `fn decimals(asset: AssetId) -> Option` +#### `fn decimals(asset: AssetId) -> Option` This function must return the number of decimals the asset uses - e.g. 8, which means to divide the coin amount by 100000000 to get its user representation. This function MUST return `Some` for any assets minted by the contract. -## Non-Fungible Asset Restrictions +### Non-Fungible Asset Restrictions Non-Fungible Tokens (NFT) or Non-Fungible Assets on Fuel are Native Assets and thus follow the same standard as Fungible Native Assets with some restrictions. For a Native Asset on Fuel to be deemed an NFT, the following must be applied: -* Non-Fungible Assets SHALL have a total supply of one per asset. +* Non-Fungible Assets SHALL have a total supply of one per asset. * Non-Fungible Assets SHALL have a decimal of `0u8`. -# Rationale +## Rationale As the SRC-20 Native Asset Standard leverages Native Assets on Fuel, we do not require the implementation of certain functions such as transfer or approval. This is done directly within the FuelVM and there is no smart contract that requires updating of balances. As Fuel is UTXO based, any transfer events may be indexed on transaction receipts. Following this, we have omitted the inclusion of any transfer functions or events. The provided specification outlines only the functions necessary to implement fully functional native assets on the Fuel Network. Additional functionality and properties may be added as needed. -# Backwards Compatibility +## Backwards Compatibility This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). There are no other standards that require compatibility. -# Security Considerations +## Security Considerations This standard does not introduce any security concerns, as it does not call external contracts, nor does it define any mutations of the contract state. -# Example ABI +## Example ABI -```rust +```sway abi MyAsset { #[storage(read)] fn total_assets() -> u64; @@ -85,12 +78,20 @@ abi MyAsset { } ``` -# Example Implementation +## Example Implementation -## [Single Native Asset](../examples/src20-native-asset/multi_asset/src/multi_asset.sw) +### Single Native Asset Example of the SRC-20 implementation where a contract contains a single asset with one `SubId`. This implementation is recommended for users that intend to deploy a single asset with their contract. -## [Multi Native Asset](../examples/src20-native-asset/single_asset/src/single_asset.sw) +```sway +{{#include ../examples/src20-native-asset/multi_asset/src/multi_asset.sw}} +``` + +### Multi Native Asset Example of the SRC-20 implementation where a contract contains multiple assets with differing `SubId`s. This implementation is recommended for users that intend to deploy multiple assets with their contract. + +```sway +{{#include ../examples/src20-native-asset/single_asset/src/single_asset.sw}} +``` diff --git a/SRCs/src-3.md b/docs/src-3-minting-and-burning.md similarity index 76% rename from SRCs/src-3.md rename to docs/src-3-minting-and-burning.md index 0b9cb78f..d2970f6d 100644 --- a/SRCs/src-3.md +++ b/docs/src-3-minting-and-burning.md @@ -1,60 +1,60 @@ -# Abstract +# SRC-3: Minting and Burning Native Assets The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./src-20.md) standard. -# Motivation +## Motivation The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./src-20.md) standard. -# Prior Art +## Prior Art Minting and burning were initially added to the [SRC-20](./src-20.md) standard. -# Specification +## Specification -## Required Public Functions +### Required Public Functions The following functions MUST be implemented to follow the SRC-3 standard: -### `fn mint(recipient: Identity, sub_id: SubId, amount: u64)` +#### `fn mint(recipient: Identity, sub_id: SubId, amount: u64)` -This function MUST mint `amount` coins with sub-identifier `sub_id` and transfer them to the `recipient`. +This function MUST mint `amount` coins with sub-identifier `sub_id` and transfer them to the `recipient`. This function MAY contain arbitrary conditions for minting, and revert if those conditions are not met. -##### Arguments +##### Mint Arguments * `recipient` - The `Identity` to which the newly minted asset is transferred to. * `sub_id` - The sub-identifier of the asset to mint. * `amount` - The quantity of coins to mint. -### `fn burn(sub_id: SubId, amount: u64)` +#### `fn burn(sub_id: SubId, amount: u64)` -This function MUST burn `amount` coins with the sub-identifier `sub_id` and MUST ensure the `AssetId` of the asset is the sha-256 hash of `(ContractId, SubId)` for the implementing contract. -This function MUST ensure at least `amount` coins have been transferred to the implementing contract. -This function MUST update the total supply defined in the [SRC-20](./src-20.md) standard. +This function MUST burn `amount` coins with the sub-identifier `sub_id` and MUST ensure the `AssetId` of the asset is the sha-256 hash of `(ContractId, SubId)` for the implementing contract. +This function MUST ensure at least `amount` coins have been transferred to the implementing contract. +This function MUST update the total supply defined in the [SRC-20](./src-20.md) standard. This function MAY contain arbitrary conditions for burning, and revert if those conditions are not met. -##### Arguments +##### Burn Arguments * `sub_id` - The sub-identifier of the asset to burn. * `amount` - The quantity of coins to burn. -# Rationale +## Rationale This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./src-20.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. -# Backwards Compatibility +## Backwards Compatibility This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./src-20.md) standard. -# Security Considerations +## Security Considerations This standard may introduce security considerations if no checks are implemented to ensure the calling of the `mint()` function is deemed valid or permitted. Checks are highly encouraged. The burn function may also introduce a security consideration if the total supply within the [SRC-20](./src-20.md) standard is not modified. -# Example ABI +## Example ABI -```rust +```sway abi MySRC3Asset { #[storage(read, write)] fn mint(recipient: Identity, sub_id: SubId, amount: u64); @@ -64,12 +64,20 @@ abi MySRC3Asset { } ``` -# Example Implementation +## Example Implementation -## [Single Native Asset](../examples/src3-mint-burn/single_asset/src/single_asset.sw) +### Single Native Asset Example of the SRC-3 implementation where a contract only mints a single asset with one `SubId`. -## [Multi Native Asset](../examples/src3-mint-burn/multi_asset/src/multi_asset.sw) +```sway +{{#include ../examples/src3-mint-burn/single_asset/src/single_asset.sw}} +``` + +### Multi Native Asset -Example of the SRC-3 implementation where a contract mints multiple assets with differing `SubId`s. +Example of the SRC-3 implementation where a contract mints multiple assets with differing `SubId` values. + +```sway +{{#include ../examples/src3-mint-burn/multi_asset/src/multi_asset.sw}} +``` diff --git a/SRCs/src-5.md b/docs/src-5-ownership.md similarity index 72% rename from SRCs/src-5.md rename to docs/src-5-ownership.md index f8333d6f..03ef56d6 100644 --- a/SRCs/src-5.md +++ b/docs/src-5-ownership.md @@ -1,42 +1,38 @@ -

- - - SRC-5 logo - -

+# SRC-5: Ownership -# Abstract +The following standard intends to enable the use of administrators or owners in Sway contracts. -The following standard intends to enable the use of administrators or owners in Sway contracts. - -# Motivation +## Motivation The standard seeks to provide a method for restricting access to particular users within a Sway contract. -# Prior Art +## Prior Art -The [sway-libs](https://github.com/FuelLabs/sway-libs) repository contains a pre-existing Ownership library. +The [sway-libs](https://github.com/FuelLabs/sway-libs) repository contains a pre-existing Ownership library. Ownership libraries exist for other ecosystems such as OpenZeppelin's [Ownership library](https://docs.openzeppelin.com/contracts/2.x/api/ownership). -# Specification +## Specification -## State +### State There SHALL be 3 states for any library implementing an ownership module in the following order: -### - `Uninitialized` +#### - `Uninitialized` + The `Uninitialized` state SHALL be set as the initial state if no owner or admin is set. The `Uninitialized` state MUST be used when an owner or admin MAY be set in the future. -### - `Initialized` +#### - `Initialized` + The `Initialized` state SHALL be set as the state if an owner or admin is set with an associated `Identity` type. -### - `Revoked` +#### - `Revoked` + The `Revoked` state SHALL be set when there is no owner or admin and there SHALL NOT be one set in the future. Example: -```rust +```sway pub enum State { Uninitialized: (), Initialized: Identity, @@ -44,49 +40,59 @@ pub enum State { } ``` -## Functions +### Functions The following functions MUST be implemented to follow the SRC-5 standard: -### `fn owner() -> State` +#### `fn owner() -> State` + This function SHALL return the current state of ownership for the contract where `State` is either `Uninitialized`, `Initialized`, or `Revoked`. -## Errors +### Errors There SHALL be error handling. -### - `NotOwner` +#### - `NotOwner` + This error MUST be emitted when `only_owner()` reverts. -# Rationale +## Rationale In order to provide a universal method of administrative capabilities, SRC-5 will further enable interoperability between applications and provide safeguards for smart contract security. -# Backwards Compatability +## Backwards Compatability The SRC-5 standard is compatible with the [sway-libs](https://github.com/FuelLabs/sway-libs) repository pre-existing Ownership library. Considerations should be made to best handle multiple owners or admins. There are no standards that SRC-5 requires to be compatible with. -# Security Considerations +## Security Considerations The SRC-5 standard should help improve the security of Sway contracts and their interoperability. -# Examples ABI +## Example ABI -```rust +```sway abi SRC5 { #[storage(read)] fn owner() -> State; } ``` -# Example Implementation +## Example Implementation -## [Uninitalized](../examples/src5-ownership/uninitialized_example/src/uninitialized_example.sw) +### Uninitalized Example of the SRC-5 implementation where a contract does not have an owner set at compile time with the intent to set it during runtime. -## [Initialized](../examples/src5-ownership/initialized_example/src/initialized_example.sw) +```sway +{{#include ../examples/src5-ownership/uninitialized_example/src/uninitialized_example.sw}} +``` + +### Initialized Example of the SRC-5 implementation where a contract has an owner set at compile time. + +```sway +{{#include ../examples/src5-ownership/initialized_example/src/initialized_example.sw}} +``` diff --git a/SRCs/src-6.md b/docs/src-6-vault.md similarity index 76% rename from SRCs/src-6.md rename to docs/src-6-vault.md index e63e933a..7b0b8380 100644 --- a/SRCs/src-6.md +++ b/docs/src-6-vault.md @@ -1,23 +1,16 @@ -

- - - SRC-6 logo - -

- -# Abstract +# SRC-6: Vault The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./src-20.md) standard. -# Motivation +## Motivation Asset vaults allow users to own shares of variable amounts of assets, such as lending protocols which may have growing assets due to profits from interest. This pattern is highly useful and would greatly benefit from standardization. -# Prior Art +## Prior Art Asset vaults have been thoroughly explored on Ethereum and with [EIP 4626](https://eips.ethereum.org/EIPS/eip-4626) they have their own standard for it. However as Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) are fundamentally different from Ethereum's ERC-20 tokens, the implementation will differ, but the interface may be used as a reference. -# Specification +## Specification ## Required public functions @@ -34,7 +27,7 @@ This function takes the `receiver` Identity and the SubId `vault_sub_id` of the - This function MUST emit a `Deposit` log. - This function MUST return the amount of minted shares. -### `fn withdraw(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> u64` +#### `fn withdraw(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> u64` This function takes the `receiver` Identity, the `underlying_asset` AssetId, and the `vault_sub_id` of the sub vault, as arguments and returns the amount of assets transferred to the `receiver`. @@ -44,7 +37,7 @@ This function takes the `receiver` Identity, the `underlying_asset` AssetId, and - This function MUST emit a `Withdraw` log. - This function MUST return amount of assets transferred to the receiver. -### `fn managed_assets(underlying_asset: AssetId, vault_sub_id: SubId) -> u64` +#### `fn managed_assets(underlying_asset: AssetId, vault_sub_id: SubId) -> u64` This function returns the total assets under management by vault. Includes assets controlled by the vault but not directly possessed by vault. It takes the `underlying_asset` AssetId and the `vault_sub_id` of the sub vault as arguments and returns the total amount of assets of AssetId under management by vault. @@ -52,7 +45,7 @@ This function returns the total assets under management by vault. Includes asset - This function MUST return 0 if there are no assets of `underlying_asset` AssetId under management by vault. - This function MUST NOT revert under any circumstances. -### `fn max_depositable(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> Option` +#### `fn max_depositable(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> Option` This is a helper function for getting the maximum amount of assets that can be deposited. It takes the hypothetical `receiver` Identity, the `underlying_asset` AssetId, and the `vault_sub_id` SubId of the sub vault as an arguments and returns the maximum amount of assets that can be deposited into the contract, for the given asset. @@ -61,20 +54,20 @@ This is a helper function for getting the maximum amount of assets that can be d - This function MUST return an `None` if the given `vault_sub_id` vault does not exist. - This function MUST account for both global and user specific limits. For example: if deposits are disabled, even temporarily, MUST return 0. -### `fn max_withdrawable(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> Option` +#### `fn max_withdrawable(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> Option` -This is a helper function for getting maximum withdrawable. It takes the hypothetical `receiver` Identity, the `underlying_asset` AssetId, and the `vault_sub_id` SubId of the sub vault as an argument and returns the maximum amount of assets that can be withdrawn from the contract, for the given asset. +This is a helper function for getting maximum withdrawable. It takes the hypothetical `receiver` `Identity`, the `underlying_asset` `AssetId`, and the `vault_sub_id` SubId of the sub vault as an argument and returns the maximum amount of assets that can be withdrawn from the contract, for the given asset. - This function MUST return the maximum amount of assets that can be withdrawn from the contract, for the given `underlying_asset`, if the given `vault_sub_id` vault exists. - This function MUST return an `Some(amount)` if the given `vault_sub_id` vault exists. - This function MUST return an `None` if the given `vault_sub_id` vault does not exist. - This function MUST account for global limits. For example: if withdrawals are disabled, even temporarily, MUST return 0. -## Required logs +### Required logs The following logs MUST be emitted at the specified occasions. -### `Deposit` +#### `Deposit` `caller` has called the `deposit()` method sending `deposited_amount` assets of the `underlying_asset` Asset to the subvault of `vault_sub_id`, in exchange for `minted_shares` shares sent to the receiver `receiver`. @@ -82,31 +75,31 @@ The `Deposit` struct MUST be logged whenever new shares are minted via the `depo The `Deposit` log SHALL have the following fields. -#### - `caller`: Identity +##### - `caller`: `Identity` -The `caller` field MUST represent the Identity which called the deposit function. +The `caller` field MUST represent the `Identity` which called the deposit function. -#### - `receiver`: Identity +##### - `receiver`: `Identity` -The `receiver` field MUST represent the Identity which received the vault shares. +The `receiver` field MUST represent the `Identity` which received the vault shares. -#### - `underlying_asset`: AssetId +##### - `underlying_asset`: `AssetId` -The `underlying_asset` field MUST represent the AssetId of the asset which was deposited into the vault. +The `underlying_asset` field MUST represent the `AssetId` of the asset which was deposited into the vault. -#### - `vault_sub_id`: SubId +##### - `vault_sub_id`: `SubId` -The `vault_sub_id` field MUST represent the SubId of the vault which was deposited into. +The `vault_sub_id` field MUST represent the `SubId` of the vault which was deposited into. -#### - `deposited_amount`: u64 +##### - `deposited_amount`: `u64` -The `deposited_amount` field MUST represent the u64 amount of assets deposited into the vault. +The `deposited_amount` field MUST represent the `u64` amount of assets deposited into the vault. -#### - `minted_shares`: u64 +##### - `minted_shares`: `u64` -The `minted_shares` field MUST represent the u64 amount of shares minted. +The `minted_shares` field MUST represent the `u64` amount of shares minted. -### `Withdraw` +#### `Withdraw` `caller` has called the `withdraw()` method sending `burned_shares` shares in exchange for `withdrawn_amount` assets of the `underlying_asset` Asset from the subvault of `vault_sub_id` to the receiver `receiver`. @@ -114,43 +107,43 @@ The `Withdraw` struct MUST be logged whenever shares are redeemed for assets via The `Withdraw` log SHALL have the following fields. -#### - `caller`: Identity +##### - `caller`: `Identity` The `caller` field MUST represent the Identity which called the withdraw function. -#### - `receiver`: Identity +##### - `receiver`: `Identity` The `receiver` field MUST represent the Identity which received the withdrawn assets. -#### - `underlying_asset`: AssetId +##### - `underlying_asset`: `AssetId` The `underlying_asset` field MUST represent the AssetId of the asset that was withdrawn. -#### - `vault_sub_id`: SubId +##### - `vault_sub_id`: `SubId` The `vault_sub_id` field MUST represent the SubId of the vault from which was withdrawn. -#### - `withdrawn_amount`: u64 +##### - `withdrawn_amount`: `u64` -The `withdrawn_amount` field MUST represent the u64 amount of coins withdrawn. +The `withdrawn_amount` field MUST represent the `u64` amount of coins withdrawn. -#### - `burned_shares`: u64 +##### - `burned_shares`: `u64` -The `burned_shares` field MUST represent the u64 amount of shares burned. +The `burned_shares` field MUST represent the `u64` amount of shares burned. -# Rationale +## Rationale The ABI discussed covers the known use cases of asset vaults while allowing safe implementations. -# Backwards Compatibility +## Backwards Compatibility This standard is fully compatible with the [SRC-20 standard](./src-20.md). -# Security Considerations +## Security Considerations Incorrect implementation of asset vaults could allow attackers to steal underlying assets. It is recommended to properly audit any code using this standard to ensure exploits are not possible. -# Example ABI +## Example ABI ```sway abi SRC6 { @@ -173,16 +166,28 @@ abi SRC6 { } ``` -# Example Implementation +## Example Implementation -## [Multi Asset Vault](../examples/src6-vault/multi_asset_vault) +### Multi Asset Vault A basic implementation of the vault standard that supports any number of sub vaults being created for every AssetId. -## [Single Asset Vault](../examples/src6-vault/single_asset_vault) +```sway +{{#include ../examples/src6-vault/multi_asset_vault/src/main.sw}} +``` + +### Single Asset Vault A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single AssetId. -## [Single Asset Single Sub Vault](../examples/src6-vault/single_asset_single_sub_vault) +```sway +{{#include ../examples/src6-vault/single_asset_vault/src/main.sw}} +``` + +## Single Asset Single Sub Vault A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single AssetId, and to a single Sub vault. + +```sway +{{#include ../examples/src6-vault/single_asset_single_sub_vault/src/main.sw}} +``` diff --git a/SRCs/src-7.md b/docs/src-7-asset-metadata.md similarity index 78% rename from SRCs/src-7.md rename to docs/src-7-asset-metadata.md index d99a80de..cdba678f 100644 --- a/SRCs/src-7.md +++ b/docs/src-7-asset-metadata.md @@ -1,83 +1,84 @@ -

- - - SRC-7 logo - -

+# SRC-7: Arbitrary Native Asset Metadata -# Abstract +The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./src-20.md) standard. -The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./src-20.md) standard. - -# Motivation +## Motivation The SRC-7 standard seeks to enable data-rich assets on the Fuel Network while maintaining compatibility between multiple assets minted by the same contract. The standard ensures type safety with the use of an `enum` and an `Option`. All metadata queries are done through a single function to facilitate cross-contract calls. -# Prior Art +## Prior Art -The use of generic metadata was originally found in the Sway-Lib's [NFT Library](https://github.com/FuelLabs/sway-libs/tree/v0.12.0/libs/nft) which did not use Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). This library has since been deprecated. +The use of generic metadata was originally found in the Sway-Lib's [NFT Library](https://github.com/FuelLabs/sway-libs/tree/v0.12.0/libs/nft) which did not use Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). This library has since been deprecated. -A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./src-20.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. +A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./src-20.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. The standard takes inspiration from [ENS's public resolver](https://docs.ens.domains/contract-api-reference/publicresolver) with the use of a `String` as the key. This should enable human-readable keys to help minimize errors and enable the standardization of certain keys, such as "image" as opposed to an `enum` or `u64` representation of keys. -We also take a look at existing common metadata practices such as [OpenSea's Metadata Standards](https://docs.opensea.io/docs/metadata-standards) and seek to stay backwards compatible with them while enabling more functionality. Through the combination of `String` keys and various return types, both pre-defined URIs or specific attributes may be stored and retrieved with the SRC-7 standard. +We also take a look at existing common metadata practices such as [OpenSea's Metadata Standards](https://docs.opensea.io/docs/metadata-standards) and seek to stay backwards compatible with them while enabling more functionality. Through the combination of `String` keys and various return types, both pre-defined URIs or specific attributes may be stored and retrieved with the SRC-7 standard. -# Specification +## Specification -## Metadata Type +### Metadata Type The following describes an enum that wraps various metadata types into a single return type. There SHALL be the following variants in the `Metadata` enum: -### - `B256` +#### - `B256` The `B256` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `Sting` key pair is of the `b256` type. -### - `Bytes` +#### - `Bytes` The `Bytes` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `String` key pair is of the `Bytes` type. The `Bytes` variant should be used when storing custom data such as but not limited to structs and enums. -### - `Int` +#### - `Int` The `Int` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `Sting` key pair is of the `u64` type. -### - `String` +#### - `String` -The `String` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `String` key pair is of the `String` type. The `String` variant MUST be used when a URI is required but MAY contain any arbitrary `String` data. +The `String` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `String` key pair is of the `String` type. The `String` variant MUST be used when a URI is required but MAY contain any arbitrary `String` data. -## Required Functions +### Required Functions -### `fn metadata(asset: AssetId, key: String) -> Option` +#### `fn metadata(asset: AssetId, key: String) -> Option` This function MUST return valid metadata for the corresponding `asset` and `key`, where the data is either a `B256`, `Bytes`, `Int`, or `String` variant. If the asset does not exist or no metadata exists, the function MUST return `None`. -# Rationale +## Rationale -The SRC-7 standard should allow for data-rich assets to interact with one another in a safe manner. +The SRC-7 standard should allow for data-rich assets to interact with one another in a safe manner. -# Backwards Compatibility +## Backwards Compatibility This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20.md) standard. It also maintains compatibility with existing standards in other ecosystems. -# Security Considerations +## Security Considerations This standard does not introduce any security concerns, as it does not call external contracts, nor does it define any mutations of the contract state. -# Example ABI +## Example ABI -```rust +```sway abi SRC7Metadata { #[storage(read)] fn metadata(asset: AssetId, key: String) -> Option; } ``` -# Example Implementation +## Example Implementation -## [Single Native Asset](../examples/src7-metadata/single_asset/src/single_asset.sw) +### Single Native Asset Example of the SRC-7 implementation where metadata exists for only a single asset with one `SubId`. -## [Mutli Native Asset](../examples/src7-metadata/multi_asset/src/multi_asset.sw) +```sway +{{#include ../examples/src7-metadata/single_asset/src/single_asset.sw}} +``` + +### Mutli Native Asset -Example of the SRC-7 implementation where metadata exists for multiple assets with differing `SubId`s. +Example of the SRC-7 implementation where metadata exists for multiple assets with differing `SubId` values. + +```sway +{{#include ../examples/src7-metadata/multi_asset/src/multi_asset.sw}} +``` diff --git a/SRCs/src-8.md b/docs/src-8-bridged-asset.md similarity index 87% rename from SRCs/src-8.md rename to docs/src-8-bridged-asset.md index cc336b9d..de85ef0e 100644 --- a/SRCs/src-8.md +++ b/docs/src-8-bridged-asset.md @@ -1,26 +1,18 @@ -

- - - SRC-8 logo - -

+# SRC-8: Bridged Asset +The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./src-7.md) and [SRC-20](./src-20.md) standards. -# Abstract - -The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./src-7.md) and [SRC-20](./src-20.md) standards. - -# Motivation +## Motivation The SRC-8 standard seeks to enable relevant data for bridged assets on the Fuel Network. This data includes the origin chain, address, ID, decimals, and any arbitrary data. All metadata queries are done through a single function to facilitate cross-contract calls. -# Prior Art +## Prior Art The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7.md) standard. This standard integrates into the existing [SRC-7](./src-7.md) standard. -# Specification +## Specification -## Asset Creation +### Asset Creation The `SubId` of the asset MUST be the digest of the `sha256(origin_chain_id, origin_asset_address, origin_asset_id)` hash where: @@ -28,45 +20,45 @@ The `SubId` of the asset MUST be the digest of the `sha256(origin_chain_id, orig - `origin_asset_address` is a `b256` of the asset's address on the chain where the asset was originally minted. - `origin_asset_id` is a `b256` of the asset's ID such as an NFT's ID on the chain where the asset was originally minted. IF there is no ID, `b256::zero()` SHALL be used. -## SRC-20 Metadata +### SRC-20 Metadata -Any bridged assets MUST use the name and symbol of the asset on the chain where the asset was originally minted. +Any bridged assets MUST use the name and symbol of the asset on the chain where the asset was originally minted. -## SRC-7 Metadata +### SRC-7 Metadata -### - `bridged:chain` +#### - `bridged:chain` The key `bridged:chain` SHALL return an `String` variant of the chain ID where the asset was originally minted. -### - `bridged:address` +#### - `bridged:address` The key `bridged:address` SHALL return a `B256` variant of the asset's address on the chain where the asset was originally minted. Native assets of a chain that do not have an address such as Ether on Ethereum SHALL use `b256::zero()`. -### - `bridged:id` +#### - `bridged:id` The key `bridged:id` MAY return a `B256` variant of the asset's ID such as an NFT's ID on the chain where the asset was originally minted. IF there is no ID, `None` SHALL be returned. -### - `bridged:decimals` +#### - `bridged:decimals` The key `bridged:decimals` MAY return an `Int` variant of the asset's decimals on the chain where the asset was originally minted. IF there are no decimals, `None` SHALL be returned. -# Rationale +## Rationale The SRC-8 standard should allow for data on any bridged assets on the Fuel Network. This standard builds off existing standards and should allow other contracts to query any relevant information on the bridged asset. -# Backwards Compatibility +## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20.md) standard, and the [SRC-7](./src-7.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20.md) standard, and the [SRC-7](./src-7.md) standard. The standard is also compatible with both tokens and NFTs native to other ecosystems by introducing a token ID element of the original chain. -# Security Considerations +## Security Considerations This standard does not call external contracts, nor does it define any mutations of the contract state. -# Example +## Example -```rust +```sway impl SRC7 for Contract { fn metadata(asset: AssetId, key: String) -> Option { if (asset != AssetId::default()) { @@ -126,4 +118,4 @@ impl SRC20 for Contract { } } } -``` \ No newline at end of file +``` diff --git a/SRCs/src-9.md b/docs/src-9-metadata-keys.md similarity index 85% rename from SRCs/src-9.md rename to docs/src-9-metadata-keys.md index a355ba10..7882cd37 100644 --- a/SRCs/src-9.md +++ b/docs/src-9-metadata-keys.md @@ -1,360 +1,363 @@ -

- - - SRC-9 logo - -

- -# Abstract +# SRC-9: Native Asset The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./src-7.md) and [SRC-20](./src-20.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. -# Motivation +## Motivation The SRC-9 standard seeks to enable relevant data for assets on the Fuel Network. This data may include images, text, contact, or all of the above. All metadata queries are done through a single function to facilitate cross-contract calls. -# Prior Art +## Prior Art The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7.md) standard. This standard integrates into the existing [SRC-7](./src-7.md) standard. -# Specification +## Specification The following keys are reserved for the SRC-9 standard. Use of the keys should follow the SRC-9 specification. -All keys SHALL use snake case. +All keys SHALL use snake case. -## Social +### Social The social prefix SHALL be used for any social media platform and SHALL return usernames. Any social media metadata keys SHALL follow the following syntax `social:site` where: + - The `social` keyword must be prepended to denote this is a social platform - The `site` keyword must be the website or platform of the social -#### - `social:discord` +#### `social:discord` The key `social:discord` SHALL return a `String` variant of a username for the Discord platform. -#### - `social:facebook` +#### `social:facebook` The key `social:facebook` SHALL return a `String` variant of a username for the Facebook platform. -#### - `social:farcaster` +#### `social:farcaster` The key `social:farcaster` SHALL return a `String` variant of a username for the Farcaster platform. -#### - `social:friend.tech` +#### `social:friend.tech` The key `social:friend.tech` SHALL return a `String` variant of a username for the Friend.tech platform. -#### - `social:github` +#### `social:github` The key `social:github` SHALL return a `String` variant of a username for the Github platform. -#### - `social:instagram` +#### `social:instagram` The key `social:instagram` SHALL return a `String` variant of a username for the Instagram platform. -#### - `social:lens` +#### `social:lens` The key `social:lens` SHALL return a `String` variant of a username for the Lens Protocol. -#### - `social:linkedin` +#### `social:linkedin` The key `social:linkedin` SHALL return a `String` variant of a username for the LinkedIn platform. -#### - `social:reddit` +#### `social:reddit` The key `social:reddit` SHALL return a `String` variant of a username for the Reddit platform. -#### - `social:signal` +#### `social:signal` The key `social:signal` SHALL return a `String` variant of a username for the Signal platform. -#### - `social:telegram` +#### `social:telegram` The key `social:telegram` SHALL return a `String` variant of a username for the Telegram platform. -#### - `social:tiktok` +#### `social:tiktok` The key `social:tiktok` SHALL return a `String` variant of a username for the TikTok platform. -#### - `social:x` +#### `social:x` The key `social:x` SHALL return a `String` variant of a username for the X or formerly Twitter platform. -#### - `social:wechat` +#### `social:wechat` The key `social:wechat` SHALL return a `String` variant of a username for the WeChat platform. -#### - `social:whatsapp` +#### `social:whatsapp` The key `social:whatsapp` SHALL return a `String` variant of a username for the WhatsApp platform. -#### - `social:youtube` +#### `social:youtube` The key `social:youtube` SHALL return a `String` variant of a username for the YouTube platform. -## Contact +### Contact The `contact` prefix SHALL be used for any contact information on a particular project's team for an asset. Any contact information metadata keys SHALL follow the following syntax `contract:type` where: + - The `contact` keyword must be prepended to denote this is contact information - The `type` keyword must be the method of contact -The key SHALL use snake case. +The key SHALL use snake case. -#### - `contact:email` +#### `contact:email` The key `contact:email` SHALL return a `String` variant of an email. -#### - `contact:mailing` +#### `contact:mailing` The key `contact:mailing` SHALL return a `String` variant of a mailing address. All mailing addresses MUST follow the UPU addressing format. -#### - `contact:phone` +#### `contact:phone` The key `contact:phone` SHALL return a `String` variant of a phone number. All phone numbers SHALL follow the E.164 standard. -#### - `contact:company` +#### `contact:company` The key `contact:company` SHALL return a `String` variant of a company name. -## External Links +### External Links The `link` prefix SHALL be used for any external webpage hyperlink associated with an asset. Any external webpage metadata keys SHALL follow the following syntax `link:site` where: + - The `link` keyword must be prepended to denote this is an external webpage - The `site` keyword must be an external website -#### - `link:home` +#### `link:home` The key `link:home` SHALL return a `String` variant of the asset's project homepage. -#### - `link:contact` +#### `link:contact` The key `link:contact` SHALL return a `String` variant of the asset's project contact information webpage. -#### - `link:docs` +#### `link:docs` The key `link:docs` SHALL return a `String` variant of the asset's project documentation webpage. -#### - `link:forum` +#### `link:forum` The key `link:forum` SHALL return a `String` variant of the asset's project forum webpage. -#### - `link:blog` +#### `link:blog` The key `link:blog` SHALL return a `String` variant of the asset's project blog. -#### - `link:linktree` +#### `link:linktree` The key `link:linktree` SHALL return a `String` variant of the asset's project linktree information webpage. -## Resources +### Resources The `res` prefix SHALL be used for any resources or general information on an asset. Any resource metadata keys SHALL follow the following syntax `rec:type` where: + - The `res` keyword must be prepended to denote this is a resource - The `type` keyword must be the type of resource -#### - `res:license` +#### `res:license` The key `res:license` SHALL return a `String` variant of the asset's project license. -#### - `res:tos` +#### `res:tos` The key `res:tos` SHALL return a `String` variant of the asset's project Terms of Service. -#### - `res:author` +#### `res:author` The key `res:author` SHALL return a `String` variant of the asset's project author. This MAY be a full name or pseudonym. -#### - `res:about` +#### `res:about` The key `res:about` SHALL return a `String` variant about the asset's project up to 2048 characters. -#### - `res:description` +#### `res:description` The key `res:description` SHALL return a `String` variant describing the asset's project up to 256 characters. -#### - `res:date` +#### `res:date` The key `res:date` SHALL return a `Int` variant of a UNIX timestamp. -#### - `res:block` +#### `res:block` The key `res:block` SHALL return a `Int` variant of a block number. -## Images +### Images The `image` prefix SHALL be used for any image files associated with a singular asset. Any image metadata keys SHALL follow the following syntax `image:type` where: + - The `image` keyword must be prepended to denote this is an image - The `type` keyword must be the file type of the image -#### - `image:svg` +#### `image:svg` The key `image:svg` SHALL return a `String` variant of an SVG image. -#### - `image:png` +#### `image:png` The key `image:png` SHALL return a `String` variant of a URI for a PNG image. -#### - `image:jpeg` +#### `image:jpeg` The key `image:jpeg` SHALL return a `String` variant of a URI for a JPEG image. -#### - `image:webp` +#### `image:webp` The key `image:webp` SHALL return a `String` variant of a URI for a WebP image. -#### - `image:gif` +#### `image:gif` The key `image:gif` SHALL return a `String` variant of a URI for a GIF image. -#### - `image:heif` +#### `image:heif` The key `image:heif` SHALL return a `String` variant of a URI for a HEIF image. -## Video +### Video The `video` prefix SHALL be used for any video files associated with a singular asset. Any video metadata keys SHALL follow the following syntax `video:type` where: + - The `video` keyword must be prepended to denote this is a video - The `type` keyword must be the file type of the video -#### - `video:mp4` +#### `video:mp4` The key `video:mp4` SHALL return a `String` variant of a URI for an MP4 video. -#### - `video:webm` +#### `video:webm` The key `video:webm` SHALL return a `String` variant of a URI for a WebM video. -#### - `video:m4v` +#### `video:m4v` The key `video:m4v` SHALL return a `String` variant of a URI for a M4V video. -#### - `video:ogv` +#### `video:ogv` The key `video:ogv` SHALL return a `String` variant of a URI for an OGV video. -#### - `video:ogg` +#### `video:ogg` The key `video:ogg` SHALL return a `String` variant of a URI for an OGG video. -## Audio +### Audio The `audio` prefix SHALL be used for any audio files associated with a singular asset. Any audio metadata keys SHALL follow the following syntax `audio:type` where: + - The `audio` keyword must be prepended to denote this is audio metadata - The `type` keyword must be the file type of the audio -#### - `audio:mp3` +#### `audio:mp3` The key `audio:mp3` SHALL return a `String` variant of a URI for an MP3 file. -#### - `audio:wav` +#### `audio:wav` The key `audio:wav` SHALL return a `String` variant of a URI for a WAV file. -#### - `audio:oga` +#### `audio:oga` The key `audio:oga` SHALL return a `String` variant of a URI for an OGA file. -## Media +### Media The `media` prefix SHALL be used for any media associated with a particular singular asset. Any media metadata keys SHALL follow the following syntax `media:type` where: + - The `media` keyword must be prepended to denote this is a video - The `type` keyword must be the file type of the media -#### - `media:gltf` +#### `media:gltf` The key `media:gltf` SHALL return a `String` variant of a URI for a glTF file. -#### - `media:glb` +#### `media:glb` The key `media:glb` SHALL return a `String` variant of a URI for a GLB file. -## Logos +### Logos The `logo` prefix SHALL be used for any images associated with a particular asset or project. Any logo metadata keys SHALL follow the following syntax `logo:type` where: + - The `logo` keyword must be prepended to denote this is a logo - The `type` keyword must be the type of logo -#### - `logo:svg` +#### `logo:svg` The key `logo:svg` SHALL return a `String` variant of an SVG image of a logo. -#### - `logo:svg_light` +#### `logo:svg_light` The key `logo:svg_light` SHALL return a `String` variant of an SVG image of a logo for light themes. -#### - `logo:svg_dark` +#### `logo:svg_dark` The key `logo:svg_dark` SHALL return a `String` variant of an SVG image of a logo for dark themes. -#### - `logo:small_light` +#### `logo:small_light` The key `logo:small_light` SHALL return a `String` variant of a URI for a 32x32 PNG image of a logo for light themes. -#### - `logo:small_dark` +#### `logo:small_dark` The key `logo:small_dark` SHALL return a `String` variant of a URI for a 32x32 PNG image of a logo for dark themes. -#### - `logo:medium_light` +#### `logo:medium_light` The key `logo:medium_light` SHALL return a `String` variant of a URI for a 256x256 PNG image of a logo for light themes. -#### - `logo:medium_dark` +#### `logo:medium_dark` The key `logo:medium_dark` SHALL return a `String` variant of a URI for a 256x256 PNG image of a logo for dark themes. -#### - `logo:large_light` +#### `logo:large_light` The key `logo:large_light` SHALL return a `String` variant of a URI for a 1024x1024 PNG image of a logo for light themes. -#### - `logo:large_dark` +#### `logo:large_dark` The key `logo:large_dark` SHALL return a `String` variant of a URI for a 1024x1024 PNG image of a logo for dark themes. -## Attributes +### Attributes The `attr` prefix SHALL be used for any attributes associated with a singular asset. Any attribute metadata keys SHALL follow the following syntax `attr:type` where: + - The `attr` keyword must be prepended to denote this is an attribute - The `type` keyword must be the type of attribute There are no standardized types of attributes. Example: `attr:eyes`. -# Rationale +## Rationale The SRC-9 standard should allow for standardized keys for metadata on the Fuel Network. This standard builds off existing standards and should allow other contracts to query any relevant information on the asset. -# Backwards Compatibility +## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20.md) standard, and the [SRC-7](./src-7.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20.md) standard, and the [SRC-7](./src-7.md) standard. -# Security Considerations +## Security Considerations This standard does not call external contracts, nor does it define any mutations of the contract state. -# Example +## Example -```rust +```sway impl SRC7 for Contract { fn metadata(asset: AssetId, key: String) -> Option { if (asset != AssetId::default()) { From b0d07c303cf0c401d32c4d60a57623ce5e8748e5 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Thu, 30 May 2024 14:55:51 -0600 Subject: [PATCH 02/13] fixes --- .github/workflows/docs.yaml | 2 +- README.md | 20 +++--- docs/.spellcheck.yml | 4 +- docs/index.md | 60 ----------------- docs/spell-check-custom-words.txt | 51 ++++++++++++++- docs/{ => src}/SUMMARY.md | 0 docs/src/index.md | 63 ++++++++++++++++++ docs/{ => src}/src-10-native-bridge.md | 20 +++--- docs/{ => src}/src-11-security-information.md | 8 +-- docs/{ => src}/src-12-contract-factory.md | 2 +- docs/{ => src}/src-13-soulbound-address.md | 4 +- .../src-14-simple-upgradeable-proxies.md | 10 ++- docs/{ => src}/src-2-inline-documentation.md | 64 +++++++++---------- docs/{ => src}/src-20-native-asset.md | 0 docs/{ => src}/src-3-minting-and-burning.md | 14 ++-- docs/{ => src}/src-5-ownership.md | 2 +- docs/{ => src}/src-6-vault.md | 51 +++++++-------- docs/{ => src}/src-7-asset-metadata.md | 8 +-- docs/{ => src}/src-8-bridged-asset.md | 6 +- docs/{ => src}/src-9-metadata-keys.md | 6 +- 20 files changed, 222 insertions(+), 173 deletions(-) delete mode 100644 docs/index.md rename docs/{ => src}/SUMMARY.md (100%) create mode 100644 docs/src/index.md rename docs/{ => src}/src-10-native-bridge.md (86%) rename docs/{ => src}/src-11-security-information.md (92%) rename docs/{ => src}/src-12-contract-factory.md (98%) rename docs/{ => src}/src-13-soulbound-address.md (95%) rename docs/{ => src}/src-14-simple-upgradeable-proxies.md (89%) rename docs/{ => src}/src-2-inline-documentation.md (93%) rename docs/{ => src}/src-20-native-asset.md (100%) rename docs/{ => src}/src-3-minting-and-burning.md (81%) rename docs/{ => src}/src-5-ownership.md (99%) rename docs/{ => src}/src-6-vault.md (80%) rename docs/{ => src}/src-7-asset-metadata.md (92%) rename docs/{ => src}/src-8-bridged-asset.md (93%) rename docs/{ => src}/src-9-metadata-keys.md (96%) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 62c0fc26..d8477216 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -7,5 +7,5 @@ jobs: test: uses: FuelLabs/github-actions/.github/workflows/mdbook-docs.yml@master with: - docs-src-path: 'docs' + docs-src-path: 'docs/src' spellcheck-config-path: 'docs/.spellcheck.yml' \ No newline at end of file diff --git a/README.md b/README.md index 6fadc38f..1da1fa3d 100644 --- a/README.md +++ b/README.md @@ -35,28 +35,28 @@ If you don't find what you're looking for, feel free to create an issue and prop ### Native Assets -- [SRC-20; Native Asset Standard](./SRCs/src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. -- [SRC-3; Mint and Burn](./SRCs/src-3.md) is used to enable mint and burn functionality for fungible assets. -- [SRC-7; Arbitrary Asset Metadata Standard](./SRCs/src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). -- [SRC-9; Metadata Keys Standard](./SRCs/src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. -- [SRC-6; Vault Standard](./SRCs/src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. +- [SRC-20; Native Asset Standard](./docs/src/src-20-native-asset.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./docs/src/src-3-minting-and-burning.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./docs/src/src-7-asset-metadata.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./docs/src/src-9-metadata-keys.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./docs/src/src-6-vault.md) defines the implementation of a standard API for asset vaults developed in Sway. ### Access Control -- [SRC-5; Ownership Standard](./SRCs/src-5.md) is used to restrict function calls to admin users in contracts. +- [SRC-5; Ownership Standard](./docs/src/src-5-ownership.md) is used to restrict function calls to admin users in contracts. ### Contracts -- [SRC-12; Contract Factory](./SRCs/src-12.md) defines the implementation of a standard API for contract factories. +- [SRC-12; Contract Factory](./docs/src/src-12-contract-factory.md) defines the implementation of a standard API for contract factories. ### Bridge -- [SRC-8; Bridged Asset](./SRCs/src-8.md) defines the metadata required for an asset bridged to the Fuel Network. -- [SRC-10; Native Bridge Standard](./SRCs/src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. +- [SRC-8; Bridged Asset](./docs/src/src-8-bridged-asset.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./docs/src/src-10-native-bridge.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. ### Documentation -- [SRC-2; Inline Documentation](./SRCs/src-2.md) defines how to document your Sway files. +- [SRC-2; Inline Documentation](./docs/src/src-2-inline-documentation.md) defines how to document your Sway files. ## Using a standard diff --git a/docs/.spellcheck.yml b/docs/.spellcheck.yml index 568e0c5e..246247ef 100644 --- a/docs/.spellcheck.yml +++ b/docs/.spellcheck.yml @@ -23,6 +23,6 @@ matrix: - code - pre sources: - - 'docs/*.md' - - 'docs/**/*.md' + - 'docs/src/*.md' + - 'docs/src/**/*.md' default_encoding: utf-8 \ No newline at end of file diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index d9c5f3ef..00000000 --- a/docs/index.md +++ /dev/null @@ -1,60 +0,0 @@ -# Sway Standards - -The purpose of the Sway Standards [repository](https://github.com/FuelLabs/sway-standards) is to contain standards for the Sway Language which users can import and use. - -Standards in this repository may be in various stages of development. Use of draft standards and feedback on the proposed standards is encouraged. To use a draft, search for a standard using the appropriate GitHub label and implement the standard ABI into your contract. - -If you don't find what you're looking for, feel free to create an issue and propose a new standard! - -> **Note** -> All standards currently use `forc v0.60.0`. - -## Using a standard - -To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: - -```toml -standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.4.4" } -``` - -> **NOTE:** -> Be sure to set the tag to the latest release. - -You may then import your desired standard in your Sway Smart Contract as so: - -```sway -use standards::::; -``` - -For example, to import the SRC-20 Native Asset Standard use the following statement in your Sway Smart Contract file: - -```sway -use standards::src20::SRC20; -``` - -## Standards - -### Native Assets - -- [SRC-20; Native Asset Standard](./SRCs/src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. -- [SRC-3; Mint and Burn](./SRCs/src-3.md) is used to enable mint and burn functionality for fungible assets. -- [SRC-7; Arbitrary Asset Metadata Standard](./SRCs/src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). -- [SRC-9; Metadata Keys Standard](./SRCs/src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. -- [SRC-6; Vault Standard](./SRCs/src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. - -### Access Control - -- [SRC-5; Ownership Standard](./SRCs/src-5.md) is used to restrict function calls to admin users in contracts. - -### Contracts - -- [SRC-12; Contract Factory](./SRCs/src-12.md) defines the implementation of a standard API for contract factories. - -### Bridge - -- [SRC-8; Bridged Asset](./SRCs/src-8.md) defines the metadata required for an asset bridged to the Fuel Network. -- [SRC-10; Native Bridge Standard](./SRCs/src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. - -### Documentation - -- [SRC-2; Inline Documentation](./SRCs/src-2.md) defines how to document your Sway files. diff --git a/docs/spell-check-custom-words.txt b/docs/spell-check-custom-words.txt index 818c9a71..8d09d7e9 100644 --- a/docs/spell-check-custom-words.txt +++ b/docs/spell-check-custom-words.txt @@ -210,4 +210,53 @@ namespacing unsafety prioritizations polymorphism -ContractId \ No newline at end of file +ContractId +ENS's +OpenSea's +URI +URIs +Multi +sha +EIP +rata +withdrawable +subvault +soulbound +configurables +Configurables +libs +backticks +enum's +NFT's +OpenZeppelin +OpenZeppelin's +UUPS +minimalistic +permissioning +Permissioning +Solana +hardcode +prepended +Farcaster +LinkedIn +Reddit +TikTok +WeChat +WhatsApp +UPU +webpage +linktree +SVG +PNG +URI +URIs +WebP +HEIF +WebM +OGV +OGG +WAV +OGA +glTF +GLB +Uninitalized \ No newline at end of file diff --git a/docs/SUMMARY.md b/docs/src/SUMMARY.md similarity index 100% rename from docs/SUMMARY.md rename to docs/src/SUMMARY.md diff --git a/docs/src/index.md b/docs/src/index.md new file mode 100644 index 00000000..32c2f24a --- /dev/null +++ b/docs/src/index.md @@ -0,0 +1,63 @@ +# Sway Standards + +The purpose of the Sway Standards [repository](https://github.com/FuelLabs/sway-standards) is to contain standards for the Sway Language which users can import and use. + +Standards in this repository may be in various stages of development. Use of draft standards and feedback on the proposed standards is encouraged. To use a draft, search for a standard using the appropriate GitHub label and implement the standard ABI into your contract. + +If you don't find what you're looking for, feel free to create an issue and propose a new standard! + +> **Note** +> All standards currently use `forc v0.60.0`. + +## Using a standard + +To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: + +```toml +standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.4.4" } +``` + +> **NOTE:** +> Be sure to set the tag to the latest release. + +You may then import your desired standard in your Sway Smart Contract as so: + +```sway +use standards::::; +``` + +For example, to import the SRC-20 Native Asset Standard use the following statement in your Sway Smart Contract file: + +```sway +use standards::src20::SRC20; +``` + +## Standards + +### Native Assets + +- [SRC-20; Native Asset Standard](./src-20-native-asset.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./src-3-minting-and-burning.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./src-7-asset-metadata.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./src-9-metadata-keys.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./src-6-vault.md) defines the implementation of a standard API for asset vaults developed in Sway. +- [SRC-13; Soulbound Address](./src-13-soulbound-address.md) defines the implementation of a soulbound address. + +### Security and Access Control + +- [SRC-5; Ownership Standard](./src-5-ownership.md) is used to restrict function calls to admin users in contracts. +- [SRC-11; Security Information Standard](./src-11-security-information.md) is used to make communication information readily available in the case white hat hackers find a vulnerability in a contract. + +### Contracts + +- [SRC-12; Contract Factory](./src-12-contract-factory.md) defines the implementation of a standard API for contract factories. +- [SRC-14; Simple Upgradeable Proxies](./src-14-simple-upgradeable-proxies.md) defines the implementation of an upgradeable proxy contract. + +### Bridge + +- [SRC-8; Bridged Asset](./src-8-bridged-asset.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./src-10-native-bridge.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. + +### Documentation + +- [SRC-2; Inline Documentation](./src-2-inline-documentation.md) defines how to document your Sway files. diff --git a/docs/src-10-native-bridge.md b/docs/src/src-10-native-bridge.md similarity index 86% rename from docs/src-10-native-bridge.md rename to docs/src/src-10-native-bridge.md index c82a2e6f..421ee99f 100644 --- a/docs/src-10-native-bridge.md +++ b/docs/src/src-10-native-bridge.md @@ -10,7 +10,7 @@ A standard interface for bridges intends to provide a safe and efficient bridge The standard is centered on Fuel’s [Bridge Architecture](https://github.com/FuelLabs/fuel-bridge/blob/main/docs/ARCHITECTURE.md). Fuel's bridge system is built on a message protocol that allows to send (and receive) messages between entities located in two different blockchains. -The following standard takes reference from the [FungibleBridge](https://github.com/FuelLabs/fuel-bridge/blob/3971081850e7961d9b649edda4cad8a848ee248e/packages/fungible-token/bridge-fungible-token/src/interface.sw#L22) ABI defined in the fuel-bridge repository. +The following standard takes reference from the [`FungibleBridge`](https://github.com/FuelLabs/fuel-bridge/blob/3971081850e7961d9b649edda4cad8a848ee248e/packages/fungible-token/bridge-fungible-token/src/interface.sw#L22) ABI defined in the fuel-bridge repository. ## Specification @@ -23,7 +23,7 @@ The following functions MUST be implemented to follow the SRC-10; Native Bridge The `process_message()` function accepts incoming deposit messages from the canonical chain and issues the corresponding bridged asset. - This function MUST parse a message at the given `message_index` index. -- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8.md). +- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md). - This function SHALL issue a refund if there is an error in the bridging process. ### - `fn withdraw(to_address: b256)` @@ -45,19 +45,19 @@ The `claim_refund()` function is called if something goes wrong in the bridging ### `DepositType` -The `DepositType` enum decribes whether the bridged deposit is made to a address, contract, or contract and contains additional metatdata. There MUST be the following varients in the `DepositType` enum: +The `DepositType` enum describes whether the bridged deposit is made to a address, contract, or contract and contains additional metadata. There MUST be the following variants in the `DepositType` enum: -#### Address: `()` +#### `Address`: `()` -The `Address` varient MUST represent when the deposit is made to an address on the Fuel chain. +The `Address` variant MUST represent when the deposit is made to an address on the Fuel chain. -#### Contract: `()` +#### `Contract`: `()` -The `Contract` varient MUST represent when the deposit is made to an contract on the Fuel chain. +The `Contract` variant MUST represent when the deposit is made to an contract on the Fuel chain. -#### ContractWithData: `()` +#### `ContractWithData`: `()` -The `ContractWithData` varient MUST represent when the deposit is made to an contract and contains additional metadata for the Fuel chain. +The `ContractWithData` variant MUST represent when the deposit is made to an contract and contains additional metadata for the Fuel chain. #### Example @@ -148,7 +148,7 @@ pub struct MetadataMessage { ## Required Standards -Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./src-8.md) for all bridged assets. +Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md) for all bridged assets. ## Rationale diff --git a/docs/src-11-security-information.md b/docs/src/src-11-security-information.md similarity index 92% rename from docs/src-11-security-information.md rename to docs/src/src-11-security-information.md index 8e29b9bd..314b3ca5 100644 --- a/docs/src-11-security-information.md +++ b/docs/src/src-11-security-information.md @@ -8,7 +8,7 @@ White hat hackers may find bugs or exploits in contracts that they want to repor ## Prior Art -The [security.txt](https://github.com/neodyme-labs/solana-security-txt) library for Solana has explored this idea. This standard takes inspiration from the library, with some changes. +The [`security.txt`](https://github.com/neodyme-labs/solana-security-txt) library for Solana has explored this idea. This standard takes inspiration from the library, with some changes. ## Specification @@ -21,7 +21,7 @@ The following describes the `SecurityInformation` type. - The struct MAY contain a URL or the information directly for the following fields: `project_url`, `policy`, `encryption`, `source_code`, `auditors`, `acknowledgments`, `additional_information`. - The struct MUST contain the information directly for the following fields: `name`, `contact_information`, `preferred_languages`, `source_release`, and `source_revision`. - The struct MUST contain at least one item in the `preferred_languages` field's `Vec`, if it is not `None`. Furthermore, the string should only contain the [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) language code and nothing else. -- The struct MUST contain at least one item in the `contact_information` field's `Vec`. Furthermore, the string should follow the following format `:`. Where `contact_type` describes the method of contact (eg. `email` or `discord`) and `contact_information` describes the information needed to contact (eg. `example@example.com` or `@EXAMPLE`). +- The struct MUST contain at least one item in the `contact_information` field's `Vec`. Furthermore, the string should follow the following format `:`. Where `contact_type` describes the method of contact (e.g. `email` or `discord`) and `contact_information` describes the information needed to contact (e.g. `example@example.com` or `@EXAMPLE`). #### `name: String` @@ -54,11 +54,11 @@ A URL to the project's source code. #### `source_release: Option` -The release identifier of this build, ideally corresponding to a tag on git that can be rebuilt to reproduce the same binary. 3rd party build verification tools will use this tag to identify a matching github release. +The release identifier of this build, ideally corresponding to a tag on git that can be rebuilt to reproduce the same binary. 3rd party build verification tools will use this tag to identify a matching GitHub release. #### `source_revision: Option` -The revision identifier of this build, usually a git commit hash that can be rebuilt to reproduce the same binary. 3rd party build verification tools will use this tag to identify a matching github release. +The revision identifier of this build, usually a git commit hash that can be rebuilt to reproduce the same binary. 3rd party build verification tools will use this tag to identify a matching GitHub release. #### `auditors: Option>` diff --git a/docs/src-12-contract-factory.md b/docs/src/src-12-contract-factory.md similarity index 98% rename from docs/src-12-contract-factory.md rename to docs/src/src-12-contract-factory.md index cdadb500..aca899c0 100644 --- a/docs/src-12-contract-factory.md +++ b/docs/src/src-12-contract-factory.md @@ -94,7 +94,7 @@ Example of the SRC-12 implementation where contract deployments contain configur ### Without Configurables -Example of the SRC-12 implementation where all contract deployments are identitcal and thus have the same bytecode and root. +Example of the SRC-12 implementation where all contract deployments are identical and thus have the same bytecode and root. ```sway {{#include ../examples/src12-contract-factory/without_configurables/src/without_configurables.sw}} diff --git a/docs/src-13-soulbound-address.md b/docs/src/src-13-soulbound-address.md similarity index 95% rename from docs/src-13-soulbound-address.md rename to docs/src/src-13-soulbound-address.md index 28b49a80..197476e2 100644 --- a/docs/src-13-soulbound-address.md +++ b/docs/src/src-13-soulbound-address.md @@ -4,7 +4,7 @@ The following standard allows for the implementation of Soulbound Address on the ## Motivation -A standard enables soulbound assets on Fuel and allows external applications to query and provide soulbound assets, whether that be decentralized exchanges, wallets, or other external applications. +This standard enables soulbound assets on Fuel and allows external applications to query and provide soulbound assets, whether that be decentralized exchanges, wallets, or other external applications. ## Prior Art @@ -60,7 +60,7 @@ On the Fuel Network, the process for sending any [Native Assets](https://docs.fu ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20-native-asset.md) standard. ## Security Considerations diff --git a/docs/src-14-simple-upgradeable-proxies.md b/docs/src/src-14-simple-upgradeable-proxies.md similarity index 89% rename from docs/src-14-simple-upgradeable-proxies.md rename to docs/src/src-14-simple-upgradeable-proxies.md index 10140dc2..da23549a 100644 --- a/docs/src-14-simple-upgradeable-proxies.md +++ b/docs/src/src-14-simple-upgradeable-proxies.md @@ -1,7 +1,5 @@ # SRC-14: Simple Upgradeable Proxies -## Abstract - The following proposes a standard for simple upgradeable proxies. ## Motivation @@ -18,7 +16,7 @@ Proxy designs fall into three essential categories: 2. Upgradeable proxies such as [UUPS](https://eips.ethereum.org/EIPS/eip-1822) which store a target in storage and delegate all calls to it 3. [Diamonds](https://eips.ethereum.org/EIPS/eip-2535) which are both upgradeable and can point to multiple targets on a per method basis -This document falls in the second category. We want to standardize the implementation of simple upgradeable passthrough contracts. +This document falls in the second category. We want to standardize the implementation of simple upgradeable pass-through contracts. The FuelVM provides an `LDC` instruction that is used by Sway's `std::execution::run_external` to provide a similar behavior to EVM's `delegatecall` and execute instructions from another contract while retaining one's own storage context. This is the intended means of implementation of this standard. @@ -45,7 +43,7 @@ This method SHOULD implement access controls such that the target can only be ch ## Rationale -This standard is meant to provide simple upgradability, it is deliberately minimalistic and does not provide the level of functionality of diamonds. +This standard is meant to provide simple upgradeability, it is deliberately minimalistic and does not provide the level of functionality of diamonds. Unlike in [UUPS](https://eips.ethereum.org/EIPS/eip-1822), this standard requires that the upgrade function is part of the proxy and not its target. This prevents irrecoverable updates if a proxy is made to point to another proxy and no longer has access to upgrade logic. @@ -59,7 +57,7 @@ As it is the first attempt to standardize proxy implementation, we do not consid ## Security Considerations Permissioning proxy target changes is the primary consideration here. -This standard is not opinionated about means of achieving this, use of [SRC-5](https://github.com/FuelLabs/sway-standards/blob/master/SRCs/src-5.md) is recommended. +This standard is not opinionated about means of achieving this, use of [SRC-5](./src-5-ownership.md) is recommended. ## Example ABI @@ -82,7 +80,7 @@ Example of a minimal SRC-14 implementation with no access control. ### Owned Proxy -Example of a SRC-14 implementation that also implements [SRC-5](https://github.com/FuelLabs/sway-standards/blob/master/SRCs/src-5.md). +Example of a SRC-14 implementation that also implements [SRC-5](./src-5-ownership.md). ```sway {{#include ../examples/examples/src14-simple-proxy/owned/src/owned.sw}} diff --git a/docs/src-2-inline-documentation.md b/docs/src/src-2-inline-documentation.md similarity index 93% rename from docs/src-2-inline-documentation.md rename to docs/src/src-2-inline-documentation.md index 277e3ddf..83e7f784 100644 --- a/docs/src-2-inline-documentation.md +++ b/docs/src/src-2-inline-documentation.md @@ -1,7 +1,5 @@ # SRC-2: Inline Documentation -## Abstract - The following standard intends to define the structure and organization of inline documentation for functions, structs, enums, storage, configurables, and more within the Sway Language. This is a living standard. ## Motivation @@ -18,7 +16,7 @@ A number of pre-existing functions in the [sway standard library](https://github The following describes the structure and order of inline documentation for functions. Some sections MAY NOT apply to each function. When a section is not relevant it SHALL be omitted. -#### Description +#### Functions: Description This section has no header. A simple explanation of the function's intent or functionality. @@ -28,7 +26,7 @@ Example: /// This function computes the hash of two numbers. ``` -#### Additional Information +#### Functions: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the function's intent or functionality. @@ -40,7 +38,7 @@ Example: /// This function also has some complex behaviors. ``` -#### Arguments +#### Functions: Arguments This section has a `h1` header. Lists the arguments of the function's definition with the `*` symbol and describes each one. The list SHALL provide the name, type, and description. The argument SHALL be encapsulated between two backticks: `argument`. The type SHALL be encapsulated between two square brackets: [type]. @@ -52,7 +50,7 @@ Example: /// * `argument_1`: [Identity] - This argument is a user to be hashed. ``` -#### Returns +#### Functions: Returns This section has a `h1` header. Lists the return values of the function with the `*` symbol and describes each one. This list SHALL be in the order of the return index and provide the type and description. The type SHALL be encapsulated between two square brackets: [type]. @@ -64,7 +62,7 @@ Example: /// * [u64] - The number of hashes performed. ``` -#### Reverts +#### Functions: Reverts This section has a `h1` header. Lists the cases in which the function will revert starting with the `*` symbol. The list SHALL be in the order of occurrence within the function. @@ -76,7 +74,7 @@ Example: /// * When `argument_1` or `argument_2` are a zero [b256]. ``` -#### Number of Storage Accesses +#### Functions: Number of Storage Accesses This section has a `h1` header. Provides information on how many storage reads, writes, and clears occur within the function. @@ -89,7 +87,7 @@ Example: /// * Clears: `2` ``` -#### Examples +#### Functions: Examples This section has a `h1` header. This section provides an example of the use of the function. This section is not required to follow the SRC-2 standard however encouraged for auxiliary and library functions. @@ -104,11 +102,11 @@ Example: /// } ``` -## Structs +### Structs The following describes the structure and order of inline documentation for structs. Some sections MAY NOT apply to each struct. When a section is not relevant it SHALL be omitted. -#### Description +#### Structs: Description This section has no header. A simple explanation of the struct's purpose or functionality. @@ -118,7 +116,7 @@ Example: /// This struct contains information on an NFT. ``` -#### Additional Information +#### Structs: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the struct's purpose or functionality. @@ -134,7 +132,7 @@ Example: The following describes the structure and order of inline documentation for fields within structs. Some sections MAY NOT apply to each field. When a section is not relevant it SHALL be omitted. -#### Description +#### Fields: Description This section has no header. Each field SHALL have its own description with a simple explanation of the field's purpose or functionality. @@ -145,7 +143,7 @@ Example: field_1: Identity, ``` -#### Additional Information +#### Fields: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the field's purpose or functionality. @@ -157,11 +155,11 @@ Example: /// This field also has some complex behaviors. ``` -## Enums +### Enums The following describes the structure and order of inline documentation for enums. Some sections MAY NOT apply to each enum. When a section is not relevant it SHALL be omitted. -#### Description +#### Enums: Description This section has no header. A simple explanation of the enum's purpose or functionality. @@ -171,7 +169,7 @@ Example: /// This enum holds the state of a contract. ``` -#### Additional Information +#### Enums: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the enum's purpose or functionality. @@ -187,7 +185,7 @@ Example: The following describes the structure and order of inline documentation for fields within enums. Some sections MAY NOT apply to each field. When a section is not relevant it SHALL be omitted. -#### Description +#### Variant: Description This section has no header. Each variant SHALL have its own description with a simple explanation of the variant's purpose or functionality. @@ -200,7 +198,7 @@ variant_1: (), variant_2: Identity, ``` -#### Additional Information +#### Variant: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the variant's purpose or functionality. @@ -212,19 +210,19 @@ Example: /// This variant also has some complex behaviors. ``` -## Errors +### Errors In Sway, errors are recommended to be enums. They SHALL follow the same structure and order for inline documentation as described above for enums. Some sections MAY NOT apply to each error. When a section is not relevant it SHALL be omitted. -## Logs +### Logs In Sway, logs are recommended to be structs. They SHALL follow the same structure and order for inline documentation as described above for structs. Some sections MAY NOT apply to each log. When a section is not relevant it SHALL be omitted. -## Storage +### Storage The following describes the structure and order of inline documentation for variables within the storage block. Some sections MAY NOT apply to each storage variable. When a section is not relevant it SHALL be omitted. -#### Description +#### Storage: Description This section has no header. A simple explanation of the storage variable's purpose or functionality. @@ -234,7 +232,7 @@ Example: /// This storage variable is used for state. ``` -#### Additional Information +#### Storage: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the storage variable's purpose or functionality. @@ -246,11 +244,11 @@ Example: /// This storage variable maps a user to a state. ``` -## Configurable +### Configurable The following describes the structure and order of inline documentation for variables in the configurable block. Some sections MAY NOT apply to each storage variable. When a section is not relevant it SHALL be omitted. -#### Description +#### Configurable: Description This section has no header. A simple explanation of the configurable variable's purpose or functionality. @@ -260,7 +258,7 @@ Example: /// This configurable variable is used for an address. ``` -#### Additional Information +#### Configurable: Additional Information This section has a `h1` header. This section is directly below the description and can provide additional information beyond the configurable variable's purpose or functionality. @@ -272,7 +270,7 @@ Example: /// This configurable variable makes security assumptions. ``` -## Other Sections +### Other Sections If the above described sections are not relevant for the information that needs to documented, a custom section with a arbitrary `h1` header may be utilized. @@ -300,7 +298,7 @@ This standard will improve security by providing developers with relevant inform ## Examples -## Function Example +### Function Example ```sway /// Ensures that the sender is the owner. @@ -341,7 +339,7 @@ pub fn only_owner(self, number: u64) -> bool { } ``` -## Struct Examples +### Struct Examples ```sway /// Metadata that is tied to an asset. @@ -361,7 +359,7 @@ pub struct Bid { } ``` -## Enum Examples +### Enum Examples ```sway /// Determines the state of ownership. @@ -383,7 +381,7 @@ pub enum AccessError { } ``` -## Storage Examples +### Storage Examples ```sway storage { @@ -398,7 +396,7 @@ storage { } ``` -## Configurable Example +### Configurable Example ```sway configurable { diff --git a/docs/src-20-native-asset.md b/docs/src/src-20-native-asset.md similarity index 100% rename from docs/src-20-native-asset.md rename to docs/src/src-20-native-asset.md diff --git a/docs/src-3-minting-and-burning.md b/docs/src/src-3-minting-and-burning.md similarity index 81% rename from docs/src-3-minting-and-burning.md rename to docs/src/src-3-minting-and-burning.md index d2970f6d..53fd3525 100644 --- a/docs/src-3-minting-and-burning.md +++ b/docs/src/src-3-minting-and-burning.md @@ -1,14 +1,14 @@ # SRC-3: Minting and Burning Native Assets -The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./src-20.md) standard. +The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./src-20-native-asset.md) standard. ## Motivation -The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./src-20.md) standard. +The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./src-20-native-asset.md) standard. ## Prior Art -Minting and burning were initially added to the [SRC-20](./src-20.md) standard. +Minting and burning were initially added to the [SRC-20](./src-20-native-asset.md) standard. ## Specification @@ -31,7 +31,7 @@ This function MAY contain arbitrary conditions for minting, and revert if those This function MUST burn `amount` coins with the sub-identifier `sub_id` and MUST ensure the `AssetId` of the asset is the sha-256 hash of `(ContractId, SubId)` for the implementing contract. This function MUST ensure at least `amount` coins have been transferred to the implementing contract. -This function MUST update the total supply defined in the [SRC-20](./src-20.md) standard. +This function MUST update the total supply defined in the [SRC-20](./src-20-native-asset.md) standard. This function MAY contain arbitrary conditions for burning, and revert if those conditions are not met. ##### Burn Arguments @@ -41,16 +41,16 @@ This function MAY contain arbitrary conditions for burning, and revert if those ## Rationale -This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./src-20.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. +This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./src-20-native-asset.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./src-20.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./src-20-native-asset.md) standard. ## Security Considerations This standard may introduce security considerations if no checks are implemented to ensure the calling of the `mint()` function is deemed valid or permitted. Checks are highly encouraged. -The burn function may also introduce a security consideration if the total supply within the [SRC-20](./src-20.md) standard is not modified. +The burn function may also introduce a security consideration if the total supply within the [SRC-20](./src-20-native-asset.md) standard is not modified. ## Example ABI diff --git a/docs/src-5-ownership.md b/docs/src/src-5-ownership.md similarity index 99% rename from docs/src-5-ownership.md rename to docs/src/src-5-ownership.md index 03ef56d6..c8c6ae38 100644 --- a/docs/src-5-ownership.md +++ b/docs/src/src-5-ownership.md @@ -60,7 +60,7 @@ This error MUST be emitted when `only_owner()` reverts. In order to provide a universal method of administrative capabilities, SRC-5 will further enable interoperability between applications and provide safeguards for smart contract security. -## Backwards Compatability +## Backwards Compatibility The SRC-5 standard is compatible with the [sway-libs](https://github.com/FuelLabs/sway-libs) repository pre-existing Ownership library. Considerations should be made to best handle multiple owners or admins. diff --git a/docs/src-6-vault.md b/docs/src/src-6-vault.md similarity index 80% rename from docs/src-6-vault.md rename to docs/src/src-6-vault.md index 7b0b8380..cd90d844 100644 --- a/docs/src-6-vault.md +++ b/docs/src/src-6-vault.md @@ -1,6 +1,6 @@ # SRC-6: Vault -The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./src-20.md) standard. +The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./src-20-native-asset.md) standard. ## Motivation @@ -23,31 +23,31 @@ This function takes the `receiver` Identity and the SubId `vault_sub_id` of the - This function MUST allow for depositing of the underlying asset in exchange for pro-rata shares of the vault. - This function MAY reject arbitrary assets based on implementation and MUST revert if unaccepted assets are forwarded. - This function MAY reject any arbitrary `receiver` based on implementation and MUST revert in the case of a blacklisted or non-whitelisted `receiver`. -- This function MUST mint an asset representing the pro-rata share of the vault, with the SubId of the `sha256((underlying_asset, vault_sub_id))` digest, where `underlying_asset` is the AssetId of the deposited asset and the `vault_sub_id` is the id of the vault. +- This function MUST mint an asset representing the pro-rata share of the vault, with the SubId of the `sha256((underlying_asset, vault_sub_id))` digest, where `underlying_asset` is the `AssetId` of the deposited asset and the `vault_sub_id` is the id of the vault. - This function MUST emit a `Deposit` log. - This function MUST return the amount of minted shares. #### `fn withdraw(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> u64` -This function takes the `receiver` Identity, the `underlying_asset` AssetId, and the `vault_sub_id` of the sub vault, as arguments and returns the amount of assets transferred to the `receiver`. +This function takes the `receiver` Identity, the `underlying_asset` `AssetId`, and the `vault_sub_id` of the sub vault, as arguments and returns the amount of assets transferred to the `receiver`. - This function MUST allow for redeeming of the vault shares in exchange for a pro-rata amount of the underlying assets. -- This function MUST revert if any AssetId other than the AssetId representing the underlying asset's shares for the given sub vault at `vault_sub_id` is forwarded. (i.e. transferred share's AssetId must be equal to `AssetId::new(ContractId::this(), sha256((underlying_asset, vault_sub_id))`) +- This function MUST revert if any `AssetId` other than the `AssetId` representing the underlying asset's shares for the given sub vault at `vault_sub_id` is forwarded. (i.e. transferred share's `AssetId` must be equal to `AssetId::new(ContractId::this(), sha256((underlying_asset, vault_sub_id))`) - This function MUST burn the received shares. - This function MUST emit a `Withdraw` log. - This function MUST return amount of assets transferred to the receiver. #### `fn managed_assets(underlying_asset: AssetId, vault_sub_id: SubId) -> u64` -This function returns the total assets under management by vault. Includes assets controlled by the vault but not directly possessed by vault. It takes the `underlying_asset` AssetId and the `vault_sub_id` of the sub vault as arguments and returns the total amount of assets of AssetId under management by vault. +This function returns the total assets under management by vault. Includes assets controlled by the vault but not directly possessed by vault. It takes the `underlying_asset` `AssetId` and the `vault_sub_id` of the sub vault as arguments and returns the total amount of assets of `AssetId` under management by vault. -- This function MUST return total amount of assets of `underlying_asset` AssetId under management by vault. -- This function MUST return 0 if there are no assets of `underlying_asset` AssetId under management by vault. +- This function MUST return total amount of assets of `underlying_asset` `AssetId` under management by vault. +- This function MUST return 0 if there are no assets of `underlying_asset` `AssetId` under management by vault. - This function MUST NOT revert under any circumstances. #### `fn max_depositable(receiver: Identity, underlying_asset: AssetId, vault_sub_id: SubId) -> Option` -This is a helper function for getting the maximum amount of assets that can be deposited. It takes the hypothetical `receiver` Identity, the `underlying_asset` AssetId, and the `vault_sub_id` SubId of the sub vault as an arguments and returns the maximum amount of assets that can be deposited into the contract, for the given asset. +This is a helper function for getting the maximum amount of assets that can be deposited. It takes the hypothetical `receiver` `Identity`, the `underlying_asset` `AssetId`, and the `vault_sub_id` `SubId` of the sub vault as an arguments and returns the maximum amount of assets that can be deposited into the contract, for the given asset. - This function MUST return the maximum amount of assets that can be deposited into the contract, for the given `underlying_asset`, if the given `vault_sub_id` vault exists. - This function MUST return an `Some(amount)` if the given `vault_sub_id` vault exists. @@ -75,27 +75,27 @@ The `Deposit` struct MUST be logged whenever new shares are minted via the `depo The `Deposit` log SHALL have the following fields. -##### - `caller`: `Identity` +##### `caller`: `Identity` The `caller` field MUST represent the `Identity` which called the deposit function. -##### - `receiver`: `Identity` +##### `receiver`: `Identity` The `receiver` field MUST represent the `Identity` which received the vault shares. -##### - `underlying_asset`: `AssetId` +##### `underlying_asset`: `AssetId` The `underlying_asset` field MUST represent the `AssetId` of the asset which was deposited into the vault. -##### - `vault_sub_id`: `SubId` +##### `vault_sub_id`: `SubId` The `vault_sub_id` field MUST represent the `SubId` of the vault which was deposited into. -##### - `deposited_amount`: `u64` +##### `deposited_amount`: `u64` The `deposited_amount` field MUST represent the `u64` amount of assets deposited into the vault. -##### - `minted_shares`: `u64` +##### `minted_shares`: `u64` The `minted_shares` field MUST represent the `u64` amount of shares minted. @@ -107,27 +107,28 @@ The `Withdraw` struct MUST be logged whenever shares are redeemed for assets via The `Withdraw` log SHALL have the following fields. -##### - `caller`: `Identity` + +##### `caller`: `Identity` The `caller` field MUST represent the Identity which called the withdraw function. -##### - `receiver`: `Identity` +##### `receiver`: `Identity` The `receiver` field MUST represent the Identity which received the withdrawn assets. -##### - `underlying_asset`: `AssetId` +##### `underlying_asset`: `AssetId` -The `underlying_asset` field MUST represent the AssetId of the asset that was withdrawn. +The `underlying_asset` field MUST represent the `AssetId` of the asset that was withdrawn. -##### - `vault_sub_id`: `SubId` +##### `vault_sub_id`: `SubId` The `vault_sub_id` field MUST represent the SubId of the vault from which was withdrawn. -##### - `withdrawn_amount`: `u64` +##### `withdrawn_amount`: `u64` The `withdrawn_amount` field MUST represent the `u64` amount of coins withdrawn. -##### - `burned_shares`: `u64` +##### `burned_shares`: `u64` The `burned_shares` field MUST represent the `u64` amount of shares burned. @@ -137,7 +138,7 @@ The ABI discussed covers the known use cases of asset vaults while allowing safe ## Backwards Compatibility -This standard is fully compatible with the [SRC-20 standard](./src-20.md). +This standard is fully compatible with the [SRC-20 standard](./src-20-native-asset.md). ## Security Considerations @@ -170,7 +171,7 @@ abi SRC6 { ### Multi Asset Vault -A basic implementation of the vault standard that supports any number of sub vaults being created for every AssetId. +A basic implementation of the vault standard that supports any number of sub vaults being created for every `AssetId`. ```sway {{#include ../examples/src6-vault/multi_asset_vault/src/main.sw}} @@ -178,7 +179,7 @@ A basic implementation of the vault standard that supports any number of sub vau ### Single Asset Vault -A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single AssetId. +A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single `AssetId`. ```sway {{#include ../examples/src6-vault/single_asset_vault/src/main.sw}} @@ -186,7 +187,7 @@ A basic implementation of the vault standard demonstrating how to restrict depos ## Single Asset Single Sub Vault -A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single AssetId, and to a single Sub vault. +A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single `AssetId`, and to a single Sub vault. ```sway {{#include ../examples/src6-vault/single_asset_single_sub_vault/src/main.sw}} diff --git a/docs/src-7-asset-metadata.md b/docs/src/src-7-asset-metadata.md similarity index 92% rename from docs/src-7-asset-metadata.md rename to docs/src/src-7-asset-metadata.md index cdba678f..4e6654ad 100644 --- a/docs/src-7-asset-metadata.md +++ b/docs/src/src-7-asset-metadata.md @@ -1,6 +1,6 @@ # SRC-7: Arbitrary Native Asset Metadata -The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./src-20.md) standard. +The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./src-20-native-asset.md) standard. ## Motivation @@ -10,7 +10,7 @@ The SRC-7 standard seeks to enable data-rich assets on the Fuel Network while ma The use of generic metadata was originally found in the Sway-Lib's [NFT Library](https://github.com/FuelLabs/sway-libs/tree/v0.12.0/libs/nft) which did not use Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). This library has since been deprecated. -A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./src-20.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. +A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./src-20-native-asset.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. The standard takes inspiration from [ENS's public resolver](https://docs.ens.domains/contract-api-reference/publicresolver) with the use of a `String` as the key. This should enable human-readable keys to help minimize errors and enable the standardization of certain keys, such as "image" as opposed to an `enum` or `u64` representation of keys. @@ -50,7 +50,7 @@ The SRC-7 standard should allow for data-rich assets to interact with one anothe ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20.md) standard. It also maintains compatibility with existing standards in other ecosystems. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20-native-asset.md) standard. It also maintains compatibility with existing standards in other ecosystems. ## Security Considerations @@ -75,7 +75,7 @@ Example of the SRC-7 implementation where metadata exists for only a single asse {{#include ../examples/src7-metadata/single_asset/src/single_asset.sw}} ``` -### Mutli Native Asset +### Multi Native Asset Example of the SRC-7 implementation where metadata exists for multiple assets with differing `SubId` values. diff --git a/docs/src-8-bridged-asset.md b/docs/src/src-8-bridged-asset.md similarity index 93% rename from docs/src-8-bridged-asset.md rename to docs/src/src-8-bridged-asset.md index de85ef0e..d703626b 100644 --- a/docs/src-8-bridged-asset.md +++ b/docs/src/src-8-bridged-asset.md @@ -1,6 +1,6 @@ # SRC-8: Bridged Asset -The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./src-7.md) and [SRC-20](./src-20.md) standards. +The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./src-7-asset-metadata.md) and [SRC-20](./src-20-native-asset.md) standards. ## Motivation @@ -8,7 +8,7 @@ The SRC-8 standard seeks to enable relevant data for bridged assets on the Fuel ## Prior Art -The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7.md) standard. This standard integrates into the existing [SRC-7](./src-7.md) standard. +The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7-asset-metadata.md) standard. This standard integrates into the existing [SRC-7](./src-7-asset-metadata.md) standard. ## Specification @@ -48,7 +48,7 @@ The SRC-8 standard should allow for data on any bridged assets on the Fuel Netwo ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20.md) standard, and the [SRC-7](./src-7.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20-native-asset.md) standard, and the [SRC-7](./src-7-asset-metadata.md) standard. The standard is also compatible with both tokens and NFTs native to other ecosystems by introducing a token ID element of the original chain. diff --git a/docs/src-9-metadata-keys.md b/docs/src/src-9-metadata-keys.md similarity index 96% rename from docs/src-9-metadata-keys.md rename to docs/src/src-9-metadata-keys.md index 7882cd37..9558b3cd 100644 --- a/docs/src-9-metadata-keys.md +++ b/docs/src/src-9-metadata-keys.md @@ -1,6 +1,6 @@ # SRC-9: Native Asset -The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./src-7.md) and [SRC-20](./src-20.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. +The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./src-7-asset-metadata.md) and [SRC-20](./src-20-native-asset.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. ## Motivation @@ -8,7 +8,7 @@ The SRC-9 standard seeks to enable relevant data for assets on the Fuel Network. ## Prior Art -The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7.md) standard. This standard integrates into the existing [SRC-7](./src-7.md) standard. +The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7-asset-metadata.md) standard. This standard integrates into the existing [SRC-7](./src-7-asset-metadata.md) standard. ## Specification @@ -349,7 +349,7 @@ The SRC-9 standard should allow for standardized keys for metadata on the Fuel N ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20.md) standard, and the [SRC-7](./src-7.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20-native-asset.md) standard, and the [SRC-7](./src-7-asset-metadata.md) standard. ## Security Considerations From caf246d073f206999237b7d0febb9fbdf9953981 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Thu, 30 May 2024 15:05:49 -0600 Subject: [PATCH 03/13] fixes --- docs/spell-check-custom-words.txt | 3 ++- docs/src/src-13-soulbound-address.md | 2 +- docs/src/src-6-vault.md | 25 ++++++++++++------------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/spell-check-custom-words.txt b/docs/spell-check-custom-words.txt index 8d09d7e9..e85a196d 100644 --- a/docs/spell-check-custom-words.txt +++ b/docs/spell-check-custom-words.txt @@ -259,4 +259,5 @@ WAV OGA glTF GLB -Uninitalized \ No newline at end of file +Uninitalized +upgradeability \ No newline at end of file diff --git a/docs/src/src-13-soulbound-address.md b/docs/src/src-13-soulbound-address.md index 197476e2..5a7b89c5 100644 --- a/docs/src/src-13-soulbound-address.md +++ b/docs/src/src-13-soulbound-address.md @@ -52,7 +52,7 @@ fn main() -> bool { The *Soulbound Address* is the *Soulbound Address Predicate*'s predicate address. A predicate's address(the bytecode root) is defined [here](https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/predicate-id.md). -The *Soulbound Address* may be computed from the *Soulbound Address Predicate*'s bytecode both on-chain or off-chain. For off-chain computation, please refer to the fuels-rs [predicate docs](https://docs.fuel.network/docs/fuels-rs/predicates/). For on-chain computation, please refer to Sway-Lib's [Bytecode Library](https://github.com/FuelLabs/sway-libs/tree/master/libs/bytecode). +The *Soulbound Address* may be computed from the *Soulbound Address Predicate*'s bytecode both on-chain or off-chain. For off-chain computation, please refer to the fuels-rs [predicate docs](https://docs.fuel.network/docs/fuels-rs/predicates/). For on-chain computation, please refer to Sway-Lib's [Bytecode Library](https://docs.fuel.network/docs/sway-libs/bytecode/). ## Rationale diff --git a/docs/src/src-6-vault.md b/docs/src/src-6-vault.md index cd90d844..f2ad23fd 100644 --- a/docs/src/src-6-vault.md +++ b/docs/src/src-6-vault.md @@ -75,27 +75,27 @@ The `Deposit` struct MUST be logged whenever new shares are minted via the `depo The `Deposit` log SHALL have the following fields. -##### `caller`: `Identity` +**`caller`: `Identity`** The `caller` field MUST represent the `Identity` which called the deposit function. -##### `receiver`: `Identity` +**`receiver`: `Identity`** The `receiver` field MUST represent the `Identity` which received the vault shares. -##### `underlying_asset`: `AssetId` +**`underlying_asset`: `AssetId`** The `underlying_asset` field MUST represent the `AssetId` of the asset which was deposited into the vault. -##### `vault_sub_id`: `SubId` +**`vault_sub_id`: `SubId`** The `vault_sub_id` field MUST represent the `SubId` of the vault which was deposited into. -##### `deposited_amount`: `u64` +**`deposited_amount`: `u64`** The `deposited_amount` field MUST represent the `u64` amount of assets deposited into the vault. -##### `minted_shares`: `u64` +**`minted_shares`: `u64`** The `minted_shares` field MUST represent the `u64` amount of shares minted. @@ -107,28 +107,27 @@ The `Withdraw` struct MUST be logged whenever shares are redeemed for assets via The `Withdraw` log SHALL have the following fields. - -##### `caller`: `Identity` +**`caller`: `Identity`** The `caller` field MUST represent the Identity which called the withdraw function. -##### `receiver`: `Identity` +**`receiver`: `Identity`** The `receiver` field MUST represent the Identity which received the withdrawn assets. -##### `underlying_asset`: `AssetId` +**`underlying_asset`: `AssetId`** The `underlying_asset` field MUST represent the `AssetId` of the asset that was withdrawn. -##### `vault_sub_id`: `SubId` +**`vault_sub_id`: `SubId`** The `vault_sub_id` field MUST represent the SubId of the vault from which was withdrawn. -##### `withdrawn_amount`: `u64` +**`withdrawn_amount`: `u64`** The `withdrawn_amount` field MUST represent the `u64` amount of coins withdrawn. -##### `burned_shares`: `u64` +**`burned_shares`: `u64`** The `burned_shares` field MUST represent the `u64` amount of shares burned. From 11c0a788b7502faa5fe85ced2b44ecb92513339a Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Thu, 30 May 2024 15:57:38 -0600 Subject: [PATCH 04/13] rename files --- README.md | 20 ++++++------- docs/src/SUMMARY.md | 26 ++++++++--------- ...et-metadata.md => asset-metadata-src-7.md} | 6 ++-- ...ridged-asset.md => bridged-asset-src-8.md} | 6 ++-- ...-factory.md => contract-factory-src-12.md} | 0 docs/src/index.md | 28 +++++++++---------- ...ation.md => inline-documentation-src-2.md} | 0 ...etadata-keys.md => metadata-keys-src-9.md} | 6 ++-- ...urning.md => minting-and-burning-src-3.md} | 14 +++++----- ...native-asset.md => native-asset-src-20.md} | 0 ...tive-bridge.md => native-bridge-src-10.md} | 4 +-- ...{src-5-ownership.md => ownership-src-5.md} | 0 ...tion.md => security-information-src-11.md} | 0 ...d => simple-upgradeable-proxies-src-14.md} | 4 +-- ...address.md => soulbound-address-src-13.md} | 2 +- docs/src/{src-6-vault.md => vault-src-6.md} | 4 +-- 16 files changed, 60 insertions(+), 60 deletions(-) rename docs/src/{src-7-asset-metadata.md => asset-metadata-src-7.md} (96%) rename docs/src/{src-8-bridged-asset.md => bridged-asset-src-8.md} (93%) rename docs/src/{src-12-contract-factory.md => contract-factory-src-12.md} (100%) rename docs/src/{src-2-inline-documentation.md => inline-documentation-src-2.md} (100%) rename docs/src/{src-9-metadata-keys.md => metadata-keys-src-9.md} (97%) rename docs/src/{src-3-minting-and-burning.md => minting-and-burning-src-3.md} (85%) rename docs/src/{src-20-native-asset.md => native-asset-src-20.md} (100%) rename docs/src/{src-10-native-bridge.md => native-bridge-src-10.md} (97%) rename docs/src/{src-5-ownership.md => ownership-src-5.md} (100%) rename docs/src/{src-11-security-information.md => security-information-src-11.md} (100%) rename docs/src/{src-14-simple-upgradeable-proxies.md => simple-upgradeable-proxies-src-14.md} (97%) rename docs/src/{src-13-soulbound-address.md => soulbound-address-src-13.md} (98%) rename docs/src/{src-6-vault.md => vault-src-6.md} (98%) diff --git a/README.md b/README.md index 1da1fa3d..b844d7ea 100644 --- a/README.md +++ b/README.md @@ -35,28 +35,28 @@ If you don't find what you're looking for, feel free to create an issue and prop ### Native Assets -- [SRC-20; Native Asset Standard](./docs/src/src-20-native-asset.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. -- [SRC-3; Mint and Burn](./docs/src/src-3-minting-and-burning.md) is used to enable mint and burn functionality for fungible assets. -- [SRC-7; Arbitrary Asset Metadata Standard](./docs/src/src-7-asset-metadata.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). -- [SRC-9; Metadata Keys Standard](./docs/src/src-9-metadata-keys.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. -- [SRC-6; Vault Standard](./docs/src/src-6-vault.md) defines the implementation of a standard API for asset vaults developed in Sway. +- [SRC-20; Native Asset Standard](./docs/src/native-asset-src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./docs/src/minting-and-burning-src-3.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./docs/src/asset-metadata-src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./docs/src/metadata-keys-src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./docs/src/vault-src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. ### Access Control -- [SRC-5; Ownership Standard](./docs/src/src-5-ownership.md) is used to restrict function calls to admin users in contracts. +- [SRC-5; Ownership Standard](./docs/src/ownership-src-5.md) is used to restrict function calls to admin users in contracts. ### Contracts -- [SRC-12; Contract Factory](./docs/src/src-12-contract-factory.md) defines the implementation of a standard API for contract factories. +- [SRC-12; Contract Factory](./docs/src/contract-factory-src-12.md) defines the implementation of a standard API for contract factories. ### Bridge -- [SRC-8; Bridged Asset](./docs/src/src-8-bridged-asset.md) defines the metadata required for an asset bridged to the Fuel Network. -- [SRC-10; Native Bridge Standard](./docs/src/src-10-native-bridge.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. +- [SRC-8; Bridged Asset](./docs/src/bridged-asset-src-8.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./docs/src/native-bridge-src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. ### Documentation -- [SRC-2; Inline Documentation](./docs/src/src-2-inline-documentation.md) defines how to document your Sway files. +- [SRC-2; Inline Documentation](./docs/src/inline-documentation-src-2.md) defines how to document your Sway files. ## Using a standard diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index da0c2b7f..38b195ea 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -2,16 +2,16 @@ [Sway Standards](./index.md) -- [SRC-2: Inline Documentation](./src-2-inline-documentation.md) -- [SRC-3: Minting and Burning](./src-3-minting-and-burning.md) -- [SRC-5: Ownership](./src-5-ownership.md) -- [SRC-6: Vault](./src-6-vault.md) -- [SRC-7: Asset Metadata](./src-7-asset-metadata.md) -- [SRC-8: Bridged Asset](./src-8-bridged-asset.md) -- [SRC-9: Metadata Keys](./src-9-metadata-keys.md) -- [SRC-10: Native Bridge](./src-10-native-bridge.md) -- [SRC-11: Security Information](./src-11-security-information.md) -- [SRC-12: Contract Factory](./src-12-contract-factory.md) -- [SRC-13: Soulbound Address](./src-13-soulbound-address.md) -- [SRC-14: Simple Upgradeable Contract](./src-14-simple-upgradeable-proxies.md) -- [SRC-20: Native Asset](./src-20-native-asset.md) +- [SRC-2: Inline Documentation](./inline-documentation-src-2.md) +- [SRC-3: Minting and Burning](./minting-and-burning-src-3.md) +- [SRC-5: Ownership](./ownership-src-5.md) +- [SRC-6: Vault](./vault-src-6.md) +- [SRC-7: Asset Metadata](./asset-metadata-src-7.md) +- [SRC-8: Bridged Asset](./bridged-asset-src-8.md) +- [SRC-9: Metadata Keys](./metadata-keys-src-9.md) +- [SRC-10: Native Bridge](./native-bridge-src-10.md) +- [SRC-11: Security Information](./security-information-src-11.md) +- [SRC-12: Contract Factory](./contract-factory-src-12.md) +- [SRC-13: Soulbound Address](./soulbound-address-src-13.md) +- [SRC-14: Simple Upgradeable Contract](./simple-upgradeable-proxies-src-14.md) +- [SRC-20: Native Asset](./native-asset-src-20.md) diff --git a/docs/src/src-7-asset-metadata.md b/docs/src/asset-metadata-src-7.md similarity index 96% rename from docs/src/src-7-asset-metadata.md rename to docs/src/asset-metadata-src-7.md index 4e6654ad..2987d07a 100644 --- a/docs/src/src-7-asset-metadata.md +++ b/docs/src/asset-metadata-src-7.md @@ -1,6 +1,6 @@ # SRC-7: Arbitrary Native Asset Metadata -The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./src-20-native-asset.md) standard. +The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./native-asset-src-20.md) standard. ## Motivation @@ -10,7 +10,7 @@ The SRC-7 standard seeks to enable data-rich assets on the Fuel Network while ma The use of generic metadata was originally found in the Sway-Lib's [NFT Library](https://github.com/FuelLabs/sway-libs/tree/v0.12.0/libs/nft) which did not use Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). This library has since been deprecated. -A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./src-20-native-asset.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. +A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./native-asset-src-20.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. The standard takes inspiration from [ENS's public resolver](https://docs.ens.domains/contract-api-reference/publicresolver) with the use of a `String` as the key. This should enable human-readable keys to help minimize errors and enable the standardization of certain keys, such as "image" as opposed to an `enum` or `u64` representation of keys. @@ -50,7 +50,7 @@ The SRC-7 standard should allow for data-rich assets to interact with one anothe ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20-native-asset.md) standard. It also maintains compatibility with existing standards in other ecosystems. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./native-asset-src-20.md) standard. It also maintains compatibility with existing standards in other ecosystems. ## Security Considerations diff --git a/docs/src/src-8-bridged-asset.md b/docs/src/bridged-asset-src-8.md similarity index 93% rename from docs/src/src-8-bridged-asset.md rename to docs/src/bridged-asset-src-8.md index d703626b..0cd5b570 100644 --- a/docs/src/src-8-bridged-asset.md +++ b/docs/src/bridged-asset-src-8.md @@ -1,6 +1,6 @@ # SRC-8: Bridged Asset -The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./src-7-asset-metadata.md) and [SRC-20](./src-20-native-asset.md) standards. +The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./asset-metadata-src-7.md) and [SRC-20](./native-asset-src-20.md) standards. ## Motivation @@ -8,7 +8,7 @@ The SRC-8 standard seeks to enable relevant data for bridged assets on the Fuel ## Prior Art -The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7-asset-metadata.md) standard. This standard integrates into the existing [SRC-7](./src-7-asset-metadata.md) standard. +The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./asset-metadata-src-7.md) standard. This standard integrates into the existing [SRC-7](./asset-metadata-src-7.md) standard. ## Specification @@ -48,7 +48,7 @@ The SRC-8 standard should allow for data on any bridged assets on the Fuel Netwo ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20-native-asset.md) standard, and the [SRC-7](./src-7-asset-metadata.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./native-asset-src-20.md) standard, and the [SRC-7](./asset-metadata-src-7.md) standard. The standard is also compatible with both tokens and NFTs native to other ecosystems by introducing a token ID element of the original chain. diff --git a/docs/src/src-12-contract-factory.md b/docs/src/contract-factory-src-12.md similarity index 100% rename from docs/src/src-12-contract-factory.md rename to docs/src/contract-factory-src-12.md diff --git a/docs/src/index.md b/docs/src/index.md index 32c2f24a..ff3276f9 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -14,7 +14,7 @@ If you don't find what you're looking for, feel free to create an issue and prop To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: ```toml -standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.4.4" } +standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.5.0" } ``` > **NOTE:** @@ -36,28 +36,28 @@ use standards::src20::SRC20; ### Native Assets -- [SRC-20; Native Asset Standard](./src-20-native-asset.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. -- [SRC-3; Mint and Burn](./src-3-minting-and-burning.md) is used to enable mint and burn functionality for fungible assets. -- [SRC-7; Arbitrary Asset Metadata Standard](./src-7-asset-metadata.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). -- [SRC-9; Metadata Keys Standard](./src-9-metadata-keys.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. -- [SRC-6; Vault Standard](./src-6-vault.md) defines the implementation of a standard API for asset vaults developed in Sway. -- [SRC-13; Soulbound Address](./src-13-soulbound-address.md) defines the implementation of a soulbound address. +- [SRC-20; Native Asset Standard](./native-asset-src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./minting-and-burning-src-3.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./asset-metadata-src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./metadata-keys-src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./vault-src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. +- [SRC-13; Soulbound Address](./soulbound-address-src-13.md) defines the implementation of a soulbound address. ### Security and Access Control -- [SRC-5; Ownership Standard](./src-5-ownership.md) is used to restrict function calls to admin users in contracts. -- [SRC-11; Security Information Standard](./src-11-security-information.md) is used to make communication information readily available in the case white hat hackers find a vulnerability in a contract. +- [SRC-5; Ownership Standard](./ownership-src-5.md) is used to restrict function calls to admin users in contracts. +- [SRC-11; Security Information Standard](./security-information-src-11.md) is used to make communication information readily available in the case white hat hackers find a vulnerability in a contract. ### Contracts -- [SRC-12; Contract Factory](./src-12-contract-factory.md) defines the implementation of a standard API for contract factories. -- [SRC-14; Simple Upgradeable Proxies](./src-14-simple-upgradeable-proxies.md) defines the implementation of an upgradeable proxy contract. +- [SRC-12; Contract Factory](./contract-factory-src-12.md) defines the implementation of a standard API for contract factories. +- [SRC-14; Simple Upgradeable Proxies](./simple-upgradeable-proxies-src-14.md) defines the implementation of an upgradeable proxy contract. ### Bridge -- [SRC-8; Bridged Asset](./src-8-bridged-asset.md) defines the metadata required for an asset bridged to the Fuel Network. -- [SRC-10; Native Bridge Standard](./src-10-native-bridge.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. +- [SRC-8; Bridged Asset](./bridged-asset-src-8.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./native-bridge-src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. ### Documentation -- [SRC-2; Inline Documentation](./src-2-inline-documentation.md) defines how to document your Sway files. +- [SRC-2; Inline Documentation](./inline-documentation-src-2.md) defines how to document your Sway files. diff --git a/docs/src/src-2-inline-documentation.md b/docs/src/inline-documentation-src-2.md similarity index 100% rename from docs/src/src-2-inline-documentation.md rename to docs/src/inline-documentation-src-2.md diff --git a/docs/src/src-9-metadata-keys.md b/docs/src/metadata-keys-src-9.md similarity index 97% rename from docs/src/src-9-metadata-keys.md rename to docs/src/metadata-keys-src-9.md index 9558b3cd..92827d7f 100644 --- a/docs/src/src-9-metadata-keys.md +++ b/docs/src/metadata-keys-src-9.md @@ -1,6 +1,6 @@ # SRC-9: Native Asset -The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./src-7-asset-metadata.md) and [SRC-20](./src-20-native-asset.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. +The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./asset-metadata-src-7.md) and [SRC-20](./native-asset-src-20.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. ## Motivation @@ -8,7 +8,7 @@ The SRC-9 standard seeks to enable relevant data for assets on the Fuel Network. ## Prior Art -The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7-asset-metadata.md) standard. This standard integrates into the existing [SRC-7](./src-7-asset-metadata.md) standard. +The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./asset-metadata-src-7.md) standard. This standard integrates into the existing [SRC-7](./asset-metadata-src-7.md) standard. ## Specification @@ -349,7 +349,7 @@ The SRC-9 standard should allow for standardized keys for metadata on the Fuel N ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20-native-asset.md) standard, and the [SRC-7](./src-7-asset-metadata.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./native-asset-src-20.md) standard, and the [SRC-7](./asset-metadata-src-7.md) standard. ## Security Considerations diff --git a/docs/src/src-3-minting-and-burning.md b/docs/src/minting-and-burning-src-3.md similarity index 85% rename from docs/src/src-3-minting-and-burning.md rename to docs/src/minting-and-burning-src-3.md index 53fd3525..2e075f6e 100644 --- a/docs/src/src-3-minting-and-burning.md +++ b/docs/src/minting-and-burning-src-3.md @@ -1,14 +1,14 @@ # SRC-3: Minting and Burning Native Assets -The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./src-20-native-asset.md) standard. +The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./native-asset-src-20.md) standard. ## Motivation -The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./src-20-native-asset.md) standard. +The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./native-asset-src-20.md) standard. ## Prior Art -Minting and burning were initially added to the [SRC-20](./src-20-native-asset.md) standard. +Minting and burning were initially added to the [SRC-20](./native-asset-src-20.md) standard. ## Specification @@ -31,7 +31,7 @@ This function MAY contain arbitrary conditions for minting, and revert if those This function MUST burn `amount` coins with the sub-identifier `sub_id` and MUST ensure the `AssetId` of the asset is the sha-256 hash of `(ContractId, SubId)` for the implementing contract. This function MUST ensure at least `amount` coins have been transferred to the implementing contract. -This function MUST update the total supply defined in the [SRC-20](./src-20-native-asset.md) standard. +This function MUST update the total supply defined in the [SRC-20](./native-asset-src-20.md) standard. This function MAY contain arbitrary conditions for burning, and revert if those conditions are not met. ##### Burn Arguments @@ -41,16 +41,16 @@ This function MAY contain arbitrary conditions for burning, and revert if those ## Rationale -This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./src-20-native-asset.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. +This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./native-asset-src-20.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./src-20-native-asset.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./native-asset-src-20.md) standard. ## Security Considerations This standard may introduce security considerations if no checks are implemented to ensure the calling of the `mint()` function is deemed valid or permitted. Checks are highly encouraged. -The burn function may also introduce a security consideration if the total supply within the [SRC-20](./src-20-native-asset.md) standard is not modified. +The burn function may also introduce a security consideration if the total supply within the [SRC-20](./native-asset-src-20.md) standard is not modified. ## Example ABI diff --git a/docs/src/src-20-native-asset.md b/docs/src/native-asset-src-20.md similarity index 100% rename from docs/src/src-20-native-asset.md rename to docs/src/native-asset-src-20.md diff --git a/docs/src/src-10-native-bridge.md b/docs/src/native-bridge-src-10.md similarity index 97% rename from docs/src/src-10-native-bridge.md rename to docs/src/native-bridge-src-10.md index 421ee99f..2f2bef13 100644 --- a/docs/src/src-10-native-bridge.md +++ b/docs/src/native-bridge-src-10.md @@ -23,7 +23,7 @@ The following functions MUST be implemented to follow the SRC-10; Native Bridge The `process_message()` function accepts incoming deposit messages from the canonical chain and issues the corresponding bridged asset. - This function MUST parse a message at the given `message_index` index. -- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md). +- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./bridged-asset-src-8.md). - This function SHALL issue a refund if there is an error in the bridging process. ### - `fn withdraw(to_address: b256)` @@ -148,7 +148,7 @@ pub struct MetadataMessage { ## Required Standards -Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md) for all bridged assets. +Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./bridged-asset-src-8.md) for all bridged assets. ## Rationale diff --git a/docs/src/src-5-ownership.md b/docs/src/ownership-src-5.md similarity index 100% rename from docs/src/src-5-ownership.md rename to docs/src/ownership-src-5.md diff --git a/docs/src/src-11-security-information.md b/docs/src/security-information-src-11.md similarity index 100% rename from docs/src/src-11-security-information.md rename to docs/src/security-information-src-11.md diff --git a/docs/src/src-14-simple-upgradeable-proxies.md b/docs/src/simple-upgradeable-proxies-src-14.md similarity index 97% rename from docs/src/src-14-simple-upgradeable-proxies.md rename to docs/src/simple-upgradeable-proxies-src-14.md index da23549a..73339805 100644 --- a/docs/src/src-14-simple-upgradeable-proxies.md +++ b/docs/src/simple-upgradeable-proxies-src-14.md @@ -57,7 +57,7 @@ As it is the first attempt to standardize proxy implementation, we do not consid ## Security Considerations Permissioning proxy target changes is the primary consideration here. -This standard is not opinionated about means of achieving this, use of [SRC-5](./src-5-ownership.md) is recommended. +This standard is not opinionated about means of achieving this, use of [SRC-5](./ownership-src-5.md) is recommended. ## Example ABI @@ -80,7 +80,7 @@ Example of a minimal SRC-14 implementation with no access control. ### Owned Proxy -Example of a SRC-14 implementation that also implements [SRC-5](./src-5-ownership.md). +Example of a SRC-14 implementation that also implements [SRC-5](./ownership-src-5.md). ```sway {{#include ../examples/examples/src14-simple-proxy/owned/src/owned.sw}} diff --git a/docs/src/src-13-soulbound-address.md b/docs/src/soulbound-address-src-13.md similarity index 98% rename from docs/src/src-13-soulbound-address.md rename to docs/src/soulbound-address-src-13.md index 5a7b89c5..a0068176 100644 --- a/docs/src/src-13-soulbound-address.md +++ b/docs/src/soulbound-address-src-13.md @@ -60,7 +60,7 @@ On the Fuel Network, the process for sending any [Native Assets](https://docs.fu ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20-native-asset.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./native-asset-src-20.md) standard. ## Security Considerations diff --git a/docs/src/src-6-vault.md b/docs/src/vault-src-6.md similarity index 98% rename from docs/src/src-6-vault.md rename to docs/src/vault-src-6.md index f2ad23fd..fc0b9dbd 100644 --- a/docs/src/src-6-vault.md +++ b/docs/src/vault-src-6.md @@ -1,6 +1,6 @@ # SRC-6: Vault -The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./src-20-native-asset.md) standard. +The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./native-asset-src-20.md) standard. ## Motivation @@ -137,7 +137,7 @@ The ABI discussed covers the known use cases of asset vaults while allowing safe ## Backwards Compatibility -This standard is fully compatible with the [SRC-20 standard](./src-20-native-asset.md). +This standard is fully compatible with the [SRC-20 standard](./native-asset-src-20.md). ## Security Considerations From 84e77763d2c3ff0896ffec2623aea812feae00be Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 11:42:24 -0600 Subject: [PATCH 05/13] undo last commit --- README.md | 20 ++++++------- docs/src/SUMMARY.md | 26 ++++++++--------- docs/src/index.md | 28 +++++++++---------- ...idge-src-10.md => src-10-native-bridge.md} | 4 +-- ...c-11.md => src-11-security-information.md} | 0 ...y-src-12.md => src-12-contract-factory.md} | 0 ...-src-13.md => src-13-soulbound-address.md} | 2 +- ...d => src-14-simple-upgradeable-proxies.md} | 4 +-- ...src-2.md => src-2-inline-documentation.md} | 0 ...asset-src-20.md => src-20-native-asset.md} | 0 ...-src-3.md => src-3-minting-and-burning.md} | 14 +++++----- ...{ownership-src-5.md => src-5-ownership.md} | 0 docs/src/{vault-src-6.md => src-6-vault.md} | 4 +-- ...adata-src-7.md => src-7-asset-metadata.md} | 6 ++-- ...-asset-src-8.md => src-8-bridged-asset.md} | 6 ++-- ...a-keys-src-9.md => src-9-metadata-keys.md} | 6 ++-- 16 files changed, 60 insertions(+), 60 deletions(-) rename docs/src/{native-bridge-src-10.md => src-10-native-bridge.md} (97%) rename docs/src/{security-information-src-11.md => src-11-security-information.md} (100%) rename docs/src/{contract-factory-src-12.md => src-12-contract-factory.md} (100%) rename docs/src/{soulbound-address-src-13.md => src-13-soulbound-address.md} (98%) rename docs/src/{simple-upgradeable-proxies-src-14.md => src-14-simple-upgradeable-proxies.md} (97%) rename docs/src/{inline-documentation-src-2.md => src-2-inline-documentation.md} (100%) rename docs/src/{native-asset-src-20.md => src-20-native-asset.md} (100%) rename docs/src/{minting-and-burning-src-3.md => src-3-minting-and-burning.md} (85%) rename docs/src/{ownership-src-5.md => src-5-ownership.md} (100%) rename docs/src/{vault-src-6.md => src-6-vault.md} (98%) rename docs/src/{asset-metadata-src-7.md => src-7-asset-metadata.md} (96%) rename docs/src/{bridged-asset-src-8.md => src-8-bridged-asset.md} (93%) rename docs/src/{metadata-keys-src-9.md => src-9-metadata-keys.md} (97%) diff --git a/README.md b/README.md index b844d7ea..1da1fa3d 100644 --- a/README.md +++ b/README.md @@ -35,28 +35,28 @@ If you don't find what you're looking for, feel free to create an issue and prop ### Native Assets -- [SRC-20; Native Asset Standard](./docs/src/native-asset-src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. -- [SRC-3; Mint and Burn](./docs/src/minting-and-burning-src-3.md) is used to enable mint and burn functionality for fungible assets. -- [SRC-7; Arbitrary Asset Metadata Standard](./docs/src/asset-metadata-src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). -- [SRC-9; Metadata Keys Standard](./docs/src/metadata-keys-src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. -- [SRC-6; Vault Standard](./docs/src/vault-src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. +- [SRC-20; Native Asset Standard](./docs/src/src-20-native-asset.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./docs/src/src-3-minting-and-burning.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./docs/src/src-7-asset-metadata.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./docs/src/src-9-metadata-keys.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./docs/src/src-6-vault.md) defines the implementation of a standard API for asset vaults developed in Sway. ### Access Control -- [SRC-5; Ownership Standard](./docs/src/ownership-src-5.md) is used to restrict function calls to admin users in contracts. +- [SRC-5; Ownership Standard](./docs/src/src-5-ownership.md) is used to restrict function calls to admin users in contracts. ### Contracts -- [SRC-12; Contract Factory](./docs/src/contract-factory-src-12.md) defines the implementation of a standard API for contract factories. +- [SRC-12; Contract Factory](./docs/src/src-12-contract-factory.md) defines the implementation of a standard API for contract factories. ### Bridge -- [SRC-8; Bridged Asset](./docs/src/bridged-asset-src-8.md) defines the metadata required for an asset bridged to the Fuel Network. -- [SRC-10; Native Bridge Standard](./docs/src/native-bridge-src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. +- [SRC-8; Bridged Asset](./docs/src/src-8-bridged-asset.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./docs/src/src-10-native-bridge.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. ### Documentation -- [SRC-2; Inline Documentation](./docs/src/inline-documentation-src-2.md) defines how to document your Sway files. +- [SRC-2; Inline Documentation](./docs/src/src-2-inline-documentation.md) defines how to document your Sway files. ## Using a standard diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index 38b195ea..da0c2b7f 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -2,16 +2,16 @@ [Sway Standards](./index.md) -- [SRC-2: Inline Documentation](./inline-documentation-src-2.md) -- [SRC-3: Minting and Burning](./minting-and-burning-src-3.md) -- [SRC-5: Ownership](./ownership-src-5.md) -- [SRC-6: Vault](./vault-src-6.md) -- [SRC-7: Asset Metadata](./asset-metadata-src-7.md) -- [SRC-8: Bridged Asset](./bridged-asset-src-8.md) -- [SRC-9: Metadata Keys](./metadata-keys-src-9.md) -- [SRC-10: Native Bridge](./native-bridge-src-10.md) -- [SRC-11: Security Information](./security-information-src-11.md) -- [SRC-12: Contract Factory](./contract-factory-src-12.md) -- [SRC-13: Soulbound Address](./soulbound-address-src-13.md) -- [SRC-14: Simple Upgradeable Contract](./simple-upgradeable-proxies-src-14.md) -- [SRC-20: Native Asset](./native-asset-src-20.md) +- [SRC-2: Inline Documentation](./src-2-inline-documentation.md) +- [SRC-3: Minting and Burning](./src-3-minting-and-burning.md) +- [SRC-5: Ownership](./src-5-ownership.md) +- [SRC-6: Vault](./src-6-vault.md) +- [SRC-7: Asset Metadata](./src-7-asset-metadata.md) +- [SRC-8: Bridged Asset](./src-8-bridged-asset.md) +- [SRC-9: Metadata Keys](./src-9-metadata-keys.md) +- [SRC-10: Native Bridge](./src-10-native-bridge.md) +- [SRC-11: Security Information](./src-11-security-information.md) +- [SRC-12: Contract Factory](./src-12-contract-factory.md) +- [SRC-13: Soulbound Address](./src-13-soulbound-address.md) +- [SRC-14: Simple Upgradeable Contract](./src-14-simple-upgradeable-proxies.md) +- [SRC-20: Native Asset](./src-20-native-asset.md) diff --git a/docs/src/index.md b/docs/src/index.md index ff3276f9..32c2f24a 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -14,7 +14,7 @@ If you don't find what you're looking for, feel free to create an issue and prop To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: ```toml -standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.5.0" } +standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.4.4" } ``` > **NOTE:** @@ -36,28 +36,28 @@ use standards::src20::SRC20; ### Native Assets -- [SRC-20; Native Asset Standard](./native-asset-src-20.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. -- [SRC-3; Mint and Burn](./minting-and-burning-src-3.md) is used to enable mint and burn functionality for fungible assets. -- [SRC-7; Arbitrary Asset Metadata Standard](./asset-metadata-src-7.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). -- [SRC-9; Metadata Keys Standard](./metadata-keys-src-9.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. -- [SRC-6; Vault Standard](./vault-src-6.md) defines the implementation of a standard API for asset vaults developed in Sway. -- [SRC-13; Soulbound Address](./soulbound-address-src-13.md) defines the implementation of a soulbound address. +- [SRC-20; Native Asset Standard](./src-20-native-asset.md) defines the implementation of a standard API for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) using the Sway Language. +- [SRC-3; Mint and Burn](./src-3-minting-and-burning.md) is used to enable mint and burn functionality for fungible assets. +- [SRC-7; Arbitrary Asset Metadata Standard](./src-7-asset-metadata.md) is used to store metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). +- [SRC-9; Metadata Keys Standard](./src-9-metadata-keys.md) is used to store standardized metadata keys for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) in combination with the SRC-7 standard. +- [SRC-6; Vault Standard](./src-6-vault.md) defines the implementation of a standard API for asset vaults developed in Sway. +- [SRC-13; Soulbound Address](./src-13-soulbound-address.md) defines the implementation of a soulbound address. ### Security and Access Control -- [SRC-5; Ownership Standard](./ownership-src-5.md) is used to restrict function calls to admin users in contracts. -- [SRC-11; Security Information Standard](./security-information-src-11.md) is used to make communication information readily available in the case white hat hackers find a vulnerability in a contract. +- [SRC-5; Ownership Standard](./src-5-ownership.md) is used to restrict function calls to admin users in contracts. +- [SRC-11; Security Information Standard](./src-11-security-information.md) is used to make communication information readily available in the case white hat hackers find a vulnerability in a contract. ### Contracts -- [SRC-12; Contract Factory](./contract-factory-src-12.md) defines the implementation of a standard API for contract factories. -- [SRC-14; Simple Upgradeable Proxies](./simple-upgradeable-proxies-src-14.md) defines the implementation of an upgradeable proxy contract. +- [SRC-12; Contract Factory](./src-12-contract-factory.md) defines the implementation of a standard API for contract factories. +- [SRC-14; Simple Upgradeable Proxies](./src-14-simple-upgradeable-proxies.md) defines the implementation of an upgradeable proxy contract. ### Bridge -- [SRC-8; Bridged Asset](./bridged-asset-src-8.md) defines the metadata required for an asset bridged to the Fuel Network. -- [SRC-10; Native Bridge Standard](./native-bridge-src-10.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. +- [SRC-8; Bridged Asset](./src-8-bridged-asset.md) defines the metadata required for an asset bridged to the Fuel Network. +- [SRC-10; Native Bridge Standard](./src-10-native-bridge.md) defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain. ### Documentation -- [SRC-2; Inline Documentation](./inline-documentation-src-2.md) defines how to document your Sway files. +- [SRC-2; Inline Documentation](./src-2-inline-documentation.md) defines how to document your Sway files. diff --git a/docs/src/native-bridge-src-10.md b/docs/src/src-10-native-bridge.md similarity index 97% rename from docs/src/native-bridge-src-10.md rename to docs/src/src-10-native-bridge.md index 2f2bef13..421ee99f 100644 --- a/docs/src/native-bridge-src-10.md +++ b/docs/src/src-10-native-bridge.md @@ -23,7 +23,7 @@ The following functions MUST be implemented to follow the SRC-10; Native Bridge The `process_message()` function accepts incoming deposit messages from the canonical chain and issues the corresponding bridged asset. - This function MUST parse a message at the given `message_index` index. -- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./bridged-asset-src-8.md). +- This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md). - This function SHALL issue a refund if there is an error in the bridging process. ### - `fn withdraw(to_address: b256)` @@ -148,7 +148,7 @@ pub struct MetadataMessage { ## Required Standards -Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./bridged-asset-src-8.md) for all bridged assets. +Any contract that implements the SRC-10; Native Bridge Standard MUST implement the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md) for all bridged assets. ## Rationale diff --git a/docs/src/security-information-src-11.md b/docs/src/src-11-security-information.md similarity index 100% rename from docs/src/security-information-src-11.md rename to docs/src/src-11-security-information.md diff --git a/docs/src/contract-factory-src-12.md b/docs/src/src-12-contract-factory.md similarity index 100% rename from docs/src/contract-factory-src-12.md rename to docs/src/src-12-contract-factory.md diff --git a/docs/src/soulbound-address-src-13.md b/docs/src/src-13-soulbound-address.md similarity index 98% rename from docs/src/soulbound-address-src-13.md rename to docs/src/src-13-soulbound-address.md index a0068176..5a7b89c5 100644 --- a/docs/src/soulbound-address-src-13.md +++ b/docs/src/src-13-soulbound-address.md @@ -60,7 +60,7 @@ On the Fuel Network, the process for sending any [Native Assets](https://docs.fu ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./native-asset-src-20.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20-native-asset.md) standard. ## Security Considerations diff --git a/docs/src/simple-upgradeable-proxies-src-14.md b/docs/src/src-14-simple-upgradeable-proxies.md similarity index 97% rename from docs/src/simple-upgradeable-proxies-src-14.md rename to docs/src/src-14-simple-upgradeable-proxies.md index 73339805..da23549a 100644 --- a/docs/src/simple-upgradeable-proxies-src-14.md +++ b/docs/src/src-14-simple-upgradeable-proxies.md @@ -57,7 +57,7 @@ As it is the first attempt to standardize proxy implementation, we do not consid ## Security Considerations Permissioning proxy target changes is the primary consideration here. -This standard is not opinionated about means of achieving this, use of [SRC-5](./ownership-src-5.md) is recommended. +This standard is not opinionated about means of achieving this, use of [SRC-5](./src-5-ownership.md) is recommended. ## Example ABI @@ -80,7 +80,7 @@ Example of a minimal SRC-14 implementation with no access control. ### Owned Proxy -Example of a SRC-14 implementation that also implements [SRC-5](./ownership-src-5.md). +Example of a SRC-14 implementation that also implements [SRC-5](./src-5-ownership.md). ```sway {{#include ../examples/examples/src14-simple-proxy/owned/src/owned.sw}} diff --git a/docs/src/inline-documentation-src-2.md b/docs/src/src-2-inline-documentation.md similarity index 100% rename from docs/src/inline-documentation-src-2.md rename to docs/src/src-2-inline-documentation.md diff --git a/docs/src/native-asset-src-20.md b/docs/src/src-20-native-asset.md similarity index 100% rename from docs/src/native-asset-src-20.md rename to docs/src/src-20-native-asset.md diff --git a/docs/src/minting-and-burning-src-3.md b/docs/src/src-3-minting-and-burning.md similarity index 85% rename from docs/src/minting-and-burning-src-3.md rename to docs/src/src-3-minting-and-burning.md index 2e075f6e..53fd3525 100644 --- a/docs/src/minting-and-burning-src-3.md +++ b/docs/src/src-3-minting-and-burning.md @@ -1,14 +1,14 @@ # SRC-3: Minting and Burning Native Assets -The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./native-asset-src-20.md) standard. +The following standard enables the minting and burning of native assets for any fungible assets within the Sway Language. It seeks to define mint and burn functions defined separately from the [SRC-20](./src-20-native-asset.md) standard. ## Motivation -The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./native-asset-src-20.md) standard. +The intent of this standard is to separate the extensions of minting and burning from the [SRC-20](./src-20-native-asset.md) standard. ## Prior Art -Minting and burning were initially added to the [SRC-20](./native-asset-src-20.md) standard. +Minting and burning were initially added to the [SRC-20](./src-20-native-asset.md) standard. ## Specification @@ -31,7 +31,7 @@ This function MAY contain arbitrary conditions for minting, and revert if those This function MUST burn `amount` coins with the sub-identifier `sub_id` and MUST ensure the `AssetId` of the asset is the sha-256 hash of `(ContractId, SubId)` for the implementing contract. This function MUST ensure at least `amount` coins have been transferred to the implementing contract. -This function MUST update the total supply defined in the [SRC-20](./native-asset-src-20.md) standard. +This function MUST update the total supply defined in the [SRC-20](./src-20-native-asset.md) standard. This function MAY contain arbitrary conditions for burning, and revert if those conditions are not met. ##### Burn Arguments @@ -41,16 +41,16 @@ This function MAY contain arbitrary conditions for burning, and revert if those ## Rationale -This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./native-asset-src-20.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. +This standard has been added to enable compatibility between applications and allow minting and burning native assets per use case. This standard has been separated from the [SRC-20](./src-20-native-asset.md) standard to allow for the minting and burning for all fungible assets, irrelevant of whether they are [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) or not. ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./native-asset-src-20.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) ensuring its compatibility with the [SRC-20](./src-20-native-asset.md) standard. ## Security Considerations This standard may introduce security considerations if no checks are implemented to ensure the calling of the `mint()` function is deemed valid or permitted. Checks are highly encouraged. -The burn function may also introduce a security consideration if the total supply within the [SRC-20](./native-asset-src-20.md) standard is not modified. +The burn function may also introduce a security consideration if the total supply within the [SRC-20](./src-20-native-asset.md) standard is not modified. ## Example ABI diff --git a/docs/src/ownership-src-5.md b/docs/src/src-5-ownership.md similarity index 100% rename from docs/src/ownership-src-5.md rename to docs/src/src-5-ownership.md diff --git a/docs/src/vault-src-6.md b/docs/src/src-6-vault.md similarity index 98% rename from docs/src/vault-src-6.md rename to docs/src/src-6-vault.md index fc0b9dbd..f2ad23fd 100644 --- a/docs/src/vault-src-6.md +++ b/docs/src/src-6-vault.md @@ -1,6 +1,6 @@ # SRC-6: Vault -The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./native-asset-src-20.md) standard. +The following standard allows for the implementation of a standard API for asset vaults such as yield-bearing asset vaults or asset wrappers. This standard is an optional add-on to the [SRC-20](./src-20-native-asset.md) standard. ## Motivation @@ -137,7 +137,7 @@ The ABI discussed covers the known use cases of asset vaults while allowing safe ## Backwards Compatibility -This standard is fully compatible with the [SRC-20 standard](./native-asset-src-20.md). +This standard is fully compatible with the [SRC-20 standard](./src-20-native-asset.md). ## Security Considerations diff --git a/docs/src/asset-metadata-src-7.md b/docs/src/src-7-asset-metadata.md similarity index 96% rename from docs/src/asset-metadata-src-7.md rename to docs/src/src-7-asset-metadata.md index 2987d07a..4e6654ad 100644 --- a/docs/src/asset-metadata-src-7.md +++ b/docs/src/src-7-asset-metadata.md @@ -1,6 +1,6 @@ # SRC-7: Arbitrary Native Asset Metadata -The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./native-asset-src-20.md) standard. +The following standard attempts to define the retrieval of on-chain arbitrary metadata for any [Native Asset](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-7 standard MUST implement the [SRC-20](./src-20-native-asset.md) standard. ## Motivation @@ -10,7 +10,7 @@ The SRC-7 standard seeks to enable data-rich assets on the Fuel Network while ma The use of generic metadata was originally found in the Sway-Lib's [NFT Library](https://github.com/FuelLabs/sway-libs/tree/v0.12.0/libs/nft) which did not use Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). This library has since been deprecated. -A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./native-asset-src-20.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. +A previous definition for a metadata standard was written in the original edit of the now defunct [SRC-721](https://github.com/FuelLabs/sway-standards/issues/2). This has since been replaced with the [SRC-20](./src-20-native-asset.md) standard as `SubId` was introduced to enable multiple assets to be minted from a single contract. The standard takes inspiration from [ENS's public resolver](https://docs.ens.domains/contract-api-reference/publicresolver) with the use of a `String` as the key. This should enable human-readable keys to help minimize errors and enable the standardization of certain keys, such as "image" as opposed to an `enum` or `u64` representation of keys. @@ -50,7 +50,7 @@ The SRC-7 standard should allow for data-rich assets to interact with one anothe ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./native-asset-src-20.md) standard. It also maintains compatibility with existing standards in other ecosystems. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) and the [SRC-20](./src-20-native-asset.md) standard. It also maintains compatibility with existing standards in other ecosystems. ## Security Considerations diff --git a/docs/src/bridged-asset-src-8.md b/docs/src/src-8-bridged-asset.md similarity index 93% rename from docs/src/bridged-asset-src-8.md rename to docs/src/src-8-bridged-asset.md index 0cd5b570..d703626b 100644 --- a/docs/src/bridged-asset-src-8.md +++ b/docs/src/src-8-bridged-asset.md @@ -1,6 +1,6 @@ # SRC-8: Bridged Asset -The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./asset-metadata-src-7.md) and [SRC-20](./native-asset-src-20.md) standards. +The following standard attempts to define the retrieval of relevant on-chain metadata for any bridged [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-8 standard MUST implement the [SRC-7](./src-7-asset-metadata.md) and [SRC-20](./src-20-native-asset.md) standards. ## Motivation @@ -8,7 +8,7 @@ The SRC-8 standard seeks to enable relevant data for bridged assets on the Fuel ## Prior Art -The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./asset-metadata-src-7.md) standard. This standard integrates into the existing [SRC-7](./asset-metadata-src-7.md) standard. +The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7-asset-metadata.md) standard. This standard integrates into the existing [SRC-7](./src-7-asset-metadata.md) standard. ## Specification @@ -48,7 +48,7 @@ The SRC-8 standard should allow for data on any bridged assets on the Fuel Netwo ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./native-asset-src-20.md) standard, and the [SRC-7](./asset-metadata-src-7.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20-native-asset.md) standard, and the [SRC-7](./src-7-asset-metadata.md) standard. The standard is also compatible with both tokens and NFTs native to other ecosystems by introducing a token ID element of the original chain. diff --git a/docs/src/metadata-keys-src-9.md b/docs/src/src-9-metadata-keys.md similarity index 97% rename from docs/src/metadata-keys-src-9.md rename to docs/src/src-9-metadata-keys.md index 92827d7f..9558b3cd 100644 --- a/docs/src/metadata-keys-src-9.md +++ b/docs/src/src-9-metadata-keys.md @@ -1,6 +1,6 @@ # SRC-9: Native Asset -The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./asset-metadata-src-7.md) and [SRC-20](./native-asset-src-20.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. +The following standard attempts to define the keys of relevant on-chain metadata for any [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets). Any contract that implements the SRC-9 standard MUST implement the [SRC-7](./src-7-asset-metadata.md) and [SRC-20](./src-20-native-asset.md) standards. This is a living standard where revisions may be made as the ecosystem evolves. ## Motivation @@ -8,7 +8,7 @@ The SRC-9 standard seeks to enable relevant data for assets on the Fuel Network. ## Prior Art -The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./asset-metadata-src-7.md) standard. This standard integrates into the existing [SRC-7](./asset-metadata-src-7.md) standard. +The use of generic metadata for [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets) is defined in the [SRC-7](./src-7-asset-metadata.md) standard. This standard integrates into the existing [SRC-7](./src-7-asset-metadata.md) standard. ## Specification @@ -349,7 +349,7 @@ The SRC-9 standard should allow for standardized keys for metadata on the Fuel N ## Backwards Compatibility -This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./native-asset-src-20.md) standard, and the [SRC-7](./asset-metadata-src-7.md) standard. +This standard is compatible with Fuel's [Native Assets](https://docs.fuel.network/docs/sway/blockchain-development/native_assets), the [SRC-20](./src-20-native-asset.md) standard, and the [SRC-7](./src-7-asset-metadata.md) standard. ## Security Considerations From b6cbfde6e62f4ce3816cbe477be7e47cc2d32336 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 11:42:43 -0600 Subject: [PATCH 06/13] fix --- docs/src/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/index.md b/docs/src/index.md index 32c2f24a..749fd372 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -14,7 +14,7 @@ If you don't find what you're looking for, feel free to create an issue and prop To import a standard the following should be added to the project's `Forc.toml` file under `[dependencies]` with the most recent release: ```toml -standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.4.4" } +standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.5.0" } ``` > **NOTE:** From cc9c431109278998262b7680b51047a6f4a560f1 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 12:30:21 -0600 Subject: [PATCH 07/13] remove dashes --- docs/src/src-10-native-bridge.md | 20 ++++++++++---------- docs/src/src-5-ownership.md | 8 ++++---- docs/src/src-7-asset-metadata.md | 8 ++++---- docs/src/src-8-bridged-asset.md | 8 ++++---- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/src/src-10-native-bridge.md b/docs/src/src-10-native-bridge.md index 421ee99f..fa07ecbf 100644 --- a/docs/src/src-10-native-bridge.md +++ b/docs/src/src-10-native-bridge.md @@ -18,7 +18,7 @@ The following functions MUST be implemented to follow the SRC-10; Native Bridge ## Required Functions -### - `fn process_message(message_index: u64)` +### `fn process_message(message_index: u64)` The `process_message()` function accepts incoming deposit messages from the canonical chain and issues the corresponding bridged asset. @@ -26,7 +26,7 @@ The `process_message()` function accepts incoming deposit messages from the cano - This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md). - This function SHALL issue a refund if there is an error in the bridging process. -### - `fn withdraw(to_address: b256)` +### `fn withdraw(to_address: b256)` The `withdraw()` function accepts and burns a bridged Native Asset on Fuel and sends a message to the bridge contract on the canonical chain to release the originally deposited tokens to the `to_address` address. @@ -34,7 +34,7 @@ The `withdraw()` function accepts and burns a bridged Native Asset on Fuel and s - This function MUST ensure the asset's `AssetId` sent in the transaction matches a bridged asset. - This function SHALL burn all coins sent in the transaction. -### - `fn claim_refund(to_address: b256, token_address: b256, token_id: b256, gateway_contract: b256)` +### `fn claim_refund(to_address: b256, token_address: b256, token_id: b256, gateway_contract: b256)` The `claim_refund()` function is called if something goes wrong in the bridging process and an error occurs. It sends a message to the `gateway_contract` contract on the canonical chain to release the `token_address` token with token id `token_id` to the `to_address` address. @@ -73,31 +73,31 @@ pub enum DepositType { The following describes a struct that encapsulates various deposit message metadata to a single type. There MUST be the following fields in the `DepositMessage` struct: -#### - amount: `u256` +#### amount: `u256` The `amount` field MUST represent the number of tokens. -#### - from: `b256` +#### from: `b256` The `from` field MUST represent the bridging user’s address on the canonical chain. -#### - to: `Identity` +#### to: `Identity` The `to` field MUST represent the bridging target destination `Address` or `ContractId` on the Fuel Chain. -#### - token_address: `b256` +#### token_address: `b256` The `token_address` field MUST represent the bridged token's address on the canonical chain. -#### - token_id: `b256` +#### token_id: `b256` The `token_id` field MUST represent the token's ID on the canonical chain. The `b256::zero()` MUST be used if this is a fungible token and no token ID exists. -#### - decimals: `u8` +#### decimals: `u8` The `decimals` field MUST represent the bridged token's decimals on the canonical chain. -#### - deposit_type: `DepositType` +#### deposit_type: `DepositType` The `deposit_type` field MUST represent the type of bridge deposit made on the canonical chain. diff --git a/docs/src/src-5-ownership.md b/docs/src/src-5-ownership.md index c8c6ae38..4cea7a3b 100644 --- a/docs/src/src-5-ownership.md +++ b/docs/src/src-5-ownership.md @@ -18,15 +18,15 @@ Ownership libraries exist for other ecosystems such as OpenZeppelin's [Ownership There SHALL be 3 states for any library implementing an ownership module in the following order: -#### - `Uninitialized` +#### `Uninitialized` The `Uninitialized` state SHALL be set as the initial state if no owner or admin is set. The `Uninitialized` state MUST be used when an owner or admin MAY be set in the future. -#### - `Initialized` +#### `Initialized` The `Initialized` state SHALL be set as the state if an owner or admin is set with an associated `Identity` type. -#### - `Revoked` +#### `Revoked` The `Revoked` state SHALL be set when there is no owner or admin and there SHALL NOT be one set in the future. @@ -52,7 +52,7 @@ This function SHALL return the current state of ownership for the contract where There SHALL be error handling. -#### - `NotOwner` +#### `NotOwner` This error MUST be emitted when `only_owner()` reverts. diff --git a/docs/src/src-7-asset-metadata.md b/docs/src/src-7-asset-metadata.md index 4e6654ad..0dcb7df2 100644 --- a/docs/src/src-7-asset-metadata.md +++ b/docs/src/src-7-asset-metadata.md @@ -22,19 +22,19 @@ We also take a look at existing common metadata practices such as [OpenSea's Met The following describes an enum that wraps various metadata types into a single return type. There SHALL be the following variants in the `Metadata` enum: -#### - `B256` +#### `B256` The `B256` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `Sting` key pair is of the `b256` type. -#### - `Bytes` +#### `Bytes` The `Bytes` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `String` key pair is of the `Bytes` type. The `Bytes` variant should be used when storing custom data such as but not limited to structs and enums. -#### - `Int` +#### `Int` The `Int` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `Sting` key pair is of the `u64` type. -#### - `String` +#### `String` The `String` variant SHALL be used when the stored metadata for the corresponding `AssetId` and `String` key pair is of the `String` type. The `String` variant MUST be used when a URI is required but MAY contain any arbitrary `String` data. diff --git a/docs/src/src-8-bridged-asset.md b/docs/src/src-8-bridged-asset.md index d703626b..5409998c 100644 --- a/docs/src/src-8-bridged-asset.md +++ b/docs/src/src-8-bridged-asset.md @@ -26,19 +26,19 @@ Any bridged assets MUST use the name and symbol of the asset on the chain where ### SRC-7 Metadata -#### - `bridged:chain` +#### `bridged:chain` The key `bridged:chain` SHALL return an `String` variant of the chain ID where the asset was originally minted. -#### - `bridged:address` +#### `bridged:address` The key `bridged:address` SHALL return a `B256` variant of the asset's address on the chain where the asset was originally minted. Native assets of a chain that do not have an address such as Ether on Ethereum SHALL use `b256::zero()`. -#### - `bridged:id` +#### `bridged:id` The key `bridged:id` MAY return a `B256` variant of the asset's ID such as an NFT's ID on the chain where the asset was originally minted. IF there is no ID, `None` SHALL be returned. -#### - `bridged:decimals` +#### `bridged:decimals` The key `bridged:decimals` MAY return an `Int` variant of the asset's decimals on the chain where the asset was originally minted. IF there are no decimals, `None` SHALL be returned. From 29cb1dd31c8f544017544daedb49a546690db01e Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 12:39:49 -0600 Subject: [PATCH 08/13] fix lint --- docs/src/src-10-native-bridge.md | 50 ++++++++++++++++---------------- docs/src/src-6-vault.md | 4 +-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/src/src-10-native-bridge.md b/docs/src/src-10-native-bridge.md index fa07ecbf..2348b207 100644 --- a/docs/src/src-10-native-bridge.md +++ b/docs/src/src-10-native-bridge.md @@ -16,9 +16,9 @@ The following standard takes reference from the [`FungibleBridge`](https://githu The following functions MUST be implemented to follow the SRC-10; Native Bridge Standard: -## Required Functions +### Required Functions -### `fn process_message(message_index: u64)` +**`fn process_message(message_index: u64)`** The `process_message()` function accepts incoming deposit messages from the canonical chain and issues the corresponding bridged asset. @@ -26,7 +26,7 @@ The `process_message()` function accepts incoming deposit messages from the cano - This function SHALL mint an asset that follows the [SRC-8; Bridged Asset Standard](./src-8-bridged-asset.md). - This function SHALL issue a refund if there is an error in the bridging process. -### `fn withdraw(to_address: b256)` +**`fn withdraw(to_address: b256)`** The `withdraw()` function accepts and burns a bridged Native Asset on Fuel and sends a message to the bridge contract on the canonical chain to release the originally deposited tokens to the `to_address` address. @@ -34,32 +34,32 @@ The `withdraw()` function accepts and burns a bridged Native Asset on Fuel and s - This function MUST ensure the asset's `AssetId` sent in the transaction matches a bridged asset. - This function SHALL burn all coins sent in the transaction. -### `fn claim_refund(to_address: b256, token_address: b256, token_id: b256, gateway_contract: b256)` +**`fn claim_refund(to_address: b256, token_address: b256, token_id: b256, gateway_contract: b256)`** The `claim_refund()` function is called if something goes wrong in the bridging process and an error occurs. It sends a message to the `gateway_contract` contract on the canonical chain to release the `token_address` token with token id `token_id` to the `to_address` address. - This function SHALL send a message to the `gateway_contract` contract to release the `token_address` token with id `token_id` to the `to_address` address on the canonical chain. - This function MUST ensure a refund was issued. -## Required Data Types +### Required Data Types -### `DepositType` +#### `DepositType` The `DepositType` enum describes whether the bridged deposit is made to a address, contract, or contract and contains additional metadata. There MUST be the following variants in the `DepositType` enum: -#### `Address`: `()` +**`Address`: `()`** The `Address` variant MUST represent when the deposit is made to an address on the Fuel chain. -#### `Contract`: `()` +**`Contract`: `()`** The `Contract` variant MUST represent when the deposit is made to an contract on the Fuel chain. -#### `ContractWithData`: `()` +**`ContractWithData`: `()`** The `ContractWithData` variant MUST represent when the deposit is made to an contract and contains additional metadata for the Fuel chain. -#### Example +##### Example Deposit Type ```sway pub enum DepositType { @@ -69,39 +69,39 @@ pub enum DepositType { } ``` -### `DepositMessage` +#### `DepositMessage` The following describes a struct that encapsulates various deposit message metadata to a single type. There MUST be the following fields in the `DepositMessage` struct: -#### amount: `u256` +**`amount`: `u256`** The `amount` field MUST represent the number of tokens. -#### from: `b256` +**`from`: `b256`** The `from` field MUST represent the bridging user’s address on the canonical chain. -#### to: `Identity` +**`to`: `Identity`** The `to` field MUST represent the bridging target destination `Address` or `ContractId` on the Fuel Chain. -#### token_address: `b256` +**`token_address`: `b256`** The `token_address` field MUST represent the bridged token's address on the canonical chain. -#### token_id: `b256` +**`token_id`: `b256`** The `token_id` field MUST represent the token's ID on the canonical chain. The `b256::zero()` MUST be used if this is a fungible token and no token ID exists. -#### decimals: `u8` +**`decimals`: `u8`** The `decimals` field MUST represent the bridged token's decimals on the canonical chain. -#### deposit_type: `DepositType` +**`deposit_type`: `DepositType`** The `deposit_type` field MUST represent the type of bridge deposit made on the canonical chain. -#### Example Deposit Message +##### Example Deposit Message ```sway pub struct DepositMessage { @@ -115,27 +115,27 @@ pub struct DepositMessage { } ``` -### `MetadataMessage` +#### `MetadataMessage` The following describes a struct that encapsulates the metadata of token on the canonical chain to a single type. There MUST be the following fields in the `MetadataMessage` struct: -#### token_address: `b256` +**`token_address`: `b256`** The `token_address` field MUST represent the bridged token's address on the canonical chain. -#### token_id: `b256` +**`token_id`: `b256`** The `token_id` field MUST represent the token's ID on the canonical chain. The `b256::zero()` MUST be used if this is a fungible token and no token ID exists. -#### name: `String` +**`name`: `String`** The `name` field MUST represent the bridged token's name field on the canonical chain. -#### symbol: `String` +**`symbol`: `String`** The `symbol` field MUST represent the bridged token's symbol field on the canonical chain. -### Example Metadata Message +##### Example Metadata Message ```sway pub struct MetadataMessage { diff --git a/docs/src/src-6-vault.md b/docs/src/src-6-vault.md index f2ad23fd..04ac75f0 100644 --- a/docs/src/src-6-vault.md +++ b/docs/src/src-6-vault.md @@ -12,11 +12,11 @@ Asset vaults have been thoroughly explored on Ethereum and with [EIP 4626](https ## Specification -## Required public functions +### Required public functions The following functions MUST be implemented to follow the SRC-6 standard. Any contract that implements the SRC-6 standard MUST implement the SRC-20 standard. -### `fn deposit(receiver: Identity, vault_sub_id: SubId) -> u64` +#### `fn deposit(receiver: Identity, vault_sub_id: SubId) -> u64` This function takes the `receiver` Identity and the SubId `vault_sub_id` of the sub-vault as an argument and returns the amount of shares minted to the `receiver`. From f341dc2a9442f47c7767b48d7dfcd22afb224fc1 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 12:48:46 -0600 Subject: [PATCH 09/13] fix examples --- docs/src/src-14-simple-upgradeable-proxies.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/src-14-simple-upgradeable-proxies.md b/docs/src/src-14-simple-upgradeable-proxies.md index da23549a..8118efa7 100644 --- a/docs/src/src-14-simple-upgradeable-proxies.md +++ b/docs/src/src-14-simple-upgradeable-proxies.md @@ -75,7 +75,7 @@ abi SRC14 { Example of a minimal SRC-14 implementation with no access control. ```sway -{{#include ../examples/examples/src14-simple-proxy/owned/src/minimal.sw}} +{{#include ../../examples/src14-simple-proxy/owned/src/minimal.sw}} ``` ### Owned Proxy @@ -83,5 +83,5 @@ Example of a minimal SRC-14 implementation with no access control. Example of a SRC-14 implementation that also implements [SRC-5](./src-5-ownership.md). ```sway -{{#include ../examples/examples/src14-simple-proxy/owned/src/owned.sw}} +{{#include ../../examples/src14-simple-proxy/owned/src/owned.sw}} ``` From f76e3a7e62d10495e8483c0a7097658c20dc8703 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 12:51:04 -0600 Subject: [PATCH 10/13] fix --- docs/src/src-14-simple-upgradeable-proxies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/src-14-simple-upgradeable-proxies.md b/docs/src/src-14-simple-upgradeable-proxies.md index 8118efa7..1448f99c 100644 --- a/docs/src/src-14-simple-upgradeable-proxies.md +++ b/docs/src/src-14-simple-upgradeable-proxies.md @@ -75,7 +75,7 @@ abi SRC14 { Example of a minimal SRC-14 implementation with no access control. ```sway -{{#include ../../examples/src14-simple-proxy/owned/src/minimal.sw}} +{{#include ../../examples/src14-simple-proxy/minimal/src/minimal.sw}} ``` ### Owned Proxy From ea376ae7a9e156244d706dc44ed08c0471681d76 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Fri, 31 May 2024 13:49:30 -0600 Subject: [PATCH 11/13] add version for docs-hub --- Cargo.toml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Cargo.toml diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..e76a3773 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "sway-standards" +version = "0.5.0" +edition = "2021" From 3f6f73ce0cd960e5e66788d26dc297665c173289 Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Tue, 4 Jun 2024 07:51:55 -0600 Subject: [PATCH 12/13] fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0804b14..ce998885 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ If you don't find what you're looking for, feel free to create an issue and prop ### Contracts - [SRC-12; Contract Factory](./docs/src/src-12-contract-factory.md) defines the implementation of a standard API for contract factories. -- [SRC-14; Simple Upgradable Proxies](./SRCs/src-14.md) defines the implementation of a standard API for simple upgradable proxies. +- [SRC-14; Simple Upgradable Proxies](./SRCs/src-14-simple-upgradeable-proxies.md) defines the implementation of a standard API for simple upgradable proxies. ### Bridge From 0360d560076e9ee8cd1a8dd5b20f8c04bbb8f27b Mon Sep 17 00:00:00 2001 From: sarahschwartz <58856580+sarahschwartz@users.noreply.github.com> Date: Tue, 4 Jun 2024 08:01:21 -0600 Subject: [PATCH 13/13] fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce998885..8f3d5952 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ If you don't find what you're looking for, feel free to create an issue and prop ### Contracts - [SRC-12; Contract Factory](./docs/src/src-12-contract-factory.md) defines the implementation of a standard API for contract factories. -- [SRC-14; Simple Upgradable Proxies](./SRCs/src-14-simple-upgradeable-proxies.md) defines the implementation of a standard API for simple upgradable proxies. +- [SRC-14; Simple Upgradable Proxies](./docs/src/src-14-simple-upgradeable-proxies.md) defines the implementation of a standard API for simple upgradable proxies. ### Bridge