From 674d11af371fe852487b92b516720e1b06297098 Mon Sep 17 00:00:00 2001 From: Polkadot Wiki CI Date: Fri, 6 Oct 2023 00:15:10 +0000 Subject: [PATCH] Deploy website - based on 6f6dada513cd6eb2727301339dff5b49fa478fac --- 404.html | 4 +-- ...cking-30d83e1ed114a3fb5e4ac44e58e2d6dc.png | Bin 0 -> 118545 bytes ...cking-a0ecfcffce70c33d1b26196ad33796f7.png | Bin 119874 -> 0 bytes assets/js/8a8a7d05.c248e7da.js | 1 + assets/js/8a8a7d05.d7f83aec.js | 1 - assets/js/918b38b6.e6d6efec.js | 1 - assets/js/918b38b6.f22722ab.js | 1 + assets/js/fbea1897.306e56e9.js | 1 - assets/js/fbea1897.47e41d56.js | 1 + ...n.554e0a21.js => runtime~main.2dc5ab42.js} | 2 +- docs/ambassadors.html | 4 +-- docs/bug-bounty.html | 4 +-- docs/build-data.html | 4 +-- docs/build-guide.html | 4 +-- docs/build-hackathon.html | 4 +-- docs/build-hrmp-channels.html | 4 +-- docs/build-index.html | 4 +-- docs/build-integrate-assets.html | 4 +-- docs/build-integration.html | 4 +-- docs/build-node-interaction.html | 4 +-- docs/build-node-management.html | 4 +-- docs/build-open-source.html | 4 +-- docs/build-oracle.html | 4 +-- docs/build-pdk.html | 10 +++---- docs/build-protocol-info.html | 4 +-- docs/build-smart-contracts.html | 4 +-- docs/build-ss58-registry.html | 4 +-- docs/build-storage.html | 4 +-- docs/build-substrate.html | 4 +-- docs/build-tools-index.html | 4 +-- docs/build-transaction-construction.html | 4 +-- docs/builders-program.html | 4 +-- docs/community-index.html | 4 +-- docs/community.html | 4 +-- docs/contributing.html | 4 +-- docs/contributors.html | 4 +-- docs/dashboards-index.html | 4 +-- docs/dev-heroes.html | 4 +-- docs/faq.html | 4 +-- docs/general-index.html | 4 +-- docs/getting-started.html | 4 +-- docs/glossary.html | 4 +-- docs/grants.html | 4 +-- docs/how-to-dyor.html | 4 +-- docs/kusama-adversarial-cheatsheet.html | 4 +-- docs/kusama-bug-bounty.html | 4 +-- docs/kusama-claims.html | 4 +-- docs/kusama-coc.html | 4 +-- docs/kusama-community.html | 4 +-- docs/kusama-getting-started.html | 4 +-- docs/kusama-index.html | 4 +-- docs/kusama-parameters.html | 4 +-- docs/kusama-social-recovery.html | 4 +-- docs/kusama-timeline.html | 4 +-- docs/learn-DOT.html | 4 +-- docs/learn-account-abstraction.html | 4 +-- docs/learn-account-advanced.html | 4 +-- docs/learn-account-generation.html | 4 +-- docs/learn-account-multisig.html | 4 +-- docs/learn-accounts-index.html | 4 +-- docs/learn-accounts.html | 4 +-- docs/learn-advanced-index.html | 4 +-- docs/learn-architecture-index.html | 4 +-- docs/learn-architecture.html | 4 +-- docs/learn-archive-index.html | 4 +-- docs/learn-assets-index.html | 4 +-- docs/learn-assets.html | 4 +-- docs/learn-async-backing.html | 28 ++++++++++-------- docs/learn-auction.html | 4 +-- docs/learn-balance-transfers.html | 4 +-- docs/learn-basics-index.html | 4 +-- docs/learn-bridges.html | 4 +-- docs/learn-collator.html | 4 +-- docs/learn-comparisons-avalanche.html | 4 +-- docs/learn-comparisons-cosmos.html | 4 +-- docs/learn-comparisons-ethereum-2.html | 4 +-- docs/learn-comparisons-index.html | 4 +-- docs/learn-comparisons-kusama.html | 4 +-- docs/learn-comparisons-rollups.html | 4 +-- docs/learn-comparisons.html | 4 +-- docs/learn-components-index.html | 4 +-- docs/learn-consensus.html | 4 +-- docs/learn-controller.html | 4 +-- docs/learn-crowdloans.html | 4 +-- docs/learn-cryptography.html | 4 +-- docs/learn-extrinsics.html | 4 +-- docs/learn-future-implementations-index.html | 4 +-- docs/learn-governance.html | 4 +-- docs/learn-guides-assets-create.html | 4 +-- docs/learn-guides-assets-index.html | 4 +-- docs/learn-guides-assets-ledger.html | 4 +-- docs/learn-guides-identity.html | 4 +-- docs/learn-guides-index.html | 4 +-- docs/learn-guides-polkadot-opengov.html | 4 +-- docs/learn-guides-staking-index.html | 4 +-- docs/learn-guides-staking-pools.html | 4 +-- docs/learn-guides-staking.html | 4 +-- docs/learn-guides-treasury.html | 4 +-- docs/learn-guides-vault.html | 4 +-- docs/learn-identity.html | 4 +-- docs/learn-implementations.html | 4 +-- docs/learn-index.html | 4 +-- docs/learn-inflation.html | 4 +-- docs/learn-launch.html | 6 ++-- docs/learn-nft-index.html | 4 +-- docs/learn-nft-pallets.html | 4 +-- docs/learn-nft-projects.html | 4 +-- docs/learn-nft.html | 4 +-- docs/learn-nomination-pools.html | 4 +-- docs/learn-nominator.html | 4 +-- docs/learn-parachains-faq.html | 4 +-- docs/learn-parachains-index.html | 4 +-- docs/learn-parachains-protocol.html | 4 +-- docs/learn-parachains.html | 4 +-- docs/learn-parathreads.html | 4 +-- docs/learn-participants-index.html | 4 +-- docs/learn-phragmen.html | 4 +-- docs/learn-polkadot-host.html | 4 +-- docs/learn-polkadot-opengov-treasury.html | 4 +-- docs/learn-polkadot-opengov.html | 4 +-- docs/learn-proxies-pure.html | 4 +-- docs/learn-proxies.html | 4 +-- docs/learn-redenomination.html | 4 +-- docs/learn-runtime-upgrades.html | 4 +-- docs/learn-sassafras.html | 4 +-- docs/learn-scams.html | 4 +-- docs/learn-spree.html | 4 +-- docs/learn-staking-advanced.html | 4 +-- docs/learn-staking-index.html | 4 +-- docs/learn-staking.html | 4 +-- docs/learn-system-chains.html | 4 +-- docs/learn-teleport.html | 4 +-- docs/learn-transaction-fees.html | 4 +-- docs/learn-transactions-index.html | 4 +-- docs/learn-treasury.html | 4 +-- docs/learn-validator.html | 4 +-- docs/learn-video-tutorials.html | 4 +-- docs/learn-wasm.html | 4 +-- docs/learn-xcm-index.html | 4 +-- docs/learn-xcm-instructions.html | 4 +-- docs/learn-xcm-pallet.html | 4 +-- docs/learn-xcm-transport.html | 4 +-- docs/learn-xcm-usecases.html | 4 +-- docs/learn-xcm.html | 4 +-- docs/learn-xcvm.html | 4 +-- docs/learn/xcm.html | 4 +-- docs/learn/xcm/config-deep-dive.html | 4 +-- docs/learn/xcm/fundamentals-fees.html | 4 +-- docs/learn/xcm/fundamentals-multiasset.html | 4 +-- docs/learn/xcm/fundamentals-summary.html | 4 +-- docs/learn/xcm/fundamentals-xcvm.html | 4 +-- docs/learn/xcm/fundamentals.html | 4 +-- .../fundamentals/multilocation-example.html | 4 +-- .../fundamentals/multilocation-junctions.html | 4 +-- .../fundamentals/multilocation-summary.html | 4 +-- .../learn/xcm/fundamentals/multilocation.html | 4 +-- docs/learn/xcm/introduction.html | 4 +-- docs/learn/xcm/journey-assets.html | 4 +-- docs/learn/xcm/journey-channels.html | 4 +-- docs/learn/xcm/journey-expectations.html | 4 +-- docs/learn/xcm/journey-fees.html | 4 +-- docs/learn/xcm/journey-holding.html | 4 +-- docs/learn/xcm/journey-locks.html | 4 +-- docs/learn/xcm/journey-origin.html | 4 +-- docs/learn/xcm/journey-queries.html | 4 +-- docs/learn/xcm/journey-register.html | 4 +-- docs/learn/xcm/journey-summary.html | 4 +-- docs/learn/xcm/journey-transact.html | 4 +-- docs/learn/xcm/journey-version.html | 4 +-- docs/learn/xcm/journey.html | 4 +-- docs/learn/xcm/journey/transfers-reserve.html | 4 +-- docs/learn/xcm/journey/transfers-summary.html | 4 +-- .../learn/xcm/journey/transfers-teleport.html | 4 +-- docs/learn/xcm/journey/transfers.html | 4 +-- docs/learn/xcm/overview-architecture.html | 4 +-- docs/learn/xcm/overview-format.html | 4 +-- docs/learn/xcm/overview-intro.html | 4 +-- docs/learn/xcm/overview-summary.html | 4 +-- docs/learn/xcm/overview-xcvm.html | 4 +-- docs/learn/xcm/overview.html | 4 +-- docs/learn/xcm/quickstart-first-look.html | 4 +-- docs/learn/xcm/quickstart-simulator.html | 4 +-- docs/learn/xcm/quickstart-summary.html | 4 +-- docs/learn/xcm/quickstart.html | 4 +-- docs/learn/xcm/reference-glossary.html | 4 +-- docs/learn/xcm/reference-xcvm-registers.html | 4 +-- docs/learn/xcm/references.html | 4 +-- docs/learn/xcm/testing.html | 4 +-- docs/ledger.html | 4 +-- docs/maintain-bootnode.html | 4 +-- docs/maintain-endpoints.html | 4 +-- docs/maintain-errors.html | 4 +-- docs/maintain-guides-avoid-slashing.html | 4 +-- docs/maintain-guides-democracy.html | 4 +-- docs/maintain-guides-how-to-chill.html | 4 +-- docs/maintain-guides-how-to-join-council.html | 4 +-- ...ntain-guides-how-to-monitor-your-node.html | 4 +-- ...aintain-guides-how-to-nominate-kusama.html | 4 +-- ...ntain-guides-how-to-nominate-polkadot.html | 4 +-- ...aintain-guides-how-to-stop-validating.html | 4 +-- docs/maintain-guides-how-to-systemd.html | 4 +-- docs/maintain-guides-how-to-upgrade.html | 4 +-- ...aintain-guides-how-to-validate-kusama.html | 4 +-- ...ntain-guides-how-to-validate-polkadot.html | 4 +-- ...aintain-guides-how-to-vote-councillor.html | 4 +-- docs/maintain-guides-polkadot-opengov.html | 4 +-- docs/maintain-guides-secure-validator.html | 4 +-- docs/maintain-guides-society-kusama.html | 4 +-- docs/maintain-guides-validator-community.html | 4 +-- docs/maintain-guides-validator-payout.html | 4 +-- docs/maintain-index.html | 4 +-- docs/maintain-networks.html | 4 +-- docs/maintain-polkadot-parameters.html | 4 +-- docs/maintain-rpc.html | 4 +-- docs/maintain-sync.html | 4 +-- docs/maintain-wss.html | 4 +-- docs/metadata.html | 4 +-- docs/polkadot-direction.html | 4 +-- docs/polkadot-v1.html | 4 +-- docs/polkadot-vault.html | 4 +-- docs/polkadot-vision-index.html | 4 +-- docs/polkadotjs-ui.html | 4 +-- docs/polkadotjs.html | 4 +-- docs/programmes-index.html | 4 +-- docs/research.html | 4 +-- docs/staking-dashboard.html | 4 +-- docs/start-building.html | 4 +-- docs/stay-safe-index.html | 4 +-- docs/thousand-contributors.html | 4 +-- docs/thousand-validators.html | 4 +-- docs/wallets-and-extensions.html | 4 +-- docs/wallets-index.html | 4 +-- docs/web3-and-polkadot.html | 4 +-- index.html | 4 +-- search.html | 4 +-- 235 files changed, 474 insertions(+), 470 deletions(-) create mode 100644 assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png delete mode 100644 assets/images/async-backing-a0ecfcffce70c33d1b26196ad33796f7.png create mode 100644 assets/js/8a8a7d05.c248e7da.js delete mode 100644 assets/js/8a8a7d05.d7f83aec.js delete mode 100644 assets/js/918b38b6.e6d6efec.js create mode 100644 assets/js/918b38b6.f22722ab.js delete mode 100644 assets/js/fbea1897.306e56e9.js create mode 100644 assets/js/fbea1897.47e41d56.js rename assets/js/{runtime~main.554e0a21.js => runtime~main.2dc5ab42.js} (98%) diff --git a/404.html b/404.html index a7327046fe41..94ae2f072329 100644 --- a/404.html +++ b/404.html @@ -19,13 +19,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png b/assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png new file mode 100644 index 0000000000000000000000000000000000000000..84ef0384f992ffd89a9168fa8f06db00c61a6322 GIT binary patch literal 118545 zcmeFZXHb*h_67AfmS@4ZM- zga82ogdWO$<0=0$bI_UVD{iJ!{2qElm~D8}v7DaBxV~RF$-G za0o+iaIUcuT?hX1buU;N2M5>FK~Yi5Nl`@+>I`+)akaFvQF4H}I$Qc`iQwSei}j3Y z)#%is`u?;;dj#~BjEPY=TybLThL@W?FO~8GU4jywv>;+g00)n@8>Ioy35($uBiD+z zx~^`n6iS4*7BWCQ4fZ~Z$+~mwi`}aik{Pf@lMV(gI^H9^dmBlyPrl{XPBi`Y4-L!G z`D9!5F^})Y11|q8vVu6ghCV@&2nsb zBIF(MA}6zuJjX;9-Ul0FC^OpdTAs|}r5%$_tz z{?54hY`~I|>rRB$GdMoM&*1a%Xt`*9cLNJ8f%kZPeM)M#D677qM{+H13%e01Y{oRe zkU`{Sm|h43MV$h19TJ?Idvr}QGdF&6e$EH~4n2;`<`XepmCf9vHTMn-@q-k+H>i8n zmTO518r(`QT)k$+sfLlMWXCCXVma167bl4`*hR2q?gSWk4xLPFa^NWkmJfCB}vWWLYAJg`K zmMU48vSbH@8A-!?Rw)!WS03+qIS$Ltx)$G5Lm58TPAx5G%vQ1!G`zyKaVmIx@N8`F zL?KQn|J{1+hazq0%XaF*yH7TnOsml2t9cNKiAn!YLmq%Kmve~o4|eWl1`BC}m}TS- znv1lX>g2tGs~_*1WeMtWu`))Et^6V$TS-=F5Uo9(ZLB(NY!nzz#m3_Kl}&m1uE`h265&SOKk z8R;39H&pQ1XqF1kn8e(}L`}*t)pjJ;4ta{tr-Swlw+*$pz+V)|YUoc}BR7OI&r-vD zxAwqe99;aD+&Q>Q0)2X5ph$4eOufwrTZ0y{=DOCt(8=52k(#4o`+lWX?@| zH`#PzFddftX5**BwO+ygfmvn=A8yxw&yJ28VH+%Pv5UV|Vm(MUyZ^&m0NnysWtmfcbG6OLtMjtn?~fG# zm$(-ps9Tq|t%L)Ad;6{C+r;Q@vbduaKeb0i9+c~KG_qM^=3xowL-7n|I!n`4hgaf=m)k)1GNP>J<6!LPwPkJHAUE?K+-gFQ4Xg5gE9 z5u7DpayeLMQ{WMM{bA}`Y*g`tf1I(WJ3;7}h{G1-SUPn|5|@UaoDOZ5AnzxciAkNWt*a9#D)X`O~?*Lw{&-eWp(Q> zUPgNc!8GN{c&;82gsgxaFCy6*^AKuCliAwVZ{Di4Lyc37V;S5KMBm(t>9F{^i(i7k zMdaX#tp(I?4MX4BdX9FKqmAoLhh--0a3l+!auW``Y4S@A{-UGZ2+8jBK(K&Bd!`K5 zG!A!e(_J3Jm~4^r9$67y;sbX^2b=VtY)%cCNY~Ya?40Bu4~P1ZP23bq3(WQNE-tc7 zi3XI_Ks`b$(*$NgJSfl2{Q@%BISVN0^uVxu*QoC!x07SD%5MD@SroL~awj{LZ$lAg zgL`Dg#{WvHH*=AtIku4yHv6`2C>?kiJ?G+1Hdn~5!w zRpTQ=L|@g_f?aYd%vKT7TE3R@9@rb713e#3Nmw3c8V`fqpK zr*$`6b%T*V%^(hXIy6NBfL>fj2&$sjk?uR=9s%iDr&HySdE3RKNrwJA@iJfZ54gq~ z^V85aENCyaZma8{;i{mbbO!xcg($RW;_{S1aKfMnA|f!RuoCZ&X>r|H_k4ai4}UK) z8)O0v6LZwE+90idcs+QV7ui^a66==EAM%!%%7|7h%Df31O!pdfBOEHJt2>yh?tB$g zm#uBC!!5mN&c~2__WXX`4kTlU77H#Ea@xLR@Fqz}UT*qtE6sBtq3-X=WUqD1o%&8#A&i;wwrS0dmy4<{TEBzIaGd-uWeu3Q zQ*DEPBp!TeB#STcqUm3|3KH}c9FD&ZV^YH=o0mMxeuNAIQw}7+W<>I=)A_#{Jmv*C z?)TkvrnBhHlKkfP0djf3O{|M=-}3@cyeqyt7dgzZQdY?rGg3r09&pj)zeiZESM`*h zOYzG6jZ*5~@;N_{Z1pKPF!{Mvzvq(6Bwk*aCi(sG8iHQ~#_VZzvu#vqdjbmu*K5kH zFlGj3{FAS3rtWOkISe6`w(p6o$SIM=qHMc+CM&(Ulb8H%i zR+CF|{sCyW>+^NZIDgNIMLu* z^cJ_%&Q*_uBhTbwVf=R z!wF+&JZdVyY*=;i=b|6xKqO1iMa@hQ{-Ku)YuGL zi=IT#AbN)c4Z;h*x*Lev3-1={{J0*>OA=AaFmy-caba{>vDFu;Wb61H=tR3<0?Uxk z1WNuLjNu%MdeV4vpsJ;3{TQ-ADnVHAA^^79S^T0k28LWyRv*|__%2JFM2`dOl^iE( zta`=2s8ty7fzgp|;6X??Phlr=L$TQc=kKWmhwH&>*kDB=3THy`#{sa2VSc;=$u?}x zRf4*Z_eynA7>ro{yk2XOJg%aKDv5@rm>THam6kLA`2f}Mw!CmqBue`c`N&sPq4+ujRAQ~WLTaeffH~%EhfQ%)9%!oFw)p1S_yZibS zLR}Id53ER2hu0A8@v>{z>ktJhApG}YwGPwOvao# z5+Xmnhc*5Zq7*{!p<-0O1nTKhh6VFyhX{WJgYLZ7#vPS28r9}XnKD@JB42qELWajw z$D-uL#iVY*5VU$@@MsewThoQ9EiXlUcUfbc17P%v;P|u=Hn3m%!RT2?>`NesGTy`m zE2A7*%*^LMK+lda3mnOgprDGf{FEW_jZj9NgAGFnC}_7$*_Ujk(rL3pllx{;+m&}q zXG$jh`JG*a&Z-KU^*wead}DcORm5PL;KGnpO{GI?7lR*4w7C3pBD=_tUm_i%ekyXb zB$Hr8IIc{ScOz6iD#{v!qbZMLX&b+jZ0*?jFFoz?# zv#XyRy+Wy#TN*!GNUP4*>bJO0FJ%13w30QaPEqH4NS2F7pEB^~=in7Zjomx$YldMq z9&!hCwu>6*b2C9|0N3F{0e+@+;{iDU&-HRTM=!qnZi%&8q|2@Fp!JQ5k0C-<_sW8Q z!*~~9?MO|JkMkEVI~NE;!1q&zif$&mAfl?ZZN76gw`~-XZWuGKa#57x#Y3YFa|yQ+9YW((~$k zg7c(g+-X3{r;`$9jj-dj{!wBe>1-TEd|^{dfuqk2)QYcSLK-g_+=uDNpo1Gz(@6$u zxs6lR)ZPenCc?m_;m^>#iByT7b?Jlw%>(JMuvXvNL-CBV%mV;bWI7xKsQ(G>{1tQ7 zk4Clx13$|yvhlZFht}%k$Q8^)jyJEt$!(Ti4w6mAKS9_dkYlE6Xd_|H!Gu9mAC=LO(N%bQ|^A zkX>=bsO2HPes2$)^>86}W;A1h&NP-bUMUvym$_#-3-?kPr8*x-t-KA^^iC;1p2ZJg zQpF@?<@GCcie)MK5?p_SVOc?1|lV36YvSav>VTZ=jAFi z7*g&kqNMvdAvLBtQRatbO+M8vb)zf4_NvaxS)P-h((~>TVDnj=yh$NaGQKs)GhtqL z;IdS^JCAYiJ!~}$#taSk(7AAu66zuc7Jn$)ZT)=4wqVBF#n@l7yy-YF%x$goN6`@V zX%yfNHJ0!OuU_HbL&a0OY(wddo1c$Mh2W6!1)Go!-(LKZ>fGyU_xHsJYI<=Y1_!uH zebROsQ?~-Q3nSJWQ?UM2lOPXqD4_fLVTKLoM}lW!nFO>am27h8`+}I29c=jXEQRQZ zaV4a@)3~E4AXJUGY&tUYDbvr9jJDW672!+%9II6FMx+OCCp>U|mFvUO9HCro_QXjm zI^ovXaXlqNFp_rLqjmigt&#}o_2-TeCe?&w%~#H|qG)4Y-sEN{jltg)mz9Eyb>`-; z{&1vUZUbnVPi;;C2X0Gjzu8i{7fs%OfaeStWBSx*UyAzG*C4gHCfmoWjU*2qRt2)%t0U=M?{01AY z=G=lWv_+J37J1S1(kydHtA7$7A1;$d{SrzuL14VANwoO5pCtGq!~P8oB5#<9aKS6B zbHvS0rhYd9QHD-|T@;>AVYWVV6;ua~9?oWYI@YCLOh;mdQ}vqFODz#KR+ghMZpKZPpLFw zp_D*JGSj$zFgQGzct{?+BmCz1#vI=0(=Xlq1=FiQ(&ml!v{xKoKpH!od4(;e&;+zR z@rY#iR%Y4a^b}gjO@9v?WgeYhe9j6~cxLy#sicP2{@mIczNozL?)&&MA-_zC&r=WY zm{@ilES&bbBaEgL8$90!a9u1!QkN!*J;<={vYiH&$x;1M)Ng|xXw-f&My!pk{BlTA zJdQe9BP~OTNEu_ z%!E6Ad9l(pI5{!W$pRYw*)%4uGp^{=ednTq*RQ?hbQY@IJ&})P;=bHo_xQ?6x7)2_ zl7)1@yq0rGC7@pbREXReGiK1D%2dpIzA!`Bvu0DK`f%s}p@3WqKwwQ1d+ zmr)Sa$c2rv)_7&iI=;z-B?o?Klx@f6onQhY91O3r3{VII{TvDMVRij&BKyoaCrzl| zI3Yq@0J;=3mopSKe)#UXUXUclt={3OXIr5Yod=pKj4;fvI^BOx)d-AZ7!Du^3JzQ* z=to;<9% zAbA;j*ye6@hB2@~oky9?_e(Hk*V=c~Ujaam=#5AFvg_>8+0#7eh{NbXe#wrX!P&wC zHBq0@gg8$hmeJv}?)HSJrvnaur<_diYeM${7@b6>a^#(A0Nwd;_^^6Uj!P%Ik=si^ zZDHOx6=&O=Y7|6}&3`;|I_ua8?%o;@l3@br&;Hx!A^bcp!;{w8zWQF465)ewhAL`%6X~Qt@F%JV!cy-X6U-S6U)3P+#gV9v!9CKg%cwZzFe^uzbuX`L&)Mfp>h3 zJJh32^1=PsYS=#hwBYJ6o}PBpengJnXPpyW;Z5 zdibLtzILeZ;`=@1ii4E*xX2r?Sj*$=NlB-$jrIBgkCXAdX@3%dpvQA8qum~L%8xaefC0w`4w~EV z0zs2;iKlDZ4Y)_uVEUBm!5N0;Qj)F+i2tB+Ivqy48z!>Sv~kCU+L&Y&`2htpe8Yl; z<{Cs>Cls$mOlneRLDWSP1?`e_OC+Zezzf%_`A52%R!QYpv0X+p}>49%{ z1t|=_b;lV%I&p(1U(Z+{j23^0zOGOcG&%Ib7xG)!U`{Hvmqb6 z28}p@lBlDc>Ig*j_Tr@d6nf=sV>nXxYmU>nIC}+*qcoftF10b$C=9W%Qxk*V!sJ2I ztRuI$nq|!$P|B7VsBvlD>z2_mkMFv7onxj|J@U4;h7 zCNq8MO$R#~Z|DVR8rr)=pRXxA9bJcIm=ZPH>n0)QSxQK zl*P~?8A2UDPbwfFg9KbplVqxp{d#f7V-FX9xrTic1pr(`$I!5Tio~?0o1}_ETKkJ} zU*+-Gv-^8%UBbwUMY2gz&ZNaxjt^FL>&s~ZDeQRDexWcT%+z4HvM(myxTavcx#1S3 zvA{0Ny6>g!ZmDW6NNL?)e;Cdic#T|Qf$d9K7E#cR77!D?_230dUsfYB!_N0y=4+&{ z!_{>+Q@yBw;JLfnjjcWEljU?Tek5k-sPv5Z0~KSP<;> z{2OOf%}{-moK#1C*pRH-+fH^l(}S8VjPE;ptxozI-v(V-&${M;+IX#k5urdx76jBj zm2^r9v(G-?>;j2vxUfO5!@#+Sz;Yu?93Vy z_BZy`b&kxJJbYURZTEn{OIxh!ZZ`UVQl$81obHF4G*=XVxZ(Emmi}CaCwbr|0k*L>OSkzwGg;NF1xk7On$%ILyxp(TPdp>?+b` zrbVss^vR%Ua6;``#*_u9xq-K-)b^39z^IG1tJE~M+-4n#!vp$RPl{4`^b7G2hZ9K# zy+G@&k8AW{+%F6@&S9U&z0yCSPMiWAZ!g@-t~V&`4#D1!hiL*w`T zz&BGlUokQA8fU1&l!&!4NElgqv@FRQFd?+-Jxt+Z;Nj3A+-2NgS!Eh?Ox3*nn=-a- z$ptNQlxsQDpzlamr#V2~u;(znZ%)WAL~zB z7#`cMd>UU~dt-2f`ON)onSI#iepGY8=c>mqo;(jU9u*pC2D5Mj{Mzx!8}~rvC=FYB zUeg-WFo?1L-)`mBvZg47SQ3D`b4cu;N+Qy~ZK)|*cdnR=`mvhPUGE1*K@>~e`Xs{K&o z7)_oG@Jn&v;Q*&r2a`(A^2zk){v1w@pRf!8b2}rdA~KQgON*Wgw)P`Sl5b~tVv7ee zn+SvLMA*vO2dfGqS6tef9T>7NpC9qhI1eRia2_9wlIc}-9VhOg%$*1l05V*Z$?E92 z5yipWgG$&N>nId=>wsbMkn-^KAJQuY@3fj$ZCGQ#C&h~=?U32$cc(}xZ2WV%K0umn zuR#{wDNFgQHa93(+){a_jN7qf-rlyhiMU#ra#gFciAB}ef%tL1Uvzb1&83w4w=E~@ zl1B0=oVSaVPPVV^#s3n`RZIh7oxR`X=DlR(v!PINg-doU?ZEUxwR;M@oxEKfaj5T{ zT@rmPx#atJ^79KL-(!DmXT0t+2X~=Nn~ZB6oV@#-sP8N$Y4=a8Q~Q0sUUSLdGkubj z1_sDvuOFi@+cILM?tBhICQ_Itoq*{uBXT6Ets_rS>=_mlSP(HbM36jossZX&eZEZ+Q*(QgWzsq2JGZcXQ|YgR#o zbROptfzq9Ax;ytAZ?YGq)Qo|WVgYX(74DUQ-+W4rIQYfy^hho~`p{5qJ!PulV<9*S z=-r)tn(K1-8~4GPW3@Mwy_bLUWaZMV6AUp}BAX%%H8#H(wR{E+ZCW0)E3141Vw_yE z%xagb=_GU5y_n1c*ydNCIwI!n(mjT$$5z<8ZxUVZJZ)6VY~Olcjxo;sLypJeAJ9Jy zEm7Rb*o?#NZ(|F7*$&D=VcCSyUk@?LWm^wwZ6?RA$hp;O=p2iSmAmho`E{0PL$yEr z$waO+BW#b>hJDl@KMcs)aLz=!8MG1v*S9yT?wh3|+>C6or4AU#3qN#)Hi5|bj(F=l z;I%GI25a~%T@+Gvpf{#+*o#5i_?C|q#j8W8*XNKiqNRAPWXl?aTU9_0P#{gSwhqhW3`1G_A9y(6Z5x`-ps46nd>Yh)?QV7dpG z!GETaAIJ8KGAY$U(etYI|Qbvl)-}?xQ z-$;noPZB>|!D9QtC5!SqKHinT(+OQUOT1JS2QR}M+){h8+T&f_bHZC`TQQ7B&C!R8nUaQljZJLa($u^KP&C zdY^aeK52h0uohn%yhel3Zml;FZE)lT?R+k@CbJ#g6E5*;LOuL|92F8TLt7tTAT*eC zbXW{G8><|>i>U;AJ+FZ1mZQ_Lwn(df`8fP*@c=wMCncTL@p%;$H>R1vw8=#3VUggmPlwDRx z;VkT!s~kWg^z)7`QVcO~}yfUC>UnJL8O4R766Y($yAGSp&aKv9;7 zMY6zKCHd^MIyi~CzGYiDlNeYQ5bxi=bYNMyfQsKn0Ey&7-IMyztZ(?nZpyJwPgwPcPdXf z#A3KMeD!G>RbXO-lSe`)uBi?!tz~Sah3#3Y>n|K;O;^5&NOBf)(62MxF!0E*4Aux$ zD`{E@<*eH3nl9)oeTOA7|NSw54{A7Z7jaxPR6-#DMySVg+t%Sg{I(ps99gve(Jv~} zrPZXAnkHl$(D%udbIQ13)%Zri@`nO#NvKtPw}}SB#H>2H)QWRM@-dGs<6Yi$=dRU{ z<3e#y?ytMY(=_$qM|uafX^TpNu>b_?jQ{p!E)NHHxz0y-hU?#c{IB0*#esKRZ@+1w z%=aHp^|#}WQ~_3DJe53!C3LV$!$SpfiqW1e=#Tc`oTpfs*bP|O{I5yiZR1s&oanQr?IPW0{kg7^Xf(1FLtNySz|zw4mJ5}9e%-#(*m;& zWO9Ib@ZH-MH`qtsFLZ8~qAic|b1(Vj`GNDYDgo<$mX;!@)owu!8_QvK7}{7Z0F3b!9Wl zWzxz&4}Ar|g(=@Np=a9WrnF!EzZ7CK&LC|MP`puNAolk5K~^=`^NjR}KEbyMXiRntIM zhC(syH(ueZ>qE$M%WQP8_nbs|&n$MyJ!)JS5P0Mb!KWw726BIZ^cVqlG|@+D`c>>D zD&#_i^)_&ODqo-3vfO%W0dGkTdb`~EAMc!X4FAqG$+2ij%)7rE=U=+LB`;vc&gA^k zZ~pP*7VY{&n|zN{@yB^9YL{Qzi2-kLhW{x3P=>bD_0Y9etT+Y~?1s0Y*ldVsufdhN zRgckRmbv6{P63uTWmO6FFWx8YjA>p+wwr3(`F~qPhon8{uTmjtZK~2 z3y=Db^b!H?DnwqDWS3r5l|@#Z85ci**dskCg~J=doo+jn2y~;(CsVP*DX$7Tj=X6# zbe|+l7)-xjy{yy$z8TVvcM9dNdC^WvN_r{q2q1XnS^4lIk|6PYOv>6uT8uQ9PED+% z!Ea0?>GcBW+BKN*9xJvU?;!$skyOR+Z`ecRS@90_YPAiX-PJZ=>G{PMirwzDJW%mi zRR-ORDg#1mg-p%Xoqs%3VV;9d zh#j+;yAvMGeM)l01)RT%z`ZECZYb>8=(AYTFN*-g{6?HlzWpNe3Ye-=`q5V1iB(*y zytDdCPuYPi(TO18CG4pxC;`E}!V;Js;o$oJpI6V8U>QqxFe}6&I-h)K)#Q!?Vb%pe ztkL4i&~B={!l@u31BTvMO9}qz)P^W-=`i3RC$~qUNBv|{<^<;r^wzMR$;RK|#L5J|izXcxZaE=*fEa9d0r#*bqh^Qz%z)_s zT$=S=^-VyJ6f}68C3RungDNNiy~x7|A`E^@)DtIRuk4X_P9J{Iq2iz9Vw%&|q#uzC z1K-)WBAW@uXIBWpaphpNIl2WWqUrJ92qRkb_rj99f0Y^8!68B+cemeGxBvAO|LyK6 z>VRC=c{EaG^^Yezg5cN*)no@N4p7!_!Si(B{5>>10HO!6JXTgw7RSe?s$1MKvNi8K zFEtoqDBUnaWLT9S;Z^bwPn|vhI`x=dz-MvsziI-4&oF6w5#i!*5#&+6;N;>l^XaiG z{|Y$#Thadu-}y{FN3^*3Cin*?A6ahUbqGj4!K$4`bwIOzD0t7P*s?WyixJS_vWC3$ zW8|R)FkWk}_cw2?!6}EoI{0a|0)&KQ`TC78HTP++Du*?b;vU`uz05yuZ+OEw*t=5c zyOLUWr%i}Y)((eTDxO+Dg0njaZiMzQ~yGy3`{$9`74_{TGjM1t>@m2!VvlH#L0 z#3<3(ABKC}4achj#CR16xJQhXuJb)0pRjA0>+yP0i?Mqi!uf`Tu~%zIlu$ayOoRFI zCn5||V`KLZE<+&ZP!OpB_43IiIkw_`>j6L8e9mJwBxad^C2eta>n%Po6&>rEFsp*k zZpex%U}5(`&3gXzJp($#?ZSz!xjO_<8~@3l0hwm7?CiW^e>B#{|6DeP;GenLC$4=L ziU&BKF{}5cJu=`9H52tL#g+^(GnFBKHX<-}DhQF+{I)GE9SMAShU8lzhasX9pt82P z(O5$yk_H5~^j4i^!>6dA#SXuw|x)K4okH&*Ax00YbO&Aw0UFNz3(Y0g`iUQPB9MtD>HJtIu=(4Yf5 zN77`7impi{kPp-q!KSLtum|G8O)X|;OEq`zfJd+6S@LUTQr~58iH-@e*G>4w(fw{h zLe=#3;@z;|@Oe|-z@1sTOX)slfPV_b@x@`1Jb}ww6FFmSq>Be5!{25uj0b0bE7Vo( zB~V*aFb{h>gZPp9`nG{CAWGjKQQ~6PT4HGE5MQrpsu8xmIjw(lC$RZFj%x~wt(PDX z-gm3G&=K`};yWi)#PjA#-Yryw@!M3 zAS{5{UnTdG{bk}{rAU#t{w;HJ;7!3_MyG##0FSv1z_Lf1F=tL{sG~Cc?>Xb9>BcWJR4>V|Lgu8)j(fy zSbX3=RxW=ec%%*lM^z>Pahm_S|1L16Hd9Rs`={i8CC2|$`ahNa&r1L2`2SG@|BI#n zAH>pcep%oDU)hP>zyk3JQWZE$!!xhPXVa{a@8Mmko2;j%ZCjP^p(>Fr+Pfad+1f>( z@a-VK=k<$W04zBZ(9_d%1n=3-)^eHm9Ve)!o+hAp68nC+hd)(&fas)Bb4+IM-5$^H z@5zc2scBZ~-fdHxxeT@F{(E*{wZ>+^f!r600LxH|e~@do7u~9z(QcrAfI14)Ha8b^ zm`#maoDFcFOKsog5W3q~D;|CbAjA}sfsCV&(u)9x>SN*ipuQWb`8IZjh+^69o3USt zq7%Iqr12-}vdGcN&T$YDiN2|9iL`cxeAgAtQ9}4o!SpM*`>cPkSJnU&NKe3zA$+=J z8-sUi$Fxv>%x)joyWcnD`>1UvxX7lCprmV89kx_*b3;+O90Y%IY3(9s1o=nK|tt>5#8wS6n% zQh#1_Q%!6-cs8`DFUCAF(TwuC+7ss|9fSJG2EAkTYw5^w&Z?jxcOF5$!)E@4EEg+G z&#psQZ%_66n3-3S?a2keFC>+cI_^@s#4+{nr?rlct_38|jhaxVp)DS}_-}ZBeL&~@ zndDH)Oe1l2T8uhTxhA)1-gwgZz%y4TgWpKYUyU?slWet-nP+Vf9bDR1p{Po9# z?P1@M-K|Y5&T=96q<;U0CUjGY^kc#fUzO~9vPCJ%lP*Il`Uzw-B-vr7H6ZmG8diyYMTY}^LPd2Evg(+@S zx92{Z7p5HgHOwTSG-DUx5NGj{0?gwiYs}8FAg*yEN#a7mI?%M$`7$W#@boPA`1d+e zGx2VaNbg)$q4PCQz+#2*?`zx-t@|)pkXWT6$8e(*Hgay)#yws@f`jw7{|lgEu}@~R zzNqh{K-1&Mx_A2=AS8Oy-?#~F-_q}rB>JP8a z3vVZy*OPBqkZT93l{i;nT3h?eCV4MS|?Rl@_9F&G}-{Shyi2OxcKL^ zBc*yyvZj3GENzdt7DWe}Xpe#&hQ$zanAeAlBQVl6te_B;5Cy5Zp-Kx4po15Vm#DnD zzcL`TzdXZW^X1)=sKZ86+Vj(co$1xy_?3|$4>mPS0k&Y{)2b=cy7b?X<3JT1njJqv%6RTCD3Dyv zl|NbP@^{>q(Qa@ky0C7;atLKyImLR}G8eM5%{KMZo}V%9sSks`GAWP(PrG(b^R9-k zpknT$y&hoeXL~Swu8;n7H_71lyo#*-kz;Zy*_-O%W0UInTr8#rq8|}XeUc~=pjc@r zM-~U6W`_v@SHFvb%B+shnD)PYleQUJvXwY3GdJfoJQ=Is-#tmUMz_?qeG+B?7LdG$ z2V=QVt(g}7GhFVC8^~~ST74y;eEQnO+Y_~BS}3w?nrCGC{L@zd{N3TqL+?>dNh~S5 zY(bPjMb!(ly9A52RyS)`yeK(8ZXr~zrme9a)fCEJKtI;_{IU+KwfA`R_)`-ja2lq? zok?>Ufiqj7Kbuhl6-Tan{){F-U-9f-MhTv@r0@#zRr<*zQ&{=+j#3vVMT%rt(;o3o zs4G7C2oahG*jqS}{h41E+rD`;?8BA*gi=l!aRO~pU;WkD$hPfZ+fUz79Ee8pf>V9E z$B23Df#dVmi|bijHBC~yN~~JAtrC-NV+)DLmnY_<62G5+2)IH$wO*P^l0(%^w7G(3 zw5w{~$s>sZ+^3yz%kBmD+WK0ag=!m^GK}o=y#id|T#_5SpX={;n$6lJ~jTE*WbUP}AneYHBX zF|#IF(|a55o*$LnX}Bf793qb~%gpb#ydZz#dZuq~%$?Tc+a2++_=mxc==34t>F{9e z%B5=)hfSgAkO_MBwv$Oi7qMAe{;GA~M_9K;b5ux#6T?=DFaS!;e~<)I0^dcj`MsUocXob$Lp*JEpDYJ}#kMnrOM5zD48_duZQ z#?Xsd2T&u`>1d-hq7PCv7fJHa;up~{1T;9B`|yDC{ioa7Gt#5GlmOi*57eGSj2z;( z;I6dm!d1yVaDT1t1+i4UzT>16lEz2v+K7$Uvk|j$jji(M>vcw8<|Y1Goj3W2x@x?> z@6t!=z0rX|MNv~8FUzmimV{TnJ2AObF?sJUUsf&j&@k0q!9QLP0p>GCj_?l@7E<4v z?@YfbyR?pNIYM$5yeK~o({XAy+%&+ElocEGJ4rcS0ku!DkR?W_q<55WQ0aj3w!N2$ z386>0xOQ-}6~aEctEK_ps(vVw#=Zun;l-LI%BsmB#H;_jR(SbaY!oEG1IZh;Boi1O z{w}sRIMp(f*NXC&$)~7PxBLv(aZ%sSo61%DfhZn=ci;}g&?!38x#k+m`;^Y`rG4D+ z+^Sw@Zh$d<;Jhg*wK=B~uoLRF<&SzV*fS=9@GWcZzWF-87$p|t#7km+K6f;^vNZEe zQVJPv-rU+<$1nPGGhVs-R?yyg@YxpChfMG5*`TgE`}9kv1;O;85apFi?{;Ur4j?Yr z%fR!!c!CxPktA%u?{S@k&FM&|g4!lfI2BpuK+p>UP~w(bkq#(dZPsOolo_4^@XUmI zAvn7Vt9Gl{9|s!*_%;vY6d&1V9Uma}H%!YhPmG(kGFePrG(B5#8=1$hq*z`LxEQ&w z7j*Z3gmr27A-u?{JzIWqLN8g-*{5F*YKCAbh@G%#!90be%WiUS2}}+cMt06zLu&aQ zpr}1?NnM`=p4|4`cp27OSH@)PtbA<%;P=OJ&Fy-bf9Sct@em1aR*OE(nr#jBjK0)Z zD*1ZZmDEwbZH^y&i-;7CKd!KvFFjma#Zr26ysxB90zG^L7PW)BTin zmk&Xj8sma7d94wL;2Q5BOzAwRE_`P!`%)6EG4EU+9G2nrHe;{H zhIw2Zso3V0%qVCjDEVBr?LsdVv#w$`Kb}g@=faC?f!8iePD@QeL;}a z1zucK5pot-HGS(+Su0?JFLedq2vA_McLI+*xWI1_ByrC7BPd4VjpFT68& zVrL_Epc}pc!0iqNnzsW*0fcm!lK{3_#yivB*+SYz6ngLJ-T*)6#pKbtkeKae&Z&=U zfrEGGG0HMQ(|gfeOCk&O$Lq+jMYQ2lyY*|mc>(eJg2&4R=XZCJhZI7TKp$u~@krfU z5_HsIxRIL?S0hFEz5@z7FrAy!Kqz1R&U&5S-HyN`k}--4p_0CuhpRXi$)=J7%KmtgX$yu9QG9V6`@_a2y3H zd_N5$w6fh;#&>dt8Gk~AR+5$i(J)PLWCESjEH*Vg-CvR{$HvgUCo9`zYqst`pydsI zK#GMLA^=x7Kagvo2$VJ~xZr1wQM6l9mrh+bKEv!CPn+e894r{QKo=ttOPW^*PEDP_ ztA{@eMM|lL7ySstCnOAU*Rkmabv@K1lzBkmdVv)FBcjzunb3OaXzE!+4Cy(t3T;GBD<*_V3THvB)mH^r$>P zI5+quz>s|LLd9H8c?>4J&CN7{!Ve<9FUPCGx{kLbcUn9wzFkhdpci!f24T}k_k74$ zYITuLzs~{cnS$-O)eryx1@iM=1u4*!sSjD4aFm}kRvUJ^>3D)p>YhQrkE4*9{rquDXcs$bcwX3lof>$pwt5b3>N-M?iH&+zVCLfvhj?$ilq-CPIQ(*zx zv*wf_gUj=Bs8MHw)YJN_GK5ednJShfeuQoA-DBjeyM>ECVBC6GwLXaoh+fUrWy)aw zyp7(I*G#69-F|REsYMsicgMFoziKQU`t*A?WVgmyrwG~EFc#YjHXZn6J}RwnAMbhG zYXJ9h5*!pB!7ZnKO_hBuivhyHx6DcoW+*b`f3*GT>oK7Dy1*5PWI7PC?U~>O(82ga zbN=H7;Z^}YA!zgICY8MtE5Ed&pXTmmS9zI>&gInPM4!Jz+cH`qw@&JEGoAy~1o3=$ zLv+_kDc4Kftt=>&9`?G0EN7q1j<3>jfh*<@aU6Nb$(zdO^#~VMukS* zzYdNAwUX|{7t#j=^e46349ETA#Fy+NAUwZT1X8xa!=Um+1V0Y)PDbV`{dfSe|C$)b zpZ9|uBTu}G+`KXMp8<6UmOM`fF*@JGi{;rpHwr#(TA`nqsm_)6c)}LkH!@D{`B6Us zaS;{S@Y|=CZf?OcweVc^$7q`_{dK971z%zIk@2$puUK zba37FW{|x(9qe+nE*tU-YIKD^>u2O&ydFQoRTmZo0DS{^U*Kw9wgnZF`o@f022EsP z+C&#n5GN5EWd4qM)2>E}U+L}{b_bbOVeMg&SrFR5BMNl0f^OK`wOcF_lFNEVdN8k@ zokM5m(W?u{?BgcAYg|z`?bjvCqlAGVMqzIWcqISLCuqPSjV%W4Gy)9vs~hxPP3+pPpv2lJpUi|zWT4pfA60ZkQ9_Ir9?_eX%vwb6s2J(C5?2?fr3a$ zOAeI~0qKF%KuQ=47%^a!boZzc-)nx(ea^Yhea`*;2ku|?V3+gSwRgPg`FuU!-R=(P zkkF}GqvWR=_e~LS!2#UC27ioacvAH5j*)X_JQ9CEx$M7t%2b;CarEOmZq0F19@UV_ zX9qFbDK1Pk0(9(G)U&c4%)D-{MZ~58eh+MQUjpu66@Z+!N665Exv~7z)ujop9cIv- zpVjni(=gXYgOR6Q{ZV^1TLW^NVh}4(XZ$hwo4RH}up;P$bMPeVVln->rgTXC6B>BX z=jiN^`Fpm}(-s0@AsJ%rJoF___la7_uf$%w8^ZeuU|V|N7}RJ!`# znxt6~T2cyp);6IU=wSu$<=$kgVCpET6_sJkge2o1RPLL8Hovg2XrEyFLocPvOOOV&9uzmD4;9 zpVtWXupznU5*?7;Fq1s3sTJ{ytzOvE^2f5k2Nm}k@J7PC_ptQC^BX`XOcB>Ay&=vT zE|I=6GlUZ@gANsMX-^&9Q)*bS6+}+28Od{;c&AW;&a!e(mTxW_S&QgvGL*wEzUhpo z>2X75vJV+G?%#8vbY{`L(O*a8t@*fOb1FYB22*Foax~sy5zuh$HFd+=MUld^imBRN z!DIgs^R$Cf1aGBT#G=$_Pu?JtkygNK$P7}V_iXpZW@?5%xp70x8RBS`_hz0#1>pHIt2LqbhGjV^E1qVqUDkEjXdkMOXjGQr`5Sx$ri?{cD1Usy z`rj@Dco2`LaN%#-mBzOoY`)_ZKNgeV4b(TnbzM1B1ct9W-I4P^Z32GP=WY_|XWj6y zEB2g#gopQf*J4To>Doe=GMv|Ju>@N$NUa2w*>lwF*`Czw-+E~F^|Lnjs2BIpE79QO zs%yy!RX;k6q!xMl7fBrrGQim{qvX>*rU^$__=K__b{4w4*pm*bzHj;Q{KM(u9tQKk z@Qn&l%Y;}>Bv{M&0VT!L#c=zNDxJz`8VHas$p6|HGv=1)JI&}CFEGB6_aAaA^sQfS?ZXp&Zj&U48_dtw_a&YSQ2Aoa?P`Ptr#6puV-iAd6qc5{ zjf}dt%PZ8BvgNf**S7i9V9+QAVhWO)edz&!ngXyI@BUbLrkL zD~FfEjPLZTxYNl%@&SmHoQQRv8N8q=evsO!5h^PnRfA7^dowtF9rC~DKXU9Y%I)zA zpZXyOG6Xkhr1YIX_Ud`0XNyCL?6!lZ6ByhS5eCVIP)-f*+F_Z5YrwBfBn{8H^N8Qv zv%-sG7-MUqd#K>KO8f*?G-{iD_U2?fz<=&r!MebYvnG302xbKqDR;3lcWw#a^LG57w!9Aj-;azXX%X;YSd#I>bzXIIS1H6Jk&fII_Igu5$ z(ama1u;`aLAM?FQ#o0b)_LECxr4{or{)A+&QyUeh?ddvz_@X+dC0&pEu5m(Dn93T( za#+nupT%6+Pra=Wi^WqHSgRzUKy`5BlzM?-t<=Ee_%U+Rt&fGvl2^f0pkFQ_SnM)2 z%myOt;y68v`kdO{iUkXu={)@S+n(LdtV$Cs#nbbXsp*O$TzcU-=uj1B+7hiI&mir< zV^%H>nK5j$dq!S+h1nnJhtJ4amtGo%f^}<6_D_&z$44*|)LhxQq5gxX5RXj6O1JpQk73S9<>FM_b3BA2RJKVIFa>oJWN?2h z*rtUN6ljrl$#=T(w|~T%W+~-uyelO)fNZlb^Xkwt*1uJ$y=;zaZQRB9gR7O$XMWJ= z>{q#c7Q6THKgPP1Km3X!rog_8#{>L&Dwmsks5cb<*-?y zXi-uE2TmbmKV}XHgRvuTF#cF?Z`T5h-b88*=G;Ex^gCqc9=tadg8qnGcnjFbuCTU; zYPrpYham2(OFlb4wpe)&uH8HsBfo|RLg<(PV#h4mhhBAVc2Y_2>@%~L?1PrRR&T zEPkk)@Dz#&EhJ>-BkII`ROEmV;8ZYs?cQ`^<^{1ein+xllRoVHvHw(#cI&r;;hfjT z(@N{Hl#c19rXK$pj>3s0dE;@$aE;w+G1&0|WTwq!LJVVm6a`TK`*mKA-?=R+IJLyz z)AaiXe^zUdv<4|qF6M3{(E!@g$fA4I0QRmklV==9U`F37v>oUob3S%i@I=4gV4$iX z!rZGkC7Hm)nY)Tl0FR&HK2lR+TVApfp2-Xlh=``bJ1F4Et)-%bTn^ciY9#aQz{qblaH;}s% zKeh%yrI)WD>-Q{dyU&ZV-RLxTPYMdz%6MY7(AfE1>2^?C zbde-bc46_JBI%N9{A?g^tMSw;Nh&rT3EE%vt=KQ|fAVa0ntJ9F6W5Xp)1RzZQroJz z?TW{Ib>cz>IAo?etHPpvx0^4nJ8$b;^TiA6h7ntSd>my+nt#4WKX$P9aNrJaW3pQ1 zV)~uixX6OFGWCw>b&05``h%#w!*1U=@VaXX2++Kn)u$!EReu41AppsE7a5i8nf*hH zQ}KkcPE86S-XN zuoVRZSb?$D<@Z586R=MA8j*v&KMgfUJhvB5zt}XcFxQSMeAzSfD&CVR4e4%J-vP%A z@3VjoU!Cb(K5dK{1a$Vc?6w>>tY=?5kiRmXnpEtCgZ`m=nmz!MvZyi?o)xKT1(fFz z;ch+c6He2CF0Oq5-jc7Wn&4&yS7*~^bFlyQL|*mRZ_$h{&-;E31}@) zm}dzlb#u_xMsKO>k8WA$t=l^(l{SOEPP_nIX^ELUJ!3tdk2PADuSf2g#--t>*z8(= zO~-!vR%E2_d&^3Hp{>cIP%oBY%tp1bt>)VrwX{Dq3kS%7qI~yIgjjXQ2^RKgs-pQN zxBo6EAJ@ZcJsslhkau;pQ(b@^XS)tx+t$ECgdy~Q7|X9oAK^OHDtc{HM;l!u(9%Fm z)V10se*P`7I3Qhc8_hL6>z$V0bK1E)9d#*P@mjF8Nd(Ow-JKGVX6EJ+5#$LF(r6MD zDEgJ#V7qpHL|<}-2hK8-VkL9dSAbp+%2i!Y?v`mh)DDDK7_-4Y0vn+>a@_W_aXrZi zNoli{jc#1W`i2c#@`}*D@UH+^1{ClKInL+i>w|r51_*Y55W@J@K{7|Kh;21~Ob`@Q ziW_t+zGFK|Mpg(SgQa}cO1lKv6JLWM*p=eT0;elf;XD+K{2PEf;{8}m0vIRh>&Su* z^_t#<-o25NV)Z}9DHBg87#y$x(UGe{^38jK{q_(Q?VT96f(hRyFXbw?C~aGxEh|#% z&(?Q)VRxm09sxpa6@&MW0@sZ~92#CN7(A)%3OsoVXZ=hMtbO+nB>3!(DqDPHXrf{ZX*YTUq*mFCuj9BDW%;d{czpYzHzG4@TEXslCT80`XY18an<^Ug!0}d5@JJqBB_7zwNWb|f4(KmoeZ6Mb-+fA*numXLg3>p0 z+!|LfZgSG4rMtbYTz)-7o=2s6NuZ`zVe_%u96ATpoJ+?*YJq5XJG;j}b$`{~o-G6@ zu)32-Vy4Rq=YpgS0oI0{#X;>58jUN~{xciw_}OTEY{NzOjsSwMHmm9>4=rUgx(Fqq zL$GhqQL-HJuH#?e2`d+8%9^gw)k48K;hL<}zc zBSDxA5lS8STzJ@orO1@W>bZ_|ef2mH#edSSQAdGd2SoGx=04BPd_Q0@wZ|ZLeA0V> z;2|Lw`Wauysm^1ulnGvKp9v@S&T@lH8s6&==a-+}ys1+;GGI7CrPMWV5^0;Q5>d3P zjDE~xAfouNcvb$@EUPb~g4Y+z;?RAODbVNlEjL~`P;$#xIql`*a3I`G0k+uSxjAMk z?Y^kCxA4hribrqy>>azC93XByW@t(`wkg>#@6wmrwU=*;i3X6E*D8jPs41^xVbuDh z!9XzzVjHT^Xt(hpLa0QP%Ohj-5<2*Ve??)GGcfI-()F?RxHuyoZ7(FcmiTS{7#d`| zI-85eYUc|ya;~>WCwpdPoY1&VDv#PB<>C%){0G;ReWSd%dM%~weuc%jhZP1H#_GpT z(%lq>6jHKNK$l6Xm;dJWGY`Z0U3 z#@9cP@$6^*TQ*nV_avf=n=D{cd-EUapXwEHcx0GM*PeWl=`PQ2HSsOXG|%$p5W)w2 zeoSOR1U&#Wu=MyZO|wgTuAb|F^ScE;T&pfsbODiJWPyCdl{p+-Ay(nFUB_un#J<)HM4d z4LmG6%l2?lvm-2~<)^L8Mm&o6)1ABG5f5_8NJh>=U~h`Tk*q?+kL&Fvg)D2ePc4!T zJo>KL=ki?hTj$z)SSN&wA%;+vj^3dO&}6!Dx02|SR%!7?Yo-Jy@|D*?Q+Cc9-2F$~ zqptkIw}g;uQ#iTSirte*|4DVZ2o)uA64uk*{XY8zRiourX7VJ-L&T5LDfvt4iyz3j zKlBmV5G?Hte{v(g`nuV3>hQCH-20A&%K2;4{%eAY`5ZlSJ8fG}V>uK?$AmaaI`gz8 zrh?Rz%25M8sX57PxqoNo0}Bi=UfeU%kl9`OD}nv^c>&@?;APhoaIuykPC3Az**|F} zYBE^A1Fb;X@5;Hm{`HA}eDp)7q?#DdCBpZyv*SH^swevV(Z%3$n~1G(i|b^KJJW7dYet&xda z_`SC|dQCzga#=41--f(p;rd^l2;gFBA2xFczW)9rlj`a}hV9?~HG%IK>NSFv<1-k* zF25Ec$)7AUXLU0doO%Hl>OgSgqj_f{YB7u7L7d|a%aTC!(5y=|tj(6y2mkgK>&hx^ zji-^KNKUWuA(x&{R%;KAl;fxHCNKVZy`)$uiO6#){IpMJg@hQJ=C!{7_#=6(Mvmj- z#;0NqGnM^n=*&+5Heg4H6RwINC!FcIFAV7Y-oJLUq{v6<;=RB###K5NCgACA3lrAg z89!GvmW8_-V=AxUFIkdm5VMpT#R3UYa~X-_^AEMYO?|!Ph@73W3G$C|y0l zcX>x^aSw4MElRB&o%ua|zYg>@&H+gLwqLE*K7hnO6sDsH=bgZa(Z@y~F|Xrg8=`$7 z$P$scVDkMx+)zFujttt&ggJLQVC1YCC`hEXooE3e5$+iuhz3YQPI|}fehr+KS((Tc z=+j;gFX~~w;$E&YxLPgBsi^wDv}qI8P~0Xf!+gIx_y22)gMJTR zuEwGaoePs(ap_w!g`-%oKf+-e_qKsm^2UJP;xH2gCF9g{_fUm}r2 z=kMv4_R2QL^CF}C@d7JXGl3r0(E3~|pm&#^w1F>VC;1vBXqWHXHaoyg=GU+OYWXcy za@%AXM%m{Fu)uYjl_)o^-zT_B9YIRYt=~_S=RFL3$4+i{D5pReUc^6~zKre5#&lTn z-dgy05*ApM&9#i&)HdcIB{^V5R4ICD{gadQN|P0R6?hwU)g#6;@gGvTce(1+C(JL1 zGjjherAH7Ipz}b-{Qd8<>{VM|#sQ4GKHWdfaws!x7(Qx!c#Ce8Mr$wK`!q!1iOPX0 zkTU~K+I|z}x8#5(Z62WGR+WBpgNZ`@VTC*nAHtDd@BdMq$KBDwjbC5`m%W^oZjY;$ zDdX3qC}}7_SRljmf!ym=a>aN#GLB?EVW!EVxd>%|CV!vSXLix#wZ=IPSW~9B>`y%U z#zcn5U{s!GR=ro8LWRNSGn-1rk!yC6|2|T3zXb%;(93GE`1bN>PsnasV(!7I$&>0b z%UevkiKr9D6&EE@3k)WAZA@C$YnpLIeq1r+;mXdhwx}fy>})vXj>y-+-5Sf4asOW| zK)uIKcE84@m9wwm(40q&p*y1bti01ldyOlba|FgS{%b9sbgSMl=o%l&H&@#y!C0{qXMs-uXme(FE18 z?&I_RyTnA&db_8GmON9R=i&5PYy27;@6#T|EjFC}s90(BMGUC>W5ezs-0dM+B@TTxOXJcCTB2nzak7T1ITf`kPuh~eyrAo`mbowlt zH)ml?CpDTs;#u43&80F!Xp5Ss_bu)@)Z6pi!mrbo%YKwTHdIu=PuC}Oiv$%r7Y7fh zYcp;i1y`&iWV(LRHgXHrvJ4+5v=U~?$bL%J`IfZTbY_}%FuO;e5<3Z0R*?x^seP#x zmHdld3E%jrD^|bPW)ji!ZtK z#X#-0IA}YdOecx&ngq;3_L3xeUh>}PbsC9r{PhX>n%%f^N;bT6EtwA*Q2y=`jchCGZPhXOK3u zhX7W>BP1(>g;^dj_bS}7lL%5`yLW(D5hX;pilB4G{$`{%Sx@P{WW5@ED~|ovzEcvb zT&?F5gcUOQa^o%Wf+_K93c2LGny2m6}=d!ccEu1sTy5Fj`o3+N1JCmt*HIM zYI=oHK~A{QEjzs{@&|2Ei+3@`DV4T^G=>j<6qoadoD;LYp1}6vW=ka$BS|XljZ7Jf zNMDJNqrYr*YPfmiC=Tw>r}hTT*`~M4ZX5ZckzpQ3kd4Tqxjuxwu1|#`vB<^?2r@I{ zp!9y+mEpCC%B6S9iO)HHy571i2J$c8-&B@f_oPMJ?g@m5$XCr*TVT%TRBc?H;!1id zu>wOZLkWwWsE)F&&bVJ*XPz^|Ax6loTLz^jH^?p;1YPRy8(XEpIia0t%0K8jTAA@y zDE_kXVrhHG#@5|G{)Hdn(|bx?1=G$cY1M7DE5@(Abd|62%M(vIS11cgtN}mFt*-%q z9+WGN;*2D88VqGt=A)s`f@4qzwmNr6vPyI{(%#JW%nZz%V$0$b93f{rokgo%rCe|1v}AGaJT=4Yzy4=BCH%UE)h6 zMp_%Bm3cNE&w`9_v$9`7O;yT+!tzZ%rTd#~rJ)hkIn^E8QLk^>^H@1UwOI2d^ zv8$&&2ieObN+y-IhMNxK*d@8r4ZGL(sR?{nrT!}Iyz^Ra*!p8_Vu%jvBNYGaDGaHz zX>P3UX-5ABU~%GJvjIM!{`V~jfYvJ9UlmXir49{VPEj+xWA70ZmOmWFPYRwB+SfeX zY>gDla<($FY7s}|_YMhvL5XW@JoepqGPXY;Wvv7*BNegk)iRbjTOSxj%tKR#>keNk z5IB$ZhE=ywSs|QZ2?Nh4*M{A`F>J59C~XF%P2}C%A6f@d!m`0j8FO}#OFJ)r{6?Kn zAg#NTDQ!As&R0n$7-}?wEUW!Y6>w;x^%Ah3TvOe{B}dEi7_+v;a!nUT62-$J8AR+w zol$pnuFqrdw93euWt$w>3*=S%i;9l%p~)SBl=nh>7Bp)NX%+LFB@4&*tdI_0(F;)ZSE2`0lEtXC;i_ z#HP{Vccjd@$~1BMSaGkowKbtt!Gj7;H_5Rz()-tj&8fM~3_zN%|m8p`mrGwIW4?`D39;qWe~3ClOjy>{~nY&A3Kb79P=bnX|!@JFqy;?+O z{P|Ltsctnh&E+9Gz99Pvug9oaV-vd!_*jJz1LnM*Gm(dunk0ZB6=Pnb+Uslf#7IO) z>WGQb)Kq_j2puN1rdq7q6m)OhVO$Rp04si(F?X0odsdqGSka{NvGvBs6fT&~avKa+ z4^E8=*}2H1GK}jJ8U%SmoG*5v3^I|*rKb8!U{1=Pn9xY3-WW2livrulf@`FOfEj#C zAnwXyFn>Bvd(WCc!wgc+leY@q&fHsS@Lf_K| zr7K-Kq_jT2!hK60P3SIZH-QX8E@B>aRF#y;{tzJux@D2@=&P7;j%!{W6xGzGm5hHn;@awv4zxO1VOUGQwhu}Dt#`T{=@ zq@q>^R(@XJ12ZV^vOedWA%ag(0V=TcB-R|7xN8NtEbJ3!qL5la)6VU(hvHccx~LbR$G{7bg_H#v()XBq7!3smUlTGatqHqUhUKrV6C>&OCoT~ROIU+l6PtmN>s_AU3BFC+G>~3k$3@A5PHF1BH zeE@kx<1OpCDc9nE)_!XOv*a9d%i_gS+}Zlb?ob^306e?&USzr$J?<*}PIe?yrj>#K z6Hw1`1J>YiJ~S#yime1vYKD2&v$HPLZ&E3hOL)~VDuZUh!!456&>=-~0@}owULaf} zAX(?vz)@9A5B@D$E54i&%z41E256)Kr*l}VHd%b zLmkU4X`i$EL!oaxr;imx7R=erZmDyQ3F^VOn06{!pNs4`rAZi$pwp9&N`_RvDn2n= z8etqeo<5W%Y#H)C7}vT)W{PS5;#t~ZI`GD$AiC7H$~0}N&2B9Hha}>pntrG}VF>1y zt2|F)2}GttA0k#KJembpob!?oS8*?aq(WfBn$SXMBdA4hnx5+-S9?j0a3)yUq=@ee zh;w=>G}oZik{-+vNUtyBJ?S%YP&7!%L(T@($`tXQBv-1j9Akf6Gq}66rILe(kgOQ74JDT1!nCj zm9=JRr4BW@Ud%#Kp>U*h`hqu*QtYUdCcllXcHinceEQkbIr#c%)sI+3r8v(o_pV1r z+`;ESJlD#=@OPc(jsi#WPgL1x-rHB)i&S`-QC1%=`AYh!vzc4{tXQd7ww7r_V8=%oUrrpC;P9bY!A1kt z6P}7JDG{Gbd8T>q*ATVK`KT?ZNs|-Y>zlP zpB%#=1b)Jv<62Y^a)DB+N2pvK%+TKWM76YfDQSL&p>lfNxc}srw32eG(&V(*>PNi~ zU{3ZW9#dW71LfFq=$;!mWZmJkAmk!z;*#K72bO6~U0<00YxLP3t?ecTDp1YT%P16< zRd|fhwpnx%yCPI+V}dR~@nM6WpGiPV_)<=)xP6L~`AB{;ERn>Ph`oUxEJcR{tDc)1 z^+_gs0AEa#x%^KR7s3q2LTd)#=m{L|^$yR>C7?p(TH76cg^-C-vcz(2c7WDxSxsu; z1z%>C><)eC3qwc$wI#3^WO2@cY}Y8|R~6IPL^J2u-Wge&7A-~r-fr+M*XBu{1g$Gp zb}%nsN75by)CBpR9Be3=p|OUQ9{GvbjF0ioCWv}3H@oPfU7aY7|zH&52RJ z;6FNW6TAa&3fRZXfHCK(v?2`UTBcu66Lp%#AtO%K!RL=@F5GCSoBm4+KoMtNpIB;q zlTvyA=cuSD=gE@CwwT#$skNSH-I~iz^b14>=bB;h-UJdnT`j%=Me52uTjPSpZ-CA{ zQJK}6Y|E6CNyxy%;TN_A#AM^P7h;@=#1}P6oCM!9Wu6IhJ9n1Lx-ewe-qUMzd=>OK z^-`V4X#Ko_SS*<@Lh`ob-Wg0iV-_=(c)SH4>58ph3S;qhAhq`@7E~gFL+L(ZTrThQb^1^}DELF+ zc=vc`rqo4Zgzu$DZOtxtiW?~M$Xh%q`Y5560-j6BwJm32>*l#bw`-Ad|8?e#sV zKK2!`lWx9$HYO6&h-d9c=jJkEQYWPiBPN6l&V5 z^UJBRJ2ts-aCboXYvY;r;XB*TfCgeukwaf9l5$_5PUSHr16nheKnz))yiG;y8<}%Y z%01+W{+N|q6`QOBI}Y*K@2=d$yyS=Tpw7azFR zzOpT5Llw6CHrSw7_H!;yKbF5&*(Y{BEWa>17nqsH7*x~jUX0~fq0bl`9dCQ)X&vRQ zROLhAz25<1LM1xL2s62r>y`F}M~@A>l{D=R9k1|=U%7TsYytAvJ zD%IzY41hA8-2NdO&R6zN1+nOLaKRJb$tM)vqPU8Alk zN#TPAmFqMGK|IMR-zD!oESUXAHme;rR>onRLrtgy4aVg>TcFvv|3T{2& zbUB_3A8Ox0D+b2BOBRXkJ#^Z;th{$#pNXB6r|D*JJB4KCrTtNzi@S+{^Ng3=eM$w9DS5f#hNd<`x^hFasCg(5kg;fh!!R704}e_C(E5p361Q+;Ml z_HAH;8G+X-7k6KtK-oNKI``b*9z&J8nl z7|ON`97PcYKB@jXCD=ZBf-9hOwxPl+z5UY73D68X4}M8FBjByx$QFh7E42@Do))|; z?^DU>e*5RWNwe9yuM#aT77LVh_t+riJTpXqQxUEGMRkQxhO(!>7_qxj{pg`xX^M1y z*446^Z{VLQm$tg{RF$K8p_qdLd&#f$+KY`#tkeX^6qEzQtjTAeq?f$2BrIl9#?E^r zod;|uRE#&xWiopcU=)sq1-5muUsn#{(wrIEXtPx`6^I(9B&GjtteadJ7!$2lZDgW@ zn37(lsg$w8Z=15wMO<~X72+zaXSA)NmGPzpZr9C0e_y;1{96_|@e5yZ4G^JoNE?*D zz$q1+?pmGItgiuiv!gu&rE7}Rh?d*l9U#H_f!yN&9Y?(h#I+UpR+=7s?+tYBHL?_D z`rb6`?|M-wKFz2fD}_)9Sx?#O&aAN%9JZIydOO8FGrVr+WanrbFE1^H*xWkp?V5?% zuurQ>33e8>pA3qZpsgw`zKajRRxd9%k=ZQCY(-_n4z*7ilsh@MOzCX&pP6Mn8QPoj zPL}BOaLzbC;G_=UN}im?)yLZBWWtg!$0c{tke%3qeol0ipIu%kussh5;_N-=_zjJ} z53yng>Wu+}h|_CvXHuHmXsp{M0y=j94N?y!y(Eh+lq%z5=igMaTxxo|7Z66 z6avsImA~-2=^)DOpW?iL&!Q_Ma5qtn0pbLqMnj)eX*(hxGTSi|hW5qZ)#7l*kI|0q zUJ6nOa;!tX^C~;M(E4Wf(-ji=jnweXtO#DYiRMZ>_GI0ncvLt=Kx_`fyJ~+wPlu&o zoVWPOETp1cR~h^i7JN?Yfn);ldCQ?oN!1Q7b}0m!9b^J{r$*@De5=gEP#TeMtW*?Y?W#);q^i|G^jcw z)4#P-3(!coi>2CDB7-rWm7L=hWi{uRtxJGl3o<^(Qk&X2E*D5@m#GP4?XG1KrRoHG zi?d52t{YU!CRw*k`-qG+9wH;eT{^`7(=$#0LfM?YsnLHlX31+!nnTmU_4A&ZBxcHc zW(B!>(HWvw!L|;lx=~8XZr9^=w}tI#XpG3MTIlahNCLW*#kf!bhu+w`- zMAjX%zItD-6oR}d3Cp&>xdUg>8FQ@wdj)1nJiz)&xPKdUZFZoL47mQ)Fee8eM!8=3 zYB_!rD8A*XE)i``jI5?SmjGm5@DSRqZ^M5F6|Bbt{*VUW-cY&Z{>fak13-mXNS#Fu z;?PBWF1X_au`hI#l$yf_H5?H~lmMGGb#d2=5T#7ZeFm%JJHc zza&mZA+&J}j{@Cf|FccQL%xuJDVM&9(*uJYt5R=wKJFzBz_Gubk8v?kpW)wFP3k{IkDV@PgBWkRRDI!T{M^9Laa3gJSalzt&Nz(|*FGTF>mk+tQuN zub$RlUt9sLGY@(KC)ERchzW8K(+fC(R24II(fV=`JQU(i^l39kveZN%zRA5MCWa8d z2_u0@2!oU#Fa)Fm0Msvu={0hnd!h2LGfQQ}{S^ZGi-B1~`QYR}s@!2FU!}(Eb_lSv zo$*YF;9wRGqVG&EO&blzZDDe^`{LK8sR;fZI{Mc&Ado1f?D$28#}WURr3d`05gt=+ zx3vSPrN9&a%ZuwZycGeE{-kejpLTkz1-^a-P$dAJ`p<303dQw4g1q=yxCgK~MVAqX z8K9D9Hp>(jC;Qr8;9u@mYXsN;Qvl4@*vZv8ym8wDcq)~@BYhm4f8FOcnfpDElVW@SV1%ssUw=Y#@;@+m8lza~Jv_JI4n*HqKOJ41r~$eQd-q4b?;d`){6ci+ z05isqXIjwTAilfUf;UtDJSd0%yp#W8RdBe=6VCzc2`2p5w5S2VW334uZ+A!?(`r^w zcMajX?ei~p`KPxNH=5a-U4NjW@m+rZ?W_Lv?PW`VXxjpMap}KK?D*&5pRvPlTa@3N zR-vhex3COA^8momcSk~6nSHHwPN_ff0RGh~Jb|LAfr{EUE$C%!gUczdKwuoOlW$+wjBW*S8X`;C+8>Wz11|jn z6D|@UFPt9GUQw~S`cG5w@YPixHEunCs4-g#j`R~+T#KPupr>H}u>Bjyi>j8@lh?r? zvH>}zuPvM6DK(i*?6?*8hUbQSoce;9-dkIcy(C;t>u)E10C_yF!;az)#AuzQ{sJEz zSOro3Wudbkocx>%pYzHZ%^h>CSni-LpwgQfhX-PK}Y)*ZDJgneifKXEkiZ{HxL$!~&94?$aAFpRV8!t0C2rX#LH~VV_qILeq&R%(q zVFCC$0IK~OIBP&uT=hW?9jRTz;)^uTwPcovk;=n&3MZ>u8pd18PJiuoSDD*=1Gea4 z1nwf(zvHY~<%6|K zj`;QZ+fEbHj(_uP&^szg&I^uN?Gxp(oZpQ*|H^(nqd9)62P}I3WGPSaql;L|-xObFCD^AZX~d!IMxJi))Qhy^aBW+FDIx2m)g81e z22#@N?v?R5{=b5 zS`K3^3k*RKeECE};p?nn+7b1W?xvz|QtY@(qa6N}vyPU!nHi=Scxqntrw` z!u@NdP_NlLkAqlGu`lWFR=+ik)4;`DB-MRHlScbmRdEA8JzQOqUFM9NE_z%|IeqwQ1y` zjZetY%$*gC^dnaVHk+VgKu6M-;;EPm;3Kf8Ke*1|bn72*K${fc_5Gv#5F`4`Y7}tB zmmodybTZMIcL2SUTBc=r6d&8vnS|^`ESM2w@@m{~u@UFE#AMcI&FPQp>`P(sl;~p# zns!THkWrpWgeg;YST<7-Ktl)p-t)gJsCuk@Uj`cbB?hYc#&k19qmOgPum|ltQ+AH# z`)wWfexHj?IV`83l}UqKi3%(bW0J(Ey;9-N$}6ia2R@^v*lR?L>PXWP%M}G5y?d7b~&QtV1b*`Wa-HGRJGCQ8ZI$y!_vg|OdD8J&UGTWv?Zcc#P}=~zs^ZrmiCp%N7a z+A>cW0bXOuDjzldOBUt9rTLnhjd&>F*54xO&H!?PICPW-9I)HQL?>8sd<}>hPLyS4 zW;57%p@%%~Gs^9qvrltIH0|G_IImU{ZECtc$6ccsY~FP2uz7%Z=gG?WkVu534>i3j zltt^Sy(?F8ZKKHav&nn(yUq;G?HcZvcU1{S4V27+7)t5fj&($26bEGOo)YKAXIs!K z?dGJ!PHhP9p(m~4D{?&_wocM39Yy5YA}K*{Q?ixx8io;V1_~w$Awp?I!KjTdXB+|R zS@bJ@a=}z9>Z~4-ZoAKRLONwetlXCSpxYqfR`g`nR1m%W|n8t%QfYq)oE7-EFW zW66?YYWD@$ST&`C#RV4Q)8dmC;*)lH65%gxa;6+4`)~c8i_@Avnyb@J;eJ>1;ILl5 zfx+;7jm@`*>EFC2I_dR7`1C@uFqUN4c8_gOva>;Da>%Z+u)Y!YB3{~pkF z4R!uS`F*C2jeIc2jLsMO+L!6--_z2R`ZmRC-r8cyzxI4P_@%uRxbQQeG%4$&`rXg> zzArwC$EE+=&EU8)Fh)}WtMiCQ6a+5JUMkfo1x~WQn9tz-D!(bmnJi$+v%Az7pBa`_ zDd0Ds(!LT5_jNPobkW=z!ldGCK3}q7$RM>da-$Fs^&o2OgDxb$t+p&IqDwQ~jQ=(Z zIXjWsoy_+<;#_`096V7kAWSCSvw~}(JbRQA7{>|MsP|i-DrFy>*;(S$jSE0K3U7-` znM(BvReI?}?ny;pgVep?1vC%mPID#31@8I|TEzfSxRTql9LeOyZ}!m`RN z8!HI7HY~43bR7)5FIH65M|yOwzAtpP$WAdA&8jCneUmKAelReawyx z!<*d#%bA(R44cE6f?t_6iZUBBh9e8JOubrWu9UG=r1N_wy*xHN&3*VTA2>xz8 zjB;D0#8Ud|)@!{S&;V-@j200t7qy4Br-k-2k{nzemTR#~J5>;AKdnkhYcL>gwV+Vv zI5(KiUD9~mDm3U*X63Z}E10!5>la}`AhIZjM zn!2Nd$+^Hf#2q$*ojZDS3~rj`Nfx>Hj(_R@h%W&85*>|+La2?iN?RrYZbI~iW5@|T zSYewD(@})$`O4^jHWrcwVu%-0;?zRCufDs5U^rD|2^@PTnCLn!=Y+xWz_e(l;3A8Jl90oqun+ZA3qfogn15bLm9!y@hTD!s#}b zjUO?#bs@#NrL1>jNsYiY5;uGuni~YJ!|H>&RmuWa<`dONbMqs6jh!!y#CA0u?prCm zVuQL$J_}n0RRS?0KNP@f`V zsTemJc73b_;y7N&P?kX|1adF0;^JfWSbZuBH2TgLspu2K5B{onFumJtQo#A(0~|j2bSE-+43f^VpVG z#RmpPnvTD2EqjD0%8Vsp)%h)omH}4^5LGG}SmHA-NFOZmAxS z@j@>#BtWR@YS|@UhA=pA)TZAZx?dZK`g?kM-$$rcXJu=gM%*U5Y+17X8`Pc*9j#J1 z8A~z}K?I=5=ZmU4s)3Sp3(&^}_s$IAWIq49P?nd@boMrYdRf)urWa{W6(g8Zfs%Lev zM|WngY4%v?XHK^hkVX6^hbhtVyv(fSTe0F87?@MsRT;JKC8&dFy4KqMA zqUJfp6D)tBs?94vHu(aRd%k~F7llf48_x0aXui%G^YZp_{RtoTe8>U?GLv0x`tnF{ zxh>a?5N&2%`vSq9}1BCC?@Y zS;(T`{&Dmfg7+*c#eK@_MJxuLy@3E8Tt3B?5q`fioOm2sUjsd-+ty8w%qYY<6*^L` zkF(dM#IOl{$*gsWxnw@=oefg@4jKC`DR1<>WqR~gNi>Yqclrz+BKy5u4KdZ2qXavc z@B0)AFBd7&R@klMJC9x{w8m_Es^s9d^t3dTmu7p5ST-f{wRS$6%tDI?rE{xh{RjDK zU)iHj8onw*Z`ggc)C5XqNdL98FsH(OX14#T-=Pkl{MyjJBRR2cbtzi-3_4X7{9f{_ zDzb8Yb89Ps>^v!N-+iRf_>Ljbl`PMZRC&TImLZmPR_IyE{h|P`ag&?(RmUySux)28Ow7*!%3g&w0;#@BN1l z3~SbU)~}ymd>;|>tgN7CI?P`DLPSffd-!r?1Ox7x?r>TzXq+XJzWdpQ4cWz|OnRw< z$O39X8q4!+1xlX>%Dfsk9FpNmk(ZjXLdrTMh1>b=k0X3|94PtcWYmi1j8k0r&BS$r z^F-976U1)87fm|R&MESH3OjS<+*Z68r<$#sc~y%2Ga4SYdd+hv%&A%#ZNENPwY?9+ zhf7H_iZ4lx;&t`RHOFtAV`oC-Q#wk6}<0x7`dm zAuhJ{JPoIfm*ngKd@M5Qyqm}`asK2qAW(bVWM)D6;s=R=|D`d;!}b}N@X0dQZ*u&j zp}k8yX9qSF{0aquOIvHfNt$N-Np!UbS7;kC5A4{>a0-N-rNDLZmTj1nyrKd%zgW;9 zt}z*gJD$YyiyI^x`8H#=j_`BD=#$5Hx^E@MS>9&1%OVtaoX-N2qsoMzV=2_Jlt#G;}g0}Xe;Y^>u!m|1>t~e(;%dQ$x2i1 z#?mA{N1(#2c8z#v>5O^7IIXZy>3hRLO~Qp|BDu4|?1`E!80mY}xI^}G$pz);ga?@K zSG;VzuTeP5;OXmAVYz^Hmj;w_J86zi*SSY6YBO8oTuVJqL%W}7JgQUMx|Ff9T2Q$8 z5lbu-eN33gjMc|o%z(%EE@_&n{bHV8$4wsbXHJ3oYom}TDgWX=oMJ{ij7SQMK*w{@ zEF}}SX?JBty6vv9&@~0#XHQ>t%op1=0UFGe(l^e^xi%ZCnFfi%p&RPD4YGRdwpS}1bigMTD%?F1gxKQs^Mv=%@KD~H;f4Fr*V#fN$x z0~xt6RvFF~RdZaS{f%ZoF6I=epl2YB{&~mlA->2FCs-yLkf&q z4;2|!`K3L&bpGyy1>ETB+2hdZ-e=6W)#IG}tBai1Ey*>EW4Zi_e^vWBzOe1$I$MCa zN@OO#!YR}LKJoY`r2N-?K-w?78=SF*;78XwmU8-uQO6K^y}lODAuA6*{uyQ&nF zi?GWYt}pB9W};^Bzw0;=;XA|z@CL`dn>mw!Ra-Hoxp#GzHtI-=<#6?R3nt4H2=rNF zZEDaum{;goRb%croTsA5BrDu343-Mi`nbaH?R?zXDs@<_V&0E-kQIcwaDD06q^njO z_*NuU;ahNC^22h9wa~%VXE!1WsE)fp+H&WY2qFqhvJ>Yx1qx?oDoK&Qdn(pzK;5{+7_%>)X5vbo8}l37~WtJ{a$>*aOJVig;kU+vDfUGl^f@d&<| z;cbkuAuohDN~>*6UTkZ%#CL^TEfGH(_L{SALHX8x8sqfNXC|s3B6*4}M0Gst%Hq2_ z#eR=vgIu44ri#7!oHtWG{PK7f6^$&|VbdVX=3tQKiE1+Ih~6(Ud@zvClo^*IjbGAI zVbgv4u7z$suO}Di?2t$LAM<0_waK6pplXAG#0Ev#{|sV(50n*{K(iPoeV=i(xcA?1 z_7{d9kH?Rb2`dqCsRVUtD{4bx3J)AW*``X%5j6jt;omloqyi(;^%z;#zmlj3=tdskbDq3XbTtoe` zL-qSqst)bzapLfHWaCfk?W$T=7Mdq(#%mt-zYibXa?o>}H9|BNwSRIfe`#0y+b|+S%%L za-CelCrVorNjJ_Xv8gfTTA4Oi+|;ojldA0lkyBQ`0lE2zFBC9I#u+5LnqT1gOv?-2z{L82H_56zN}6oy(l0Dpx$T4&;|AoQ z4fB^FG`ExH$4*jpUGzD3@0g_pJ>I@2G~+eJ(9%TTepd8JH_PG4)V4F1xLvhz+g6L& zw~aOpi&$@6-UYg_sxPDFQvHRO-G%5oTfy7Ne7Q5zGi-_C_7Idk?mc__(q&fo<@x^U zXaBx0poGG>0p&~&0Jst8ThgdD2-zJ_P#n0euzc+tl+kqSn7?e*Tm9;QdU4eK zgsYJO2onbzMczxN`CnE^*`8VNcvSE7y9AQ2hqST>P@SG4@3c)4^&-uk^ZefENn?l6F2+XbPh%!!c6dyFkrYx0NCpqdD8wN-ZN zkeb;+$BqSy*?I55tm1~r_P4}LQ>CFemQ^i@{8cri@qQ+bJ}V2(%AOMQY@ zC2_usr0*VDlquz#Di!hxC#3@hk>~4}Z;v#sOZ9?*jIcGlkLb7Yzq%4K8eTsIj)ncZ zxCKHW8fI0G^S<9uaJFG#9+wk7_Wm; zqESIC(|uCKbo2E9;dRKt7X7my7Ce~_NVnNqbmTVn#Ab}T+H6-4pyD+gIfPZVz;++( zD3Ikf#+OGdr9*e9=YVl_1Sv*|)J+4e$A2qGN^@3NV;-$JTZ)QJEhd6^G}EN0AK}_; z+>Io&X-Xc9kWEy1xZHy&@XTfCN36I>&&|CwH!B?vZa?LMG>JDB4jvDr$qepR4Rs_E z-mE{tXma=K6H&3MHn8F&wcBhQs1~xj!A>6H8k?_mFmF7)$B4WQuhreJlY3DetKV>7 zy6JmHoosN`H$)$4av`9iSf`3XrZ%%{L|h(w@Iz46ZGU=%9Xg-BHS0dk7Cd(Ak`)_K z9Z*$z@770f9YW?baCsiQJI&{vA_RZyA)KEY6j7|RV`CoGJm7I&p=5)W0jqJdJpL;s z-E-^_D~P3=8!6&6p8bUiJaluf-cMmPC8eqh59~*fU}X!Al3iT{p@@_1og1D z)@JuD2uMlER;;qdys>6XdU8Lx&G22u8Pmu%`qqt#di!bFK>%%|H6{F*kI%&EoRty1g)fAD3<#q*oHC!&fmkxfapdwOlap(5yg_0=oMj3++?D3V2PcZH>M zZ-%$Ae=P!qMiCHtrNyRAT9r0})%>-VUR>-7@L}k`LbJyWYca5XLxR%Q?dGradQbg< zziyc2T^4xRZUZ8UFUubp?-7dM0t zr94A6o{#vNf!9q4H+YdI+iG_;#ero(i3V(#aQbUVi22eeCal1ThyAX-u5fBo{y5N& zZ&9JSHU;y|-8e4R5z7^+k9XvHhWl+hhgWWs&ZZd{`N??i)%=SpF?TEDcA)ue#Ux{2 z$(e2VZt6x`pmd`(do91&GORoi!({NxZ~e{>ZnBYTyg%HwjG_O^xuknGQmEYb1(^G4 zB_^6)AdeXmd=|OZHZL?aStGiBc?(YdFt>vJ3!$cEp6i^5DZoAb^hW%aoqQ6Zb@Ki; zue5N&_f$ed-r}{7j9)!SU-oOWu5hssL_(raw~hcO4xwDlGzeDnJKfsArGh9lN5Euy6#{?+QVw*554sLZ z_(-I9L$ybJwCFa*CV`2|%05dkm7~V{!!7Qc$Tn;xVsr&TCnswyLZUQ2qjapg?Q zvU&6Lk?VK5u-)wu`MB7+1;(FlSS)kOR`>8 z%gJUX-q5O?cj^}nsGMJNA_xBU$5rOUh?PJ(B6TtQ+zW0zA;&NlQa)Q;>!q|ci9x(W z8}%29=zUeXd=W-(&#rr&4nN(phtrh45~GO~%nDKDI1m%O!UAeL++<57Yj3W;9Dd8m z)B$QSuZxzdWir=xe#^jW!SB#8x#f9(>#r6lwPz1)lQtjSNw>_G|E7!Eo3D-)O)PTS z5om7le>Wucnx|zCL z3s&T81ze+5>Yp`*sGAcoek*Y~P*Uc#jhp7S_mpB$=;kQ+gP2zCn`ViU4S4c)Jb&de z&o*g;t9?}blE!{(Hht)OFGm=L{M|}-z_QAIDB>`g59fq7#5r4>INeK}W4mxm%53m5 z541XLM>jUPCdV2;b}%*?t6@G9f5mg67JET@=omZwnmwh!MR%3_Wa~MWNqgt=`Lab2iY$8-tKj2NUkm%va_;D6t2o+uZ}C1}ALveL5_`uB ztQhk6+&6>v$(N0qQ)E+-Jq;Y1t_3I@V?#o=n{ym5c&f-IAc}K1T>cwS=Pw&~?j;{a z+&qfMpQZ{CL|ig;(78vyj8bxmy$NI<;~Tpi;Olw~E0g{+&kV~ge*l_J^!N&a@@nIg z?L|A=-(Gu%n367ZMkQjHu8&-T9c}ml>{&lw8`@46i^Z6t4u^-O# zNyB99@u%lrU#GS@H;L18qVY`=Yb57i`%$pl`2=AJyS>^Kz>CA#x{>#i6X+cA?M}Ti z4D6(}9FKk%K88@LlJC}nk4ACtdf<3#&l6^4BfjLW?6(5$u9^vSu-hHEg}0v(nz}Cq zqA^%&Arb&oAq611>V zJ|M}P@%T9Qx&wby59K6iN2XnxiHA*^UaZNQ{CWkde7uie2C z_AoBS0v{5-@eRxGdJ&U@NL;75Bdp+Zi%ow`(dCywAx=rI*d0%MpC(cwy0#UgAME4 z{L7ZTAVM==o+5u3{y#v7XbyL@%|ZSYYr#pM&~wAKO;I;DJV2Dq{4Gd8O#4 z;(E*4`BV#Kd?f%1{6v16%vZyvuJG<%+5gDc|M?(WcjU&LE5{_5(sT=hjEH0+S)r?V zZeyrKTe@4@FkmHs{Qvz&xF3)hA}yT;prszkEz^{w(xhHb-Y9A-F|m41sGlbJn7?d% z!}ceQ|58a+3|MzbCy6Q`dTj*;b>F{u z-oxt98FtAp5r@47L^miv?=!pR4AEQaj}nnz zl<~l534neAKI&$7m>aN6Rj@{7iETra<9*SOrz0gr(LGLCl3jMc=Njk#A}25b z3KoX-k{u5oh`8OlQwOP+U2V>@%7+~pZ>y#YFBAp(_N4amvw%S#B#l`NJJ(=Xx$!v_{Q)LZp<&}I|N7Vy*VQrg4t}bQi8PJ0*0%j!})<37qe*2P}CtS=* zoh(j?gH-7o)SrJCahaj*Hk=sY0vc+Mm@5PN<%2{1FQs?itwkefFSip*?JzLPRDJUj???MrI0Ze0kMy;FUMfWHAPcit1Q~<5n07}haBpW5tJpJ;ChtW)&jTFW`5Vl7- z)hyCO#2XgS+kw<69Q>0Xe?T^6Zq$%CrexsK0(bSbfI*wR70?MIy`FIYCic>QW0o5M zQM~ml49D&tRW9w9t>Lh74ETS~WxQYlZt@S*u($e$F#LzHD2H=^BRZWhvIKU=A{&i)_Ln)jROCZFH*;XlwX2>Q=zBoG3hI1W z1s^h4|C`Nw1H=_LpW7J#<&%T=`IyIa+gs3~szQ3Cmnlq5VtpI$c*IAb+X?g*!vq8b zjPU@op;v@TcVDl7!^3Me(^j$=lZM`fU9HP}IV9AF;pY+lJ+x7S8E*#*X^3I%lz+e^ zvKN~GoS>9{2@~xNDK=~*E$UKWGCcN_7(Ys^@nXrFwQK4~M#GpD=nAKk?~n5|;{fJ) z;fc_d0YEOGf$*2f&mb1QcK}vmFv6v}Db8brR$`DE5TzkA%4?_|c-}ve%V(N?&Grgd zvK|kDvq2@q1AydOu;nr#fqgXpC>(_iI7yjIyfqmiwo1WeATqO!8*-<>dt7iK+4qU{ zKhPA*I__X&Gg>smr*l}VCvJdqbDpRrW&&O!oMHJcQNaL)rReme1g1it2~C%#nLv}y z=#{UH6yNBY!X^UVJ^E{S2Zz1`1xWQS0%_l{D@FDeY%Cr45n`+|6ibc1c9xvx%m6j$ZOO6 z&?XZh+qn1dX4q#FR7yf@hG5JEsxP##IW#-0ZaB$rpV=)MbDs$upe%IaykJD9OozEa&+$f9S>L~yAO_MNv zgoH+&m=c~MQ%#q6V6>Zj1zj5Gm#wSdpUb%$++yGFue(a|7`(!cTDVy{6JGC1Twt14DtpO zQT*gZqd?iG&9Y_5y5Z$IQbo zVWh#+Oxv%IiRP@~nU<9N=)T=TfzwQW_|2R>ioRXy5o&}2?A0>Ai!7b6;|oRa@8W5k z9@NOXHkji6O<6rK@;(i=Jrg~hh5qHa3yR>wIzkZgCklPYdzV@t9;B!a$L_0iv-`;s zSK=`!KauqjiR4LR7mpzr50&$(@k zX!4vf%w&f$E5pQ||IOKK@w6b5dp^zj?wMIZL9$kL*#D>leQSn9PZ!cRFKHyghOuB` z5Cud!$LqD}9|7ikMtU?kkhSl|{<+9Zhhk#k;_dN;gd9g)oF^h__p*BXAL|uOJ9@uQ z+k;2hr|#FkSL5RAKr z2nlo23%7}*$?$7{V2z3Zkv~Um_fsmQNcFV+*(dr7HeR1ny{GKeHeRvra$A!bGjajq zf-4~lKea<1*$``Vklwwz8c#;&Q$thEcMZnP>1`$!aVyk#%5#@2e+fcaoy&MvRcyHXUKoc5oHw; zDd!XLksmLHw33D1Q!Id}AcaQ~w9GfRwT4~;FT;KxK1hW$9DQ2Up8L-lTnR={V@$=b z&bj;ElhUb^MtRU(SkFh@i*~1<#yb>)6*^iB14#X8dI|DC_EV*gm073>RREP#kt>LNG-LKH}&7bc-FE9?(fTk#h80;z{&_(_Vg? z^g-<$)1j^V_lFft__JKk{Ql6A|7n!7Wkr(fl~z8$s3=B<%ZtyJ50x05MM(){0aaqf>C1yz`kyxfE?*}=OVx=>G7u>N3@E{qK&`}=ep9ESFqMP@ zy#e*lh`y$G_B_8@-`U2oX05k`&m+VKigs@SnaewlG-qfuC7%+7GQ8X?QMIo1m4)1A zEuXjo#~}afVd3)#p$U&5SFL~AU3(mqKZF7sW_SN#YsIB`2w(*HgrSFG`$?DL92>!m zdD!RFa{BsgO8IM3=+;-j%6=QmWXQ)GI-Ev@T|0^fLWO{kJWo4EIF1#6#tcjgG2%#ec&WMh@fa z4-xpDS1(foW+rIxrx_AH!%UMa!pN8qUP;*YW8jZ$1hP4~FCmTFqsWG<4dUf_j55G!$`#US z0CGYrpXOonqHgdq@?f5`Gw73Q5`SE?07j=rYl6^$t-727&G#n ze^DlX!SzyedhidQfQ-ym@QBVzIpq-E+|%?nvntI0A08%Kr&U4e4PeTDCVkCP^07~P z43h~2^dA+L;4S?ga01fqlX}=f^;VH_;Zj_cD$(H4K9q{IQ|M-~L-`0M%~$H(D#24n zFZSv#KrjZ5zbCMUur^79>Rb~z+8QE_pHXt9B zM1U7IgA&34vCO;HxwT9(in_4Lc_$2`q14Cwl~(?KD$q@12vJRji;zr8=>0O6+k<>B zSAF)Ep{qU?plwU3mkiB?P^O>Hxz6` z)|YU!AVOoKm5mw`ws^u}ChPh7>5gDb3C%%Kl!@Rf#%!K)SKXfykoP=ow%@R~R1B+g zDE<@m9Ogf?{9mj5h=dC#8^id`4yHBss>-9QCA#8(5%kZPY7{cRoqBE#-jj_y&-Rve z;hVKzgixddN(I)3&<#Zviq2Q%=vNK|yZJbTCVwx{dXIMsBjH1~_s^ul8k%n8-R@g4K z5caPl$f)1=<@}1C58i>~VgkdV#p8&jk`|~0hFo<-hgp9ROEIlxo}Z;CFSS9WW3w0C z>~=qUiQVk!wMi*aVWRZq>Gfo-bG4)5t#nss|3}B0x8;P!d+hs~snh(M&bG_r7}44_ ziqJb#Z%b~;dPV}6%mA@vCFTS}C^hq6?Kw9$$BGPv-ZHD>1#3_VB-Y-tR zV{7>a(YU_85x%^AVl-3Z;WbmDYN*o^Xik8d=cDOiEi2bWK1D?ul~1#95p1$wgO2vQ zB+EGndGe~Cv9%K@S4hg8(dFF>Btyo*J z!(|t5smN|qeL5G!3abMOYSxX1KeOs&K;PzTeDYDgO68NjZ9XM}gk7)9k_>Q3mLxY= zW_t(LN-8kX+S}^!$P+l6_wThYVoNMCdYfbT4v=qE%v`XA3WN2_U z`i0`VAy~0Xbo3lu!-BjSeWmW*y7keRdO1<_@TyJYSNog3IJJ%|3TyN0F)lvvnaQeq z*Z^cYCc4I6rEv4tE=~8{uRR}9748J0Gac`W*WTt{pO#FqyPC&dhF9b&Lw#~K zjy$r2Ua`;74>HqahXn-at9CLUU@ zO2xg~_Tlo;Bknbi5b9dPZ7LwP69Y{ve0|Lo*bbBS4_UsM`vuUJA}~`ZutzeT^k5Bs zge2|5L`s@+6MA+Y0PJ)QSSi*-j_vpwE}mi~nRD-#XQD;Vg#Hv&lpO-XTV=-?1TQYz zp|)==4jRVG#dkL-UdE=|bs;GxgOO?HsN2Ul+z!LXA2YP^npsQ~h(8`%lF~Cnr`zF| zw^>{ctcOi{q>fd;&sU}78lBWErla~~`2hbW!MyJcL5oz>x*vX8+Xqaj*T8^m2j6GFD<=4&pU^`QN zO)qfE-JGbKovq4)0i$9bQFwgIZzw64SNhLb6mNUAvJ`A1KoBG;-KoAKC8^%+ zFX*@F+LS2C@h^0+8!T8gMZYfaH3=WgZ2ag~A!OuVnrT`6#02oJ0{o8`evEQa9}G%} z8dJ4gXQwJ~<;ceBj^lH}CHdTwGVs{Q+VbQadMNm$@HR-`B>AKG&@j7o0m%Wcv~Nsx z@zD+Ck;Yn8KlZcgz^_BIo>X36?wKydQ9P<9x_LjzhB==(tU4vucDSas*OzJY>aeooFBqykRXJFRs%5!*I?}U>DbB79B@C_z1gn zTG~D@`YIxTU|=n4F(XGjX(rcR!%*^@rf0|7*{dp<@u9t%(3<|W<%G=5N6{(m%#~*^ zT5tw|t$m-I`k2Ft>f(F6;aI8)u|)DkNyHE`u*Hp>9+rMtxbG+I9LiWuS-^AczEMW^ z?EA2NLWnNb2QIxKy>nz@c_DY@3&8ryGv}Z$N~=2r<$=%kF2=gS)p+BT$MwJPn3z4z zPM3GK=G}Q?bX#bzHBu@CebiDHm?|2KIx8}}gxt5rsOeh~MU9R7GQ1@=W|6>)O6$*t&oy4)#p*} zy~e0-fJNRax8IohYb|=TZ_hP^&*?FRW_h#!0imL?5xmjyJ4IC-4o7)m)M$^e%2E0h z{iBsi2}NqB`o`k>eUkI3m?ZC}!xSP3lBc?Q>Nc3rhn>xT4gKIi=s+^j_3hIUG$0NP zM8La_>RO=?dUIo8vRA=KBVn5Onm~_px28YWiHTg}Xwo!wm=C>B=Qt;9x57ql0b0IJ zfVn_=<$yjJ+idp=jTu!k+!+}=FTxr%2S6Hqt1&_Xno4m7>NdvnsI=XttxpPY4pLg zUF3I`yvZRtdLj(hWc?jY!wAP=-p4V64)6!3KAOZy2j+w1nC^YWc%@pG?Jg*DID%Tm z4FZ`-8OxYvx}s?xuW{4X+kDrqS-pysOCftMmtCCrEDOfLl`2V8 zzplg3=3Jp}%T=|G-mYSB>eX@o=IAm@WGFvwZj4B-IoHnIBi?OK@}c5|n-f$Cgd(;E z4PzVWcwnc~Rs}~Ra=^FnZu0Yo$h3L_MpQdhDA=p=>zMqlV5dc{vC0$wqN6#F+K<9q zCX&Q8?9-@urtXe$Iuv`th!+R$Ql}!mLM}7?Y7O?`KBf>|_Mu>%c6e2-~2Ryd7e&6SV(p6qBz3dd0kbuP|58- zwu%dL^kXcP>ObuXV|TeF`;IREu(lsX*mipC4NoDRx$JpajL$l;fLuxzERE(iGi(O1 zT?amX<7L|`^;?c(n$*my38lHkt4MO!{uRfz$X`4z9ZZ7TPb6AMj(Fc*^=WF0?%m(n zdHI_F`GB|FA=g@;t$$`!a5byPR8ia|r|hbSI#oOF$VjxZlyVg!afIEuR-{Prl&X}) zjIpvpPeQ06F;pOV$!|gl15>j_R5((cEdtDYa@?58ejqK#;V(jy+%BhEOaa_-xPbIsD>pEa(Q>z>h zYFuw{D|XDGj7dqC+TUB1WI&)Nr73K@=SX;k#n3fIFkgL2F+AJZ{v^$kH>0Gy?)QGu zID*--$!|TIRv@Z2XOpw#s&IleKsnRtLaR`XHr*-VEHNa}$xZ2wm5iBDd;4o}kY^B` zPL&p+k)J*8b976f(H7KsNgMS@-)}8ht=!h+>U1!acc83=wFZ9VX>q+k!a3UuDpX5u z2kohN2frL{hlTR=C@A-`@r#Sg`!FfUmJ?yi>Dl_37}xL?&J|pYIEV=ZY|Q{;qillNVZ!iI zzNbQyMy9wwJ0?CRLKGn#q&z~slUUdNtb$kIwrsP3J3Nz(+$tjacTlr4v(ZW6{5yd) zp2bggnAvwR5E`Qrq>WX2@)Rq^Fp&t6FeE<2jcvJ9DnU-Cw9h{EZiI)SVfQJ64Nw&b zi|veZCw;6qK3wc_KGG0yUGk7TJE|U{=w!&kZ3k+P)8?}Tr?IafbFWLQ;|`vb?!uMf z=o#k5$z#wQ1-gX-LR*Q~of&p=A=jyNR`$X*IHHz*&zBFh8fD!+y=3<$owL0H@5P*-rDfmIqeAvl8jbG9QOJTu*dLEm)yP__U(J<;# zUi0(*GJOIBHp(ED<{oA1r`Qn97YeuEyn}J~Uulfy@ckQm7snbbrmsNUjJnXBrrDB*m>-LYz zMBI&LNcW0+GK4)6s26PYjH@!Ar38Lr9l(;Vn+JzAy-u|9`lR~`j%nuyyQ|lFH%G0Q zY~-K@LUW{$#`pfrkdKz^{wl1oa2{!{JVj1v60cN^bpxz%EHNPTdq*hWkwy)kwAgI- z?Oj^Yox{~eA=duf_zk@enq0hX(@U#9UNsklW13>b6^YZUM{-1bv(S3NR?y&~i=W&G zrQw6D--~d5z3d@pJ6y(gjkHA&L>0esi?&4+33%9xgp0V4#`Dl_E1Sad0U~eFYp-dQ z{t6>+gkDY#Kz6MCPJkRr9u3g=twXM34XGHCy z?w+n{@XlN?uy)~c`eN0mtHk*UPHpAF3Kng3D_RKLM`#@ zpXOv>Tf4rtNy*p{_RMLXDJy)ddj;+n#uz^4GTa~vloxz^^ zsQ5W4U-P~H@s-u~i7WPh56T`sRbmBl_2Y?a!4Lbu_t}#n`{jvBEYiKpDk(d2Wyw>! z$-W$)lN)y3AQ8=avpaPZE#LWg)8>8BnNQE#rk>bnl40IUWg(@#LyT3712)GgglZ|` zgy<+Jy|$pvR-vE5FHCr(^~OvWR!MbKX&jC7s$My3SUFtE*RKyd5DSLwm-uzfROPgp zszzG}Gj7f6?c4 zm5m@dCnB${?fs3zOB*AjWtt%|;b)%Y;LJPlgmT>qLX(s+!x0cp>04a;A6j6cPxcjB zO;~RdY;-gdI%6E%p1#XeGg5IB%8_PWuF9zB?%X3Z8K8eu3}v($@SH+!gR?cB7-l+K zY%ltm^ULAyyxadE=nrFfr-Y%fv4^Cc1PBxRizp#_Ij3NKl(YApxBE&y#c11+fEd}_ zE-m#nB(#jsC>E4h6*ExER?B3l{sBe2Zvj}-W4)65)JCa)>(2fo!t4w+7v-GRS=VQ+{@1$ zo{l+?R5f7xC0T5;2rIf<#42rZJ4Y*Q*vZqx=UA~ zgU=*QDV0ALf)ddT$yNzd$jD#bSQw9;QY=Y)=LM(gp?8sLi} zw}cGMpB{7GyYZ9V>_k;Ug~_wYY8ItgwIDC}PAhT{25jrCl#bn0OyRE45L(~-K=P*A z6IPus1%Sxi5nPD0Vda}wW(f9(F`neuaT5lkvY`*j;SU+UcUH8iKD;PC>@o&5w&pN~ zDY57cmhYqn(Ck@c-_7#?H7j6OPtc0FoHyPHr13!XL_q5I{<9p-z{XEk6MHE-#5R8P z=w!FUaB?-PIs5lGqq3WnvUgx!uO{`b(YE-y$vY;#qkGMZH0`TJF}5w^W3|TUrnE0_ zO`ObiD9G;Hge4|fV@Hp3RP%N>gD$p0JB;Q#19ERhw8uSiMR7(qi*qx-*PO(q3P^wa z9_F=s=%wHzlmG>ecz+qwVie;oF__LKsJC!;B?#`H`jCRGc{%yfu>5O|c_=2_)d{8v z`lwX=&1Dre{Meyah+%K#>1^_(|AqY`t(fZ!a$!x|7Vt663~ufP~}jP#ENnn4!KhVPBv^ zMQX$dV>^;gC}*fY)+uA7DZa*@kk`D|uT6L6=(jfOw$=JErxs-IYUju(Z|UY6>NZmg z#fG4|qhyuxNMYjSNN@p>644O#(d<%gi=5%WYWbcD(k=Dvx3I>5bz@L#RYBv4XYaa* z9S}aASFQ=Ug$*!fM{+a8ygO%;7yhxUKBJQ4%Dy zwKc{=zvmKU;#NCh#rPw>eJ^7DDt1W3D-^AxP*m0u!ndKdi6M2YSIGMaj^T!KWMli%%L*C2d` zs&Sb?LLcT=38Dh&p+9@}B>pR-*TH;SUhYuL3t=}!oL__Yty%6NnU~33^jRU_`_UF4 zJHp#-`WXl96J&RbOY{yZ&o_z^vW{p$^SeWhLi@Oq6Z7ZY*a^20jOXri!AYeDAwB@S zgK5%53PyW%--jtRQAJxu+OM&md(7_3%A-s}%^P^_3!EwXkY^=s{PFOmK(L*59@2Ml zrfM%z4OGFv4mdfOL6ONO%4T*|mkWZ;}!TGEa@cCT0!o}-4**s^3Dr{93z`RE^~#`^3} zSQu#maq&%x-vB7?I=&U*R3{p$%HeW7JB2=P+BJGf_hkB%awcc?7`MqWRpBB?2*eSy+($5L0+dXOY# zSMc#W+a$|yEF~R$3BWOrM*i!{C_ab~hvdVb2S+W5*wAD2NXL#cSfpJgRF|sbwpH@$ za|;Lp%iEJ(Z|dd=i!Ey!L!2#3GOUhnikgAEbnS2|NO=_R2ezjI!`>{)XNhNXy_U-H z-x%Ok=s}S6x_;~;$nepxNtDT{w2k-~5Y^s_RK7lMfI`HwnIZbQ^e# zDwvk05=W5^GJR9FciWru>0r05*|9)C z-F@M6dCYXs)W~uKDiMDBo82!ah~lD6YM(a@JFVm|K~ zh34&$zmu_kf3u|As{UQU6^WD`mp2=uXAVNO9RHgp?3AKK2?7H zOO3i}B5+t(X%)JTe~N&Yd$hPj;9P{CVX}?uzECaPZBJ>tVylw7g2< zuyHoDFv&k4*tP?!Tzx3<^@LKV26UTpHBG^r0L4jKT@g3)n}h2=O!f^Gf z_{Porn5h$|ph~Jd*#XHB7Zje5sA;N>>YysB^j(L1PZC#L(6DFkNl4AhkvrUMjYG_u+%j&aYe@Iv9a}<2Qt(=n;n~*ta%un5VhG&O{-PTL zaR5jN7KH$th(C)||NK?L3?9i>34Hp=_Tkf4WC(0Zs>aLi9@+v0Q?AvAj^`GQTaL$= zR$p_Nq&1u}rJj{+j+5&;FGwjC(Ryj`s_jhXREzUGl$>`Szijd5q|XN`Kc&!lMU1gA z{3Kwz*yOByGCJ?K z$D7kr`uYRxehNUfAdUbV0)BiK^6L$tQsJWr+5%@&fFmB9Jd7r%LqP>zSdaSeOx3L0;sXu;3Ey@gu~5aEMu9I;i24Zesx!x*=jPw33(8vaMM z{J+ToH$3M8O7ID+gYUmf%0E7p_y`l4i{4LKe_gwrBr@Z~n78WBnW+(Rhivl*U|th) zZ;5V^4>BsQM0uS5 z&|6a)$8$a;Y@zS`JruY7p}!#2cm64J3y!gB+;11S%Lh(oBK$y!%p}5I04k2F___0? zp=>6bN`JE36IGuTMrV53;k*CC-dq1g*>!!xq)4ksBOu)gQw?tUiW=H&mZu9-rwdka~!kxUbWX=>$}&QvQ(5oGqu$755j1J z3E2x??;n1S8>M>9i$ZmXrT17MD*TO^Nr`(flmqRh#E?7eWiZacS#6HB67!uPDH&xj zFiyBIkawo4k+@H%Il%X?Q7?M=b!7)NJ_ahP0mSG=cERGLy?prleH_Xm_f*plL~j^j zbPkvKkK9QAZr0xIMbeA;MHB)dq>Tk$==CoZ~0q#T2lXm=liJt=6PQD!Xp9!;5~90$Y>t6cZrO*(Gg#ON7P??@Z2PF3 zXsbuq27CSRlV9m%<%h?*`2vUJ`*`X4q-!-{j`(!WLVyaJ-sac*_KmQZ@4giPC06s*dj!yWy+c(Cr`N&kj zDGJM1(9Hm3d?J-<)5cqtKmFFxky^QVi12=q|7BwOpO72eSw77vOUKW0Rnm4$-~Ur7 zKnx{};89>TN{p!hU{I++$yG5Cc2N3XYlqEAf*bzc(95Duvi?p2yhR5>|HJ7f*ual; z-d90dxlv^`^1V2DdK)l%@|)=Y{m)`C;0xgS3G+-~=ivW3+`qqVc?Gx;{Focu)WF{Y znA>+UKkR5*F8;e8@k1Th#xr2~X#i|TFUT%;@9unpf$cOwu;s;mfFC!a88?bsDPOUp zM5UuK%+!H7K>r@`??G4n* zzwhnE4>=4I{NGj{s{IchS-L1VqZ&4#7(EcK?qy7iULV?RpaI~$WZ}9&nf^Z%>T@_nd-z8P8=iu((@l6{MS93wsi<`k=A?2~%yv3gjY@7o=4s{1u@dN6MV)IHd%NA^`#H>;-F-cU)Q0+^ z@ii9<+i>{LgC=aJThwQ81Eo(2=~1yY1Dw5e($+|ZJZe$7UL!5|C|xR*YIG}ylbzF_ z4mLKyAD!2)2>L2V^|1$ZQ>3_RI4H93UdggHRk0lPKuCouikdEF+md1If1(YO)o`;< zU9;Qi6aCju8mc!)VKQC{Q!NKRm@5X{)S%|_QBFAQjH{lM%o}`TaB$8FO_FvN9h#2?0eEpkoorXTgAbB24s9!fK+)d?8kh;dNlLcrtBa z2JMxT%Jb_US&;z&anq$W_Zz-^*I0qld-(hcdX6eP48mQXK?d9=Xx6@m z`(wd_zjbpH{Yrxo_J^ka8nhwC#*6_&ezvmO`wUv1ys=l5vs>-<{;`hZ=uVDHZqB@o zZ`1L2%{Gf1V4EV>r_yKecot{#DUh>W1#;etQO>+-aYMPEvZR#oMlACnP)9WAV&vU- zr)OoJ1=-Zi!Y#E=%V7mc9loyhfEl9H%#k&zR+b@_SfeykPvsv!p#~|)u)YF>= zG^`VImj_W!7Ew}?c?pn*E+Hhjwe6T0b7+#hw5?qPXA2m=n02pXN%?@5B1sAol0nAm zX)r+6V35v%6c0u$;(A1+*(=~07VC9-FJ3g^MZ#Hk%(NS5@h8-gx%nC+i$mR?ffh^1 zV8XMB_m{J8y0>~+?^@SyB8izmAl+3AI^8i z+*F=W`ZkyQ8$JYuUh(fKJNb%Nl(X4C`>o&1W@TXAJ-~{d4%bji5vRdo$q**TMQS=N ziy;+U$!H`wm>Dt(?|or;ioO$+a<63XQqMO` zXU_LM({P1c@dw`oG!+{zY_E^(AX_LqI=xuab5^05Kif6*r95=zxN60B7~brFZ`-|> zibsGCv~o&Ln;Kh&AI@clb$J~uCv4U|`lb3*L13*so+shPqdD1kWb&A(Sm0dw2m?U? z@FJe*3crk_`#7(-<-GAqV|{RJ@`hup!VSxrcrbKgRQ|^eiLOt1%L{=bB=4-oh2}<+ zF^nx5$(Gjbab5iqK`Wh@lwdooAN4xQsYAF?3{i&kzk2t>sUj>liM9RCTQtCtHEHwx zkc){ro2YdNedOTw67NN&%+oEqCmgnXvs$ls$M&*^2ZEwJv~_TAxq3G}gmwjS=8LJn zqN%*i{J972PGsdWeOl{?MZ1)ZZ}2U&epcU@R2(m5zd)ms`4ENdDj2Yp3xeh~m zr53Qv5(J*Nwu7a z^vc>jM)6c}-_-)c&y}>iwbvoKwMvK~5m*7*b@W?@lLCdAaM`@&4rdH z5bJHcoaSn}-h!4|%KDj}uWyuz-8u8C@p6Z{K;g**Tp9S?8tdLtJHL(Yf-6bfcbArR z@tXJrZEj}(#r6ki9$b~%BwwFh=WtOyYVfG~K4EjfU1n}(twfJf-0WN$=hHN7p~oAs zp%ZX(Qi;z$_5$s^>zL}=3_H8*Jkf-d=z$)Jt!U|8oN*+l=EUW$>z2x`FK$M~phrqb z;w*N!?fK)8x+|x=eSKFAwW8MlsA3V~>K=8=6hMSr^!*EU@ z^S2B`tc}*F4yAXrALDH2j7+vO$@t!92%=Pi&)xyUS(t>y5os>IPcEzqn{+aJ-kT^d zS}4wRU4uO@=i%5j6EpXX9{R?^Dna9zoAk-8=#DAsT|0n zCm1WaW_y3lHi29JSQm?*kH>0uz!cTc;yq*SwnzKxITu~qy?O=6v3-M7@>M-gte{`W zyzr-vf*ki(lZ5kn+Y7jrvJ3{h@1@%xVCD5*v^ASd_-yZNnO>C(@=fPuL$E*{qZcSg zNw;cF)Vi=k0mIVv4s~GyBHr`%cKf}LL6OkX?Mrrc{zr6#AC<*v;-t_;f(hKVCSPq$ zpRl^GgEqu8gvz1Qnq|e>ExTVmRr545>NTh`1 zeSs-3y3NhKvvRQyI{Sj+jla%#a*Ey`X@LnnCqJ1Qf|T2;Ty^8(UG3`XS*?HCILmdi zT&o73vsAvL4iQ+OV2=lBS^VG{AjHs5*$X+BNav{~No?$rspSWAB~!q!Oxl*H8JT;6 zsacbjG-ec6A(~D2lx5o8 zOBAzBIab=4tcEjBclmT+JW=Luo_$r$E41+{*)2-@`i-UfYD;7FT}9IZ=&p02gRASS zXK-Ev7Vmuu&;S>909=hHIy$S%u|IAyc=q55z_SVKzx6(7))t?8#&>_9GWVWrx}>w; zwRo|!dZ`vUqyklaUn6UD+q0v0fAIZ?cW@fINKEP#TJ_X5&N{+_3x$^tv)c5QmU7FP zlNcqSzrA5y^X-9}Lu5-53aLfcYN5bMU2Fyh1HE7h~tSG z?aVMblT;Hv0Nlj!j`H_;f_-`}V%c|UY>OhvJ|2;N@CHc0)G$qJCKIR!N0N!fI?u_$p-7v@@Ruz8p z&3@j;``6Gjh?VeJKYts*Lw0XN2aD85qsQ(RIybG0E!J${vj~3T%Xxl8N8X<1el>C2 z8_eC0_DxcHyn`|#XlYs*Dfq{?#?`i7{0mDU6Lc)BnV!-S-$*dO>r75Vb4OopmN*s* zz5(5dN|P?#GD1_i&T2r-bD9#rOiNYUiy%^kiUse3B~X`xP;rE*@(p658p(b5I~?t| z$EoB{c_{l*l9$Pj7&tEqN5Xk%1ykI|*!vKOpx$-Y?4GH|TpnL`sDo>KM`otv7oj(D zN8Ky>_etQ6=j7!e+~bB4JY_j)ndpWRUaZL@d@E@TV`xvX=Dv5yZ9l(=3PKnqZhK-s zeE*=e*H6;Qe8Gsx(UB(7+b+7xN}P_X;DLa!QH@xTnGtPl$| z0!uqG(5nLRwN*3{NTmn9sPT_y6>lbStZJzoYm4gRWA@D1r+9Xk&z_sn8G|GqKZsTcwT z_Zjf*O#jpZ5GE%?`V%kVTYa!;u)%!=+|d)(j|2{;Ax|*sfgIL%)+NjBai115&vSUT z!>i^tT;t}Lrt8gTW21y+Wy!L z_{Td6#-X#KH;^1=D;%f^Nnqb$4OE3G_hw+;J&eNeexU_4u^F#ELpFeWjKk0DP~K4n(`AFk@ad|ka&PXM#BURF*mNE-1-*k)ZCyBg+7 zxDe2lEB0jhOaOLLmJb#tk1A2v?sxa7GYg5qvVEuYIhah_C>@ub;YM56jK zxvWl?*&R`oc*xa8vb)HBu{wQd|4mbU`p8>iJ>r?koW}1(z26T9$NWF&y1X9WuxoxJ zK+@u|p4nj<_1);;s%{~)yPAY-9d4_uRZoNXawM)pjMZxC8cWxe$4aQs0Cd-P8Ev z@cOaz5@Lk*5zOF-H7+jM<+qLObe~Wa{iIJR*R77;>4gyQ?JYmOzE{(56=9kXyZz1} zrf!$pArNqM@&H12;Od{ikzM!+>IsQSI^v?!muPqBv$nIVY`s|#+7OvTi>tOXIss0x zqNEtoj1Icd*Dd>>o=v{s&=sE=EqPghsgW_6(-o+zH#^F&bwNJ3+O;zM%k1)T;{%r^ z^*9Sg(PfS1ypM*dygS*&5RRiH=WyCpn*(;+D#7ikRdv#;kcJm)MO4M^G$?t*=~Z7< zVr{!MPhVnH_%nAouLEB$B?@Z=(z+|ht%u4q`k>YAy=_eh~x$R)vAXIhtjhcV&*cl>3B5L5@raGa%iUIcNR34oL6ii zjpCX8-O;TGk#+^^Zi}nY>R>Vw1lX!=D}mY&45+I{!|l)el*(V>%Lv*>xA?uQN$AY5 z#C5EqckoO^TeAGUf{P&a9gj+>!Xf8f znA`3kGM8ymak#1-NAaku&$3ICH(be<`g?B1fl1eIK4sy-&Q^t7&DXC`II1Gppp3q) ziX5&lFMZMBjx}2+rb%u%9wxdFd61FlS;0~A4=0xH51qXNt+br3>!UZFF&h-#@uDQR zd5%Z5u(H1BqknIVbdKr1vb`Yi^d<^3F2=p!u2C4uFA$6ViC zY5W4$t&dczFS68<-mpN&JoZXCcvRbR%iSE^S?-r7rF7r%`?fD=I~K<%KF!{~NjLJd z3!Fj5CB7(+45OWjqE3Vj^%sXyT)8DaDeIbyZS;BhQGnBSNrp(wUVanWmL-&N!Q^W{ z#w5~F$s&4C(&oT_{-#4aO!nr*Fo&(o$%Qr9Ezp065;u;=T-hOM*^mf>Q(~S4>qwOt zDVzF5AGC{zghT!Gq#1wR0{Q6L#?bi-+GSAKewIubiL@+^0-g;DH(&xI*reB^Eh1LH#kF4gO6Y z+xhBHNA=wAiyLG{Nx9#Jh&8{ojG@v^3>W5_jj?NhCfLqLR|Rh@g4@ps9z45E-YZ!G zr9O*$Trkz!rEMjd%5X8dZ#tU7II*Iyvw@>`jo!Mn|E{rvJ$xU03R--jY`-@xQSR7} z%VoXfBsXTQ_&9!L#tJ2)$JTqZOE$iohv|ZG){xn#(A9XXuKOsf8p*qTD#zrOHYm^e zcA0mi&f!2N79FEH;|ah#H~8kk?7<0pvYdczPKh%CeKuy=;vT4MJV=mr(U}4 zO%fF7w~uZ$pK0+Z^=L9J`mVd`b#_-?idbf2ZcxHElpF)f3sRv1%CmnTkKSS2%o!xO zDYl;=%y^lBlgdK3#54UyAcTMLyrSL1mcfD1@IbTqENcA5HQPEKB$O?^yI2;m(x3Wh z2kst2B_aHu#UP|xNYkZZY@-na63E}J-vX&-;m@c{cOA_Ndu4HyXP>&a+^!DPqKAr` z$~}L%mmGbl`x1y0WiEc`W$dvpnG6UF4yK4|$}LrYVaj$T z5CBg6G(NdGUKa>mjCrk|Cv|E!xcvFo$GF8BgZSL!70FzhwBwjG{X>$mq(WXh1wTKb42SWHd@uER7P~CChnXOJtIf9*Z(*9WmV| zCR(~mT(p^Q&=1i+sZ{Wjh&L=Wb5(Zd$7N%mQnrd)W?FX&#-8;XWhcgM7CMuOQHQrv zTF}%LuL+)1_3%wtWi3}h9bu)Gz6|nZFAW+9;00X0Eo1|SgzD!VvSgHYoxkYi*~KNC z^RngLO+!fElBV&P%PD$CGz1qR)ln(EH3^FxE>kT;Qb){+rSx3YS5l5<;%SEsX=Z?F3l9Wn-Cp#-?X~i{3!1#`MIA*^(zU< zY((5IMq@fVXG13<^Gy+Nfil|RV)>(~SDcEJfzi16CuxQ>b!H$ZIE^g>ErZ9#rs#%l z2)Bd#6!ORV4l(-DeOr!L3l}T<5TMl-{lu13PlKCEpS{Q0JFdkY3a-YBi*@|_(`7Ez z(ypxnP+n?eZW-#3HA3(b55`A|N4GHu+Az~eRVutpJ^l*H-q9Ko%!#j2z+lLizCQsS zioqMr&1kgK7Z-mLLaGA*6@I9A`F!{#XDb8=c3=Z`Fuwp7S19!=Rk3x1yybzim zTi&H@!#w!tPRpdQ>8_X_Br7pLq|~mN*?dqxh@s-kA8|G(a9u;QDy`ApQ*IBU8OLih zDw+^D(zJQrFD}3l(-`G8&-abH|5O=YK=c)g%Xr_kLUvVTa}wghHp=!TQJ1+nuqtv6 z*BJY@8yDqo93A7ZFHV~L^-|}$}F|xZ-_FClk zH>ehgVG4K%(DBi7@#fHXN?4sB>xOV8+hmF$v<$lztxnfB*LOJ47_BZmA&;*7X6xjr z^j2<-9}CNK`vbaw280q-O8Ux-J^P)*WqK#=Zbv*hk;?$5TS7W!e8O*3r(M1 zo7hj;4wj0AM_&APO=X3_6=y)ftnk9w4H#C&TLG3R`ou;8<5!;W`VNKW*&>MR=1Fn& ztcYH%Gb3(a$*7};D`{Ncvff-Qb6yka0c7#^No6HQxv+XV7U?Z49jzn$@?p4Cwt;F% zyxF5j6=mIzW$`j%vlrZj&@X~Cg%FMf0<>8ZOP`dTX5rV5c&<3^0ELce2e=f!L&4$o>OLR5&49{|z22UOf)R zI%Y{kAOh*8cex{gqt^`G=U^?Qt9tjNRkJPprzUAzlt)Mk=@RF=AM)frAU8t#3&uuv z{PnGnWfuneGgSDcebWW;6ig`JQLH0wV{z`Q|%dM}<%ImZ1t;Uo4kiPV)~=#&UE zCgK&w;`KiNliGkg-s%=9y~d9m8oL)JuaMpV$?F#dULP1a<}7#H{Kyx7F zqfqR^7zmpPF)XA3fVlLQkWfIL75&o5PCwdwF(x}b&2ARqS#Mn&Z%nDGD=#)doh!4@ z;S53D6<%IpMtFUC$KAu><+BSTQa?Ms3%h+nS!@avMqlTV7D>LQYyX(Z&7i%(7k--w zs{}l%GxrtVV98{FRIpuL4^APto2!Em5ZZ3MrAXsmj{~fp0;0ruJmU_&-}b~_g{4-)H_07ABt!hBHM0^?P05I>rY=^Q^G?j7L5R)G!;`qtm7gmY+I%}> z89A+*R}#_;rdqfeZV_p_-FL)Sw*@kbZwaO&Q%04p>l|!c+V-tDEx}LyJRE;rxrPNT z!OB+v-hM&L#>Wur6i?Uu6v68PKLcM&{xzBAl%})KF?Vk2=sLpQP}!Hw|0`!7Xd?M5?3I&`Cso;&WC%_miYT5q6uP z;OGQXk=`awA$R|vs_I|HRGmFdHi0Df6^>vB5lfiw#9*l|0=qj>&&VwVvjvj4vB{uW z8hZ&7n2*opjhvz<{}sQVi^SnNzteOdRDD!+KxpK+&=ixGSDtIGsyb#JqpKul@8`O~ z>PQwc;|svo;1EiYsK$@qK1F?1Cx4ST*|Cep39)bw9Hlc3uiePgPa4MQw~sfjyo*#K zUKGn~WHQJ9swBr4jW99^cUFH%;u!wbr?_+i1B)+K@8VYQsEYqh6T7^aC7auB6uB)> zYlBmMG^I=PmO~EtnFlm2GnRAEiLxC-8$~Pjf)>b8F9}~*%Za!b%d9S&Ds+lq`@neD_V*8~}MF-*MEm|rZ@_qW^slFN&oG!h*QPuCD2#9%390J1`z>y0 zQG$DG2Ffu^hKTHX?Rt4ZXl)Vw0|( z@eiVI2ST}8$RFPU2q}QG)_+AYfxLMNQ0X$@m~Q7D`+SK+vtB&EO3dW~WTG;^2?Ny} zUTq8D69snwnBix9athClkJO_SDsJQ_pfYB(C5=0p46D7sR4^luCe}P> zITK^)^`iB7qhE%s?HUrsPm_nyP~n&!|AsGuoZM^{ON}b@aw%>3996)BtJsz?#3>;2 zi{LQs(Y{dw%8>^jw-sYZnE%P0iX6)Ar``jIvjF_}$po?mqeh(K(~s9iX$O4zu@GRRT6E!exc-gnSxI`B&p?%eulq93(fxh&rnd9nh>V?M6o8%FG5MCRE11sbeeCZEyE-bXYw>0amB+_trxGq8%X? zp1*yG`x&ssmLe>W(%SERYYaBL?I;|R3TL&bUH(oiXQi+HyR2QfSj!-Lkh5w5KTVmH zuu{t9mLN`5@bcSa3XK_m86}G`5U36D;T=(HDu9{&Cyem-NBtS(pZM<+&h}Cf|NahU zlZoKAIvHpd(yr&&-bLw585v=g7qqq=IYtB|<2*7OVKLG${$w_nm@Yy zdJ+fKBn7Su`=LqioJ=Gb%bP9ItgL!8ds4)|CjOrz{Kd*|TEFWf;+&G223-^Ez>);y zgvc)txe1Gjt^iy5i}_u%HDjeB-hMOx-p3!V;;uiwHyzyKR-Ba)D(E<$c=Ogl2PhRz zyH%IZmsolY>W%K5`hNubKV^mrC~)1p3;HG{iGMP zn*kvMVdZz;U(EQw%o;|bM+^XHFz3NNh9*|b+gY0AKN9I_p3c?`E^*?CVZ! z2fuMJ3@hEfg`(F2z~W%c-axUh zt|B9x`T3|4MAzF>_RS1EJt>-qClj6c$tFMenww(yEtv~Qfg3gdbqR3Z!{|=e+OQgh zuc|>ODBy=MDVL-IX!Ase$qu+MM9>J66#2v8yB2!hm8 z7v(=T=zk6I5$7+YW|fciQhG{Errmg*oB+Dyb{%U7P8xe zfO^we+w8V2rNgg!N?j1C_OSOdf8-)it!1!V>lMg`)%*D^musVegKI~xHyF6KqKv;3 z<<%F@dMR}7)_q%>v;|@h1VFyO_4x$nU9zS}z0j?1&||W_e}y&n>0Xuiszwr2dlaPs-aPP`g3{s_%s>=YNkUo9*8wS%x;A zxYO#d0s*4S(|kz<+)qG}ic5|g`ank{K$rw!S2lVy)TQRHiE@Do-d7kTlrWU`qvycA z4TWwFj@7mO6__tGd1jtw?(;Gg4Om%=6EaZiGrZd}ExLK15TwLS3VbQ7h|V1ynSu_tziJKK z2^qu3Ndkf$V$`tGnr;tx6Y9n6NgQCNJ@nJ>I^K1BSC8T3Dgy!z0jYQoFvib%2~Z&5 z=l{IlkutFiyK+ZzBfwgKT~yv!0iJNp-JgmpacO|j_(j;Cf^U;tVg2dM_fknq&hE*> zgK>HL@Q!A_UBnMylQpW{VV|C{G(L}3edjn9*8Nm={z4f8S690|o)3Ehw)QQMz7nVU zi3O~P4c&x=_40w!Zl$SihzU@+Rbl*^6)VFoX)|pGdtUk$xNU!We+^kb9d`dm-Yx=$ z?gl7ts3#>;TNQb-WbNS-*=sW4lZlYwOr?}Jexz@ zj)EW+^1Soz9>v;r=YfmI*NrL1nqV*>3c(v;iU%QVU6ee80d<25oo26CET5^QMQf_dQ`l~HP!qMBwTf~d7f!IS=wsI{~CC4g!u)e zs&b|O{ChvL`DPIvY-&}geT~Ny8h2q@o%4lvN=YN7^}yX}&Yo6Js6a{_7%vL}=sa*g zD0w;34K=c&Z7&0=!jG1Nky{KNMi%Bo0ez|??liaw-N6K~UJ0ltNjtHR zzTIpo=1yR+1T5GlX`k%xKXR3Y&HwjAx=7(cO^ZO)aywJmGdureSpN+cgg`il*YAP$ zPzE8wZN8_9+IsXTT!J(LL4^?$rN_`^IeLv3?0Zi2LQt&;rc7IEH*f>MONbNacR{pJrTfJg-XLx)qzQGvmu z^TX9qTcGE4tO3A^2#kScpnru8@=y2IsHaG8X%5qM+7ehIG$sqbZRfa`n$MjW{27~i zsI=U<46EH5MmPG$8-jBT(H8CCq$w)3ueL@Kms_$^}OGH-nSxw@rxW2K_~vf3^N>w z$$nJ!;?-`XI8(A7bG{JNgEx7I7CYZYh0}2;GJ7nMDPP%kM*dDH? zvhpf(FW7znlGeFRXs&*qrZjRjcGo)jUH-F+2pRGpnGz=Fg9-P*d24)vnxVMg28>vt zZ-5OQjR21lP~eA7=r=2jJ(HJ913IhH;)6#gKUY@H=O3xr_xjAPU5Lzr|C$n-cNuQw z2g<3DTMcepcQC9Yq_A@8bxZfgXl6=QfDupcPPvu-ThNVTTliPR?Fff49utr6pips_@eANqJ*U zA1YS|nIaaVIgKNxxl&l4Jf<(8kBQe(O~OQ@-G7GlCG#>{D_pGv>F;^zYoa05UuAA4 z8(&^KX(kI01;HBc0fA&9W}u6?w<+zTJ#?uYTJk4o*@e589=x{lzQ-)m9{fRqm^uHY>|X;2dwAf0XREnE{Sv>u||Lj=_Ks zYEZyBJMEc)#Un`OE^^*}-Xyk8q_(p|{6m>oD{m{S6~+1D%N1gSQ=vxP8$-yC%h-bl zO0Y&c|Di-c6IZyz2g-Rs>#n)SIZbY*tAli;J65TMTJfGg`K^7(0aNWA_$bzPR#Vp9 zCCuq~(2%j~n=epi5-=W zUhL%HDvtlDYGndb#ajezWSQod;xKFT6lSGa7QWhJRZDQQEi=ctkM`8?h6t3%nzKAc zgUP-mf+6FlcC}dA&OOiP5%Hp0FxH{s(j}{{x$WELpR8uM+7(sP#5s?%Jr3!jcYpRB z!;On6UW#W_zUo6Pkha(H2l`T?9`lz)6`Lmu_ChryGJ@};(520gWHfiy(06 z4Y=;-hQJM+7i9FjKgStb2kl!3;+)6BdWrp|S`oDG!YPm|j-SawZci`far7_!kL)d% zve?c~V=@y(rd);{(?1^ZwuSvg+rRg60zW{70lXh0!o$@nul{U8Ept0mm{sn23p4Gw zpr%1d(5Js#6;8BFB6w~7Vogi8GaT@i4K!D7lNOGjMZ^I}{QqVf+v^rRMRJbnf^dD~ zl!_Z0Et*%~IbqW@eQec?%**VTt_VD+e}vqC>`|)lj1=Tn;y|JK;TXLW?;1f8wiB@_ zq?(HsMiv)H_Zq*aIg8;0nrQB!uJ+SKH`vGyC;k|*8!R`?i~IDCxu8*MN!WM16J*iR zWRLS(QwPY>l8OET!D*zMha4cy_Q9yy|NiIT?Yl!s8@i6$5 zmkUws=VMgB8IcfgQh+I`_S2F<;riN;<`CP%ol#>X8);x0vrGcH1PBkHPSMT7WcF$D zLDM;j0|iZPW8bHP#nF2r*)%um%0Q>Chk@d$AB~Tl9E|l~k_<-nhh#&< z8hoI4uG80RdWLRLQ($rAOEe|dWS-B@QtxFU5vRn=d3QD>S*wK|_LelvJK6l6r3K8H ze5l6Mc7|>T9UR9Tq-ekSv-RWHe5u^o-LZ(zzq@6=KtrZR$91np{WdhDdBw*r|j?|;pZ!ZY#iJp{GjvDg; zs3{{2?Cu;7t?WO-G$ur{UNROqatZ{Pexx!Von zPMGFOq(z4w#Mc=9mJ!82qB(24tb7*q5oo&vY`^!d`yRoO1`*Fvc(t71(-qJ=3PO+a zrL#SaH{fC7f_3jO^D_Yg8mtL3UXQxm;1_2<72O)Fb4B36y1#wIi9N4k%sh)$8L5SS zLF(jV)%K^U*ym;_FVbN_X77Daol|EQhU9vcbP0Zde*|+0Vkx}uCRjG7#+lripHc93 zQs3*Xiue5?LP-c)egpFS{;TKS`i{+ZWW3b#e)5tMDN6T3iu>&g<%na04zFYNx7$J) z7<_~zw~_vEHOG~zWoz!62{H#+VE5VF=qNkfP} zu)TRBguR=(n0eZZDL31M2Jho1Mf+Hnm2t1IF5QWbgTB+w6aDjHb@^D6% zpJGBu8Z~BA4{!?qG#@L;QMFAZ_bUTdoLX#*U|E%BvO5!(<55G{Ck5Y|Z;3x$_3 z7W!0RuPx(faZfz5A#NEuxEfuizBFH)IY7BLl5GkiLg{I?jh zKFIn2b*Rs!0H>c=US%f$@V=PdRi&$%%bj%JF!gm-}oBdK2bd{r~tGJ%dRHT!MJnRsHGF0yt&XG%a^Q(Sw?ksK_LlIINxw9H@Wc7KjjJT5!VTJGP@GOxAF zXq{V#b|@u3vNAmDRh3$+yYxxG?Js;PZLxvmda^QN2A4cW-K1iM@l1{++yH3X;zlhSDl;LNHuKy?c<)s*_L`)1S%!mhZqDb^sY{&bk#Si}J zEVoqq79vd_t3z|QfmQpVjFyVVWH=c*StI( z!k6)5w_OQz$z|$UYD$64XP`rB(W}yYV@uD?7orM=^3wx8=<)OOxSl9mOD)E6H71An zlKpLLY59-a`nG7>MiQrM0Z9rQS&Zuv)*?~drfiO6wj&ftH}jU8Bg$J~dS@4K+fm5e zmh$iqNUrth`k``X)Blw!EC`3S5;~mv_x-e6exZH2{%muy07(?@4xd)ceqBqHlwDI& zMX~1H;Or4+{o3dFo8{9Xo*?)3%i)+Jp<@Pr!&8VZV>yUd-oazb_zCyuZr!{Del$}& zHN^8uZnDMRL*;v)Iv=PcPlT8(qEYW|JO{!-T0p-1J*&EEY2P3^;0~OmSmzY2UUJfP zo+8C-7xq9lqg78!qx6TMX@ZQ#yMo*fHMbp=6~-6Cg@q}J$}@9*PI&Y? z*JJk)w?)-SbA*riQH`)|Xp>f7$#Ci^$(c^yx@X3{Rin`78k>m}iPp*cI9aN_$$1Ow zEE!UGjN%!FF_rf$gLP1FHskj0ZGC z$EVqnuMg_OXgFUD6+SYKsx2J2Fl;~0Pr8g^{$}}Fsd~hHBT_xjBB6MCM4s$&dDJq& z@K+hoKjm6qC|IaM$0cDl(SaG7ug1#-_q|MT%{#sBm`Y$ z_qWZTG!OD#YcT9brMOi}_}zMGJA$nq(6zD%=Rw~q!Kf!84%FdFwp9y{jO0dY>LWY*T4!*Ms*twef{l(RqA^!@}7?sb{$BlGzXLGHeO5=N1e_bqz}|deQ8gmMu&5w(Pys)TEzd@*CX)1YqJSMqikd-(1j zcFV(NIMaJRgVTyu&!?859zS#2EOqHLxTSa2k@jkW(0=S^2i=@r@Lz$vc=ATGW%>d4 z?HQ8!YH_>AN03cC*6xoW*w*HRY|fCj@X=yqc0_O?Z;A}&j!huEZd4rxjwd(n{Dp%Q zLBOUM_7Lz3zdxA;-l)JWvFlAs_WJe!KU=A^RxM;6`uVuTK}&dQeV$oQKy6=ftkc;x zQFuxHO4$*x%5~;xI~Tv?Gfz=5Pl8hWJpCTnGfF?GHg~saHg|^7peF22kGLOXR(x6- zLg>pEbdMqZ7*_s62C>*yx3)u4fOvjlJwfMSAph4$XcS8>q0BDH7P>_C56be(_t-bH zlwdgx9Y=`hKq)gvIdXjA)W!r3QO&}wJhpnEQc(l+7O{T>lAw2PZ!u_|+hCB!-g(%9 z7S;~k7t=Ut+Rk82N-31zi7EV4aXFmS<=okksfY52r05xbc`{z z;*T$zMRnMAt8;j~e&8uU%B5EplvrigtGYvRS~Pg0jn{BZ6z2|hR{R0^Ka_oSTvPA+ zKCOs|l1fX6NEvjCGy)1D&5*9qT?0`OkcOe8N(l&~8wLo{qq}o-jT|t3XT0O{{p9QQ z`)9AS?VO!w&;7)GU)OctXKG?f*@lJ2Oe)`rm; zOlRXxAu%g8{WIeNmE3~^e1dwT%Q5vU`jA=fiU#mlF|CN3AdW#%`BUoiT{n$yoE<={ zV^<{Fvr;=m{c20X`?u~;Hche~w?Js( zuV8L_?vLoIiq}|oa=ZeS@^ED4%05$|0TxIivHT**67>s<{94Lw^Dz6KX^SN*ls;3L zhQt!RghkZT5B1=wcGkWK3dMTg4g=E0yjp~U)kDi<;nXB65*PIsP{js6wl^2;YF@j) zq++lR*^{?}he=-DdyP1SgnoR-dmk#RT+-e26X!w&ND-#X0-a`IjIHu95t&^+>r2HO zTlz8XWjI;kTRcN2utVS7#>$u7)Sv5TRUDkB6v+F*3P@JozACr#%=b#ClwG_DWgx$j zCq1v{l_PuByYg*UKiJsoaq{`DTrqj-#wFM!l;}ME7O5h+^H_H$B5yvokhyTPrmO$a z`u(h5GYq0v>BWS0i_+>I>LhgIQuA~lIfRp7_l;g2@y8lda#JA1qs(kZ|ZXnFBt8CwxO0YbuWQH zNVroT4F~YoRze7m0O||!hDt>iq&&KE2{{r%Xg^}ZELyHpSOr9{i0`?bG%Af+vd(VVw1Q5W;%%`ItGzX z@akDuT?6~*6dC)S9^PXhHM*y@cAKXYb7moOFgl%aC^v%azE4fkEUz-s=+ZcuJ%a(K zP`ERHrnA}(v5(m=!MM?o@s`AWaYy_dY|V%)r&JcSsatPQvP{)gS(iX+*_KA)qa688 z!}OEsZsUO^`tv7b!}2R!-dGoL{#T!5fd&AQ{h!%j&5MybH3_bR*__JB;Q3E}UpL|l*TBi9V*bYDPsJQXxbqCtEye*!PM8loZ6Twx4R0)v% z*BlS6Q3zh|?Ss9hD{zNAc?0ex*HRsuG#<#Ig!Pp8!=_>AMB5Nb$|d1AtS6IuOKOVU zuNz!^?y%+NZg}M2z;qp_;>;w89=+92Th-?sj1~b6=(iF z@c5)DbW2RMe@y-fux_L$?a&B@&LnNS$j?u}i7z9HJUlm#pDy;Vimj>b5Z;#`ap6Hj z+8^VTt@HC238gG6U#xNf&hbsE!qq&$t730NNM>b(e&3-0LU0XW+`mqJEeeF-FL6~s zcC7TjXze=6!+hmP&!=M+m%kF4c&P&g{SgryoSX>eFo)T2ivp}xbMow)J zbf$ChD4x!P&KzemBM8bxny(?d9E~O>`>_r;?|l(e*s4L(;Q-nS^(-gY0$?OS{<><-AAi^ z`|vRhZbRoc;Ip>LE!O=0@9DmqeIl~n^L?~BH~GrDDjhK&>zRA1{olW`r8VcG7A}o$ zE6O}*_bcLC0AM#kTAXtJcEXaL%!d&Zy-RXMSriB^K3anT^k85kvPd1Ec12&8RTQ{W zw-RxfR?uy_oIYbo6dgYdM{KUY?#bbpCk=JIG2iSulAp9t5i&ebw6J1~Q@LVyQ?Q!% zFdJrN++4;}LU&hQW7+EAh=yRRX!-hXc|Ana0A~zin19@cy;wn$Ewa4QFib5zH6Nrf8j<13AS{H00sJ{@HLED? zNd9PT9Tx_z6%=SbagYAG2y4{Q#kvFg_a4*E=xr(X^XzJ~#+m}>{&u+;)}o0~7dmj^ zSvu^dN(or#zE07t9$He+7oI6BHD!k}=F&>wjXR`?l+B|%v$ptu)@By zKKCF@Bg--(A}WG$1RSy4{MFWVA{z6F;iVn!_`H`^e;J?TtPKhUtjKQtJIe=%aKgUo z&GRyp=1~=*XT6W^<{AhRqLb*R;&MJ&Bc$9{Ya_8urSZaW?TlMrQXzN$L!i~eN%{Bs zIKr^+ihGvVlbOVZWg~PV%Tut5f##bz)CNMo~XkC)IyJBf88MW@bgdSm6}MU zgCUhG_+Bbf$Icu)C7JPMvxaOxSbw@T+wPv(=pKGcx)RhfTpxhAGkF}8-Lib6ywsFR z6qFy|0`U%_pp?Y)x+C58A*2q~&o^%Ia4?O5y>NKhBmb%eK%35|u#f73%71a&Y!I)d z9<_t4{wS67=Z)X{N%y)f7gA|kDD~Pp5W9L7vD)SFGj9&P>Ucw^YTvRRElz4or17aq zVs|1%oGI0S`spaxw(ig1ZTZyie|<9In0pw<`(^3VUPQqW4UMp0>EK|I`4AApTNtxX zip^SrKk^U+mUM+BR8?T5cwULna`)GU{@ER)2%kYj)I3CN-q6#jY1! z)Ic0Ch72AC07hX#Zi)QNI?^M;$~GajPW%~k3V|EjYRu6LTm9SG#&ParTXyu5>L%U? zwL9OK6andgYjmQt(#0W{y&h1 zgp#0vn-k*Auep2myms-BUi%Qi?Tu7EjK;A40Z*TthH#C60(+Xf5f+-Doi*AXG$m1{ zMmRI}g@Yw0UbSe5NF6LYh%|0FlM3n=F&9gahlNM^&-K8!N7)LJevEWWdHMHxBEU3l z^)QSc9zYL!Ha;JDrV}Ne*fb6f`ZB`ff!9zYiEg+uQNVWNnhETP%dSSR62AC3q9Z-{{U&U>Ekm?!vZs(A`!^ z{7nnhKlhhuUpUHZ6gDDfJR@+{`}*dWH>sKyR&^218TEOT1UiE+l+}>Ilm?(n*TA28JHe&@L6)+oqdQgoPja=>?^uX1wC# z(qJCn`11OqL-64dG7{&A+6F<5!`TW*w#&)k^({u?_xv~#4>kDRCEutxZFKeJjW~k0 zrmTui(!kBz$=U_c*GL~L$h_geu}JsRW1P%lwPzYE9h%QjDEDJYv=Aj9el={VQkbrt zdYZo75eoN@e`O%dXWv|y`AYB#*SG0e;~KOc!ti+!`nFl(txFMHr8JLXHbP zSOuB7&|hDtbmQWPqCel|K`YcsD#e_$9~2z)h*9Cn+u)y5yCJg*jT0eSPq6{0xCuf;DgztIygzf}cxfT{=>1#sh#e zfSQIL8mtNW$z1|-8+tGQa0z0rlK{Z=1c5kN{)sT;#9~4>Qwl&&?i=IIey_emYc|d; zA^ITpaSOx*Z$SQj(05AKnqqpJ7@$h&YLFnIFLUIkn4} z66T%(E<14nm;NN|MMrpi?2Z;&bGH#)`~E@Mvfhm3mAX6aG$0zX?${g=F)Z(^#NvJ< zIOmG08enZ5{W*hI6@6LM#t~Luy$gRdQc0aWu`ICCFJA{pQ+G{VtPlAg!cTyym?yZ6 zEA9jxdF z!-M-!ES3157XF2s#soWmC?5WEL;sGQ+kgiH+!Odv{*Qh5d2K`T#Bj%C4KHo7gU@`V z^d)q)e-pdxp}bah*JK+gfxpijOu$VS>Bq#aZ;u19L&(eTi);mT=3IU?W#bW8PP(4nNE>KJV51;U=@Fik-3$LM;9r*DI zf@`)NDLwGBwf@O9;X3S?At(5Y7gBAaHNvu=W9$v|4P$PStAL!5?JB>W4qwYbytCti zY5#z*8wz%hKP&-gRYS%#{+S9bammPcr_W-&4FKIN00SoinZ9W*Ch%xQwt+->AE1{4 zORtrJZDam`=Te6kUWfo)8?}npSRiR#jnu_RBK9fdP5~QF0&7dFsv;rqZ9Cpv{nvNi zcr4!>?+L}0-vt_FO$F$rl84bbSPjQ#Uc61Q2(^T)el;wQB}0hj-?6>qu%p)T<}hDN z9gt#g3gBcbQg~I&fKyC^c+fTvcisT>Sg?RCRnR_1&C9{3hmsR21srms0e+WRW^ z`Bgr^PQ;^@-y~##lD~6>Kj07b^^N?ngg(TpP7<9Fqq}!aViFEiWiMvh`YO-?9=>jBLlz~eER6`XugSG$SKpy$3QVTFZ}f2B3x4J4tkSJ4Ttxd3PKrFUCShnENy`FC zai+**)jP+gDd`JHm&NNzXy%1$0s+ER-ShnQTwn+7iC?4md42m8JH3D$%0T*CmFebT zaXxRY*YiiVW50iRKzv1}-z7r;+$w@TQzAY<9eIogPQZ@9_G316U`MyRqg5n1V`c z)V|Hb{Qo(tf8PZdxj$rf|Ja`Y;}M|yBnWu2YS&BsKi3HC;4-GiZeM||1;8vl!JEc| zABXO>EF75mn_B;y==IMLb~(%*ssRh)0)d$aFuClolhb@`N=RjHvZKrXem-_#1^(E7 zez_+N1fc}X8h|+4tl;mJG`T7~15oVzwO0N6Q3C<-F~<+a+)H_%26h&GvZDbW;r8!0 z`RpBNyH;0hlcmssl5oy=!a~M$LrD`kSP@43$L~L6#J0W96sw8*57%RL6VzIs8Ch(1 z=DwKTA~ti>D6c5kZ#V4pbs~kd$iRG$qXUS77N}8wqX6$Xx!Z;SE-V z;`4dc%C#+Fa=wJ*Th=iz*3(%UpQPu1+`Jqe{r4RQd|{L2!d}1Y`NSDwelbMzGkTqA z&3u14kihqmEJH7U+xII-&!-gxskQ+a844ArRE6OYucg+SC&JDtqgF=P#Rsq*)?L7T z2RJxUhFB|l)*2BX5wejZHl(1%Dyh@|=-5x{4P4WEBr&-k_XU+QEs^(u*zstM?5`QmuS@{9ldo(lotlA_BQ$dOs)*<_XYag}! zN+q&S)zj$kB-q2)A&ovUXnJ9^DRGMLeQU1{!fCu+n+BmG&%FoD`sEr;mZ{1HEw;eO z)548Z5SKfd=Xr2b{b~KQ9eGsmojN5p#hpjmGvrmh+u4b~oX=~IqdUJT%BETaPBL#Y z1dY{2n*ASN)OFF}g^UC)!&n22$Mg-L2j%d*h0rZ@Gwhgo-x0M<%o%<^deMKxtpe^A zIC;EQRj{7wTPY{#2ZpVSUh3{NIc`#`&l&7~x{JeIofZdkPGnpgy%+dwhMd^ak+I{p zStJL>#I-B8Pr_}@iD`Oq*HOvX^|M`g!{F68`0l-PdhXj}jRHD!TWfv%+nfFHqmKkh zYS-)1i2O)iuak0wA(f|VX?GWqEnucTX`RY+{ibX&HqX6J``{_AZ<=7Ii5=5^KuJ+uXy4R_`=R$z6 z2}qmLqS0=jkg7EBtzUGt@T%`EgofSAs2w@34 z2hnRw4A>)IRLE8ze#~~&H5dSr8oDvHPcHKcfJ_))qjuXLcQk*6@)~jmF30vCG{h!~ zFnb{!W;T>L>&)wpZF4n-xBHks!fKnn7Q12bO>Ui;4io;X-ijqx9Mj#DD_nmT!gjPr zIA(fXiaA&&)NT-P*{aCe5BB{eHOHShIffhrXim&QNK^qu=~=UA&s5c>8&?F4WVWx8OkW zh1fn^bjCqHP1v0VaoEvV9#v}nP`F5kX4tCGvzr_CiYjCwuO7Lj$i=;jy@F{Ef8*7i8C%d=D&c+{8 z#KE6l5Dn){%WH6lJ(b0;Xr!>rfT*Xxi%4Vit`JY7G%9?)M~#TCMUTzzw$6N_Ar5Ar zoMyjUb2lqf3thh9WFK{>T4NX+T4@6Qp6A+z$m74(H(;+00u(U-8p#9j5Nf%s@M76v z-#OB~F0uM_&Qqe-+6e9_GQTanky#jcH$D=6|J396l~1t`EH1UIa(L7@P$!~*{MG50 zOte&;9^KZL@2Stb-<*>9tKy4SgjINcvuM1r1_66N+J732qnYu%`_9~ttIt!Vr<1>E z>@Fv$Ok`bQ&v+VT#aX@K%UNv`?kRs;F=WdUcTR@k(FPAsOazk@yA_|%s ze!h;{RPoiw#GRQ_wuH#m!=JE8Nqv1<`}s4fV=YjW{0Or1!WU;04-V5^ix*2kXXpf# zaCXYn3CRQl!53{b1oG&9{-Y3ug2CCXyt2BGC0I4S+E)xyL5IrYVlWJR)2q|#*2x6N zTQwX>rwaqGO&%`Vy$|uPZk(vlWgLeN^~2#x)r`I!0#>#{m2tIak9WK8t7?U#yjGK5 zW=+H?VVXpXlI*-wC+|u`+N)NPabYKU4y7VSRWv?-ZuB497c2GXZpcL}0QhV8*JlZ< z-lwu%Gamy@a!*L2KDh*y0_^tHjo1GB`F?vVd;*m+m;3T7=AXE;i=CO?k)0u+5DNMT zaD_G!HrQ7$nKC0-eOlN5{uj&@b{qrA6DT>UZ#ZORRQgddB{mBP1_NV~X`# zxh22V&u2cRo|Xo=7wVNeban}jNEHOS`NAud##;Zit)3Rc8zihZEZB=SVAJ(&;aowT z_bulnBhKN;*ahxk%iYz&>`{Pn`?cA#{=OsZz|+#Tv_qZk`}vNIjor+rPPS1OS>(y! zEnYd4>5+44aE-fl!01~!Q9PyfLn!EB@0EN_mPC{CqaRuCrnsXUax(l(X*`voD{YM= zZZls*W3rwjDJ9tFw$2f(-&;ozVy#D%gTJ?y#mOopV67dyb81QtxUr8WfDTt}42`sX zakv;98^dF08TrZJC-=xlXNMJHT^EsC0%?tFzj<{PmMKsAnfK?%3x>h3tjZ2Xv+*AJ zjOfSPdJIG8IhC`$vFx`_xV>vK(dyQ-P7$4LuPXe<6eoHNHWRk%C}Vt%-UTygZM<%k z_k^bhZB@7#4r0SPT8J0qnbXRp-P@w%I+vmy!`fL`)o?f{|iX6c;STqDrCtZ z@@HOqEacTTGLlR-nXHub?74VB_`Q001&<_fuEy6}E0Os}ovn-{qO5Nilkm{?Y0RI`D_yM6$Z zG&>n~&jD5IaG#gx7kNS8M?(_!c{-Pn%_r%Mim@^tH5@JcTXWv+sZv3c`OE!eI6+OvzcOX(z30d0Cv0C;;hTTFZp2|k z>YK$qG_vL!beC9gCT~@jNx5pwk&FBO=6Hc|!v3b@SKP^=`8>rNhXj#RdFgLyti8u7 zI2c%ZOM&p!PiBv%4y2&Qr=;hAd!pD4CKumJOT4zbn{g1z=S4D|ME{Xb_h+Cx$#?zd z=amFEASxi+YvW&p*oOL!`az_0#%kjsgjW}%q$@3Ff5%xRNSvULU_G1ecj}}vil6U6 z2UVnzglbf0Whegl!4a$QPE)kk2u$eX3fz>G8p-#WLPB;@9iEkS4~JeM=8%S3+Cb+P z{LFUiLbiz+=g z2B{2%?nvYqm@Olgt|3b%apLl z7z2>m^Wy8aXD|gp{fgN3P0&*#4HAcwuFe>!91Z>Wz+DiUE8(SMAL%icS~dG9-G6_k zWOI+w=0y`bj`%|vAumc*w(r(VU^Cn2Mbi0%(qLD|-1*%EE9U(ma&h;x^?T9MXUWbO zbVUe!O?d=NLE|kh*`DWcY>US@-9Z{!rMdADB!5FPzr8Je3 z#LDox8%K;z`Wv4*y7fJyZFhvKgEH?N*v?KaQ{0%iziPEhW!tc#?l#lX$6g>+CyEw^ z>?#=GZx@Ia-ozy!BE$>l>BpRdNbB8G7f%jKa@9g%`pB*^I=IGuiAC0Qsgr>(uM0-r zRdOc6hbg)tFx{!;jn5F3m<+Q z@fX3FFVv_;udhTcJQJPw{D2@7FS&o>kvrrF4pR4b5$4u+^Pg+y&a(h2lK5vlVuOnd zKfJI{vDkC#7qexe7%=JSuX@W9UDHHyB9QPhELu z(ur{lSC>TBd@aeZS|*LQ5PNf!ksui3)ptE|!!E@DmGQxB^lb*6$-cwFE6%OWEb5uA zYju73hM@vf_4*<2WcuM1N)G*EIqiygXfN#_LVaCSDtT!-8|UUOL=-q`adQFyEK~+S zW;v4h^nhHl|ABG(0^qvWMG2lIpi2ecbpTOSApf;e2iuqg$z2NFgRzl_}e%<(e)GvMO_l;Z|bxx_F<W3Rz)Zi z?8o$r4fdAneA;FmO35QD8i)twL9Lk5(%*gausWCK#+en#!vRZcXoBB!g$+zfdC?Ph ztu>@%N{~Iq=KwEzIqUiTK-QV~k6AFr0$Kj}l5iQdQU))aiM$WnahNFuq5&r)-x&lS zMM~!3Xt*u7=1ouoJm>0aB{9MN??}U7w^D~HN)R|La<@glzkGf-Ya z*-xEan#U$6RH*M&z|NiKr!k{$$(K3$Lsx}q>g!WP^WI}ssk(#aMU3jp==td&J=Jfu z-dPHXHL{|vh?yA%VzF4kWLPKndv`mLq1ZxZ_oXr9@Wcd74c(>)0~9_Y;x*BOK@~>r zGp*2f3351@=)PQvH;-quoHirLfQ8G-a%pa1& zIZjsI4m-_Q59~%#uRMv&GDnR3yuvPI^nHdn_8Bv#T31vcSRD?ty0QO`d}}lIkm*cM zrggz#XMLMwTREI0s;{;qEaLMPY?kwa{l`;s$VnmY{EB#G>RZ~~Zf~#2 zM<$?mr+WLLKGLTzk$Tx2Fqr|>nbi!fh^e0QDs_di`c{E%x7pDPrQriYR@O+CG2CEK0zW3N%+>B=Ao)96dUE$)YGj>mBZ;;-eSeb4%X+16_f*h!SXf#PT zfTMk1NVH$`nk9bJW9#-d9*Vp7muF);?^y z)j1@`qQ#q@*0V2{T;&N~bSS+&;!*zI)h9Y{`Q8Pcfwv%zufar-nY=5^MJi3077FQe z9q)T`?6?3t=;=bPJz+bax1$%&eL;Dq{M;mGjYOMAd3;pgh?|jghiLP|=XWNj>_m|C zq<21UQ6VZtea)AQ)Br&YB*;vU#G34{s3oA`Bf+8HfsjVAXL(n>e@oN^KpstQIjyrwgp1zF@WBxttWsG&t;!0ue;rD++v69zUi+Jo z1YM3X3aZ|M2Q{VmxH2xmtZ{s2m(!!H=uj4ljWKY_NK6JWn(q^CpcFMFTd5taqZj$W zQ8Fn5{rT_451xQOYM^tun)9B{%!Ot?+dONb@J?^PT0(VQ`|f%xPj5yx3!vYl(qrCT zHN8cO!=Wwp?1}_*#kbhLMgArrlT4r35M^-czfIE$-{g;?pE8;EAHTZ%ts}Pkjn}We zkG37=73aR_?G_E0k$Cjt5{a)#<1n9i{?je1(jhR1p#^K`R7XTCzIEEvuteUncDJfg zY;M5{l#D@~<}94I#J@VeL*~f63Y@gwDbDHevG4ROA|1W2(khsuq|Xz7M|S8 zliK+Zw?6fn;0A+>zWACs!;utkV4Z?|9g|pwy7A1NBk8&JyZ!Xp)f`1G9|P=NESr`1 z7$#z^5?4meS^bRCb=$-C*IawXKvjL`b`jIxI$n}`Lbh_g`bsObzOMXa!e|51_ozZ# z_?(Nw#9iB_c&g#QaSc_NlSQ5B6<;nn4q&zhPEsgTDysLb;;P%s?dO`oE+=KJYOk6| zAJr?T+^>gi;!0p zSmU3p-!#|}%35}uctUOi;;Y{qdZcnCRUW^=zOhHK5~NwMr83@%*9DkpSlU&!zgqF= z&2C(Ef8??Ja=0O%t*dCG@70)^ z(yg{|9Z_(C39^^CJbSdqoQ4{pFm4mzDI5^pNRi8fZQMFd^j=5n;e|`u{}2%GXuOUZw);7`I>4ytFVXu^VNqU)Z8@ z_H+oY-Jwhi`(=`8if^x|9Q?q|q9%Y)&@U18_}e>IHiw;231XF=`oRD*%y+Vts}slK zpBNqL0c?7st7W~~)O8Uyp{zo@sfRGCbSE+S;O!RaLQ`()Q8CziYh)p_`r6O2bgtpw zuWubq;!Q%okKuJvykwc$5+aeq%NFQ0SoOZjp;ggI3tCzt-%x6k{$_MSGMy)6cO%Vt zI8zyGpR0uEBcau+WeUMl)ewi+(H|mQ2>OPW_lY+3FVfOf(zbsNB;6q4Gq^Wbz_{uq zHM)xEDKu#j5BGOl(9Ge(-PYIx8*q*xF24*B} zpd$!?!@W6dRwkKvH3!JCrBkkEXafmVwq}iDFvh;8zTP94sWcE5q-c)V+M4!rn3Jqn zF*XVDp&Xu3!pq{}IK`QptIvZry`3CXG;l@_OI}vY-8dp~o94tQ;9C$OF{}i5!(X->Ed5H{UDeT^r^G$mxv7e$+a-^C0VMi`qPD zHzMqXdtm7{zi2;)x6zZjkN+5c#cB(In3;{}A6gmmfuc4_tUhShpX~Xr_DS2ml=&*) zwEmuok%342;m+jS!jL5j?c=3siMt{{8(-7SP3CdNaq<7yc&%}9PpraCQOJ8%T4&1u zYUlbsLfq(eJjXC!Qc0!Wwq{9vW&AzT7>B-FopCudD}HZat`a})sC~G9tD9vMGW)|H zLI)%@FN}x;Y+Br|Z)2!pQGV*?rzEh8C$d%BkRIC`I!3>biralKp0IYZ{ zFP3A>V2Z`Z;<>RrFZ}&el8@Ra6x>Gl?wsr;TokKGqKCWtlOE5E{>U{m1vnjMFrK}2 z%%<@h(&{YkdK1eC!;u3hR75V(Or>Ze4JE3IJW6jgGDD5VN=<#6|-!*C~%78$Lm6V%>%z_M@_sM@-7QCmHtl15nRhM8~Y zohwJOky{N=PEaWYA8H$37Ncl5CTx=MBezplJ7OfZ(bHr2LMJ+PH&7zn1f}^KI&V9y z+!#t&6qbw>3^u%OK@1Y+qDY7~t49M5EXzTBrN)8|515BZ2^m7g#yC zChx=InU9*&&uOut#~-BK?7b+dl2^mNtE%%{ifTdBTVx$%)9#URQ~qC`Y&*ijN$)j&PA$gwIniOVn0oh-N%Ot#9jJTp-SoVuXRw(kV@brguwX?e0EjS{1IRLUr zA}dHEcKxuYT4_KQv^KceC+(bj@;3cS1mc`d{Gc#PU6qmD?&;FoB?#BtA&nd5&l%$9 zK4d*2S3Qpr{4Wv-~QFNo(LdDILB%YN(=Tl6i+UY;i z8Q8JTLul+AB?ax}aGn2(s8`*X{zd!le0ezf%0=Xg{ zk`KYG0r_X19y(C14@>iUM|36R6N$&;%M0f-Q>?Z=`tUXmCbG6{7$SD>?D&vvIO%vC zZ`xvi|4|b>M3CY{ba0ye+d_71?k9q`_(ILe!mQ^$kt-fj5?>x=?o%bKA7ut69h*>h ze%Z!M*41MIT%LW>#~IZ&WYj0@!MZ7*ung#}>_GXy$<}n5oyC(yJW>qxaOFi&6>8w9 zb2mY)E%In1jvblM8A=j^w5>hM()0S|L)}SMU*xb)YJ6GYAcjCA9Ouv`%A>SJe)L0) zyI2ij{8t*k1?I#F5NvTnLMCFA0Fb*7h=%ihwk=03tBt zcFp}I)a))uaitlbwtFjHJmpBJ=r|WPbSpqzkxfo{xp|Xg&n=_kCHlzEXphEUTA}k* z=Ff42+{$r}0CT;D!n4*il^QGF#NSDPdXIvu7nc4uj29Hoe{Dcthk41vNa!ZFHFzZY z?5S!(8XqR{L0xHkmEnZ$ z^hT8fNJkkZv-g2&YnyZZER3UR?<6}2L0=PsJ9|g80@h98D{p!KIF6_QRM*S})19ZF zI}wW^??1}R{E6w=yt_KQ-}?;u`Gfury2qcYx35LAs{F3ogz382C^Zx^MIK|A$dVXi z6xi_16rd1Sp5T1gFG29&7#t?rW}q;wvBlgv*H&VZc%3#sWrknsQoq~-DD(lu)lGl{ zC8h%ODJdr+O=vl8@@18yck>!|04SiU!HWrQ_+WUjraXOh8oBsGQr1G{{_W_VnL4@p z;~=ig?+>J`Plf6&L+B@m?y5^B3rm^zXK`bJ?<`qnEga9%@Q{_2!P)2w=eJqq4nW9H zzN4*ZG-Vr{-$DF36`gWyX_Qb3<|i!8zsipZj>U}1pGRbkS}iurIaGB~B^#)$>}!&X zA3_kJy*Uca+J3722CdKnQ5c4&Un=6{U2LRyKRctqkGT4}w4tv@@uDN!?`f~5atbDn z_dg4+A+vE`dnQVT3PY^F{UXG!ZPz%{=BSN~^)Lk@i|ahb>5FKiNe*biV7{kH=>CUK zEEQTxoz-ch(9%zY3lyFhPn~M=c|~{jg|7%}+f4nDb1Ut=wjqh^DdgPL47Jk~CV)4R zheJTKlJFH>hq$v`O83cn`~%Y5@v|yHGJAcHY=lRc_y{?a!_9TeI)QT@0sxPjyZGFh z>K8Xe^3y+=c3x~;Z&y>j;`d7&=29z|-?@yE7^aGzv34A0e7cDUy7H|5hYRvIb+;lf z!=u*Y_UXb&*wdx55{bv!6ZR;ok+om`)Yfk^hEqQdbB(*7-ibyIju^F4lb9WG?2PSF zRFp(FfV>6SW_&o=61sOg2ur%!mTw;_0+En*whwEuHvXDLY2J`TWQ&F2$l#qBKHJEH z?tEb5{(-99#kEgb`25%(7hp$?mzpv{eMQy1TRtR&g>&Dq6+KtH&t^o5L0f3w>&B&@ z5?OhSCsG}8Ss?QjAc#zT;1vOALtG9q-eg?C1-sEYvT)$}Kv$tPJ+q7dMTFEOr1D zUd|BRU`>j!AKdQ|TW}{$@m0i+l@smQjCblZ1<5u&B}Mq_EBxM6x`mVKWsg#nR)G7z zCasTI7$m#GdSJ^30-x3=eDWE|++}yE2i3+mn*dDmIL2W!*d5{Z`>u&d$

|hm$f%ph{%>CX#vwTgS2OCJ>(9ab~dsYKmqkT$YN9oMuT{d)={557oo2 z`K8xhfvRMo{?|w?W9tCK<5rTw1cAeWlgL98Z8@r0dcfrT9&lEvwV_rAZ#4(a{i@rvp!>xlid{#k2&NAE4Gr=&U@5uZpsHe;j*j>^^+JR3^kbirDRWmrEq4zk9cXb|kws z{9c`U>NJfLttTju+8J4bhP0GWGz#n2Q_tM?Ii&!6@;f2FPM_CII=QgptAVGm;nIUG zmzWv`LC3{P*Na0DV!N1{kVjq6bmK@bKG3pN(h?q+Mj&;*)p4Pf~!t7=i>OR zui{YY;Z0~v@ggh`QHROsjO<$k3Kg1#20R%7C(==@N-{t7yROZxBR>BXT8FJ{dl5;O`bUiO8srfb^&g zx@)Wwe%`T)kruSVtDoXX1XFGwIRQC=z~H0AO{%Fl4~9dr3YV4sc(q()ba}UiqQ|*? z*gH4gH<#HiA$aZDn8!u&rNqD`f2i4vU(9x)f?F6(d5-KCzoT_FN3kWLq?zmRzC|$5 znxT948G#(d&uVyy;a`zQ`U4{-qz|u`ah*BYkCeod~U#`FW8n?kZuf> z9@h12LuHe+Rh-o15 zA_kO&9JpVe{p}9@>Ci@T;Rz-R_Z}Mp0Qnaq;h{b_>;32#un5oLSCbr&bbST+!YfIC zUL?&+EL-g};PdSHL$<(kRRn8-!75N@& zn&Qv(y{YfY zyGX--RDw{stYh|PXJRdJy8^hI6NLrd$=knq}JFEjsY8fs0 zFAe?=ZvpJ*a|O0P%Kj*M=ez4Ep*y86`bVkkfAq&c9eu{ZHJ-i#h|Pwu0>RGW8V6`o zRs8?YWq+qvygrIW{4H$%tMmWw&F;+x;{yMx%>tWKTTgk z{I@O(T;&2#FLbJy-ha!n{6}Xs14~uJ!Yo$jn)Hue8XFcsV`~Zi^nu{mmh(Ea=Q=zTxDl1SIKR0yB?4DOFR zxC9#4D7(LWOABU^==NpIk~INZ@;pRZ$?cn`FHn#%o^L8x?_Mn_W={qvJ*QY$rwx=w zqA-GM>F7;!jQB*N{GRYszY3M!y6T#29rG*Iaa?p`*C*51{fq3|H>+aP(d7#Sr!v-g zNuk({@Slp*Ts!>3zHe32lkjYp#OqSmuklr(qC!Eh6ER?& zpL$94KF5w&V#`3FI;iycAH`FrUVZvsy=#_;tZ}p7XJgXR6iVL90}Sg&fMX)!-n7b#S9K3i)U3-%!rq%0qqe}8syxJ4*lur7K13}O+0dzC!uzB19(7;hb@>_Dk% zZ22?fn^vz^_T-{3mug3|K;!(~Sz|!r*^~v{kuCh5YT}XUfEkLt(@xMeW>eXElno*3 zG|%R`QW>MF`<=5BYW0*rQR4nB=8zHb!|88ILCLtdc+3x7wzvJ6n!mVgiyWOnu2eGx zTqL_(U3_WGe3CxXLf}|@$3qbZx$7g{MNoWiXB=`GUSxl~Y#yuy8=7w_u{7C;l)S^? zk8*%cr4n7e$=qv?S5fEUGl@~3c9*LVg#4nT+wNfxF(#hnvZ}oclu^ecZ@6Ky(LI5n!pj=xO(6*O$+nd9%=sIb7f)l^y1+Ob6LD;@s0!w5gu?Z zvov!Wa8uyHXD=z*!llt9wgQH~bM-n^yYSeh0~&_#C|X+!c=u9qaPg`rZ%YX#c2*Lq z0)@y4dBssCcH=%rp+v&_1tYB+oiy|9X=kxiU~SXOpA7)6$m3wft@R$>k_~8}z50n> zyqL(tP34cfV!y_o=eR(KkUDQ7t!mHW^XVqF)=vM&)vUnPqKGY-zs{BZ`@mQZxatW6 z?|8$M^$|vPJ)R6*;SiBDT`4d|Q#V>H ztZy;FzHe(Mlhm!W^Gqp+WX91dcJww~=x(d}@8;NSTJv=fDtGi0gwdkB*1o*L6H#xb z4p^7^VJNn%vF&GI?nRsWGxRzcvH|^TLJ%rp_)<^X{_LB>qmh~qzzMpPD>IUm_+lR< zNJ@k&O<1I7s|oro-=L}bM8}*A!>fQj2oKEs5H(-*4($kZ4rpl*0;eNBjbHwVeS^$6bf@@a5orV+b}BMY2Lj$&6zk4J$KyADPEI_Bsc@ z>n)?Z&wYRY`~7$O>;3Rv*Y%pu*Xw#-=e=cRr>ygzffsbp0+V7?@ikvWTr@!WLE~yW z6I@4Bcfc$ZbYR+)N9oko4cCV@{AW^ww@B-Tg6 zb0u9qe)%D@D(5++C++!BHHv-P?5rI2c#xo1NJhctiyb4~e$xsmzht4k>P5Xe^)eyM zOq<0<-Q$l@Ky1(j4JUz%u?Su*0IL+6|IvS6I_y?`$z ztt55RkR}VbtI}UK?!zb3I7b^?fPlpO+I=i$y@1zib+?|)McfCx9Yzv9%C#%DQj}@mnogxQ?!q0tL#&HkX9dA zk;H&->q2`ePY|n?Qe6v=0mIxHCd-~C+3OV@aB>=bc9acaNdem$aKFFw=d0sl*$TyW z29Q=hmbS+wXmK-yBog0ScO7=&0%m=T>X|grihao-y{#>e%NG1-1L`Fmu5hk3ETF~W z!%Pb6%9;|ZTaU<+{E{r9rpW%}*#RA`3I6h0L;<_7*NRl8cg*TTV?u%J)JK=HYUGAm z_2O?{oDM9A5Eu}1m@NagYe5WF>U2PCI5m{tfLV0M{bI09r<9WF87njVC*wt+byN-$ zF4A(}^k7x^fG@_~zW0#y#z<`7@+furB5N0u0d{UUtgU$LgE7yZZf%8=TS|UYOvd5U z<>5IWNP@ae2?enlMqMz+Ed^{IO!Az=9_XE`FUotTftg2Z)<%-VAe?97k2xRSHkH!X z6zzLmYjHi0`)(P{_CaYQSpnh(D}1e(k2%lI^gczOV;J63G4tM3rKj+BiY?cf+{POFxlB8Wx@FFJ^&AoK68#(I>k*-1;w=Vj{SK;idyLuG_QCv zykmx9o2(n9kO=p$t>r`G#$E<*Rpn!mtG;>DE8)j(@0CD*D@T`z+phV09K#!|S+34^ zTrc~+9l1z54P{|@wfmKpfH}m-W+wBjup6Jh+myXtiI!B!p`gK;pw=g^XpKz<>L7{w z`xWEH!9?{-N=pNO3UK(yJioxXr^r)_kA^Ly71nk$-mUr}B5>YXtb!-@$PEoAr|pT7 zwkpZOTm$-g!bngphud?J2(U}!2-l(GfmP3iJ~-&OoCF~{lHyky6eOTKEu@-QAWKY> z6`vEKR31a~uM`%{PAT}52GHUP9hw5}idz`v2dA>lRWY}gJlc7WZIln`bU=2CAQVuq zMyAO**$cN5x>6Mjpd36zk&2mX9lCfvd|auIX^i%G>Dd znSNs=CueF{2CwEz3K}a-6w}7AkXFfUuj)E=&tctadtb;y%u!z+_fC69vO3L@k4bDj z+++``mf$R(X{fSjC-Hh>ui=fpyUAeY!En^i{mzPU`cE7M`rK>NzjUzNd48D9E~m7# zj_(H&d-a)&w;*TC3tV1jg$Imumc1dTgliu*N9gQG(!hMIR7`BCybAd3dQ$)Vr~0L& zorcO;SM3?{Ou#G7DZW7xt{#{;vd9}{)_-~rY=vGa)^}7-?qn=UJSW&Y z4=aASH()xVrpRV?x453L&9kH-2jdsyGoiq#QK$Ej)BIsBvcPzQRZ)(^ zh&Wv(i;e3JM=@`}8|{?YqE{k^y~mxhkpdCR;Up+e@+ftS^(0kE&1j=u`yVR}v|t=J z7~e(328L2g^)C(ZQfIZ3(^!!!kq{IBXlmLGJZcqZM1lDkszUaXqagu>nr`xEU2TFQ zW_(v+q-pf8G-xrS;Sa&U-I$cn^2d;-7w`xAxn$Y)gS;Si#QY>}Wp-)hXLh$k#uIm5){#!^iOSx?#Q(q6@Y{bn7=lUarrQ0XBn~~Qfu_9(p?A;CPLsZx5jn$m$w#(? z>=A2wkLw9W|0;#jL*S}GB@>g8u=2U|jgq+I@_f4BUl*txKjQC5Qt!uOJ3O_aWGu+R zwkIm?Gd<-VSS_q9CXM?e&tsX{i(T9Rw#vZPx*nUFRAgA*@_uCamXy4PJy@EmDV?06 z&+Q349b2##s`oPryrAgL6$N&BM({XBu3+zT;%jbpU!@*C{m^$7ywmZW&mA@vak~P5 zOZrLwz$N`>^Zmh;j?x{GaJ)d7c)8i){n4jtqF{=7(x@MgS#1Wr#}`%?t~p)=4;MG= zn;76S8*A=(B`($b^Epl${4d_}dHZX^ln5QGkVE;Y)7ll(jWZ{W^; z7a+zrU&%NFgPdGR3pTUYVSs%L1P|Wv1%qJWJQvO3-6XIdJarb_nDT9z&YQD_u!LHs z7`!A46QxezRe*^x9uafpsQ5t@y`#fF4k{ykqH)|}rI%r&`xBaC_ltB3jZjQw`K3Wi1h=ER#?Hop!`B>M`_xlIQJf|G|LZ&}#>CArLdGfY^3Vg?ON zmQg(cBe&x8D@FdoQP5OIL*W+0zzwe}`A^{>j)H^^B5m@F20*|CNU;ACZ_?8ai;k@oWwH(sGpOagmg>afx5b8G&=B(`6)z`T>l z-1qN4R*#uYIv5eCV+UTKuf(=y;X>5#q2HOs-poelI0{TKg1GnIfW)C;x6X^9X-%7BhR_j>4bo8M6r?aJ%%=5$ZT{l zOIDeqI>~kA&7(7F-`L5)(|NDGvG*3&ke+{n4GO1x2Vgb}C;_|AUr7W-A+P)!VYuJe z;61sV+!teGkYmt6#i`)o$83|mn8y#7@KFX6P#hBk^>bAINd~Zp$EWS^6U`4O@)5)g$l#mlqQM_e+rhz=sZCBrSIUMMa1Qp15?%>;m z$C@J)K;0%?>%~9NPG(V}cA}h$b-a%GbHEHL-);f?cwwDdbI%8-fW?}UDX@BfdQSM* zHvaTuzc`Se`Q_h2Zj7JnrjsR7>egvORoM(-Mtcvaao(7ba`;GCymNd(f=VQBPU6vu zjtY3!8m0}00G#<{sQBaTrvYCRBn{&^=Y7vHU;W+YF#nc9L8LGxQpnH^uMuR4q_b>5 zNRPD`*-^)-06Y&F!1-$YrXBDoU>;izJE&fIqSTG~{>)BGVCU3t2f;TWKRWcWbo)jo zGGTld1NhBdy0WY?V^2-sY6u7wiNrkiH9d)?i3h3N1qR^rg&5@8(!n8q=RF`sn54xamx$!+x*j!xWGjJl4lc@QJKSt{xGEW^f#AyQ^vNimGC7~SW zr$<3(rJ}gkg%MfJwS7jn|4_wXWrQ!k3)IJnpx@1*5zjQQLav@#iu)QQY>!!R_sYCx z2q73X@+dE&xmvV1vrck_(BYs>C(}iJUl|o$X<+x3F*^Ik9eCO^P>WR@co|5`mO+o| zbUgh&H2ZK%r}p~~5KdMjS3AyHEqD9@kbkK?S$R+ZKbm3z8s>9YlXAbvnmv#@8y=Pu zq4G@Tr{$L-B9o8AD(E@8$PXJXq(M<%6oG^0|zwyo1b_=RpY8*ab!1W&9@K1vLz~o7g7T z6Nh>+4z`(XkZ*tr!fyDHt}Jwtd(lz;4qS}*9FgV^P7bQ?pxTE=oT&L5ue{}z zNJM^egLyaY!rCne$;+_|im2dYPl;90RP?lv2g_%7LREX1k z(y4YabcO=LNlzJ$crE`>m_i$+3*`Eb149m`KxGHTK111bjF_9{n zZV(6vhXE#f71yW*Jn+;mCQ@;7`t=M@TSq*(LIc@MTIq5o_?6%|2waJ4n}{nDlZ-dv zB>auAj^7LyQSH?de(wxjBZ*J2?NZo~{%Tf95*YnDg7y!vB4oq}6x~?x^MP3xPlc@pw%!k3p zJ&x6X{Y-GF<6C?U`34<;&)vb4PoR@KD7W_7%xe;0Yx4+Je-z8t7+*JLR}exPIJQwP z=W#L+zHYv8v3oN^kBX8(PUK74NUe}8Lk$WQyExU&^r%SnYG31zugM^^@^WO@ zZ1m!~3eIaB7d;-zZpm2C4P{w#ZIg+HAKWh}wIWk21f?%QuAT`?pqA;ZTx%U)D7${2 z1;|G5q}}37=y|8Hduq`q>g6OiolKkT>`3y!;FX}|HP;lMvBPW)=b_e%}^Fsq*UYb!_HSjSgDAr+2ZW^ z^}k{%=GMK~ykTwtH`jgTe)?QCkWAswiK_eam;Y#p?1tP~P7~_BqJTVrAphBgH?>@u z3QWY}@pY4}8&OYTkxP^QeAH8ZrXBqPC0xMO(52IR3z_S`Ud{|gkpBQhg#-!}Z2%C< zI^mH$Q=t!d!8yG*)?S(eZlbOmb@^pRkZ(9Z;F(!_&td4~uflU$u_XU2I2kMgwJXkN zn6+o0L+lj*A>{RTcdYxb1Sot_%^x}hLi&(8vmi@yA8>$-VA<8rxcQOK2bT`;JElPC z5oZN@Wa942j=;ox|EyXrhf6@|OO5gwi}*2L?UQ$fTGYz9xPgv&uba&ORAkP_x)+zU zpG^aXEXzq+C+#hmq!AsE(lik9L~+x}-pdXV9iu#PhcT=I3|FOqrzwCYjM*a{#u2Gse~Hkn2GcjgWT8!)v0#6 zJa$^>RxgJ7n|p(b0zT1q0drUyavRwB@ld87>{_HxD2@Ib2H8!Jn0T2wdXpQ;h;LO(gvCe zQ>IMkzzc>ccgj#Pbh|a=8yWySJ6t)-2A!n$D2V@*c6_~3M6V2-oaJo5cyaG@KH$MP zY|{rqh-|3rDz6&m6o*fw9X*)$o!v4tX@LGXcmX4=lFX6lb;-P+F`s?;ouKr{!gqDK zfw|Whk0S><1$}Rtyn$FRx8HhDZF!AnprPo206z@e^!&`Ij#he07W2DG$VPl*S1U?l zk@nWjA7Xr|u72zsJqQrT)Rk zV#vYq!CTEPAZDKd4t+0z?;U_ZsC(p~#tEp(W2Z=Z5#S?8Bd=G?$UODloQ?J*jg`xu zjo2Il`6%li7!%pqio%4#_CoRF=y8^lK&ICO95F-1f)Cx6&pLWJ`v?&^cys7(17_)X-haM z8vpGk3Ls}o(<5XcHvc{vam_c}d%E2oCRP0Qj!(s4fL+wj4{bj-jO+K}Bui2mhzaKi zp;;Gq@>LM6et#q*J&^XcvHilUTHK7{Vh6lHz%R|(?GfBQ^IpwImJ!6yIH=9_+W^er z0KlXMWh|2q8vapW3>scp1~}>3ZnhhKDccS1wIYX>4`%T!7dGczdK=aMs7-!!7%dk! za!o5%imqiwQ-1Pg5L_Bhw)L_%bN~`a+;5(bAVJAf?dXCLUIDc{D_@s>o5@V|FTHbx`K?gavLK1OPLc0f%t&SKO5iQ zauEsnoDFA=U+p*M)$M`OG^9t_F5n^P$p+AQfbpD!G^lbR;o$G{2VmD327id9Ni^v7 z?pb@^mXsjvBzQNJT}y&s)toFbzV{*g3O>-ZzK`L4TaxjUh;cQN@J6}Wp+P)Tq-ynP z9}Mm%1In3(`$b`Y5}vp^_?0zL-YHqyz^`+qYH(vH`}|z9QjPbzu3T}+yMl23v-mur zR*czFB3f_FASfF%_xW9PWYPO>XszbcV_*y(&mQis#zAu^6(plfH2s#SY^axWE#1&V z{*|`gxPQ*wHTR9{t}W5U&^quzdhQnq4PH%7*f%rZRKq0sd*+kgVaC>9c`c&jh1aXb zZMg~=(gc)W!1q5tY{iQDQqVgXk@K@aT(`5Gwa37ip}26$?|VvkfA{_%xdmT6#ukMo zc%<3a!rm~BsL)t}5iv@s9#Fc@;Xn)B%TD?3O9nJ=`q7%IwcH7W-HWy=3+j zsf7xxNz#%DO>Z{$$2YkyOV0_hKKq_O`s8sWVMze#sOZ^)?(OwFb!Mgd3fBPBMs4!V z7#$@L6>}K%{UQo|O*OL)%x(nN1QTY=uTNLreEjMCQhLmqD}B=%GW|7~p%kI={o>bJ z&|jQ^!LLM`_H|)|%aKd<@vDu?7ZL3_ZaVWA!epD;x>5EXF5u)1`(SfO&%}e`$yC5J z^tZ~p5KTEIgL<64En&0KM7QfP8b^4&IAl$3z$!Mr#=UF1SwHVpOYLdXy}IZT*}38G zViO~>;;~qxcASWfz55=(kv*_U0LWFsF2GUj>OPG7ozrAhqg&)`h?%dvhQkw9XR-1N z6I=oI^wR35f;#g!bIE#jnw#597z&4+j(*NBHVN4-7nQ5O(=2Wj zECEna{t*eu(p^B!Nt(qC7Jd0%P*zP~?=pU+qXYlqrz%<&(Ja%!OvmLdJ)XiCI*-a{ zexMh@j4tN6HR%`4HmW7Kj>E?XjMuu_;01&JNS^GR}~h7T`SfKkg++d$sedKsG8f35mJ6~&!2lyLAN|1 zth;b^wj$p9XLf*i*<0^hJ-JD%E#X0Oy7eM2ncRgHXOeof4AB=U;Z+ zx08+*4mL!cs`cp6$96Z78ObT1-6$!G4HEKxmLz58_;JNc6YOc*0^h+!pLfssa+CyU z86sV1vH9l4^=4WH3m;yOwOH11coF0hiW;Vgv*t4WKcBWS6rPeYX3@OftGsw!!?r

* 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 xU#QAfmS@4ZM- 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

|o!OL+8YVBv3tDew~ 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 ZJwi+#8n&>kCNl6(LseHLQ`!2~{{iW_|Kb1u diff --git a/assets/js/8a8a7d05.c248e7da.js b/assets/js/8a8a7d05.c248e7da.js new file mode 100644 index 000000000000..b5a9c8aa2184 --- /dev/null +++ b/assets/js/8a8a7d05.c248e7da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3262],{3905:(e,a,t)=>{t.d(a,{Zo:()=>h,kt:()=>m});var n=t(67294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},h=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),p=c(t),d=o,m=p["".concat(s,".").concat(d)]||p[d]||u[d]||r;return t?n.createElement(m,i(i({ref:a},h),{},{components:t})):n.createElement(m,i({ref:a},h))}));function m(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=d;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{t.r(a),t.d(a,{assets:()=>h,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=t(87462),o=t(63366),r=(t(67294),t(3905)),i=["components"],l={id:"build-parachains",title:"Parachain Development",sidebar_label:"Parachain Development",description:"A guide on what it means to become a Parachain and the steps to do so.",keywords:["build","parachain","develop","implement","PDK"],slug:"../build-pdk"},s=void 0,c={unversionedId:"build/build-parachains",id:"build/build-parachains",title:"Parachain Development",description:"A guide on what it means to become a Parachain and the steps to do so.",source:"@site/../docs/build/build-parachains.md",sourceDirName:"build",slug:"/build-pdk",permalink:"/docs/build-pdk",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-parachains.md",tags:[],version:"current",lastUpdatedBy:"Radha",lastUpdatedAt:1696518281,formattedLastUpdatedAt:"Oct 5, 2023",frontMatter:{id:"build-parachains",title:"Parachain Development",sidebar_label:"Parachain Development",description:"A guide on what it means to become a Parachain and the steps to do so.",keywords:["build","parachain","develop","implement","PDK"],slug:"../build-pdk"},sidebar:"docs",previous:{title:"Builders Starter's Guide",permalink:"/docs/build-guide"},next:{title:"Decentralized Storage",permalink:"/docs/build-storage"}},h={},p=[{value:"Your Go-To Overview for Developing a Parachain",id:"your-go-to-overview-for-developing-a-parachain",level:3},{value:"Why Create a Parachain?",id:"why-create-a-parachain",level:3},{value:"What are the Benefits of Deploying a Parachain?",id:"what-are-the-benefits-of-deploying-a-parachain",level:3},{value:"Shared Security (Pooled Security)",id:"shared-security-pooled-security",level:4},{value:"On-Chain Governance (Thought-through Governance)",id:"on-chain-governance-thought-through-governance",level:4},{value:"Scalability",id:"scalability",level:4},{value:"Interoperability",id:"interoperability",level:4},{value:"Things to Consider",id:"things-to-consider",level:2},{value:"Para-nomics",id:"para-nomics",level:3},{value:"Digital Nation States",id:"digital-nation-states",level:4},{value:"Connecting Digital Economies",id:"connecting-digital-economies",level:4},{value:"Para-objects",id:"para-objects",level:3},{value:"Migration",id:"migration",level:3},{value:"Implement a Parachain",id:"implement-a-parachain",level:2},{value:"Parachain Development Kit",id:"parachain-development-kit",level:3},{value:"Key Components",id:"key-components",level:4},{value:"What PDKs Exist?",id:"what-pdks-exist",level:4},{value:"Cumulus",id:"cumulus",level:4},{value:"How to set up your parachain",id:"how-to-set-up-your-parachain",level:3},{value:"Future PDKs",id:"future-pdks",level:3},{value:"Testing a Parachain",id:"testing-a-parachain",level:2},{value:"Rococo Testnet",id:"rococo-testnet",level:3},{value:"What Parachains are on Rococo Now?",id:"what-parachains-are-on-rococo-now",level:3},{value:"Obtaining ROC",id:"obtaining-roc",level:3},{value:"Build and Register a Rococo Parathread",id:"build-and-register-a-rococo-parathread",level:3},{value:"How to Connect to a Parachain",id:"how-to-connect-to-a-parachain",level:3},{value:"Parachain Playground",id:"parachain-playground",level:3},{value:"Deploy",id:"deploy",level:2},{value:"Parachain",id:"parachain",level:3},{value:"Parathread",id:"parathread",level:3},{value:"Resources",id:"resources",level:2}],u={toc:p},d="wrapper";function m(e){var a=e.components,l=(0,o.Z)(e,i);return(0,r.kt)(d,(0,n.Z)({},u,l,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h3",{id:"your-go-to-overview-for-developing-a-parachain"},"Your Go-To Overview for Developing a Parachain"),(0,r.kt)("p",null,"This guide will cover the motivation to build a parachain or parathread, the tools available to\nfacilitate this, the steps to test, and finally, how to launch your network on\nPolkadot ."),(0,r.kt)("h3",{id:"why-create-a-parachain"},"Why Create a Parachain?"),(0,r.kt)("p",null,"Parachains are connected to and secured by the Relay Chain. They benefit from the ",(0,r.kt)("em",{parentName:"p"},"pooled security"),",\n",(0,r.kt)("em",{parentName:"p"},"thought-through governance"),", and overall ",(0,r.kt)("em",{parentName:"p"},"scalability")," of the heterogeneous sharding approach of\nthe network. Creating a parachain can be seen as creating a ",(0,r.kt)("strong",{parentName:"p"},"Layer-1 blockchain"),", which has its\nown logic and runs in parallel within the\nPolkadot ecosystem."),(0,r.kt)("p",null,"Developers can focus on creating state-of-the-art chains that take advantage of\nPolkadot's next-generation approach. Some\nexamples of what a parachain could be are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"DeFi (Decentralized Finance) Applications"),(0,r.kt)("li",{parentName:"ul"},"Digital Wallets"),(0,r.kt)("li",{parentName:"ul"},"IoT (Internet of Things) Applications"),(0,r.kt)("li",{parentName:"ul"},"Gaming"),(0,r.kt)("li",{parentName:"ul"},"Web 3.0 Infrastructure")),(0,r.kt)("p",null,"and more."),(0,r.kt)("p",null,"Polkadot aims to be a bet against blockchain\nmaximalism, where the success of Polkadot's\nheterogeneous multi-chain approach will play a key part in the overall advancement of Web 3.0 and\ndecentralized systems. As a result, Polkadot's\nparachain model was designed with the belief that the internet of the future will have many\ndifferent types of blockchains working together."),(0,r.kt)("h3",{id:"what-are-the-benefits-of-deploying-a-parachain"},"What are the Benefits of Deploying a Parachain?"),(0,r.kt)("p",null,"The parachain model attempts to alleviate five key ",(0,r.kt)("em",{parentName:"p"},"build")," failures of present technology stacks, as\ndescribed in the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/PolkaDotPaper.pdf"},"Polkadot Whitepaper"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Scalability"),": How much is spent on resources and will the network be subject to bottlenecks?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Isolatability"),": Are the needs of many accounted for under the same framework?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Developability"),": Is the system tooling, system support, and overall system integrity\ndependable?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Governance"),": Can the network remain flexible to evolve and adapt over time? Can decisions be\nmade with sufficient inclusivity, legitimacy, and transparency to provide effective leadership of\na decentralised system?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Applicability"),": Does the technology address a burning need on its own? Is other \u201cmiddleware\u201d\nrequired to bridge the gap to actual applications?")),(0,r.kt)("h4",{id:"shared-security-pooled-security"},(0,r.kt)("a",{parentName:"h4",href:"/docs/learn-parachains"},"Shared Security")," (Pooled Security)"),(0,r.kt)("p",null,"Parachains can lease the security of the\nPolkadot network by bonding\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"DOT")," for a parachain\nslot. This means that the social costs of building a community around your project and convincing\nvalidators to participate in your network security are reduced.\nPolkadot has strong security, and\ndecentralised application projects wishing to benefit from this security would want to become a\nparachain to share in that pooled security."),(0,r.kt)("h4",{id:"on-chain-governance-thought-through-governance"},(0,r.kt)("a",{parentName:"h4",href:"/docs/learn-governance"},"On-Chain Governance")," (Thought-through Governance)"),(0,r.kt)("p",null,"Most governance systems in blockchains use an off-chain governance mechanism.\nPolkadot's on-chain governance encourages\nmaximum participation of token holders and is frictionless and transparent. It also enables\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-runtime-upgrades"},"forkless upgrades"),"."),(0,r.kt)("h4",{id:"scalability"},"Scalability"),(0,r.kt)("p",null,"The sharded multichain network approach allows for what is essentially parallel computation\n(processing power) that can process several transactions in parallel. Isolated blockchains are often\nfaced with the network constraint of processing transactions in sequence, causing bottlenecks."),(0,r.kt)("h4",{id:"interoperability"},"Interoperability"),(0,r.kt)("p",null,"Any decentralised application or chain that wants to enable trustless messaging to other parachains\nalready connected to Polkadot would want to\nbecome a parachain. Interoperability between sovereign chains involves certain constraints and\ncomplex protocols to enable across a wide breadth of chains."),(0,r.kt)("p",null,"With Polkadot, you will get this feature out\nof the box if you build your application as a parachain. The ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM format"),"\nallows any parachains to communicate by passing messages between them. Furthermore, as bridges to\nother chains are connected (such as those to Bitcoin or Ethereum)\nPolkadot's parachains will be able to\ncommunicate with these as well."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Despite the benefits of becoming a parachain, developers should be conscious of the challenges in\nbecoming a parachain, and whether building a blockchain with an end goal of becoming a parachain is\na viable one for their project.")),(0,r.kt)("p",null,"On Polkadot, you are able to put your\nblockchain\u2019s latest block head onto the relay chain. As a parachain, the blocks you submit are\nverified by validators with a Wasm runtime, which can be stored on the relay chain. You also get the\nability to communicate with other parachains using the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM")," format: an\nabstract message passing system. Message passing is tracked on the relay chain - as such, you can\nprove the delivery of messages and facilitate trustless interactions."),(0,r.kt)("p",null,"As you can place your blockchain\u2019s latest block head, you can achieve deterministic finalization for\nyour chain. The hard part of reaching finalization for blockchains tends to be the consensus, where,\nin the parachain model, a blockchain can offload consensus to the overall shared network, and focus\non block production. Since the validators have the Wasm runtime for all the parachains, your\nparachain shares the security of the validator pool with everyone on the relay chain."),(0,r.kt)("p",null,"Any validator in the validator pool can help validate your blockchain."),(0,r.kt)("h2",{id:"things-to-consider"},"Things to Consider"),(0,r.kt)("h3",{id:"para-nomics"},(0,r.kt)("a",{parentName:"h3",href:"/docs/learn-parachains#parachain-economies"},"Para-nomics")),(0,r.kt)("h4",{id:"digital-nation-states"},"Digital Nation States"),(0,r.kt)("p",null,"Parachains can be seen as autonomous agents; networks that act as decentralised digital nation\nstates. Parachains have their own communities, rules, economies, governance, treasuries, and\nrelationships with external chains. As a result, the economic policies within parachain ecosystems\nare subject to the developers and overall community of that parachain ecosystem; there isn't\nnecessarily a go-to economic model a parachain should follow."),(0,r.kt)("p",null,"Moreover, ",(0,r.kt)("em",{parentName:"p"},"becoming a parachain")," has an opportunity cost associated. Ideally, you can increase the\nvalue of the network by participating in the parachain selection process, and this should serve as a\ngood return on investment."),(0,r.kt)("h4",{id:"connecting-digital-economies"},"Connecting Digital Economies"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"Collators")," act as network maintainers and maintain a full node of a\nparachain. They can be incentivized with a native token payout from:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Transaction fees collected"),(0,r.kt)("li",{parentName:"ul"},"Parathread token sponsorship"),(0,r.kt)("li",{parentName:"ul"},"Blocks are naturally produced when a parathread bid is less than the native token payout.")),(0,r.kt)("h3",{id:"para-objects"},"Para-objects"),(0,r.kt)("admonition",{title:"The Relay Chain can host arbitrary state machines, not just blockchains.",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot network will encourage the\nconnection and interoperability between different ",(0,r.kt)("em",{parentName:"p"},"para-objects"),"."),(0,r.kt)("p",{parentName:"admonition"},"Here, para-objects are referring to objects on the network that operate in parallel, generally,\nparallelizable objects.")),(0,r.kt)("p",null,"These could be in the form of:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"System level chains (permanent chains): ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-auction"},"leased slots"),",\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-parathreads"},"parathread pool")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/docs/learn-bridges"},"Bridge")," Hubs"),(0,r.kt)("li",{parentName:"ul"},"Nested Relay Chains")),(0,r.kt)("h3",{id:"migration"},"Migration"),(0,r.kt)("p",null,'Projects that are already functioning as "solochains" or in isolated environments may be interested\nin migrating onto Polkadot as a para-object.\nWhile the parachain model has its benefits, it may not be the go-to strategy for some projects.'),(0,r.kt)("p",null,"As a path for migration onto Polkadot, it may\nbe more viable to migrate to one of the chains in one of the reserved slots."),(0,r.kt)("p",null,"For instance, there are currently options for ",(0,r.kt)("a",{parentName:"p",href:"/docs/build-smart-contracts"},"smart contract deployment"),"\non Kusama through the networks that have secured a slot in the latest slot auctions."),(0,r.kt)("h2",{id:"implement-a-parachain"},"Implement a Parachain"),(0,r.kt)("p",null,"The Parachain Implementer's Guide is a significant work in progress and maintained by Parity Tech.\n",(0,r.kt)("a",{parentName:"p",href:"https://w3f.github.io/parachain-implementers-guide/"},(0,r.kt)("strong",{parentName:"a"},"The live version"))," is built from the source\nlocated in the official\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/tree/master/roadmap/implementers-guide"},"Polkadot repository"),"."),(0,r.kt)("h3",{id:"parachain-development-kit"},"Parachain Development Kit"),(0,r.kt)("p",null,"The Parachain Development Kit or ",(0,r.kt)("strong",{parentName:"p"},"PDK")," is a set of tools that allows developers to easily create a\nparachain. In practice, the PDK will consist of the following key components:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"State transition function")," : a way for your application to move from one state to another state."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Collator node")," network with certain responsibilities regarding parachains.")),(0,r.kt)("h4",{id:"key-components"},"Key Components"),(0,r.kt)("p",null,"The state transition function (STF) can be an abstract way for an application to go from one state\nto another state. The only constraint that Polkadot\nplaces on this STF is that it must be easily verifiable -- usually\nthrough what we call a ",(0,r.kt)("em",{parentName:"p"},"witness")," or ",(0,r.kt)("em",{parentName:"p"},"proof"),". It must be so because the Relay Chain validators will\nneed to check that each state it receives from the collator node is correct without actually running\nthrough the entire computation. Some examples of these proofs include the Proof-of-Validity blocks\nor zk-SNARKs, which require less computational resources to verify than they do to generate. The\nverification asymmetry in the proof generation of the STF is one of the integral insights that\nallows Polkadot to scale while keeping\nhigh-security guarantees."),(0,r.kt)("p",null,"A collator node is one of the types of network maintainers in the protocol. They are responsible for\n",(0,r.kt)("strong",{parentName:"p"},"keeping availability")," of the state of the parachain and the new states returned from the\niteration of the state transition function. They must remain online to keep track of the state and\nalso of the XCMP messages that it will route between itself and other parachains. Collator nodes are\nresponsible for passing the succinct proofs to the relay chain's validators and tracking the latest\nblocks from the relay chain. In essence, a collator node also acts as a light client for the relay\nchain. For more on collator nodes, see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collator page"),"."),(0,r.kt)("h4",{id:"what-pdks-exist"},"What PDKs Exist?"),(0,r.kt)("p",null,"Currently, the only PDK is ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate"},"Parity Substrate")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus"},"Cumulus"),". ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"https://substrate.io/"},"Substrate"))," is a\nblockchain framework that provides the basic building blocks of a blockchain (things like the\nnetworking layer, consensus, a Wasm interpreter) while providing an intuitive way to construct your\nruntime. Substrate is made to ease the process of creating a new chain, but it does not provide\nsupport for Polkadot compatibility directly.\nFor this reason, ",(0,r.kt)("inlineCode",{parentName:"p"},"Cumulus"),", an added ",(0,r.kt)("em",{parentName:"p"},"library")," contains all of the\nPolkadot compatibility glue code."),(0,r.kt)("admonition",{title:"Get started with Substrate",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The best way to get started with Substrate is to explore the\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/"},"Substrate Documentation")," maintained by\n",(0,r.kt)("a",{parentName:"p",href:"https://parity.io"},"Parity Technologies"),".")),(0,r.kt)("h4",{id:"cumulus"},"Cumulus"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Cumulus clouds are shaped sort of like dots. Together, they form an intricate system that is\nbeautiful and functional.")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus"},"Cumulus")," is an extension to Substrate that makes it easy to\nmake any Substrate-built runtime into a\nPolkadot-compatible parachain."),(0,r.kt)("p",null,"Cumulus Consensus is a consensus engine for Substrate that follows a\nPolkadot Relay Chain (i.e., parachains). This\nruns a Polkadot node internally, and dictates\nto the client and synchronization algorithms which chain to follow, finalize, and treat as correct."),(0,r.kt)("p",null,"See the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus/blob/master/docs/overview.md"},"Cumulus overview")," for a\nmore detailed description of Cumulus."),(0,r.kt)("p",null,"Cumulus is still in development, but the idea is that it should be simple to take a Substrate chain\nand add the parachain code by importing the crates and adding a single line of code. Keep up-to-date\nwith the latest Cumulus developments from the ",(0,r.kt)("a",{parentName:"p",href:"###cumulus"},"Cumulus section"),"."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Substrate and Cumulus provide a PDK from the abstraction of the blockchain format, but it is ",(0,r.kt)("strong",{parentName:"p"},"not\nnecessary")," that a parachain even needs to be a blockchain. For example, a parachain just needs to\nsatisfy the two constraints listed above: ",(0,r.kt)("em",{parentName:"p"},"state transition function")," and ",(0,r.kt)("em",{parentName:"p"},"collator node"),"."),(0,r.kt)("p",{parentName:"admonition"},"Everything else is up to the implementer of the PDK.")),(0,r.kt)("p",null,"Cumulus handles the network compatibility overhead that any parachain would need to implement to be\nconnected to Polkadot. This includes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Cross-chain message passing (XCMP)"),(0,r.kt)("li",{parentName:"ul"},"Out-of-the-box Collator node setup"),(0,r.kt)("li",{parentName:"ul"},"An embedded full client of the Relay Chain"),(0,r.kt)("li",{parentName:"ul"},"Block authorship compatibility")),(0,r.kt)("p",null,"Are you interested in building a PDK? See the ",(0,r.kt)("a",{parentName:"p",href:"#future-pdks"},"future PDKs")," section for details."),(0,r.kt)("h3",{id:"how-to-set-up-your-parachain"},"How to set up your parachain"),(0,r.kt)("p",null,"After creating your chain runtime logic with Substrate, you will be able to compile it down to a\nWasm executable. This Wasm code blob will contain the entire state transition function of your\nchain, and is what you will need to deploy your project to\nPolkadot as either a parachain or parathread."),(0,r.kt)("p",null,"Validators on Polkadot will use the submitted\nWasm code to validate the state transitions of your chain or thread, but doing this requires some\nadditional infrastructure. A validator needs some way to stay up to date with the most recent state\ntransitions, since Polkadot nodes will not be\nrequired to also be nodes of your chain."),(0,r.kt)("p",null,"This is where the collator node comes into play. A collator is a maintainer of your parachain and\nperforms the critical action of producing new block candidates for your chain and passing them to\nPolkadot validators for inclusion in the\nPolkadot Relay Chain."),(0,r.kt)("p",null,"Substrate comes with its own networking layer built-in but unfortunately only supports solo chains\n(that is, chains that do not connect to the relay chain). However, there is the Cumulus extension\nthat includes a collator node and allows for your Substrate-built logic to be compatible with\nPolkadot as either a parachain or parathread."),(0,r.kt)("h3",{id:"future-pdks"},"Future PDKs"),(0,r.kt)("admonition",{title:"Call to action",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Do you want to build a Parachain Development Kit from scratch? The Web3 Foundation is giving grants\nto teams who are doing this, learn more and apply on the\n",(0,r.kt)("a",{parentName:"p",href:"https://grants.web3.foundation"},"W3F grants page"),".")),(0,r.kt)("p",null,"One example of a PDK W3F is interested in supporting is a\n",(0,r.kt)("a",{parentName:"p",href:"https://ethresear.ch/t/roll-up-roll-back-snark-side-chain-17000-tps/3675"},"roll-up")," kit that allowed\ndevelopers to create SNARK-based parachains. If we review the roll-up write-up, we see that the\nsystem uses two roles: users that update ",(0,r.kt)("strong",{parentName:"p"},"state")," and an operator that ",(0,r.kt)("strong",{parentName:"p"},"aggregates the state\nupdates")," into a single on-chain update. It should be straightforward to see how we can translate\nthis to the parachain terms. The state transition function for a roll-up-like parachain would be\nupdating the state (in practice, most likely a Merkle tree, which would be easily verifiable) from\nthe user inputs. The operator would act as the collator node, which would aggregate the state and\ncreate the zk-SNARK proof that it would hand to a Relay Chain's validators for verification."),(0,r.kt)("p",null,"If you or your team are interested in developing a PDK feel free to apply for a grant on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/Grants-Program"},"W3F Grants Program repository"),". There may be grants\navailable for this type of work."),(0,r.kt)("h2",{id:"testing-a-parachain"},"Testing a Parachain"),(0,r.kt)("h3",{id:"rococo-testnet"},"Rococo Testnet"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus#rococo-crown"},"Rococo")," is a testnet built for testing\nparachains. Rococo utilizes Cumulus and ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm#xcmp-lite-hrmp"},"HRMP")," (Horizontal\nRelay-routed Message Passing) in order to send transfers and messages between parachains and a Relay\nChain. Every message is sent to the Relay Chain, then from the Relay Chain to the desired parachain."),(0,r.kt)("p",null,"Rococo runs a few test system parachains:\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-asset-hub-rpc.polkadot.io#/explorer"},"Rockmine"),",\nand\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-contracts-rpc.polkadot.io#/explorer"},"Contracts"),".\nIt also runs several externally developed parachains."),(0,r.kt)("h3",{id:"what-parachains-are-on-rococo-now"},"What Parachains are on Rococo Now?"),(0,r.kt)("p",null,"You can see the list of included parachains\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-rpc.polkadot.io#/parachains"},"here"),". A list of\nproposed parachains is available\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-rpc.polkadot.io#/parachains/proposals"},"here"),"."),(0,r.kt)("h3",{id:"obtaining-roc"},"Obtaining ROC"),(0,r.kt)("p",null,"Follow the instructions ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-DOT#getting-tokens-on-the-rococo-testnet"},"here")," to get\nROCs tokens."),(0,r.kt)("h3",{id:"build-and-register-a-rococo-parathread"},"Build and Register a Rococo Parathread"),(0,r.kt)("p",null,"The parachains of Rococo all use the same runtime code. The only difference between them is the\nparachain ID used for registration with the Relay Chain."),(0,r.kt)("p",null,"You will need to run a Rococo collator. To do so, you need to compile the following binary:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo build --release --locked -p polkadot-collator\n")),(0,r.kt)("p",null,"Once the executable is built, launch collators for your parachain:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./target/release/polkadot-collator --chain $CHAIN --validator\n")),(0,r.kt)("p",null,"If you are interested in running and launching your own parathread or parachain, Parity Technologies\nhas created\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/parachains/connect-to-a-relay-chain/"},"parachain tutorials"),"\nto show you how. Got stuck or need support along the way? Join\n",(0,r.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/"},"Substrate Stack Exchange"),") to interact with other builders\nthere."),(0,r.kt)("h3",{id:"how-to-connect-to-a-parachain"},"How to Connect to a Parachain"),(0,r.kt)("p",null,"If you would like to connect to a parachain via ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/"},"Polkadot-JS Apps"),",\nyou may do so by clicking on the network selection at the top left-hand corner of the navigation and\nselecting any parachain of choice."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"rococo parachains",src:t(14696).Z,width:"544",height:"538"})),(0,r.kt)("p",null,'For the purpose of these following examples, we will be using the Rococo testnet "Custom Node"\nunderneath "Development", following the\n',(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/parachains/connect-to-a-relay-chain/"},"parachain tutorials"),"."),(0,r.kt)("h3",{id:"parachain-playground"},"Parachain Playground"),(0,r.kt)("p",null,"You can also take advantage of the account functions offered on Polkadot-JS Apps to test the entire\nParachain onboarding process (e.g. crowdloans, auctions, registrations)."),(0,r.kt)("p",null,"Start a local node on ",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-networks###westend-test-network"},"Westend")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"polkadot --chain=westend-dev --alice\n")),(0,r.kt)("p",null,"Then, connect your local node with Polkadot-JS Apps."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"parachains playground",src:t(8295).Z,width:"2528",height:"668"})),(0,r.kt)("h2",{id:"deploy"},"Deploy"),(0,r.kt)("p",null,"Substrate-based chains, including the Polkadot and Kusama Relay Chains, use an\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)"},"SS58 encoding")," for\ntheir address formats.\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json"},"This page")," serves as the\ncanonical registry for teams to see which chain corresponds to a given prefix, and which prefixes\nare available."),(0,r.kt)("h3",{id:"parachain"},"Parachain"),(0,r.kt)("p",null,"To include your parachain into the Polkadot\nnetwork, you will need to acquire a parachain slot."),(0,r.kt)("p",null,"Parachain slots will be sold in open auctions, the mechanics of which can be found on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-auction"},"parachain auction"),"\n"," page of the wiki."),(0,r.kt)("h3",{id:"parathread"},"Parathread"),(0,r.kt)("p",null,"Parathreads will not require a parachain slot, so you will not need to engage in the candle auction\nmechanism. Instead, you will be able to register your parathread code to a Relay Chain for a fee and\nfrom then be able to start participating in the per-block auctions for inclusion of your state\ntransition into a Relay Chain."),(0,r.kt)("p",null,"For more information on how parathread per-block auctions work, see the more detailed\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parathreads"},"parathread"),"\n"," page."),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/how-to-guides/parachains/"},"Parachain tutorials")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/common-good-parachains-an-introduction-to-governance-allocated-parachain-slots/"},"System (Common Good) Parachains")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/the-launch-of-parachains/"},"The Launch of Parachains")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/parathreads-pay-as-you-go-parachains-7440d23dde06"},"Parathreads: Pay-as-you-go Parachains")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/polkadot-bridges-connecting-the-polkadot-ecosystem-with-external-networks-1118916392e3"},"Polkadot Bridges")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/the-path-of-a-parachain-block/"},"The Path of a Parachain Block")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.crowdcast.io/e/polkadot-path-of-a-parachain-block?utm_source=profile&utm_medium=profile_web&utm_campaign=profile"},"The Path of a Parachain Block (Video)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/polkadot-parachain-slots/"},"Polkadot Parachain Slots")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=fYc1yolanoE"},"How to become a parachain on Polkadot (Video)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/trusted-execution-environments-and-the-polkadot-ecosystem/"},"Trusted Execution Environments and the Polkadot Ecosystem"))))}m.isMDXComponent=!0},8295:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/parachain-playground-7873519d5357d27cd254133f7c6ae79f.png"},14696:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/polkadotjs_network_parachains-76ab1faa61e1f8677724db7cbf2c16a5.png"}}]); \ No newline at end of file diff --git a/assets/js/8a8a7d05.d7f83aec.js b/assets/js/8a8a7d05.d7f83aec.js deleted file mode 100644 index b6c963ce03f3..000000000000 --- a/assets/js/8a8a7d05.d7f83aec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3262],{3905:(e,a,t)=>{t.d(a,{Zo:()=>h,kt:()=>m});var n=t(67294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},h=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),p=c(t),d=o,m=p["".concat(s,".").concat(d)]||p[d]||u[d]||r;return t?n.createElement(m,i(i({ref:a},h),{},{components:t})):n.createElement(m,i({ref:a},h))}));function m(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=d;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{t.r(a),t.d(a,{assets:()=>h,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=t(87462),o=t(63366),r=(t(67294),t(3905)),i=["components"],l={id:"build-parachains",title:"Parachain Development",sidebar_label:"Parachain Development",description:"A guide on what it means to become a Parachain and the steps to do so.",keywords:["build","parachain","develop","implement","PDK"],slug:"../build-pdk"},s=void 0,c={unversionedId:"build/build-parachains",id:"build/build-parachains",title:"Parachain Development",description:"A guide on what it means to become a Parachain and the steps to do so.",source:"@site/../docs/build/build-parachains.md",sourceDirName:"build",slug:"/build-pdk",permalink:"/docs/build-pdk",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-parachains.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1688131185,formattedLastUpdatedAt:"Jun 30, 2023",frontMatter:{id:"build-parachains",title:"Parachain Development",sidebar_label:"Parachain Development",description:"A guide on what it means to become a Parachain and the steps to do so.",keywords:["build","parachain","develop","implement","PDK"],slug:"../build-pdk"},sidebar:"docs",previous:{title:"Builders Starter's Guide",permalink:"/docs/build-guide"},next:{title:"Decentralized Storage",permalink:"/docs/build-storage"}},h={},p=[{value:"Your Go-To Overview for Developing a Parachain",id:"your-go-to-overview-for-developing-a-parachain",level:3},{value:"Why Create a Parachain?",id:"why-create-a-parachain",level:3},{value:"What are the Benefits of Deploying a Parachain?",id:"what-are-the-benefits-of-deploying-a-parachain",level:3},{value:"Shared Security (Pooled Security)",id:"shared-security-pooled-security",level:4},{value:"On-Chain Governance (Thought-through Governance)",id:"on-chain-governance-thought-through-governance",level:4},{value:"Scalability",id:"scalability",level:4},{value:"Interoperability",id:"interoperability",level:4},{value:"Things to Consider",id:"things-to-consider",level:2},{value:"Para-nomics",id:"para-nomics",level:3},{value:"Digital Nation States",id:"digital-nation-states",level:4},{value:"Connecting Digital Economies",id:"connecting-digital-economies",level:4},{value:"Para-objects",id:"para-objects",level:3},{value:"Migration",id:"migration",level:3},{value:"Implement a Parachain",id:"implement-a-parachain",level:2},{value:"Parachain Development Kit",id:"parachain-development-kit",level:3},{value:"Key Components",id:"key-components",level:4},{value:"What PDKs Exist?",id:"what-pdks-exist",level:4},{value:"Cumulus",id:"cumulus",level:4},{value:"How to set up your parachain",id:"how-to-set-up-your-parachain",level:3},{value:"Future PDKs",id:"future-pdks",level:3},{value:"Testing a Parachain",id:"testing-a-parachain",level:2},{value:"Rococo Testnet",id:"rococo-testnet",level:3},{value:"What Parachains are on Rococo Now?",id:"what-parachains-are-on-rococo-now",level:3},{value:"Obtaining ROC",id:"obtaining-roc",level:3},{value:"Build and Register a Rococo Parathread",id:"build-and-register-a-rococo-parathread",level:3},{value:"How to Connect to a Parachain",id:"how-to-connect-to-a-parachain",level:3},{value:"Parachain Playground",id:"parachain-playground",level:3},{value:"Deploy",id:"deploy",level:2},{value:"Parachain",id:"parachain",level:3},{value:"Parathread",id:"parathread",level:3},{value:"Resources",id:"resources",level:2}],u={toc:p},d="wrapper";function m(e){var a=e.components,l=(0,o.Z)(e,i);return(0,r.kt)(d,(0,n.Z)({},u,l,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h3",{id:"your-go-to-overview-for-developing-a-parachain"},"Your Go-To Overview for Developing a Parachain"),(0,r.kt)("p",null,"This guide will cover the motivation to build a parachain or parathread, the tools available to\nfacilitate this, the steps to test, and finally, how to launch your network on\nPolkadot ."),(0,r.kt)("h3",{id:"why-create-a-parachain"},"Why Create a Parachain?"),(0,r.kt)("p",null,"Parachains are connected to and secured by the Relay Chain. They benefit from the ",(0,r.kt)("em",{parentName:"p"},"pooled security"),",\n",(0,r.kt)("em",{parentName:"p"},"thought-through governance"),", and overall ",(0,r.kt)("em",{parentName:"p"},"scalability")," of the heterogeneous sharding approach of\nthe network. Creating a parachain can be seen as creating a ",(0,r.kt)("strong",{parentName:"p"},"Layer-1 blockchain"),", which has its\nown logic and runs in parallel within the\nPolkadot ecosystem."),(0,r.kt)("p",null,"Developers can focus on creating state-of-the-art chains that take advantage of\nPolkadot's next-generation approach. Some\nexamples of what a parachain could be are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"DeFi (Decentralized Finance) Applications"),(0,r.kt)("li",{parentName:"ul"},"Digital Wallets"),(0,r.kt)("li",{parentName:"ul"},"IoT (Internet of Things) Applications"),(0,r.kt)("li",{parentName:"ul"},"Gaming"),(0,r.kt)("li",{parentName:"ul"},"Web 3.0 Infrastructure")),(0,r.kt)("p",null,"and more."),(0,r.kt)("p",null,"Polkadot aims to be a bet against blockchain\nmaximalism, where the success of Polkadot's\nheterogeneous multi-chain approach will play a key part in the overall advancement of Web 3.0 and\ndecentralized systems. As a result, Polkadot's\nparachain model was designed with the belief that the internet of the future will have many\ndifferent types of blockchains working together."),(0,r.kt)("h3",{id:"what-are-the-benefits-of-deploying-a-parachain"},"What are the Benefits of Deploying a Parachain?"),(0,r.kt)("p",null,"The parachain model attempts to alleviate five key ",(0,r.kt)("em",{parentName:"p"},"build")," failures of present technology stacks, as\ndescribed in the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/PolkaDotPaper.pdf"},"Polkadot Whitepaper"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Scalability"),": How much is spent on resources and will the network be subject to bottlenecks?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Isolatability"),": Are the needs of many accounted for under the same framework?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Developability"),": Is the system tooling, system support, and overall system integrity\ndependable?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Governance"),": Can the network remain flexible to evolve and adapt over time? Can decisions be\nmade with sufficient inclusivity, legitimacy, and transparency to provide effective leadership of\na decentralised system?"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Applicability"),": Does the technology address a burning need on its own? Is other \u201cmiddleware\u201d\nrequired to bridge the gap to actual applications?")),(0,r.kt)("h4",{id:"shared-security-pooled-security"},(0,r.kt)("a",{parentName:"h4",href:"/docs/learn-parachains"},"Shared Security")," (Pooled Security)"),(0,r.kt)("p",null,"Parachains can lease the security of the\nPolkadot network by bonding\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"DOT")," for a parachain\nslot. This means that the social costs of building a community around your project and convincing\nvalidators to participate in your network security are reduced.\nPolkadot has strong security, and\ndecentralised application projects wishing to benefit from this security would want to become a\nparachain to share in that pooled security."),(0,r.kt)("h4",{id:"on-chain-governance-thought-through-governance"},(0,r.kt)("a",{parentName:"h4",href:"/docs/learn-governance"},"On-Chain Governance")," (Thought-through Governance)"),(0,r.kt)("p",null,"Most governance systems in blockchains use an off-chain governance mechanism.\nPolkadot's on-chain governance encourages\nmaximum participation of token holders and is frictionless and transparent. It also enables\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-runtime-upgrades"},"forkless upgrades"),"."),(0,r.kt)("h4",{id:"scalability"},"Scalability"),(0,r.kt)("p",null,"The sharded multichain network approach allows for what is essentially parallel computation\n(processing power) that can process several transactions in parallel. Isolated blockchains are often\nfaced with the network constraint of processing transactions in sequence, causing bottlenecks."),(0,r.kt)("h4",{id:"interoperability"},"Interoperability"),(0,r.kt)("p",null,"Any decentralised application or chain that wants to enable trustless messaging to other parachains\nalready connected to Polkadot would want to\nbecome a parachain. Interoperability between sovereign chains involves certain constraints and\ncomplex protocols to enable across a wide breadth of chains."),(0,r.kt)("p",null,"With Polkadot, you will get this feature out\nof the box if you build your application as a parachain. The ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM format"),"\nallows any parachains to communicate by passing messages between them. Furthermore, as bridges to\nother chains are connected (such as those to Bitcoin or Ethereum)\nPolkadot's parachains will be able to\ncommunicate with these as well."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Despite the benefits of becoming a parachain, developers should be conscious of the challenges in\nbecoming a parachain, and whether building a blockchain with an end goal of becoming a parachain is\na viable one for their project.")),(0,r.kt)("p",null,"On Polkadot, you are able to put your\nblockchain\u2019s latest block head onto the relay chain. As a parachain, the blocks you submit are\nverified by validators with a Wasm runtime, which can be stored on the relay chain. You also get the\nability to communicate with other parachains using the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM")," format: an\nabstract message passing system. Message passing is tracked on the relay chain - as such, you can\nprove the delivery of messages and facilitate trustless interactions."),(0,r.kt)("p",null,"As you can place your blockchain\u2019s latest block head, you can achieve deterministic finalization for\nyour chain. The hard part of reaching finalization for blockchains tends to be the consensus, where,\nin the parachain model, a blockchain can offload consensus to the overall shared network, and focus\non block production. Since the validators have the Wasm runtime for all the parachains, your\nparachain shares the security of the validator pool with everyone on the relay chain."),(0,r.kt)("p",null,"Any validator in the validator pool can help validate your blockchain."),(0,r.kt)("h2",{id:"things-to-consider"},"Things to Consider"),(0,r.kt)("h3",{id:"para-nomics"},(0,r.kt)("a",{parentName:"h3",href:"/docs/learn-parachains#parachain-economies"},"Para-nomics")),(0,r.kt)("h4",{id:"digital-nation-states"},"Digital Nation States"),(0,r.kt)("p",null,"Parachains can be seen as autonomous agents; networks that act as decentralised digital nation\nstates. Parachains have their own communities, rules, economies, governance, treasuries, and\nrelationships with external chains. As a result, the economic policies within parachain ecosystems\nare subject to the developers and overall community of that parachain ecosystem; there isn't\nnecessarily a go-to economic model a parachain should follow."),(0,r.kt)("p",null,"Moreover, ",(0,r.kt)("em",{parentName:"p"},"becoming a parachain")," has an opportunity cost associated. Ideally, you can increase the\nvalue of the network by participating in the parachain selection process, and this should serve as a\ngood return on investment."),(0,r.kt)("h4",{id:"connecting-digital-economies"},"Connecting Digital Economies"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"Collators")," act as network maintainers and maintain a full node of a\nparachain. They can be incentivized with a native token payout from:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Transaction fees collected"),(0,r.kt)("li",{parentName:"ul"},"Parathread token sponsorship",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Blocks are naturally produced when a parathread bid is less than the native token payout.")))),(0,r.kt)("h3",{id:"para-objects"},"Para-objects"),(0,r.kt)("admonition",{title:"The Relay Chain can host arbitrary state machines, not just blockchains.",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot network will encourage the\nconnection and interoperability between different ",(0,r.kt)("em",{parentName:"p"},"para-objects"),"."),(0,r.kt)("p",{parentName:"admonition"},"Here, para-objects are referring to objects on the network that operate in parallel, generally,\nparallelizable objects.")),(0,r.kt)("p",null,"These could be in the form of:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"System level chains (permanent chains): ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-auction"},"leased slots"),",\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-parathreads"},"parathread pool")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/docs/learn-bridges"},"Bridge")," Hubs"),(0,r.kt)("li",{parentName:"ul"},"Nested Relay Chains: ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-launch##polkadot2.0"},"Polkadot 2.0"))),(0,r.kt)("h3",{id:"migration"},"Migration"),(0,r.kt)("p",null,'Projects that are already functioning as "solochains" or in isolated environments may be interested\nin migrating onto Polkadot as a para-object.\nWhile the parachain model has its benefits, it may not be the go-to strategy for some projects.'),(0,r.kt)("p",null,"As a path for migration onto Polkadot, it may\nbe more viable to migrate to one of the chains in one of the reserved slots."),(0,r.kt)("p",null,"For instance, there are currently options for ",(0,r.kt)("a",{parentName:"p",href:"/docs/build-smart-contracts"},"smart contract deployment"),"\non Kusama through the networks that have secured a slot in the latest slot auctions."),(0,r.kt)("h2",{id:"implement-a-parachain"},"Implement a Parachain"),(0,r.kt)("p",null,"The Parachain Implementer's Guide is a significant work in progress and maintained by Parity Tech.\n",(0,r.kt)("a",{parentName:"p",href:"https://w3f.github.io/parachain-implementers-guide/"},(0,r.kt)("strong",{parentName:"a"},"The live version"))," is built from the source\nlocated in the official\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/tree/master/roadmap/implementers-guide"},"Polkadot repository"),"."),(0,r.kt)("h3",{id:"parachain-development-kit"},"Parachain Development Kit"),(0,r.kt)("p",null,"The Parachain Development Kit or ",(0,r.kt)("strong",{parentName:"p"},"PDK")," is a set of tools that allows developers to easily create a\nparachain. In practice, the PDK will consist of the following key components:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"State transition function")," : a way for your application to move from one state to another state."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Collator node")," network with certain responsibilities regarding parachains.")),(0,r.kt)("h4",{id:"key-components"},"Key Components"),(0,r.kt)("p",null,"The state transition function (STF) can be an abstract way for an application to go from one state\nto another state. The only constraint that Polkadot\nplaces on this STF is that it must be easily verifiable -- usually\nthrough what we call a ",(0,r.kt)("em",{parentName:"p"},"witness")," or ",(0,r.kt)("em",{parentName:"p"},"proof"),". It must be so because the Relay Chain validators will\nneed to check that each state it receives from the collator node is correct without actually running\nthrough the entire computation. Some examples of these proofs include the Proof-of-Validity blocks\nor zk-SNARKs, which require less computational resources to verify than they do to generate. The\nverification asymmetry in the proof generation of the STF is one of the integral insights that\nallows Polkadot to scale while keeping\nhigh-security guarantees."),(0,r.kt)("p",null,"A collator node is one of the types of network maintainers in the protocol. They are responsible for\n",(0,r.kt)("strong",{parentName:"p"},"keeping availability")," of the state of the parachain and the new states returned from the\niteration of the state transition function. They must remain online to keep track of the state and\nalso of the XCMP messages that it will route between itself and other parachains. Collator nodes are\nresponsible for passing the succinct proofs to the relay chain's validators and tracking the latest\nblocks from the relay chain. In essence, a collator node also acts as a light client for the relay\nchain. For more on collator nodes, see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collator page"),"."),(0,r.kt)("h4",{id:"what-pdks-exist"},"What PDKs Exist?"),(0,r.kt)("p",null,"Currently, the only PDK is ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate"},"Parity Substrate")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus"},"Cumulus"),". ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"https://substrate.io/"},"Substrate"))," is a\nblockchain framework that provides the basic building blocks of a blockchain (things like the\nnetworking layer, consensus, a Wasm interpreter) while providing an intuitive way to construct your\nruntime. Substrate is made to ease the process of creating a new chain, but it does not provide\nsupport for Polkadot compatibility directly.\nFor this reason, ",(0,r.kt)("inlineCode",{parentName:"p"},"Cumulus"),", an added ",(0,r.kt)("em",{parentName:"p"},"library")," contains all of the\nPolkadot compatibility glue code."),(0,r.kt)("admonition",{title:"Get started with Substrate",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The best way to get started with Substrate is to explore the\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/"},"Substrate Documentation")," maintained by\n",(0,r.kt)("a",{parentName:"p",href:"https://parity.io"},"Parity Technologies"),".")),(0,r.kt)("h4",{id:"cumulus"},"Cumulus"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Cumulus clouds are shaped sort of like dots. Together, they form an intricate system that is\nbeautiful and functional.")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus"},"Cumulus")," is an extension to Substrate that makes it easy to\nmake any Substrate-built runtime into a\nPolkadot-compatible parachain."),(0,r.kt)("p",null,"Cumulus Consensus is a consensus engine for Substrate that follows a\nPolkadot Relay Chain (i.e., parachains). This\nruns a Polkadot node internally, and dictates\nto the client and synchronization algorithms which chain to follow, finalize, and treat as correct."),(0,r.kt)("p",null,"See the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus/blob/master/docs/overview.md"},"Cumulus overview")," for a\nmore detailed description of Cumulus."),(0,r.kt)("p",null,"Cumulus is still in development, but the idea is that it should be simple to take a Substrate chain\nand add the parachain code by importing the crates and adding a single line of code. Keep up-to-date\nwith the latest Cumulus developments from the ",(0,r.kt)("a",{parentName:"p",href:"###cumulus"},"Cumulus section"),"."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Substrate and Cumulus provide a PDK from the abstraction of the blockchain format, but it is ",(0,r.kt)("strong",{parentName:"p"},"not\nnecessary")," that a parachain even needs to be a blockchain. For example, a parachain just needs to\nsatisfy the two constraints listed above: ",(0,r.kt)("em",{parentName:"p"},"state transition function")," and ",(0,r.kt)("em",{parentName:"p"},"collator node"),"."),(0,r.kt)("p",{parentName:"admonition"},"Everything else is up to the implementer of the PDK.")),(0,r.kt)("p",null,"Cumulus handles the network compatibility overhead that any parachain would need to implement to be\nconnected to Polkadot. This includes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Cross-chain message passing (XCMP)"),(0,r.kt)("li",{parentName:"ul"},"Out-of-the-box Collator node setup"),(0,r.kt)("li",{parentName:"ul"},"An embedded full client of the Relay Chain"),(0,r.kt)("li",{parentName:"ul"},"Block authorship compatibility")),(0,r.kt)("p",null,"Are you interested in building a PDK? See the ",(0,r.kt)("a",{parentName:"p",href:"#future-pdks"},"future PDKs")," section for details."),(0,r.kt)("h3",{id:"how-to-set-up-your-parachain"},"How to set up your parachain"),(0,r.kt)("p",null,"After creating your chain runtime logic with Substrate, you will be able to compile it down to a\nWasm executable. This Wasm code blob will contain the entire state transition function of your\nchain, and is what you will need to deploy your project to\nPolkadot as either a parachain or parathread."),(0,r.kt)("p",null,"Validators on Polkadot will use the submitted\nWasm code to validate the state transitions of your chain or thread, but doing this requires some\nadditional infrastructure. A validator needs some way to stay up to date with the most recent state\ntransitions, since Polkadot nodes will not be\nrequired to also be nodes of your chain."),(0,r.kt)("p",null,"This is where the collator node comes into play. A collator is a maintainer of your parachain and\nperforms the critical action of producing new block candidates for your chain and passing them to\nPolkadot validators for inclusion in the\nPolkadot Relay Chain."),(0,r.kt)("p",null,"Substrate comes with its own networking layer built-in but unfortunately only supports solo chains\n(that is, chains that do not connect to the relay chain). However, there is the Cumulus extension\nthat includes a collator node and allows for your Substrate-built logic to be compatible with\nPolkadot as either a parachain or parathread."),(0,r.kt)("h3",{id:"future-pdks"},"Future PDKs"),(0,r.kt)("admonition",{title:"Call to action",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Do you want to build a Parachain Development Kit from scratch? The Web3 Foundation is giving grants\nto teams who are doing this, learn more and apply on the\n",(0,r.kt)("a",{parentName:"p",href:"https://grants.web3.foundation"},"W3F grants page"),".")),(0,r.kt)("p",null,"One example of a PDK W3F is interested in supporting is a\n",(0,r.kt)("a",{parentName:"p",href:"https://ethresear.ch/t/roll-up-roll-back-snark-side-chain-17000-tps/3675"},"roll-up")," kit that allowed\ndevelopers to create SNARK-based parachains. If we review the roll-up write-up, we see that the\nsystem uses two roles: users that update ",(0,r.kt)("strong",{parentName:"p"},"state")," and an operator that ",(0,r.kt)("strong",{parentName:"p"},"aggregates the state\nupdates")," into a single on-chain update. It should be straightforward to see how we can translate\nthis to the parachain terms. The state transition function for a roll-up-like parachain would be\nupdating the state (in practice, most likely a Merkle tree, which would be easily verifiable) from\nthe user inputs. The operator would act as the collator node, which would aggregate the state and\ncreate the zk-SNARK proof that it would hand to a Relay Chain's validators for verification."),(0,r.kt)("p",null,"If you or your team are interested in developing a PDK feel free to apply for a grant on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/Grants-Program"},"W3F Grants Program repository"),". There may be grants\navailable for this type of work."),(0,r.kt)("h2",{id:"testing-a-parachain"},"Testing a Parachain"),(0,r.kt)("h3",{id:"rococo-testnet"},"Rococo Testnet"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus#rococo-crown"},"Rococo")," is a testnet built for testing\nparachains. Rococo utilizes Cumulus and ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm#xcmp-lite-hrmp"},"HRMP")," (Horizontal\nRelay-routed Message Passing) in order to send transfers and messages between parachains and a Relay\nChain. Every message is sent to the Relay Chain, then from the Relay Chain to the desired parachain."),(0,r.kt)("p",null,"Rococo runs a few test system parachains:\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-asset-hub-rpc.polkadot.io#/explorer"},"Rockmine"),",\nand\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-contracts-rpc.polkadot.io#/explorer"},"Contracts"),".\nIt also runs several externally developed parachains."),(0,r.kt)("h3",{id:"what-parachains-are-on-rococo-now"},"What Parachains are on Rococo Now?"),(0,r.kt)("p",null,"You can see the list of included parachains\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-rpc.polkadot.io#/parachains"},"here"),". A list of\nproposed parachains is available\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-rpc.polkadot.io#/parachains/proposals"},"here"),"."),(0,r.kt)("h3",{id:"obtaining-roc"},"Obtaining ROC"),(0,r.kt)("p",null,"Follow the instructions ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-DOT#getting-tokens-on-the-rococo-testnet"},"here")," to get\nROCs tokens."),(0,r.kt)("h3",{id:"build-and-register-a-rococo-parathread"},"Build and Register a Rococo Parathread"),(0,r.kt)("p",null,"The parachains of Rococo all use the same runtime code. The only difference between them is the\nparachain ID used for registration with the Relay Chain."),(0,r.kt)("p",null,"You will need to run a Rococo collator. To do so, you need to compile the following binary:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cargo build --release --locked -p polkadot-collator\n")),(0,r.kt)("p",null,"Once the executable is built, launch collators for your parachain:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./target/release/polkadot-collator --chain $CHAIN --validator\n")),(0,r.kt)("p",null,"If you are interested in running and launching your own parathread or parachain, Parity Technologies\nhas created\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/parachains/connect-to-a-relay-chain/"},"parachain tutorials"),"\nto show you how. Got stuck or need support along the way? Join\n",(0,r.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/"},"Substrate Stack Exchange"),") to interact with other builders\nthere."),(0,r.kt)("h3",{id:"how-to-connect-to-a-parachain"},"How to Connect to a Parachain"),(0,r.kt)("p",null,"If you would like to connect to a parachain via ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/"},"Polkadot-JS Apps"),",\nyou may do so by clicking on the network selection at the top left-hand corner of the navigation and\nselecting any parachain of choice."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"rococo parachains",src:t(14696).Z,width:"544",height:"538"})),(0,r.kt)("p",null,'For the purpose of these following examples, we will be using the Rococo testnet "Custom Node"\nunderneath "Development", following the\n',(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/parachains/connect-to-a-relay-chain/"},"parachain tutorials"),"."),(0,r.kt)("h3",{id:"parachain-playground"},"Parachain Playground"),(0,r.kt)("p",null,"You can also take advantage of the account functions offered on Polkadot-JS Apps to test the entire\nParachain onboarding process (e.g. crowdloans, auctions, registrations)."),(0,r.kt)("p",null,"Start a local node on ",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-networks###westend-test-network"},"Westend")," by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"polkadot --chain=westend-dev --alice\n")),(0,r.kt)("p",null,"Then, connect your local node with Polkadot-JS Apps."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"parachains playground",src:t(8295).Z,width:"2528",height:"668"})),(0,r.kt)("h2",{id:"deploy"},"Deploy"),(0,r.kt)("p",null,"Substrate-based chains, including the Polkadot and Kusama Relay Chains, use an\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)"},"SS58 encoding")," for\ntheir address formats.\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json"},"This page")," serves as the\ncanonical registry for teams to see which chain corresponds to a given prefix, and which prefixes\nare available."),(0,r.kt)("h3",{id:"parachain"},"Parachain"),(0,r.kt)("p",null,"To include your parachain into the Polkadot\nnetwork, you will need to acquire a parachain slot."),(0,r.kt)("p",null,"Parachain slots will be sold in open auctions, the mechanics of which can be found on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-auction"},"parachain auction"),"\n"," page of the wiki."),(0,r.kt)("h3",{id:"parathread"},"Parathread"),(0,r.kt)("p",null,"Parathreads will not require a parachain slot, so you will not need to engage in the candle auction\nmechanism. Instead, you will be able to register your parathread code to a Relay Chain for a fee and\nfrom then be able to start participating in the per-block auctions for inclusion of your state\ntransition into a Relay Chain."),(0,r.kt)("p",null,"For more information on how parathread per-block auctions work, see the more detailed\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parathreads"},"parathread"),"\n"," page."),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/how-to-guides/parachains/"},"Parachain tutorials")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/common-good-parachains-an-introduction-to-governance-allocated-parachain-slots/"},"System (Common Good) Parachains")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/the-launch-of-parachains/"},"The Launch of Parachains")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/parathreads-pay-as-you-go-parachains-7440d23dde06"},"Parathreads: Pay-as-you-go Parachains")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/polkadot-bridges-connecting-the-polkadot-ecosystem-with-external-networks-1118916392e3"},"Polkadot Bridges")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/the-path-of-a-parachain-block/"},"The Path of a Parachain Block")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.crowdcast.io/e/polkadot-path-of-a-parachain-block?utm_source=profile&utm_medium=profile_web&utm_campaign=profile"},"The Path of a Parachain Block (Video)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/polkadot-parachain-slots/"},"Polkadot Parachain Slots")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=fYc1yolanoE"},"How to become a parachain on Polkadot (Video)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/trusted-execution-environments-and-the-polkadot-ecosystem/"},"Trusted Execution Environments and the Polkadot Ecosystem"))))}m.isMDXComponent=!0},8295:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/parachain-playground-7873519d5357d27cd254133f7c6ae79f.png"},14696:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/polkadotjs_network_parachains-76ab1faa61e1f8677724db7cbf2c16a5.png"}}]); \ No newline at end of file diff --git a/assets/js/918b38b6.e6d6efec.js b/assets/js/918b38b6.e6d6efec.js deleted file mode 100644 index 9364c8ab1a3f..000000000000 --- a/assets/js/918b38b6.e6d6efec.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2508],{47940:(e,a,n)=>{"use strict";n.d(a,{Z:()=>h});var t=n(74165),o=n(15861),r=n(67294),i=n(87152),s=n(34200),c=n(67425);function l(e,a,n){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,t.Z)().mark((function e(a,n,o){var r,c,l,d,p;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,c=void 0,e.t0=a,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return l=new i.U(r),e.next=21,s.G.create({provider:l});case 21:d=e.sent,(p=n.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return c=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return c=(c=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return e.abrupt("return",c);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,a,n,t){switch(a){case"humanReadable":(0,c.HumanReadable)(e,n,t);break;case"precise":(0,c.Precise)(e,n,t);break;case"blocksToDays":(0,c.BlocksToDays)(e,t);break;case"percentage":(0,c.Percentage)(e,t);break;case"arrayLength":(0,c.ArrayLength)(e,t);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(e){var a=e.network,n=e.path,i=e.defaultValue,s=e.filter,c=void 0===s?void 0:s,d=(0,r.useState)(""),h=d[0],k=d[1];return a=a.toLowerCase(),(0,r.useEffect)((function(){void 0!==c?p(i.toString(),c,a,k):k(i.toString());var e=void 0;switch(a){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+a)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,t.Z)().mark((function e(){var o;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l(a,n,k);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==c?p(o,c,a,k):k(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),h}},67425:e=>{var a={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,n,t){var o=void 0;if("polkadot"===n||"statemint"===n)o=3;else{if("kusama"!==n&&"statemine"!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");o=6}e=parseFloat(e),t((e=Number.isInteger(e/a[n].precision)?e/a[n].precision+" "+a[n].symbol:(e/a[n].precision).toFixed(o)+" "+a[n].symbol).toString())},Precise:function(e,n,t){t(e=(e=parseFloat(e))/a[n].precision+" "+a[n].symbol)},BlocksToDays:function(e,a){a((e=6*e/86400).toString())},Percentage:function(e,a){a((e/=1e7).toString())},ArrayLength:function(e,a){a((e=e.split(",").length).toString())}}},90594:(e,a,n)=>{"use strict";n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=n(87462),o=n(63366),r=(n(67294),n(3905)),i=(n(47940),["components"]),s={id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},c=void 0,l={unversionedId:"learn/learn-async-backing",id:"learn/learn-async-backing",title:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",source:"@site/../docs/learn/learn-async-backing.md",sourceDirName:"learn",slug:"/learn-async-backing",permalink:"/docs/learn-async-backing",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-async-backing.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1696512501,formattedLastUpdatedAt:"Oct 5, 2023",frontMatter:{id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},sidebar:"docs",previous:{title:"Parathreads",permalink:"/docs/learn-parathreads"},next:{title:"SASSAFRAS",permalink:"/docs/learn-sassafras"}},d={},p=[{value:"Synchronous Backing",id:"synchronous-backing",level:2},{value:"Asynchronous Backing",id:"asynchronous-backing",level:2},{value:"Synchronous vs. Asynchronous Backing",id:"synchronous-vs-asynchronous-backing",level:3},{value:"Sync Backing as special case of Async Backing",id:"sync-backing-as-special-case-of-async-backing",level:3},{value:"Async Backing Diagram",id:"async-backing-diagram",level:3},{value:"Terminology",id:"terminology",level:2},{value:"Candidate Receipt",id:"candidate-receipt",level:3},{value:"Pipelining",id:"pipelining",level:3},{value:"Unincluded Segments",id:"unincluded-segments",level:3},{value:"Prospective Parachains",id:"prospective-parachains",level:3},{value:"Learn More",id:"learn-more",level:2}],h={toc:p},k="wrapper";function u(e){var a=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(k,(0,t.Z)({},h,s,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Learn about Parachain Consensus",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"To fully follow the material on this page, it is recommended to be familiar with the primary stages\nof the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachain Protocol"),".")),(0,r.kt)("p",null,"In Polkadot, parablocks are generated by ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collators")," on the parachain side and\nsent to ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validators")," on the relay chain side for backing."),(0,r.kt)("admonition",{title:"What is backing?",type:"info"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"Backing")," refers to the process in which parablocks are verified by a subset of validators or\nbacking groups. It is an important step in the validation process for parablocks, as it is the first\nline of defense in ensuring censorship resistance. Parablocks only need to be backed by one\nvalidator, and as a consequence backing does not ensure parablock validity.")),(0,r.kt)("p",null,"Backed parablocks are sent to other validators for inclusion into the relay chain. Parablocks are\nincluded when validators have attested to having received\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol#erasure-codes"},"erasure coded chunks")," of the parablock data. Note\n",(0,r.kt)("a",{parentName:"p",href:"#candidate-receipt"},"candidate receipts")," and not the parablocks themselves are included in relay\nblocks (but for simplicity we just refer to parablocks as being included). From the time they are\ngenerated, parablocks must be anchored to a relay chain block called ",(0,r.kt)("strong",{parentName:"p"},"relay parent"),". The relay\nparent is an input to parablock candidate generation. It provides necessary context to build the\nnext parablock. Note that the relay parent of a parablock and the relay block including that\nparablock are always different."),(0,r.kt)("h2",{id:"synchronous-backing"},"Synchronous Backing"),(0,r.kt)("p",null,"Before diving into asynchronous backing, it is important to understand what synchronous backing is\nand what its main limitations are. In synchronous backing, parablock generation is tightly coupled\nto the relay chain's progression:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A new parablock can be produced after including the previous one (i.e. every 12 seconds)."),(0,r.kt)("li",{parentName:"ol"},"Context to build the next parablock is drawn from the latest included parablock ancestor"),(0,r.kt)("li",{parentName:"ol"},"The relay parent must be the latest relay chain block.")),(0,r.kt)("p",null,"Because of (1) parablocks can be generated every other relay chain block (i.e. every 12 seconds).\nBecause of (2) generation of parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"P")," can only start when ",(0,r.kt)("inlineCode",{parentName:"p"},"P - 1")," is included (there is no\n",(0,r.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). Because of (3) execution time can take maximum 0.5 seconds as parablock\n",(0,r.kt)("inlineCode",{parentName:"p"},"P")," is rushing to be backed in the next 5.5 seconds (2 seconds needed for backing and the rest for\ngossiping). Every parablock is backed in 6 seconds (one relay chain block), and included in the next\n6 seconds (next relay chain block). Time from generation to inclusion is 12 seconds. This limits the\namount of data a collator can add to each parablock."),(0,r.kt)("p",null,"Note that parablock generation will choose the most recently received relay block as a relay parent,\nalthough with imperfect network that may not be the same as the true most recent relay block. So, in\ngeneral, if relay block ",(0,r.kt)("inlineCode",{parentName:"p"},"R")," is the relay parent of parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"P"),", then ",(0,r.kt)("inlineCode",{parentName:"p"},"P")," could be backed in\n",(0,r.kt)("inlineCode",{parentName:"p"},"R + 1")," and included in ",(0,r.kt)("inlineCode",{parentName:"p"},"R + 2"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"sync-backing",src:n(54804).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"From left to right, parablock P1 is anchored to the relay parent R0 (showed with an ",(0,r.kt)("inlineCode",{parentName:"p"},"x"),"), backed\ninto the relay chain block R1, and included in R2. After the inclusion of P1, collators can start\ngenerating P2 that must be anchored to the relay parent R2. Note that R2 will be the relay parent of\nP2 if R2 is included on the relay chain and gossiped to the collator producing P2."),(0,r.kt)("admonition",{title:"Every collator also runs an attached relay chain full node",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The attached relay node receives relay blocks via gossip. Then the relay node talks to the parachain\nnode through the ",(0,r.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," subsystem. R2 is gossiped to the relay full node attached to\nthe collator producing P2. Then ",(0,r.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," passes information about R2 to the collator\nnode. Finally, relay parent information from R2 informs the generation of candidate P2.")),(0,r.kt)("p",null,"Because P2 is rushing to be backed in 6 seconds into R3, collators have only 0.5 seconds to generate\nit and present it to backing groups on the relay chain that will take approximately 2 seconds to\nback it and some extra time for gossiping it (the whole process from collation to backing lasts 6\nseconds). P2 is included in R4, which could be used as a relay parent for P3 (not shown). After 24\nseconds P1 and P2 are included into the relay chain. Note how collators can start new parablocks\nevery 12 seconds, but only have 0.5 seconds to generate them."),(0,r.kt)("h2",{id:"asynchronous-backing"},"Asynchronous Backing"),(0,r.kt)("admonition",{title:"Disclaimer: Performance Measurements",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Due to asynchronous backing not being fully implemented in a running production network, each\nperformance metric is not thoroughly tested nor guaranteed until proper benchmarking has occurred.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"sync-vs-async-backing",src:n(4919).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In asynchronous backing parablocks (P) are included every 6 seconds, and backing (B) and inclusion\n(I) can happen within the same relay chain block (R)."),(0,r.kt)("h3",{id:"synchronous-vs-asynchronous-backing"},"Synchronous vs. Asynchronous Backing"),(0,r.kt)("p",null,"Below, a table showing the main differences between synchronous and asynchronous backing."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"}),(0,r.kt)("th",{parentName:"tr",align:"center"},"Sync Backing"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Async Backing"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Async Backing Advantage"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablocks included every")),(0,r.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"6 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"2x more throughput or 2x less latency")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablock's maximum generation time")),(0,r.kt)("td",{parentName:"tr",align:"center"},"0.5 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Recommended 2 seconds, but higher values are possible"),(0,r.kt)("td",{parentName:"tr",align:"center"},"4x more data in a parablock")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Relay parent")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Is the latest relay chain block"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Is not necessarily the latest relay chain block"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Collators can submit parablocks to backing groups in advance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Collators can build on")),(0,r.kt)("td",{parentName:"tr",align:"center"},"The most recent ancestor included in the latest relay chain block"),(0,r.kt)("td",{parentName:"tr",align:"center"},"An ancestor included in a relay chain block (not necessarily the latest), with augmented information from the latest ancestor in the ",(0,r.kt)("a",{parentName:"td",href:"#unincluded-segments"},"unincluded segment")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Collators can start building parablocks in advance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Number of unincluded parablocks")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Only one"),(0,r.kt)("td",{parentName:"tr",align:"center"},"One, or more than one (depends on configuration parameters)"),(0,r.kt)("td",{parentName:"tr",align:"center"},"More efficiency and scalability")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Unincluded parablocks")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Cannot be re-proposed"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Can be re-proposed if not successfully included in the first attempt"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Decrease wastage of unused blockspace")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablock's Backing-to-inclusion time")),(0,r.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"No change")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablock's Inclusion-to-finality time")),(0,r.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"No change")))),(0,r.kt)("p",null,"In synchronous backing collators generate parablocks using context entirely pulled from the relay\nchain. While in asynchronous backing collators use additional context from the\n",(0,r.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),". Parablocks are included every 6 seconds because backing\nof parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"N + 1")," and inclusion of parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"N")," can happen on the same relay chain bock\n(",(0,r.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). However, as for synchronous backing, a parablock takes 12 seconds to\nget backed and included, and from inclusion to finality there is an additional 30-second time\nwindow."),(0,r.kt)("p",null,"Because the throughput is increased by 2x and parachains have 4x more time to generate blocks,\nasynchronous backing is expected to deliver 8x more blockspace to parachains."),(0,r.kt)("h3",{id:"sync-backing-as-special-case-of-async-backing"},"Sync Backing as special case of Async Backing"),(0,r.kt)("p",null,"Two parameters of asynchronous backing can be controlled by\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Governance"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L49"},(0,r.kt)("inlineCode",{parentName:"a"},"max_candidate_depth")),":\nthe number of parachain blocks a collator can produce that are not yet included in the relay\nchain.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L54"},(0,r.kt)("inlineCode",{parentName:"a"},"allowed_ancestry_len")),":\nthe oldest relay chain parent a parachain block can be built on top of."))),(0,r.kt)("p",null,"Values of zero for both correspond to synchronous backing: ",(0,r.kt)("inlineCode",{parentName:"p"},"max_candidate_depth = 0")," means there can\nbe only one unincluded parablock at all times, and ",(0,r.kt)("inlineCode",{parentName:"p"},"allowed_ancestry_len = 0")," means a parablock can\nbe built only on the latest relay parent for that parachain. Initial values will be set to 3 (4\nunincluded parablocks at all times) and 2 (relay parent can be the third last)."),(0,r.kt)("h3",{id:"async-backing-diagram"},"Async Backing Diagram"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"async-backing",src:n(16588).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"The diagram assumes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"max_candidate_depth = 2"),", meaning that there can be a maximum of three unincluded parablocks at\nall times"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"allowed_ancestry_len = 1"),", meaning parablocks can be anchored to the last or second-last relay\nparent (i.e. collators can start preparing parablocks 6 seconds in advance)")),(0,r.kt)("p",null,"From left to right, parablock P1 is backed into the relay chain block R1 and included into R2. While\nP1 undergoes backing, collators can already start to generate P2, which will have R0 as a relay\nparent (showed with an ",(0,r.kt)("inlineCode",{parentName:"p"},"x"),"). Note how R0 can also be relay parent for P1 as long as in the\nunincluded segment there is a maximum of three unincluded parablocks. Parablock P2 can be backed in\nR2 (the same relay block where P1 is included) and included in R3. Collators can now use up to two\nseconds to generate parablocks. And so on, P3 can be generated while P2 is checked by backing\ngroups, and P4 can be built while P3 undergoing backing. In 24 seconds, P1 to P3 are included into\nthe relay chain."),(0,r.kt)("p",null,"Note how there are always three unincluded parablocks at all times, i.e. compared to synchronous\nbacking there can be multiple unincluded parablocks (i.e. ",(0,r.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). For example,\nwhen P1 undergoing inclusion, P2 and P3 are undergoing backing. Collators were able to generate\nmultiple unincluded parablocks because on their end they have the\n",(0,r.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),", a local storage of not included parablock ancestors that\nthey can use to fetch information to build new parablocks. On the relay chain side\n",(0,r.kt)("a",{parentName:"p",href:"#prospective-parachains"},"perspective parachains")," repeats the work each unincluded segment does in\ntracking candidates (as validators cannot trust the record kept on parachains)."),(0,r.kt)("p",null,"The 6-second relay chain block delay includes a backing execution timeout (2 seconds) and some time\nfor network latency (time it takes to gossip messages across the entire network). Even if a collator\ncan theoretically have >2 seconds to produce a block, the validators will still have ~2 seconds to\ncheck it. The limit collators have to generate parablocks is thus how long it takes to back it (2\nseconds). This means that if block generation takes >2 seconds the unincluded segment will shrink\n(less unincluded parablocks) while if it takes <2 seconds the segment will grow (more unincluded\nparablocks). Such flexibility from the parachain side will be enabled on the relay chain side with\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-core-usage"},"agile core usage")," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-coretime-allocation"},"coretime allocation")," (so called elastic\nscaling)."),(0,r.kt)("h2",{id:"terminology"},"Terminology"),(0,r.kt)("h3",{id:"candidate-receipt"},"Candidate Receipt"),(0,r.kt)("p",null,"Saying that a parablock has been included in a realy chain parent does not mean that the entire\nparablock is in the relay chain block. Instead, ",(0,r.kt)("strong",{parentName:"p"},"candidate receipt")," consisting of the hash of the\nparablock, state roots and ID info is placed on the parent block on the relay chain. The relay chain\ndoes not access the entire state of a parachain but only the values that changed during that block\nand the merkelized hashes of the unchanged values."),(0,r.kt)("h3",{id:"pipelining"},"Pipelining"),(0,r.kt)("p",null,"Asynchronous backing is a feature that introduces\n",(0,r.kt)("a",{parentName:"p",href:"https://www.techtarget.com/whatis/definition/pipelining"},"pipelining")," to the parachain block\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"generation, backing and inclusion"),'. It is analogous to the logical\npipelining of processor instruction in "traditional" architectures, where some instructions may be\nexecuted before others are complete. Instructions may also be executed in parallel, enabling\nmultiple processor parts to work on potentially different instructions simultaneously.'),(0,r.kt)("p",null,"Bundles of state transitions represented as blocks may be processed similarly. In the context of\nPolkadot, pipelining aims to increase the\nthroughput of the entire network by completing the backing and inclusion steps for different blocks\nat the same time. Asynchronous backing does not just allow for pipelining within a single pipe (or\ncore). It lays the foundation for a large number of pipes (or cores) to run for the same parachain\nat the same time. In that way we have two distinct new forms of parallel computation."),(0,r.kt)("h3",{id:"unincluded-segments"},"Unincluded Segments"),(0,r.kt)("p",null,"Unincluded segments are chains of candidate parablocks that have yet to be included in the relay\nchain, i.e. they can contain parablocks at any stage pre-inclusion. An unincluded segment may thus\ninclude candidates that are seconded, backable, or backed. Every parablock candidate recorded in the\nunincluded segment is immediately advertised to validators to begin the backing process."),(0,r.kt)("p",null,"The backing process occurs on the relay chain, whereas unincluded segments live in the runtimes of\nparachain collators. The core functionality that asynchronous backing brings is the ability to build\non these unincluded segments of block ancestors rather than building only on ancestors included in\nthe relay chain state."),(0,r.kt)("p",null,"The purpose of each unincluded segment is two fold:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Make each parachain aware of when and at what depth it can build blocks that won't be rejected by\nthe relay chain"),(0,r.kt)("li",{parentName:"ul"},"Provide critical context necessary to build parablocks with parent blocks that have yet to be\nincluded. The unincluded segment is all about building parablocks.")),(0,r.kt)("h3",{id:"prospective-parachains"},"Prospective Parachains"),(0,r.kt)("p",null,"The purpose of\n",(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"prospective parachains"),"\nis two fold:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Keep track of parablocks which have been submitted to backers but not yet included. This includes\ntracking the full unincluded ancestry of each parablock, without which it wouldn't be possible to\nverify their legitimacy.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Look up and provide candidates which are children of the most recently included parablock for each\nparachain. These are taken as inputs to the availability process. Prospective parachains is all\nabout tracking, storing, and providing candidates to the availability/inclusion step."))),(0,r.kt)("p",null,"Prospective parachains essentially repeats the work each ",(0,r.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),"\ndoes in tracking candidates. Validators cannot simply trust the availability or validity of records\nkept on parachains. Prospective parachains is the relay chain's record of all parablock candidates\nundergoing the backing and inclusion process. It is the authoritative gate keeper for parablock\nvalidity. Whereas the unincluded segment is a local record which allows parachains to produce blocks\nwhich comply with the rules prospective parachains later enforces."),(0,r.kt)("p",null,"The unincluded segment lives in the parachain runtime, so it doesn't know or care about forks/other\nparachains. Prospective parachains lives in the relay chain client. So it has to simultaneously keep\ntrack of candidates from all forks of all parachains. It is as if you folded the unincluded segments\nfrom every fork of every parachain into one giant data structure. When you fold unincluded segments\nrepresenting different chain forks together, they create a tree structure. Hence the term\n",(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html#fragment-trees"},(0,r.kt)("strong",{parentName:"a"},"fragment tree")),"."),(0,r.kt)("p",null,"A single unincluded segment tells a collator whether it can build on top of one fork of one\nparachain. Prospective parachains tells a validator whether it should accept blocks built on top of\nany fork from any parachain."),(0,r.kt)("p",null,"A parablock stops being a prospective parablock at the moment when it is included on chain. At that\npoint prospective parachains doesn't have to care about it anymore. Alternatively, a parablock's\nrelay parent can get too old before that parablock is included, in which case prospective parachains\ncan throw away the candidate."),(0,r.kt)("h2",{id:"learn-more"},"Learn More"),(0,r.kt)("p",null,"This topic is evolving and being implemented at the moment, keep up to date using the following\nresources:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/polkadot-roadmap-roundup"},"Polkadot Roadmap Roundup")," - Article by\nRob Habermeier, Polkadot founder, details the plans for Polkadot for 2023."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/issues/3779"},"Asynchronous Backing Spec & Tracking Issue")," -\nThe implementation tracking issue for asynchronous backing"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"Prospective Parachains Subsystem - The Polkadot Parachain Host Implementers' Guide")),(0,r.kt)("li",{parentName:"ul"},"Chapter 6.11. from Polkadot Blockchain Academy (PBA) lecture material:\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-shallow/page.html"},"Asynchronous Backing (Shallow)")),(0,r.kt)("li",{parentName:"ul"},"Chapter 6.15. from PBA lecture material:\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-deep/page.html"},"Asynchronous Backing (Deep)")),(0,r.kt)("li",{parentName:"ul"},"Polkadot Blog Post -\n",(0,r.kt)("a",{parentName:"li",href:"https://www.polkadot.network/blog/elevating-polkadots-performance-and-scale-with-asynchronous-backing"},"Asynchronous Backing: Elevating Polkadot's Performance and Scale"))))}u.isMDXComponent=!0},16588:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/async-backing-a0ecfcffce70c33d1b26196ad33796f7.png"},54804:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-backing-e5c74751cd62df36651f23fab421f7cf.png"},4919:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-vs-async-backing-3548388f98c44fc684a6176a6ccb8ed2.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/918b38b6.f22722ab.js b/assets/js/918b38b6.f22722ab.js new file mode 100644 index 000000000000..c568bad895e4 --- /dev/null +++ b/assets/js/918b38b6.f22722ab.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2508],{47940:(e,a,n)=>{"use strict";n.d(a,{Z:()=>h});var t=n(74165),o=n(15861),i=n(67294),r=n(87152),s=n(34200),c=n(67425);function l(e,a,n){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,t.Z)().mark((function e(a,n,o){var i,c,l,d,p;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,c=void 0,e.t0=a,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return l=new r.U(i),e.next=21,s.G.create({provider:l});case 21:d=e.sent,(p=n.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return c=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return c=(c=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return e.abrupt("return",c);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,a,n,t){switch(a){case"humanReadable":(0,c.HumanReadable)(e,n,t);break;case"precise":(0,c.Precise)(e,n,t);break;case"blocksToDays":(0,c.BlocksToDays)(e,t);break;case"percentage":(0,c.Percentage)(e,t);break;case"arrayLength":(0,c.ArrayLength)(e,t);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(e){var a=e.network,n=e.path,r=e.defaultValue,s=e.filter,c=void 0===s?void 0:s,d=(0,i.useState)(""),h=d[0],k=d[1];return a=a.toLowerCase(),(0,i.useEffect)((function(){void 0!==c?p(r.toString(),c,a,k):k(r.toString());var e=void 0;switch(a){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+a)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,o.Z)((0,t.Z)().mark((function e(){var o;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l(a,n,k);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==c?p(o,c,a,k):k(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),h}},67425:e=>{var a={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,n,t){var o=void 0;if("polkadot"===n||"statemint"===n)o=3;else{if("kusama"!==n&&"statemine"!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");o=6}e=parseFloat(e),t((e=Number.isInteger(e/a[n].precision)?e/a[n].precision+" "+a[n].symbol:(e/a[n].precision).toFixed(o)+" "+a[n].symbol).toString())},Precise:function(e,n,t){t(e=(e=parseFloat(e))/a[n].precision+" "+a[n].symbol)},BlocksToDays:function(e,a){a((e=6*e/86400).toString())},Percentage:function(e,a){a((e/=1e7).toString())},ArrayLength:function(e,a){a((e=e.split(",").length).toString())}}},90594:(e,a,n)=>{"use strict";n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=n(87462),o=n(63366),i=(n(67294),n(3905)),r=(n(47940),["components"]),s={id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},c=void 0,l={unversionedId:"learn/learn-async-backing",id:"learn/learn-async-backing",title:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",source:"@site/../docs/learn/learn-async-backing.md",sourceDirName:"learn",slug:"/learn-async-backing",permalink:"/docs/learn-async-backing",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-async-backing.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1696525337,formattedLastUpdatedAt:"Oct 5, 2023",frontMatter:{id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},sidebar:"docs",previous:{title:"Parathreads",permalink:"/docs/learn-parathreads"},next:{title:"SASSAFRAS",permalink:"/docs/learn-sassafras"}},d={},p=[{value:"Synchronous Backing",id:"synchronous-backing",level:2},{value:"Asynchronous Backing",id:"asynchronous-backing",level:2},{value:"Synchronous vs. Asynchronous Backing",id:"synchronous-vs-asynchronous-backing",level:3},{value:"Sync Backing as special case of Async Backing",id:"sync-backing-as-special-case-of-async-backing",level:3},{value:"Async Backing Diagram",id:"async-backing-diagram",level:3},{value:"Terminology",id:"terminology",level:2},{value:"Candidate Receipt",id:"candidate-receipt",level:3},{value:"Pipelining",id:"pipelining",level:3},{value:"Unincluded Segments",id:"unincluded-segments",level:3},{value:"Prospective Parachains",id:"prospective-parachains",level:3},{value:"Learn More",id:"learn-more",level:2}],h={toc:p},k="wrapper";function u(e){var a=e.components,s=(0,o.Z)(e,r);return(0,i.kt)(k,(0,t.Z)({},h,s,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"Learn about Parachain Consensus",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"To fully follow the material on this page, it is recommended to be familiar with the primary stages\nof the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachain Protocol"),".")),(0,i.kt)("p",null,"In Polkadot, parablocks are generated by ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collators")," on the parachain side and\nsent to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validators")," on the relay chain side for backing."),(0,i.kt)("admonition",{title:"What is backing?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"Backing")," refers to the process in which parablocks are verified by a subset of validators or\nbacking groups. It is an important step in the validation process for parablocks, as it is the first\nline of defense in ensuring censorship resistance. Parablocks only need to be backed by one\nvalidator, and as a consequence backing does not ensure parablock validity.")),(0,i.kt)("p",null,"Backed parablocks are sent to other validators for inclusion into the relay chain. Parablocks are\nincluded when validators have attested to having received\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol#erasure-codes"},"erasure coded chunks")," of the parablock data. Note\n",(0,i.kt)("a",{parentName:"p",href:"#candidate-receipt"},"candidate receipts")," and not the parablocks themselves are included in relay\nblocks (but for simplicity we just refer to parablocks as being included). From the time they are\ngenerated, parablocks must be anchored to a relay chain block called ",(0,i.kt)("strong",{parentName:"p"},"relay parent"),". The relay\nparent is an input to parablock candidate generation. It provides necessary context to build the\nnext parablock. Note that the relay parent of a parablock and the relay block including that\nparablock are always different."),(0,i.kt)("h2",{id:"synchronous-backing"},"Synchronous Backing"),(0,i.kt)("p",null,"Before diving into asynchronous backing, it is important to understand what synchronous backing is\nand what its main limitations are. In synchronous backing, parablock generation is tightly coupled\nto the relay chain's progression:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"A new parablock can be produced after including the previous one (i.e. every 12 seconds)."),(0,i.kt)("li",{parentName:"ol"},"Context to build the next parablock is drawn from the latest included parablock ancestor"),(0,i.kt)("li",{parentName:"ol"},"The relay parent must be the latest relay chain block.")),(0,i.kt)("p",null,"Because of (1) parablocks can be generated every other relay chain block (i.e. every 12 seconds).\nBecause of (2) generation of parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"P")," can only start when ",(0,i.kt)("inlineCode",{parentName:"p"},"P - 1")," is included (there is no\n",(0,i.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). Because of (3) execution time can take maximum 0.5 seconds as parablock\n",(0,i.kt)("inlineCode",{parentName:"p"},"P")," is rushing to be backed in the next 5.5 seconds (2 seconds needed for backing and the rest for\ngossiping). Every parablock is backed in 6 seconds (one relay chain block), and included in the next\n6 seconds (next relay chain block). Time from generation to inclusion is 12 seconds. This limits the\namount of data a collator can add to each parablock."),(0,i.kt)("p",null,"Note that parablock generation will choose the most recently received relay block as a relay parent,\nalthough with imperfect network that may not be the same as the true most recent relay block. So, in\ngeneral, if relay block ",(0,i.kt)("inlineCode",{parentName:"p"},"R")," is the relay parent of parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"P"),", then ",(0,i.kt)("inlineCode",{parentName:"p"},"P")," could be backed in\n",(0,i.kt)("inlineCode",{parentName:"p"},"R + 1")," and included in ",(0,i.kt)("inlineCode",{parentName:"p"},"R + 2"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sync-backing",src:n(54804).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"From left to right, parablock P1 is anchored to the relay parent R0 (showed with an ",(0,i.kt)("inlineCode",{parentName:"p"},"x"),"), backed\ninto the relay chain block R1, and included in R2. After the inclusion of P1, collators can start\ngenerating P2 that must be anchored to the relay parent R2. Note that R2 will be the relay parent of\nP2 if R2 is included on the relay chain and gossiped to the collator producing P2."),(0,i.kt)("admonition",{title:"Every collator also runs an attached relay chain full node",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The attached relay node receives relay blocks via gossip. Then the relay node talks to the parachain\nnode through the ",(0,i.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," subsystem. R2 is gossiped to the relay full node attached to\nthe collator producing P2. Then ",(0,i.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," passes information about R2 to the collator\nnode. Finally, relay parent information from R2 informs the generation of candidate P2.")),(0,i.kt)("p",null,"Because P2 is rushing to be backed in 6 seconds into R3, collators have only 0.5 seconds to generate\nit and present it to backing groups on the relay chain that will take approximately 2 seconds to\nback it and some extra time for gossiping it (the whole process from collation to backing lasts 6\nseconds). P2 is included in R4, which could be used as a relay parent for P3 (not shown). After 24\nseconds P1 and P2 are included into the relay chain. Note how collators can start new parablocks\nevery 12 seconds, but only have 0.5 seconds to generate them."),(0,i.kt)("h2",{id:"asynchronous-backing"},"Asynchronous Backing"),(0,i.kt)("admonition",{title:"Disclaimer: Performance Measurements",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Due to asynchronous backing not being fully implemented in a running production network, each\nperformance metric is not thoroughly tested nor guaranteed until proper benchmarking has occurred.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sync-vs-async-backing",src:n(4919).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"In asynchronous backing parablocks (P) are included every 6 seconds, and backing (B) and inclusion\n(I) can happen within the same relay chain block (R)."),(0,i.kt)("h3",{id:"synchronous-vs-asynchronous-backing"},"Synchronous vs. Asynchronous Backing"),(0,i.kt)("p",null,"Below, a table showing the main differences between synchronous and asynchronous backing."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"left"}),(0,i.kt)("th",{parentName:"tr",align:"center"},"Sync Backing"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Async Backing"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Async Backing Advantage"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablocks included every")),(0,i.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"6 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"2x more throughput or 2x less latency")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablock's maximum generation time")),(0,i.kt)("td",{parentName:"tr",align:"center"},"0.5 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Recommended 2 seconds, but higher values are possible"),(0,i.kt)("td",{parentName:"tr",align:"center"},"4x more data in a parablock")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Relay parent")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Is the latest relay chain block"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Is not necessarily the latest relay chain block"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Collators can submit parablocks to backing groups in advance")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Collators can build on")),(0,i.kt)("td",{parentName:"tr",align:"center"},"The most recent ancestor included in the latest relay chain block"),(0,i.kt)("td",{parentName:"tr",align:"center"},"An ancestor included in a relay chain block (not necessarily the latest), with augmented information from the latest ancestor in the ",(0,i.kt)("a",{parentName:"td",href:"#unincluded-segments"},"unincluded segment")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Collators can start building parablocks in advance")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Number of unincluded parablocks")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Only one"),(0,i.kt)("td",{parentName:"tr",align:"center"},"One, or more than one (depends on configuration parameters)"),(0,i.kt)("td",{parentName:"tr",align:"center"},"More efficiency and scalability")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Unincluded parablocks")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Cannot be re-proposed"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Can be re-proposed if not successfully included in the first attempt"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Decrease wastage of unused blockspace")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablock's Backing-to-inclusion time")),(0,i.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"No change")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablock's Inclusion-to-finality time")),(0,i.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"No change")))),(0,i.kt)("p",null,"In synchronous backing collators generate parablocks using context entirely pulled from the relay\nchain. While in asynchronous backing collators use additional context from the\n",(0,i.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),". Parablocks are included every 6 seconds because backing\nof parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"N + 1")," and inclusion of parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"N")," can happen on the same relay chain bock\n(",(0,i.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). However, as for synchronous backing, a parablock takes 12 seconds to\nget backed and included, and from inclusion to finality there is an additional 30-second time\nwindow."),(0,i.kt)("p",null,"Because the throughput is increased by 2x and parachains have 4x more time to generate blocks,\nasynchronous backing is expected to deliver 8x more blockspace to parachains."),(0,i.kt)("h3",{id:"sync-backing-as-special-case-of-async-backing"},"Sync Backing as special case of Async Backing"),(0,i.kt)("p",null,"Two parameters of asynchronous backing can be controlled by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Governance"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L49"},(0,i.kt)("inlineCode",{parentName:"a"},"max_candidate_depth")),":\nthe number of parachain blocks a collator can produce that are not yet included in the relay\nchain.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L54"},(0,i.kt)("inlineCode",{parentName:"a"},"allowed_ancestry_len")),":\nthe oldest relay chain parent a parachain block can be built on top of."))),(0,i.kt)("p",null,"Values of zero for both correspond to synchronous backing: ",(0,i.kt)("inlineCode",{parentName:"p"},"max_candidate_depth = 0")," means there can\nbe only one unincluded parablock at all times, and ",(0,i.kt)("inlineCode",{parentName:"p"},"allowed_ancestry_len = 0")," means a parablock can\nbe built only on the latest relay parent for that parachain. Initial values will be set to 3 (4\nunincluded parablocks at all times) and 2 (relay parent can be the third last)."),(0,i.kt)("h3",{id:"async-backing-diagram"},"Async Backing Diagram"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"async-backing",src:n(16588).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"The diagram assumes:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"max_candidate_depth = 2"),", meaning that there can be a maximum of three unincluded parablocks at\nall times"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"allowed_ancestry_len = 1"),", meaning parablocks can be anchored to the last or second-last relay\nparent (i.e. collators can start preparing parablocks 6 seconds in advance)")),(0,i.kt)("p",null,"From left to right, parablock P1 is backed into the relay chain block R1 and included into R2. While\nP1 undergoes backing, collators can already start to generate P2, which will have R0 as a relay\nparent (showed with an ",(0,i.kt)("inlineCode",{parentName:"p"},"x"),"). Note how R0 can also be relay parent for P1 as long as in the\nunincluded segment there is a maximum of three unincluded parablocks. Parablock P2 can be backed in\nR2 (the same relay block where P1 is included) and included in R3. Collators can now use up to two\nseconds to generate parablocks. And so on, P3 can be generated while P2 is checked by backing\ngroups, and P4 can be built while P3 undergoing backing. In 24 seconds, P1 to P3 are included into\nthe relay chain."),(0,i.kt)("p",null,"Note how there are always three unincluded parablocks at all times, i.e. compared to synchronous\nbacking there can be multiple unincluded parablocks (i.e. ",(0,i.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). For example,\nwhen P1 undergoing inclusion, P2 and P3 are undergoing backing. Collators were able to generate\nmultiple unincluded parablocks because on their end they have the\n",(0,i.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),", a local storage of not included parablock ancestors that\nthey can use to fetch information to build new parablocks. On the relay chain side\n",(0,i.kt)("a",{parentName:"p",href:"#prospective-parachains"},"perspective parachains")," repeats the work each unincluded segment does in\ntracking candidates (as validators cannot trust the record kept on parachains)."),(0,i.kt)("p",null,"The 6-second relay chain block delay includes a backing execution timeout (2 seconds) and some time\nfor network latency (the time it takes to gossip messages across the entire network). The limit\ncollators have to generate parablocks is how long it takes to back it (i.e., 2 seconds). Collation\ngeneration conservatively always gives itself the same time limits. If there is extra time for\ncollation generation and backing (i.e., more than 2s + 6s), then all that extra time is allocated to\nbacking (see figure). This could result in backable blocks waiting their turn at the end of the\nbacking step for a few extra seconds until a core frees up to back that block as of the next relay\nblock or some later relay block. Note a core is occupied after backing and before inclusion."),(0,i.kt)("p",null,"The 2-second block generation time is thus a limiter, not a system limitation. If block generation\ntakes >2 seconds, the unincluded segment will shrink (less unincluded parablocks), while if it takes\n<2 seconds, the segment will grow (more unincluded parablocks that will need to be backed and\nincluded). Such flexibility from the parachain side will be possible when, on the relay chain side,\nthere will be elastic scaling (i.e.,\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-core-usage"},"agile core usage")," and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-coretime-allocation"},"coretime allocation"),")."),(0,i.kt)("h2",{id:"terminology"},"Terminology"),(0,i.kt)("h3",{id:"candidate-receipt"},"Candidate Receipt"),(0,i.kt)("p",null,"Saying that a parablock has been included in a realy chain parent does not mean that the entire\nparablock is in the relay chain block. Instead, ",(0,i.kt)("strong",{parentName:"p"},"candidate receipt")," consisting of the hash of the\nparablock, state roots and ID info is placed on the parent block on the relay chain. The relay chain\ndoes not access the entire state of a parachain but only the values that changed during that block\nand the merkelized hashes of the unchanged values."),(0,i.kt)("h3",{id:"pipelining"},"Pipelining"),(0,i.kt)("p",null,"Asynchronous backing is a feature that introduces\n",(0,i.kt)("a",{parentName:"p",href:"https://www.techtarget.com/whatis/definition/pipelining"},"pipelining")," to the parachain block\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"generation, backing and inclusion"),'. It is analogous to the logical\npipelining of processor instruction in "traditional" architectures, where some instructions may be\nexecuted before others are complete. Instructions may also be executed in parallel, enabling\nmultiple processor parts to work on potentially different instructions simultaneously.'),(0,i.kt)("p",null,"Bundles of state transitions represented as blocks may be processed similarly. In the context of\nPolkadot, pipelining aims to increase the\nthroughput of the entire network by completing the backing and inclusion steps for different blocks\nat the same time. Asynchronous backing does not just allow for pipelining within a single pipe (or\ncore). It lays the foundation for a large number of pipes (or cores) to run for the same parachain\nat the same time. In that way we have two distinct new forms of parallel computation."),(0,i.kt)("h3",{id:"unincluded-segments"},"Unincluded Segments"),(0,i.kt)("p",null,"Unincluded segments are chains of candidate parablocks that have yet to be included in the relay\nchain, i.e. they can contain parablocks at any stage pre-inclusion. An unincluded segment may thus\ninclude candidates that are seconded, backable, or backed. Every parablock candidate recorded in the\nunincluded segment is immediately advertised to validators to begin the backing process."),(0,i.kt)("p",null,"The backing process occurs on the relay chain, whereas unincluded segments live in the runtimes of\nparachain collators. The core functionality that asynchronous backing brings is the ability to build\non these unincluded segments of block ancestors rather than building only on ancestors included in\nthe relay chain state."),(0,i.kt)("p",null,"The purpose of each unincluded segment is two fold:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Make each parachain aware of when and at what depth it can build blocks that won't be rejected by\nthe relay chain"),(0,i.kt)("li",{parentName:"ul"},"Provide critical context necessary to build parablocks with parent blocks that have yet to be\nincluded. The unincluded segment is all about building parablocks.")),(0,i.kt)("h3",{id:"prospective-parachains"},"Prospective Parachains"),(0,i.kt)("p",null,"The purpose of\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"prospective parachains"),"\nis two fold:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Keep track of parablocks which have been submitted to backers but not yet included. This includes\ntracking the full unincluded ancestry of each parablock, without which it wouldn't be possible to\nverify their legitimacy.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Look up and provide candidates which are children of the most recently included parablock for each\nparachain. These are taken as inputs to the availability process. Prospective parachains is all\nabout tracking, storing, and providing candidates to the availability/inclusion step."))),(0,i.kt)("p",null,"Prospective parachains essentially repeats the work each ",(0,i.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),"\ndoes in tracking candidates. Validators cannot simply trust the availability or validity of records\nkept on parachains. Prospective parachains is the relay chain's record of all parablock candidates\nundergoing the backing and inclusion process. It is the authoritative gate keeper for parablock\nvalidity. Whereas the unincluded segment is a local record which allows parachains to produce blocks\nwhich comply with the rules prospective parachains later enforces."),(0,i.kt)("p",null,"The unincluded segment lives in the parachain runtime, so it doesn't know or care about forks/other\nparachains. Prospective parachains lives in the relay chain client. So it has to simultaneously keep\ntrack of candidates from all forks of all parachains. It is as if you folded the unincluded segments\nfrom every fork of every parachain into one giant data structure. When you fold unincluded segments\nrepresenting different chain forks together, they create a tree structure. Hence the term\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html#fragment-trees"},(0,i.kt)("strong",{parentName:"a"},"fragment tree")),"."),(0,i.kt)("p",null,"A single unincluded segment tells a collator whether it can build on top of one fork of one\nparachain. Prospective parachains tells a validator whether it should accept blocks built on top of\nany fork from any parachain."),(0,i.kt)("p",null,"A parablock stops being a prospective parablock at the moment when it is included on chain. At that\npoint prospective parachains doesn't have to care about it anymore. Alternatively, a parablock's\nrelay parent can get too old before that parablock is included, in which case prospective parachains\ncan throw away the candidate."),(0,i.kt)("h2",{id:"learn-more"},"Learn More"),(0,i.kt)("p",null,"This topic is evolving and being implemented at the moment, keep up to date using the following\nresources:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/polkadot-roadmap-roundup"},"Polkadot Roadmap Roundup")," - Article by\nRob Habermeier, Polkadot founder, details the plans for Polkadot for 2023."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/issues/3779"},"Asynchronous Backing Spec & Tracking Issue")," -\nThe implementation tracking issue for asynchronous backing"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"Prospective Parachains Subsystem - The Polkadot Parachain Host Implementers' Guide")),(0,i.kt)("li",{parentName:"ul"},"Chapter 6.11. from Polkadot Blockchain Academy (PBA) lecture material:\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-shallow/page.html"},"Asynchronous Backing (Shallow)")),(0,i.kt)("li",{parentName:"ul"},"Chapter 6.15. from PBA lecture material:\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-deep/page.html"},"Asynchronous Backing (Deep)")),(0,i.kt)("li",{parentName:"ul"},"Polkadot Blog Post -\n",(0,i.kt)("a",{parentName:"li",href:"https://www.polkadot.network/blog/elevating-polkadots-performance-and-scale-with-asynchronous-backing"},"Asynchronous Backing: Elevating Polkadot's Performance and Scale"))))}u.isMDXComponent=!0},16588:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png"},54804:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-backing-e5c74751cd62df36651f23fab421f7cf.png"},4919:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-vs-async-backing-3548388f98c44fc684a6176a6ccb8ed2.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/fbea1897.306e56e9.js b/assets/js/fbea1897.306e56e9.js deleted file mode 100644 index 71c5d39c1d49..000000000000 --- a/assets/js/fbea1897.306e56e9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7280],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=c(n),h=o,m=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return n?a.createElement(m,l(l({ref:t},d),{},{components:n})):a.createElement(m,l({ref:t},d))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),l=["components"],i={id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot 2.0","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},s=void 0,c={unversionedId:"learn/learn-launch",id:"learn/learn-launch",title:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",source:"@site/../docs/learn/learn-launch.md",sourceDirName:"learn",slug:"/learn-launch",permalink:"/docs/learn-launch",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-launch.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1690996096,formattedLastUpdatedAt:"Aug 2, 2023",frontMatter:{id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot 2.0","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},sidebar:"docs",previous:{title:"Gov1 Treasury",permalink:"/docs/learn-treasury"},next:{title:"Redenomination of DOT",permalink:"/docs/learn-redenomination"}},d={},u=[{value:"The PoA Launch",id:"the-poa-launch",level:2},{value:"Nominated Proof of Stake",id:"nominated-proof-of-stake",level:2},{value:"Governance",id:"governance",level:2},{value:"Removal of Sudo",id:"removal-of-sudo",level:2},{value:"Balance Transfers",id:"balance-transfers",level:2},{value:"Core Functionality",id:"core-functionality",level:2}],p={toc:u},h="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,l);return(0,r.kt)(h,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The Polkadot network has a phased roll-out plan, with important milestones toward decentralization\nmarking each phase. Keep up-to-date with the Polkadot's phased roll-out plan at by viewing the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/launch-roadmap/"},"roadmap")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Current Phase: Post-launch Upgrades")),(0,r.kt)("admonition",{title:"Claims",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For the most update-to-date information on DOT claims (if you bought your DOTs before Polkadot went\nlive), check out the following claiming resources and tutorials:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063553-why-do-i-need-to-claim-my-dot-tokens-and-is-there-a-deadline-"},"Why do I need to claim my DOT tokens, and is there a deadline?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063667-i-claimed-my-dot-before-polkadot-went-live-but-still-see-zero-balance-"},"I claimed my DOT before Polkadot went live, but still see zero balance!")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000138217-how-to-claim-your-dot-tutorial"},"How to claim your DOT - Tutorial")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000103605-how-do-i-know-my-claim-worked-"},"How do I know my claim worked?")))),(0,r.kt)("h2",{id:"the-poa-launch"},"The PoA Launch"),(0,r.kt)("p",null,"The Genesis block of the Polkadot network was launched on May 26, 2020, as a Proof of Authority\n(PoA) network. Governance was restricted to the single Sudo (super-user) key, which was held by Web3\nFoundation to issue the commands and upgrades necessary to complete the launch process. During this\ntime, validators started joining the network and signaling their intention to participate in\nconsensus."),(0,r.kt)("h2",{id:"nominated-proof-of-stake"},"Nominated Proof of Stake"),(0,r.kt)("p",null,"Once Web3 Foundation was confident in the stability of the network and there was a sufficient number\nof validator intentions, Web3 Foundation used ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/InekMjJpVdo"},"Sudo")," ","\u2014"," a\nsuperuser account with access to governance functions ","\u2014"," to initiate the first validator\nelection. Following this election, the network transitioned from PoA into its second phase,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Nominated Proof of Stake (NPoS)"),", on June 18, 2020."),(0,r.kt)("h2",{id:"governance"},"Governance"),(0,r.kt)("p",null,"After the chain had been running well with the validator set, the Sudo key issued a runtime upgrade\nthat enabled the suite of governance modules in Polkadot; namely, the modules to enable a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#council"},"Council"),", a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#technical-committee"},"Technical Committee"),", and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#public-referenda"},"public referenda"),"."),(0,r.kt)("h2",{id:"removal-of-sudo"},"Removal of Sudo"),(0,r.kt)("p",null,"The Sudo module was removed by a runtime upgrade on July 20, 2020, transitioning the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"governance")," of the chain into the hands of the token (DOT) holders."),(0,r.kt)("p",null,"From this point, the network has been entirely in the hands of the token holders and is no longer\nunder control of any centralized authority."),(0,r.kt)("h2",{id:"balance-transfers"},"Balance Transfers"),(0,r.kt)("p",null,"To enable balance transfers, the community\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-democracy"},"made a public proposal")," for a runtime upgrade that lifted\nthe restriction on balance transfers. Transfer functionality was subsequently enabled on Polkadot at\nblock number 1_205_128 on August 18, 2020, at 16:39 UTC."),(0,r.kt)("h2",{id:"core-functionality"},"Core Functionality"),(0,r.kt)("p",null,"After five years of research and development and a multi-stage launch that began in May 2020,\nPolkadot launch was completed on December 18, 2021, with all auction-winning parachains producing\nblocks on the network."),(0,r.kt)("p",null,"Check out these resources for further information:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/parachains-are-live-polkadot-launch-is-now-complete/"},"Polkadot Network blog"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/s3yb3d/l_for_polkadot_launch_polkadot_a_to_z/"},"Polkadot A to Z: L for Polkadot Launch"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fbea1897.47e41d56.js b/assets/js/fbea1897.47e41d56.js new file mode 100644 index 000000000000..ff21485da894 --- /dev/null +++ b/assets/js/fbea1897.47e41d56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7280],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=c(n),h=o,m=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return n?a.createElement(m,l(l({ref:t},d),{},{components:n})):a.createElement(m,l({ref:t},d))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),l=["components"],i={id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},s=void 0,c={unversionedId:"learn/learn-launch",id:"learn/learn-launch",title:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",source:"@site/../docs/learn/learn-launch.md",sourceDirName:"learn",slug:"/learn-launch",permalink:"/docs/learn-launch",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-launch.md",tags:[],version:"current",lastUpdatedBy:"Radha",lastUpdatedAt:1696518281,formattedLastUpdatedAt:"Oct 5, 2023",frontMatter:{id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},sidebar:"docs",previous:{title:"Gov1 Treasury",permalink:"/docs/learn-treasury"},next:{title:"Redenomination of DOT",permalink:"/docs/learn-redenomination"}},d={},u=[{value:"The PoA Launch",id:"the-poa-launch",level:2},{value:"Nominated Proof of Stake",id:"nominated-proof-of-stake",level:2},{value:"Governance",id:"governance",level:2},{value:"Removal of Sudo",id:"removal-of-sudo",level:2},{value:"Balance Transfers",id:"balance-transfers",level:2},{value:"Core Functionality",id:"core-functionality",level:2}],p={toc:u},h="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,l);return(0,r.kt)(h,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The Polkadot network has a phased roll-out plan, with important milestones toward decentralization\nmarking each phase. Keep up-to-date with the Polkadot's phased roll-out plan at by viewing the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/launch-roadmap/"},"roadmap")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Current Phase: Post-launch Upgrades")),(0,r.kt)("admonition",{title:"Claims",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For the most update-to-date information on DOT claims (if you bought your DOTs before Polkadot went\nlive), check out the following claiming resources and tutorials:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063553-why-do-i-need-to-claim-my-dot-tokens-and-is-there-a-deadline-"},"Why do I need to claim my DOT tokens, and is there a deadline?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063667-i-claimed-my-dot-before-polkadot-went-live-but-still-see-zero-balance-"},"I claimed my DOT before Polkadot went live, but still see zero balance!")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000138217-how-to-claim-your-dot-tutorial"},"How to claim your DOT - Tutorial")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000103605-how-do-i-know-my-claim-worked-"},"How do I know my claim worked?")))),(0,r.kt)("h2",{id:"the-poa-launch"},"The PoA Launch"),(0,r.kt)("p",null,"The Genesis block of the Polkadot network was launched on May 26, 2020, as a Proof of Authority\n(PoA) network. Governance was restricted to the single Sudo (super-user) key, which was held by Web3\nFoundation to issue the commands and upgrades necessary to complete the launch process. During this\ntime, validators started joining the network and signaling their intention to participate in\nconsensus."),(0,r.kt)("h2",{id:"nominated-proof-of-stake"},"Nominated Proof of Stake"),(0,r.kt)("p",null,"Once Web3 Foundation was confident in the stability of the network and there was a sufficient number\nof validator intentions, Web3 Foundation used ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/InekMjJpVdo"},"Sudo")," ","\u2014"," a\nsuperuser account with access to governance functions ","\u2014"," to initiate the first validator\nelection. Following this election, the network transitioned from PoA into its second phase,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Nominated Proof of Stake (NPoS)"),", on June 18, 2020."),(0,r.kt)("h2",{id:"governance"},"Governance"),(0,r.kt)("p",null,"After the chain had been running well with the validator set, the Sudo key issued a runtime upgrade\nthat enabled the suite of governance modules in Polkadot; namely, the modules to enable a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#council"},"Council"),", a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#technical-committee"},"Technical Committee"),", and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#public-referenda"},"public referenda"),"."),(0,r.kt)("h2",{id:"removal-of-sudo"},"Removal of Sudo"),(0,r.kt)("p",null,"The Sudo module was removed by a runtime upgrade on July 20, 2020, transitioning the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"governance")," of the chain into the hands of the token (DOT) holders."),(0,r.kt)("p",null,"From this point, the network has been entirely in the hands of the token holders and is no longer\nunder control of any centralized authority."),(0,r.kt)("h2",{id:"balance-transfers"},"Balance Transfers"),(0,r.kt)("p",null,"To enable balance transfers, the community\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-democracy"},"made a public proposal")," for a runtime upgrade that lifted\nthe restriction on balance transfers. Transfer functionality was subsequently enabled on Polkadot at\nblock number 1_205_128 on August 18, 2020, at 16:39 UTC."),(0,r.kt)("h2",{id:"core-functionality"},"Core Functionality"),(0,r.kt)("p",null,"After five years of research and development and a multi-stage launch that began in May 2020,\nPolkadot launch was completed on December 18, 2021, with all auction-winning parachains producing\nblocks on the network."),(0,r.kt)("p",null,"Check out these resources for further information:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/parachains-are-live-polkadot-launch-is-now-complete/"},"Polkadot Network blog"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/s3yb3d/l_for_polkadot_launch_polkadot_a_to_z/"},"Polkadot A to Z: L for Polkadot Launch"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.554e0a21.js b/assets/js/runtime~main.2dc5ab42.js similarity index 98% rename from assets/js/runtime~main.554e0a21.js rename to assets/js/runtime~main.2dc5ab42.js index b594a5ac22a2..e067f12d1cad 100644 --- a/assets/js/runtime~main.554e0a21.js +++ b/assets/js/runtime~main.2dc5ab42.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,c,a,d={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var c=b[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=d,e=[],r.O=(f,c,a,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,a,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,c({}),c([]),c(c)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var c in f)r.o(f,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,c)=>(r.f[c](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"f4fb6e9c",6:"408829bd",12:"1d6d4797",53:"935f2afb",63:"9f319605",192:"f189ca9f",217:"c7a044bb",250:"f2717f8e",315:"9528ac88",502:"2d429218",537:"3829cf1d",601:"0c06bca3",609:"d569989b",626:"79d4be33",657:"386bfe51",691:"145746f5",785:"04a995e6",810:"23498fd5",1062:"f90fa732",1083:"899aadcc",1090:"cfd53ea4",1211:"73c3bebc",1213:"25f2bd2a",1239:"f359a251",1288:"fabebe44",1299:"74df6a22",1372:"b61f6dc7",1415:"4d76887f",1419:"f750c690",1446:"5136ee31",1481:"4dff184a",1486:"8dd7cee0",1494:"b21dd8a7",1506:"c977dfe8",1529:"ffe9c3c9",1585:"33b0bcab",1592:"b336bb09",1598:"7fbac68a",1678:"fa343ad1",1686:"f7191335",1703:"a5002e4a",1723:"0df78d26",1748:"987d08ef",1774:"9e6341e5",1786:"d9ef69a7",1825:"48074a08",1872:"78e1e977",1953:"1ed3671a",1957:"df154d69",1966:"f47489cd",1979:"0cb62240",2008:"4f031749",2042:"dd32e389",2078:"84f79495",2117:"21877fa5",2136:"ecb495b7",2169:"1646726c",2194:"6151e7ce",2242:"f3027c84",2248:"da9f79cb",2354:"493c7fdf",2399:"8d3a1bf8",2483:"d6d2b2d5",2505:"9a101178",2507:"7c78c461",2508:"918b38b6",2552:"863c4753",2609:"db0b42b0",2633:"e2e89062",2665:"f4130007",2677:"ece9fdae",2704:"f3bde756",2712:"c2c6a3a6",2754:"78868b16",2758:"9e3f6a8a",2791:"7d54ab5a",2884:"5d69d9d4",2909:"f4200fe5",2914:"2be0d940",2949:"2ea50c63",3066:"af40287e",3132:"85afe03a",3262:"8a8a7d05",3330:"e31fc461",3332:"3497b7c6",3347:"32dac8d4",3348:"7ccc428f",3356:"f14351c1",3484:"5c90fc9b",3513:"41b7b3e8",3554:"d5909206",3599:"21899dd2",3620:"f137ce68",3635:"75a6958b",3665:"f1585bfb",3667:"b0cbc1d4",3668:"b225a2ce",3669:"dbbd9e76",3757:"bea375d6",3842:"ff6596ea",3933:"cda87995",3944:"fac80962",3945:"f8518919",4004:"ec3b6a32",4097:"eef3f1dd",4105:"702d5d94",4174:"a7c27f4d",4195:"c4f5d8e4",4355:"19ed4d4c",4363:"f2c21b54",4379:"c662f00a",4428:"991ceaa9",4445:"4d9b9869",4476:"f4003c83",4507:"a7b37b86",4537:"1ae2b102",4541:"3e56470e",4543:"295fff6c",4566:"694e7470",4620:"48d75399",4634:"54338ffb",4666:"f41c4e9d",4672:"43ee4f22",4696:"1dc05242",4909:"f0855ff9",4916:"c1bbdb2a",5005:"320c8a05",5011:"7e9389ad",5013:"c41801b5",5103:"db039c7f",5157:"d27ae88d",5281:"31bd35e0",5422:"b3719d54",5483:"f7acb151",5492:"1882e65d",5526:"0c68fb82",5548:"d6b0148d",5651:"9e2042f5",5704:"b9b4ec9e",5989:"fbf58567",6104:"c7c5ba1a",6140:"32e8da05",6220:"d01f45b7",6253:"a29dc56e",6255:"452ad91d",6277:"a62d9768",6294:"bbba852d",6312:"dbc4065c",6357:"43cda9e8",6373:"ceaa29cb",6482:"49816380",6585:"13b7bafa",6598:"ca9fe671",6689:"f2521980",6730:"fea93377",6776:"666ba125",6827:"279fb1d6",6862:"60e73337",6918:"29a046f3",6920:"ccc1222e",6946:"4642ab5c",7022:"543610b9",7061:"feea648c",7202:"4a8eb552",7211:"f44ed8f8",7280:"fbea1897",7288:"6f1a81b8",7313:"db3d6c4d",7368:"bb8b1738",7388:"bd701914",7466:"a5b3561d",7485:"d3db551a",7633:"b940de31",7654:"c07c2447",7683:"cc44e8fd",7714:"591eca19",7778:"41871d53",7799:"8b670b2b",7823:"9e76b49d",7830:"15985664",7837:"0a3f0c9b",7858:"d6a97e7e",7908:"33bbe353",7918:"17896441",7920:"1a4e3797",7940:"ad762f86",7961:"a2800a5b",8034:"fecdcc34",8067:"69b97ecd",8080:"77a2b809",8115:"8247eba8",8138:"694672cd",8139:"386099fc",8178:"9a679a70",8215:"30d868e8",8236:"ffd76171",8270:"12331e8b",8355:"c91a9c06",8361:"824749c6",8618:"e4f3654b",8648:"71ed82b9",8702:"a74a59a0",8757:"83d4859f",8791:"ab138bf8",8831:"3bd77df4",8855:"d3a753cf",8860:"766a10e1",8866:"98a30fd8",8876:"31c99aa1",8901:"b48c599b",9062:"b38833d4",9071:"60738e36",9112:"a4b71220",9126:"924835c1",9217:"64c7e1cc",9226:"2f3b630e",9247:"8167490d",9276:"e344dd79",9315:"6d2ffbf3",9323:"131c7f55",9383:"a996ffc3",9478:"c7a2145e",9514:"1be78505",9548:"f95cee6f",9626:"32c9742a",9764:"dc776cbc",9779:"cd144357",9802:"1e15616a",9806:"51fbc2c9",9817:"14eb3368",9905:"b0cb055f",9993:"482bfb5c"}[e]||e)+"."+{1:"5563b650",6:"1f73546c",12:"1d49c46e",53:"989b826e",63:"4e5acc1b",192:"2ac0e4f9",217:"0102c432",250:"11cfd82d",315:"5a1a76c0",502:"b0bc7324",537:"2aa85719",601:"fdd54faa",609:"7ea29085",626:"04fdcb9b",657:"f5513d14",691:"057bf6a6",785:"8b77bad6",810:"a76eb85f",1062:"f79ad7a8",1083:"ac5baa92",1090:"26932415",1211:"ff50cb20",1213:"fee6731f",1239:"229ef67b",1288:"a5dae372",1299:"7dda7011",1372:"4867e413",1415:"68f49da4",1419:"3038c1cd",1446:"2265d608",1481:"ee5894bb",1486:"b802faeb",1494:"06ba09e6",1506:"13ff4738",1529:"5e89d63c",1585:"e1ec66d3",1592:"5581008d",1598:"c2253902",1678:"fd4b34be",1686:"6d75f37a",1703:"11033614",1723:"679d1be0",1748:"4e45b476",1774:"1c405b46",1786:"6a2d15ec",1825:"7886665d",1872:"342366ba",1953:"e4392cf0",1957:"20d04add",1966:"159ec2ae",1979:"6d282955",2008:"d9fd5038",2042:"58ff2936",2078:"17164550",2117:"17c8218b",2136:"dbf5ae7f",2169:"f5054254",2194:"dc7e4b47",2242:"ed88ff37",2248:"f8b898cb",2354:"06d84356",2399:"ce4dc016",2483:"e1906e64",2505:"93f7a5dc",2507:"1df35914",2508:"e6d6efec",2552:"6484aed3",2609:"c959d9e0",2633:"07cb844a",2665:"5df8cc2a",2677:"6a600a13",2704:"c83746c5",2712:"3547dfc9",2754:"82d7eade",2758:"7a12fb0f",2791:"e6f92028",2859:"f06cf7d7",2884:"3b223315",2909:"025c4bbe",2914:"480a9951",2949:"7738f0eb",3066:"2d6ba895",3132:"85a16703",3262:"d7f83aec",3330:"f8f9d28c",3332:"59059207",3347:"cbbdbed4",3348:"ec74ef03",3356:"92ca1efd",3484:"e60b3258",3513:"06973ce4",3554:"6dc12371",3599:"e4d7458a",3620:"c1d05422",3635:"380802aa",3665:"fb1d42b5",3667:"b8d02200",3668:"b34aa74c",3669:"127bb89f",3757:"bc4ede3b",3842:"e0217335",3933:"72a66ef4",3944:"a4c24ce9",3945:"b5d18aaa",4004:"5b01424d",4097:"8a90e754",4105:"3b4a799e",4174:"93985089",4195:"66467c10",4355:"2d9fa8b7",4363:"e88e5818",4379:"2d13fe17",4428:"67f2e04e",4445:"75e079a4",4476:"5948c0f4",4507:"bed350d5",4537:"c965ef47",4541:"978ae83c",4543:"d644a3e2",4566:"ab0d60ad",4620:"d02a17da",4634:"f0073246",4666:"13717c6f",4672:"7513894d",4696:"27d5f43b",4909:"3ae4713d",4916:"4b3a7688",4972:"2c004fcc",5005:"2dd41bcb",5011:"98b0975e",5013:"da533e91",5103:"3f268ad3",5157:"899f2267",5281:"6761b31b",5422:"8c5403fb",5483:"daef5619",5492:"7b10a32b",5526:"20b79d53",5548:"e68f018e",5651:"701df6e6",5704:"70bd0ba6",5989:"0fdc298d",6104:"5ca45843",6140:"952b82c2",6220:"8b344451",6253:"fe535738",6255:"8509f60e",6277:"a769d3bc",6294:"b077023f",6312:"ed91dbbd",6316:"86a075e6",6357:"6a6a3bfc",6373:"b8a24443",6482:"502a0b67",6495:"4071f460",6585:"69ef2e32",6598:"5f760aa9",6689:"60ffe859",6730:"52c45925",6776:"0a7bd7c5",6780:"35cedf78",6827:"3fb13981",6862:"494b1047",6918:"61dac2e1",6920:"a34cbecc",6945:"96d36007",6946:"62348511",7022:"083a8378",7061:"89e327b0",7202:"795d2adc",7211:"bf56e06e",7280:"306e56e9",7288:"59752a80",7313:"f998873b",7368:"77d8ddea",7388:"53d48c10",7466:"6c38d255",7485:"82d47cfd",7633:"522211f9",7654:"7e8735bb",7683:"7de880dc",7714:"a69296c3",7724:"05bda7f2",7778:"8da5b4da",7799:"5d0c65da",7823:"6c8a30f2",7830:"a2703576",7837:"b9260b47",7858:"f9862ed2",7908:"0da511b2",7918:"7dd2ce47",7920:"56c00901",7940:"e5c7d8f2",7961:"c0d1b031",8034:"dca0d1af",8067:"af36ecc3",8080:"1adae4dd",8115:"2ebb714e",8138:"11462c7d",8139:"7c760262",8178:"62f5ed0b",8215:"775d309b",8236:"63fecdb9",8270:"1dd5ba80",8355:"caef1eb9",8361:"5c7bc601",8618:"f5896277",8648:"34316a10",8702:"cf207d29",8757:"4f1ee155",8791:"a3cd97ad",8831:"16eb75ba",8855:"9d00af7a",8860:"48171767",8866:"4bdda915",8876:"a30609d2",8894:"ba661129",8901:"cc3ae736",9062:"9cc9144f",9071:"0695351a",9112:"38b794db",9126:"f0242db8",9217:"d87f81ce",9226:"3d3d91d5",9247:"a0154dc8",9276:"c9f1c397",9315:"d5006aa3",9323:"faa9a3ec",9383:"dec8392d",9447:"7b380a6b",9478:"8f4b04f5",9487:"ca8bca46",9514:"693800c6",9548:"f095b5ce",9626:"b43c6d01",9764:"012ce7bf",9779:"4c7efdf9",9802:"11684b0f",9806:"c3977137",9817:"beb63dbf",9905:"3e1ce1bd",9993:"98eb3afc"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},r.l=(e,f,c,d)=>{if(a[e])a[e].push(f);else{var b,t;if(void 0!==c)for(var o=document.getElementsByTagName("script"),n=0;n{b.onerror=b.onload=null,clearTimeout(u);var d=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),f)return f(c)},u=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),t&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={15985664:"7830",17896441:"7918",49816380:"6482",f4fb6e9c:"1","408829bd":"6","1d6d4797":"12","935f2afb":"53","9f319605":"63",f189ca9f:"192",c7a044bb:"217",f2717f8e:"250","9528ac88":"315","2d429218":"502","3829cf1d":"537","0c06bca3":"601",d569989b:"609","79d4be33":"626","386bfe51":"657","145746f5":"691","04a995e6":"785","23498fd5":"810",f90fa732:"1062","899aadcc":"1083",cfd53ea4:"1090","73c3bebc":"1211","25f2bd2a":"1213",f359a251:"1239",fabebe44:"1288","74df6a22":"1299",b61f6dc7:"1372","4d76887f":"1415",f750c690:"1419","5136ee31":"1446","4dff184a":"1481","8dd7cee0":"1486",b21dd8a7:"1494",c977dfe8:"1506",ffe9c3c9:"1529","33b0bcab":"1585",b336bb09:"1592","7fbac68a":"1598",fa343ad1:"1678",f7191335:"1686",a5002e4a:"1703","0df78d26":"1723","987d08ef":"1748","9e6341e5":"1774",d9ef69a7:"1786","48074a08":"1825","78e1e977":"1872","1ed3671a":"1953",df154d69:"1957",f47489cd:"1966","0cb62240":"1979","4f031749":"2008",dd32e389:"2042","84f79495":"2078","21877fa5":"2117",ecb495b7:"2136","1646726c":"2169","6151e7ce":"2194",f3027c84:"2242",da9f79cb:"2248","493c7fdf":"2354","8d3a1bf8":"2399",d6d2b2d5:"2483","9a101178":"2505","7c78c461":"2507","918b38b6":"2508","863c4753":"2552",db0b42b0:"2609",e2e89062:"2633",f4130007:"2665",ece9fdae:"2677",f3bde756:"2704",c2c6a3a6:"2712","78868b16":"2754","9e3f6a8a":"2758","7d54ab5a":"2791","5d69d9d4":"2884",f4200fe5:"2909","2be0d940":"2914","2ea50c63":"2949",af40287e:"3066","85afe03a":"3132","8a8a7d05":"3262",e31fc461:"3330","3497b7c6":"3332","32dac8d4":"3347","7ccc428f":"3348",f14351c1:"3356","5c90fc9b":"3484","41b7b3e8":"3513",d5909206:"3554","21899dd2":"3599",f137ce68:"3620","75a6958b":"3635",f1585bfb:"3665",b0cbc1d4:"3667",b225a2ce:"3668",dbbd9e76:"3669",bea375d6:"3757",ff6596ea:"3842",cda87995:"3933",fac80962:"3944",f8518919:"3945",ec3b6a32:"4004",eef3f1dd:"4097","702d5d94":"4105",a7c27f4d:"4174",c4f5d8e4:"4195","19ed4d4c":"4355",f2c21b54:"4363",c662f00a:"4379","991ceaa9":"4428","4d9b9869":"4445",f4003c83:"4476",a7b37b86:"4507","1ae2b102":"4537","3e56470e":"4541","295fff6c":"4543","694e7470":"4566","48d75399":"4620","54338ffb":"4634",f41c4e9d:"4666","43ee4f22":"4672","1dc05242":"4696",f0855ff9:"4909",c1bbdb2a:"4916","320c8a05":"5005","7e9389ad":"5011",c41801b5:"5013",db039c7f:"5103",d27ae88d:"5157","31bd35e0":"5281",b3719d54:"5422",f7acb151:"5483","1882e65d":"5492","0c68fb82":"5526",d6b0148d:"5548","9e2042f5":"5651",b9b4ec9e:"5704",fbf58567:"5989",c7c5ba1a:"6104","32e8da05":"6140",d01f45b7:"6220",a29dc56e:"6253","452ad91d":"6255",a62d9768:"6277",bbba852d:"6294",dbc4065c:"6312","43cda9e8":"6357",ceaa29cb:"6373","13b7bafa":"6585",ca9fe671:"6598",f2521980:"6689",fea93377:"6730","666ba125":"6776","279fb1d6":"6827","60e73337":"6862","29a046f3":"6918",ccc1222e:"6920","4642ab5c":"6946","543610b9":"7022",feea648c:"7061","4a8eb552":"7202",f44ed8f8:"7211",fbea1897:"7280","6f1a81b8":"7288",db3d6c4d:"7313",bb8b1738:"7368",bd701914:"7388",a5b3561d:"7466",d3db551a:"7485",b940de31:"7633",c07c2447:"7654",cc44e8fd:"7683","591eca19":"7714","41871d53":"7778","8b670b2b":"7799","9e76b49d":"7823","0a3f0c9b":"7837",d6a97e7e:"7858","33bbe353":"7908","1a4e3797":"7920",ad762f86:"7940",a2800a5b:"7961",fecdcc34:"8034","69b97ecd":"8067","77a2b809":"8080","8247eba8":"8115","694672cd":"8138","386099fc":"8139","9a679a70":"8178","30d868e8":"8215",ffd76171:"8236","12331e8b":"8270",c91a9c06:"8355","824749c6":"8361",e4f3654b:"8618","71ed82b9":"8648",a74a59a0:"8702","83d4859f":"8757",ab138bf8:"8791","3bd77df4":"8831",d3a753cf:"8855","766a10e1":"8860","98a30fd8":"8866","31c99aa1":"8876",b48c599b:"8901",b38833d4:"9062","60738e36":"9071",a4b71220:"9112","924835c1":"9126","64c7e1cc":"9217","2f3b630e":"9226","8167490d":"9247",e344dd79:"9276","6d2ffbf3":"9315","131c7f55":"9323",a996ffc3:"9383",c7a2145e:"9478","1be78505":"9514",f95cee6f:"9548","32c9742a":"9626",dc776cbc:"9764",cd144357:"9779","1e15616a":"9802","51fbc2c9":"9806","14eb3368":"9817",b0cb055f:"9905","482bfb5c":"9993"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,c)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((c,d)=>a=e[f]=[c,d]));c.push(a[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(c=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,c)=>{var a,d,[b,t,o]=c,n=0;if(b.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(c);n{"use strict";var e,f,c,a,d={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var c=b[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=d,e=[],r.O=(f,c,a,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,a,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,c({}),c([]),c(c)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var c in f)r.o(f,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,c)=>(r.f[c](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"f4fb6e9c",6:"408829bd",12:"1d6d4797",53:"935f2afb",63:"9f319605",192:"f189ca9f",217:"c7a044bb",250:"f2717f8e",315:"9528ac88",502:"2d429218",537:"3829cf1d",601:"0c06bca3",609:"d569989b",626:"79d4be33",657:"386bfe51",691:"145746f5",785:"04a995e6",810:"23498fd5",1062:"f90fa732",1083:"899aadcc",1090:"cfd53ea4",1211:"73c3bebc",1213:"25f2bd2a",1239:"f359a251",1288:"fabebe44",1299:"74df6a22",1372:"b61f6dc7",1415:"4d76887f",1419:"f750c690",1446:"5136ee31",1481:"4dff184a",1486:"8dd7cee0",1494:"b21dd8a7",1506:"c977dfe8",1529:"ffe9c3c9",1585:"33b0bcab",1592:"b336bb09",1598:"7fbac68a",1678:"fa343ad1",1686:"f7191335",1703:"a5002e4a",1723:"0df78d26",1748:"987d08ef",1774:"9e6341e5",1786:"d9ef69a7",1825:"48074a08",1872:"78e1e977",1953:"1ed3671a",1957:"df154d69",1966:"f47489cd",1979:"0cb62240",2008:"4f031749",2042:"dd32e389",2078:"84f79495",2117:"21877fa5",2136:"ecb495b7",2169:"1646726c",2194:"6151e7ce",2242:"f3027c84",2248:"da9f79cb",2354:"493c7fdf",2399:"8d3a1bf8",2483:"d6d2b2d5",2505:"9a101178",2507:"7c78c461",2508:"918b38b6",2552:"863c4753",2609:"db0b42b0",2633:"e2e89062",2665:"f4130007",2677:"ece9fdae",2704:"f3bde756",2712:"c2c6a3a6",2754:"78868b16",2758:"9e3f6a8a",2791:"7d54ab5a",2884:"5d69d9d4",2909:"f4200fe5",2914:"2be0d940",2949:"2ea50c63",3066:"af40287e",3132:"85afe03a",3262:"8a8a7d05",3330:"e31fc461",3332:"3497b7c6",3347:"32dac8d4",3348:"7ccc428f",3356:"f14351c1",3484:"5c90fc9b",3513:"41b7b3e8",3554:"d5909206",3599:"21899dd2",3620:"f137ce68",3635:"75a6958b",3665:"f1585bfb",3667:"b0cbc1d4",3668:"b225a2ce",3669:"dbbd9e76",3757:"bea375d6",3842:"ff6596ea",3933:"cda87995",3944:"fac80962",3945:"f8518919",4004:"ec3b6a32",4097:"eef3f1dd",4105:"702d5d94",4174:"a7c27f4d",4195:"c4f5d8e4",4355:"19ed4d4c",4363:"f2c21b54",4379:"c662f00a",4428:"991ceaa9",4445:"4d9b9869",4476:"f4003c83",4507:"a7b37b86",4537:"1ae2b102",4541:"3e56470e",4543:"295fff6c",4566:"694e7470",4620:"48d75399",4634:"54338ffb",4666:"f41c4e9d",4672:"43ee4f22",4696:"1dc05242",4909:"f0855ff9",4916:"c1bbdb2a",5005:"320c8a05",5011:"7e9389ad",5013:"c41801b5",5103:"db039c7f",5157:"d27ae88d",5281:"31bd35e0",5422:"b3719d54",5483:"f7acb151",5492:"1882e65d",5526:"0c68fb82",5548:"d6b0148d",5651:"9e2042f5",5704:"b9b4ec9e",5989:"fbf58567",6104:"c7c5ba1a",6140:"32e8da05",6220:"d01f45b7",6253:"a29dc56e",6255:"452ad91d",6277:"a62d9768",6294:"bbba852d",6312:"dbc4065c",6357:"43cda9e8",6373:"ceaa29cb",6482:"49816380",6585:"13b7bafa",6598:"ca9fe671",6689:"f2521980",6730:"fea93377",6776:"666ba125",6827:"279fb1d6",6862:"60e73337",6918:"29a046f3",6920:"ccc1222e",6946:"4642ab5c",7022:"543610b9",7061:"feea648c",7202:"4a8eb552",7211:"f44ed8f8",7280:"fbea1897",7288:"6f1a81b8",7313:"db3d6c4d",7368:"bb8b1738",7388:"bd701914",7466:"a5b3561d",7485:"d3db551a",7633:"b940de31",7654:"c07c2447",7683:"cc44e8fd",7714:"591eca19",7778:"41871d53",7799:"8b670b2b",7823:"9e76b49d",7830:"15985664",7837:"0a3f0c9b",7858:"d6a97e7e",7908:"33bbe353",7918:"17896441",7920:"1a4e3797",7940:"ad762f86",7961:"a2800a5b",8034:"fecdcc34",8067:"69b97ecd",8080:"77a2b809",8115:"8247eba8",8138:"694672cd",8139:"386099fc",8178:"9a679a70",8215:"30d868e8",8236:"ffd76171",8270:"12331e8b",8355:"c91a9c06",8361:"824749c6",8618:"e4f3654b",8648:"71ed82b9",8702:"a74a59a0",8757:"83d4859f",8791:"ab138bf8",8831:"3bd77df4",8855:"d3a753cf",8860:"766a10e1",8866:"98a30fd8",8876:"31c99aa1",8901:"b48c599b",9062:"b38833d4",9071:"60738e36",9112:"a4b71220",9126:"924835c1",9217:"64c7e1cc",9226:"2f3b630e",9247:"8167490d",9276:"e344dd79",9315:"6d2ffbf3",9323:"131c7f55",9383:"a996ffc3",9478:"c7a2145e",9514:"1be78505",9548:"f95cee6f",9626:"32c9742a",9764:"dc776cbc",9779:"cd144357",9802:"1e15616a",9806:"51fbc2c9",9817:"14eb3368",9905:"b0cb055f",9993:"482bfb5c"}[e]||e)+"."+{1:"5563b650",6:"1f73546c",12:"1d49c46e",53:"989b826e",63:"4e5acc1b",192:"2ac0e4f9",217:"0102c432",250:"11cfd82d",315:"5a1a76c0",502:"b0bc7324",537:"2aa85719",601:"fdd54faa",609:"7ea29085",626:"04fdcb9b",657:"f5513d14",691:"057bf6a6",785:"8b77bad6",810:"a76eb85f",1062:"f79ad7a8",1083:"ac5baa92",1090:"26932415",1211:"ff50cb20",1213:"fee6731f",1239:"229ef67b",1288:"a5dae372",1299:"7dda7011",1372:"4867e413",1415:"68f49da4",1419:"3038c1cd",1446:"2265d608",1481:"ee5894bb",1486:"b802faeb",1494:"06ba09e6",1506:"13ff4738",1529:"5e89d63c",1585:"e1ec66d3",1592:"5581008d",1598:"c2253902",1678:"fd4b34be",1686:"6d75f37a",1703:"11033614",1723:"679d1be0",1748:"4e45b476",1774:"1c405b46",1786:"6a2d15ec",1825:"7886665d",1872:"342366ba",1953:"e4392cf0",1957:"20d04add",1966:"159ec2ae",1979:"6d282955",2008:"d9fd5038",2042:"58ff2936",2078:"17164550",2117:"17c8218b",2136:"dbf5ae7f",2169:"f5054254",2194:"dc7e4b47",2242:"ed88ff37",2248:"f8b898cb",2354:"06d84356",2399:"ce4dc016",2483:"e1906e64",2505:"93f7a5dc",2507:"1df35914",2508:"f22722ab",2552:"6484aed3",2609:"c959d9e0",2633:"07cb844a",2665:"5df8cc2a",2677:"6a600a13",2704:"c83746c5",2712:"3547dfc9",2754:"82d7eade",2758:"7a12fb0f",2791:"e6f92028",2859:"f06cf7d7",2884:"3b223315",2909:"025c4bbe",2914:"480a9951",2949:"7738f0eb",3066:"2d6ba895",3132:"85a16703",3262:"c248e7da",3330:"f8f9d28c",3332:"59059207",3347:"cbbdbed4",3348:"ec74ef03",3356:"92ca1efd",3484:"e60b3258",3513:"06973ce4",3554:"6dc12371",3599:"e4d7458a",3620:"c1d05422",3635:"380802aa",3665:"fb1d42b5",3667:"b8d02200",3668:"b34aa74c",3669:"127bb89f",3757:"bc4ede3b",3842:"e0217335",3933:"72a66ef4",3944:"a4c24ce9",3945:"b5d18aaa",4004:"5b01424d",4097:"8a90e754",4105:"3b4a799e",4174:"93985089",4195:"66467c10",4355:"2d9fa8b7",4363:"e88e5818",4379:"2d13fe17",4428:"67f2e04e",4445:"75e079a4",4476:"5948c0f4",4507:"bed350d5",4537:"c965ef47",4541:"978ae83c",4543:"d644a3e2",4566:"ab0d60ad",4620:"d02a17da",4634:"f0073246",4666:"13717c6f",4672:"7513894d",4696:"27d5f43b",4909:"3ae4713d",4916:"4b3a7688",4972:"2c004fcc",5005:"2dd41bcb",5011:"98b0975e",5013:"da533e91",5103:"3f268ad3",5157:"899f2267",5281:"6761b31b",5422:"8c5403fb",5483:"daef5619",5492:"7b10a32b",5526:"20b79d53",5548:"e68f018e",5651:"701df6e6",5704:"70bd0ba6",5989:"0fdc298d",6104:"5ca45843",6140:"952b82c2",6220:"8b344451",6253:"fe535738",6255:"8509f60e",6277:"a769d3bc",6294:"b077023f",6312:"ed91dbbd",6316:"86a075e6",6357:"6a6a3bfc",6373:"b8a24443",6482:"502a0b67",6495:"4071f460",6585:"69ef2e32",6598:"5f760aa9",6689:"60ffe859",6730:"52c45925",6776:"0a7bd7c5",6780:"35cedf78",6827:"3fb13981",6862:"494b1047",6918:"61dac2e1",6920:"a34cbecc",6945:"96d36007",6946:"62348511",7022:"083a8378",7061:"89e327b0",7202:"795d2adc",7211:"bf56e06e",7280:"47e41d56",7288:"59752a80",7313:"f998873b",7368:"77d8ddea",7388:"53d48c10",7466:"6c38d255",7485:"82d47cfd",7633:"522211f9",7654:"7e8735bb",7683:"7de880dc",7714:"a69296c3",7724:"05bda7f2",7778:"8da5b4da",7799:"5d0c65da",7823:"6c8a30f2",7830:"a2703576",7837:"b9260b47",7858:"f9862ed2",7908:"0da511b2",7918:"7dd2ce47",7920:"56c00901",7940:"e5c7d8f2",7961:"c0d1b031",8034:"dca0d1af",8067:"af36ecc3",8080:"1adae4dd",8115:"2ebb714e",8138:"11462c7d",8139:"7c760262",8178:"62f5ed0b",8215:"775d309b",8236:"63fecdb9",8270:"1dd5ba80",8355:"caef1eb9",8361:"5c7bc601",8618:"f5896277",8648:"34316a10",8702:"cf207d29",8757:"4f1ee155",8791:"a3cd97ad",8831:"16eb75ba",8855:"9d00af7a",8860:"48171767",8866:"4bdda915",8876:"a30609d2",8894:"ba661129",8901:"cc3ae736",9062:"9cc9144f",9071:"0695351a",9112:"38b794db",9126:"f0242db8",9217:"d87f81ce",9226:"3d3d91d5",9247:"a0154dc8",9276:"c9f1c397",9315:"d5006aa3",9323:"faa9a3ec",9383:"dec8392d",9447:"7b380a6b",9478:"8f4b04f5",9487:"ca8bca46",9514:"693800c6",9548:"f095b5ce",9626:"b43c6d01",9764:"012ce7bf",9779:"4c7efdf9",9802:"11684b0f",9806:"c3977137",9817:"beb63dbf",9905:"3e1ce1bd",9993:"98eb3afc"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},r.l=(e,f,c,d)=>{if(a[e])a[e].push(f);else{var b,t;if(void 0!==c)for(var o=document.getElementsByTagName("script"),n=0;n{b.onerror=b.onload=null,clearTimeout(u);var d=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),f)return f(c)},u=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),t&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={15985664:"7830",17896441:"7918",49816380:"6482",f4fb6e9c:"1","408829bd":"6","1d6d4797":"12","935f2afb":"53","9f319605":"63",f189ca9f:"192",c7a044bb:"217",f2717f8e:"250","9528ac88":"315","2d429218":"502","3829cf1d":"537","0c06bca3":"601",d569989b:"609","79d4be33":"626","386bfe51":"657","145746f5":"691","04a995e6":"785","23498fd5":"810",f90fa732:"1062","899aadcc":"1083",cfd53ea4:"1090","73c3bebc":"1211","25f2bd2a":"1213",f359a251:"1239",fabebe44:"1288","74df6a22":"1299",b61f6dc7:"1372","4d76887f":"1415",f750c690:"1419","5136ee31":"1446","4dff184a":"1481","8dd7cee0":"1486",b21dd8a7:"1494",c977dfe8:"1506",ffe9c3c9:"1529","33b0bcab":"1585",b336bb09:"1592","7fbac68a":"1598",fa343ad1:"1678",f7191335:"1686",a5002e4a:"1703","0df78d26":"1723","987d08ef":"1748","9e6341e5":"1774",d9ef69a7:"1786","48074a08":"1825","78e1e977":"1872","1ed3671a":"1953",df154d69:"1957",f47489cd:"1966","0cb62240":"1979","4f031749":"2008",dd32e389:"2042","84f79495":"2078","21877fa5":"2117",ecb495b7:"2136","1646726c":"2169","6151e7ce":"2194",f3027c84:"2242",da9f79cb:"2248","493c7fdf":"2354","8d3a1bf8":"2399",d6d2b2d5:"2483","9a101178":"2505","7c78c461":"2507","918b38b6":"2508","863c4753":"2552",db0b42b0:"2609",e2e89062:"2633",f4130007:"2665",ece9fdae:"2677",f3bde756:"2704",c2c6a3a6:"2712","78868b16":"2754","9e3f6a8a":"2758","7d54ab5a":"2791","5d69d9d4":"2884",f4200fe5:"2909","2be0d940":"2914","2ea50c63":"2949",af40287e:"3066","85afe03a":"3132","8a8a7d05":"3262",e31fc461:"3330","3497b7c6":"3332","32dac8d4":"3347","7ccc428f":"3348",f14351c1:"3356","5c90fc9b":"3484","41b7b3e8":"3513",d5909206:"3554","21899dd2":"3599",f137ce68:"3620","75a6958b":"3635",f1585bfb:"3665",b0cbc1d4:"3667",b225a2ce:"3668",dbbd9e76:"3669",bea375d6:"3757",ff6596ea:"3842",cda87995:"3933",fac80962:"3944",f8518919:"3945",ec3b6a32:"4004",eef3f1dd:"4097","702d5d94":"4105",a7c27f4d:"4174",c4f5d8e4:"4195","19ed4d4c":"4355",f2c21b54:"4363",c662f00a:"4379","991ceaa9":"4428","4d9b9869":"4445",f4003c83:"4476",a7b37b86:"4507","1ae2b102":"4537","3e56470e":"4541","295fff6c":"4543","694e7470":"4566","48d75399":"4620","54338ffb":"4634",f41c4e9d:"4666","43ee4f22":"4672","1dc05242":"4696",f0855ff9:"4909",c1bbdb2a:"4916","320c8a05":"5005","7e9389ad":"5011",c41801b5:"5013",db039c7f:"5103",d27ae88d:"5157","31bd35e0":"5281",b3719d54:"5422",f7acb151:"5483","1882e65d":"5492","0c68fb82":"5526",d6b0148d:"5548","9e2042f5":"5651",b9b4ec9e:"5704",fbf58567:"5989",c7c5ba1a:"6104","32e8da05":"6140",d01f45b7:"6220",a29dc56e:"6253","452ad91d":"6255",a62d9768:"6277",bbba852d:"6294",dbc4065c:"6312","43cda9e8":"6357",ceaa29cb:"6373","13b7bafa":"6585",ca9fe671:"6598",f2521980:"6689",fea93377:"6730","666ba125":"6776","279fb1d6":"6827","60e73337":"6862","29a046f3":"6918",ccc1222e:"6920","4642ab5c":"6946","543610b9":"7022",feea648c:"7061","4a8eb552":"7202",f44ed8f8:"7211",fbea1897:"7280","6f1a81b8":"7288",db3d6c4d:"7313",bb8b1738:"7368",bd701914:"7388",a5b3561d:"7466",d3db551a:"7485",b940de31:"7633",c07c2447:"7654",cc44e8fd:"7683","591eca19":"7714","41871d53":"7778","8b670b2b":"7799","9e76b49d":"7823","0a3f0c9b":"7837",d6a97e7e:"7858","33bbe353":"7908","1a4e3797":"7920",ad762f86:"7940",a2800a5b:"7961",fecdcc34:"8034","69b97ecd":"8067","77a2b809":"8080","8247eba8":"8115","694672cd":"8138","386099fc":"8139","9a679a70":"8178","30d868e8":"8215",ffd76171:"8236","12331e8b":"8270",c91a9c06:"8355","824749c6":"8361",e4f3654b:"8618","71ed82b9":"8648",a74a59a0:"8702","83d4859f":"8757",ab138bf8:"8791","3bd77df4":"8831",d3a753cf:"8855","766a10e1":"8860","98a30fd8":"8866","31c99aa1":"8876",b48c599b:"8901",b38833d4:"9062","60738e36":"9071",a4b71220:"9112","924835c1":"9126","64c7e1cc":"9217","2f3b630e":"9226","8167490d":"9247",e344dd79:"9276","6d2ffbf3":"9315","131c7f55":"9323",a996ffc3:"9383",c7a2145e:"9478","1be78505":"9514",f95cee6f:"9548","32c9742a":"9626",dc776cbc:"9764",cd144357:"9779","1e15616a":"9802","51fbc2c9":"9806","14eb3368":"9817",b0cb055f:"9905","482bfb5c":"9993"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,c)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((c,d)=>a=e[f]=[c,d]));c.push(a[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(c=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,c)=>{var a,d,[b,t,o]=c,n=0;if(b.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(c);n - + @@ -30,7 +30,7 @@ communication channels of core team members, and gain access to Polkadot events.

There are many ways you can get involved in expanding Polkadot’s ecosystem, such as:

  • Contributing code and documentation related to the ecosystem
  • Speaking about Polkadot at events, workshops, and meetups
  • Writing blog posts
  • Representing Polkadot in your region
  • Mentoring and onboarding newcomers
  • Identifying partnerships and opportunities for the Polkadot ecosystem
  • Participating in calls and tasks that help drive the ecosystem forward

How to apply:

To become a Polkadot Ambassador, please fill out your application here.

Find out more about the programme and how to join here.

- + \ No newline at end of file diff --git a/docs/bug-bounty.html b/docs/bug-bounty.html index 1fee08860bc1..e8c7fe217411 100644 --- a/docs/bug-bounty.html +++ b/docs/bug-bounty.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,7 @@ not to be disruptive or harmful to our users or us. Otherwise, your actions might be interpreted as an attack rather than an effort to be helpful.

How to report a bug

Please follow the instructions at web3.foundation/security-report/.

- + \ No newline at end of file diff --git a/docs/build-data.html b/docs/build-data.html index e41ae828bf22..43cf36508e56 100644 --- a/docs/build-data.html +++ b/docs/build-data.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ for details on how to access the data.

Polkadot-based Explorers

As you can imagine, blockchain explorers also offer data analytics through an interface where users can examine common data points.

Some block explorers in the Polkadot ecosystem are listed on the tools page.

- + \ No newline at end of file diff --git a/docs/build-guide.html b/docs/build-guide.html index ffa0ca45f3bc..659303b455f5 100644 --- a/docs/build-guide.html +++ b/docs/build-guide.html @@ -19,7 +19,7 @@ - + @@ -139,7 +139,7 @@ ecosystem contains various SDKs to tap into the relay chain and parachains.

For front-end applications, several options exist for interfacing with Substrate-based chains (parachains, relay chains, etc.) and smart contracts. These often will interact with the RPC of a Substrate node:

Promise and RxJS APIs around Polkadot and Substrate based chains via RPC calls. It is dynamically generated based on what the Substrate runtime provides in terms of metadata. Full documentation & examples available here.

For a full list of tools please take a look here: Tools, APIs and Languages

- + \ No newline at end of file diff --git a/docs/build-hackathon.html b/docs/build-hackathon.html index d01547875501..8cb8d8f223a0 100644 --- a/docs/build-hackathon.html +++ b/docs/build-hackathon.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ that can be a feature of you hackathon or suggested prerequisite for those joining to use.

Support / Contact

If you have any questions regarding organizing a hackathon, please free feel to contact us by email or ask us via Element chat.

- + \ No newline at end of file diff --git a/docs/build-hrmp-channels.html b/docs/build-hrmp-channels.html index 6d4fc7dc070e..72f41a01f824 100644 --- a/docs/build-hrmp-channels.html +++ b/docs/build-hrmp-channels.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ encourage the community to vote on this, highlighting the benefits for your chain, use cases enabled with this submission, among other things. After the enactment period is over, both chains will authorize the channel.

- + \ No newline at end of file diff --git a/docs/build-index.html b/docs/build-index.html index b315c948cc51..7e403ed6ec48 100644 --- a/docs/build-index.html +++ b/docs/build-index.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ are building.

Grants

  • Grants - Information regarding grants and funding sources available in the Polkadot ecosystem.

PCPs

Polkadot Contracts Proposals (PCPs) are standards for smart contracts in the Polkadot ecosystem.

Hackathon

- + \ No newline at end of file diff --git a/docs/build-integrate-assets.html b/docs/build-integrate-assets.html index a22a5fde9936..6df7fdb64412 100644 --- a/docs/build-integrate-assets.html +++ b/docs/build-integrate-assets.html @@ -19,7 +19,7 @@ - + @@ -127,7 +127,7 @@ can be claimed).

A great resource to learn more about Error Management in XCM is the Polkadot blog post from Gavin Wood, XCM Part III: Execution and Error Management.

- + \ No newline at end of file diff --git a/docs/build-integration.html b/docs/build-integration.html index d02e63627854..a61036874b09 100644 --- a/docs/build-integration.html +++ b/docs/build-integration.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ transactions. Parity and Web3 Foundation will be able to provide the best support if you use these tools.

If your team would like support, join some of our community channels or contact support@polkadot.network.

- + \ No newline at end of file diff --git a/docs/build-node-interaction.html b/docs/build-node-interaction.html index 85805c711572..f743f071a432 100644 --- a/docs/build-node-interaction.html +++ b/docs/build-node-interaction.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ block by the block author.

{
"number":"7409038",
"hash":"0x0e9610f3c89fac046ef83aa625ad414d5403031faa026b7ab2a918184e389968",
"parentHash":"0xba308541eb207bc639f36d392706309a031c21622f883fb07411060389c5ffdd",
"stateRoot":"0x4426383b64a944ad7222a4019aefd558c749da0c6920cfcdfd587741d54abbe2",
"extrinsicsRoot":"0x74749e5f5aeb610bc23fd6d8d79fd8bbf5e4b6053f70ba94ea6b3cc271df4b3a",
"authorId":"Fvvz6Ej1D5ZR5ZTK1vE1dCjBvkbxE1VncptEtmFaecXe4PF",
"logs":[
{
"type":"PreRuntime",
"index":"6",
"value":[
"BABE",
"0x023a0200009c7d191000000000"
]
},
{
"type":"Seal",
"index":"5",
"value":[
"BABE",
"0x2296a50fa4fea3a46a95ad5b1f09de76d22c6ed3dc6755718c976e2d14c63e4dd3c6257813d9bdc03bb180b1e20393f1558ae1204982e5c7570df393e11f908b"
]
}
],
"onInitialize":{
"events":[

]
},
"extrinsics":[
{
"method":{
"pallet":"timestamp",
"method":"set"
},
"signature":null,
"nonce":null,
"args":{
"now":"1620636072000"
},
"tip":null,
"hash":"0x8b853f49b6543e4fcbc796ad3574ea5601d2869d80629e080e501da4cb7b74b4",
"info":{

},
"events":[
{
"method":{
"pallet":"system",
"method":"ExtrinsicSuccess"
},
"data":[
{
"weight":"185253000",
"class":"Mandatory",
"paysFee":"Yes"
}
]
}
],
"success":true,
"paysFee":false
},
{
"method":{
"pallet":"balances",
"method":"transfer"
},
"signature":{
"signature":"0x94b63112648e8e692f0076fa1ccab3a04510c269d1392c1df2560503865e144e3afd578f1e37e98063b64b98a77a89a9cdc8ade579dcac0984e78d90646a052001",
"signer":{
"id":"Gr5sBB1EgdmQ7FG3Ud2BdECWQTMDXNgGPfdHMMtDsmT4Dj3"
}
},
"nonce":"12",
"args":{
"dest":{
"id":"J6ksma2jVeHRcRoYPZBkJRzRbckys7oSmgvjKLrVbj1U8bE"
},
"value":"100000000"
},
"tip":"0",
"hash":"0xfbc5e5de75d64abe5aa3ee9272a3112b3ce53710664f6f2b9416b2ffda8799c2",
"info":{
"weight":"201217000",
"class":"Normal",
"partialFee":"2583332634"
},
"events":[
{
"method":{
"pallet":"balances",
"method":"Transfer"
},
"data":[
"Gr5sBB1EgdmQ7FG3Ud2BdECWQTMDXNgGPfdHMMtDsmT4Dj3",
"J6ksma2jVeHRcRoYPZBkJRzRbckys7oSmgvjKLrVbj1U8bE",
"100000000"
]
},
{
"method":{
"pallet":"balances",
"method":"Deposit"
},
"data":[
"Fvvz6Ej1D5ZR5ZTK1vE1dCjBvkbxE1VncptEtmFaecXe4PF",
"2583332634"
]
},
{
"method":{
"pallet":"system",
"method":"ExtrinsicSuccess"
},
"data":[
{
"weight":"201217000",
"class":"Normal",
"paysFee":"Yes"
}
]
}
],
"success":true,
"paysFee":true
},
{
"method":{
"pallet":"utility",
"method":"batch"
},
"signature":{
"signature":"0x8aa2fc3f0cff52533745679523705720cff42d0e7258b9797feed193deb0ca73474726e148af0a0b096d44c07f20e5292819ec92279cffb2897e95cc337e638e",
"signer":{
"id":"F4gmSZGiM9pMYPsKW7xnGktDr4zRmN2jqy5Ze678y9YWR7F"
}
},
"nonce":"687",
"args":{
"calls":[
{
"method":{
"pallet":"staking",
"method":"payoutStakers"
},
"args":{
"validator_stash":"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
"era":"2229"
}
},
{
"method":{
"pallet":"staking",
"method":"payoutStakers"
},
"args":{
"validator_stash":"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
"era":"2230"
}
},
{
"method":{
"pallet":"staking",
"method":"payoutStakers"
},
"args":{
"validator_stash":"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
"era":"2231"
}
},
{
"method":{
"pallet":"staking",
"method":"payoutStakers"
},
"args":{
"validator_stash":"DifishR4auphofhzxsy2aupgYo4NaUECH7qgt71CgiB2o6P",
"era":"2231"
}
},
{
"method":{
"pallet":"staking",
"method":"payoutStakers"
},
"args":{
"validator_stash":"J1fishfH94nFZLNScHgC2HorWpFD2xdPxd96wtTCHLvKxfa",
"era":"2231"
}
}
]
},
"tip":"0",
"hash":"0x69171ec3f4e5e4dfd27f4d1c5b5dbc884932c5d9a078c84495bb7ab875c8785f",
"info":{
"weight":"629782467000",
"class":"Normal",
"partialFee":"5150837715"
},
"events":[
{
"method":{
"pallet":"staking",
"method":"Reward"
},
"data":[
"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
"40730624074"
]
},
{
"method":{
"pallet":"staking",
"method":"Reward"
},
"data":[
"FhLcXuFkTwyc3o9K82VBahpain1YHWyGeNMDTTyeDJKfm5b",
"4296071738"
]
},
{
"method":{
"pallet":"staking",
"method":"Reward"
},
"data":[
"F1NyXFUayqmVMdjNK45hcaTCE3JiqdU83sEGhQ3HQXn2Rpq",
"1770904403"
]
},

// ...

{
"method":{
"pallet":"utility",
"method":"BatchCompleted"
},
"data":[

]
},
{
"method":{
"pallet":"balances",
"method":"Deposit"
},
"data":[
"Fvvz6Ej1D5ZR5ZTK1vE1dCjBvkbxE1VncptEtmFaecXe4PF",
"5150837715"
]
},
{
"method":{
"pallet":"system",
"method":"ExtrinsicSuccess"
},
"data":[
{
"weight":"629782467000",
"class":"Normal",
"paysFee":"Yes"
}
]
}
],
"success":true,
"paysFee":true
}
],
"onFinalize":{
"events":[

]
},
"finalized":true
}
The JS number type is a 53 bit precision float

There is no guarantee that the numerical values in the response will have a numerical type. Any numbers larger than 2**53-1 will have a string type.

Submitting a Transaction

Submit a serialized transaction using the transaction endpoint with an HTTP POST request.

import requests
import json

url = 'http://127.0.0.1:8080/transaction/'
tx_headers = {'Content-type' : 'application/json', 'Accept' : 'text/plain'}
response = requests.post(
url,
data='{"tx": "0xed0...000"}', # A serialized tx.
headers=tx_headers
)
tx_response = json.loads(response.text)

If successful, this endpoint returns a JSON with the transaction hash. In case of error, it will return an error report, e.g.:

{
"error": "Failed to parse a tx" | "Failed to submit a tx",
"cause": "Upstream error description"
}
- + \ No newline at end of file diff --git a/docs/build-node-management.html b/docs/build-node-management.html index 9d2fd0d6bcd1..d91a2c06c81a 100644 --- a/docs/build-node-management.html +++ b/docs/build-node-management.html @@ -19,7 +19,7 @@ - + @@ -67,7 +67,7 @@ has a monitor node metrics tutorial which uses this endpoint.

- + \ No newline at end of file diff --git a/docs/build-open-source.html b/docs/build-open-source.html index 2572447c1ed0..e1dba8d9ab5e 100644 --- a/docs/build-open-source.html +++ b/docs/build-open-source.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ the tech stack.

❗ All technologies listed above need to be open-source. Ideally, the links lead directly to the code.

Note: You will need a GitHub account to suggest changes or open issues. If you do not have one, you may sign up for free.

- + \ No newline at end of file diff --git a/docs/build-oracle.html b/docs/build-oracle.html index 5251dae94c8b..42d26f015823 100644 --- a/docs/build-oracle.html +++ b/docs/build-oracle.html @@ -19,7 +19,7 @@ - + @@ -49,7 +49,7 @@ ecosystem develops and oracle parachains begin to appear, this article will be updated with a comparison of the different solutions and the benefits and drawbacks that each provide.

- + \ No newline at end of file diff --git a/docs/build-pdk.html b/docs/build-pdk.html index 9aec47c27766..f4057d1573f2 100644 --- a/docs/build-pdk.html +++ b/docs/build-pdk.html @@ -19,7 +19,7 @@ - + @@ -80,10 +80,10 @@ necessarily a go-to economic model a parachain should follow.

Moreover, becoming a parachain has an opportunity cost associated. Ideally, you can increase the value of the network by participating in the parachain selection process, and this should serve as a good return on investment.

Connecting Digital Economies

Collators act as network maintainers and maintain a full node of a -parachain. They can be incentivized with a native token payout from:

  • Transaction fees collected
  • Parathread token sponsorship
    • Blocks are naturally produced when a parathread bid is less than the native token payout.

Para-objects

The Relay Chain can host arbitrary state machines, not just blockchains.

The Polkadot network will encourage the +parachain. They can be incentivized with a native token payout from:

  • Transaction fees collected
  • Parathread token sponsorship
  • Blocks are naturally produced when a parathread bid is less than the native token payout.

Para-objects

The Relay Chain can host arbitrary state machines, not just blockchains.

The Polkadot network will encourage the connection and interoperability between different para-objects.

Here, para-objects are referring to objects on the network that operate in parallel, generally, parallelizable objects.

These could be in the form of:

Migration

Projects that are already functioning as "solochains" or in isolated environments may be interested +parathread pool

  • Bridge Hubs
  • Nested Relay Chains
  • Migration

    Projects that are already functioning as "solochains" or in isolated environments may be interested in migrating onto Polkadot as a para-object. While the parachain model has its benefits, it may not be the go-to strategy for some projects.

    As a path for migration onto Polkadot, it may be more viable to migrate to one of the chains in one of the reserved slots.

    For instance, there are currently options for smart contract deployment @@ -187,8 +187,8 @@ from then be able to start participating in the per-block auctions for inclusion of your state transition into a Relay Chain.

    For more information on how parathread per-block auctions work, see the more detailed parathread - page.

    Resources

    - + page.

    Resources

    + \ No newline at end of file diff --git a/docs/build-protocol-info.html b/docs/build-protocol-info.html index d0baa035311c..3516c5b0dfe4 100644 --- a/docs/build-protocol-info.html +++ b/docs/build-protocol-info.html @@ -19,7 +19,7 @@ - + @@ -173,7 +173,7 @@ to cancel a runtime upgrade. Using a finalized depth of ten blocks should be safe.

    Note that block production and finality are isolated processes in Polkadot, and the chain can have a long unfinalized head.

    Do users need to interact with any smart contracts?

    No, users interact directly with the chain's logic.

    Does Polkadot have state rent?

    No, Polkadot uses the existential deposit to prevent dust accounts and other economic mechanisms like locking or reserving tokens for operations that utilize state.

    What is an external source to see the current chain height?

    - + \ No newline at end of file diff --git a/docs/build-smart-contracts.html b/docs/build-smart-contracts.html index efc1fdede11a..0f5b9c61e5d1 100644 --- a/docs/build-smart-contracts.html +++ b/docs/build-smart-contracts.html @@ -19,7 +19,7 @@ - + @@ -144,7 +144,7 @@ Substrate and Polkadot StackExchange to ask their questions. As always, keep up to date with Polkadot and Kusama by following the social channels.

    - + \ No newline at end of file diff --git a/docs/build-ss58-registry.html b/docs/build-ss58-registry.html index c0f2d0bed02e..9f4894604cd4 100644 --- a/docs/build-ss58-registry.html +++ b/docs/build-ss58-registry.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@
    - + \ No newline at end of file diff --git a/docs/build-storage.html b/docs/build-storage.html index 80a0d3510ac7..d068b4730a4b 100644 --- a/docs/build-storage.html +++ b/docs/build-storage.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ directory info will not be visible if you switch to a new browser or clear the browser cache. The storage module allows you to export file directory info from the current browser and import it to the new browser.

    manage file dir

    note

    These above images are taken from this pull request

    - + \ No newline at end of file diff --git a/docs/build-substrate.html b/docs/build-substrate.html index a80d27aef4c4..656f62fba4a5 100644 --- a/docs/build-substrate.html +++ b/docs/build-substrate.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ end-users to interact with applications connected to multiple blockchains or connect their own blockchains to applications that support it.

    note

    Substrate Connect will auto-detect whether a user is using the extension. If not, the Wasm light client will be created in-page for them.

    Resources

    - + \ No newline at end of file diff --git a/docs/build-tools-index.html b/docs/build-tools-index.html index 3bf41ce3f9c5..44b973267fc4 100644 --- a/docs/build-tools-index.html +++ b/docs/build-tools-index.html @@ -19,7 +19,7 @@ - + @@ -104,7 +104,7 @@ Squid Archive Registry
  • Polka-store - A tool which scans a Substrate chain and stores balance-relevant transactions in an SQLite database.
  • Substrate-graph - A compact indexer for Substrate based nodes providing a GraphQL interface.
  • - + \ No newline at end of file diff --git a/docs/build-transaction-construction.html b/docs/build-transaction-construction.html index d3983098a92f..bff5ebb3bc6e 100644 --- a/docs/build-transaction-construction.html +++ b/docs/build-transaction-construction.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ author_submitAndWatchExtrinsic, the latter of which will subscribe you to events to be notified as a transaction gets validated and included in the chain.

    Notes

    Some addresses to use in the examples. See Subkey documentation.

    $ subkey --network polkadot generate
    Secret phrase `pulp gaze fuel ... mercy inherit equal` is account:
    Secret seed: 0x57450b3e09ba4598 ... ... ... ... ... ... ... .. 219756eeba80bb16
    Public key (hex): 0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235
    Account ID: 0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235
    SS58 Address: 121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2

    $ subkey --network polkadot generate
    Secret phrase `exercise auction soft ... obey control easily` is account:
    Secret seed: 0x5f4bbb9fbb69261a ... ... ... ... ... ... ... .. 4691ed7d1130fbbd
    Public key (hex): 0xda04de6cd781c98acf0693dfb97c11011938ad22fcc476ed0089ac5aec3fe243
    Account ID: 0xda04de6cd781c98acf0693dfb97c11011938ad22fcc476ed0089ac5aec3fe243
    SS58 Address: 15vrtLsCQFG3qRYUcaEeeEih4JwepocNJHkpsrqojqnZPc2y
    - + \ No newline at end of file diff --git a/docs/builders-program.html b/docs/builders-program.html index 0d91bc9320e0..4fc2bc542118 100644 --- a/docs/builders-program.html +++ b/docs/builders-program.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ form of tooling, UI, middleware, bridges, and more.

    Application track

    This track supports builders who are building on top of Substrate-based chains.

    Check out the official Substrate Builders Program site for more information and steps on how to apply.

    - + \ No newline at end of file diff --git a/docs/community-index.html b/docs/community-index.html index a26efed1c343..b839ee350b2a 100644 --- a/docs/community-index.html +++ b/docs/community-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/community.html b/docs/community.html index 787859e2d93a..232ea30555e3 100644 --- a/docs/community.html +++ b/docs/community.html @@ -19,7 +19,7 @@ - + @@ -60,7 +60,7 @@ development and where there's room for your contributions.
  • Teams Building on Polkadot - Community maintained list of teams building on Polkadot and/or Substrate. (Note that this may contain inaccuracies, as it's unofficial).
  • - + \ No newline at end of file diff --git a/docs/contributing.html b/docs/contributing.html index d883bb27964a..c246213ea876 100644 --- a/docs/contributing.html +++ b/docs/contributing.html @@ -19,7 +19,7 @@ - + @@ -58,7 +58,7 @@ the official crowdin knowledge base as well.




    The following shows an example in Arabic. You can type in your desired translation for each section in the provided area, while using the suggestions generated by the crowdin built-in translator.


    Make sure to save your translation.

    - + \ No newline at end of file diff --git a/docs/contributors.html b/docs/contributors.html index 841b074ffe01..0c6826ba1cfa 100644 --- a/docs/contributors.html +++ b/docs/contributors.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,7 @@ for the Polkadot protocol. He contributed in creating written content and example applications that demonstrate how to use these new technologies.

    You can now find Logan leading efforts to define the prediction market space at Zeitgeist.

    - + \ No newline at end of file diff --git a/docs/dashboards-index.html b/docs/dashboards-index.html index 4d1a91f4f8a1..236e74073977 100644 --- a/docs/dashboards-index.html +++ b/docs/dashboards-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/dev-heroes.html b/docs/dev-heroes.html index cab7e197e749..500c6946d9ab 100644 --- a/docs/dev-heroes.html +++ b/docs/dev-heroes.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ open source technology stack list and contribute with a pull request, an issue, or find and fix bugs.

  • Create content: Write a blog post, record a video tutorial, and write a Twitter thread. Share about your latest coding success, something you learned and are excited about.

  • Speak at events: Do a workshop or talk at meetups and conferences.

  • - + \ No newline at end of file diff --git a/docs/faq.html b/docs/faq.html index 5236ab43b6a9..8f271bcb97b0 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -19,7 +19,7 @@ - + @@ -189,7 +189,7 @@ fee calculation page in the Substrate documentation for more detailed information.

    Answered by Gav series

    The "Answered by Gav" series is a collection of posts uploaded to Reddit of questions that have been asked in the Polkadot Watercooler Riot channel and answered by Polkadot founder Gavin Wood.

    - + \ No newline at end of file diff --git a/docs/general-index.html b/docs/general-index.html index b1eede86ede1..3fd4e944509d 100644 --- a/docs/general-index.html +++ b/docs/general-index.html @@ -19,13 +19,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/getting-started.html b/docs/getting-started.html index 7e84a62bdc53..3fb7fe36b94e 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -19,7 +19,7 @@ - + @@ -111,7 +111,7 @@ about Polkadot.
  • Sample Applications - Sample applications that are built on or currently being built for Polkadot.
  • Contributing Guide - Rules for contributing to the wiki.
  • Polkadot Knowledge Base - Troubleshooting resources for specific errors and problems.
  • - + \ No newline at end of file diff --git a/docs/glossary.html b/docs/glossary.html index 6e7d48eafc9b..6ead88d81768 100644 --- a/docs/glossary.html +++ b/docs/glossary.html @@ -19,7 +19,7 @@ - + @@ -287,7 +287,7 @@ transaction weights and fees.

    Witness

    Cryptographic proof statements of data validity.

    Whitelist Pallet

    Allows one Origin to escalate the privilege level of another Origin for a certain operation. In terms of OpenGov, it allows the Fellowship to authorise a new origin (which we will call Whitelisted-Root) to be executed with Root-level privileges.

    - + \ No newline at end of file diff --git a/docs/grants.html b/docs/grants.html index 1aa8378ac089..dd4b0f3026ea 100644 --- a/docs/grants.html +++ b/docs/grants.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ Foundation has considered new ways to distribute KSM for people who need KSM to build.

    If you are interested in obtaining KSM for building or research, you can apply through the Treasury or receive a tip for doing something cool in the community.

    Other Grant Programs

    Below is a list of other grant programs in the Polkadot/Substrate ecosystem.

    - + \ No newline at end of file diff --git a/docs/how-to-dyor.html b/docs/how-to-dyor.html index 0878e9992d21..70de4bbfe548 100644 --- a/docs/how-to-dyor.html +++ b/docs/how-to-dyor.html @@ -19,7 +19,7 @@ - + @@ -222,7 +222,7 @@ aims to bring to the ecosystem.

    This does not fall under fact-checking and verifying claims, but it is important to mention: fully understanding what something does and its prospective impact is an integral part of making an informed decision, so do not overlook it.

    - + \ No newline at end of file diff --git a/docs/kusama-adversarial-cheatsheet.html b/docs/kusama-adversarial-cheatsheet.html index 062c49abe575..fe5cb04b5812 100644 --- a/docs/kusama-adversarial-cheatsheet.html +++ b/docs/kusama-adversarial-cheatsheet.html @@ -19,14 +19,14 @@ - +

    Adversarial Cheatsheet

    Expect things to break on Kusama. To help you break some things, take a look at the following threat model.

    Hacker wants to …Security promise that should prevent the hackHacking IncentiveHacking DamageHacking value details
    Double spend tokens via getting the clients to accept a different chainIntegrity (System-wide)HighHighIf attackers are able to double spend tokens, they are able to get services without paying for them. This gives them a high monetary incentive to execute the attack.
    Cause system to mint tokens to his own accountIntegrity (System-wide) MediumLow - MediumIf an attacker is able to craft transactions that mint tokens to their account, then this provides a high monetary incentive to execute this attack.
    Validate malicious blocks to double spend tokensAvailability (System-wide) HighMediumIf an attacker is able to double spend tokens, they are able to get services without paying for them. This gives them a high monetary incentive to execute the attack.
    Undermine consensus mechanism to split chainIntegrity (System-wide)HighHigh"If an attacker is able to double spend tokens, they are able to get services without paying for them. This gives them a high monetary incentive to execute the attack. Betting on decrease in value of the cryptocurrency or competitors want to damage the reputation, so that the value of their blockchain increases.
    Tamper/manipulate blockchain history to invalidate transactions (e.g. a voting result)Integrity (System-wide)MediumMedium - HighAttacker can rollback undesired transactions by intentionally invalidating the block where transaction has happened. Attacker can force a governance decision (or even an on-chain update) that favors them.
    Undermine blockchain or consensus mechanism to damage the ecosystem's reputationAvailability (System-wide)HighHighBetting on decrease in value of the cryptocurrency or competitors want to damage the reputation, so that the value of their blockchain increases
    CensorshipAvailability (System-wide)MediumHighHackers are able to block undesirable types of transactions (e.g. industry competitor transactions or referendum votes). This could be achieved by colluding with other stakeholders or by otherwise obtaining more voting power.
    Deanonymize usersConfidentiality (Node)MediumMediumParties that want to de-anonymize users can use the information to oppress the opposition (e.g. political activists).
    Steal token from nodeIntegrity (Node)HighHighAttackers that are able to steal tokens from nodes can claim assets for themselves, which gives them a high monetary incentive to execute the attack.
    Steal token from node by leaking credentialsConfidentiality (Node)HighHighAttackers that are able to steal tokens from nodes can claim assets for themselves, which gives them a high monetary incentive to execute the attack.
    Prevent node from accessing the Polkadot networkAvailability (Node)LowLow - MediumRun a targeted denial-of-service attack out of revenge, monetary interests (in case of a competing coin exchange, etc.).
    Defraud other participantsIntegrity (Node)MediumLow - MediumAttacker can abuse other participants’ misunderstanding of Polkadot's security guarantees to defraud them. Also, if the reward for calling out bad behavior can be set up so that it is higher than the according punishment, a set of self-handled nodes can be set up to generate a source cycle. Other participants are not needed for this attack.
    Defraud other participantsIntegrity (System-wide)HighHighAn attacker could abuse bugs in Polkadot's economic system to defraud other participants. For example, an attacker could exploit a logic bug to not pay transaction fees.
    - + \ No newline at end of file diff --git a/docs/kusama-bug-bounty.html b/docs/kusama-bug-bounty.html index b9072096959c..03f739c861f3 100644 --- a/docs/kusama-bug-bounty.html +++ b/docs/kusama-bug-bounty.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ not to be disruptive or harmful to our users or us. Otherwise, your actions might be interpreted as an attack rather than an effort to be helpful.

    How to report a bug

    Please follow the instructions at web3.foundation/security-report/.

    - + \ No newline at end of file diff --git a/docs/kusama-claims.html b/docs/kusama-claims.html index 979f53396060..6388d0f710c1 100644 --- a/docs/kusama-claims.html +++ b/docs/kusama-claims.html @@ -19,7 +19,7 @@ - + @@ -98,7 +98,7 @@ Polkadot Support page.

    Third Party Claims Processes

    We do not recommend using a third-party app or process to perform your claim or acquire KSM.

    Claiming using a third-party process can lead to the loss of your allocation; therefore, we cannot recommend using any third-party apps to do so. Manually specifying your transaction data, as specified in our claims process, is the only way to be certain you will receive your allocation.

    - + \ No newline at end of file diff --git a/docs/kusama-coc.html b/docs/kusama-coc.html index d6f61a3b80e1..e467462477d3 100644 --- a/docs/kusama-coc.html +++ b/docs/kusama-coc.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ on feedback from the Kusama participants and/or the Polkadot community.

    Bugs

    Please understand that this network is, despite its success, an experiment with potential flaws, so it’s appreciated that community members help report any sort of exploits directly to the team before sharing publicly. Please see the bug bounty program.

    - + \ No newline at end of file diff --git a/docs/kusama-community.html b/docs/kusama-community.html index 54b9b5762561..03847128f8cc 100644 --- a/docs/kusama-community.html +++ b/docs/kusama-community.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ for technical questions on building with Substrate.
  • Smart Contracts & Parity Ink! - A room to discuss developing Substrate smart contracts using Parity Ink!
  • Social

    Blogs and tutorials

    Newsletters

    - + \ No newline at end of file diff --git a/docs/kusama-getting-started.html b/docs/kusama-getting-started.html index 0dbe1d81c985..584ff450f5b6 100644 --- a/docs/kusama-getting-started.html +++ b/docs/kusama-getting-started.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ here.

    While Kusama does not support smart contracts natively, building apps on it is still possible (e.g. RMRK.app). If you're interested in diving deeper into proper development, however, check out the builders guide.

    Additional Resources:

    - + \ No newline at end of file diff --git a/docs/kusama-index.html b/docs/kusama-index.html index fac1856e0167..13a6e9098e41 100644 --- a/docs/kusama-index.html +++ b/docs/kusama-index.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@

    Kusama

    Polkadot's Canary Network

    Kusama is a canary network for Polkadot; an earlier release of the code that is available first and holds real economic value. For developers, Kusama is a proving ground for runtime upgrades, on-chain governance, and parachains.

    No Promises.

    Kusama has a dedicated Wiki guide. Click on the image below to access it.

    guide
    Kusama Guide
    - + \ No newline at end of file diff --git a/docs/kusama-parameters.html b/docs/kusama-parameters.html index 34df6a91e9a1..a4d72db55be7 100644 --- a/docs/kusama-parameters.html +++ b/docs/kusama-parameters.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ redirected into the Society's treasury to fund growth.

    Precision

    KSM have 12 decimals of precision. In other words, 1e12 (1_000_000_000_000, or one trillion) Plancks make up a single KSM.

    - + \ No newline at end of file diff --git a/docs/kusama-social-recovery.html b/docs/kusama-social-recovery.html index cadb840f3f19..15b225263a23 100644 --- a/docs/kusama-social-recovery.html +++ b/docs/kusama-social-recovery.html @@ -19,7 +19,7 @@ - + @@ -66,7 +66,7 @@ either go through the council or submit a public proposal. To learn more about governance, see here.

    Further Reading

    - + \ No newline at end of file diff --git a/docs/kusama-timeline.html b/docs/kusama-timeline.html index de09ef51b71e..a14cdb43589b 100644 --- a/docs/kusama-timeline.html +++ b/docs/kusama-timeline.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ forkless upgradability provided by Substrate, chaos continues, and in the spirit of chaos, more teams are eager to deploy on Kusama. The path of Kusama deployment has paved the way to Polkadot's parachains as the technology became proven.

    - + \ No newline at end of file diff --git a/docs/learn-DOT.html b/docs/learn-DOT.html index dfddfe543f55..65d56116b90e 100644 --- a/docs/learn-DOT.html +++ b/docs/learn-DOT.html @@ -19,7 +19,7 @@ - + @@ -92,7 +92,7 @@ through the Treasury. Alternatively, they can be obtained on the open market.

    Polkadot Mainnet DOT

    Polkadot Mainnet DOT are not freely given away. If you purchased DOT in the original 2017 offering, you may claim them via the Polkadot claims process. Alternatively, they are available on the open market.

    - + \ No newline at end of file diff --git a/docs/learn-account-abstraction.html b/docs/learn-account-abstraction.html index bdefdac38837..2c187ac6a79a 100644 --- a/docs/learn-account-abstraction.html +++ b/docs/learn-account-abstraction.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ Bader Youssef - "Abstracting Away Account Abstraction on Polkadot"
  • Parity Blog Post by Joe Petrowski - "Building a Hot Wallet with Substrate Primitives"
  • - + \ No newline at end of file diff --git a/docs/learn-account-advanced.html b/docs/learn-account-advanced.html index fa3a2829a2fb..c2b5896fea43 100644 --- a/docs/learn-account-advanced.html +++ b/docs/learn-account-advanced.html @@ -19,7 +19,7 @@ - + @@ -172,7 +172,7 @@ directly in the browser on the new one.

    This has been tested on Brave and Chrome, but not other browsers.

    1. Go to Polkadot-JS Apps
    2. Go to JavaScript console on the browser (Available in Developer Tools)
    3. Type in the command:
    JSON.stringify(localStorage)
    1. Copy and paste the returned string to a text editor and save the file.
    2. Check that the string you pasted begins and ends with a tick mark ('). If not, add one to the beginning and end.
    3. Save and send that file with the copied string to the new computer.
    4. On the new computer, go to Polkadot-JS Apps
    5. Open the Javascript console on the browser (Available in Developer Tools)
    6. Set a variable raw equal to the string from the text file
    raw = ... copy-pasted json from original computer ...
    1. Run the following code on the console:
    accounts = JSON.parse(raw);
    for (var key in accounts) {
    if (accounts.hasOwnProperty(key)) {
    val = JSON.stringify(accounts[key]).replace(/\\/g,'').slice(1,-1);
    console.log(key + " -> " + val);
    localStorage.setItem(key, val);
    }
    }
    1. Refresh Polkadot-JS App browser and check the Accounts and Addresses pages. All of your accounts and addresses should now be available.
    - + \ No newline at end of file diff --git a/docs/learn-account-generation.html b/docs/learn-account-generation.html index e6efdc5a0984..9f3fd62bff02 100644 --- a/docs/learn-account-generation.html +++ b/docs/learn-account-generation.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ encrypting/decrypting your wallet. If you cannot load a JSON file, please use the latest version of the wallet software. If you cannot load it, ensure that the wallet software uses the newest version of the Polkadot API.

    - + \ No newline at end of file diff --git a/docs/learn-account-multisig.html b/docs/learn-account-multisig.html index 000a17bd758a..3d4f9f46de5b 100644 --- a/docs/learn-account-multisig.html +++ b/docs/learn-account-multisig.html @@ -19,7 +19,7 @@ - + @@ -114,7 +114,7 @@ Check the "How to use a multisig account" in the support docs on how to decode the multisig call data.

    - + \ No newline at end of file diff --git a/docs/learn-accounts-index.html b/docs/learn-accounts-index.html index ae3142d8b4e8..b898d510dc5c 100644 --- a/docs/learn-accounts-index.html +++ b/docs/learn-accounts-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-accounts.html b/docs/learn-accounts.html index 94ab2e782af3..50e8c6dae71f 100644 --- a/docs/learn-accounts.html +++ b/docs/learn-accounts.html @@ -19,7 +19,7 @@ - + @@ -140,7 +140,7 @@ multi-signature accounts, including their use-cases.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-advanced-index.html b/docs/learn-advanced-index.html index 0942f53c2efb..dd76f0198fb9 100644 --- a/docs/learn-advanced-index.html +++ b/docs/learn-advanced-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-architecture-index.html b/docs/learn-architecture-index.html index 702919492f6b..59f9e4bf16b2 100644 --- a/docs/learn-architecture-index.html +++ b/docs/learn-architecture-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-architecture.html b/docs/learn-architecture.html index eb65a5682601..0a44f16ae2e3 100644 --- a/docs/learn-architecture.html +++ b/docs/learn-architecture.html @@ -19,7 +19,7 @@ - + @@ -86,7 +86,7 @@ verify their validity (and later, their availability).


    Whiteboard Series

    For a video overview of the architecture of Polkadot watch the video below for the whiteboard interview with W3F researcher Alistair Stewart:

    Architecture Overview

    - + \ No newline at end of file diff --git a/docs/learn-archive-index.html b/docs/learn-archive-index.html index d7c6f57fca24..c42e372d1844 100644 --- a/docs/learn-archive-index.html +++ b/docs/learn-archive-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-assets-index.html b/docs/learn-assets-index.html index 63e2e64f0c8e..aa42e2e093e2 100644 --- a/docs/learn-assets-index.html +++ b/docs/learn-assets-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-assets.html b/docs/learn-assets.html index fb1e6d9700fd..d4b57416a616 100644 --- a/docs/learn-assets.html +++ b/docs/learn-assets.html @@ -19,7 +19,7 @@ - + @@ -126,7 +126,7 @@ create a 2-of-2 multisig from two pure proxies, and then set members from each group as proxies to those two accounts.

    - + \ No newline at end of file diff --git a/docs/learn-async-backing.html b/docs/learn-async-backing.html index b451f8b9a484..cbe64a22d93e 100644 --- a/docs/learn-async-backing.html +++ b/docs/learn-async-backing.html @@ -19,7 +19,7 @@ - + @@ -75,7 +75,7 @@ the oldest relay chain parent a parachain block can be built on top of.

    Values of zero for both correspond to synchronous backing: max_candidate_depth = 0 means there can be only one unincluded parablock at all times, and allowed_ancestry_len = 0 means a parablock can be built only on the latest relay parent for that parachain. Initial values will be set to 3 (4 -unincluded parablocks at all times) and 2 (relay parent can be the third last).

    Async Backing Diagram

    async-backing

    The diagram assumes:

    • max_candidate_depth = 2, meaning that there can be a maximum of three unincluded parablocks at +unincluded parablocks at all times) and 2 (relay parent can be the third last).

      Async Backing Diagram

      async-backing

      The diagram assumes:

      • max_candidate_depth = 2, meaning that there can be a maximum of three unincluded parablocks at all times
      • allowed_ancestry_len = 1, meaning parablocks can be anchored to the last or second-last relay parent (i.e. collators can start preparing parablocks 6 seconds in advance)

      From left to right, parablock P1 is backed into the relay chain block R1 and included into R2. While P1 undergoes backing, collators can already start to generate P2, which will have R0 as a relay @@ -92,15 +92,19 @@ they can use to fetch information to build new parablocks. On the relay chain side perspective parachains repeats the work each unincluded segment does in tracking candidates (as validators cannot trust the record kept on parachains).

      The 6-second relay chain block delay includes a backing execution timeout (2 seconds) and some time -for network latency (time it takes to gossip messages across the entire network). Even if a collator -can theoretically have >2 seconds to produce a block, the validators will still have ~2 seconds to -check it. The limit collators have to generate parablocks is thus how long it takes to back it (2 -seconds). This means that if block generation takes >2 seconds the unincluded segment will shrink -(less unincluded parablocks) while if it takes <2 seconds the segment will grow (more unincluded -parablocks). Such flexibility from the parachain side will be enabled on the relay chain side with +for network latency (the time it takes to gossip messages across the entire network). The limit +collators have to generate parablocks is how long it takes to back it (i.e., 2 seconds). Collation +generation conservatively always gives itself the same time limits. If there is extra time for +collation generation and backing (i.e., more than 2s + 6s), then all that extra time is allocated to +backing (see figure). This could result in backable blocks waiting their turn at the end of the +backing step for a few extra seconds until a core frees up to back that block as of the next relay +block or some later relay block. Note a core is occupied after backing and before inclusion.

      The 2-second block generation time is thus a limiter, not a system limitation. If block generation +takes >2 seconds, the unincluded segment will shrink (less unincluded parablocks), while if it takes +<2 seconds, the segment will grow (more unincluded parablocks that will need to be backed and +included). Such flexibility from the parachain side will be possible when, on the relay chain side, +there will be elastic scaling (i.e., agile core usage and -coretime allocation (so called elastic -scaling).

      Terminology

      Candidate Receipt

      Saying that a parablock has been included in a realy chain parent does not mean that the entire +coretime allocation).

      Terminology

      Candidate Receipt

      Saying that a parablock has been included in a realy chain parent does not mean that the entire parablock is in the relay chain block. Instead, candidate receipt consisting of the hash of the parablock, state roots and ID info is placed on the parent block on the relay chain. The relay chain does not access the entire state of a parachain but only the values that changed during that block @@ -149,8 +153,8 @@ The implementation tracking issue for asynchronous backing

    • Prospective Parachains Subsystem - The Polkadot Parachain Host Implementers' Guide
    • Chapter 6.11. from Polkadot Blockchain Academy (PBA) lecture material: Asynchronous Backing (Shallow)
    • Chapter 6.15. from PBA lecture material: Asynchronous Backing (Deep)
    • Polkadot Blog Post - -Asynchronous Backing: Elevating Polkadot's Performance and Scale
    - +Asynchronous Backing: Elevating Polkadot's Performance and Scale + \ No newline at end of file diff --git a/docs/learn-auction.html b/docs/learn-auction.html index a089d2b4b322..6c53f8f11281 100644 --- a/docs/learn-auction.html +++ b/docs/learn-auction.html @@ -19,7 +19,7 @@ - + @@ -142,7 +142,7 @@ W3F research page on parachain allocation that goes more in depth to the mechanism
  • Research Update: The Case for Candle Auctions - W3F breakdown and research update about candle auctions
  • Front-Running, Smart Contracts, and Candle Auctions W3F Research team discusses how to remedy current blockchain auction setbacks with candle auctions
  • - + \ No newline at end of file diff --git a/docs/learn-balance-transfers.html b/docs/learn-balance-transfers.html index e5128369185d..675354c81997 100644 --- a/docs/learn-balance-transfers.html +++ b/docs/learn-balance-transfers.html @@ -19,7 +19,7 @@ - + @@ -101,7 +101,7 @@ probably not the reason for your tokens having existing references.

    Existing Non-Native Assets

    Currently, Polkadot does not use the Assets Pallet, so this is probably not the reason for your tokens having existing references.

    - + \ No newline at end of file diff --git a/docs/learn-basics-index.html b/docs/learn-basics-index.html index cca366731aaa..d62f831476a1 100644 --- a/docs/learn-basics-index.html +++ b/docs/learn-basics-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-bridges.html b/docs/learn-bridges.html index 399d70956d88..7f262e000aff 100644 --- a/docs/learn-bridges.html +++ b/docs/learn-bridges.html @@ -19,7 +19,7 @@ - + @@ -88,7 +88,7 @@ Network's implementation of Parity's bridge chain solution.
  • Edgeth Bridge - a bridge from Ethereum to Edgeware chain (a Substrate-based chain) - now defunct and not maintained, but a good example.
  • XCLAIM - XCLAIM is a framework for achieving trustless and efficient cross-chain exchanges using cryptocurrency-backed assets.
  • - + \ No newline at end of file diff --git a/docs/learn-collator.html b/docs/learn-collator.html index f3be11167c42..861fe03ecec5 100644 --- a/docs/learn-collator.html +++ b/docs/learn-collator.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,7 @@ Cumulus repository. More information can be found under the Cumulus section on the build parachain page.

    Guides and Tools

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-avalanche.html b/docs/learn-comparisons-avalanche.html index 425590cf8c08..9fdaed39ca39 100644 --- a/docs/learn-comparisons-avalanche.html +++ b/docs/learn-comparisons-avalanche.html @@ -19,7 +19,7 @@ - + @@ -113,7 +113,7 @@ need a recommended minimum of 5 validators, which make the costs of launch predictable. Avalanche has plans to implement shared security, interoperability, composability and on-chain governance features which are already offered by Polkadot.

    References

    1. The Avalanche Platform Whitepaper
    2. The Avalanche Consensus Whitepaper
    3. The AVAX Token Dynamics Paper
    4. Nakomoto vs Snow consensus
    - + \ No newline at end of file diff --git a/docs/learn-comparisons-cosmos.html b/docs/learn-comparisons-cosmos.html index 905421ca9664..bc56b20a46de 100644 --- a/docs/learn-comparisons-cosmos.html +++ b/docs/learn-comparisons-cosmos.html @@ -19,7 +19,7 @@ - + @@ -132,7 +132,7 @@ chain must trust the sending chain. Thus, each blockchain in the Cosmos network has its independent security mechanisms. They're independently secured and do not rely on the security of other blockchains or the hub.

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-ethereum-2.html b/docs/learn-comparisons-ethereum-2.html index 158a9c9ee720..a98a401b2b32 100644 --- a/docs/learn-comparisons-ethereum-2.html +++ b/docs/learn-comparisons-ethereum-2.html @@ -19,7 +19,7 @@ - + @@ -157,7 +157,7 @@ enacted autonomously via forkless upgrades.
  • Validator selection mechanisms differ as Polkadot can provide strong availability and validity guarantees with fewer validators per shard.
  • - + \ No newline at end of file diff --git a/docs/learn-comparisons-index.html b/docs/learn-comparisons-index.html index 802e88e8ee88..2a507ad6bb5c 100644 --- a/docs/learn-comparisons-index.html +++ b/docs/learn-comparisons-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-comparisons-kusama.html b/docs/learn-comparisons-kusama.html index 9b4ec5d8bdc5..e59d1512de22 100644 --- a/docs/learn-comparisons-kusama.html +++ b/docs/learn-comparisons-kusama.html @@ -19,7 +19,7 @@ - + @@ -76,7 +76,7 @@ the future, we’re also likely to see Kusama bridged to Polkadot for cross-network interoperability. Web3 Foundation remains committed to both networks going forward, providing crucial support and guidance to teams building for the ecosystem.

    Explore more

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-rollups.html b/docs/learn-comparisons-rollups.html index 54a6ff52b6d9..36e5cc2595a6 100644 --- a/docs/learn-comparisons-rollups.html +++ b/docs/learn-comparisons-rollups.html @@ -19,7 +19,7 @@ - + @@ -94,7 +94,7 @@ transition data.

    Despite these drawbacks, Polkadot remains upgradable through forkless upgrades, which allows the protocol to be easily upgradable to stay in line with future technological advances.

    - + \ No newline at end of file diff --git a/docs/learn-comparisons.html b/docs/learn-comparisons.html index 20bc85c8aeff..7fcf0cb6f52f 100644 --- a/docs/learn-comparisons.html +++ b/docs/learn-comparisons.html @@ -19,7 +19,7 @@ - + @@ -61,7 +61,7 @@ Chain, and as the number of validators in the active set on Polkadot are increased, more parachains can be supported.

    - + \ No newline at end of file diff --git a/docs/learn-components-index.html b/docs/learn-components-index.html index a1db4890347f..ff032adf6163 100644 --- a/docs/learn-components-index.html +++ b/docs/learn-components-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-consensus.html b/docs/learn-consensus.html index 90838e198e20..2f2576d0735d 100644 --- a/docs/learn-consensus.html +++ b/docs/learn-consensus.html @@ -19,7 +19,7 @@ - + @@ -154,7 +154,7 @@ with Bill Laboon.
  • Block Production and Finalization in Polkadot: Understanding the BABE and GRANDPA Protocols - An academic talk by Bill Laboon, given at MIT Cryptoeconomic Systems 2020, describing Polkadot's hybrid consensus model in-depth.
  • - + \ No newline at end of file diff --git a/docs/learn-controller.html b/docs/learn-controller.html index fd7d86644180..63ae095c049b 100644 --- a/docs/learn-controller.html +++ b/docs/learn-controller.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ used less often and usually signed by the stash.

    stash-not-as-controller

    From a practical perspective, there were two accounts, and we needed to remember two passwords. From a security perspective, the party who wanted to control our staking actions was required to control two accounts.

    - + \ No newline at end of file diff --git a/docs/learn-crowdloans.html b/docs/learn-crowdloans.html index c42a9b7b9f87..4f05fc4a83dd 100644 --- a/docs/learn-crowdloans.html +++ b/docs/learn-crowdloans.html @@ -19,7 +19,7 @@ - + @@ -94,7 +94,7 @@ Apps page.

    Here is an example of the crowdloans in play during the very first Kusama auction.

    crowdloan dashboard

    Furthermore, check out this video on How to Participate in Crowdloans for steps on how to access available crowdloans on PolkadotJS apps.

    - + \ No newline at end of file diff --git a/docs/learn-cryptography.html b/docs/learn-cryptography.html index 8d09d4a12b2c..37f8355b8cbb 100644 --- a/docs/learn-cryptography.html +++ b/docs/learn-cryptography.html @@ -19,7 +19,7 @@ - + @@ -175,7 +175,7 @@ make passive attacks much harder if such a backdoor exists.

    However an alternative exists in the form of Curve25519. This algorithm has been proposed in 2006 by DJB [Curve25519]. Its main strengths are its speed, its constant-time run time (and resistance against side-channel attacks), and its lack of nebulous hard-coded constants.

    - + \ No newline at end of file diff --git a/docs/learn-extrinsics.html b/docs/learn-extrinsics.html index b83735f5dd40..3c989d19e552 100644 --- a/docs/learn-extrinsics.html +++ b/docs/learn-extrinsics.html @@ -19,7 +19,7 @@ - + @@ -101,7 +101,7 @@ without the possibility of verifying it.

    Defense against Attacks

    danger

    If you can't verify the extrinsic or you suspect you are signing something different than what you intended, don't sign it!

    To avoid being victim of an attack:

    • Use only trusted extensions, sites and software in general.
    • Use cold storage options (Ledger, Signer) and verify on them. Trust what these devices tell you over what is shown in the app or the browser extension.
    • Update Signer metadata only from trusted sources (or do it yourself).
    • Accept metadata updates for the extension only from trusted apps.
    - + \ No newline at end of file diff --git a/docs/learn-future-implementations-index.html b/docs/learn-future-implementations-index.html index d23e442bebba..c4658286573b 100644 --- a/docs/learn-future-implementations-index.html +++ b/docs/learn-future-implementations-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-governance.html b/docs/learn-governance.html index 2066923fbab0..4c689f396673 100644 --- a/docs/learn-governance.html +++ b/docs/learn-governance.html @@ -19,7 +19,7 @@ - + @@ -241,7 +241,7 @@ case for why the change should be made.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-guides-assets-create.html b/docs/learn-guides-assets-create.html index 1ce988d5b27c..840dcccf9cb3 100644 --- a/docs/learn-guides-assets-create.html +++ b/docs/learn-guides-assets-create.html @@ -19,7 +19,7 @@ - + @@ -60,7 +60,7 @@ an ID that has already been taken. After all the details are entered, click on the next button.

    Add Asset Metadata

    • Choose the admin, issuer and the freezer accounts for your asset and click on the create button.

    Asset managing accounts

    • Sign and submit the transaction (If you like to verify the transaction details before signing, you can click on the dropdown button pointed by the arrow in the snapshot below).

    Sign asset creating transaction

    If the transaction is successful, you should see the asset and its details displayed in the Network > Assets page on the Asset Hub.

    - + \ No newline at end of file diff --git a/docs/learn-guides-assets-index.html b/docs/learn-guides-assets-index.html index cffefa132163..50bdf63177f0 100644 --- a/docs/learn-guides-assets-index.html +++ b/docs/learn-guides-assets-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-assets-ledger.html b/docs/learn-guides-assets-ledger.html index 1f799e5e8c9a..55ba13b15ece 100644 --- a/docs/learn-guides-assets-ledger.html +++ b/docs/learn-guides-assets-ledger.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,7 @@ here.
  • Transfer the desired amount as described above. If you want to send exactly the amount you want to teleport, don't forget take into account the fees for teleporting that will be deducted in the next step.
  • Teleport your tokens following the instructions you will find here.
  • Teleporting to a Ledger account from a non-Ledger account doesn't require these extra steps.

    Support

    If you need support, please visit the Polkadot Support page.

    - + \ No newline at end of file diff --git a/docs/learn-guides-identity.html b/docs/learn-guides-identity.html index 36bac900befa..b9d49c4cdf6e 100644 --- a/docs/learn-guides-identity.html +++ b/docs/learn-guides-identity.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ for each sub-identity. This reserved account balance is freed once you clear the identities on the account.

    Sub-identity example

    - + \ No newline at end of file diff --git a/docs/learn-guides-index.html b/docs/learn-guides-index.html index 65cf8d43c63a..2c68958a4289 100644 --- a/docs/learn-guides-index.html +++ b/docs/learn-guides-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-polkadot-opengov.html b/docs/learn-guides-polkadot-opengov.html index 3103c8ce5cc7..9e66e6309d0f 100644 --- a/docs/learn-guides-polkadot-opengov.html +++ b/docs/learn-guides-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -67,7 +67,7 @@ Small Tipper Track would be fine for any kind of deposit refund up to 250 DOT.

    - + \ No newline at end of file diff --git a/docs/learn-guides-staking-index.html b/docs/learn-guides-staking-index.html index 30cfba1542e4..39dd17a544d3 100644 --- a/docs/learn-guides-staking-index.html +++ b/docs/learn-guides-staking-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-staking-pools.html b/docs/learn-guides-staking-pools.html index 4007a3989159..2b1edb6a67d5 100644 --- a/docs/learn-guides-staking-pools.html +++ b/docs/learn-guides-staking-pools.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,7 @@ Polkadot-JS UI Extrinsic Tab and issue the following extrisics:

    • nominationPools.claimPayoutOthers extrinsic specifying ALICE's account. This will claim the rewards as a free balance on ALICE's account.

    pools-payoutOthers

    • nominationPools.bondExtraOthers extrinsic specifying ALICE's account and the option to bond:
      • the free balance currently available in ALICE's account (FreeBalance) or
      • the pool rewards (Rewards) unclaimed by ALICE.

    pools-bondExtraOthers

    - + \ No newline at end of file diff --git a/docs/learn-guides-staking.html b/docs/learn-guides-staking.html index 18c014db6ab0..3d253cd540a0 100644 --- a/docs/learn-guides-staking.html +++ b/docs/learn-guides-staking.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ which will list all the pending payouts for your stashes.

    pending-payouts

    To then claim your reward, select the "Payout all" button. This will prompt you to select your stash accounts for payout.

    select-payouts

    Once you are done with payout, another screen will appear asking for you to sign and submit the transaction.

    transaction-payouts

    - + \ No newline at end of file diff --git a/docs/learn-guides-treasury.html b/docs/learn-guides-treasury.html index 089a6b99b87a..f7a059f9001e 100644 --- a/docs/learn-guides-treasury.html +++ b/docs/learn-guides-treasury.html @@ -19,7 +19,7 @@ - + @@ -62,7 +62,7 @@ to the 32 / Small Spender track, you will need to submit it to the 30 / Small Tipper or 31 / Big Tipper tracks depending on the number of tokens to be requested.

    Briefly, you will need to:

    • Create a preimage using the treasury.Spend extrinsic and specifying the number of tokens and the beneficiary of the tip, and
    • Submit a proposal to the right track (i.e. 30 or 31) using the preimage hash.
    - + \ No newline at end of file diff --git a/docs/learn-guides-vault.html b/docs/learn-guides-vault.html index f361efa3da93..4d8367592061 100644 --- a/docs/learn-guides-vault.html +++ b/docs/learn-guides-vault.html @@ -19,7 +19,7 @@ - + @@ -70,7 +70,7 @@ chain and version is the version of the metadata.

    Add the renamed files to the /public/qr folder within the Metadata Portal repository.

    Run Portal

    Open the terminal within the Metadata Portal repository and run make updater. Then run make collector; this will create the _latest.apng files for each of the chains (removed by the command make cleaner). Finally, run yarn start to load the metadata portal on your localhost.

    - + \ No newline at end of file diff --git a/docs/learn-identity.html b/docs/learn-identity.html index fbb86e2facf8..5a2205f0b252 100644 --- a/docs/learn-identity.html +++ b/docs/learn-identity.html @@ -19,7 +19,7 @@ - + @@ -108,7 +108,7 @@ an identity also clears all sub accounts and returns their deposits.

    Visit the section "Clear an Identity" on

    this support article for guidelines about clearing identities.

    Killing: The Council can kill an identity that it deems erroneous. This results in a slash of the deposit.

    - + \ No newline at end of file diff --git a/docs/learn-implementations.html b/docs/learn-implementations.html index cb1b6dfcc7ab..7ab4ee179ec7 100644 --- a/docs/learn-implementations.html +++ b/docs/learn-implementations.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ collection of tools, interfaces, and libraries for Polkadot and Substrate.

    Other implementations that have received grants

    While the ecosystem continues to grow rapidly, the continued development of alternative implementations will only make Polkadot stronger. Consider becoming a contributor to the ecosystem, and learn about the how you can receieve a grant for your development.

    - + \ No newline at end of file diff --git a/docs/learn-index.html b/docs/learn-index.html index 2e76b4b76a98..d4a3f3bcf891 100644 --- a/docs/learn-index.html +++ b/docs/learn-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-inflation.html b/docs/learn-inflation.html index d7e3da07bd18..c8227f38aea6 100644 --- a/docs/learn-inflation.html +++ b/docs/learn-inflation.html @@ -19,7 +19,7 @@ - + @@ -72,7 +72,7 @@ incentivizing them to stake more tokens on the network. On the contrary, staking rewards drop if staked tokens exceed the ideal staking rate. This results from the change in the percentage of staking rewards that go to the Treasury.

    - + \ No newline at end of file diff --git a/docs/learn-launch.html b/docs/learn-launch.html index 969909615896..957b5b51cb8b 100644 --- a/docs/learn-launch.html +++ b/docs/learn-launch.html @@ -19,7 +19,7 @@ - + @@ -46,8 +46,8 @@ the restriction on balance transfers. Transfer functionality was subsequently enabled on Polkadot at block number 1_205_128 on August 18, 2020, at 16:39 UTC.

    Core Functionality

    After five years of research and development and a multi-stage launch that began in May 2020, Polkadot launch was completed on December 18, 2021, with all auction-winning parachains producing -blocks on the network.

    Check out these resources for further information:

    - +blocks on the network.

    Check out these resources for further information:

    + \ No newline at end of file diff --git a/docs/learn-nft-index.html b/docs/learn-nft-index.html index fb212d6b0b6a..cae808712839 100644 --- a/docs/learn-nft-index.html +++ b/docs/learn-nft-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-nft-pallets.html b/docs/learn-nft-pallets.html index 9617edda99c3..d8d917467c0d 100644 --- a/docs/learn-nft-pallets.html +++ b/docs/learn-nft-pallets.html @@ -19,7 +19,7 @@ - + @@ -108,7 +108,7 @@ balance-keeping chain for both fungible and non-fungibles.

    These NFTs can be viewed and interacted with on RMRK's Singular platform, by switching the top right menu from Kusama to the Asset Hub.

    nft-hub

    They can also be interacted with directly through the extrinsics tab of the Asset Hub:

    uniques.png

    - + \ No newline at end of file diff --git a/docs/learn-nft-projects.html b/docs/learn-nft-projects.html index 9b81f02752c9..0733c06bc067 100644 --- a/docs/learn-nft-projects.html +++ b/docs/learn-nft-projects.html @@ -19,7 +19,7 @@ - + @@ -99,7 +99,7 @@ on, rather than entering the NFT space themselves as an end-product.

    Unique Network aims to make their marketplace technology open-source and whitelabel-friendly. In theory, it should be trivial to set up a new marketplace for your project using Unique's technology. Unique network aims to be a parachain on Polkadot, and Quartz is their Kusama counterpart.

    - + \ No newline at end of file diff --git a/docs/learn-nft.html b/docs/learn-nft.html index a1e11ca1ffbb..24d993880fee 100644 --- a/docs/learn-nft.html +++ b/docs/learn-nft.html @@ -19,7 +19,7 @@ - + @@ -64,7 +64,7 @@ RMRK hackathon for porting RMRK NFTs into simplified IOUs on EVM chains

    References

    - + \ No newline at end of file diff --git a/docs/learn-nomination-pools.html b/docs/learn-nomination-pools.html index b388c8e99e04..2de41ce7b268 100644 --- a/docs/learn-nomination-pools.html +++ b/docs/learn-nomination-pools.html @@ -19,7 +19,7 @@ - + @@ -201,7 +201,7 @@ in the nomination pools and earn staking rewards. For additional information, see this blog post. Check the wiki doc on nomination pools for more information.

    NominatingJoining a Pool
    Minimum 250 DOT to nominate.Minimum 1 DOT to be a member.
    Rewards can be compounded automatically or sent to any account.Rewards can be manually claimed to the pool member's account and be bonded in the pool again to compound them.
    If the active validator gets slashed, all active nominators are subjected to slashing, also those that do not receive rewards due to the oversubscription issue.If the active validator gets slashed, all pool members are subjected to slashing.
    Can bond and stake DOT indefinitely.Can bond and stake DOT until the pool exists.
    Unbonding period of 28 days. Can switch validators without unbonding.Unbonding period of 28 days. Need to unbond before switching to a different pool.
    Maximum uncapped.Maximum uncapped.
    Should bond more than the minimum active nomination in an era to be eligible to earn staking rewards, although it can depend on multiple other factors outlined in the linked document.A nomination pool earns rewards in an era if it satisfies all the conditions mentioned for the nominator (as the nomination pool is just a nominator from the NPoS system perspective).
    Staked tokens can be used for participation in Governance.Staked tokens cannot be used for participation in Governance.
    Rewards payout can be triggered permissionlessly by anyone (typically done by the validator).The pool member must claim the rewards.
    Bonded funds remain in your account.Bonded funds are transferred to a pool account which is administered by the network protocol and is not accessible to anyone else. See System Accounts for more information.
    Nominator manages the list of staked validators (up to 16).Nominations managed by the pool operator.
    - + \ No newline at end of file diff --git a/docs/learn-nominator.html b/docs/learn-nominator.html index 2badaa752b21..62c7c10195d4 100644 --- a/docs/learn-nominator.html +++ b/docs/learn-nominator.html @@ -19,7 +19,7 @@ - + @@ -270,7 +270,7 @@ Polkadot JS Apps > Network > Staking > Targets page.

    Minimum Active Nomination

    Guides

    - + \ No newline at end of file diff --git a/docs/learn-parachains-faq.html b/docs/learn-parachains-faq.html index 234cd7e7e77b..2975c49d4895 100644 --- a/docs/learn-parachains-faq.html +++ b/docs/learn-parachains-faq.html @@ -19,7 +19,7 @@ - + @@ -111,7 +111,7 @@ initiate an auction, however, Root origin (via referendum) is needed to cancel an auction. Here is a proposal that gives a glimpse of what goes into planning auctions schedule - Proposed Polkadot Auction Schedule 2022.

    - + \ No newline at end of file diff --git a/docs/learn-parachains-index.html b/docs/learn-parachains-index.html index 92fd112d030e..53038809b49d 100644 --- a/docs/learn-parachains-index.html +++ b/docs/learn-parachains-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-parachains-protocol.html b/docs/learn-parachains-protocol.html index b5c5cbf0073a..ce0275a1152c 100644 --- a/docs/learn-parachains-protocol.html +++ b/docs/learn-parachains-protocol.html @@ -19,7 +19,7 @@ - + @@ -272,7 +272,7 @@ Parity analyst Joe Petrowski expounds on the validity checks that a parachain block must pass in order to progress the parachain.
  • Availability and Validity - Paper by the W3F Research Team that specifies the availability and validity protocol in detail.
  • - + \ No newline at end of file diff --git a/docs/learn-parachains.html b/docs/learn-parachains.html index f946ad56bed0..33e885c3cc65 100644 --- a/docs/learn-parachains.html +++ b/docs/learn-parachains.html @@ -19,7 +19,7 @@ - + @@ -189,7 +189,7 @@ its own. The Relay Chain provides security to attached parachains, but also provides a guarantee of secure message-passing between them."
  • The Path of a Parachain Block - A technical walk-through of how parachains interact with the Relay Chain.
  • - + \ No newline at end of file diff --git a/docs/learn-parathreads.html b/docs/learn-parathreads.html index f4ebd1e43083..32e442de9546 100644 --- a/docs/learn-parathreads.html +++ b/docs/learn-parathreads.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ produce new blocks when they need to.

    Parathreads help ease the sharp stop of the parachain slot term by allowing parachains that are still doing something useful to produce blocks, even if it is no longer economically viable to rent a parachain slot.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-participants-index.html b/docs/learn-participants-index.html index 547e06d898a0..078386f414de 100644 --- a/docs/learn-participants-index.html +++ b/docs/learn-participants-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-phragmen.html b/docs/learn-phragmen.html index 17520a7c324d..a32b2de4a93b 100644 --- a/docs/learn-phragmen.html +++ b/docs/learn-phragmen.html @@ -19,7 +19,7 @@ - + @@ -272,7 +272,7 @@ This paper by Brill et al. is the source for the simple Phragmén method, along with proofs about its properties.
  • Offline Phragmén - Script to generate the Phragmén validator election outcome before the start of an era.
  • - + \ No newline at end of file diff --git a/docs/learn-polkadot-host.html b/docs/learn-polkadot-host.html index 27304cc6b5d9..710ee6a072e3 100644 --- a/docs/learn-polkadot-host.html +++ b/docs/learn-polkadot-host.html @@ -19,7 +19,7 @@ - + @@ -45,7 +45,7 @@ Host is referred to as the Executor. For additional technical implementation details, check out this section of the Polkadot Spec.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov-treasury.html b/docs/learn-polkadot-opengov-treasury.html index 5dc07628f51c..b077cc332490 100644 --- a/docs/learn-polkadot-opengov-treasury.html +++ b/docs/learn-polkadot-opengov-treasury.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ requires a decision deposit of 10 DOT.

    Small Tipper

    This track can be used for treasury spending requests up to 100 DOT per referendum. Each referendum requires a decision deposit of 1 DOT.

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov.html b/docs/learn-polkadot-opengov.html index 39fbfa6320b5..3e1faec80f59 100644 --- a/docs/learn-polkadot-opengov.html +++ b/docs/learn-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -293,7 +293,7 @@ these guidelines.

    Future plans include that public members can apply to become a Fellowship candidate by placing a small deposit (which will be returned once they become members). Their candidacy will go through a referendum to be approved to become a member.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-proxies-pure.html b/docs/learn-proxies-pure.html index d398df2fff4c..68775c2a4161 100644 --- a/docs/learn-proxies-pure.html +++ b/docs/learn-proxies-pure.html @@ -19,7 +19,7 @@ - + @@ -129,7 +129,7 @@ automatically ask for Charly's signature. Thus one proxy call will trigger the second one because Charly's is the only any proxy of P-C, and P-C cannot sign anything. While if we want to use Bob's account we will need to submit all three proxy calls.

    - + \ No newline at end of file diff --git a/docs/learn-proxies.html b/docs/learn-proxies.html index 11e816b100a7..8da6806ec7c0 100644 --- a/docs/learn-proxies.html +++ b/docs/learn-proxies.html @@ -19,7 +19,7 @@ - + @@ -140,7 +140,7 @@ get an error "Proxy unannounced" since the announcement will be done after the time delay. Also note that regular proxy.proxy calls do not work with time-delayed proxies, you need to announce the call first and then execute the announced call on a separate transaction.

    - + \ No newline at end of file diff --git a/docs/learn-redenomination.html b/docs/learn-redenomination.html index a17ebd2972f4..12db92441436 100644 --- a/docs/learn-redenomination.html +++ b/docs/learn-redenomination.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ Ecosystem Redenomination Guide for recommendations.

    Please reach out to support@polkadot.network if you need any assistance in making sure your software is compatible with the redenomination.

    - + \ No newline at end of file diff --git a/docs/learn-runtime-upgrades.html b/docs/learn-runtime-upgrades.html index 0bace41ece43..c6f24bf75274 100644 --- a/docs/learn-runtime-upgrades.html +++ b/docs/learn-runtime-upgrades.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ may be up to the last block before execution, but it will not work if this is missing.
  • democracy(Executed) events for actual execution. In the case of a runtime upgrade, there will also be a system(CodeUpdated) event.
  • You can also monitor Polkassembly for discussions on on-chain proposals and referenda.

    * E.g. via pallets/democracy/storage/ReferendumInfoOf?key1=index&at=blockNumber on Sidecar.

    - + \ No newline at end of file diff --git a/docs/learn-sassafras.html b/docs/learn-sassafras.html index 62b326051a59..32c11d9112b2 100644 --- a/docs/learn-sassafras.html +++ b/docs/learn-sassafras.html @@ -19,7 +19,7 @@ - + @@ -31,7 +31,7 @@ with time-constant intervals. The protocol utilizes zk-SNARKs to construct a ring-VRF and is a work in progress.

    This page will be updated as progress ensues.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-scams.html b/docs/learn-scams.html index 5d2248494cfd..c9bc8ebffd18 100644 --- a/docs/learn-scams.html +++ b/docs/learn-scams.html @@ -19,7 +19,7 @@ - + @@ -82,7 +82,7 @@ for steps you should take to prevent further loss and contact Polkadot Support from the same page. Finally, make sure to read the present article carefully to learn how to avoid falling victim in the future.

    - + \ No newline at end of file diff --git a/docs/learn-spree.html b/docs/learn-spree.html index 705a083e8f3f..f0bfa20f7b9e 100644 --- a/docs/learn-spree.html +++ b/docs/learn-spree.html @@ -19,7 +19,7 @@ - + @@ -78,7 +78,7 @@ instances, and the next state root of the instance. They do this validation by checking it against the validate function as provided by the SPREE module API. Collators are expected to be able to provide this information to progress their parachains.

    - + \ No newline at end of file diff --git a/docs/learn-staking-advanced.html b/docs/learn-staking-advanced.html index ec57b7fd70c1..d78c9d5ca0da 100644 --- a/docs/learn-staking-advanced.html +++ b/docs/learn-staking-advanced.html @@ -19,7 +19,7 @@ - + @@ -313,7 +313,7 @@ which is a fixed amount.

    Further Resources

    If you want to run a staking miner on your validator, refer to the repository provided in the resources section below.

    - + \ No newline at end of file diff --git a/docs/learn-staking-index.html b/docs/learn-staking-index.html index 6103601746a5..3d46a7f7a934 100644 --- a/docs/learn-staking-index.html +++ b/docs/learn-staking-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-staking.html b/docs/learn-staking.html index 256d81d5e550..87c39cf714b2 100644 --- a/docs/learn-staking.html +++ b/docs/learn-staking.html @@ -19,7 +19,7 @@ - + @@ -355,7 +355,7 @@ this support page for the FAQs about staking.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-system-chains.html b/docs/learn-system-chains.html index 197b97d327b6..28af305311d1 100644 --- a/docs/learn-system-chains.html +++ b/docs/learn-system-chains.html @@ -19,7 +19,7 @@ - + @@ -87,7 +87,7 @@ isolation provided by parachains.

    See the Bridges page for information on the latest bridge projects. Currently, a Bridge Hub parachain is in development that will be a portal for trust-minimized bridges to other networks.

    - + \ No newline at end of file diff --git a/docs/learn-teleport.html b/docs/learn-teleport.html index 5c01c1a20b78..e1f408334bb7 100644 --- a/docs/learn-teleport.html +++ b/docs/learn-teleport.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ condition will result in a change in the asset's total issuance (in the case of fungible tokens) or a complete loss/duplication of an NFT.

    Teleporting Tokens using the Polkadot-JS UI

    Troubleshooting

    If you do not see "Accounts > Teleport" in [Polkadot-JS UI], the source chain that you have selected does not support teleportation yet.

    - + \ No newline at end of file diff --git a/docs/learn-transaction-fees.html b/docs/learn-transaction-fees.html index dccd95cb2428..93b788c93f8c 100644 --- a/docs/learn-transaction-fees.html +++ b/docs/learn-transaction-fees.html @@ -19,7 +19,7 @@ - + @@ -142,7 +142,7 @@ how reasonable they find the timestamp. In Polkadot, it must be within some acceptable range of their own system clocks.

    Learn More

    - + \ No newline at end of file diff --git a/docs/learn-transactions-index.html b/docs/learn-transactions-index.html index 14d61796fa0e..f0261a3e5400 100644 --- a/docs/learn-transactions-index.html +++ b/docs/learn-transactions-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-treasury.html b/docs/learn-treasury.html index 231674ceff5b..f96df869f9f7 100644 --- a/docs/learn-treasury.html +++ b/docs/learn-treasury.html @@ -19,7 +19,7 @@ - + @@ -170,7 +170,7 @@ taking place. The time delay then allows chain participants time to respond. The response may take the form of governance measures or - in the most extreme cases a liquidation of their holdings and a migration to a minority fork. However, the possibility of this scenario is quite low.

    Further Reading

    - + \ No newline at end of file diff --git a/docs/learn-validator.html b/docs/learn-validator.html index 2c857bf1ddf9..508401722730 100644 --- a/docs/learn-validator.html +++ b/docs/learn-validator.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,7 @@ statistics.
  • YieldScan - Staking yield maximization platform, designed to minimize effort.
  • Subscan Validators Page - Displays information on the current validators - not as tailored for validators as the other sites.
  • - + \ No newline at end of file diff --git a/docs/learn-video-tutorials.html b/docs/learn-video-tutorials.html index 605b64231d36..768bee36f060 100644 --- a/docs/learn-video-tutorials.html +++ b/docs/learn-video-tutorials.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@ - + \ No newline at end of file diff --git a/docs/learn-wasm.html b/docs/learn-wasm.html index cb05709ad96c..beb1c6141554 100644 --- a/docs/learn-wasm.html +++ b/docs/learn-wasm.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ spec.
  • Wasmi - WebAssembly interpreter written in Rust.
  • Parity Wasm - WebAssembly serialization/deserialization in Rust.
  • Wasm utils - Collection of Wasm utilities used in Parity and Wasm contract development.
  • - + \ No newline at end of file diff --git a/docs/learn-xcm-index.html b/docs/learn-xcm-index.html index 425f8a64d3b0..533a00ba88e6 100644 --- a/docs/learn-xcm-index.html +++ b/docs/learn-xcm-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-xcm-instructions.html b/docs/learn-xcm-instructions.html index 75b1ce85416b..049249e006c4 100644 --- a/docs/learn-xcm-instructions.html +++ b/docs/learn-xcm-instructions.html @@ -19,7 +19,7 @@ - + @@ -37,7 +37,7 @@ system and may not be transferred. It may only be unlocked with the receipt of the UnlockAsset instruction from this chain.

  • RequestUnlock(MultiAsset, MultiLocation) - Send an UnlockAsset instruction to the locker for the given asset.

  • - + \ No newline at end of file diff --git a/docs/learn-xcm-pallet.html b/docs/learn-xcm-pallet.html index 138b3e36876a..dd92ef69a919 100644 --- a/docs/learn-xcm-pallet.html +++ b/docs/learn-xcm-pallet.html @@ -19,7 +19,7 @@ - + @@ -86,7 +86,7 @@ calculates the total fee based on the number of instructions.

    The Trader used to calculate the weight (time for computation in consensus) to include in the message. Fee calculation in XCM is highly configurable and, for this reason, subjective to whichever configuration is in place.

    - + \ No newline at end of file diff --git a/docs/learn-xcm-transport.html b/docs/learn-xcm-transport.html index 32756a2314b1..4f1344e1b592 100644 --- a/docs/learn-xcm-transport.html +++ b/docs/learn-xcm-transport.html @@ -19,7 +19,7 @@ - + @@ -69,7 +69,7 @@ asset transfer as intended.

    The collator now hands this block to the validator, which itself will verify that this message was processed. If the message was processed and all other aspects of the block are valid, the validator will include this block for parachain B into the Relay Chain.

    - + \ No newline at end of file diff --git a/docs/learn-xcm-usecases.html b/docs/learn-xcm-usecases.html index 724170a29d00..da7345e6a09b 100644 --- a/docs/learn-xcm-usecases.html +++ b/docs/learn-xcm-usecases.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ destination's sovereign account, and sends this instruction onwards to the destination. The destination receives the instruction and processes it, minting the derivative assets as a result of the process.

    1. DepositAsset

    The destination deposits the derivative assets minted to the receiving account.

    - + \ No newline at end of file diff --git a/docs/learn-xcm.html b/docs/learn-xcm.html index 08f97e471cf3..8cd27068c01d 100644 --- a/docs/learn-xcm.html +++ b/docs/learn-xcm.html @@ -19,7 +19,7 @@ - + @@ -92,7 +92,7 @@ Technical audit report by Quarkslab prepared for Parity.

  • XCM pallet code - The pallet that contains XCM logic from the Polkadot code repository

  • XCM Config & Pallet-XCM | Polkadot Deep Dives - A technical deep dive into pallet-xcm and the XCM configuration.

  • - + \ No newline at end of file diff --git a/docs/learn-xcvm.html b/docs/learn-xcvm.html index e83a386cada7..ac9fea991ed2 100644 --- a/docs/learn-xcvm.html +++ b/docs/learn-xcvm.html @@ -19,7 +19,7 @@ - + @@ -110,7 +110,7 @@ a MultiLocation.

    Simulating XCVM using the xcm-simulator

    Within the Polkadot repository exists the xcm-simulator, which allows developers to experiment with building, executing, and simulating various XCM use scenarios.

    - + \ No newline at end of file diff --git a/docs/learn/xcm.html b/docs/learn/xcm.html index 6658a084ec66..f4fc25704080 100644 --- a/docs/learn/xcm.html +++ b/docs/learn/xcm.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/config-deep-dive.html b/docs/learn/xcm/config-deep-dive.html index 2d889c8d68b8..1c0a4a8718f4 100644 --- a/docs/learn/xcm/config-deep-dive.html +++ b/docs/learn/xcm/config-deep-dive.html @@ -19,7 +19,7 @@ - + @@ -132,7 +132,7 @@ Statemine, or Trappist for examples of how to implement the xcm-executor config.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-fees.html b/docs/learn/xcm/fundamentals-fees.html index c282e7337cb9..c9d0a7dc3923 100644 --- a/docs/learn/xcm/fundamentals-fees.html +++ b/docs/learn/xcm/fundamentals-fees.html @@ -19,7 +19,7 @@ - + @@ -56,7 +56,7 @@ and charging execution fees.

    XCM pallet

    FRAME pallets, like the XCM pallet, specify weights for each extrinsic they expose. That means that when interacting with pallets that deal with XCM, there will be an additional fee at the beginning for calling the extrinsic locally.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-multiasset.html b/docs/learn/xcm/fundamentals-multiasset.html index 871434fb3a22..fd7709281cdc 100644 --- a/docs/learn/xcm/fundamentals-multiasset.html +++ b/docs/learn/xcm/fundamentals-multiasset.html @@ -19,7 +19,7 @@ - + @@ -56,7 +56,7 @@ MultiAssets and WildMultiAsset allowing either a wildcard or a list of definite (i.e. not wildcard) assets to be specified.

    pub enum MultiAssetFilter {
    /// Specify the filter as being everything contained by the given `MultiAssets` inner.
    Definite(MultiAssets),
    /// Specify the filter as the given `WildMultiAsset` wildcard.
    Wild(WildMultiAsset),
    }

    Examples

    MultiAsset

    For more information about the MultiLocations used to define concrete assets, see MultiLocation and Junction.

    // Location Relay Chain
    // 100 Native Asset (three ways)
    MultiAsset {id: Concrete(MultiLocation {parents: 0, interior: Here}), fun: Fungible(100u128)};
    MultiAsset {id: Here.into(), fun: 100.into()};
    let _: MultiAsset = (Here, 100u128).into();

    // 100 Parachain's Native Asset
    let _: MultiAsset = (X1(Parachain(1000)), 100u128).into();
    // 100 Fungible assets in Parachain 1000 with id 1234
    let _: MultiAsset = (X2(Parachain(1000), GeneralIndex(1234)), 100u128).into();
    // Non Fungible asset with asset class 1234 containing only one nft instance in Parachain 1000
    let _: MultiAsset = (X2(Parachain(1000), GeneralIndex(1234)), Undefined).into();
    // Non Fungible asset with asset class 1234 and AssetInstance 1 in Parachain 1000
    let _: MultiAsset = (X2(Parachain(1000), GeneralIndex(1234)), Index(1)).into();

    MultiAssetFilter

    let a1: MultiAssets = MultiAssets::from(vec![MultiAsset {id: Here.into(), fun: 100u128.into()}]);
    let b1: MultiAssets = (Here, 100u128).into();
    assert_eq!(a1, b1);

    let a2: MultiAssetFilter = a1.into();
    let b2 = MultiAssetFilter::Definite((Here, 100u128).into());
    assert_eq!(a2, b2);

    let a3 = MultiAssetFilter::Wild(WildMultiAsset::All);
    let b3: MultiAssetFilter = All.into();
    assert_eq!(a3, b3);
    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-summary.html b/docs/learn/xcm/fundamentals-summary.html index edacfcf5b1f1..03c6050675e7 100644 --- a/docs/learn/xcm/fundamentals-summary.html +++ b/docs/learn/xcm/fundamentals-summary.html @@ -19,14 +19,14 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-xcvm.html b/docs/learn/xcm/fundamentals-xcvm.html index 1b46b58dabca..acd5cbcd51a0 100644 --- a/docs/learn/xcm/fundamentals-xcvm.html +++ b/docs/learn/xcm/fundamentals-xcvm.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals.html b/docs/learn/xcm/fundamentals.html index d4ac4e0131b6..64e4a2e9eca9 100644 --- a/docs/learn/xcm/fundamentals.html +++ b/docs/learn/xcm/fundamentals.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation-example.html b/docs/learn/xcm/fundamentals/multilocation-example.html index f68d7746b287..8a7f621db179 100644 --- a/docs/learn/xcm/fundamentals/multilocation-example.html +++ b/docs/learn/xcm/fundamentals/multilocation-example.html @@ -19,14 +19,14 @@ - +

    Example

    In this example we show different MultiLocations for the system hierarchy in the image below. Example

    From the perspective of RelayA

    // ParaA
    let _: MultiLocation = Parachain(1000).into();
    // AccountId32 in Parachain A
    let _: MultiLocation = (Parachain(1000), AccountId32 { network: RELAY_A_NETWORK, id: [0u8; 32]}).into();
    // Asset in Parachain A
    let _: MultiLocation = (Parachain(1000), PalletInstance(1), GeneralIndex(1)).into();
    // Ethereum based account on Parachain B
    let _: MultiLocation = (Parachain(2000), AccountKey20 { network: RELAY_A_NETWORK, key: [0u8; 20] }).into();
    // Smart Contract
    let _: MultiLocation = (Parachain(2000), PalletInstance(1), AccountKey20 { network: RELAY_A_NETWORK, key: [0u8; 20] }).into();
    // RelayB
    let _: MultiLocation = (Parent, GlobalConsensus(RELAY_B_NETWORK)).into();
    // NFT on Parachain C
    let _: MultiLocation = (Parent, GlobalConsensus(RELAY_B_NETWORK), Parachain(1000), GeneralIndex(1)).into();

    From the perspective of Parachain C

    // Relay A
    let _: MultiLocation = Parent.into();
    // Plurality Example. Many more BodyId/BodyPart combos imaginable
    let _: MultiLocation = (Parent, Plurality { id: BodyId::Index(0), part: BodyPart::Members { count: 10 } }).into();
    // Account in Relay
    let _: MultiLocation = (Parent, AccountId32 { network: None, id: [0u8; 32] }).into();

    From the perspective of the Smart Contract

    // Asset in Parachain A
    let _: MultiLocation = (Parent, Parent, Parachain(1000), PalletInstance(1), GeneralIndex(1)).into();

    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation-junctions.html b/docs/learn/xcm/fundamentals/multilocation-junctions.html index 2840339e1f1c..a74865109dca 100644 --- a/docs/learn/xcm/fundamentals/multilocation-junctions.html +++ b/docs/learn/xcm/fundamentals/multilocation-junctions.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ relay chain from the perspective of the Polkadot relay chain as {parents: 1, interior: GlobalConsensus(Kusama)}. An example use case could be routing XCMs between global consensus networks using bridges.

    Multiple ways to create a MultiLocation

    // Current Location
    MultiLocation {parents: 0, interior: Here};
    MultiLocation::new(0, Here);
    MultiLocation::here();
    MultiLocation::default();
    let _: MultiLocation = Here.into();

    // Parent Location
    MultiLocation {parents: 1, interior: Here};
    MultiLocation::parent();
    let _: MultiLocation = Parent.into();

    // Conversion
    MultiLocation { parents: 2, interior: X2(Parachain(1), GeneralIndex(1))};
    let _: MultiLocation = (Parent, Parent, Parachain(1), GeneralIndex(1)).into();
    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation-summary.html b/docs/learn/xcm/fundamentals/multilocation-summary.html index e34c20b29fee..6798133cce9f 100644 --- a/docs/learn/xcm/fundamentals/multilocation-summary.html +++ b/docs/learn/xcm/fundamentals/multilocation-summary.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ .. are followed by some number of Junctions, all separated by /. The X1 and X2 variants are expressing the number of Junctions that we step down in the hierarchical structure (see Junctions for an explanation).

    // From: RelayA
    // To: ParaB
    // Location: Parachain(2000)
    MultiLocation {parents: 0, interior: X1(Parachain(2000))};
    // To: Account in ParaA
    // Location: Parachain(1000)/AccountId32(0x00..)
    MultiLocation {
    parents: 0,
    interior: X2(
    Parachain(1000),
    AccountId32{network: None, id: [0u8; 32]}
    )
    };

    // From: ParaB
    // To: RelayA
    // Location: ../Here
    MultiLocation {parents: 1, interior: Here};
    // To: Account in ParaA
    // Location: ../Parachain(1000)/AccountId32(0x00..)
    MultiLocation {
    parents: 1,
    interior: X2(
    Parachain(1000),
    AccountId32{network: None, id: [0u8; 32]}
    )
    };

    What's next:

    • More information about junctions
    • More MultiLocation examples
    • Expressing assets using Multilocations: [MultiAsset][../multiasset.md]
    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation.html b/docs/learn/xcm/fundamentals/multilocation.html index f0240e87e90b..f77f962a9150 100644 --- a/docs/learn/xcm/fundamentals/multilocation.html +++ b/docs/learn/xcm/fundamentals/multilocation.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/introduction.html b/docs/learn/xcm/introduction.html index 4b343cbe0eab..b2637062fb79 100644 --- a/docs/learn/xcm/introduction.html +++ b/docs/learn/xcm/introduction.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ open an issue. If you want to contribute to the format, check out the RFC process.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-assets.html b/docs/learn/xcm/journey-assets.html index 3faf86b0d02d..e3dae3d25c20 100644 --- a/docs/learn/xcm/journey-assets.html +++ b/docs/learn/xcm/journey-assets.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ relay chain. The assets are trapped because an error is thrown and the execution is halted. Parachain A claims the trapped assets and receives a report of the holding register.

    Parachain A sends the following message to the relay chain. The message errors because of the Trap instruction, so all assets in the Holding Register are trapped.

    let message = Xcm(vec![
    WithdrawAsset((Here, 10 * CENTS).into()),
    BuyExecution { fees: (Here, CENTS).into(), weight_limit: WeightLimit::Unlimited },
    Trap(0), // <-- Errors
    DepositAsset { // <-- Not executed because of error.
    assets: All.into(),
    beneficiary: AccountId32 {
    network: Some(parachain::RelayNetwork::get()),
    id: ALICE.into()
    }.into()
    }
    ]);

    Parachain A claims the assets, reports them to itself and deposits them in the Account of Alice.

    let claim_message = Xcm(vec![
    ClaimAsset { assets: (Here, 10 * CENTS).into(), ticket: Here.into() },
    ReportHolding {
    response_info: QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_parts(1_000_000_000, 64*64) },
    assets: All.into()
    },
    DepositAsset {
    assets: All.into(),
    beneficiary: AccountId32 {
    network: Some(parachain::RelayNetwork::get()),
    id: ALICE.into()
    }.into()
    },
    ]);
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-channels.html b/docs/learn/xcm/journey-channels.html index d788b5305d8f..cb054464f46b 100644 --- a/docs/learn/xcm/journey-channels.html +++ b/docs/learn/xcm/journey-channels.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ network), you would call with network: NetworkId::Kusama and destination: X1(Parachain(1000)). Alternatively, to export a message for execution on Polkadot, you would call with network: NetworkId:: Polkadot and destination: Here.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-expectations.html b/docs/learn/xcm/journey-expectations.html index 9fa976dabc7e..efd5b1fb3908 100644 --- a/docs/learn/xcm/journey-expectations.html +++ b/docs/learn/xcm/journey-expectations.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ the error handler, when a specific error is thrown.

        ExpectError(Option<(u32, Error)>)

    Example

    For the full example, check here.

    SetErrorHandler(Xcm(vec![
    ExpectError(Some((1, XcmError::VersionIncompatible))),
    ReportError(QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_all(0),
    }),
    ])),
    // Pallet index is wrong, so throws `PalletNotFound` error.
    ExpectPallet {
    index: 100,
    name: "Balances".into(),
    module_name: "pallet_balances".into(),
    crate_major: 4,
    min_crate_minor: 0,
    },

    ExpectTransactStatus

    The ExpectTransactStatus instruction throws an ExpectationFalse error if the transact status register does not equal the expected transact status.

    Example

    For the full example, check here. The transact status is reported to Parachain(1) if the call in the Transact errors.

    SetErrorHandler(Xcm(vec![ReportTransactStatus(QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_all(0),
    })])),
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: call.encode().into(),
    },
    ExpectTransactStatus(MaybeErrorCode::Success),
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-fees.html b/docs/learn/xcm/journey-fees.html index b1cc55f808f8..5b60de792ff0 100644 --- a/docs/learn/xcm/journey-fees.html +++ b/docs/learn/xcm/journey-fees.html @@ -19,7 +19,7 @@ - + @@ -62,7 +62,7 @@ throws an error, the error handler will be called and the weight for all the instructions that weren't executed is refunded. For the full example, check our repo.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-holding.html b/docs/learn/xcm/journey-holding.html index ec5697ed4cc2..3c48a606add3 100644 --- a/docs/learn/xcm/journey-holding.html +++ b/docs/learn/xcm/journey-holding.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,7 @@ results could differ.

    The Assets in the exchange in Parachain(1). This is a custom exchange implementation just for testing purposes.

    let assets_in_exchange = vec![(Parent, 10 * CENTS).into()];
    parachain::set_exchange_assets(assets_in_exchange);

    The message that is send:

    let message = Xcm(vec![
    WithdrawAsset((Here, 10 * CENTS).into()),
    BuyExecution { fees: (Here, CENTS).into(), weight_limit: WeightLimit::Unlimited },
    // Maximal field set to true.
    ExchangeAsset {
    give: Definite((Here, 5 * CENTS).into()),
    want: (Parent, 5 * CENTS).into(),
    maximal: true,
    },
    DepositAsset {
    assets: AllCounted(2).into(),
    beneficiary: AccountId32 {
    network: Some(parachain::RelayNetwork::get()),
    id: ALICE.into(),
    }
    .into(),
    },
    ]);

    Alice receives 5 CENTS worth of native assets (Here) and 5 CENTS worth of relay chain derivative assets (Parent).

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-locks.html b/docs/learn/xcm/journey-locks.html index 5eac5a716998..5924475292ff 100644 --- a/docs/learn/xcm/journey-locks.html +++ b/docs/learn/xcm/journey-locks.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ pallet-balances: 10.
    ParaA::execute_with(|| {
    let message = Xcm(vec![
    LockAsset { asset: (Here, 10 * CENTS).into(), unlocker: (Parachain(2)).into() },
    LockAsset { asset: (Here, 5 * CENTS).into(), unlocker: (Parachain(3)).into() },
    ]);
    assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message.clone()));
    });

    Relay::execute_with(|| {
    assert_eq!(
    relay_chain::Balances::locks(&parachain_sovereign_account_id(1)),
    vec![BalanceLock { id: *b"py/xcmlk", amount: 10 * CENTS, reasons: Reasons::All }]
    );
    });
    1. Parachain B and C receive the NoteUnlockable instruction.
    ParaB::execute_with(|| {
    assert_eq!(
    parachain::MsgQueue::received_dmp(),
    vec![Xcm(vec![NoteUnlockable {
    owner: (Parent, Parachain(1)).into(),
    asset: (Parent, 10 * CENTS).into()
    }])]
    );
    });

    ParaC::execute_with(|| {
    assert_eq!(
    parachain::MsgQueue::received_dmp(),
    vec![Xcm(vec![NoteUnlockable {
    owner: (Parent, Parachain(1)).into(),
    asset: (Parent, 5 * CENTS).into()
    }])]
    );
    });
    1. Parachain A sends a RequestUnlock instruction to Parachain B for 8 CENTS.
    ParaA::execute_with(|| {
    let message = Xcm(vec![RequestUnlock {
    asset: (Parent, 8 * CENTS).into(),
    locker: Parent.into(),
    }]);

    assert_ok!(ParachainPalletXcm::send_xcm(Here, (Parent, Parachain(2)), message.clone()));
    });
    1. Parachain B Unlocks a part of the funds by sending an UnlockAsset to the relay chain. we check the lock in the balances-pallet. Unlockers: B, C; Funds registered in pallet-xcm: 2, 5. Lock set in pallet-balances: 5.
    Relay::execute_with(|| {
    assert_eq!(
    relay_chain::Balances::locks(&parachain_sovereign_account_id(1)),
    vec![BalanceLock { id: *b"py/xcmlk", amount: 5 * CENTS, reasons: Reasons::All }]
    );
    });
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-origin.html b/docs/learn/xcm/journey-origin.html index 879773f9d4bb..e40fabd5038d 100644 --- a/docs/learn/xcm/journey-origin.html +++ b/docs/learn/xcm/journey-origin.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,7 @@ for certain values of X (thereby allowing sibling chains to use the same account IDs) or Parachain(X)/ (allowing a Relay-chain to use the account IDs native to its child parachains) or just Parent/ (allowing parachains to use AccountIds of the Relay-chain).

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-queries.html b/docs/learn/xcm/journey-queries.html index 5fcaa4ec8e03..90575e24feeb 100644 --- a/docs/learn/xcm/journey-queries.html +++ b/docs/learn/xcm/journey-queries.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ specified destination.

    ReportTransactStatus(QueryResponseInfo)

    Example

    For the full example, check here. Dispatches a call on the consensus system receiving this Xcm and reports back the status of the Transact Status Register.

    Xcm(vec![
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: remark.encode().into(),
    },
    ReportTransactStatus(QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_all(0),
    }),
    ]);
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-register.html b/docs/learn/xcm/journey-register.html index 0e56ab5ec6e5..3bc2f18a5400 100644 --- a/docs/learn/xcm/journey-register.html +++ b/docs/learn/xcm/journey-register.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ and error handler instruction are executed. These instructions are executed regardless of whether an error occurred.

    ClearError

    ClearError

    The ClearError instruction clears the Error Register by setting it to None.

    ClearTransactStatus

    ClearTransactStatus

    The ClearTransactStatus instruction sets the Transact Status Register to its default, cleared, value.

    SetTopic

    SetTopic([u8; 32])

    The SetTopic instruction sets the Topic Register.

    ClearTopic

    ClearTopic

    The ClearTopic instruction clears the Topic Register.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-summary.html b/docs/learn/xcm/journey-summary.html index 2b85ee963c1e..0ad4d8e46a84 100644 --- a/docs/learn/xcm/journey-summary.html +++ b/docs/learn/xcm/journey-summary.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@ - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-transact.html b/docs/learn/xcm/journey-transact.html index 41bd226047c3..408035779865 100644 --- a/docs/learn/xcm/journey-transact.html +++ b/docs/learn/xcm/journey-transact.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ Parachain(1). This function requires the origin to be root. We enable the root origin for the relay chain by setting ParentAsSuperuser for the OriginConverter config type.

    let call = parachain::RuntimeCall::Balances(
    pallet_balances::Call::<parachain::Runtime>::set_balance {
    who: ALICE,
    new_free: 5 * AMOUNT,
    new_reserved: 0,
    },
    );

    let message = Xcm(vec![
    WithdrawAsset((Here, AMOUNT).into()),
    BuyExecution { fees: (Here, AMOUNT).into(), weight_limit: WeightLimit::Unlimited },
    Transact {
    origin_kind: OriginKind::Superuser,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: call.encode().into(),
    },
    ]);

    Example 2

    For the full example, check the repo.

    In this example, as Parachain(1), we create an NFT collection on the relay chain and we then mint an NFT with ID 1. The admin for the nft collection is parachain(1). The call looks as follows:

    let create_collection = relay_chain::RuntimeCall::Uniques(
    pallet_uniques::Call::<relay_chain::Runtime>::create {
    collection: 1u32,
    admin: parachain_sovereign_account_id(1),
    }
    );

    The owner of the NFT is Alice. The nft mint call looks as follows:

    let mint = relay_chain::RuntimeCall::Uniques(
    pallet_uniques::Call::<relay_chain::Runtime>::mint {
    collection: 1u32,
    item: 1u32,
    owner: ALICE,
    }
    );

    The xcm message contains the following instructions:

    1. Withdraw native assets from the Parachain(1)'s sovereign account.
    2. Buy weight with these assets.
    3. Create a collection with as admin and owner the sovereign account of Parachain(1).
    4. Mints an NFT in the collection with item ID 1 and as owner Alice.
    let message = Xcm(vec![
    WithdrawAsset((Here, AMOUNT).into()),
    BuyExecution { fees: (Here, AMOUNT).into(), weight_limit: WeightLimit::Unlimited },
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: create_collection.encode().into(),
    },
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: mint.encode().into(),
    },
    ]);

    Next:

    Check out the following instructions that interact with the Transact Status Register:

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-version.html b/docs/learn/xcm/journey-version.html index 1830dee485ee..94a40d04434e 100644 --- a/docs/learn/xcm/journey-version.html +++ b/docs/learn/xcm/journey-version.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ send back its currently AdvertisedVersion and will keep the subscribed location up to date when the version changes. The subscribed location can unsubscribe to version changes by sending the UnsubscribeVersion instruction.

    SubscribeVersion {
    #[codec(compact)]
    query_id: QueryId,
    max_response_weight: Weight,
    }

    UnsubscribeVersion

    Check out the example.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey.html b/docs/learn/xcm/journey.html index ad7fbbffef25..9c5b85b70f3c 100644 --- a/docs/learn/xcm/journey.html +++ b/docs/learn/xcm/journey.html @@ -19,13 +19,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers-reserve.html b/docs/learn/xcm/journey/transfers-reserve.html index 5de7e4681ac2..16907a2bcea7 100644 --- a/docs/learn/xcm/journey/transfers-reserve.html +++ b/docs/learn/xcm/journey/transfers-reserve.html @@ -19,7 +19,7 @@ - + @@ -73,7 +73,7 @@ It's the sender the one who doesn't need to trust the destination, since it'll ever only be minting derivatives anyway, the sender/reserve controls the real assets and issuance.

    Next steps

    Next, we'll talk about a very important topic we mentioned before but skipped in this chapter, paying fees for the effects our XCMs have.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers-summary.html b/docs/learn/xcm/journey/transfers-summary.html index bf48221276ee..2edf642e208d 100644 --- a/docs/learn/xcm/journey/transfers-summary.html +++ b/docs/learn/xcm/journey/transfers-summary.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ paying for execution and depositing the rest to another account on the same system. The full example can be seen in the repo.

    Transferring between systems

    But what if you want to make a transfer from one system to another? There are two ways of doing this:

    • Asset teleportation
    • Reserve-backed transfers

    We'll be discussing both in the following chapters.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers-teleport.html b/docs/learn/xcm/journey/transfers-teleport.html index e2918ecafbcf..ed4f67d11a39 100644 --- a/docs/learn/xcm/journey/transfers-teleport.html +++ b/docs/learn/xcm/journey/transfers-teleport.html @@ -19,7 +19,7 @@ - + @@ -61,7 +61,7 @@ another system. We could do so with the following program:

    let message = Xcm(vec![
    WithdrawAsset((GeneralIndex(1), 42u32).into()),
    InitiateTeleport {
    assets: All.into(),
    dest: Parachain(1).into(),
    xcm: Xcm(vec![DepositAsset {
    assets: All.into(),
    beneficiary: Junction::AccountId32 {
    id: ALICE.into(),
    network: None,
    }.into()
    }]),
    },
    ]);

    Very little changes, in fact, only the MultiAsset we're referencing changes, like we would expect. All the teleportation logic stays the same. The example assumes an NFT with index 42 inside a collection with index 1.

    Next steps

    We'll look at reserve-backed transfers next.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers.html b/docs/learn/xcm/journey/transfers.html index 89ab857b4571..f8f96abf21dd 100644 --- a/docs/learn/xcm/journey/transfers.html +++ b/docs/learn/xcm/journey/transfers.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-architecture.html b/docs/learn/xcm/overview-architecture.html index 3f563435f7d9..c6fce8dc5f9d 100644 --- a/docs/learn/xcm/overview-architecture.html +++ b/docs/learn/xcm/overview-architecture.html @@ -19,7 +19,7 @@ - + @@ -48,7 +48,7 @@ about later. It's the glue between XCM and FRAME, which is highly used in the Polkadot ecosystem.

    Simulator

    The simulator allows for testing XCMs fast, without needing to boot up several different nodes in a network, or test in production. It's a very useful tool which we'll use throughout this document to build and test different XCMs.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-format.html b/docs/learn/xcm/overview-format.html index f94972fe312d..6fcdc8125943 100644 --- a/docs/learn/xcm/overview-format.html +++ b/docs/learn/xcm/overview-format.html @@ -19,7 +19,7 @@ - + @@ -38,7 +38,7 @@ changes. XCM communicates intentions; the actual interpretation and behaviour of each instruction in an XCM is defined by target's XCVM implementation.

    Both simple and more complex scenarios can be expressed, and developers are encouraged to design and implement diverse cross-consensus communication solutions.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-intro.html b/docs/learn/xcm/overview-intro.html index b6b32bacfb3f..3f27cfb12835 100644 --- a/docs/learn/xcm/overview-intro.html +++ b/docs/learn/xcm/overview-intro.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ propose changes, which end up in newer versions, the current one being v3. To keep up with the development of the format, or to propose changes, go to the XCM format repository.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-summary.html b/docs/learn/xcm/overview-summary.html index 2f538298c57a..77593fc6f7d2 100644 --- a/docs/learn/xcm/overview-summary.html +++ b/docs/learn/xcm/overview-summary.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ interactions between them. XCM is meant to be used by developers to package these interactions into their runtime logic before exposing that functionality to end users.

    This chapter will cover what XCM is, what it isn't, and why it matters before exploring the different components that make up the XCM ecosystem.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-xcvm.html b/docs/learn/xcm/overview-xcvm.html index 83364a87616d..1db50c423f93 100644 --- a/docs/learn/xcm/overview-xcvm.html +++ b/docs/learn/xcm/overview-xcvm.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ putting them in and taking them from this register. This register is used by several of the instructions we will look at later, including DepositAsset and WithdrawAsset.

    For more information on other registers, see the All XCVM Registers section.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview.html b/docs/learn/xcm/overview.html index 5514c3e5c291..fcac5dda00d3 100644 --- a/docs/learn/xcm/overview.html +++ b/docs/learn/xcm/overview.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart-first-look.html b/docs/learn/xcm/quickstart-first-look.html index c99342647740..e544a009494f 100644 --- a/docs/learn/xcm/quickstart-first-look.html +++ b/docs/learn/xcm/quickstart-first-look.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ examples for every instruction in the journey through XCM chapter. First, it's important to learn the fundamentals, MultiLocation, MultiAsset, and other concepts in XCM. We'll talk about those next.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart-simulator.html b/docs/learn/xcm/quickstart-simulator.html index 7efc53ba79c5..b5062eab30e5 100644 --- a/docs/learn/xcm/quickstart-simulator.html +++ b/docs/learn/xcm/quickstart-simulator.html @@ -19,7 +19,7 @@ - + @@ -31,7 +31,7 @@ actually test your XCM-powered solution. We'll get into tools and best practices for testing in the testing chapter.

    We'll use the simulator throughout the documentation to show different XCMs in action. In the next section we will take a first look at an XCM.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart-summary.html b/docs/learn/xcm/quickstart-summary.html index 32f3d20f7d46..6a48176dda34 100644 --- a/docs/learn/xcm/quickstart-summary.html +++ b/docs/learn/xcm/quickstart-summary.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ installation guide.

    Running the Examples

    All examples in the documentation are located in the repository. Follow these steps to run the first-look example. First clone the repository:

    git clone git@github.com:paritytech/xcm-docs.git
    cd xcm-docs/examples

    To run the first-look example, run the following line:

    cargo test -p xcm-examples para_a_simple_transfer -- --nocapture

    It should show you the following output:

    running 1 test
    test first_look::tests::para_a_simple_transfer ... ok

    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.01s
    - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart.html b/docs/learn/xcm/quickstart.html index a4891128f751..34920cc65a0a 100644 --- a/docs/learn/xcm/quickstart.html +++ b/docs/learn/xcm/quickstart.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/reference-glossary.html b/docs/learn/xcm/reference-glossary.html index 12e8ce77114a..4d75de885b6e 100644 --- a/docs/learn/xcm/reference-glossary.html +++ b/docs/learn/xcm/reference-glossary.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ through the relay chain.

    HRMP (Horizontal Message Passing)

    Transport-layer protocol that allows a parachain to send messages to a sibling parachain going through the relay chain. It's a precursor to XCMP, also known as XCMP-lite. It uses a mixture of UMP and VMP.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/reference-xcvm-registers.html b/docs/learn/xcm/reference-xcvm-registers.html index 459258e6849c..137429687bae 100644 --- a/docs/learn/xcm/reference-xcvm-registers.html +++ b/docs/learn/xcm/reference-xcvm-registers.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@
    - + \ No newline at end of file diff --git a/docs/learn/xcm/references.html b/docs/learn/xcm/references.html index 042d0f015a26..9e3c750e0ac4 100644 --- a/docs/learn/xcm/references.html +++ b/docs/learn/xcm/references.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/testing.html b/docs/learn/xcm/testing.html index d316675df0af..2a8089185039 100644 --- a/docs/learn/xcm/testing.html +++ b/docs/learn/xcm/testing.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ messaging infrastructure as live networks, as the transport mechanism is being mocked out. Also, consensus related events are not tested, like disputes, staking and iamonline events. To test for these events, parachains can use E2E tests.

    End-to-End testing

    There are two frameworks being used in the ecosystem to do e2e testing:

    - + \ No newline at end of file diff --git a/docs/ledger.html b/docs/ledger.html index ed517aafd387..b8874bb1753c 100644 --- a/docs/ledger.html +++ b/docs/ledger.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ device after the installation.
  • If you wish to revert the version to the stable release, go to Ledger Live. The app will automatically detect the developer release and give the option to install the previous stable release.
  • - + \ No newline at end of file diff --git a/docs/maintain-bootnode.html b/docs/maintain-bootnode.html index 6239a04af55a..aede5bb4d59d 100644 --- a/docs/maintain-bootnode.html +++ b/docs/maintain-bootnode.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ port 30311:

    /etc/nginx/sites-enabled/dot-bootnode

    server {
    listen 30312 ssl http2 default_server;
    server_name dot-bootnode.stakeworld.io;
    root /var/www/html;

    ssl_certificate "<your_cert";
    ssl_certificate_key "<your_key>";

    location / {
    proxy_buffers 16 4k;
    proxy_buffer_size 2k;
    proxy_pass http://localhost:30311;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    }

    }

    Testing Bootnode Connection

    If we have the above node running with DNS name dot-bootnode.stakeworld.io, proxied with a valid certificate and node-id 12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg then the following commands should give you a: "syncing 1 peers".

    tip

    You can add -lsub-libp2p=trace on the end to get libp2p trace logging for debugging purposes.

    p2p:

    polkadot --chain polkadot --base-path /tmp/node --name "Bootnode testnode" --reserved-only --reserved-nodes "/dns/dot-bootnode.stakeworld.io/tcp/30310/p2p/12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg" --no-hardware-benchmarks

    p2p/ws:

    polkadot --chain polkadot --base-path /tmp/node --name "Bootnode testnode" --reserved-only --reserved-nodes "/dns/dot-bootnode.stakeworld.io/tcp/30311/ws/p2p/12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg" --no-hardware-benchmarks

    p2p/wss:

    polkadot --chain polkadot --base-path /tmp/node --name "Bootnode testnode" --reserved-only --reserved-nodes "/dns/dot-bootnode.stakeworld.io/tcp/30312/wss/p2p/12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg" --no-hardware-benchmarks
    - + \ No newline at end of file diff --git a/docs/maintain-endpoints.html b/docs/maintain-endpoints.html index bfd1e800f9b0..580fe8aba69b 100644 --- a/docs/maintain-endpoints.html +++ b/docs/maintain-endpoints.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ provide additional services such as higher rate limits, potentially more reliable and scalable service, and additional metrics.

    note

    The list of third party RPC endpoints above for Polkadot and Kusama is directly fetched from Polkdot-JS UI

    - + \ No newline at end of file diff --git a/docs/maintain-errors.html b/docs/maintain-errors.html index f0812b28392d..bf2e8ab6a251 100644 --- a/docs/maintain-errors.html +++ b/docs/maintain-errors.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ will wait to be executed at the correct place in the nonce sequence OR it will get discarded due to some other error (ex. the validity period expires).*

    Error Table

    The below table is a reference to the errors that exists in Polkadot. It is generated from the runtime's metadata.

    PalletErrorDocumentation
    System (0)
    InvalidSpecName (0)The name of specification does not match between the current runtime and the new runtime.
    SpecVersionNeedsToIncrease (1)The specification version is not allowed to decrease between the current runtime and the new runtime.
    FailedToExtractRuntimeVersion (2)Failed to extract the runtime version from the new runtime. Either calling Core_version or decoding RuntimeVersion failed.
    NonDefaultComposite (3)Suicide called when the account has non-default composite data.
    NonZeroRefCount (4)There is a non-zero reference count preventing the account from being purged.
    Scheduler (1)
    FailedToSchedule (0)Failed to schedule a call
    NotFound (1)Cannot find the scheduled call.
    TargetBlockNumberInPast (2)Given target block number is in the past.
    RescheduleNoChange (3)Reschedule failed because it does not change scheduled time.
    Balances (5)
    VestingBalance (0)Vesting balance too high to send value
    LiquidityRestrictions (1)Account liquidity restrictions prevent withdrawal
    Overflow (2)Got an overflow after adding
    InsufficientBalance (3)Balance too low to send value
    ExistentialDeposit (4)Value too low to create account due to existential deposit
    KeepAlive (5)Transfer/payment would kill account
    ExistingVestingSchedule (6)A vesting schedule already exists for this account
    DeadAccount (7)Beneficiary account must pre-exist
    Authorship (6)
    InvalidUncleParent (0)The uncle parent not in the chain.
    UnclesAlreadySet (1)Uncles already set in the block.
    TooManyUncles (2)Too many uncles.
    GenesisUncle (3)The uncle is genesis.
    TooHighUncle (4)The uncle is too high in chain.
    UncleAlreadyIncluded (5)The uncle is already included.
    OldUncle (6)The uncle isn't recent enough to be included.
    Staking (7)
    NotController (0)Not a controller account.
    NotStash (1)Not a stash account.
    AlreadyBonded (2)Stash is already bonded.
    AlreadyPaired (3)Controller is already paired.
    EmptyTargets (4)Targets cannot be empty.
    DuplicateIndex (5)Duplicate index.
    InvalidSlashIndex (6)Slash record index out of bounds.
    InsufficientValue (7)Can not bond with value less than minimum balance.
    NoMoreChunks (8)Can not schedule more unlock chunks.
    NoUnlockChunk (9)Can not rebond without unlocking chunks.
    FundedTarget (10)Attempting to target a stash that still has funds.
    InvalidEraToReward (11)Invalid era to reward.
    InvalidNumberOfNominations (12)Invalid number of nominations.
    NotSortedAndUnique (13)Items are not sorted and unique.
    AlreadyClaimed (14)Rewards for this era have already been claimed for this validator.
    OffchainElectionEarlySubmission (15)The submitted result is received out of the open window.
    OffchainElectionWeakSubmission (16)The submitted result is not as good as the one stored on chain.
    SnapshotUnavailable (17)The snapshot data of the current window is missing.
    OffchainElectionBogusWinnerCount (18)Incorrect number of winners were presented.
    OffchainElectionBogusWinner (19)One of the submitted winners is not an active candidate on chain (index is out of range in snapshot).
    OffchainElectionBogusCompact (20)Error while building the assignment type from the compact. This can happen if an index is invalid, or if the weights overflow.
    OffchainElectionBogusNominator (21)One of the submitted nominators is not an active nominator on chain.
    OffchainElectionBogusNomination (22)One of the submitted nominators has an edge to which they have not voted on chain.
    OffchainElectionSlashedNomination (23)One of the submitted nominators has an edge which is submitted before the last non-zero slash of the target.
    OffchainElectionBogusSelfVote (24)A self vote must only be originated from a validator to ONLY themselves.
    OffchainElectionBogusEdge (25)The submitted result has unknown edges that are not among the presented winners.
    OffchainElectionBogusScore (26)The claimed score does not match with the one computed from the data.
    OffchainElectionBogusElectionSize (27)The election size is invalid.
    CallNotAllowed (28)The call is not allowed at the given time due to restrictions of election period.
    IncorrectHistoryDepth (29)Incorrect previous history depth input provided.
    IncorrectSlashingSpans (30)Incorrect number of slashing spans provided.
    Session (9)
    InvalidProof (0)Invalid ownership proof.
    NoAssociatedValidatorId (1)No associated validator ID for account.
    DuplicatedKey (2)Registered duplicate key.
    NoKeys (3)No keys are associated with this account.
    Grandpa (11)
    PauseFailed (0)Attempt to signal GRANDPA pause when the authority set isn't live (either paused or already pending pause).
    ResumeFailed (1)Attempt to signal GRANDPA resume when the authority set isn't paused (either live or already pending resume).
    ChangePending (2)Attempt to signal GRANDPA change with one already pending.
    TooSoon (3)Cannot signal forced change so soon after last.
    InvalidKeyOwnershipProof (4)A key ownership proof provided as part of an equivocation report is invalid.
    InvalidEquivocationProof (5)An equivocation proof provided as part of an equivocation report is invalid.
    DuplicateOffenceReport (6)A given equivocation report is valid but already previously reported.
    ImOnline (12)
    InvalidKey (0)Non existent public key.
    DuplicatedHeartbeat (1)Duplicated heartbeat.
    Democracy (14)
    ValueLow (0)Value too low
    ProposalMissing (1)Proposal does not exist
    BadIndex (2)Unknown index
    AlreadyCanceled (3)Cannot cancel the same proposal twice
    DuplicateProposal (4)Proposal already made
    ProposalBlacklisted (5)Proposal still blacklisted
    NotSimpleMajority (6)Next external proposal not simple majority
    InvalidHash (7)Invalid hash
    NoProposal (8)No external proposal
    AlreadyVetoed (9)Identity may not veto a proposal twice
    NotDelegated (10)Not delegated
    DuplicatePreimage (11)Preimage already noted
    NotImminent (12)Not imminent
    TooEarly (13)Too early
    Imminent (14)Imminent
    PreimageMissing (15)Preimage not found
    ReferendumInvalid (16)Vote given for invalid referendum
    PreimageInvalid (17)Invalid preimage
    NoneWaiting (18)No proposals waiting
    NotLocked (19)The target account does not have a lock.
    NotExpired (20)The lock on the account to be unlocked has not yet expired.
    NotVoter (21)The given account did not vote on the referendum.
    NoPermission (22)The actor has no permission to conduct the action.
    AlreadyDelegating (23)The account is already delegating.
    Overflow (24)An unexpected integer overflow occurred.
    Underflow (25)An unexpected integer underflow occurred.
    InsufficientFunds (26)Too high a balance was provided that the account cannot afford.
    NotDelegating (27)The account is not currently delegating.
    VotesExist (28)The account currently has votes attached to it and the operation cannot succeed until these are removed, either through unvote or reap_vote.
    InstantNotAllowed (29)The instant referendum origin is currently disallowed.
    Nonsense (30)Delegation to oneself makes no sense.
    WrongUpperBound (31)Invalid upper bound.
    MaxVotesReached (32)Maximum number of votes reached.
    InvalidWitness (33)The provided witness data is wrong.
    TooManyProposals (34)Maximum number of proposals reached.
    Council (15)
    NotMember (0)Account is not a member
    DuplicateProposal (1)Duplicate proposals not allowed
    ProposalMissing (2)Proposal must exist
    WrongIndex (3)Mismatched index
    DuplicateVote (4)Duplicate vote ignored
    AlreadyInitialized (5)Members are already initialized!
    TooEarly (6)The close call was made too early, before the end of the voting.
    TooManyProposals (7)There can only be a maximum of MaxProposals active proposals.
    WrongProposalWeight (8)The given weight bound for the proposal was too low.
    WrongProposalLength (9)The given length bound for the proposal was too low.
    TechnicalCommittee (16)
    NotMember (0)Account is not a member
    DuplicateProposal (1)Duplicate proposals not allowed
    ProposalMissing (2)Proposal must exist
    WrongIndex (3)Mismatched index
    DuplicateVote (4)Duplicate vote ignored
    AlreadyInitialized (5)Members are already initialized!
    TooEarly (6)The close call was made too early, before the end of the voting.
    TooManyProposals (7)There can only be a maximum of MaxProposals active proposals.
    WrongProposalWeight (8)The given weight bound for the proposal was too low.
    WrongProposalLength (9)The given length bound for the proposal was too low.
    ElectionsPhragmen (17)
    UnableToVote (0)Cannot vote when no candidates or members exist.
    NoVotes (1)Must vote for at least one candidate.
    TooManyVotes (2)Cannot vote more than candidates.
    MaximumVotesExceeded (3)Cannot vote more than maximum allowed.
    LowBalance (4)Cannot vote with stake less than minimum balance.
    UnableToPayBond (5)Voter can not pay voting bond.
    MustBeVoter (6)Must be a voter.
    ReportSelf (7)Cannot report self.
    DuplicatedCandidate (8)Duplicated candidate submission.
    MemberSubmit (9)Member cannot re-submit candidacy.
    RunnerSubmit (10)Runner cannot re-submit candidacy.
    InsufficientCandidateFunds (11)Candidate does not have enough funds.
    NotMember (12)Not a member.
    InvalidCandidateCount (13)The provided count of number of candidates is incorrect.
    InvalidVoteCount (14)The provided count of number of votes is incorrect.
    InvalidRenouncing (15)The renouncing origin presented a wrong Renouncing parameter.
    InvalidReplacement (16)Prediction regarding replacement after member removal is wrong.
    Treasury (19)
    InsufficientProposersBalance (0)Proposer's balance is too low.
    InvalidIndex (1)No proposal or bounty at that index.
    ReasonTooBig (2)The reason given is just too big.
    AlreadyKnown (3)The tip was already found/started.
    UnknownTip (4)The tip hash is unknown.
    NotFinder (5)The account attempting to retract the tip is not the finder of the tip.
    StillOpen (6)The tip cannot be claimed/closed because there are not enough tippers yet.
    Premature (7)The tip cannot be claimed/closed because it's still in the countdown period.
    UnexpectedStatus (8)The bounty status is unexpected.
    RequireCurator (9)Require bounty curator.
    InvalidValue (10)Invalid bounty value.
    InvalidFee (11)Invalid bounty fee.
    PendingPayout (12)A bounty payout is pending. To cancel the bounty, you must unassign and slash the curator.
    Claims (24)
    InvalidEthereumSignature (0)Invalid Ethereum signature.
    SignerHasNoClaim (1)Ethereum address has no claim.
    SenderHasNoClaim (2)Account ID sending tx has no claim.
    PotUnderflow (3)There's not enough in the pot to pay out some unvested amount. Generally implies a logic error.
    InvalidStatement (4)A needed statement was not included.
    VestedBalanceExists (5)The account already has a vested balance.
    Vesting (25)
    NotVesting (0)The account given is not vesting.
    ExistingVestingSchedule (1)An existing vesting schedule already exists for this account that cannot be clobbered.
    AmountLow (2)Amount being transferred is too low to create a vesting schedule.
    Identity (28)
    TooManySubAccounts (0)Too many subs-accounts.
    NotFound (1)Account isn't found.
    NotNamed (2)Account isn't named.
    EmptyIndex (3)Empty index.
    FeeChanged (4)Fee is changed.
    NoIdentity (5)No identity found.
    StickyJudgement (6)Sticky judgement.
    JudgementGiven (7)Judgement given.
    InvalidJudgement (8)Invalid judgement.
    InvalidIndex (9)The index is invalid.
    InvalidTarget (10)The target is invalid.
    TooManyFields (11)Too many additional fields.
    TooManyRegistrars (12)Maximum amount of registrars reached. Cannot add any more.
    AlreadyClaimed (13)Account ID is already named.
    NotSub (14)Sender is not a sub-account.
    NotOwned (15)Sub-account isn't owned by sender.
    Proxy (29)
    TooMany (0)There are too many proxies registered or too many announcements pending.
    NotFound (1)Proxy registration not found.
    NotProxy (2)Sender is not a proxy of the account to be proxied.
    Unproxyable (3)A call which is incompatible with the proxy type's filter was attempted.
    Duplicate (4)Account is already a proxy.
    NoPermission (5)Call may not be made by proxy because it may escalate its privileges.
    Unannounced (6)Announcement, if made at all, was made too recently.
    Multisig (30)
    MinimumThreshold (0)Threshold must be 2 or greater.
    AlreadyApproved (1)Call is already approved by this signatory.
    NoApprovalsNeeded (2)Call doesn't need any (more) approvals.
    TooFewSignatories (3)There are too few signatories in the list.
    TooManySignatories (4)There are too many signatories in the list.
    SignatoriesOutOfOrder (5)The signatories were provided out of order; they should be ordered.
    SenderInSignatories (6)The sender was contained in the other signatories; it shouldn't be.
    NotFound (7)Multisig operation not found when attempting to cancel.
    NotOwner (8)Only the account that originally created the multisig is able to cancel it.
    NoTimepoint (9)No timepoint was given, yet the multisig operation is already underway.
    WrongTimepoint (10)A different timepoint was given to the multisig operation that is underway.
    UnexpectedTimepoint (11)A timepoint was given, yet no multisig operation is underway.
    WeightTooLow (12)The maximum weight information provided was too low.
    AlreadyStored (13)The data to be stored is already stored.
    - + \ No newline at end of file diff --git a/docs/maintain-guides-avoid-slashing.html b/docs/maintain-guides-avoid-slashing.html index 72606083a6b4..ff1e7044ea46 100644 --- a/docs/maintain-guides-avoid-slashing.html +++ b/docs/maintain-guides-avoid-slashing.html @@ -19,7 +19,7 @@ - + @@ -68,7 +68,7 @@ obtain pristine binaries or source code and to ensure the security of their node:

    1. Always download either source files or binaries from the official Parity repository
    2. Verify the hash of downloaded files.
    3. Use the W3F secure validator setup or adhere to its principles
    4. Ensure essential security items are checked, use a firewall, manage user access, use SSH certificates
    5. Avoid using your server as a general-purpose system. Hosting a validator on your workstation or one that hosts other services increases the risk of maleficence.

    Examples

    NetworkEraEvent TypeDetailsAction Taken
    Polkadot774Small EquivocationThe validator migrated servers and cloned the keystore folder. The on-chain event can be viewed here.The validator did not submit a request for the slash to be canceled.
    Kusama3329Small EquivocationThe validator operated a test machine with cloned keys; the test machine was online at the same time as the primary, which resulted in a slash. Details can be found here.The validator requested a cancellation of the slash, but the council declined.
    Kusama3995Small EquivocationThe validator noticed several errors, after which the client crashed, and a slash was applied. The validator recorded all events and opened GitHub issues to allow for technical opinions to be shared. Details can be found here.The validator requested to cancel the slash. The council approved the request as they believed the error was not operator related.
    Kusama4543Medium UnresponsivenessA large amount of disputes flooded the network resulting in an application fault. The fault caused the client software to hang and as a result ~197 unique validators become unresponsive. Further details can be found here.The pending slash was cancelled and with runtime 9350 all lost nominations were restored. The application bug was addressed with client version 0.9.36
    - + \ No newline at end of file diff --git a/docs/maintain-guides-democracy.html b/docs/maintain-guides-democracy.html index d5583b5fd64f..302f0e9d5ae9 100644 --- a/docs/maintain-guides-democracy.html +++ b/docs/maintain-guides-democracy.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ a decimal integer. The bitfield stores both the conviction and aye/nay boolean, where the boolean is represented using the MSB of the byte. This would mean that the grouping of the 7 remaining bits is used to store the conviction.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-chill.html b/docs/maintain-guides-how-to-chill.html index 5040ffdc5328..951170a2ebb5 100644 --- a/docs/maintain-guides-how-to-chill.html +++ b/docs/maintain-guides-how-to-chill.html @@ -19,7 +19,7 @@ - + @@ -79,7 +79,7 @@ Polkadot is set to None eliminating the upper bound on the number of nominators on the network. Due to this, the chillOther extrinsic on Polkadot network has no effect as the chill threshold will never be met.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-join-council.html b/docs/maintain-guides-how-to-join-council.html index 4e24296e78b4..32b89fbcca53 100644 --- a/docs/maintain-guides-how-to-join-council.html +++ b/docs/maintain-guides-how-to-join-council.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,7 @@ the row "Members".

    council members list

    Now you are able to participate on the council by making motions or voting proposals. To join in on the active discussions, join the Polkadot Direction channel.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-monitor-your-node.html b/docs/maintain-guides-how-to-monitor-your-node.html index 495cdc44c6fc..a3cd2ab0329e 100644 --- a/docs/maintain-guides-how-to-monitor-your-node.html +++ b/docs/maintain-guides-how-to-monitor-your-node.html @@ -19,7 +19,7 @@ - + @@ -83,7 +83,7 @@ here. There are other interesting alerts you may find useful here.

    groups:
    - name: alert_rules
    rules:
    - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
    severity: critical
    annotations:
    summary: "Instance [{{ $labels.instance }}] down"
    description: "[{{ $labels.instance }}] of job [{{ $labels.job }}] has been down for more than 1 minute."

    Change the ownership of this file to prometheus instead of root by running:

    sudo chown prometheus:prometheus rules.yml

    To check the rules defined in the "rules.yml" is syntactically correct, run the following command:

    sudo -u prometheus promtool check rules rules.yml

    Finally, restart everything by running:

    sudo systemctl restart prometheus && sudo systemctl restart alertmanager

    Now if one of your target instances down, you will receive an alert on the AlertManager and Gmail like below.

    grafana-am-6

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-nominate-kusama.html b/docs/maintain-guides-how-to-nominate-kusama.html index 266d42e18585..1ee3fb54dd36 100644 --- a/docs/maintain-guides-how-to-nominate-kusama.html +++ b/docs/maintain-guides-how-to-nominate-kusama.html @@ -19,7 +19,7 @@ - + @@ -96,7 +96,7 @@ Polkascan. Also, you can verify the bonding state under the Staking page on the Polkadot-JS Apps Dashboard.

    Step 3. Nominate a validator

    To nominate a validator, you can execute the following command:

    polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate '["VALIDATOR_ADDRESS"]' --ws WS_ENDPOINT
    polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate '["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]' --ws wss://kusama-rpc.polkadot.io/

    After a few seconds, you should see the hash of the transaction and if you would like to verify the nomination status, you can check that on the Polkadot-JS UI as well.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-nominate-polkadot.html b/docs/maintain-guides-how-to-nominate-polkadot.html index 384ae8b11d42..97848d145273 100644 --- a/docs/maintain-guides-how-to-nominate-polkadot.html +++ b/docs/maintain-guides-how-to-nominate-polkadot.html @@ -19,7 +19,7 @@ - + @@ -67,7 +67,7 @@ Polkascan. Also, you can verify the bonding state under the Staking page on the Polkadot-JS Apps Dashboard.

    Step 3. Nominate a validator

    To nominate a validator, you can execute the following command:

    polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate '["VALIDATOR_ADDRESS"]' --ws WS_ENDPOINT
    polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate '["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]' --ws wss://rpc.polkadot.io

    After a few seconds, you should see the hash of the transaction, and if you would like to verify the nomination status, you can check that on the Polkadot-JS UI as well.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-stop-validating.html b/docs/maintain-guides-how-to-stop-validating.html index 46ce9fa35e40..bd3a9cd74237 100644 --- a/docs/maintain-guides-how-to-stop-validating.html +++ b/docs/maintain-guides-how-to-stop-validating.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ transfer your tokens.

    See Unbonding and Rebonding for more details.

    Unbond your tokens

    Unbonding your tokens can be done through the Network > Staking > Account actions page in PolkadotJS Apps by clicking the corresponding stash account dropdown and selecting "Unbond funds". This can also be done through the staking.unbond() extrinsic with the staking proxy account.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-systemd.html b/docs/maintain-guides-how-to-systemd.html index efbe3282b97c..ded79482553c 100644 --- a/docs/maintain-guides-how-to-systemd.html +++ b/docs/maintain-guides-how-to-systemd.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ not recognize votes that didn't make it to disk, and will then cast conflicting votes. Delaying the restart will allow the network to progress past potentially conflicting votes, at which point other nodes will not accept them.

    To enable this to autostart on bootup run:

    systemctl enable polkadot-validator.service

    Start it manually with:

    systemctl start polkadot-validator.service

    You can check that it's working with:

    systemctl status polkadot-validator.service

    You can tail the logs with journalctl like so:

    journalctl -f -u polkadot-validator
    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-upgrade.html b/docs/maintain-guides-how-to-upgrade.html index 7367ca4a6c49..232949ab5453 100644 --- a/docs/maintain-guides-how-to-upgrade.html +++ b/docs/maintain-guides-how-to-upgrade.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ Validator A.
  • Take note of the Session that this extrinsic was executed in.
  • Again, it is imperative that Validator B is kept running until the current session finishes and two further full sessions have elapsed.

    Once this time has elapsed, Validator A will take over. You can safely stop Validator B.

    NOTE: To verify that the Session has changed, make sure that a block in the new Session is finalized. You should see log messages like the ones below to confirm the change:

    2019-10-28 21:44:13 Applying authority set change scheduled at block #450092
    2019-10-28 21:44:13 Applying GRANDPA set change to new set with 20 authorities
    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-validate-kusama.html b/docs/maintain-guides-how-to-validate-kusama.html index fdebe07acb7c..c12e139bee5b 100644 --- a/docs/maintain-guides-how-to-validate-kusama.html +++ b/docs/maintain-guides-how-to-validate-kusama.html @@ -19,7 +19,7 @@ - + @@ -68,7 +68,7 @@ validator payout document.

    Run a Kusama Validator

    Running a validator on the Kusama network is identical to running a Polkadot validator. Check out the Polkadot guide on how to setup a validator.

    Make sure to adjust the Polkadot guide to run a Kusama network validator (the instructions will also be available in the Polkadot Validator guide):

    • When starting the node pass --chain=kusama CLI flag
    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-validate-polkadot.html b/docs/maintain-guides-how-to-validate-polkadot.html index e64b21bec55e..ff48581bd4ea 100644 --- a/docs/maintain-guides-how-to-validate-polkadot.html +++ b/docs/maintain-guides-how-to-validate-polkadot.html @@ -19,7 +19,7 @@ - + @@ -259,7 +259,7 @@ instance, Digital Ocean lists "Mining of Cryptocurrencies" under the Network Abuse section of their Acceptable Use Policy and requires explicit permission to do so. This may extend to other cryptocurrency activity.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-vote-councillor.html b/docs/maintain-guides-how-to-vote-councillor.html index 5351f4231faa..0e1aca249f3f 100644 --- a/docs/maintain-guides-how-to-vote-councillor.html +++ b/docs/maintain-guides-how-to-vote-councillor.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,7 @@ Polkadot-JS Apps Dashboard.

    Under the "Council overview" tab, click on "Vote".

    polkadotjs_removeVoter

    Issue the "Unvote all" option.

    When the transaction is included in a block you should have your reserved tokens made liquid again and your vote will no longer be counting for any councillors in the elections starting in the next term.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-polkadot-opengov.html b/docs/maintain-guides-polkadot-opengov.html index 14954b6f0505..aa349040889c 100644 --- a/docs/maintain-guides-polkadot-opengov.html +++ b/docs/maintain-guides-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -144,7 +144,7 @@ If you like to use Polkadot-JS UI for performing multi-role delegation, the instructions are available here.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-secure-validator.html b/docs/maintain-guides-secure-validator.html index 75e554367473..0c1ba86c2bda 100644 --- a/docs/maintain-guides-secure-validator.html +++ b/docs/maintain-guides-secure-validator.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,7 @@ hardware. The provisioning of the validator machine should be automated and defined in code. This code should be kept in private version control, reviewed, audited, and tested.

  • Session keys should be generated and provided in a secure way.

  • Polkadot should be started at boot and restarted if stopped for any reason (supervisor process).

  • Polkadot should run as a non-root user.

  • Monitoring

    • There should be an on-call rotation for managing the alerts.

    • There should be a clear protocol with actions to perform for each level of each alert and an escalation policy.

    Resources

    - + \ No newline at end of file diff --git a/docs/maintain-guides-society-kusama.html b/docs/maintain-guides-society-kusama.html index 0a4c79882382..952a6629552f 100644 --- a/docs/maintain-guides-society-kusama.html +++ b/docs/maintain-guides-society-kusama.html @@ -19,7 +19,7 @@ - + @@ -93,7 +93,7 @@ extrinsic's parameters go to Element 1 ("proposal") -> "value" -> "params" -> Element 2 ("rules") and copy the value corresponding to the key "value". You can use a hex-to-UTF8 converter to then display the text. Note that the text is formatted with Markdown.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-validator-community.html b/docs/maintain-guides-validator-community.html index 93904c199a79..fd7f01ff17db 100644 --- a/docs/maintain-guides-validator-community.html +++ b/docs/maintain-guides-validator-community.html @@ -19,7 +19,7 @@ - + @@ -163,7 +163,7 @@ monitoring, observability services, staking dashboards, wallets, command-line utilities, or porting implementations to other languages. Additionally, this may also be eligible to be funded via a Web3 Foundation Grant.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-validator-payout.html b/docs/maintain-guides-validator-payout.html index 8e314dcf5c3f..440fbc334a4a 100644 --- a/docs/maintain-guides-validator-payout.html +++ b/docs/maintain-guides-validator-payout.html @@ -19,7 +19,7 @@ - + @@ -109,7 +109,7 @@ brackets ([]) next to each validator. Note that since the validator payment is public knowledge, having a low or non-existent validator payment may attract more stake from nominators, since they know they will receive a larger reward.

    Validator Set Size (v): 4
    Validator 1 Stake (v1) [20% commission]: 18 DOT (9 validator, 9 nominator)
    Validator 2 Stake (v2) [40% commission]: 9 DOT (3 validator, 6 nominator)
    Validator 3 Stake (v3) [10% commission]: 8 DOT (4 validator, 4 nominator)
    Validator 4 Stake (v4) [ 0% commission]: 6 DOT (1 validator, 5 nominator)
    Payout (p): 8 DOT

    Payout for each validator (v1 - v4):
    p / v = 8 / 4 = 2 DOT

    v1:
    (0.2 * 2) = 0.4 DOT -> validator payment
    (2 - 0.4) = 1.6 -> shared between all stake
    (9 / 18) * 1.6 = 0.8 -> validator stake share
    (9 / 18) * 1.6 = 0.8 -> nominator stake share
    v1 validator total reward: 0.4 + 0.8 = 1.2 DOT
    v1 nominator reward: 0.8 DOT

    v2:
    (0.4 * 2) = 0.8 DOT -> validator payment
    (2 - 0.8) = 1.2 -> shared between all stake
    (3 / 9) * 1.2 = 0.4 -> validator stake share
    (6 / 9) * 1.2 = 0.8 -> nominator stake share
    v2 validator total reward: 0.8 + 0.4 = 1.2 DOT
    v2 nominator reward: 0.8 DOT

    v3:
    (0.1 * 2) = 0.2 DOT -> validator payment
    (2 - 0.2) = 1.8 -> shared between all stake
    (4 / 8) * 1.8 = 0.9 -> validator stake share
    (4 / 8) * 1.8 = 0.9 -> nominator stake share
    v3 validator total reward: 0.2 + 0.9 DOT = 1.1 DOT
    v3 nominator reward: 0.9 DOT

    v4:
    (0 * 2) = 0 DOT -> validator payment
    (2 - 0) = 2.0 -> shared between all stake
    (1 / 6) * 2 = 0.33 -> validator stake share
    (5 / 6) * 2 = 1.67 -> nominator stake share
    v4 validator total reward: 0 + 0.33 DOT = 0.33 DOT
    v4 nominator reward: 1.67 DOT
    - + \ No newline at end of file diff --git a/docs/maintain-index.html b/docs/maintain-index.html index ff0e25c14f77..9f1655448c43 100644 --- a/docs/maintain-index.html +++ b/docs/maintain-index.html @@ -19,7 +19,7 @@ - + @@ -45,7 +45,7 @@ participate in governance.
  • How to join the Council - Step by step guide for running for the Council.
  • How to vote for a Councillor - Step by step guide for voting for your favorite councillors.
  • - + \ No newline at end of file diff --git a/docs/maintain-networks.html b/docs/maintain-networks.html index b7bbae0c9b50..8db794e9a92b 100644 --- a/docs/maintain-networks.html +++ b/docs/maintain-networks.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ the public Telemetry service.

    You can verify that your node is connected by navigating to the correct network on the dashboard and finding the name of your node.

    There is a built-in search function on the nodes page. Simply start typing keystrokes in the main window to make it available.

    - + \ No newline at end of file diff --git a/docs/maintain-polkadot-parameters.html b/docs/maintain-polkadot-parameters.html index fee0e0c85a59..e5ddd270d075 100644 --- a/docs/maintain-polkadot-parameters.html +++ b/docs/maintain-polkadot-parameters.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@

    PolkadotTimeSlotsDescription
    Term duration1 Day14_400The time for which a validator is in the set after being elected. Note, this duration can be shortened in the case that a validator misbehaves.
    Nomination period1 Day14_400How often a new validator set is elected according to Phragmén's method.
    Bonding duration28 days403_200How long until your funds will be transferrable after unbonding. Note that the bonding duration is defined in eras, not directly by slots.
    Slash defer duration28 days403_200Prevents overslashing and validators "escaping" and getting their nominators slashed with no repercussions to themselves. Note that the bonding duration is defined in eras, not directly by slots.

    Parachains

    Crowdloans and AuctionsTimeSlotsDescription
    Auction duration7 days100_800The total duration of the slot auction, subject to the candle auction mechanism.
    Opening period2 days28_800The opening period of the slot auction.
    Ending period5 days72_000The ending period of the slot auction.
    Parachain SlotTimeSlotsDescription
    Lease period12 weeks1_209_600The length of one lease period in a parachain slot.
    Total slot duration2 years10_512_000The maximum duration a parachain can lease by winning a slot auction (8 lease periods).

    Treasury

    TreasuryTimeSlotsDescription
    Periods between spends24 days345_600When the treasury can spend again after spending previously.

    Burn percentage is currently 1.00%.

    Precision

    DOT have 10 decimals of precision. In other words, 10 ** 10 (10_000_000_000 or ten billion) Plancks make up a DOT.

    The denomination of DOT was changed from 12 decimals of precision at block #1,248,328 in an event known as Denomination Day. See Redenomination for details.

    - + \ No newline at end of file diff --git a/docs/maintain-rpc.html b/docs/maintain-rpc.html index ec30fe9e6816..0c4e9bbff763 100644 --- a/docs/maintain-rpc.html +++ b/docs/maintain-rpc.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ node. Activate the "Development" toggle and input your node's address - either the domain or the IP address. Remember to prefix with wss://, and if you're using the 443 port, append :443 like so: wss://example.com:443.

    A sync-in-progress chain connected to Polkadot-JS UI

    Now you have a secure remote connect setup for your Substrate node.

    - + \ No newline at end of file diff --git a/docs/maintain-sync.html b/docs/maintain-sync.html index 5925f2122225..3f8ab24f3e2f 100644 --- a/docs/maintain-sync.html +++ b/docs/maintain-sync.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ on localhost by default. If you would like to connect to your node's services (rpc, and prometheus) you need to ensure that you run you node with the --rpc-external, and --prometheus-external commands.

    docker run -p 9944:9944 -p 9615:9615 parity/polkadot:v0.9.13 --name "calling_home_from_a_docker_container" --rpc-external --prometheus-external
    - + \ No newline at end of file diff --git a/docs/maintain-wss.html b/docs/maintain-wss.html index 38eb4151b214..36922fd3633d 100644 --- a/docs/maintain-wss.html +++ b/docs/maintain-wss.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,7 @@ node. Activate the "Development" toggle and input your node's address - either the domain or the IP address. Remember to prefix with wss:// and if you're using the 443 port, append :443, like so: wss://example.com:443.

    A sync-in-progress chain connected to Polkadot-JS UI

    Now you have a secure remote connect setup for your Substrate node.

    - + \ No newline at end of file diff --git a/docs/metadata.html b/docs/metadata.html index c573ca20d7ce..fd8f4ea51079 100644 --- a/docs/metadata.html +++ b/docs/metadata.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ The dropdown below allows you to update the chain selection to visualize. You can search all sub-categories using the provided search field. The information is categorized by the chains Pallets, RPC and Runtime information.

    - + \ No newline at end of file diff --git a/docs/polkadot-direction.html b/docs/polkadot-direction.html index d41cc0887e7a..e57049d0041f 100644 --- a/docs/polkadot-direction.html +++ b/docs/polkadot-direction.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ decentralizing the network is ensuring experts on which the maintenance of the system relies upon are incentivized and recruited over time by the Polkadot network and not by organizations within the Polkadot ecosystem. - + \ No newline at end of file diff --git a/docs/polkadot-v1.html b/docs/polkadot-v1.html index 8e6dea06db7d..15027f647bbd 100644 --- a/docs/polkadot-v1.html +++ b/docs/polkadot-v1.html @@ -19,7 +19,7 @@ - + @@ -109,7 +109,7 @@ could become.

    Polkadot is perfecting its implementation through RFCs to continue being a decentralized, secure, ubiquitous computing engine to power the next generation of Web3 applications.

    - + \ No newline at end of file diff --git a/docs/polkadot-vault.html b/docs/polkadot-vault.html index c5a52506350a..14f13ed1c8a5 100644 --- a/docs/polkadot-vault.html +++ b/docs/polkadot-vault.html @@ -19,7 +19,7 @@ - + @@ -89,7 +89,7 @@ this article for detailed instructions. If you choose this approach, you should trust the provider you choose.

    Advanced How-to Guides

    See the advanced guides for more information about how to add chain specification and do metadata updates yourself.

    - + \ No newline at end of file diff --git a/docs/polkadot-vision-index.html b/docs/polkadot-vision-index.html index ffb8853f89f7..d9a8e2608760 100644 --- a/docs/polkadot-vision-index.html +++ b/docs/polkadot-vision-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/polkadotjs-ui.html b/docs/polkadotjs-ui.html index 94cd55b5749e..4454159d3026 100644 --- a/docs/polkadotjs-ui.html +++ b/docs/polkadotjs-ui.html @@ -19,7 +19,7 @@ - + @@ -73,7 +73,7 @@ nomination pool settings (nomination and roles) and use non-transfer proxies, destroy assets, and much more.

    Beginner's Guide to Polkadot-JS

    - + \ No newline at end of file diff --git a/docs/polkadotjs.html b/docs/polkadotjs.html index 215a776da258..e2a81b667683 100644 --- a/docs/polkadotjs.html +++ b/docs/polkadotjs.html @@ -19,7 +19,7 @@ - + @@ -92,7 +92,7 @@ of spam prevention, whereas signed transactions are issued by the originator account of a transaction which contains a signature of that account, which will be subject to a fee to include it on the chain.

    - + \ No newline at end of file diff --git a/docs/programmes-index.html b/docs/programmes-index.html index 9caeb6591170..f6051778f4cb 100644 --- a/docs/programmes-index.html +++ b/docs/programmes-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/research.html b/docs/research.html index d34683d163c5..a2ef095aae80 100644 --- a/docs/research.html +++ b/docs/research.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ – Gives an outline of Nominated Proof of Stake in Polkadot. Author: Alfonzo Cevallos
  • Messaging Protocol Workshop Outcomes – An initiative to design and implement a privacy-preserving communication system for decentralized applications.
  • - + \ No newline at end of file diff --git a/docs/staking-dashboard.html b/docs/staking-dashboard.html index fde4f7cf7389..c96966b2a723 100644 --- a/docs/staking-dashboard.html +++ b/docs/staking-dashboard.html @@ -19,7 +19,7 @@ - + @@ -157,7 +157,7 @@ feature request. We take your feedback seriously, do not hesitate to contact us.

    Network

    Under Network, you can connect to either Polkadot, Kusama, or Westend through public RPC nodes or light clients for a true Web3 experience. For more information about light clients, see this page.

    - + \ No newline at end of file diff --git a/docs/start-building.html b/docs/start-building.html index c1e85ff0fa7d..70552b6e188d 100644 --- a/docs/start-building.html +++ b/docs/start-building.html @@ -19,7 +19,7 @@ - + @@ -38,7 +38,7 @@ code for the Agile Coretime Broker pallet was added to the Substrate FRAME system.

    Polkadot SDK

    info

    For more information about building on Polkadot, see the Builder's Guide.

    The Polkadot Software Development Kit (SDK) includes all the tools needed to build on the Polkadot ecosystem. The main repositories include:

    The programming language used for development is Rust.

    - + \ No newline at end of file diff --git a/docs/stay-safe-index.html b/docs/stay-safe-index.html index 767a9eb1dd90..74e2ff76bbfd 100644 --- a/docs/stay-safe-index.html +++ b/docs/stay-safe-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/thousand-contributors.html b/docs/thousand-contributors.html index 250ac3d08085..36368f6520a6 100644 --- a/docs/thousand-contributors.html +++ b/docs/thousand-contributors.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ the account shared with us.

    Submission reviews

    The review process follows the present pipeline in the 1KC public GitHub project.

    Learn more about the program and its components on the official 1KC repository

    - + \ No newline at end of file diff --git a/docs/thousand-validators.html b/docs/thousand-validators.html index 99b70a678596..cc040feed4e0 100644 --- a/docs/thousand-validators.html +++ b/docs/thousand-validators.html @@ -19,7 +19,7 @@ - + @@ -87,7 +87,7 @@ things time to resolve; if they don't, leave a message in the dedicated matrix room or open an issue on GitHub.
  • The 1000 validators website is not up to date? See these resources for more up-to-date information.
  • Resources

    To extract and display the 1KV Program scores there are various tools listed below.

    ResourceGithub sourceInfo
    Main 1KV sitegithubMain site and 1KV backend.
    SubVT telegram bot for polkadot and kusamagithubTelegram bot with overviews and alerts for various polkadot and kusama related events, including 1KV events.
    SubVT ios and android appgithubSubVT app version for mobile phones.
    Validator earnings overviewgithubOverview of validators' earnings.
    Math Crypto's Insightsgithub1KV-oriented scoring overview of Kusama and Polkadot.
    One-T for polkadot and kusamagithubA performance report bot for the Polkadot and Kusama network with special focus on the 1KV programme.
    One-T parachains overviewgithubOne-T's parachain overview.
    Metaspan's 1KV overviewgithubOverview of 1KV programme, including the newly introduced endpoints, see here for available endpoints.
    Decentradot's 1KV overviewgithubOverview of the 1KV programme, including the newly introduced endpoints.
    Hirish 1KV overviewgithub?Overview of the 1KV Programme.
    - + \ No newline at end of file diff --git a/docs/wallets-and-extensions.html b/docs/wallets-and-extensions.html index 53f735dfceea..5397232bff98 100644 --- a/docs/wallets-and-extensions.html +++ b/docs/wallets-and-extensions.html @@ -19,7 +19,7 @@ - + @@ -89,7 +89,7 @@ your accounts on over 150+ Substrate and EVM networks. NFT Management, ledger Support, fiat On-ramp, portfolio tracking. Talisman received funding from Polkadot Treasury [1].

    - + \ No newline at end of file diff --git a/docs/wallets-index.html b/docs/wallets-index.html index 4f4af664969c..bccc4329f362 100644 --- a/docs/wallets-index.html +++ b/docs/wallets-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/web3-and-polkadot.html b/docs/web3-and-polkadot.html index e66f8b7e444f..6cbee86c87a6 100644 --- a/docs/web3-and-polkadot.html +++ b/docs/web3-and-polkadot.html @@ -19,7 +19,7 @@ - + @@ -148,7 +148,7 @@ all blockchains attached to it. For more information, see the Polkadot 1.0 page and the section about XCM and Accords in Polkadot Direction page.

    - + \ No newline at end of file diff --git a/index.html b/index.html index 22ac7df4e252..2a1cf4174838 100644 --- a/index.html +++ b/index.html @@ -19,13 +19,13 @@ - +

    Learn about Polkadot’s canary network Kusama

    Kusama is Polkadot’s “canary network”, a scalable, multi-chain network for radical innovation and early stage Polkadot deployments. For developers, Kusama is a proving ground for all things Polkadot I.e runtime upgrades, on-chain governance, parachains, parathreads, etc.

    language

    Help improve this wiki

    This wiki was started by and is maintained by Web3 Foundation. It is an open-source-ish project and aims to be the most extensive resource of knowledge on Polkadot and the Polkadot ecosystem.

    - + \ No newline at end of file diff --git a/search.html b/search.html index 681713d89e27..2761ee0164d7 100644 --- a/search.html +++ b/search.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file